{"version":3,"file":"app/main.edf21da5d8df5a657def.js","mappings":"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5D,8BAAgC,EAChC,EAAA95H,sBAAwB,GACxB,EAAA80L,qBAAuB,IAAI97L,IAAyB,CAClE,CAAC,aAAc,IAAIovG,IAAI,CAAC,yBAiiB5BgqF,EAAMnmJ,M,gDCrkBC,MAAM8oJ,EAAkB,CAC7B,SACA,UACA,YACA,QACA,UACA,UACA,SACA,OACA,WACA,WACA,WACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,WACA,WACA,UACA,UACA,WACA,SACA,SACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,WACA,UACA,OACA,UACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,OACA,UACA,YACA,WACA,WACA,UACA,YACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,SACA,QACA,YACA,WACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,YACA,YACA,YACA,YACA,YACA,OACA,UACA,SACA,SACA,QACA,YACA,SACA,QACA,UACA,QACA,WACA,UACA,YACA,QACA,YACA,YACA,SACA,WACA,YACA,UACA,QACA,OACA,OACA,OACA,MACA,OACA,YACA,QACA,YACA,QACA,UACA,UACA,YACA,QACA,QACA,YACA,WACA,SACA,QACA,QACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,QACA,QACA,YACA,QACA,WACA,UACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,QACA,YACA,QACA,WACA,YACA,YACA,WACA,YACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,WACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,SACA,WACA,SACA,YACA,SACA,UACA,WACA,YACA,UACA,YACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,WACA,OACA,YACA,UACA,QACA,SACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,YACA,YACA,WACA,QACA,YACA,QACA,QACA,WACA,YACA,WACA,WACA,UACA,WACA,UACA,YACA,UACA,YACA,WACA,WACA,WACA,SACA,UACA,YACA,WACA,SACA,WACA,WACA,YACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,SACA,UACA,QACA,QACA,UACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,WACA,QACA,SACA,UACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,QACA,YACA,YACA,UACA,QACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,WACA,QACA,OACA,WACA,YACA,YACA,WACA,OACA,QACA,WACA,WACA,QACA,QACA,YACA,UACA,WACA,QACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,OACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,MACA,SACA,YACA,SACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,YACA,SACA,WACA,QACA,OACA,WACA,OACA,SACA,YACA,UACA,SACA,SACA,UACA,YACA,WACA,YACA,YACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,UACA,WACA,QACA,WACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,OACA,SACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,SACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,WACA,YACA,UACA,UACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,YACA,SACA,WACA,WACA,YACA,WACA,QACA,WACA,YACA,SACA,QACA,UACA,QACA,UACA,SACA,WACA,QACA,SACA,UACA,SACA,SACA,YACA,UACA,QACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,SACA,OACA,YACA,UACA,YACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,OACA,YACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,QACA,OACA,YACA,WACA,YACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,YACA,QACA,YACA,YACA,QACA,WACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,QACA,QACA,WACA,QACA,QACA,UACA,UACA,WACA,SACA,OACA,WACA,QACA,WACA,UACA,WACA,OACA,OACA,WACA,WACA,UACA,OACA,SACA,UACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,QACA,WACA,UACA,WACA,WACA,OACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,OACA,SACA,SACA,QACA,OACA,MACA,UACA,OACA,UACA,SACA,UACA,WACA,QACA,WACA,WACA,WACA,QACA,UACA,SACA,SACA,QACA,OACA,YACA,YACA,OACA,YACA,SACA,QACA,SACA,UACA,WACA,UACA,QACA,QACA,QACA,SACA,UACA,WACA,YACA,OACA,YACA,WACA,SACA,QACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,YACA,YACA,SACA,SACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,YACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,QACA,QACA,QACA,QACA,UACA,UACA,SACA,YACA,OACA,QACA,QACA,UACA,UACA,YACA,UACA,UACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,WACA,QACA,QACA,UACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,QACA,QACA,WACA,QACA,YACA,SACA,WACA,SACA,YACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,UACA,QACA,OACA,QACA,YACA,SACA,OACA,UACA,YACA,YACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,QACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,QACA,OACA,SACA,OACA,SACA,UACA,OACA,WACA,OACA,SACA,UACA,SACA,YACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,WACA,UACA,OACA,UACA,OACA,WACA,WACA,UACA,YACA,WACA,UACA,YACA,OACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,UACA,UACA,WACA,OACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,UACA,YACA,UACA,YACA,UACA,UACA,QACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,YACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,UACA,UACA,WACA,UACA,YACA,WACA,YACA,QACA,YACA,YACA,UACA,UACA,UACA,SACA,YACA,QACA,SACA,WACA,SACA,UACA,YACA,YACA,QACA,UACA,UACA,UACA,OACA,OACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,YACA,WACA,UACA,SACA,SACA,SACA,UACA,YACA,SACA,QACA,UACA,YACA,SACA,SACA,YACA,QACA,UACA,YACA,UACA,WACA,WACA,UACA,SACA,SACA,QACA,SACA,YACA,WACA,WACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,QACA,QACA,UACA,YACA,UACA,YACA,WACA,SACA,SACA,UACA,QACA,QACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,WACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,WACA,WACA,WACA,UACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,SACA,OACA,YACA,UACA,QACA,YACA,SACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,QACA,YACA,YACA,YACA,WACA,YACA,YACA,QACA,QACA,QACA,OACA,WACA,SACA,WACA,WACA,QACA,WACA,WACA,SACA,YACA,UACA,QACA,UACA,WACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,QACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,SACA,OACA,QACA,QACA,OACA,QACA,WACA,SACA,SACA,QACA,YACA,QACA,WACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,OACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,SACA,WACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,YACA,QACA,WACA,SACA,SACA,YACA,SACA,UACA,QACA,YACA,UACA,UACA,WACA,YACA,YACA,OACA,WACA,SACA,UACA,SACA,QACA,UACA,MACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,OACA,OACA,OACA,OACA,WACA,WACA,UACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,SACA,WACA,OACA,OACA,OACA,UACA,QACA,QACA,SACA,QACA,WACA,UACA,UACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,QACA,YACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,YACA,YACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,YACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,UACA,YACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,OACA,WACA,YACA,UACA,SACA,SACA,SACA,YACA,YACA,WACA,WACA,YACA,QACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,OACA,UACA,SACA,QACA,QACA,QACA,YACA,YACA,WACA,YACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,YACA,SACA,QACA,YACA,QACA,UACA,UACA,QACA,QACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,WACA,WACA,SACA,QACA,QACA,SACA,QACA,QACA,WACA,UACA,WACA,YACA,UACA,WACA,UACA,WACA,OACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,QACA,QACA,UACA,UACA,YACA,UACA,YACA,UACA,QACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,UACA,UACA,WACA,QACA,OACA,SACA,UACA,UACA,YACA,OACA,UACA,UACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,YACA,WACA,UACA,YACA,UACA,QACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,YACA,UACA,QACA,QACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,QACA,QACA,QACA,OACA,SACA,UACA,YACA,UACA,YACA,WACA,YACA,UACA,MACA,QACA,SACA,UACA,UACA,WACA,SACA,YACA,YACA,MACA,MACA,WACA,SACA,QACA,WACA,SACA,QACA,QACA,WACA,QACA,UACA,YACA,SACA,WACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,WACA,YACA,UACA,WACA,WACA,UACA,OACA,OACA,YACA,OACA,YACA,OACA,WACA,SACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,WACA,SACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,YACA,SACA,WACA,QACA,UACA,WACA,SACA,QACA,SACA,SACA,QACA,QACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,WACA,OACA,WACA,UACA,SACA,YACA,YACA,YACA,QACA,WACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,SACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,SACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,QACA,WACA,UACA,UACA,SACA,SACA,OACA,WACA,YACA,WACA,SACA,YACA,QACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,QACA,SACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,UACA,OACA,YACA,YACA,WACA,YACA,SACA,UACA,YACA,WACA,SACA,SACA,SACA,WACA,YACA,YACA,UACA,UACA,QACA,WACA,SACA,SACA,WACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,WACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,QACA,UACA,WACA,UACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,OACA,WACA,SACA,YACA,QACA,OACA,SACA,UACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,MACA,WACA,YACA,WACA,OACA,SACA,OACA,WACA,QACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,SACA,WACA,WACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,WACA,OACA,YACA,UACA,OACA,UACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,QACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,WACA,SACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,QACA,SACA,SACA,OACA,WACA,WACA,QACA,QACA,QACA,QACA,OACA,SACA,YACA,SACA,QACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,QACA,QACA,SACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,UACA,QACA,OACA,YACA,SACA,SACA,OACA,SACA,WACA,SACA,OACA,OACA,QACA,OACA,OACA,WACA,YACA,YACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,YACA,QACA,UACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,SACA,QACA,OACA,UACA,QACA,QACA,QACA,UACA,WACA,YACA,WACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,QACA,QACA,QACA,YACA,UACA,WACA,UACA,UACA,UACA,QACA,QACA,WACA,SACA,OACA,MACA,SACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,SACA,WACA,OACA,UACA,WACA,WACA,MACA,OACA,SACA,YACA,YACA,UACA,UACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,QACA,QACA,QACA,UACA,UACA,WACA,UACA,YACA,UACA,WACA,UACA,WACA,WACA,OACA,QACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,SACA,UACA,QACA,UACA,SACA,WACA,SACA,YACA,YACA,SACA,WACA,UACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,YACA,OACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,YACA,OACA,WACA,SACA,OACA,UACA,SACA,WACA,YACA,WACA,MACA,YACA,UACA,YACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,UACA,SACA,QACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,SACA,MACA,WACA,WACA,YACA,QACA,UACA,SACA,MACA,UACA,WACA,MACA,YACA,QACA,YACA,WACA,YACA,QACA,UACA,QACA,QACA,UACA,SACA,UACA,YACA,YACA,QACA,WACA,UACA,SACA,SACA,WACA,SACA,YACA,QACA,UACA,YACA,WACA,OACA,QACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,YACA,QACA,MACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,SACA,SACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,YACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,UACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,WACA,QACA,OACA,SACA,OACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,UACA,QACA,SACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,QACA,QACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,SACA,WACA,WACA,YACA,YACA,WACA,UACA,UACA,WACA,UACA,QACA,YACA,SACA,YACA,WACA,UACA,QACA,WACA,YACA,YACA,UACA,UACA,OACA,YACA,YACA,YACA,WACA,WACA,QACA,WACA,UACA,OACA,QACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,SACA,UACA,SACA,QACA,WACA,OACA,SACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,YACA,YACA,YACA,QACA,SACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,SACA,WACA,SACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,OACA,SACA,UACA,SACA,OACA,QACA,UACA,OACA,WACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,UACA,WACA,SACA,UACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,MACA,QACA,UACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,QACA,QACA,UACA,SACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,WACA,QACA,UACA,SACA,WACA,SACA,SACA,SACA,UACA,OACA,SACA,QACA,WACA,SACA,WACA,WACA,UACA,UACA,YACA,QACA,WACA,QACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,MACA,OACA,UACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,QACA,QACA,YACA,UACA,WACA,WACA,OACA,UACA,YACA,YACA,YACA,WACA,WACA,SACA,QACA,UACA,WACA,SACA,WACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,OACA,UACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,QACA,WACA,OACA,SACA,UACA,QACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,OACA,MACA,MACA,OACA,QACA,OACA,WACA,SACA,WACA,SACA,WACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,WACA,WACA,UACA,YACA,WACA,YACA,WACA,QACA,QACA,UACA,UACA,YACA,SACA,UACA,QACA,WACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,SACA,YACA,WACA,YACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,WACA,SACA,YACA,WACA,QACA,UACA,UACA,WACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,QACA,SACA,UACA,QACA,UACA,YACA,SACA,OACA,QACA,YACA,UACA,WACA,WACA,YACA,SACA,QACA,QACA,SACA,WACA,YACA,WACA,QACA,YACA,SACA,MACA,QACA,MACA,YACA,UACA,QACA,OACA,YACA,WACA,UACA,SACA,SACA,UACA,YACA,SACA,YACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,MACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,MACA,WACA,YACA,SACA,UACA,WACA,QACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,WACA,WACA,QACA,UACA,YACA,SACA,QACA,YACA,WACA,YACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,YACA,WACA,YACA,UACA,YACA,UACA,UACA,UACA,QACA,QACA,YACA,SACA,UACA,YACA,QACA,OACA,WACA,YACA,WACA,SACA,WACA,SACA,SACA,SACA,QACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,UACA,UACA,UACA,QACA,YACA,SACA,YACA,UACA,SACA,WACA,YACA,QACA,UACA,QACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,QACA,QACA,QACA,UACA,WACA,UACA,OACA,SACA,YACA,UACA,SACA,OACA,OACA,WACA,OACA,UACA,QACA,WACA,WACA,YACA,OACA,UACA,QACA,UACA,OACA,OACA,OACA,QACA,WACA,YACA,QACA,SACA,OACA,SACA,OACA,SACA,WACA,OACA,UACA,SACA,SACA,SACA,OACA,OACA,OACA,WACA,YACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,UACA,WACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,QACA,WACA,QACA,QACA,UACA,YACA,QACA,QACA,YACA,UACA,UACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,QACA,OACA,UACA,WACA,WACA,YACA,SACA,QACA,UACA,WACA,OACA,YACA,OACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,OACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,UACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,OACA,WACA,QACA,OACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,OACA,OACA,QACA,QACA,UACA,OACA,SACA,MACA,UACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,UACA,UACA,MACA,UACA,QACA,OACA,UACA,OACA,SACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,YACA,SACA,QACA,YACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,WACA,QACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,UACA,QACA,UACA,OACA,SACA,QACA,UACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,WACA,WACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,OACA,QACA,UACA,YACA,UACA,QACA,UACA,YACA,QACA,SACA,SACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,QACA,WACA,QACA,SACA,SACA,YACA,QACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,WACA,OACA,MACA,OACA,OACA,OACA,QACA,SACA,WACA,SACA,QACA,YACA,WACA,UACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,SACA,YACA,YACA,SACA,WACA,SACA,OACA,SACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,SACA,YACA,MACA,SACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,UACA,QACA,OACA,OACA,MACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,QACA,OACA,QACA,WACA,SACA,SACA,YACA,WACA,WACA,QACA,YACA,WACA,UACA,WACA,UACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,YACA,UACA,WACA,YACA,YACA,WACA,SACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,SACA,SACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,UACA,QACA,UACA,YACA,UACA,OACA,YACA,SACA,QACA,MACA,MACA,SACA,SACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,MACA,UACA,UACA,SACA,UACA,UACA,WACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,YACA,OACA,OACA,YACA,UACA,QACA,SACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,OACA,UACA,UACA,MACA,SACA,YACA,SACA,UACA,OACA,UACA,WACA,WACA,YACA,QACA,OACA,MACA,SACA,WACA,YACA,SACA,UACA,WACA,YACA,WACA,QACA,YACA,WACA,YACA,OACA,SACA,WACA,UACA,QACA,YACA,QACA,UACA,UACA,OACA,SACA,QACA,OACA,WACA,WACA,OACA,SACA,UACA,SACA,UACA,WACA,SACA,QACA,OACA,UACA,YACA,UACA,SACA,WACA,WACA,QACA,WACA,UACA,SACA,QACA,QACA,SACA,WACA,OACA,MACA,OACA,SACA,OACA,WACA,WACA,SACA,OACA,OACA,WACA,WACA,YACA,WACA,OACA,SACA,SACA,WACA,SACA,WACA,UACA,UACA,UACA,OACA,UACA,UACA,YACA,WACA,SACA,UACA,UACA,OACA,SACA,QACA,OACA,UACA,WACA,OACA,QACA,WACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,UACA,WACA,SACA,UACA,SACA,OACA,OACA,QACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,SACA,WACA,SACA,WACA,OACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,OACA,UACA,SACA,YACA,UACA,QACA,OACA,SACA,OACA,OACA,UACA,SACA,UACA,YACA,WACA,SACA,UACA,QACA,WACA,SACA,WACA,YACA,YACA,SACA,UACA,YACA,UACA,UACA,WACA,MACA,OACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,SACA,QACA,QACA,OACA,OACA,UACA,YACA,QACA,QACA,UACA,WACA,OACA,QACA,WACA,WACA,SACA,SACA,WACA,UACA,OACA,OACA,MACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,SACA,SACA,SACA,UACA,QACA,SACA,QACA,YACA,UACA,SACA,SACA,YACA,YACA,QACA,UACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,SACA,YACA,WACA,YACA,UACA,UACA,SACA,QACA,WACA,WACA,YACA,YACA,OACA,QACA,OACA,YACA,OACA,SACA,WACA,SACA,YACA,UACA,YACA,WACA,QACA,YACA,SACA,QACA,YACA,WACA,WACA,SACA,WACA,WACA,QACA,OACA,UACA,YACA,WACA,UACA,SACA,UACA,WACA,QACA,YACA,WACA,YACA,YACA,YACA,UACA,YACA,WACA,WACA,SACA,WACA,UACA,YACA,WACA,WACA,QACA,YACA,SACA,YACA,OACA,OACA,SACA,UACA,YACA,UACA,WACA,UACA,WACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,YACA,UACA,UACA,UACA,YACA,WACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,SACA,UACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,WACA,YACA,UACA,UACA,WACA,QACA,QACA,YACA,YACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,YACA,SACA,UACA,SACA,QACA,YACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,UACA,WACA,SACA,UACA,UACA,UACA,YACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,OACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,WACA,WACA,QACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,QACA,SACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,YACA,WACA,QACA,WACA,OACA,YACA,WACA,WACA,UACA,MACA,YACA,SACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,YACA,YACA,YACA,WACA,MACA,SACA,WACA,UACA,YACA,WACA,WACA,WACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,OACA,WACA,YACA,SACA,WACA,YACA,SACA,YACA,QACA,QACA,YACA,WACA,UACA,WACA,UACA,WACA,QACA,YACA,YACA,QACA,QACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,OACA,MACA,MACA,WACA,QACA,OACA,SACA,UACA,WACA,WACA,YACA,YACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,WACA,UACA,YACA,SACA,QACA,YACA,QACA,YACA,WACA,SACA,UACA,YACA,WACA,QACA,QACA,SACA,YACA,QACA,UACA,UACA,SACA,YACA,QACA,UACA,SACA,WACA,OACA,YACA,YACA,SACA,OACA,SACA,SACA,SACA,UACA,YACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,QACA,YACA,OACA,SACA,SACA,UACA,QACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,WACA,SACA,WACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,UACA,OACA,SACA,OACA,UACA,QACA,OACA,MACA,YACA,SACA,WACA,WACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,QACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,WACA,YACA,QACA,SACA,QACA,MACA,MACA,QACA,MACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,YACA,OACA,UACA,YACA,YACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,SACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,OACA,MACA,OACA,WACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,WACA,OACA,WACA,UACA,WACA,UACA,QACA,SACA,WACA,OACA,WACA,QACA,UACA,YACA,UACA,OACA,SACA,OACA,OACA,OACA,OACA,UACA,OACA,OACA,WACA,UACA,YACA,YACA,YACA,WACA,QACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,MACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,YACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,OACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,MACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,SACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,QACA,WACA,OACA,YACA,QACA,UACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,YACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,YACA,SACA,WACA,YACA,OACA,WACA,UACA,QACA,YACA,UACA,SACA,YACA,YACA,SACA,WACA,QACA,YACA,WACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,SACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,UACA,SACA,OACA,SACA,WACA,UACA,SACA,UACA,UACA,YACA,WACA,UACA,YACA,QACA,SACA,UACA,WACA,YACA,MACA,WACA,UACA,QACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,QACA,OACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,YACA,SACA,YACA,QACA,SACA,WACA,QACA,YACA,SACA,YACA,YACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,UACA,UACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,UACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,YACA,WACA,QACA,WACA,QACA,SACA,YACA,SACA,WACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,UACA,WACA,SACA,OACA,YACA,UACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,SACA,WACA,QACA,OACA,YACA,UACA,YACA,UACA,SACA,OACA,OACA,UACA,OACA,SACA,SACA,QACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,WACA,WACA,SACA,YACA,WACA,UACA,SACA,WACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,UACA,UACA,QACA,SACA,WACA,QACA,UACA,OACA,WACA,YACA,UACA,QACA,SACA,MACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,YACA,UACA,SACA,WACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,SACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,UACA,SACA,YACA,YACA,YACA,SACA,UACA,YACA,UACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,SACA,YACA,WACA,QACA,SACA,YACA,UACA,UACA,SACA,QACA,WACA,QACA,QACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,YACA,WACA,WACA,YACA,QACA,UACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,QACA,YACA,SACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,UACA,YACA,WACA,SACA,YACA,YACA,WACA,WACA,QACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,QACA,YACA,QACA,UACA,MACA,UACA,SACA,YACA,SACA,SACA,MACA,OACA,YACA,OACA,UACA,QACA,YACA,OACA,SACA,SACA,QACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,SACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,QACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,WACA,YACA,OACA,QACA,YACA,WACA,UACA,WACA,WACA,YACA,SACA,YACA,UACA,WACA,UACA,SACA,QACA,UACA,OACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,QACA,WACA,QACA,UACA,YACA,YACA,UACA,UACA,QACA,UACA,UACA,SACA,YACA,YACA,WACA,UACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,QACA,QACA,QACA,UACA,YACA,QACA,OACA,SACA,YACA,WACA,YACA,QACA,QACA,OACA,SACA,SACA,OACA,SACA,QACA,SACA,WACA,YACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,SACA,OACA,SACA,QACA,SACA,WACA,OACA,SACA,QACA,YACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,SACA,SACA,OACA,UACA,SACA,QACA,SACA,SACA,UACA,YACA,WACA,QACA,YACA,WACA,WACA,UACA,WACA,OACA,YACA,WACA,UACA,YACA,YACA,YACA,WACA,SACA,WACA,WACA,WACA,UACA,YACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,YACA,SACA,SACA,SACA,SACA,YACA,YACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,UACA,WACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,UACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,UACA,SACA,WACA,YACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,UACA,WACA,WACA,QACA,QACA,UACA,UACA,YACA,WACA,WACA,WACA,UACA,QACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,SACA,YACA,OACA,SACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,QACA,UACA,YACA,SACA,UACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,QACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,YACA,OACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,UACA,WACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,YACA,SACA,YACA,YACA,UACA,UACA,UACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,SACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,WACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,UACA,OACA,UACA,WACA,WACA,UACA,SACA,WACA,UACA,OACA,SACA,OACA,UACA,UACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,UACA,QACA,UACA,OACA,QACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,QACA,QACA,QACA,OACA,OACA,SACA,SACA,OACA,SACA,UACA,UACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,UACA,QACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,OACA,SACA,SACA,MACA,SACA,OACA,SACA,WACA,UACA,QACA,YACA,UACA,SACA,UACA,QACA,OACA,SACA,UACA,QACA,OACA,OACA,OACA,MACA,UACA,WACA,YACA,SACA,YACA,SACA,YACA,UACA,WACA,QACA,UACA,SACA,YACA,YACA,SACA,WACA,UACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,QACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,WACA,SACA,UACA,YACA,YACA,OACA,SACA,WACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,SACA,WACA,UACA,UACA,YACA,UACA,YACA,YACA,WACA,QACA,WACA,YACA,OACA,QACA,UACA,YACA,QACA,UACA,YACA,UACA,OACA,YACA,QACA,UACA,WACA,QACA,YACA,YACA,UACA,WACA,WACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,MACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,WACA,OACA,UACA,UACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,QACA,UACA,YACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,QACA,QACA,WACA,QACA,QACA,UACA,QACA,SACA,YACA,YACA,SACA,YACA,SACA,UACA,QACA,WACA,SACA,YACA,UACA,WACA,WACA,SACA,WACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,SACA,WACA,SACA,WACA,YACA,SACA,SACA,UACA,YACA,WACA,WACA,UACA,UACA,WACA,QACA,QACA,WACA,YACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,QACA,SACA,WACA,WACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,WACA,YACA,YACA,WACA,OACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,UACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,WACA,QACA,YACA,SACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,UACA,WACA,QACA,UACA,UACA,SACA,WACA,UACA,UACA,SACA,WACA,QACA,YACA,YACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,YACA,UACA,SACA,QACA,QACA,WACA,UACA,YACA,UACA,QACA,QACA,UACA,UACA,QACA,UACA,WACA,QACA,SACA,QACA,UACA,QACA,YACA,UACA,UACA,UACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,UACA,QACA,OACA,QACA,YACA,QACA,QACA,WACA,UACA,WACA,WACA,QACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,SACA,QACA,QACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,YACA,YACA,WACA,QACA,SACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,QACA,SACA,WACA,UACA,UACA,YACA,OACA,QACA,OACA,MACA,UACA,WACA,UACA,SACA,SACA,SACA,OACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,YACA,QACA,OACA,OACA,SACA,YACA,SACA,YACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,UACA,MACA,QACA,SACA,SACA,SACA,UACA,WACA,YACA,UACA,UACA,QACA,UACA,WACA,YACA,UACA,UACA,OACA,SACA,SACA,WACA,SACA,UACA,YACA,WACA,WACA,UACA,SACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,YACA,UACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,QACA,YACA,UACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,OACA,UACA,QACA,WACA,YACA,UACA,WACA,QACA,UACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,YACA,SACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,YACA,WACA,WACA,QACA,WACA,YACA,SACA,OACA,OACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,OACA,YACA,UACA,SACA,OACA,OACA,QACA,QACA,MACA,QACA,UACA,YACA,UACA,WACA,UACA,QACA,WACA,QACA,YACA,QACA,QACA,QACA,UACA,QACA,OACA,SACA,YACA,YACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,QACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,WACA,QACA,QACA,UACA,WACA,SACA,UACA,SACA,QACA,UACA,UACA,QACA,QACA,WACA,YACA,YACA,UACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,WACA,QACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,YACA,SACA,QACA,YACA,UACA,WACA,YACA,UACA,WACA,QACA,OACA,SACA,YACA,SACA,SACA,QACA,SACA,QACA,QACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,YACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,UACA,QACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,UACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,QACA,WACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,YACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,QACA,SACA,WACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,QACA,WACA,UACA,YACA,UACA,WACA,SACA,WACA,UACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,QACA,YACA,WACA,WACA,YACA,QACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,OACA,SACA,UACA,OACA,SACA,UACA,YACA,YACA,WACA,YACA,UACA,OACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,QACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,YACA,YACA,YACA,UACA,QACA,QACA,SACA,QACA,QACA,YACA,YACA,WACA,UACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,QACA,QACA,QACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,QACA,SACA,SACA,SACA,WACA,YACA,QACA,SACA,UACA,SACA,WACA,SACA,SACA,SACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,WACA,YACA,SACA,YACA,UACA,WACA,QACA,SACA,QACA,UACA,UACA,UACA,WACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,YACA,QACA,QACA,UACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,YACA,UACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,YACA,YACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,UACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,SACA,OACA,WACA,YACA,UACA,SACA,YACA,WACA,QACA,UACA,QACA,WACA,WACA,WACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,WACA,YACA,SACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,SACA,WACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,UACA,YACA,WACA,QACA,UACA,UACA,WACA,YACA,YACA,OACA,YACA,UACA,YACA,OACA,WACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,QACA,WACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,QACA,SACA,UACA,UACA,QACA,WACA,SACA,SACA,YACA,UACA,YACA,UACA,SACA,WACA,QACA,OACA,UACA,WACA,UACA,UACA,WACA,UACA,YACA,MACA,UACA,OACA,SACA,SACA,WACA,OACA,QACA,SACA,WACA,QACA,SACA,OACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,UACA,UACA,OACA,YACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,OACA,SACA,QACA,YACA,UACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,QACA,OACA,OACA,UACA,YACA,OACA,QACA,QACA,WACA,WACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,UACA,YACA,WACA,WACA,QACA,UACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,WACA,SACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,WACA,WACA,OACA,YACA,UACA,QACA,QACA,QACA,SACA,WACA,UACA,OACA,QACA,UACA,UACA,YACA,YACA,WACA,UACA,OACA,SACA,OACA,OACA,QACA,SACA,UACA,YACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,OACA,UACA,OACA,SACA,SACA,SACA,UACA,YACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,UACA,QACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,WACA,OACA,YACA,WACA,YACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,SACA,QACA,WACA,SACA,QACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,YACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,WACA,QACA,SACA,QACA,QACA,UACA,QACA,SACA,YACA,UACA,WACA,WACA,YACA,QACA,MACA,QACA,WACA,UACA,UACA,UACA,MACA,UACA,QACA,SACA,WACA,QACA,SACA,UACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,OACA,MACA,QACA,QACA,QACA,WACA,SACA,YACA,SACA,QACA,QACA,UACA,YACA,OACA,WACA,QACA,QACA,QACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,OACA,QACA,WACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,UACA,WACA,WACA,YACA,UACA,YACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,YACA,UACA,YACA,WACA,QACA,YACA,UACA,YACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,SACA,YACA,UACA,YACA,WACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,UACA,WACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,YACA,YACA,YACA,SACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,QACA,YACA,YACA,YACA,YACA,YACA,QACA,WACA,YACA,SACA,WACA,OACA,YACA,WACA,WACA,UACA,SACA,YACA,YACA,UACA,UACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,UACA,WACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,SACA,YACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,SACA,YACA,YACA,YACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,YACA,SACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,UACA,UACA,YACA,WACA,UACA,WACA,WACA,SACA,QACA,QACA,UACA,WACA,WACA,YACA,SACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,YACA,UACA,QACA,YACA,SACA,WACA,YACA,SACA,UACA,YACA,YACA,YACA,SACA,YACA,WACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,WACA,YACA,SACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,YACA,SACA,OACA,QACA,UACA,WACA,UACA,SACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,UACA,SACA,SACA,YACA,UACA,SACA,QACA,UACA,OACA,YACA,OACA,QACA,QACA,UACA,UACA,UACA,SACA,SACA,QACA,UACA,SACA,SACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,QACA,SACA,SACA,YACA,QACA,UACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,OACA,QACA,SACA,YACA,SACA,WACA,SACA,WACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,QACA,QACA,YACA,WACA,UACA,UACA,SACA,QACA,UACA,SACA,YACA,WACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,YACA,SACA,QACA,OACA,WACA,UACA,QACA,WACA,SACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,UACA,WACA,QACA,OACA,YACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,OACA,WACA,SACA,UACA,UACA,QACA,SACA,UACA,QACA,QACA,SACA,YACA,MACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,YACA,UACA,SACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,OACA,WACA,SACA,OACA,QACA,QACA,WACA,QACA,YACA,SACA,QACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,MACA,OACA,SACA,QACA,SACA,QACA,QACA,YACA,UACA,OACA,OACA,YACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,YACA,UACA,SACA,YACA,OACA,OACA,QACA,UACA,OACA,OACA,UACA,SACA,WACA,SACA,OACA,QACA,WACA,SACA,OACA,SACA,OACA,OACA,WACA,QACA,UACA,SACA,SACA,WACA,SACA,MACA,OACA,YACA,YACA,YACA,YACA,YACA,UACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,UACA,YACA,QACA,YACA,YACA,QACA,QACA,QACA,MACA,UACA,QACA,SACA,WACA,UACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,YACA,UACA,WACA,UACA,YACA,UACA,OACA,QACA,QACA,MACA,UACA,UACA,OACA,OACA,OACA,WACA,WACA,SACA,WACA,QACA,UACA,OACA,MACA,YACA,UACA,QACA,MACA,SACA,QACA,QACA,OACA,SACA,SACA,OACA,QACA,MACA,UACA,QACA,MACA,WACA,OACA,YACA,QACA,YACA,UACA,UACA,QACA,OACA,MACA,SACA,SACA,OACA,SACA,YACA,YACA,UACA,O,qWC3lPa,MAAMz8B,EACTl7E,iBACRrhD,EACAi5J,EACA/kM,EACAglM,EAAoB,IAEpB,IAAK,MAAMxlJ,KAAQx/C,EAAK,CAEtB,IAAKA,EAAIirB,eAAeu0B,GACtB,SAGF,MAAMylJ,EAAUF,EAAQ/kM,EAAIw/C,IAASA,GACjCwlJ,EAAWlkK,QAAQ0e,IAAS,EAC7B1T,EAAe0T,GAAQylJ,GAAoB,KAE3Cn5J,EAAe0T,GAAQylJ,EAAU,IAAI,IAAUA,GAAW,I,CAGjE,CACUC,eACRp5J,EACAi5J,EACA/kM,EACAmlM,EAA0B,IAE1B,IAAK,MAAM3lJ,KAAQx/C,EAAK,CAEtB,IAAKA,EAAIirB,eAAeu0B,GACtB,SAGF,MAAMylJ,EAAWn5J,EAAe9rC,EAAIw/C,IAASA,GACzC2lJ,EAAiBrkK,QAAQ0e,IAAS,EACnCulJ,EAAgBvlJ,GAAmB,MAAXylJ,EAAkBA,EAAU,KAEpDF,EAAgBvlJ,GAAmB,MAAXylJ,EAAmBA,EAAsBt3L,gBAAkB,I,CAG1F,CAEg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AEA36M,W,MACsB,QAApB,EAAApH,KAAKm3M,uBAAe,SAAEwE,cAAc,WACtC,E,iCAfWqG,GAAkB,e,mBAAlBA,EAAkB,2E,uICzBxB,MAAMC,EACX5hN,YAAgC82M,GAAA,KAAAA,gBAAAA,CAAyC,CAEtCnvM,gBACjC,OAAO,KAAc6E,OAAO,CAC1B,gBACA,oBAEA,4BACA,+BACCA,OAA+BrL,MAAxBxB,KAAKm3M,gBAA+B,KAAsB,KACtE,CAEA/vM,W,MACsB,QAApB,EAAApH,KAAKm3M,uBAAe,SAAEwE,cAAc,WACtC,E,iCAfWsG,GAAkB,e,mBAAlBA,EAAkB,2E,yNCHzB7G,EAAY,CAMhB,cACA,yBACA,kBACA,qBACA,yBACA,uBACA,uBACA,iBACA,6BACA,yBAGInB,EAA2C,CAC/CiI,SAAU,CACR,oBACA,oBACA,wBACA,gCACA,gCACA,6CACA,yBACA,uCACA,sCACG9G,GAEL+G,KAAM,CACJ,oBACA,gBACA,wBACA,gCACA,4BACA,yCACA,yBACA,uCACA,sCACG/G,GAELgH,MAAO,CACL,oBACA,iBACA,wBACA,gCACA,8BACA,2CACA,yBACA,uCACA,sCACGhH,GAELlB,QAAS,CACP,oBACA,oBACA,wBACA,0BACA,8BACA,2CACA,yBACA,uCACA,sCACGkB,GAELjB,UAAW,CACT,oBACA,iBACA,uBACA,0BACA,yBACA,2CACA,yBACA,sCACA,mCACA,gCACA,yCACGiB,GAELhB,OAAQ,CACN,oBACA,kBACA,uBACA,0BACA,yBACA,2CACA,yBACA,sCACA,mCACA,iCACA,yCACGgB,GAELiH,MAAO,CACL,oBACA,gBACA,wBACA,gCACA,4BACA,yCACA,uCACA,sCACGjH,GAELE,SAAU,IAKNgH,EAA0C,CAC9Cv1B,QAAS,CAAC,YAAa,aACvBorB,MAAO,CAAC,kBAAmB,eAAgB,WAQtC,MAAMoK,EALb,cAUW,KAAAn7L,KAAuB,UA0BvB,KAAA3d,SAAU,EACV,KAAA0V,UAAW,C,CAzBMnX,gB,MACxB,MAAO,CACL,mBACA,YACA,kBACA,aACA,gBACA,wBACA,yBAEC6E,OAAOot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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/admin-console/core/policy-list.service.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/core-organization.module.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/services/group/responses/group.response.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/views/group.view.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/services/group/requests/group.request.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/services/group/requests/organization-group-bulk.request.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/services/group/group.service.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/admin-console/organizations/core/views/organization-user-admin-view.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/services/user-admin.service.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/core/views/collection-access-selection.view.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/create/organization-create.module.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/create/organization-information.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/create/organization-information.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/guards/org-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/components/organization-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/components/organization-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/layouts/organization-layout.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/layouts/organization-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/manage/entity-events.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/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/admin-console/organizations/members/components/bulk/bulk-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/members/components/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/members/components/bulk/bulk-remove.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/members/components/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/members/components/bulk/bulk-status.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/members/components/bulk/bulk-status.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/policy.request.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/base-policy.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/policies.module.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/disable-send.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/disable-send.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/master-password.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/master-password.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/password-generator.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/password-generator.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/personal-ownership.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/personal-ownership.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/require-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/require-sso.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/send-options.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/send-options.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/single-org.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/single-org.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/two-factor-authentication.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/two-factor-authentication.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/policies.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/policies/policies.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/if-feature.directive.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/utils/form-selection-list.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/shared/components/access-selector/user-type.pipe.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/shared/components/access-selector/access-selector.models.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/shared/components/access-selector/access-selector.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/views/credential-create-options.view.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/services/webauthn-login/request/save-credential.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/services/webauthn-login/request/webauthn-login-authenticator-response.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/services/webauthn-login/request/webauthn-login-attestation-response.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/services/webauthn-login/response/webauthn-login-credential-create-options.response.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/services/webauthn-login/webauthn-login-api.service.ts","webpack://@bitwarden/web-vault/./src/app/auth/core/services/webauthn-login/webauthn-login.service.ts","webpack://@bitwarden/web-vault/./src/app/auth/register-form/register-form.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/two-factor-provider.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-two-factor-duo.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-two-factor-authenticator.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-authenticator.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-authenticator.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-two-factor-email.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-email.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-email.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-recovery.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-recovery.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-two-factor-web-authn-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-two-factor-web-authn.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-webauthn.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-webauthn.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-two-factor-yubio-otp.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-yubikey.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-yubikey.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-verify.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/two-factor-verify.component.html","webpack://@bitwarden/web-vault/./src/app/auth/shared/components/user-verification/user-verification.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/user-verification-prompt.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/shared/components/user-verification/user-verification-prompt.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/shared/components/user-verification/user-verification-prompt.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/user-verification.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/shared/components/user-verification/user-verification.component.html","webpack://@bitwarden/web-vault/./src/app/auth/shared/components/user-verification/user-verification.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/organization-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/organization-upgrade.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-organization-create.request.ts","webpack://@bitwarden/web-vault/./src/app/billing/organizations/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/billing/organizations/organization-plans.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/billing-shared.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-bank.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/request/bit-pay-invoice.request.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/billing/shared/add-credit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/request/payment.request.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/adjust-payment.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/adjust-payment.component.html","webpack://@bitwarden/web-vault/./src/app/billing/shared/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/billing/shared/payment-method.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/payment.component.html","webpack://@bitwarden/web-vault/./src/app/billing/shared/payment.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/sm-subscribe.component.html","webpack://@bitwarden/web-vault/./src/app/billing/shared/sm-subscribe.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/shared/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/billing/shared/tax-info.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/manage/user-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/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/./src/app/components/environment-selector/environment-selector.component.html","webpack://@bitwarden/web-vault/./src/app/components/environment-selector/environment-selector.component.ts","webpack://@bitwarden/web-vault/./src/app/components/environment-selector/environment-selector.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/api-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/organization-sso.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/billing.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/plan.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/organization-subscription.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/profile-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/profile-provider-organization.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/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/billing/models/response/payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/tax-info.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/organization-api-key-information.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/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/admin-console/models/response/organization-keys.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/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/auth/abstractions/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/user-verification/user-verification-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/prelogin.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/identity-token/token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/identity-token/password-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/identity-captcha.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/environment-urls.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/user-decryption-options/key-connector-user-decryption-option.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/user-decryption-options/trusted-device-user-decryption-option.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/data/server-config.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/account.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/auth-result.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/identity-token/device.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/master-password-policy.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/user-decryption-options/key-connector-user-decryption-option.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/user-decryption-options/trusted-device-user-decryption-option.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/user-decryption-options/user-decryption-options.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/identity-token.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/identity-two-factor.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/login-strategies/login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/login-strategies/password-login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/login-strategies/passwordless-login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/identity-token/sso-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/login-strategies/sso-login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/identity-token/user-api-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/login-strategies/user-api-login.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/passwordless-auth.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-devices-trust.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/devices/views/device.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/devices/responses/device.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/protected-device.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/devices/requests/trusted-device-keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/key-connector-user-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/set-key-connector-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/verify-otp.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/config/config-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/file-upload/file-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/factories/account-factory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/factories/global-state-factory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/factories/state-factory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/window-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/global-state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/response/server-config.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/config/server-config.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/config/config.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/domain/encrypted-organization-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/misc/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/encrypted-object.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/cryptography/encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/cryptography/get-class-initializer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/cryptography/multithread-encrypt.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/file-upload/azure-file-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/file-upload/bitwarden-file-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/data/provider.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/event.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migration-builder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migration-helper.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/3-fix-premium.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/4-remove-ever-been-unlocked.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/5-add-key-type-to-org-keys.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/6-remove-legacy-etm-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/7-move-biometric-auto-prompt-to-account.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/8-move-state-version.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrations/min-version.ts","webpack://@bitwarden/web-vault/../../libs/common/src/state-migrations/migrate.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/data/send-file.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/data/send-text.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/data/send.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/folder.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/decrypt-parameters.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-avatar.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/notification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/organization-connection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/response/collection.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/organization-export.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/organization-sponsorship-sync-status.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/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/admin-console/models/response/provider/provider-user-bulk-public-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/provider/provider-user-bulk.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/provider/provider-user.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/provider/provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/auth-request.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/device-verification.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/key-connector-user-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/prelogin.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/register.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/sso-pre-validate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-authenticator.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-duo.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-email.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-provider.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-recover.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-yubi-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/billing-history.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/billing-payment.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/response/tax-rate.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/breach-account.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/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/tools/send/models/response/send.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/platform/misc/throttle.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/event.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-domain/responses/organization-domain-sso-details.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-domain/responses/organization-domain.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-domain/requests/organization-domain-sso-details.request.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/services/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vault-timeout/vault-timeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/response/send-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/response/send-file-download-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/response/send-file-upload-data.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/file-upload/cipher-file-upload.service.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-create.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/vault/services/sync/sync.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/platform/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/platform/services/app-id.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/file-upload/file-upload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/file-upload/cipher-file-upload.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/auth/services/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/account.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/account/avatar-update.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/services/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/services/send-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vault-timeout/vault-timeout-settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/web-crypto-function.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/admin-console/services/policy/policy.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/services/policy/policy-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/key-connector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/user-verification/user-verification.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/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/auth/services/password-reset-enrollment.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/services/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/platform/services/form-validation-errors.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/user-verification/user-verification-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/services/organization/organization-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/sync/sync-notifier.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/sync/sync-notifier.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/config/config-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/anonymousHub.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-domain/org-domain.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-domain/org-domain-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/devices-api.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/devices/devices.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/device-trust-crypto.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/auth-request-crypto.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/memory-storage.service.ts","webpack://@bitwarden/web-vault/./src/app/core/html-storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/translation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/i18n.service.ts","webpack://@bitwarden/web-vault/./src/translation-constants.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/../../libs/common/src/platform/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/state/account.ts","webpack://@bitwarden/web-vault/./src/app/core/state/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/file-download/file-download.builder.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/./src/app/core/router.service.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/layouts/secrets-manager-logo.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/sponsorships/accept-family-sponsorship.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/sponsorships/accept-family-sponsorship.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/organization/organization-sponsorship-redeem.request.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/settings/create-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/settings/create-organization.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/notAllowedValueAsync.validator.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/settings/sponsoring-org-row.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/settings/sponsoring-org-row.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/settings/sponsored-families.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/settings/sponsored-families.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/emergency-access-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/accept-emergency.component.html","webpack://@bitwarden/web-vault/./src/app/auth/accept-emergency.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-accept-init.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-user/requests/organization-user-accept.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/accept-organization.component.html","webpack://@bitwarden/web-vault/./src/app/auth/accept-organization.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/password-hint.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/hint.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/lock.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/base-login-decryption-options.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/login/login-decryption-options/login-decryption-options.component.html","webpack://@bitwarden/web-vault/./src/app/auth/login/login-decryption-options/login-decryption-options.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/auth-request-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/passwordless-create-auth.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/iframe_component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/captcha-iframe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/captcha-protected.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/login-with-device.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/login/login-with-device.component.html","webpack://@bitwarden/web-vault/./src/app/auth/login/login-with-device.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/login.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/login/login.component.html","webpack://@bitwarden/web-vault/./src/app/auth/login/login.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/delete-recover.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/recover-delete.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/two-factor-recovery.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/recover-two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/recover-two-factor.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/remove-password.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/remove-password.component.html","webpack://@bitwarden/web-vault/./src/app/auth/remove-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/set-password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/set-password.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/set-password.component.html","webpack://@bitwarden/web-vault/./src/app/auth/set-password.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/attachments.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-view.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-view.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/emergency-access-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/emergency-access-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/emergency-access-invite.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-confirm.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/emergency-access-password.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-takeover.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access-takeover.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/emergency-access/emergency-access.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/sso.component.html","webpack://@bitwarden/web-vault/./src/app/auth/sso.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/reference-event.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/vertical-stepper/vertical-step.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/vertical-stepper/vertical-step.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/vertical-stepper/vertical-step-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/vertical-stepper/vertical-step-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/vertical-stepper/vertical-stepper.component.html","webpack://@bitwarden/web-vault/./src/app/auth/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/auth/components/register.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/register-form/register-form.component.html","webpack://@bitwarden/web-vault/./src/app/auth/register-form/register-form.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/logo-forbes.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/logo-forbes.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/logo-us-news.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/logo-us-news.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/confirmation-details.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/confirmation-details.component.html","webpack://@bitwarden/web-vault/./src/app/billing/accounts/trial-initiation/billing.component.html","webpack://@bitwarden/web-vault/./src/app/billing/accounts/trial-initiation/billing.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/default-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/default-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/enterprise1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/enterprise1-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/enterprise2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/enterprise2-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams1-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams1-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams2-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams2-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams3-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/teams3-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/logo-cnet.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/logo-cnet.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/cnet-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/cnet-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/cnet-individual-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/cnet-individual-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/cnet-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/cnet-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/abm-enterprise-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/abm-enterprise-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/abm-teams-content.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/content/abm-teams-content.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/trial-initiation.component.html","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/trial-initiation.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/webauthn-iframe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/two-factor-options.component.html","webpack://@bitwarden/web-vault/./src/app/auth/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/auth/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/update-password.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/update-password.component.html","webpack://@bitwarden/web-vault/./src/app/auth/update-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/update-temp-password.request.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/components/update-temp-password.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/update-temp-password.component.html","webpack://@bitwarden/web-vault/./src/app/auth/update-temp-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-email.request.ts","webpack://@bitwarden/web-vault/./src/app/auth/verify-email-token.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/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/auth/verify-recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/verify-recover-delete.component.html","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/auth/settings/deauthorize-sessions.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/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/auth/models/request/email-token.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/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/./src/app/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/account.component.ts","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/../../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/./src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-passkey-failed.icon.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-passkey.icon.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/delete-credential-dialog/delete-credential-dialog.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/delete-credential-dialog/delete-credential-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/webauthn-login-settings.component.html","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/webauthn-login-settings.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/auth/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/change-kdf-confirmation.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf/change-kdf-confirmation.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf/change-kdf.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf/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/tools/generator/components/generator.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/tools/generator/components/password-generator-history.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/copy-text.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/../../libs/common/src/tools/send/models/view/send-access.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/domain/send-access.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/request/send-access.request.ts","webpack://@bitwarden/web-vault/./src/app/tools/send/access.component.html","webpack://@bitwarden/web-vault/./src/app/tools/send/access.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/tools/send/send.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/tools/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/send/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/tools/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/send/icons/no-send.icon.ts","webpack://@bitwarden/web-vault/./src/app/tools/send/send.component.html","webpack://@bitwarden/web-vault/./src/app/tools/send/send.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/vault/individual-vault/bulk-action-dialogs/bulk-dialogs.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/types/checkable.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/components/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/folder-add-edit.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/share.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/verify-email.component.ts","webpack://@bitwarden/web-vault/./src/app/auth/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/app/vault/individual-vault/vault-header/vault-header.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-header/vault-header.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault.module.ts","webpack://@bitwarden/web-vault/./src/app/oss-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/core/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/./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/auth/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/purge-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.html","webpack://@bitwarden/web-vault/./src/app/shared/components/account-fingerprint/account-fingerprint.component.html","webpack://@bitwarden/web-vault/./src/app/shared/components/account-fingerprint/account-fingerprint.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf/change-kdf.module.ts","webpack://@bitwarden/web-vault/./src/app/shared/loose-components.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/color-password/color-password.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/app/tools/event-export/event.export.ts","webpack://@bitwarden/web-vault/./src/app/tools/event-export/event-export.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/components/collection-dialog/collection-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/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/./src/app/vault/components/collection-dialog/collection-dialog.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/not-premium.directive.ts","webpack://@bitwarden/web-vault/./src/app/vault/components/premium-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-items.component.html","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-items.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/organization-badge/organization-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/organization-badge/organization-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/pipes/get-collection-name.pipe.ts","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/collection-badge/collection-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/collection-badge/collection-name.badge.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-cipher-row.component.html","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-cipher-row.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/group-badge/group-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/group-badge/group-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-collection-row.component.html","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-collection-row.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/components/vault-items/vault-items.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/core/collection-admin.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/core/views/collection-admin.view.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/app/vault/individual-vault/add-edit-custom-fields.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-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/app/vault/individual-vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/attachments.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/collection-bulk-delete.request.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/admin-console/components/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/collections.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/organization-badge/organization-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/pipes/get-organization-name.pipe.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/pipes/pipes.module.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/users/enroll-master-password-reset.component.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/users/enroll-master-password-reset.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/components/link-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/components/link-sso.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/components/organization-options.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/components/organization-options.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/components/vault-filter.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/components/vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/services/abstractions/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter-bridge.model.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/services/routed-vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/services/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/components/vault-filter-section.component.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/components/vault-filter-section.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/models/filter-function.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.model.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/shared/vault-filter-shared.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/collection-badge/collection-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/org-vault/group-badge/group-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/vault/utils/collection-utils.ts","webpack://@bitwarden/web-vault/./src/utils/flags.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/users/organization-user.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/webauthn-login-settings/webauthn-login-settings.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/settings/settings.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/auth.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/login/login.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/vertical-stepper/vertical-stepper.module.ts","webpack://@bitwarden/web-vault/./src/app/auth/trial-initiation/trial-initiation.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/../../bitwarden_license/bit-web/src/app/admin-console/organizations/core/views/pending-auth-request.view.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/core/services/auth-requests/admin-auth-request-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/core/services/auth-requests/bulk-deny-auth-requests.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/core/services/auth-requests/pending-organization-auth-request.response.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/core/services/auth-requests/organization-auth-request.service.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/core/core-organization.module.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/organization-sso.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/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/launch-click.directive.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/auth/sso/sso.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/auth/sso/sso.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/auth/sso/sso-type.validator.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/icons/devices.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization-domain/requests/organization-domain.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-add-edit-dialog/validators/unique-in-array.validator.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-add-edit-dialog/validators/domain-name.validator.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/api/scim-config.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/scim-config.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/scim.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/manage/scim.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/organizations/organizations.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/guards/provider-permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/providers/providers.component.html","webpack://@bitwarden/web-vault/./src/app/admin-console/providers/providers.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-add-organization.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/clients/add-organization.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/clients/add-organization.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/clients/clients.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/clients/clients.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/clients/create-organization.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/clients/create-organization.component.html","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-user-accept.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/accept-provider.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/accept-provider.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/events.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/events.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/manage.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/manage.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-user-bulk.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-user-confirm.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-user-bulk-confirm.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-user-invite.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-user-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/people.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/manage/people.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-update.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/settings/account.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/settings/account.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/settings/settings.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/settings/settings.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/setup/setup-provider.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/setup/setup-provider.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/provider/provider-setup.request.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/setup/setup.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/setup/setup.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/providers/providers-routing.module.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/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/admin-console/policies/activate-autofill.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/policies/activate-autofill.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.html","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts","webpack://@bitwarden/web-vault/../../bitwarden_license/bit-web/src/app/app.component.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/auth/components/sso.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/guards/auth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/guards/redirect.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/guards/tde-decryption-required.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/auth/guards/unauth.guard.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/copy-click.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/guard/feature-flag.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/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/platform/abstractions/form-validation-errors.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/platform/pipes/ellipsis.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/platform/pipes/fingerprint.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/platform/pipes/i18n.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/vault/components/attachments.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/auth/src/components/fingerprint-dialog.component.ts","webpack://@bitwarden/web-vault/../../libs/auth/src/components/fingerprint-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/auth/src/password-callout/password-callout.component.html","webpack://@bitwarden/web-vault/../../libs/auth/src/password-callout/password-callout.component.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/audit.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/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-domain/org-domain-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-domain/org-domain.service.abstraction.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-enrollment.request.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/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vault-timeout/vault-timeout-settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vault-timeout/vault-timeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/abstractions/organization/organization-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/abstractions/organization/organization.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/abstractions/policy/policy-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/abstractions/policy/policy.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/organization-api-key-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/organization-connection-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/organization-user-status-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/organization-user-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/policy-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/provider-user-status-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/provider-user-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/enums/scim-provider-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/api/permissions.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/data/organization.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/data/policy.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/domain/master-password-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/domain/organization.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/domain/policy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/organization-api-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/organization-connection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/organization-keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/request/selection-read-only.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/policy.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/response/selection-read-only.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/account-api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/auth-request-crypto.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/device-trust-crypto.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/devices-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/devices/devices.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/key-connector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/login.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/password-reset-enrollment.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/two-factor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/abstractions/user-verification/user-verification.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/authentication-status.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/authentication-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/emergency-access-status-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/sso.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/two-factor-provider-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/verification-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/api/sso-config.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/admin-auth-req-storable.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/force-reset-password-reason.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/kdf-config.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/domain/log-in-credentials.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/emergency-access-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/identity-token/token-two-factor.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/secret-verification.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/request/two-factor-email.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/emergency-access.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/two-factor-web-authn.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/services/two-factor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/enums/payment-method-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/enums/plan-sponsorship-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/enums/plan-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/enums/transaction-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/enums/bitwarden-product-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/request/organization-tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/request/tax-info-update.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/client-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/device-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/encrypted-export-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/encryption-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/event-system-user.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/event-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/feature-flag.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/field-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/file-upload-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/hash-purpose.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/html-storage-location.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/http-status-code.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/kdf-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/key-suffix-options.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/linked-id-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/log-level-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/native-messaging-version.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/notification-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/product-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/provider-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/secure-note-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/storage-location.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/theme-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/uri-match-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/vault-timeout-action.enum.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/models/api/card.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/field.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/identity.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login-uri.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/login.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/secure-note.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/tree-node.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/fido2-credential.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/password-history.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/keys.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/update-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/base.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/error.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/event.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/list.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/event.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/app-id.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/config/config.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/crypto-function.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/encrypt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/file-download/file-download.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/translation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/log.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/messaging.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/platform-utils.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/abstractions/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/misc/flags.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/misc/utils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/misc/wordlist.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/domain-base.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/enc-array-buffer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/enc-string.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/models/domain/symmetric-crypto-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/console-log.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/cryptography/initializer-key.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/password/password-generation.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/domain/password-generator-policy-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/password/generated-password-history.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/password/password-generation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/username-generation.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/anon-addy-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/duck-duck-go-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/fastmail-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/firefox-relay-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/forwarder-options.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/simple-login-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/email-forwarders/forward-email-forwarder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/generator/username/username-generation.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/password-strength/password-strength.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/password-strength/password-strength.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/enums/send-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/api/send-file.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/api/send-text.api.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/domain/send-file.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/domain/send-text.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/request/send-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/request/send.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/view/send-file.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/view/send-text.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/view/send.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/services/send-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/services/send.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/collection.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/sync/sync.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/api/fido2-credential.api.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/collection.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/fido2-credential.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/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/collection.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/fido2-credential.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-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/collection.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/folder-with-id.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/collection.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/fido2-credential.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/async-actions.module.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/button/button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.module.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/dialog.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-dialog/simple-configurable-dialog/simple-configurable-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-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.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog/dialog.component.ts","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-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/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.module.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/input/input.module.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.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/no-items/no-items.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/no-items/no-items.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/no-items/no-items.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/progress/progress.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-input.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-button.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-group.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-group.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/search/search.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/search/search.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/search/search.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/../../libs/components/src/select/select.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/sortable.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/table/table-data-source.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/table/table.module.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/toggle-group/toggle-group.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/toggle-group/toggle-group.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/toggle-group/toggle.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/toggle-group/toggle.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/typography/typography.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/typography/typography.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/utils/function-to-observable.ts","webpack://@bitwarden/web-vault/../../libs/exporter/src/export-helper.ts","webpack://@bitwarden/web-vault/../../libs/exporter/src/vault-export/services/vault-export.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/exporter/src/vault-export/services/vault-export.service.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/services/import-api.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/services/import-api.service.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/services/import.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/import-ciphers.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/import-organization-ciphers.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kvp.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/collection-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/models/import-result.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/base-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/ascendo-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/avast/avast-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/avast/avast-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/avira-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/blackberry-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/chrome-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/bitwarden/bitwarden-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/bitwarden/bitwarden-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/bitwarden/bitwarden-password-protected-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/blur-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/buttercup-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/clipperz-html-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/codebook-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/dashlane/dashlane-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/dashlane/dashlane-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/encryptr-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/enpass/enpass-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/enpass/enpass-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/firefox-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/fsecure/fsecure-fsk-types.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/fsecure/fsecure-fsk-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/gnome-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/kaspersky-txt-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/keepass2-xml-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/keepassx-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/keeper/keeper-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/lastpass-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/logmeonce-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/meldium-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/msecure-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/myki-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/nordpass-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/types/onepassword-1pux-importer-types.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/onepassword-1pif-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/onepassword-1pux-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/cipher-import-context.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/onepassword-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/onepassword-mac-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/onepassword/onepassword-win-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/padlock-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passkeep-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passky/passky-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passman-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passpack-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passwordagent-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passwordboss-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passworddragon-xml-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passwordsafe-xml-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/passwordwallet-txt-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/protonpass/types/protonpass-json-type.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/protonpass/protonpass-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/psono/psono-json-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/remembear-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/roboform-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/safari-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/safeincloud-xml-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/saferpass-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/securesafe-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/splashid-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/stickypassword-xml-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/truekey-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/upm-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/yoti-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/importers/zohovault-csv-importer.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/models/import-options.ts","webpack://@bitwarden/web-vault/../../libs/importer/src/services/import.service.ts","webpack://@bitwarden/web-vault/../../libs/vault/src/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/../../libs/vault/src/components/password-reprompt.component.html","webpack://@bitwarden/web-vault/../../libs/vault/src/services/password-reprompt.service.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\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\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 { 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 { NgModule } from \"@angular/core\";\n\n@NgModule({})\nexport class CoreOrganizationModule {}\n","import { SelectionReadOnlyResponse } from \"@bitwarden/common/admin-console/models/response/selection-read-only.response\";\nimport { BaseResponse } from \"@bitwarden/common/models/response/base.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/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 { SelectionReadOnlyRequest } from \"@bitwarden/common/admin-console/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/admin-console/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({\n providedIn: \"root\",\n})\nexport class GroupService {\n constructor(protected apiService: ApiService) {}\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\n@Injectable({ providedIn: CoreOrganizationModule })\nexport class InternalGroupService extends GroupService {\n constructor(protected apiService: ApiService) {\n super(apiService);\n }\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 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 { OrganizationUserType } from \"../../../admin-console/enums\";\nimport { PermissionsApi } from \"../../../admin-console/models/api/permissions.api\";\nimport { SelectionReadOnlyRequest } from \"../../../admin-console/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 \"../../../admin-console/enums\";\nimport { PermissionsApi } from \"../../../admin-console/models/api/permissions.api\";\nimport { SelectionReadOnlyRequest } from \"../../../admin-console/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 {\n OrganizationUserStatusType,\n OrganizationUserType,\n} from \"@bitwarden/common/admin-console/enums\";\nimport { PermissionsApi } from \"@bitwarden/common/admin-console/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 hasMasterPassword: 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 view.hasMasterPassword = u.hasMasterPassword;\n\n return view;\n });\n\n return await Promise.all(promises);\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 { 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 {\n canAccessOrgAdmin,\n OrganizationService,\n} from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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","
\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 {\n canAccessAdmin,\n OrganizationService,\n} from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\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.memberOrganizations$.pipe(\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/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/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 {{ \"eventLogs\" | i18n }}\n {{ name }}\n \n
\n
\n
\n
\n \n \n \n \n
\n -\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n {{ \"noEventsInList\" | i18n }}\n
\n \n \n \n {{ \"timestamp\" | i18n }}\n \n {{ \"client\" | i18n }}\n \n {{ \"member\" | i18n }}\n {{ \"event\" | i18n }}\n \n \n \n \n {{ r.date | date : \"medium\" }}\n \n \n {{ r.appName }}, {{ r.ip }}\n \n \n {{ r.userName }}\n \n \n \n \n \n \n {{ \"loadMore\" | i18n }}\n \n
\n \n \n \n
\n","import { DIALOG_DATA, DialogConfig } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnInit } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.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\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { DialogService, TableDataSource } from \"@bitwarden/components\";\n\nimport { EventService } from \"../../../core\";\nimport { SharedModule } from \"../../../shared\";\n\nexport interface EntityEventsDialogParams {\n entity: \"user\" | \"cipher\";\n entityId: string;\n\n organizationId?: string;\n providerId?: string;\n showUser?: boolean;\n name?: string;\n}\n\n@Component({\n imports: [SharedModule],\n templateUrl: \"entity-events.component.html\",\n standalone: true,\n})\nexport class EntityEventsComponent implements OnInit {\n loading = true;\n continuationToken: string;\n protected dataSource = new TableDataSource();\n protected filterFormGroup = this.formBuilder.group({\n start: [\"\"],\n end: [\"\"],\n });\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n get name() {\n return this.params.name;\n }\n\n get showUser() {\n return this.params.showUser ?? false;\n }\n\n constructor(\n @Inject(DIALOG_DATA) private params: EntityEventsDialogParams,\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 private formBuilder: FormBuilder,\n private validationService: ValidationService\n ) {}\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.filterFormGroup.setValue({\n start: defaultDates[0],\n end: defaultDates[1],\n });\n await this.load();\n }\n\n async load() {\n try {\n if (this.showUser) {\n const response = await this.organizationUserService.getAllUsers(this.params.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 } catch (e) {\n this.logService.error(e);\n this.validationService.showError(e);\n }\n\n this.loading = false;\n }\n\n loadMoreEvents = async () => {\n await this.loadEvents(false);\n };\n\n refreshEvents = async () => {\n await this.loadEvents(true);\n };\n\n private async loadEvents(clearExisting: boolean) {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(\n this.filterFormGroup.value.start,\n this.filterFormGroup.value.end\n );\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 let response: ListResponse;\n if (this.params.entity === \"user\" && this.params.providerId) {\n response = await this.apiService.getEventsProviderUser(\n this.params.providerId,\n this.params.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else if (this.params.entity === \"user\") {\n response = await this.apiService.getEventsOrganizationUser(\n this.params.organizationId,\n this.params.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else {\n response = await this.apiService.getEventsCipher(\n this.params.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n }\n\n this.continuationToken = response.continuationToken;\n const events: EventView[] = 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\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: 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 installationId: r.installationId,\n systemUser: r.systemUser,\n serviceAccountId: r.serviceAccountId,\n });\n })\n );\n\n if (!clearExisting && this.dataSource.data != null && this.dataSource.data.length > 0) {\n this.dataSource.data = this.dataSource.data.concat(events);\n } else {\n this.dataSource.data = events;\n }\n }\n}\n\n/**\n * Strongly typed helper to open a EntityEventsComponent as a dialog\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 openEntityEventsDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(EntityEventsComponent, config);\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 { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserBulkConfirmRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/admin-console/enums\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\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);\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);\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(): Promise {\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 {{ \"removeMembersWithoutMasterPasswordWarning\" | i18n }}\n

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"details\" | i18n }}
\n \n \n {{ user.email }}\n {{ user.name }}\n \n \n - \n \n \n {{ \"noMasterPassword\" | i18n }}\n \n \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 { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.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() set users(value: BulkUserDetails[]) {\n this._users = value;\n this.showNoMasterPasswordWarning = this._users.some((u) => u.hasMasterPassword === false);\n }\n\n get users(): BulkUserDetails[] {\n return this._users;\n }\n\n private _users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n showNoMasterPasswordWarning = false;\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 {\n OrganizationUserStatusType,\n ProviderUserStatusType,\n} from \"@bitwarden/common/admin-console/enums\";\n\nexport interface BulkUserDetails {\n id: string;\n name: string;\n email: string;\n status: OrganizationUserStatusType | ProviderUserStatusType;\n hasMasterPassword?: boolean;\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\";\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/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/admin-console/models/request/policy.request\";\nimport { PolicyResponse } from \"@bitwarden/common/admin-console/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/admin-console/enums\";\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 {{ \"turnOn\" | i18n }}\n \n\n \n \n {{ \"enforceOnLoginDesc\" | i18n }}\n \n\n
\n \n {{ \"minComplexityScore\" | i18n }}\n \n \n \n \n \n {{ \"minLength\" | i18n }}\n \n \n
\n\n \n \n A-Z\n \n \n \n a-z\n \n \n \n 0-9\n \n \n \n !@#$%^&*\n \n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\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 MinPasswordLength = Utils.minimumPasswordLength;\n\n data: FormGroup> = this.formBuilder.group({\n minComplexity: [null],\n minLength: [this.MinPasswordLength, [Validators.min(Utils.minimumPasswordLength)]],\n requireUpper: [false],\n requireLower: [false],\n requireNumbers: [false],\n requireSpecial: [false],\n enforceOnLogin: [false],\n });\n\n passwordScores: { name: string; value: number }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: FormBuilder,\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 { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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/admin-console/enums\";\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 { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { PolicyRequest } from \"@bitwarden/common/admin-console/models/request/policy.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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 {{ \"accountRecoverySingleOrgRequirementDesc\" | i18n }}\n\n\n\n {{ \"accountRecoveryPolicyWarning\" | i18n }}\n\n\n\n \n {{ \"turnOn\" | i18n }}\n\n\n\n \n \n {{ \"resetPasswordPolicyAutoEnrollCheckbox\" | i18n }}\n \n\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class ResetPasswordPolicy extends BasePolicy {\n name = \"accountRecoveryPolicy\";\n description = \"accountRecoveryPolicyDesc\";\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 showKeyConnectorInfo = false;\n\n constructor(private formBuilder: FormBuilder, private organizationService: OrganizationService) {\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/admin-console/enums\";\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 { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { PolicyRequest } from \"@bitwarden/common/admin-console/models/request/policy.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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/admin-console/enums\";\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 { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { PolicyRequest } from \"@bitwarden/common/admin-console/models/request/policy.request\";\nimport { PolicyResponse } from \"@bitwarden/common/admin-console/models/response/policy.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { PolicyResponse } from \"@bitwarden/common/admin-console/models/response/policy.response\";\n\nimport { PolicyListService } from \"../../core/policy-list.service\";\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 { DIALOG_DATA, DialogConfig, DialogRef } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormControl, Validators } from \"@angular/forms\";\nimport { combineLatest, Subject, takeUntil } from \"rxjs\";\n\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/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\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { UserVerificationModule } from \"../../../../auth/shared/components/user-verification\";\nimport { SharedModule } from \"../../../../shared/shared.module\";\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\n get localizationKey(): string {\n return this.localizationKeyOptions.getKey(this.count);\n }\n\n private localizationKeyOptions: CountBasedLocalizationKey;\n\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\nexport interface DeleteOrganizationDialogParams {\n organizationId: string;\n\n requestType: \"InvalidFamiliesForEnterprise\" | \"RegularDelete\";\n}\n\nexport enum DeleteOrganizationDialogResult {\n Deleted = \"deleted\",\n Canceled = \"canceled\",\n}\n\n@Component({\n selector: \"app-delete-organization\",\n standalone: true,\n imports: [SharedModule, UserVerificationModule],\n templateUrl: \"delete-organization-dialog.component.html\",\n})\nexport class DeleteOrganizationDialogComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n\n loaded: boolean;\n deleteOrganizationRequestType: \"InvalidFamiliesForEnterprise\" | \"RegularDelete\" = \"RegularDelete\";\n organization: Organization;\n organizationContentSummary: OrganizationContentSummary = new OrganizationContentSummary();\n secret: Verification;\n\n protected formGroup = this.formBuilder.group({\n secret: new FormControl(null, [Validators.required]),\n });\n formPromise: Promise;\n\n constructor(\n @Inject(DIALOG_DATA) private params: DeleteOrganizationDialogParams,\n private dialogRef: DialogRef,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private cipherService: CipherService,\n private organizationService: OrganizationService,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private formBuilder: FormBuilder\n ) {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async ngOnInit(): Promise {\n this.deleteOrganizationRequestType = this.params.requestType;\n\n combineLatest([\n this.organizationService.get$(this.params.organizationId),\n this.cipherService.getAllFromApiForOrganization(this.params.organizationId),\n ])\n .pipe(takeUntil(this.destroy$))\n .subscribe(([organization, ciphers]) => {\n this.organization = organization;\n this.organizationContentSummary = this.buildOrganizationContentSummary(ciphers);\n this.loaded = true;\n });\n }\n\n protected submit = async () => {\n await this.userVerificationService\n .buildRequest(this.formGroup.value.secret)\n .then((request) => this.organizationApiService.delete(this.organization.id, request));\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationDeleted\"),\n this.i18nService.t(\"organizationDeletedDesc\")\n );\n this.dialogRef.close(DeleteOrganizationDialogResult.Deleted);\n };\n\n private buildOrganizationContentSummary(ciphers: CipherView[]): OrganizationContentSummary {\n const organizationContentSummary = new OrganizationContentSummary();\n const organizationItems = ciphers.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/**\n * Strongly typed helper to open a Delete Organization dialog\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 openDeleteOrganizationDialog(\n dialogService: DialogService,\n config: DialogConfig\n) {\n return dialogService.open(\n DeleteOrganizationDialogComponent,\n config\n );\n}\n","
\n \n {{ \"deleteOrganization\" | i18n }}\n
\n {{\n \"deletingOrganizationIsPermanentWarning\" | i18n : organization?.name\n }}\n

\n \n {{ \"orgCreatedSponsorshipInvalid\" | i18n }}\n \n \n 0\">\n {{ \"deletingOrganizationContentWarning\" | i18n : organization?.name }}\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","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\nimport { FeatureFlag, FeatureFlagValue } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\n\n/**\n * Directive that conditionally renders the element when the feature flag is enabled and/or\n * matches the value specified by {@link appIfFeatureValue}.\n *\n * When a feature flag is not found in the config service, the element is hidden.\n */\n@Directive({\n selector: \"[appIfFeature]\",\n})\nexport class IfFeatureDirective implements OnInit {\n /**\n * The feature flag to check.\n */\n @Input() appIfFeature: FeatureFlag;\n\n /**\n * Optional value to compare against the value of the feature flag in the config service.\n * @default true\n */\n @Input() appIfFeatureValue: FeatureFlagValue = true;\n\n private hasView = false;\n\n constructor(\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private configService: ConfigServiceAbstraction,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n try {\n const flagValue = await this.configService.getFeatureFlag(this.appIfFeature);\n\n if (this.appIfFeatureValue === flagValue) {\n if (!this.hasView) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView = true;\n }\n } else {\n this.viewContainer.clear();\n this.hasView = false;\n }\n } catch (e) {\n this.logService.error(e);\n this.viewContainer.clear();\n this.hasView = false;\n }\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"organizationInfo\" | i18n }}\n \n \n {{ \"policies\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n \n {{ \"importData\" | i18n }}\n \n \n {{ \"exportVault\" | i18n }}\n \n \n {{ \"domainVerification\" | i18n }}\n \n \n {{ \"singleSignOn\" | i18n }}\n \n \n \n {{ \"deviceApprovals\" | i18n }}\n \n \n \n {{ \"scim\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { Observable, switchMap } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\n\n@Component({\n selector: \"app-org-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent implements OnInit {\n organization$: Observable;\n FeatureFlag = FeatureFlag;\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n this.organization$ = this.route.params.pipe(\n switchMap((params) => this.organizationService.get$(params.organizationId))\n );\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 * Helper method to iterate over each \"selected\" form control and its corresponding item\n * @param fn - The function to call for each form control and its corresponding item\n */\n forEachControlItem(\n fn: (control: AbstractControl, TControlValue>, value: TItem) => void\n ) {\n for (let i = 0; i < this.formArray.length; i++) {\n // The selectedItems array and formArray are explicitly kept in sync,\n // so we can safely assume the index of the form control and item are the same\n fn(this.formArray.at(i), this.selectedItems[i]);\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { OrganizationUserType } from \"@bitwarden/common/admin-console/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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 {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n} from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { FormSelectionList } from \"@bitwarden/angular/utils/form-selection-list\";\nimport { I18nService } from \"@bitwarden/common/platform/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 * Updates the enabled/disabled state of provided row form group based on the item's readonly state.\n * If a row is enabled, it also updates the enabled/disabled state of the permission control\n * based on the item's accessAllItems state and the current value of `permissionMode`.\n * @param controlRow - The form group for the row to update\n * @param item - The access item that is represented by the row\n */\n private updateRowControlDisableState = (\n controlRow: FormGroup>,\n item: AccessItemView\n ) => {\n // Disable entire row form group if readonly\n if (item.readonly) {\n controlRow.disable();\n } else {\n controlRow.enable();\n\n // The enable() above also enables the permission control, so we need to disable it again\n // Disable permission control if accessAllItems is enabled or not in Edit mode\n if (item.accessAllItems || this.permissionMode != PermissionMode.Edit) {\n controlRow.controls.permission.disable();\n }\n }\n };\n\n /**\n * Updates the enabled/disabled state of ALL row form groups based on each item's readonly state.\n */\n private updateAllRowControlDisableStates = () => {\n this.selectionList.forEachControlItem((controlRow, item) => {\n this.updateRowControlDisableState(controlRow as FormGroup>, item);\n });\n };\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: new FormControl(item.id),\n type: new FormControl(item.type),\n permission: permissionControl,\n });\n\n this.updateRowControlDisableState(fg, item);\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 // Update any internal permission controls\n this.updateAllRowControlDisableStates();\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 // The enable() above automatically enables all the row controls,\n // so we need to disable the readonly ones again\n this.updateAllRowControlDisableStates();\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 {\n OrganizationUserStatusType,\n OrganizationUserType,\n} from \"@bitwarden/common/admin-console/enums\";\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\";\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 { ChallengeResponse } from \"@bitwarden/common/auth/models/response/two-factor-web-authn.response\";\n\nexport class CredentialCreateOptionsView {\n constructor(readonly options: ChallengeResponse, readonly token: string) {}\n}\n","import { WebauthnLoginAttestationResponseRequest } from \"./webauthn-login-attestation-response.request\";\n\n/**\n * Request sent to the server to save a newly created webauthn login credential.\n */\nexport class SaveCredentialRequest {\n /** The response recieved from the authenticator. This contains the public key */\n deviceResponse: WebauthnLoginAttestationResponseRequest;\n\n /** Nickname chosen by the user to identify this credential */\n name: string;\n\n /**\n * Token required by the server to complete the creation.\n * It contains encrypted information that the server needs to verify the credential.\n */\n token: string;\n}\n","import { Utils } from \"@bitwarden/common/platform/misc/utils\";\n\n/**\n * An abstract class that represents responses recieved from the webauthn authenticator.\n * It contains data that is commonly returned during different types of authenticator interactions.\n */\nexport abstract class WebauthnLoginAuthenticatorResponseRequest {\n id: string;\n rawId: string;\n type: string;\n extensions: Record;\n\n constructor(credential: PublicKeyCredential) {\n this.id = credential.id;\n this.rawId = Utils.fromBufferToB64(credential.rawId);\n this.type = credential.type;\n this.extensions = {}; // Extensions are handled client-side\n }\n}\n","import { Utils } from \"@bitwarden/common/platform/misc/utils\";\n\nimport { WebauthnLoginAuthenticatorResponseRequest } from \"./webauthn-login-authenticator-response.request\";\n\n/**\n * The response recieved from an authentiator after a successful attestation.\n * This request is used to save newly created webauthn login credentials to the server.\n */\nexport class WebauthnLoginAttestationResponseRequest extends WebauthnLoginAuthenticatorResponseRequest {\n response: {\n attestationObject: string;\n clientDataJson: string;\n };\n\n constructor(credential: PublicKeyCredential) {\n super(credential);\n\n if (!(credential.response instanceof AuthenticatorAttestationResponse)) {\n throw new Error(\"Invalid authenticator response\");\n }\n\n this.response = {\n attestationObject: Utils.fromBufferToB64(credential.response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(credential.response.clientDataJSON),\n };\n }\n}\n","import { ChallengeResponse } from \"@bitwarden/common/auth/models/response/two-factor-web-authn.response\";\nimport { BaseResponse } from \"@bitwarden/common/models/response/base.response\";\n\n/**\n * Options provided by the server to be used during attestation (i.e. creation of a new webauthn credential)\n */\nexport class WebauthnLoginCredentialCreateOptionsResponse extends BaseResponse {\n /** Options to be provided to the webauthn authenticator */\n options: ChallengeResponse;\n\n /**\n * Contains an encrypted version of the {@link options}.\n * Used by the server to validate the attestation response of newly created credentials.\n */\n token: string;\n\n constructor(response: unknown) {\n super(response);\n this.options = new ChallengeResponse(this.getResponseProperty(\"options\"));\n this.token = this.getResponseProperty(\"token\");\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/auth/models/request/secret-verification.request\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\n\nimport { SaveCredentialRequest } from \"./request/save-credential.request\";\nimport { WebauthnLoginCredentialCreateOptionsResponse } from \"./response/webauthn-login-credential-create-options.response\";\nimport { WebauthnLoginCredentialResponse } from \"./response/webauthn-login-credential.response\";\n\n@Injectable({ providedIn: \"root\" })\nexport class WebauthnLoginApiService {\n constructor(private apiService: ApiService) {}\n\n async getCredentialCreateOptions(\n request: SecretVerificationRequest\n ): Promise {\n const response = await this.apiService.send(\"POST\", \"/webauthn/options\", request, true, true);\n return new WebauthnLoginCredentialCreateOptionsResponse(response);\n }\n\n async saveCredential(request: SaveCredentialRequest): Promise {\n await this.apiService.send(\"POST\", \"/webauthn\", request, true, true);\n return true;\n }\n\n getCredentials(): Promise> {\n return this.apiService.send(\"GET\", \"/webauthn\", null, true, true);\n }\n\n async deleteCredential(credentialId: string, request: SecretVerificationRequest): Promise {\n await this.apiService.send(\"POST\", `/webauthn/${credentialId}/delete`, request, true, true);\n }\n}\n","import { Injectable, Optional } from \"@angular/core\";\nimport { BehaviorSubject, filter, from, map, Observable, shareReplay, switchMap, tap } from \"rxjs\";\n\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\nimport { CredentialCreateOptionsView } from \"../../views/credential-create-options.view\";\nimport { WebauthnCredentialView } from \"../../views/webauth-credential.view\";\n\nimport { SaveCredentialRequest } from \"./request/save-credential.request\";\nimport { WebauthnLoginAttestationResponseRequest } from \"./request/webauthn-login-attestation-response.request\";\nimport { WebauthnLoginApiService } from \"./webauthn-login-api.service\";\n\n@Injectable({ providedIn: \"root\" })\nexport class WebauthnLoginService {\n static readonly MaxCredentialCount = 5;\n\n private navigatorCredentials: CredentialsContainer;\n private _refresh$ = new BehaviorSubject(undefined);\n private _loading$ = new BehaviorSubject(true);\n private readonly credentials$ = this._refresh$.pipe(\n tap(() => this._loading$.next(true)),\n switchMap(() => this.fetchCredentials$()),\n tap(() => this._loading$.next(false)),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n readonly loading$ = this._loading$.asObservable();\n\n constructor(\n private apiService: WebauthnLoginApiService,\n private userVerificationService: UserVerificationService,\n @Optional() navigatorCredentials?: CredentialsContainer,\n @Optional() private logService?: LogService\n ) {\n // Default parameters don't work when used with Angular DI\n this.navigatorCredentials = navigatorCredentials ?? navigator.credentials;\n }\n\n async getCredentialCreateOptions(\n verification: Verification\n ): Promise {\n const request = await this.userVerificationService.buildRequest(verification);\n const response = await this.apiService.getCredentialCreateOptions(request);\n return new CredentialCreateOptionsView(response.options, response.token);\n }\n\n async createCredential(\n credentialOptions: CredentialCreateOptionsView\n ): Promise {\n const nativeOptions: CredentialCreationOptions = {\n publicKey: credentialOptions.options,\n };\n\n try {\n const response = await this.navigatorCredentials.create(nativeOptions);\n if (!(response instanceof PublicKeyCredential)) {\n return undefined;\n }\n return response;\n } catch (error) {\n this.logService?.error(error);\n return undefined;\n }\n }\n\n async saveCredential(\n credentialOptions: CredentialCreateOptionsView,\n deviceResponse: PublicKeyCredential,\n name: string\n ) {\n const request = new SaveCredentialRequest();\n request.deviceResponse = new WebauthnLoginAttestationResponseRequest(deviceResponse);\n request.token = credentialOptions.token;\n request.name = name;\n await this.apiService.saveCredential(request);\n this.refresh();\n }\n\n /**\n * List of webauthn credentials saved on the server.\n *\n * **Note:**\n * - Subscribing might trigger a network request if the credentials haven't been fetched yet.\n * - The observable is shared and will not create unnecessary duplicate requests.\n * - The observable will automatically re-fetch if the user adds or removes a credential.\n * - The observable is lazy and will only fetch credentials when subscribed to.\n * - Don't subscribe to this in the constructor of a long-running service, as it will keep the observable alive.\n */\n getCredentials$(): Observable {\n return this.credentials$;\n }\n\n getCredential$(credentialId: string): Observable {\n return this.credentials$.pipe(\n map((credentials) => credentials.find((c) => c.id === credentialId)),\n filter((c) => c !== undefined)\n );\n }\n\n async deleteCredential(credentialId: string, verification: Verification): Promise {\n const request = await this.userVerificationService.buildRequest(verification);\n await this.apiService.deleteCredential(credentialId, request);\n this.refresh();\n }\n\n private fetchCredentials$(): Observable {\n return from(this.apiService.getCredentials()).pipe(map((response) => response.data));\n }\n\n private refresh() {\n this._refresh$.next();\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { PasswordCalloutComponent } from \"@bitwarden/auth\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { RegisterFormComponent } from \"./register-form.component\";\n\n@NgModule({\n imports: [SharedModule, PasswordCalloutComponent],\n declarations: [RegisterFormComponent],\n exports: [RegisterFormComponent],\n})\nexport class RegisterFormModule {}\n","import { TwoFactorProviderType } from \"../../enums/two-factor-provider-type\";\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/auth/models/request/secret-verification.request\";\nimport { TwoFactorProviderRequest } from \"@bitwarden/common/auth/models/request/two-factor-provider.request\";\nimport { AuthResponseBase } from \"@bitwarden/common/auth/types/auth-response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 protected componentName = \"\";\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected userVerificationService: UserVerificationService,\n protected dialogService: DialogService\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.dialogService.openSimpleDialog({\n title: { key: \"disable\" },\n content: { key: \"twoStepDisableDesc\" },\n type: \"warning\",\n });\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { UpdateTwoFactorDuoRequest } from \"@bitwarden/common/auth/models/request/update-two-factor-duo.request\";\nimport { TwoFactorDuoResponse } from \"@bitwarden/common/auth/models/response/two-factor-duo.response\";\nimport { AuthResponse } from \"@bitwarden/common/auth/types/auth-response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 override componentName = \"app-two-factor-duo\";\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n dialogService: DialogService\n ) {\n super(\n apiService,\n i18nService,\n platformUtilsService,\n logService,\n userVerificationService,\n dialogService\n );\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"@bitwarden/common/auth/models/request/update-two-factor-authenticator.request\";\nimport { TwoFactorAuthenticatorResponse } from \"@bitwarden/common/auth/models/response/two-factor-authenticator.response\";\nimport { AuthResponse } from \"@bitwarden/common/auth/types/auth-response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { DialogService } from \"@bitwarden/components\";\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 override componentName = \"app-two-factor-authenticator\";\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 dialogService: DialogService\n ) {\n super(\n apiService,\n i18nService,\n platformUtilsService,\n logService,\n userVerificationService,\n dialogService\n );\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { TwoFactorEmailRequest } from \"@bitwarden/common/auth/models/request/two-factor-email.request\";\nimport { UpdateTwoFactorEmailRequest } from \"@bitwarden/common/auth/models/request/update-two-factor-email.request\";\nimport { TwoFactorEmailResponse } from \"@bitwarden/common/auth/models/response/two-factor-email.response\";\nimport { AuthResponse } from \"@bitwarden/common/auth/types/auth-response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 override componentName = \"app-two-factor-email\";\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n private stateService: StateService,\n dialogService: DialogService\n ) {\n super(\n apiService,\n i18nService,\n platformUtilsService,\n logService,\n userVerificationService,\n dialogService\n );\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 { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { TwoFactorRecoverResponse } from \"@bitwarden/common/auth/models/response/two-factor-recover.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/auth/models/request/secret-verification.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"@bitwarden/common/auth/models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"@bitwarden/common/auth/models/request/update-two-factor-web-authn.request\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"@bitwarden/common/auth/models/response/two-factor-web-authn.response\";\nimport { AuthResponse } from \"@bitwarden/common/auth/types/auth-response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 override componentName = \"app-two-factor-webauthn\";\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone,\n logService: LogService,\n userVerificationService: UserVerificationService,\n dialogService: DialogService\n ) {\n super(\n apiService,\n i18nService,\n platformUtilsService,\n logService,\n userVerificationService,\n dialogService\n );\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\n const confirmed = await this.dialogService.openSimpleDialog({\n title: name,\n content: { key: \"removeU2fConfirmation\" },\n type: \"warning\",\n });\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"@bitwarden/common/auth/models/request/update-two-factor-yubio-otp.request\";\nimport { TwoFactorYubiKeyResponse } from \"@bitwarden/common/auth/models/response/two-factor-yubi-key.response\";\nimport { AuthResponse } from \"@bitwarden/common/auth/types/auth-response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 override componentName = \"app-two-factor-yubikey\";\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n dialogService: DialogService\n ) {\n super(\n apiService,\n i18nService,\n platformUtilsService,\n logService,\n userVerificationService,\n dialogService\n );\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","
\n

{{ \"twoStepLogin\" | i18n }}

\n

{{ \"twoStepLoginEnforcement\" | i18n }}

\n
\n

{{ \"twoStepLoginDesc\" | i18n }}

\n\n

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

{{ \"twoStepLoginOrganizationSsoDesc\" | i18n }}

\n
\n \n {{ \"twoStepLoginTeamsDesc\" | i18n }}\n
\n {{ \"twoStepLoginOrganizationDuoDesc\" | i18n }}\n
\n

\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, 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 { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { TwoFactorProviders } from \"@bitwarden/common/auth/services/two-factor.service\";\nimport { ProductType } from \"@bitwarden/common/enums\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.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 organization: Organization;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n modal: ModalRef;\n formPromise: Promise;\n\n tabbedHeader = true;\n\n protected 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 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 get isEnterpriseOrg() {\n return this.organization?.planProductType === ProductType.Enterprise;\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/auth/models/request/secret-verification.request\";\nimport { AuthResponse } from \"@bitwarden/common/auth/types/auth-response\";\nimport { TwoFactorResponse } from \"@bitwarden/common/auth/types/two-factor-response\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\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 \n \n
\n
\n \n \n
\n
\n","import { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { SharedModule } from \"../../../../shared/shared.module\";\n\nimport { UserVerificationPromptComponent } from \"./user-verification-prompt.component\";\nimport { UserVerificationComponent } from \"./user-verification.component\";\n\n@NgModule({\n imports: [SharedModule, FormsModule, ReactiveFormsModule],\n declarations: [UserVerificationComponent, UserVerificationPromptComponent],\n exports: [UserVerificationComponent, UserVerificationPromptComponent],\n})\nexport class UserVerificationModule {}\n","import { Directive } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\nimport { ModalRef } from \"../../components/modal/modal.ref\";\nimport { ModalConfig } from \"../../services/modal.service\";\n\n/**\n * Used to verify the user's identity (using their master password or email-based OTP for Key Connector users). You can customize all of the text in the modal.\n */\n@Directive()\nexport class UserVerificationPromptComponent {\n confirmDescription = this.config.data.confirmDescription;\n confirmButtonText = this.config.data.confirmButtonText;\n modalTitle = this.config.data.modalTitle;\n\n formGroup = this.formBuilder.group({\n secret: this.formBuilder.control(null),\n });\n\n protected invalidSecret = false;\n\n constructor(\n private modalRef: ModalRef,\n protected config: ModalConfig,\n protected userVerificationService: UserVerificationService,\n private formBuilder: FormBuilder,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n get secret() {\n return this.formGroup.controls.secret;\n }\n\n submit = async () => {\n this.formGroup.markAllAsTouched();\n\n if (this.formGroup.invalid) {\n return;\n }\n\n try {\n //Incorrect secret will throw an invalid password error.\n await this.userVerificationService.verifyUser(this.secret.value);\n this.invalidSecret = false;\n } catch (e) {\n this.invalidSecret = true;\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"error\"), e.message);\n return;\n }\n\n this.close(true);\n };\n\n close(success: boolean) {\n this.modalRef.close(success);\n }\n}\n","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { UserVerificationPromptComponent as BaseUserVerificationPrompt } from \"@bitwarden/angular/auth/components/user-verification-prompt.component\";\nimport { ModalConfig } from \"@bitwarden/angular/services/modal.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nexport interface UserVerificationPromptParams {\n confirmDescription: string;\n confirmButtonText: string;\n modalTitle: string;\n}\n\n@Component({\n templateUrl: \"user-verification-prompt.component.html\",\n})\nexport class UserVerificationPromptComponent extends BaseUserVerificationPrompt {\n constructor(\n @Inject(DIALOG_DATA) data: UserVerificationPromptParams,\n private dialogRef: DialogRef,\n userVerificationService: UserVerificationService,\n formBuilder: FormBuilder,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService\n ) {\n // TODO: Remove when BaseUserVerificationPrompt has support for CL\n const modalConfig: ModalConfig = { data };\n super(\n null,\n modalConfig,\n userVerificationService,\n formBuilder,\n platformUtilsService,\n i18nService\n );\n }\n\n override close(success: boolean) {\n this.dialogRef.close(success);\n }\n}\n\n/**\n * Strongly typed helper to open a UserVerificationPrompt\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 openUserVerificationPrompt = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n UserVerificationPromptComponent,\n config\n );\n};\n","
\n \n {{ modalTitle | i18n }}\n \n

{{ confirmDescription | i18n }}

\n \n
\n \n \n \n \n
\n
\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, Validators } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/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 not using a password, 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, OnDestroy {\n private _invalidSecret = false;\n @Input()\n get invalidSecret() {\n return this._invalidSecret;\n }\n set invalidSecret(value: boolean) {\n this._invalidSecret = value;\n this.invalidSecretChange.emit(value);\n\n // ISSUE: This is pretty hacky but unfortunately there is no way of knowing if the parent\n // control has been marked as touched, see: https://github.com/angular/angular/issues/10887\n // When that functionality has been added we should also look into forwarding reactive form\n // controls errors so that we don't need a separate input/output `invalidSecret`.\n if (value) {\n this.secret.markAsTouched();\n }\n this.secret.updateValueAndValidity({ emitEvent: false });\n }\n @Output() invalidSecretChange = new EventEmitter();\n\n hasMasterPassword = true;\n disableRequestOTP = false;\n sentCode = false;\n\n secret = new FormControl(\"\", [\n Validators.required,\n () => {\n if (this.invalidSecret) {\n return {\n invalidSecret: {\n message: this.hasMasterPassword\n ? this.i18nService.t(\"incorrectCode\")\n : this.i18nService.t(\"incorrectPassword\"),\n },\n };\n }\n },\n ]);\n\n private onChange: (value: Verification) => void;\n private destroy$ = new Subject();\n\n constructor(\n private cryptoService: CryptoService,\n private userVerificationService: UserVerificationService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.hasMasterPassword = await this.userVerificationService.hasMasterPasswordAndMasterKeyHash();\n this.processChanges(this.secret.value);\n\n this.secret.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((secret: string) => this.processChanges(secret));\n }\n\n requestOTP = async () => {\n if (!this.hasMasterPassword) {\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 ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected processChanges(secret: string) {\n this.invalidSecret = false;\n\n if (this.onChange == null) {\n return;\n }\n\n this.onChange({\n type: this.hasMasterPassword ? VerificationType.MasterPassword : VerificationType.OTP,\n secret: Utils.isNullOrWhitespace(secret) ? null : secret,\n });\n }\n}\n","\n \n {{ \"masterPass\" | i18n }}\n \n \n {{ \"confirmIdentity\" | i18n }}\n \n\n\n
\n \n \n \n \n {{ \"codeSent\" | i18n }}\n \n
\n\n \n {{ \"verificationCode\" | i18n }}\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/auth/components/user-verification.component\";\n\n@Component({\n selector: \"app-user-verification\",\n templateUrl: \"user-verification.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: UserVerificationComponent,\n },\n ],\n animations: [\n trigger(\"sent\", [\n transition(\":enter\", [style({ opacity: 0 }), animate(\"100ms\", style({ opacity: 1 }))]),\n ]),\n ],\n})\nexport class UserVerificationComponent extends BaseComponent {}\n","import { PaymentMethodType, PlanType } from \"../../../billing/enums\";\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 useSecretsManager: boolean;\n additionalSmSeats: number;\n additionalServiceAccounts: number;\n}\n","import { PlanType } from \"../../../billing/enums\";\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 useSecretsManager: boolean;\n additionalSmSeats: number;\n additionalServiceAccounts: number;\n}\n","import { OrganizationCreateRequest } from \"../../../models/request/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\n : selectedPlan.PasswordManager.baseSeats\n : (seatPriceMonthly(selectedPlan) | currency : \"$\")\n }}\n
\n
\n
\n
\n \n \n {{\n \"additionalStorageIntervalDesc\"\n | i18n\n : \"1 GB\"\n : (additionalStoragePriceMonthly(selectedPlan) | currency : \"$\")\n : (\"month\" | i18n)\n }}\n
\n
\n
\n
\n
\n \n \n
\n {{\n \"premiumAccessDesc\" | i18n : (3.33 | currency : \"$\") : (\"month\" | i18n)\n }}\n
\n
\n

{{ \"summary\" | i18n }}

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

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

\n \n {{ paymentDesc }}\n \n \n \n
\n
\n {{ \"passwordManagerPlanPrice\" | i18n }}: {{ passwordManagerSubtotal | currency : \"USD $\" }}\n
\n \n {{ \"secretsManagerPlanPrice\" | i18n }}: {{ secretsManagerSubtotal | currency : \"USD $\" }}\n
\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 { FormBuilder, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { OrganizationCreateRequest } from \"@bitwarden/common/admin-console/models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/admin-console/models/request/organization-keys.request\";\nimport { OrganizationUpgradeRequest } from \"@bitwarden/common/admin-console/models/request/organization-upgrade.request\";\nimport { ProviderOrganizationCreateRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-organization-create.request\";\nimport { PaymentMethodType, PlanType } from \"@bitwarden/common/billing/enums\";\nimport { PlanResponse } from \"@bitwarden/common/billing/models/response/plan.response\";\nimport { ProductType } from \"@bitwarden/common/enums\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport {\n OrgKey,\n SymmetricCryptoKey,\n} from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\nimport { OrganizationCreateModule } from \"../../admin-console/organizations/create/organization-create.module\";\nimport { BillingSharedModule, secretsManagerSubscribeFormFactory } from \"../shared\";\nimport { PaymentComponent } from \"../shared/payment.component\";\nimport { TaxInfoComponent } from \"../shared/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 standalone: true,\n imports: [BillingSharedModule, OrganizationCreateModule],\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() currentProductType: ProductType;\n\n @Input()\n get product(): ProductType {\n return this._product;\n }\n\n set product(product: ProductType) {\n this._product = product;\n this.formGroup?.controls?.product?.setValue(product);\n }\n\n private _product = ProductType.Free;\n\n @Input()\n get plan(): PlanType {\n return this._plan;\n }\n\n set plan(plan: PlanType) {\n this._plan = plan;\n this.formGroup?.controls?.plan?.setValue(plan);\n }\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 singleOrgPolicyAppliesToActiveUser = false;\n isInTrialFlow = false;\n discount = 0;\n\n secretsManagerSubscription = secretsManagerSubscribeFormFactory(this.formBuilder);\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 secretsManager: this.secretsManagerSubscription,\n });\n\n passwordManagerPlans: PlanResponse[];\n secretsManagerPlans: 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: FormBuilder,\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.passwordManagerPlans = plans.data.filter((plan) => !!plan.PasswordManager);\n this.secretsManagerPlans = plans.data.filter((plan) => !!plan.SecretsManager);\n\n if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n this.formGroup.controls.businessOwned.setValue(true);\n }\n }\n\n if (this.hasProvider) {\n this.formGroup.controls.businessOwned.setValue(true);\n this.changedOwnedBusiness();\n }\n\n if (!this.createOrganization) {\n this.upgradeFlowPrefillForm();\n } else {\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.singleOrgPolicyAppliesToActiveUser = policyAppliesToActiveUser;\n });\n\n this.loading = false;\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get singleOrgPolicyBlock() {\n return this.singleOrgPolicyAppliesToActiveUser && !this.hasProvider;\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.passwordManagerPlans.find(\n (plan) => plan.type === this.formGroup.controls.plan.value\n );\n }\n\n get selectedSecretsManagerPlan() {\n return this.secretsManagerPlans.find(\n (plan) => plan.type === this.formGroup.controls.plan.value\n );\n }\n\n get selectedPlanInterval() {\n return this.selectedPlan.isAnnual ? \"year\" : \"month\";\n }\n\n get selectableProducts() {\n if (this.acceptingSponsorship) {\n const familyPlan = this.passwordManagerPlans.find(\n (plan) => plan.type === PlanType.FamiliesAnnually\n );\n this.discount = familyPlan.PasswordManager.basePrice;\n return [familyPlan];\n }\n\n const businessOwnedIsChecked = this.formGroup.controls.businessOwned.value;\n\n const result = this.passwordManagerPlans.filter(\n (plan) =>\n plan.type !== PlanType.Custom &&\n (!businessOwnedIsChecked || plan.canBeUsedByBusiness) &&\n (this.showFree || plan.product !== ProductType.Free) &&\n this.planIsEnabled(plan) &&\n (plan.isAnnual ||\n plan.product === ProductType.Free ||\n plan.product === ProductType.TeamsStarter) &&\n (this.currentProductType !== ProductType.TeamsStarter ||\n plan.product === ProductType.Teams ||\n plan.product === ProductType.Enterprise)\n );\n\n result.sort((planA, planB) => planA.displaySortOrder - planB.displaySortOrder);\n\n return result;\n }\n\n get selectablePlans() {\n const selectedProductType = this.formGroup.controls.product.value;\n const result = this.passwordManagerPlans?.filter(\n (plan) => this.planIsEnabled(plan) && plan.product === selectedProductType\n );\n\n result.sort((planA, planB) => planA.displaySortOrder - planB.displaySortOrder);\n return result;\n }\n\n get teamsStarterPlanFeatureFlagIsEnabled(): boolean {\n return this.passwordManagerPlans.some((plan) => plan.product === ProductType.TeamsStarter);\n }\n\n get hasProvider() {\n return this.providerId != null;\n }\n\n additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.PasswordManager.additionalStoragePricePerGb;\n }\n return selectedPlan.PasswordManager.additionalStoragePricePerGb / 12;\n }\n\n seatPriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.PasswordManager.seatPrice;\n }\n return selectedPlan.PasswordManager.seatPrice / 12;\n }\n\n additionalStorageTotal(plan: PlanResponse): number {\n if (!plan.PasswordManager.hasAdditionalStorageOption) {\n return 0;\n }\n\n return (\n plan.PasswordManager.additionalStoragePricePerGb *\n Math.abs(this.formGroup.controls.additionalStorage.value || 0)\n );\n }\n\n passwordManagerSeatTotal(plan: PlanResponse, seats: number): number {\n if (!plan.PasswordManager.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.PasswordManager.seatPrice * Math.abs(seats || 0);\n }\n\n secretsManagerSeatTotal(plan: PlanResponse, seats: number): number {\n if (!plan.SecretsManager.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.SecretsManager.seatPrice * Math.abs(seats || 0);\n }\n\n additionalServiceAccountTotal(plan: PlanResponse): number {\n if (!plan.SecretsManager.hasAdditionalServiceAccountOption) {\n return 0;\n }\n\n return (\n plan.SecretsManager.additionalPricePerServiceAccount *\n Math.abs(this.secretsManagerForm.value.additionalServiceAccounts || 0)\n );\n }\n\n get passwordManagerSubtotal() {\n let subTotal = this.selectedPlan.PasswordManager.basePrice;\n if (\n this.selectedPlan.PasswordManager.hasAdditionalSeatsOption &&\n this.formGroup.controls.additionalSeats.value\n ) {\n subTotal += this.passwordManagerSeatTotal(\n this.selectedPlan,\n this.formGroup.value.additionalSeats\n );\n }\n if (\n this.selectedPlan.PasswordManager.hasAdditionalStorageOption &&\n this.formGroup.controls.additionalStorage.value\n ) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (\n this.selectedPlan.PasswordManager.hasPremiumAccessOption &&\n this.formGroup.controls.premiumAccessAddon.value\n ) {\n subTotal += this.selectedPlan.PasswordManager.premiumAccessOptionPrice;\n }\n return subTotal - this.discount;\n }\n\n get secretsManagerSubtotal() {\n const plan = this.selectedSecretsManagerPlan;\n const formValues = this.secretsManagerForm.value;\n\n if (!this.planOffersSecretsManager || !formValues.enabled) {\n return 0;\n }\n\n return (\n plan.SecretsManager.basePrice +\n this.secretsManagerSeatTotal(plan, formValues.userSeats) +\n this.additionalServiceAccountTotal(plan)\n );\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) *\n (this.passwordManagerSubtotal + this.secretsManagerSubtotal)\n : 0;\n }\n\n get total() {\n return this.passwordManagerSubtotal + this.secretsManagerSubtotal + 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 get secretsManagerForm() {\n return this.formGroup.controls.secretsManager;\n }\n\n get planOffersSecretsManager() {\n return this.selectedSecretsManagerPlan != null;\n }\n\n changedProduct() {\n this.formGroup.controls.plan.setValue(this.selectablePlans[0].type);\n if (!this.selectedPlan.PasswordManager.hasPremiumAccessOption) {\n this.formGroup.controls.premiumAccessAddon.setValue(false);\n }\n if (!this.selectedPlan.PasswordManager.hasAdditionalStorageOption) {\n this.formGroup.controls.additionalStorage.setValue(0);\n }\n if (!this.selectedPlan.PasswordManager.hasAdditionalSeatsOption) {\n this.formGroup.controls.additionalSeats.setValue(0);\n } else if (\n !this.formGroup.controls.additionalSeats.value &&\n !this.selectedPlan.PasswordManager.baseSeats &&\n this.selectedPlan.PasswordManager.hasAdditionalSeatsOption\n ) {\n this.formGroup.controls.additionalSeats.setValue(1);\n }\n\n if (this.planOffersSecretsManager) {\n this.secretsManagerForm.enable();\n } else {\n this.secretsManagerForm.disable();\n }\n\n this.secretsManagerForm.updateValueAndValidity();\n }\n\n changedOwnedBusiness() {\n if (!this.formGroup.controls.businessOwned.value || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n if (this.teamsStarterPlanFeatureFlagIsEnabled) {\n this.formGroup.controls.product.setValue(ProductType.TeamsStarter);\n this.formGroup.controls.plan.setValue(PlanType.TeamsStarter);\n } else {\n this.formGroup.controls.product.setValue(ProductType.Teams);\n this.formGroup.controls.plan.setValue(PlanType.TeamsAnnually);\n }\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 orgKey = await this.cryptoService.makeOrgKey();\n const key = orgKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n orgKey[1]\n );\n const collectionCt = collection.encryptedString;\n const orgKeys = await this.cryptoService.makeKeyPair(orgKey[1]);\n\n if (this.selfHosted) {\n orgId = await this.createSelfHosted(key, collectionCt, orgKeys);\n } else {\n orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[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.PasswordManager.hasPremiumAccessOption &&\n 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 // Secrets Manager\n this.buildSecretsManagerRequest(request);\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.PasswordManager.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 // Secrets Manager\n this.buildSecretsManagerRequest(request);\n\n if (this.hasProvider) {\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 =\n selectedPlan.PasswordManager.basePrice === 0\n ? selectedPlan.PasswordManager.seatPrice\n : selectedPlan.PasswordManager.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 private buildSecretsManagerRequest(\n request: OrganizationCreateRequest | OrganizationUpgradeRequest\n ): void {\n const formValues = this.secretsManagerForm.value;\n\n request.useSecretsManager = this.planOffersSecretsManager && formValues.enabled;\n\n if (!request.useSecretsManager) {\n return;\n }\n\n if (this.selectedSecretsManagerPlan.SecretsManager.hasAdditionalSeatsOption) {\n request.additionalSmSeats = formValues.userSeats;\n }\n\n if (this.selectedSecretsManagerPlan.SecretsManager.hasAdditionalServiceAccountOption) {\n request.additionalServiceAccounts = formValues.additionalServiceAccounts;\n }\n }\n\n private upgradeFlowPrefillForm() {\n if (this.acceptingSponsorship) {\n this.formGroup.controls.product.setValue(ProductType.Families);\n this.changedProduct();\n return;\n }\n\n // If they already have SM enabled, bump them up to Teams and enable SM to maintain this access\n const organization = this.organizationService.get(this.organizationId);\n if (organization.useSecretsManager) {\n this.formGroup.controls.product.setValue(ProductType.Teams);\n this.secretsManagerForm.controls.enabled.setValue(true);\n this.changedProduct();\n }\n }\n\n private planIsEnabled(plan: PlanResponse) {\n return !plan.disabled && !plan.legacyYear;\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { AddCreditComponent } from \"./add-credit.component\";\nimport { AdjustPaymentComponent } from \"./adjust-payment.component\";\nimport { AdjustStorageComponent } from \"./adjust-storage.component\";\nimport { BillingHistoryComponent } from \"./billing-history.component\";\nimport { PaymentMethodComponent } from \"./payment-method.component\";\nimport { PaymentComponent } from \"./payment.component\";\nimport { SecretsManagerSubscribeComponent } from \"./sm-subscribe.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\nimport { UpdateLicenseComponent } from \"./update-license.component\";\n\n@NgModule({\n imports: [SharedModule, PaymentComponent, TaxInfoComponent],\n declarations: [\n AddCreditComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n BillingHistoryComponent,\n PaymentMethodComponent,\n SecretsManagerSubscribeComponent,\n UpdateLicenseComponent,\n ],\n exports: [\n SharedModule,\n PaymentComponent,\n TaxInfoComponent,\n\n AdjustStorageComponent,\n BillingHistoryComponent,\n SecretsManagerSubscribeComponent,\n UpdateLicenseComponent,\n ],\n})\nexport class BillingSharedModule {}\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\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PaymentMethodType } from \"@bitwarden/common/billing/enums\";\nimport { BitPayInvoiceRequest } from \"@bitwarden/common/billing/models/request/bit-pay-invoice.request\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { PayPalConfig } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 private region: 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 private configService: ConfigServiceAbstraction\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.region = await firstValueFrom(this.configService.cloudRegion$);\n this.ppButtonCustomField += \",account_credit:1\";\n this.ppButtonCustomField += `,region:${this.region}`;\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\";\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 { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { PaymentMethodType } from \"@bitwarden/common/billing/enums\";\nimport { PaymentRequest } from \"@bitwarden/common/billing/models/request/payment.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-adjust-payment\",\n templateUrl: \"adjust-payment.component.html\",\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async submit() {\n try {\n const request = new PaymentRequest();\n this.formPromise = this.paymentComponent.createPaymentToken().then((result) => {\n request.paymentToken = result[0];\n request.paymentMethodType = result[1];\n request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n request.country = this.taxInfoComponent.taxInfo.country;\n if (this.organizationId == null) {\n return this.apiService.postAccountPayment(request);\n } else {\n request.taxId = this.taxInfoComponent.taxInfo.taxId;\n request.state = this.taxInfoComponent.taxInfo.state;\n request.line1 = this.taxInfoComponent.taxInfo.line1;\n request.line2 = this.taxInfoComponent.taxInfo.line2;\n request.city = this.taxInfoComponent.taxInfo.city;\n request.state = this.taxInfoComponent.taxInfo.state;\n return this.organizationApiService.updatePayment(this.organizationId, request);\n }\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedPaymentMethod\")\n );\n this.onAdjusted.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n changeCountry() {\n if (this.taxInfoComponent.taxInfo.country === \"US\") {\n this.paymentComponent.hideBank = !this.organizationId;\n } else {\n this.paymentComponent.hideBank = true;\n if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n }\n}\n","
\n
\n \n

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

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

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

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

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

\n

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

\n

{{ \"creditAppliedDesc\" | i18n }}

\n \n {{ \"addCredit\" | 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 {{ (paymentSource ? \"changePaymentMethod\" : \"addPaymentMethod\") | i18n }}\n \n \n \n

{{ \"paymentChargedWithUnpaidSubscription\" | i18n }}

\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 { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { PaymentMethodType } from \"@bitwarden/common/billing/enums\";\nimport { BillingPaymentResponse } from \"@bitwarden/common/billing/models/response/billing-payment.response\";\nimport { OrganizationSubscriptionResponse } from \"@bitwarden/common/billing/models/response/organization-subscription.response\";\nimport { SubscriptionResponse } from \"@bitwarden/common/billing/models/response/subscription.response\";\nimport { VerifyBankRequest } from \"@bitwarden/common/models/request/verify-bank.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\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: OrganizationSubscriptionResponse;\n sub: SubscriptionResponse;\n paymentMethodType = PaymentMethodType;\n organizationId: string;\n isUnpaid = false;\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 private dialogService: DialogService\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 organizationSubscriptionPromise = this.organizationApiService.getSubscription(\n this.organizationId\n );\n\n [this.billing, this.org] = await Promise.all([\n billingPromise,\n organizationSubscriptionPromise,\n ]);\n } else {\n const billingPromise = this.apiService.getUserBillingPayment();\n const subPromise = this.apiService.getUserSubscription();\n\n [this.billing, this.sub] = await Promise.all([billingPromise, subPromise]);\n }\n\n this.isUnpaid = this.subscription?.status === \"unpaid\" ?? false;\n\n this.loading = false;\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.dialogService.openSimpleDialog({\n title: { key: \"addCredit\" },\n content: { key: \"cannotPerformInAppPurchase\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: \"warning\",\n });\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.dialogService.openSimpleDialog({\n title: { key: \"changePaymentMethod\" },\n content: { key: \"cannotPerformInAppPurchase\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: \"warning\",\n });\n\n return;\n }\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 get subscription() {\n return this.sub?.subscription ?? this.org?.subscription ?? null;\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\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 { PaymentMethodType } from \"@bitwarden/common/billing/enums\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\n\nimport { SharedModule } from \"../../shared\";\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n standalone: true,\n imports: [SharedModule],\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/?advancedFraudSignals=false\";\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","
\n

{{ \"moreFromBitwarden\" | i18n }}

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

{{ \"secretsManagerForPlan\" | i18n : planName }}

\n
\n {{ \"secretsManagerForPlanDesc\" | i18n }}\n
    \n
  • {{ \"limitedUsers\" | i18n : maxUsers }}
  • \n
  • {{ \"unlimitedSecrets\" | i18n }}
  • \n
  • \n {{ \"projectsIncluded\" | i18n : maxProjects }}\n
  • \n \n
  • {{ \"unlimitedProjects\" | i18n }}
  • \n
    \n
  • {{ \"serviceAccountsIncluded\" | i18n : serviceAccountsIncluded }}
  • \n
  • \n {{\n \"additionalServiceAccountCost\" | i18n : (monthlyCostPerServiceAccount | currency : \"$\")\n }}\n
  • \n
\n
\n\n
\n \n {{ \"costPerUser\" | i18n : (monthlyCostPerUser | currency : \"$\") }} /{{ \"month\" | i18n }}\n \n \n {{ \"freeForever\" | i18n }}\n \n
\n\n \n \n {{ \"subscribeToSecretsManager\" | i18n }}\n {{ \"addSecretsManagerUpgradeDesc\" | i18n }}\n \n\n \n
\n \n {{ \"userSeats\" | i18n }}\n \n {{ \"userSeatsHowManyDesc\" | i18n }}\n \n
\n
\n \n {{ \"additionalServiceAccounts\" | i18n }}\n \n \n {{ \"includedServiceAccounts\" | i18n : serviceAccountsIncluded }}\n {{\n \"addAdditionalServiceAccounts\"\n | i18n : (monthlyCostPerServiceAccount | currency : \"$\")\n }}\n \n \n
\n\n \n
\n
\n\n","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Subject, startWith, takeUntil } from \"rxjs\";\n\nimport { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { BillingCustomerDiscount } from \"@bitwarden/common/billing/models/response/organization-subscription.response\";\nimport { PlanResponse } from \"@bitwarden/common/billing/models/response/plan.response\";\nimport { ProductType } from \"@bitwarden/common/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\nimport { SecretsManagerLogo } from \"../../layouts/secrets-manager-logo\";\n\nexport interface SecretsManagerSubscription {\n enabled: boolean;\n userSeats: number;\n additionalServiceAccounts: number;\n}\n\nexport const secretsManagerSubscribeFormFactory = (\n formBuilder: FormBuilder\n): FormGroup> =>\n formBuilder.group({\n enabled: [false],\n userSeats: [1, [Validators.required, Validators.min(1), Validators.max(100000)]],\n additionalServiceAccounts: [\n 0,\n [Validators.required, Validators.min(0), Validators.max(100000)],\n ],\n });\n\n@Component({\n selector: \"sm-subscribe\",\n templateUrl: \"sm-subscribe.component.html\",\n})\nexport class SecretsManagerSubscribeComponent implements OnInit, OnDestroy {\n @Input() formGroup: FormGroup>;\n @Input() upgradeOrganization: boolean;\n @Input() showSubmitButton = false;\n @Input() selectedPlan: PlanResponse;\n @Input() customerDiscount: BillingCustomerDiscount;\n\n logo = SecretsManagerLogo;\n productTypes = ProductType;\n\n private destroy$ = new Subject();\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.formGroup.controls.enabled.valueChanges\n .pipe(startWith(this.formGroup.value.enabled), takeUntil(this.destroy$))\n .subscribe((enabled) => {\n if (enabled) {\n this.formGroup.controls.userSeats.enable();\n this.formGroup.controls.additionalServiceAccounts.enable();\n } else {\n this.formGroup.controls.userSeats.disable();\n this.formGroup.controls.additionalServiceAccounts.disable();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n discountPrice = (price: number) => {\n const discount =\n !!this.customerDiscount && this.customerDiscount.active\n ? price * (this.customerDiscount.percentOff / 100)\n : 0;\n\n return price - discount;\n };\n\n get product() {\n return this.selectedPlan.product;\n }\n\n get planName() {\n switch (this.product) {\n case ProductType.Free:\n return this.i18nService.t(\"free2PersonOrganization\");\n case ProductType.Teams:\n case ProductType.TeamsStarter:\n return this.i18nService.t(\"planNameTeams\");\n case ProductType.Enterprise:\n return this.i18nService.t(\"planNameEnterprise\");\n }\n }\n\n get serviceAccountsIncluded() {\n return this.selectedPlan.SecretsManager.baseServiceAccount;\n }\n\n get monthlyCostPerServiceAccount() {\n return this.selectedPlan.isAnnual\n ? this.discountPrice(this.selectedPlan.SecretsManager.additionalPricePerServiceAccount) / 12\n : this.discountPrice(this.selectedPlan.SecretsManager.additionalPricePerServiceAccount);\n }\n\n get maxUsers() {\n return this.selectedPlan.SecretsManager.maxSeats;\n }\n\n get maxProjects() {\n return this.selectedPlan.SecretsManager.maxProjects;\n }\n\n get monthlyCostPerUser() {\n return this.selectedPlan.isAnnual\n ? this.discountPrice(this.selectedPlan.SecretsManager.seatPrice) / 12\n : this.discountPrice(this.selectedPlan.SecretsManager.seatPrice);\n }\n}\n","
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n \n
\n \n \n
\n
\n\n\n
\n
\n \n \n
\n
\n\n\n
\n
\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 { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationTaxInfoUpdateRequest } from \"@bitwarden/common/billing/models/request/organization-tax-info-update.request\";\nimport { TaxInfoUpdateRequest } from \"@bitwarden/common/billing/models/request/tax-info-update.request\";\nimport { TaxInfoResponse } from \"@bitwarden/common/billing/models/response/tax-info.response\";\nimport { TaxRateResponse } from \"@bitwarden/common/billing/models/response/tax-rate.response\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\n\nimport { SharedModule } from \"../../shared\";\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 standalone: true,\n imports: [SharedModule],\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.countrySupportsTax(this.taxInfo.country) &&\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.country = this.taxInfo.country;\n request.postalCode = this.taxInfo.postalCode;\n\n if (this.taxInfo.includeTaxId) {\n request.taxId = this.taxInfo.taxId;\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 } else {\n request.taxId = null;\n request.line1 = null;\n request.line2 = null;\n request.city = null;\n request.state = null;\n }\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.countrySupportsTax(this.taxInfo.country)) {\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 countrySupportsTax(countryCode: string) {\n return this.taxSupportedCountryCodes.includes(countryCode);\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 private taxSupportedCountryCodes: string[] = [\n \"CN\",\n \"FR\",\n \"DE\",\n \"CA\",\n \"GB\",\n \"AU\",\n \"IN\",\n \"AD\",\n \"AR\",\n \"AT\",\n \"BE\",\n \"BO\",\n \"BR\",\n \"BG\",\n \"CL\",\n \"CO\",\n \"CR\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"DO\",\n \"EC\",\n \"EG\",\n \"SV\",\n \"EE\",\n \"FI\",\n \"GE\",\n \"GR\",\n \"HK\",\n \"HU\",\n \"IS\",\n \"ID\",\n \"IQ\",\n \"IE\",\n \"IL\",\n \"IT\",\n \"JP\",\n \"KE\",\n \"KR\",\n \"LV\",\n \"LI\",\n \"LT\",\n \"LU\",\n \"MY\",\n \"MT\",\n \"MX\",\n \"NL\",\n \"NZ\",\n \"NO\",\n \"PE\",\n \"PH\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"RU\",\n \"SA\",\n \"RS\",\n \"SG\",\n \"SK\",\n \"SI\",\n \"ZA\",\n \"ES\",\n \"SE\",\n \"CH\",\n \"TW\",\n \"TH\",\n \"TR\",\n \"UA\",\n \"AE\",\n \"UY\",\n \"VE\",\n \"VN\",\n ];\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { first, switchMap, takeUntil } from \"rxjs/operators\";\n\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/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 private destroy$ = new Subject();\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 this.route.queryParams\n .pipe(\n first(),\n switchMap(async (qParams) => {\n let error = this.requiredParameters.some(\n (e) => qParams?.[e] == null || qParams[e] === \"\"\n );\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 takeUntil(this.destroy$)\n )\n .subscribe();\n }\n}\n","import { Directive } from \"@angular/core\";\n\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\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\nimport { EventService } from \"../core\";\nimport { EventExportService } from \"../tools/event-export\";\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: EventExportService,\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 serviceAccountId: r.serviceAccountId,\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/platform/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/platform/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(this.userId, this.publicKey);\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 { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport {\n OrganizationUserStatusType,\n OrganizationUserType,\n ProviderUserStatusType,\n ProviderUserType,\n} from \"@bitwarden/common/admin-console/enums\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/admin-console/models/response/provider/provider-user.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { OrganizationUserView } from \"../admin-console/organizations/core/views/organization-user.view\";\nimport { UserConfirmComponent } from \"../admin-console/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 protected dialogService: DialogService\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.dialogService.openSimpleDialog({\n title: this.userNamePipe.transform(user),\n content: { key: \"removeUserConfirmation\" },\n type: \"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 protected async revokeUserConfirmationDialog(user: UserType) {\n return this.dialogService.openSimpleDialog({\n title: { key: \"revokeAccess\", placeholders: [this.userNamePipe.transform(user)] },\n content: this.revokeWarningMessage(),\n acceptButtonText: { key: \"revokeAccess\" },\n type: \"warning\",\n });\n }\n\n async revoke(user: UserType) {\n const confirmed = await this.revokeUserConfirmationDialog(user);\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);\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\";\n\nimport { SharedModule } from \"../shared\";\n\ntype SizeTypes = \"xlarge\" | \"large\" | \"default\" | \"small\" | \"xsmall\";\n@Component({\n selector: \"dynamic-avatar\",\n standalone: true,\n imports: [SharedModule],\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","
\n \n \n \n {{ \"usDomain\" | i18n }}\n \n \n \n {{ \"euDomain\" | i18n }}\n \n \n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { RegionDomain } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\n\n@Component({\n selector: \"environment-selector\",\n templateUrl: \"environment-selector.component.html\",\n})\nexport class EnvironmentSelectorComponent implements OnInit {\n constructor(\n private configService: ConfigServiceAbstraction,\n private platformUtilsService: PlatformUtilsService,\n private router: Router\n ) {}\n\n isEuServer: boolean;\n isUsServer: boolean;\n showRegionSelector = false;\n euServerFlagEnabled: boolean;\n routeAndParams: string;\n\n async ngOnInit() {\n this.euServerFlagEnabled = await this.configService.getFeatureFlag(\n FeatureFlag.DisplayEuEnvironmentFlag\n );\n const domain = Utils.getDomain(window.location.href);\n this.isEuServer = domain.includes(RegionDomain.EU);\n this.isUsServer = domain.includes(RegionDomain.US) || domain.includes(RegionDomain.USQA);\n this.showRegionSelector = !this.platformUtilsService.isSelfHost();\n this.routeAndParams = `/#${this.router.url}`;\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../app/shared\";\n\nimport { EnvironmentSelectorComponent } from \"./environment-selector.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [EnvironmentSelectorComponent],\n exports: [EnvironmentSelectorComponent],\n})\nexport class EnvironmentSelectorModule {}\n","import { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty(\"ApiKey\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\nimport { SsoConfigApi } from \"../api/sso-config.api\";\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 { BaseResponse } from \"../../../models/response/base.response\";\nimport { PaymentMethodType, TransactionType } from \"../../enums\";\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 { ProductType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { PlanType } from \"../../enums\";\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 trialPeriodDays: number;\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 upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n PasswordManager: PasswordManagerPlanFeaturesResponse;\n SecretsManager: SecretsManagerPlanFeaturesResponse;\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.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(\"DisplaySortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n const passwordManager = this.getResponseProperty(\"PasswordManager\");\n const secretsManager = this.getResponseProperty(\"SecretsManager\");\n this.PasswordManager =\n passwordManager == null ? null : new PasswordManagerPlanFeaturesResponse(passwordManager);\n this.SecretsManager =\n secretsManager == null ? null : new SecretsManagerPlanFeaturesResponse(secretsManager);\n }\n}\n\nexport class SecretsManagerPlanFeaturesResponse extends BaseResponse {\n // Seats\n stripeSeatPlanId: string;\n baseSeats: number;\n basePrice: number;\n seatPrice: number;\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n maxSeats: number;\n\n // Service accounts\n stripeServiceAccountPlanId: string;\n additionalPricePerServiceAccount: number;\n baseServiceAccount: number;\n maxServiceAccount: number;\n hasAdditionalServiceAccountOption: boolean;\n maxAdditionalServiceAccounts: number;\n\n // Features\n maxProjects: number;\n\n constructor(response: any) {\n super(response);\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.maxSeats = this.getResponseProperty(\"MaxSeats\");\n this.stripeServiceAccountPlanId = this.getResponseProperty(\"StripeServiceAccountPlanId\");\n this.additionalPricePerServiceAccount = this.getResponseProperty(\n \"AdditionalPricePerServiceAccount\"\n );\n this.baseServiceAccount = this.getResponseProperty(\"BaseServiceAccount\");\n this.maxServiceAccount = this.getResponseProperty(\"MaxServiceAccount\");\n this.hasAdditionalServiceAccountOption = this.getResponseProperty(\n \"HasAdditionalServiceAccountOption\"\n );\n this.maxAdditionalServiceAccounts = this.getResponseProperty(\"MaxAdditionalServiceAccounts\");\n this.maxProjects = this.getResponseProperty(\"MaxProjects\");\n }\n}\n\nexport class PasswordManagerPlanFeaturesResponse extends BaseResponse {\n // Seats\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n premiumAccessOptionPrice: number;\n baseSeats: number;\n maxAdditionalSeats: number;\n maxSeats: number;\n hasPremiumAccessOption: boolean;\n\n // Storage\n additionalStoragePricePerGb: number;\n stripeStoragePlanId: string;\n baseStorageGb: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasAdditionalSeatsOption: boolean;\n\n // Feature\n maxCollections: number;\n\n constructor(response: any) {\n super(response);\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.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n this.maxSeats = this.getResponseProperty(\"MaxSeats\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n }\n}\n","import { PlanType } from \"../../../billing/enums\";\nimport { PlanResponse } from \"../../../billing/models/response/plan.response\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class OrganizationResponse extends BaseResponse {\n id: 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 useSecretsManager: boolean;\n hasPublicAndPrivateKeys: boolean;\n usePasswordManager: boolean;\n smSeats?: number;\n smServiceAccounts?: number;\n maxAutoscaleSmSeats?: number;\n maxAutoscaleSmServiceAccounts?: number;\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.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\n const plan = this.getResponseProperty(\"Plan\");\n this.plan = plan == null ? null : new PlanResponse(plan);\n\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.useSecretsManager = this.getResponseProperty(\"UseSecretsManager\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n this.usePasswordManager = this.getResponseProperty(\"UsePasswordManager\");\n this.smSeats = this.getResponseProperty(\"SmSeats\");\n this.smServiceAccounts = this.getResponseProperty(\"SmServiceAccounts\");\n this.maxAutoscaleSmSeats = this.getResponseProperty(\"MaxAutoscaleSmSeats\");\n this.maxAutoscaleSmServiceAccounts = this.getResponseProperty(\"MaxAutoscaleSmServiceAccounts\");\n }\n}\n","import { BaseResponse } from \"../../../models/response/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 addonSubscriptionItem: boolean;\n productName: string;\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 this.addonSubscriptionItem = this.getResponseProperty(\"AddonSubscriptionItem\");\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 { OrganizationResponse } from \"../../../admin-console/models/response/organization.response\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\n\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 customerDiscount: BillingCustomerDiscount;\n expiration: string;\n expirationWithoutGracePeriod: string;\n secretsManagerBeta: boolean;\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 const customerDiscount = this.getResponseProperty(\"CustomerDiscount\");\n this.customerDiscount =\n customerDiscount == null ? null : new BillingCustomerDiscount(customerDiscount);\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.expirationWithoutGracePeriod = this.getResponseProperty(\"ExpirationWithoutGracePeriod\");\n this.secretsManagerBeta = this.getResponseProperty(\"SecretsManagerBeta\");\n }\n}\n\nexport class BillingCustomerDiscount extends BaseResponse {\n id: string;\n active: boolean;\n percentOff?: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.active = this.getResponseProperty(\"Active\");\n this.percentOff = this.getResponseProperty(\"PercentOff\");\n }\n\n discountPrice = (price: number) => {\n const discount = this !== null && this.active ? price * (this.percentOff / 100) : 0;\n\n return price - discount;\n };\n}\n","import { ProductType, ProviderType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { OrganizationUserStatusType, OrganizationUserType } from \"../../enums\";\nimport { PermissionsApi } from \"../api/permissions.api\";\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 usePasswordManager: boolean;\n useActivateAutofillPolicy: 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 providerType?: ProviderType;\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.usePasswordManager = this.getResponseProperty(\"UsePasswordManager\");\n this.useActivateAutofillPolicy = this.getResponseProperty(\"UseActivateAutofillPolicy\");\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.providerType = this.getResponseProperty(\"ProviderType\");\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 { BaseResponse } from \"../../../models/response/base.response\";\nimport { ProviderUserStatusType, ProviderUserType } from \"../../enums\";\nimport { PermissionsApi } from \"../api/permissions.api\";\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 { ProfileOrganizationResponse } from \"../../admin-console/models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../../admin-console/models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../../admin-console/models/response/profile-provider.response\";\n\nimport { BaseResponse } from \"./base.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 \"../../../models/response/base.response\";\nimport { ProfileResponse } from \"../../../models/response/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 { BaseResponse } from \"../../../models/response/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 \"../../../models/response/base.response\";\nimport { OrganizationApiKeyType } from \"../../enums\";\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 \"../../../models/response/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 \"../../../models/response/keys.response\";\n\nexport class OrganizationKeysResponse extends KeysResponse {\n constructor(response: any) {\n super(response);\n }\n}\n","import Domain from \"../../../platform/models/domain/domain-base\";\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled = false;\n}\n","import { ProviderUserStatusType, ProviderUserType } from \"../../admin-console/enums\";\nimport { ProviderData } from \"../../admin-console/models/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 { Observable } from \"rxjs\";\n\nimport { UserId } from \"../../types/guid\";\nimport { AuthenticationStatus } from \"../enums/authentication-status\";\n\nexport type AccountInfo = {\n status: AuthenticationStatus;\n email: string;\n name: string | undefined;\n};\n\nexport abstract class AccountService {\n accounts$: Observable>;\n activeAccount$: Observable<{ id: UserId | undefined } & AccountInfo>;\n accountLock$: Observable;\n accountLogout$: Observable;\n /**\n * Updates the `accounts$` observable with the new account data.\n * @param userId\n * @param accountData\n */\n abstract addAccount(userId: UserId, accountData: AccountInfo): void;\n /**\n * updates the `accounts$` observable with the new preferred name for the account.\n * @param userId\n * @param name\n */\n abstract setAccountName(userId: UserId, name: string): void;\n /**\n * updates the `accounts$` observable with the new email for the account.\n * @param userId\n * @param email\n */\n abstract setAccountEmail(userId: UserId, email: string): void;\n /**\n * Updates the `accounts$` observable with the new account status.\n * Also emits the `accountLock$` or `accountLogout$` observable if the status is `Locked` or `LoggedOut` respectively.\n * @param userId\n * @param status\n */\n abstract setAccountStatus(userId: UserId, status: AuthenticationStatus): void;\n /**\n * Updates the `activeAccount$` observable with the new active account.\n * @param userId\n */\n abstract switchAccount(userId: UserId): void;\n}\n\nexport abstract class InternalAccountService extends AccountService {\n abstract delete(): void;\n}\n","import { VerifyOTPRequest } from \"../../models/request/verify-otp.request\";\n\nexport abstract class UserVerificationApiServiceAbstraction {\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postAccountRequestOTP: () => Promise;\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { DeviceRequest } from \"./device.request\";\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 { ClientType } from \"../../../../enums\";\nimport { Utils } from \"../../../../platform/misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captcha-protected.request\";\n\nimport { DeviceRequest } from \"./device.request\";\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 { BaseResponse } from \"../../../models/response/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 { 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 KeyConnectorUserDecryptionOption {\n constructor(public keyConnectorUrl: string) {}\n}\n","export class TrustedDeviceUserDecryptionOption {\n constructor(\n public hasAdminApproval: boolean,\n public hasLoginApprovingDevice: boolean,\n public hasManageResetPasswordPermission: boolean\n ) {}\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { Region } from \"../../abstractions/environment.service\";\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 featureStates: { [key: string]: 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 this.featureStates = serverConfigResponse?.featureStates;\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 cloudRegion: Region;\n vault: string;\n api: string;\n identity: string;\n notifications: string;\n sso: string;\n\n constructor(response: Partial) {\n this.cloudRegion = response.cloudRegion;\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 { EncryptedOrganizationKeyData } from \"../../../admin-console/models/data/encrypted-organization-key.data\";\nimport { OrganizationData } from \"../../../admin-console/models/data/organization.data\";\nimport { PolicyData } from \"../../../admin-console/models/data/policy.data\";\nimport { ProviderData } from \"../../../admin-console/models/data/provider.data\";\nimport { Policy } from \"../../../admin-console/models/domain/policy\";\nimport { AuthenticationStatus } from \"../../../auth/enums/authentication-status\";\nimport { AdminAuthRequestStorable } from \"../../../auth/models/domain/admin-auth-req-storable\";\nimport { EnvironmentUrls } from \"../../../auth/models/domain/environment-urls\";\nimport { ForceResetPasswordReason } from \"../../../auth/models/domain/force-reset-password-reason\";\nimport { KeyConnectorUserDecryptionOption } from \"../../../auth/models/domain/user-decryption-options/key-connector-user-decryption-option\";\nimport { TrustedDeviceUserDecryptionOption } from \"../../../auth/models/domain/user-decryption-options/trusted-device-user-decryption-option\";\nimport { IdentityTokenResponse } from \"../../../auth/models/response/identity-token.response\";\nimport { KdfType, UriMatchType } from \"../../../enums\";\nimport { EventData } from \"../../../models/data/event.data\";\nimport { GeneratorOptions } from \"../../../tools/generator/generator-options\";\nimport {\n GeneratedPasswordHistory,\n PasswordGeneratorOptions,\n} from \"../../../tools/generator/password\";\nimport { UsernameGeneratorOptions } from \"../../../tools/generator/username/username-generation-options\";\nimport { SendData } from \"../../../tools/send/models/data/send.data\";\nimport { SendView } from \"../../../tools/send/models/view/send.view\";\nimport { DeepJsonify } from \"../../../types/deep-jsonify\";\nimport { CipherData } from \"../../../vault/models/data/cipher.data\";\nimport { CollectionData } from \"../../../vault/models/data/collection.data\";\nimport { FolderData } from \"../../../vault/models/data/folder.data\";\nimport { CipherView } from \"../../../vault/models/view/cipher.view\";\nimport { CollectionView } from \"../../../vault/models/view/collection.view\";\nimport { Utils } from \"../../misc/utils\";\nimport { ServerConfigData } from \"../../models/data/server-config.data\";\n\nimport { EncryptedString, EncString } from \"./enc-string\";\nimport { MasterKey, SymmetricCryptoKey, UserKey } 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 userKey?: UserKey;\n masterKey?: MasterKey;\n masterKeyEncryptedUserKey?: string;\n deviceKey?: ReturnType;\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?: Uint8Array;\n apiKeyClientSecret?: string;\n\n /** @deprecated July 2023, left for migration purposes*/\n cryptoMasterKey?: SymmetricCryptoKey;\n /** @deprecated July 2023, left for migration purposes*/\n cryptoMasterKeyAuto?: string;\n /** @deprecated July 2023, left for migration purposes*/\n cryptoMasterKeyBiometric?: string;\n /** @deprecated July 2023, left for migration purposes*/\n cryptoSymmetricKey?: EncryptionPair = new EncryptionPair<\n string,\n SymmetricCryptoKey\n >();\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(new AccountKeys(), {\n userKey: SymmetricCryptoKey.fromJSON(obj?.userKey),\n masterKey: SymmetricCryptoKey.fromJSON(obj?.masterKey),\n deviceKey: obj?.deviceKey,\n cryptoMasterKey: SymmetricCryptoKey.fromJSON(obj?.cryptoMasterKey),\n cryptoSymmetricKey: EncryptionPair.fromJSON(\n obj?.cryptoSymmetricKey,\n SymmetricCryptoKey.fromJSON\n ),\n organizationKeys: AccountKeys.initRecordEncryptionPairsFromJSON(obj?.organizationKeys),\n providerKeys: AccountKeys.initRecordEncryptionPairsFromJSON(obj?.providerKeys),\n privateKey: EncryptionPair.fromJSON(obj?.privateKey, (decObj: string) =>\n Utils.fromByteStringToArray(decObj)\n ),\n publicKey: Utils.fromByteStringToArray(obj?.publicKey),\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 everHadUserKey?: boolean;\n everBeenUnlocked?: boolean;\n forcePasswordResetReason?: ForceResetPasswordReason;\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 dismissedAutoFillOnPageLoadCallout?: 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?: PasswordGeneratorOptions;\n usernameGenerationOptions?: UsernameGeneratorOptions;\n generatorOptions?: GeneratorOptions;\n pinKeyEncryptedUserKey?: EncryptedString;\n pinKeyEncryptedUserKeyEphemeral?: EncryptedString;\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 activateAutoFillOnPageLoadFromPolicy?: boolean;\n region?: string;\n smOnboardingTasks?: Record>;\n trustDeviceChoiceForDecryption?: boolean;\n\n /** @deprecated July 2023, left for migration purposes*/\n pinProtected?: EncryptionPair = new EncryptionPair();\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 AccountDecryptionOptions {\n hasMasterPassword: boolean;\n trustedDeviceOption?: TrustedDeviceUserDecryptionOption;\n keyConnectorOption?: KeyConnectorUserDecryptionOption;\n\n constructor(init?: Partial) {\n if (init) {\n Object.assign(this, init);\n }\n }\n\n // TODO: these nice getters don't work because the Account object is not properly being deserialized out of\n // JSON (the Account static fromJSON method is not running) so these getters don't exist on the\n // account decryptions options object when pulled out of state. This is a bug that needs to be fixed later on\n // get hasTrustedDeviceOption(): boolean {\n // return this.trustedDeviceOption !== null && this.trustedDeviceOption !== undefined;\n // }\n\n // get hasKeyConnectorOption(): boolean {\n // return this.keyConnectorOption !== null && this.keyConnectorOption !== undefined;\n // }\n\n static fromResponse(response: IdentityTokenResponse): AccountDecryptionOptions {\n if (response == null) {\n return null;\n }\n\n const accountDecryptionOptions = new AccountDecryptionOptions();\n\n if (response.userDecryptionOptions) {\n // If the response has userDecryptionOptions, this means it's on a post-TDE server version and can interrogate\n // the new decryption options.\n const responseOptions = response.userDecryptionOptions;\n accountDecryptionOptions.hasMasterPassword = responseOptions.hasMasterPassword;\n\n if (responseOptions.trustedDeviceOption) {\n accountDecryptionOptions.trustedDeviceOption = new TrustedDeviceUserDecryptionOption(\n responseOptions.trustedDeviceOption.hasAdminApproval,\n responseOptions.trustedDeviceOption.hasLoginApprovingDevice,\n responseOptions.trustedDeviceOption.hasManageResetPasswordPermission\n );\n }\n\n if (responseOptions.keyConnectorOption) {\n accountDecryptionOptions.keyConnectorOption = new KeyConnectorUserDecryptionOption(\n responseOptions.keyConnectorOption.keyConnectorUrl\n );\n }\n } else {\n // If the response does not have userDecryptionOptions, this means it's on a pre-TDE server version and so\n // we must base our decryption options on the presence of the keyConnectorUrl.\n // Note that the presence of keyConnectorUrl implies that the user does not have a master password, as in pre-TDE\n // server versions, a master password short-circuited the addition of the keyConnectorUrl to the response.\n // TODO: remove this check after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3537)\n const usingKeyConnector = response.keyConnectorUrl != null;\n accountDecryptionOptions.hasMasterPassword = !usingKeyConnector;\n if (usingKeyConnector) {\n accountDecryptionOptions.keyConnectorOption = new KeyConnectorUserDecryptionOption(\n response.keyConnectorUrl\n );\n }\n }\n return accountDecryptionOptions;\n }\n\n static fromJSON(obj: Jsonify): AccountDecryptionOptions {\n if (obj == null) {\n return null;\n }\n\n const accountDecryptionOptions = Object.assign(new AccountDecryptionOptions(), obj);\n\n if (obj.trustedDeviceOption) {\n accountDecryptionOptions.trustedDeviceOption = new TrustedDeviceUserDecryptionOption(\n obj.trustedDeviceOption.hasAdminApproval,\n obj.trustedDeviceOption.hasLoginApprovingDevice,\n obj.trustedDeviceOption.hasManageResetPasswordPermission\n );\n }\n\n if (obj.keyConnectorOption) {\n accountDecryptionOptions.keyConnectorOption = new KeyConnectorUserDecryptionOption(\n obj.keyConnectorOption.keyConnectorUrl\n );\n }\n\n return accountDecryptionOptions;\n }\n}\n\nexport class LoginState {\n ssoOrganizationIdentifier?: string;\n\n constructor(init?: Partial) {\n if (init) {\n Object.assign(this, init);\n }\n }\n\n static fromJSON(obj: Jsonify): LoginState {\n if (obj == null) {\n return null;\n }\n\n const loginState = Object.assign(new LoginState(), obj);\n return loginState;\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 decryptionOptions?: AccountDecryptionOptions = new AccountDecryptionOptions();\n loginState?: LoginState = new LoginState();\n adminAuthRequest?: Jsonify = null;\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 decryptionOptions: {\n ...new AccountDecryptionOptions(),\n ...init?.decryptionOptions,\n },\n loginState: {\n ...new LoginState(),\n ...init?.loginState,\n },\n adminAuthRequest: init?.adminAuthRequest,\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 decryptionOptions: AccountDecryptionOptions.fromJSON(json?.decryptionOptions),\n loginState: LoginState.fromJSON(json?.loginState),\n adminAuthRequest: AdminAuthRequestStorable.fromJSON(json?.adminAuthRequest),\n });\n }\n}\n","import { Utils } from \"../../../platform/misc/utils\";\nimport { TwoFactorProviderType } from \"../../enums/two-factor-provider-type\";\n\nimport { ForceResetPasswordReason } from \"./force-reset-password-reason\";\n\nexport class AuthResult {\n captchaSiteKey = \"\";\n // TODO: PM-3287 - Remove this after 3 releases of backwards compatibility. - Target release 2023.12 for removal\n /**\n * @deprecated\n * Replace with using AccountDecryptionOptions to determine if the user does\n * not have a master password and is not using Key Connector.\n * */\n resetMasterPassword = false;\n\n forcePasswordReset: ForceResetPasswordReason = ForceResetPasswordReason.None;\n twoFactorProviders: Map = null;\n ssoEmail2FaSessionToken?: string;\n email: string;\n requiresEncryptionKeyMigration: boolean;\n\n get requiresCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n get requiresTwoFactor() {\n return this.twoFactorProviders != null;\n }\n}\n","import { DeviceType } from \"../../../../enums\";\nimport { PlatformUtilsService } from \"../../../../platform/abstractions/platform-utils.service\";\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 { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class MasterPasswordPolicyResponse extends BaseResponse {\n minComplexity: number;\n minLength: number;\n requireUpper: boolean;\n requireLower: boolean;\n requireNumbers: boolean;\n requireSpecial: boolean;\n\n /**\n * Flag to indicate if the policy should be enforced on login.\n * If true, and the user's password does not meet the policy requirements,\n * the user will be forced to update their password.\n */\n enforceOnLogin: boolean;\n\n constructor(response: any) {\n super(response);\n\n this.minComplexity = this.getResponseProperty(\"MinComplexity\");\n this.minLength = this.getResponseProperty(\"MinLength\");\n this.requireUpper = this.getResponseProperty(\"RequireUpper\");\n this.requireLower = this.getResponseProperty(\"RequireLower\");\n this.requireNumbers = this.getResponseProperty(\"RequireNumbers\");\n this.requireSpecial = this.getResponseProperty(\"RequireSpecial\");\n this.enforceOnLogin = this.getResponseProperty(\"EnforceOnLogin\");\n }\n}\n","import { BaseResponse } from \"../../../../models/response/base.response\";\n\nexport interface IKeyConnectorUserDecryptionOptionServerResponse {\n KeyConnectorUrl: string;\n}\n\nexport class KeyConnectorUserDecryptionOptionResponse extends BaseResponse {\n keyConnectorUrl: string;\n\n constructor(response: IKeyConnectorUserDecryptionOptionServerResponse) {\n super(response);\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { BaseResponse } from \"../../../../models/response/base.response\";\nimport { EncString } from \"../../../../platform/models/domain/enc-string\";\n\nexport interface ITrustedDeviceUserDecryptionOptionServerResponse {\n HasAdminApproval: boolean;\n HasLoginApprovingDevice: boolean;\n HasManageResetPasswordPermission: boolean;\n EncryptedPrivateKey?: string;\n EncryptedUserKey?: string;\n}\n\nexport class TrustedDeviceUserDecryptionOptionResponse extends BaseResponse {\n hasAdminApproval: boolean;\n hasLoginApprovingDevice: boolean;\n hasManageResetPasswordPermission: boolean;\n encryptedPrivateKey: EncString;\n encryptedUserKey: EncString;\n\n constructor(response: any) {\n super(response);\n this.hasAdminApproval = this.getResponseProperty(\"HasAdminApproval\");\n\n this.hasLoginApprovingDevice = this.getResponseProperty(\"HasLoginApprovingDevice\");\n this.hasManageResetPasswordPermission = this.getResponseProperty(\n \"HasManageResetPasswordPermission\"\n );\n\n if (response.EncryptedPrivateKey) {\n this.encryptedPrivateKey = new EncString(this.getResponseProperty(\"EncryptedPrivateKey\"));\n }\n if (response.EncryptedUserKey) {\n this.encryptedUserKey = new EncString(this.getResponseProperty(\"EncryptedUserKey\"));\n }\n }\n}\n","import { BaseResponse } from \"../../../../models/response/base.response\";\n\nimport {\n IKeyConnectorUserDecryptionOptionServerResponse,\n KeyConnectorUserDecryptionOptionResponse,\n} from \"./key-connector-user-decryption-option.response\";\nimport {\n ITrustedDeviceUserDecryptionOptionServerResponse,\n TrustedDeviceUserDecryptionOptionResponse,\n} from \"./trusted-device-user-decryption-option.response\";\n\nexport interface IUserDecryptionOptionsServerResponse {\n HasMasterPassword: boolean;\n TrustedDeviceOption?: ITrustedDeviceUserDecryptionOptionServerResponse;\n KeyConnectorOption?: IKeyConnectorUserDecryptionOptionServerResponse;\n}\n\nexport class UserDecryptionOptionsResponse extends BaseResponse {\n hasMasterPassword: boolean;\n trustedDeviceOption?: TrustedDeviceUserDecryptionOptionResponse;\n keyConnectorOption?: KeyConnectorUserDecryptionOptionResponse;\n\n constructor(response: IUserDecryptionOptionsServerResponse) {\n super(response);\n\n this.hasMasterPassword = this.getResponseProperty(\"HasMasterPassword\");\n\n if (response.TrustedDeviceOption) {\n this.trustedDeviceOption = new TrustedDeviceUserDecryptionOptionResponse(\n this.getResponseProperty(\"TrustedDeviceOption\")\n );\n }\n if (response.KeyConnectorOption) {\n this.keyConnectorOption = new KeyConnectorUserDecryptionOptionResponse(\n this.getResponseProperty(\"KeyConnectorOption\")\n );\n }\n }\n}\n","import { KdfType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\n\nimport { MasterPasswordPolicyResponse } from \"./master-password-policy.response\";\nimport { UserDecryptionOptionsResponse } from \"./user-decryption-options/user-decryption-options.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 masterPasswordPolicy: MasterPasswordPolicyResponse;\n apiUseKeyConnector: boolean;\n keyConnectorUrl: string;\n\n userDecryptionOptions: UserDecryptionOptionsResponse;\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 this.masterPasswordPolicy = new MasterPasswordPolicyResponse(\n this.getResponseProperty(\"MasterPasswordPolicy\")\n );\n\n if (response.UserDecryptionOptions) {\n this.userDecryptionOptions = new UserDecryptionOptionsResponse(\n this.getResponseProperty(\"UserDecryptionOptions\")\n );\n }\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\nimport { TwoFactorProviderType } from \"../../enums/two-factor-provider-type\";\n\nimport { MasterPasswordPolicyResponse } from \"./master-password-policy.response\";\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n captchaToken: string;\n ssoEmail2faSessionToken: string;\n email?: string;\n masterPasswordPolicy?: MasterPasswordPolicyResponse;\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 this.masterPasswordPolicy = new MasterPasswordPolicyResponse(\n this.getResponseProperty(\"MasterPasswordPolicy\")\n );\n\n this.ssoEmail2faSessionToken = this.getResponseProperty(\"SsoEmail2faSessionToken\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { ClientType } from \"../../enums\";\nimport { KeysRequest } from \"../../models/request/keys.request\";\nimport { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport {\n Account,\n AccountDecryptionOptions,\n AccountKeys,\n AccountProfile,\n AccountTokens,\n} from \"../../platform/models/domain/account\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/two-factor.service\";\nimport { TwoFactorProviderType } from \"../enums/two-factor-provider-type\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport { ForceResetPasswordReason } from \"../models/domain/force-reset-password-reason\";\nimport {\n PasswordlessLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n UserApiLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { DeviceRequest } from \"../models/request/identity-token/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 { 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\ntype IdentityResponse = IdentityTokenResponse | IdentityTwoFactorResponse | IdentityCaptchaResponse;\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 async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n const [authResult] = await this.startLogIn();\n return authResult;\n }\n\n protected async startLogIn(): Promise<[AuthResult, IdentityResponse]> {\n this.twoFactorService.clearSelectedProvider();\n\n const response = await this.apiService.postIdentityToken(this.tokenRequest);\n\n if (response instanceof IdentityTwoFactorResponse) {\n return [await this.processTwoFactorResponse(response), response];\n } else if (response instanceof IdentityCaptchaResponse) {\n return [await this.processCaptchaResponse(response), response];\n } else if (response instanceof IdentityTokenResponse) {\n return [await this.processTokenResponse(response), 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\n // Must persist existing device key if it exists for trusted device decryption to work\n // However, we must provide a user id so that the device key can be retrieved\n // as the state service won't have an active account at this point in time\n // even though the data exists in local storage.\n const userId = accountInformation.sub;\n\n const deviceKey = await this.stateService.getDeviceKey({ userId });\n const accountKeys = new AccountKeys();\n if (deviceKey) {\n accountKeys.deviceKey = deviceKey;\n }\n\n // If you don't persist existing admin auth requests on login, they will get deleted.\n const adminAuthRequest = await this.stateService.getAdminAuthRequest({ userId });\n\n await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId,\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 keys: accountKeys,\n decryptionOptions: AccountDecryptionOptions.fromResponse(tokenResponse),\n adminAuthRequest: adminAuthRequest?.toJSON(),\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n\n // Old encryption keys must be migrated, but is currently only available on web.\n // Other clients shouldn't continue the login process.\n if (this.encryptionKeyMigrationRequired(response)) {\n result.requiresEncryptionKeyMigration = true;\n if (this.platformUtilsService.getClientType() !== ClientType.Web) {\n return result;\n }\n }\n\n result.resetMasterPassword = response.resetMasterPassword;\n\n // Convert boolean to enum\n if (response.forcePasswordReset) {\n result.forcePasswordReset = ForceResetPasswordReason.AdminForcePasswordReset;\n }\n\n // Must come before setting keys, user key needs email to update additional keys\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n await this.setMasterKey(response);\n await this.setUserKey(response);\n await this.setPrivateKey(response);\n\n this.messagingService.send(\"loggedIn\");\n\n return result;\n }\n\n // The keys comes from different sources depending on the login strategy\n protected abstract setMasterKey(response: IdentityTokenResponse): Promise;\n\n protected abstract setUserKey(response: IdentityTokenResponse): Promise;\n\n protected abstract setPrivateKey(response: IdentityTokenResponse): Promise;\n\n // Old accounts used master key for encryption. We are forcing migrations but only need to\n // check on password logins\n protected encryptionKeyMigrationRequired(response: IdentityTokenResponse): boolean {\n return false;\n }\n\n protected 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 private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise {\n const result = new AuthResult();\n result.twoFactorProviders = response.twoFactorProviders2;\n\n this.twoFactorService.setProviders(response);\n this.captchaBypassToken = response.captchaToken ?? null;\n result.ssoEmail2FaSessionToken = response.ssoEmail2faSessionToken;\n result.email = response.email;\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","import { ApiService } from \"../../abstractions/api.service\";\nimport { PolicyService } from \"../../admin-console/abstractions/policy/policy.service.abstraction\";\nimport { MasterPasswordPolicyOptions } from \"../../admin-console/models/domain/master-password-policy-options\";\nimport { HashPurpose } from \"../../enums\";\nimport { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { MasterKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { PasswordStrengthServiceAbstraction } from \"../../tools/password-strength\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/two-factor.service\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport { ForceResetPasswordReason } from \"../models/domain/force-reset-password-reason\";\nimport { PasswordLogInCredentials } 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\";\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\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 localMasterKeyHash: string;\n private masterKey: MasterKey;\n\n /**\n * Options to track if the user needs to update their password due to a password that does not meet an organization's\n * master password policy.\n */\n private forcePasswordResetReason: ForceResetPasswordReason = ForceResetPasswordReason.None;\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 protected stateService: StateService,\n twoFactorService: TwoFactorService,\n private passwordStrengthService: PasswordStrengthServiceAbstraction,\n private policyService: PolicyService,\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 override async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n const result = await super.logInTwoFactor(twoFactor);\n\n // 2FA was successful, save the force update password options with the state service if defined\n if (\n !result.requiresTwoFactor &&\n !result.requiresCaptcha &&\n this.forcePasswordResetReason != ForceResetPasswordReason.None\n ) {\n await this.stateService.setForcePasswordResetReason(this.forcePasswordResetReason);\n result.forcePasswordReset = this.forcePasswordResetReason;\n }\n\n return result;\n }\n\n override async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.masterKey = 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.localMasterKeyHash = await this.cryptoService.hashMasterKey(\n masterPassword,\n this.masterKey,\n HashPurpose.LocalAuthorization\n );\n const masterKeyHash = await this.cryptoService.hashMasterKey(masterPassword, this.masterKey);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n masterKeyHash,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n const [authResult, identityResponse] = await this.startLogIn();\n\n const masterPasswordPolicyOptions =\n this.getMasterPasswordPolicyOptionsFromResponse(identityResponse);\n\n // The identity result can contain master password policies for the user's organizations\n if (masterPasswordPolicyOptions?.enforceOnLogin) {\n // If there is a policy active, evaluate the supplied password before its no longer in memory\n const meetsRequirements = this.evaluateMasterPassword(\n credentials,\n masterPasswordPolicyOptions\n );\n\n if (!meetsRequirements) {\n if (authResult.requiresCaptcha || authResult.requiresTwoFactor) {\n // Save the flag to this strategy for later use as the master password is about to pass out of scope\n this.forcePasswordResetReason = ForceResetPasswordReason.WeakMasterPassword;\n } else {\n // Authentication was successful, save the force update password options with the state service\n await this.stateService.setForcePasswordResetReason(\n ForceResetPasswordReason.WeakMasterPassword\n );\n authResult.forcePasswordReset = ForceResetPasswordReason.WeakMasterPassword;\n }\n }\n }\n return authResult;\n }\n\n protected override async setMasterKey(response: IdentityTokenResponse) {\n await this.cryptoService.setMasterKey(this.masterKey);\n await this.cryptoService.setMasterKeyHash(this.localMasterKeyHash);\n }\n\n protected override async setUserKey(response: IdentityTokenResponse): Promise {\n // If migration is required, we won't have a user key to set yet.\n if (this.encryptionKeyMigrationRequired(response)) {\n return;\n }\n await this.cryptoService.setMasterKeyEncryptedUserKey(response.key);\n\n const masterKey = await this.cryptoService.getMasterKey();\n if (masterKey) {\n const userKey = await this.cryptoService.decryptUserKeyWithMasterKey(masterKey);\n await this.cryptoService.setUserKey(userKey);\n }\n }\n\n protected override async setPrivateKey(response: IdentityTokenResponse): Promise {\n await this.cryptoService.setPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n protected override encryptionKeyMigrationRequired(response: IdentityTokenResponse): boolean {\n return !response.key;\n }\n\n private getMasterPasswordPolicyOptionsFromResponse(\n response: IdentityTokenResponse | IdentityTwoFactorResponse | IdentityCaptchaResponse\n ): MasterPasswordPolicyOptions {\n if (response == null || response instanceof IdentityCaptchaResponse) {\n return null;\n }\n return MasterPasswordPolicyOptions.fromResponse(response.masterPasswordPolicy);\n }\n\n private evaluateMasterPassword(\n { masterPassword, email }: PasswordLogInCredentials,\n options: MasterPasswordPolicyOptions\n ): boolean {\n const passwordStrength = this.passwordStrengthService.getPasswordStrength(\n masterPassword,\n email\n )?.score;\n\n return this.policyService.evaluateMasterPassword(passwordStrength, masterPassword, options);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"../abstractions/device-trust-crypto.service.abstraction\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/two-factor.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\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\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 deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction\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 override 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 const [authResult] = await this.startLogIn();\n return authResult;\n }\n\n override 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 protected override async setMasterKey(response: IdentityTokenResponse) {\n if (\n this.passwordlessCredentials.decryptedMasterKey &&\n this.passwordlessCredentials.decryptedMasterKeyHash\n ) {\n await this.cryptoService.setMasterKey(this.passwordlessCredentials.decryptedMasterKey);\n await this.cryptoService.setMasterKeyHash(\n this.passwordlessCredentials.decryptedMasterKeyHash\n );\n }\n }\n\n protected override async setUserKey(response: IdentityTokenResponse): Promise {\n // User now may or may not have a master password\n // but set the master key encrypted user key if it exists regardless\n await this.cryptoService.setMasterKeyEncryptedUserKey(response.key);\n\n if (this.passwordlessCredentials.decryptedUserKey) {\n await this.cryptoService.setUserKey(this.passwordlessCredentials.decryptedUserKey);\n } else {\n await this.trySetUserKeyWithMasterKey();\n // Establish trust if required after setting user key\n await this.deviceTrustCryptoService.trustDeviceIfRequired();\n }\n }\n\n private async trySetUserKeyWithMasterKey(): Promise {\n const masterKey = await this.cryptoService.getMasterKey();\n if (masterKey) {\n const userKey = await this.cryptoService.decryptUserKeyWithMasterKey(masterKey);\n await this.cryptoService.setUserKey(userKey);\n }\n }\n\n protected override async setPrivateKey(response: IdentityTokenResponse): Promise {\n await this.cryptoService.setPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n}\n","import { DeviceRequest } from \"./device.request\";\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 { AuthRequestResponse } from \"../../auth/models/response/auth-request.response\";\nimport { HttpStatusCode } from \"../../enums\";\nimport { ErrorResponse } from \"../../models/response/error.response\";\nimport { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { AuthRequestCryptoServiceAbstraction } from \"../abstractions/auth-request-crypto.service.abstraction\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"../abstractions/device-trust-crypto.service.abstraction\";\nimport { KeyConnectorService } from \"../abstractions/key-connector.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/two-factor.service\";\nimport { ForceResetPasswordReason } from \"../models/domain/force-reset-password-reason\";\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 // A session token server side to serve as an authentication factor for the user\n // in order to send email OTPs to the user's configured 2FA email address\n // as we don't have a master password hash or other verifiable secret when using SSO.\n ssoEmail2FaSessionToken?: string;\n email?: string; // email not preserved through SSO process so get from server\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 private deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n private authReqCryptoService: AuthRequestCryptoServiceAbstraction,\n private i18nService: I18nService\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 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 const [ssoAuthResult] = await this.startLogIn();\n\n this.email = ssoAuthResult.email;\n this.ssoEmail2FaSessionToken = ssoAuthResult.ssoEmail2FaSessionToken;\n\n // Auth guard currently handles redirects for this.\n if (ssoAuthResult.forcePasswordReset == ForceResetPasswordReason.AdminForcePasswordReset) {\n await this.stateService.setForcePasswordResetReason(ssoAuthResult.forcePasswordReset);\n }\n\n return ssoAuthResult;\n }\n\n protected override async setMasterKey(tokenResponse: IdentityTokenResponse) {\n // The only way we can be setting a master key at this point is if we are using Key Connector.\n // First, check to make sure that we should do so based on the token response.\n if (this.shouldSetMasterKeyFromKeyConnector(tokenResponse)) {\n // If we're here, we know that the user should use Key Connector (they have a KeyConnectorUrl) and does not have a master password.\n // We can now check the key on the token response to see whether they are a brand new user or an existing user.\n // The presence of a masterKeyEncryptedUserKey indicates that the user has already been provisioned in Key Connector.\n const newSsoUser = tokenResponse.key == null;\n if (newSsoUser) {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n } else {\n const keyConnectorUrl = this.getKeyConnectorUrl(tokenResponse);\n await this.keyConnectorService.setMasterKeyFromUrl(keyConnectorUrl);\n }\n }\n }\n\n /**\n * Determines if it is possible set the `masterKey` from Key Connector.\n * @param tokenResponse\n * @returns `true` if the master key can be set from Key Connector, `false` otherwise\n */\n private shouldSetMasterKeyFromKeyConnector(tokenResponse: IdentityTokenResponse): boolean {\n const userDecryptionOptions = tokenResponse?.userDecryptionOptions;\n\n if (userDecryptionOptions != null) {\n const userHasMasterPassword = userDecryptionOptions.hasMasterPassword;\n const userHasKeyConnectorUrl =\n userDecryptionOptions.keyConnectorOption?.keyConnectorUrl != null;\n\n // In order for us to set the master key from Key Connector, we need to have a Key Connector URL\n // and the user must not have a master password.\n return userHasKeyConnectorUrl && !userHasMasterPassword;\n } else {\n // In pre-TDE versions of the server, the userDecryptionOptions will not be present.\n // In this case, we can determine if the user has a master password and has a Key Connector URL by\n // just checking the keyConnectorUrl property. This is because the server short-circuits on the response\n // and will not pass back the URL in the response if the user has a master password.\n // TODO: remove compatibility check after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3537)\n return tokenResponse.keyConnectorUrl != null;\n }\n }\n\n private getKeyConnectorUrl(tokenResponse: IdentityTokenResponse): string {\n // TODO: remove tokenResponse.keyConnectorUrl reference after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3537)\n const userDecryptionOptions = tokenResponse?.userDecryptionOptions;\n return (\n tokenResponse.keyConnectorUrl ?? userDecryptionOptions?.keyConnectorOption?.keyConnectorUrl\n );\n }\n\n // TODO: future passkey login strategy will need to support setting user key (decrypting via TDE or admin approval request)\n // so might be worth moving this logic to a common place (base login strategy or a separate service?)\n protected override async setUserKey(tokenResponse: IdentityTokenResponse): Promise {\n const masterKeyEncryptedUserKey = tokenResponse.key;\n\n // Note: masterKeyEncryptedUserKey is undefined for SSO JIT provisioned users\n // on account creation and subsequent logins (confirmed or unconfirmed)\n // but that is fine for TDE so we cannot return if it is undefined\n\n if (masterKeyEncryptedUserKey) {\n // set the master key encrypted user key if it exists\n await this.cryptoService.setMasterKeyEncryptedUserKey(masterKeyEncryptedUserKey);\n }\n\n const userDecryptionOptions = tokenResponse?.userDecryptionOptions;\n\n // Note: TDE and key connector are mutually exclusive\n if (userDecryptionOptions?.trustedDeviceOption) {\n await this.trySetUserKeyWithApprovedAdminRequestIfExists();\n\n const hasUserKey = await this.cryptoService.hasUserKey();\n\n // Only try to set user key with device key if admin approval request was not successful\n if (!hasUserKey) {\n await this.trySetUserKeyWithDeviceKey(tokenResponse);\n }\n } else if (\n masterKeyEncryptedUserKey != null &&\n this.getKeyConnectorUrl(tokenResponse) != null\n ) {\n // Key connector enabled for user\n await this.trySetUserKeyWithMasterKey();\n }\n\n // Note: In the traditional SSO flow with MP without key connector, the lock component\n // is responsible for deriving master key from MP entry and then decrypting the user key\n }\n\n private async trySetUserKeyWithApprovedAdminRequestIfExists(): Promise {\n // At this point a user could have an admin auth request that has been approved\n const adminAuthReqStorable = await this.stateService.getAdminAuthRequest();\n\n if (!adminAuthReqStorable) {\n return;\n }\n\n // Call server to see if admin auth request has been approved\n let adminAuthReqResponse: AuthRequestResponse;\n\n try {\n adminAuthReqResponse = await this.apiService.getAuthRequest(adminAuthReqStorable.id);\n } catch (error) {\n if (error instanceof ErrorResponse && error.statusCode === HttpStatusCode.NotFound) {\n // if we get a 404, it means the auth request has been deleted so clear it from storage\n await this.stateService.setAdminAuthRequest(null);\n }\n\n // Always return on an error here as we don't want to block the user from logging in\n return;\n }\n\n if (adminAuthReqResponse?.requestApproved) {\n // if masterPasswordHash has a value, we will always receive authReqResponse.key\n // as authRequestPublicKey(masterKey) + authRequestPublicKey(masterPasswordHash)\n if (adminAuthReqResponse.masterPasswordHash) {\n await this.authReqCryptoService.setKeysAfterDecryptingSharedMasterKeyAndHash(\n adminAuthReqResponse,\n adminAuthReqStorable.privateKey\n );\n } else {\n // if masterPasswordHash is null, we will always receive authReqResponse.key\n // as authRequestPublicKey(userKey)\n await this.authReqCryptoService.setUserKeyAfterDecryptingSharedUserKey(\n adminAuthReqResponse,\n adminAuthReqStorable.privateKey\n );\n }\n\n if (await this.cryptoService.hasUserKey()) {\n // Now that we have a decrypted user key in memory, we can check if we\n // need to establish trust on the current device\n await this.deviceTrustCryptoService.trustDeviceIfRequired();\n\n // if we successfully decrypted the user key, we can delete the admin auth request out of state\n // TODO: eventually we post and clean up DB as well once consumed on client\n await this.stateService.setAdminAuthRequest(null);\n\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"loginApproved\"));\n }\n }\n }\n\n private async trySetUserKeyWithDeviceKey(tokenResponse: IdentityTokenResponse): Promise {\n const trustedDeviceOption = tokenResponse.userDecryptionOptions?.trustedDeviceOption;\n\n const deviceKey = await this.deviceTrustCryptoService.getDeviceKey();\n const encDevicePrivateKey = trustedDeviceOption?.encryptedPrivateKey;\n const encUserKey = trustedDeviceOption?.encryptedUserKey;\n\n if (!deviceKey || !encDevicePrivateKey || !encUserKey) {\n return;\n }\n\n const userKey = await this.deviceTrustCryptoService.decryptUserKeyWithDeviceKey(\n encDevicePrivateKey,\n encUserKey,\n deviceKey\n );\n\n if (userKey) {\n await this.cryptoService.setUserKey(userKey);\n }\n }\n\n private async trySetUserKeyWithMasterKey(): Promise {\n const masterKey = await this.cryptoService.getMasterKey();\n\n // There is a scenario in which the master key is not set here. That will occur if the user\n // has a master password and is using Key Connector. In that case, we cannot set the master key\n // because the user hasn't entered their master password yet.\n // Instead, we'll return here and let the migration to Key Connector handle setting the master key.\n if (!masterKey) {\n return;\n }\n\n const userKey = await this.cryptoService.decryptUserKeyWithMasterKey(masterKey);\n await this.cryptoService.setUserKey(userKey);\n }\n\n protected override async setPrivateKey(tokenResponse: IdentityTokenResponse): Promise {\n const newSsoUser = tokenResponse.key == null;\n\n if (!newSsoUser) {\n await this.cryptoService.setPrivateKey(\n tokenResponse.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n }\n}\n","import { DeviceRequest } from \"./device.request\";\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 { ApiService } from \"../../abstractions/api.service\";\nimport { TokenService } from \"../../auth/abstractions/token.service\";\nimport { TwoFactorService } from \"../../auth/abstractions/two-factor.service\";\nimport { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"../../platform/abstractions/environment.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { KeyConnectorService } from \"../abstractions/key-connector.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 override 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 const [authResult] = await this.startLogIn();\n return authResult;\n }\n\n protected override async setMasterKey(response: IdentityTokenResponse) {\n if (response.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.setMasterKeyFromUrl(keyConnectorUrl);\n }\n }\n\n protected override async setUserKey(response: IdentityTokenResponse): Promise {\n await this.cryptoService.setMasterKeyEncryptedUserKey(response.key);\n\n if (response.apiUseKeyConnector) {\n const masterKey = await this.cryptoService.getMasterKey();\n if (masterKey) {\n const userKey = await this.cryptoService.decryptUserKeyWithMasterKey(masterKey);\n await this.cryptoService.setUserKey(userKey);\n }\n }\n }\n\n protected override async setPrivateKey(response: IdentityTokenResponse): Promise {\n await this.cryptoService.setPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\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","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateDevicesTrustRequest extends SecretVerificationRequest {\n currentDevice: DeviceKeysUpdateRequest;\n otherDevices: OtherDeviceKeysUpdateRequest[];\n}\n\nexport class DeviceKeysUpdateRequest {\n encryptedPublicKey: string;\n encryptedUserKey: string;\n}\n\nexport class OtherDeviceKeysUpdateRequest extends DeviceKeysUpdateRequest {\n id: string;\n}\n","import { DeviceType } from \"../../../../enums\";\nimport { View } from \"../../../../models/view/view\";\nimport { DeviceResponse } from \"../responses/device.response\";\n\nexport class DeviceView implements View {\n id: string;\n userId: string;\n name: string;\n identifier: string;\n type: DeviceType;\n creationDate: string;\n revisionDate: string;\n\n constructor(deviceResponse: DeviceResponse) {\n Object.assign(this, deviceResponse);\n }\n}\n","import { DeviceType } from \"../../../../enums\";\nimport { BaseResponse } from \"../../../../models/response/base.response\";\n\nexport class DeviceResponse extends BaseResponse {\n id: string;\n userId: string;\n name: string;\n identifier: string;\n type: DeviceType;\n creationDate: string;\n revisionDate: string;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.name = this.getResponseProperty(\"Name\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.type = this.getResponseProperty(\"Type\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { DeviceType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\n\nexport class ProtectedDeviceResponse extends BaseResponse {\n constructor(response: Jsonify) {\n super(response);\n this.id = this.getResponseProperty(\"id\");\n this.name = this.getResponseProperty(\"name\");\n this.identifier = this.getResponseProperty(\"identifier\");\n this.type = this.getResponseProperty(\"type\");\n this.creationDate = new Date(this.getResponseProperty(\"creationDate\"));\n if (response.encryptedUserKey) {\n this.encryptedUserKey = new EncString(this.getResponseProperty(\"encryptedUserKey\"));\n }\n if (response.encryptedPublicKey) {\n this.encryptedPublicKey = new EncString(this.getResponseProperty(\"encryptedPublicKey\"));\n }\n }\n\n id: string;\n name: string;\n type: DeviceType;\n identifier: string;\n creationDate: Date;\n /**\n * Intended to be the users symmetric key that is encrypted in some form, the current way to encrypt this is with\n * the devices public key.\n */\n encryptedUserKey: EncString;\n /**\n * Intended to be the public key that was generated for a device upon trust and encrypted. Currenly encrypted using\n * a users symmetric key so that when trusted and unlocked a user can decrypt the public key for all their devices.\n * This enabled a user to rotate the keys for all of their devices.\n */\n encryptedPublicKey: EncString;\n}\n","export class TrustedDeviceKeysRequest {\n constructor(\n public encryptedUserKey: string,\n public encryptedPublicKey: string,\n public encryptedPrivateKey: string\n ) {}\n}\n","export class KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","import { KdfType } from \"../../../enums\";\nimport { KeysRequest } from \"../../../models/request/keys.request\";\nimport { KdfConfig } from \"../domain/kdf-config\";\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","import { StateService } from \"../../platform/abstractions/state.service\";\nimport { LoginService as LoginServiceAbstraction } from \"../abstractions/login.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 { StateService } from \"../../platform/abstractions/state.service\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\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","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","import { ServerConfigResponse } from \"../../models/response/server-config.response\";\n\nexport abstract class ConfigApiServiceAbstraction {\n get: () => Promise;\n}\n","import { FileUploadType } from \"../../../enums\";\nimport { EncArrayBuffer } from \"../../models/domain/enc-array-buffer\";\nimport { EncString } from \"../../models/domain/enc-string\";\n\nexport abstract class FileUploadService {\n upload: (\n uploadData: { url: string; fileUploadType: FileUploadType },\n fileName: EncString,\n encryptedFileData: EncArrayBuffer,\n fileUploadMethods: FileUploadApiMethods\n ) => Promise;\n}\n\nexport type FileUploadApiMethods = {\n postDirect: (fileData: FormData) => Promise;\n renewFileUploadUrl: () => Promise;\n rollback: () => 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 { 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 \"./account-factory\";\nimport { GlobalStateFactory } from \"./global-state-factory\";\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 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, similar to the way we already extend a base Account.\n displayBounds: any;\n x?: number;\n y?: number;\n zoomFactor?: number;\n}\n","import { EnvironmentUrls } from \"../../../auth/models/domain/environment-urls\";\nimport { ThemeType } from \"../../../enums\";\nimport { WindowState } from \"../../../models/domain/window-state\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string;\n organizationInvitation?: any;\n emergencyAccessInvitation?: 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 noAutoPromptBiometricsText?: string;\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 region?: string;\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\nimport { Region } from \"../../abstractions/environment.service\";\n\nexport class ServerConfigResponse extends BaseResponse {\n version: string;\n gitHash: string;\n server: ThirdPartyServerConfigResponse;\n environment: EnvironmentServerConfigResponse;\n featureStates: { [key: string]: string } = {};\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 this.featureStates = this.getResponseProperty(\"FeatureStates\");\n }\n}\n\nexport class EnvironmentServerConfigResponse extends BaseResponse {\n cloudRegion: Region;\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.cloudRegion = this.getResponseProperty(\"CloudRegion\");\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 featureStates: { [key: string]: string } = {};\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 this.featureStates = serverConfigData.featureStates;\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","import {\n ReplaySubject,\n Subject,\n catchError,\n concatMap,\n defer,\n delayWhen,\n firstValueFrom,\n map,\n merge,\n timer,\n} from \"rxjs\";\nimport { SemVer } from \"semver\";\n\nimport { AuthService } from \"../../../auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"../../../auth/enums/authentication-status\";\nimport { FeatureFlag, FeatureFlagValue } from \"../../../enums/feature-flag.enum\";\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 { EnvironmentService, Region } from \"../../abstractions/environment.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { ServerConfigData } from \"../../models/data/server-config.data\";\n\nconst ONE_HOUR_IN_MILLISECONDS = 1000 * 3600;\n\nexport class ConfigService implements ConfigServiceAbstraction {\n private inited = false;\n\n protected _serverConfig = new ReplaySubject(1);\n serverConfig$ = this._serverConfig.asObservable();\n\n private _forceFetchConfig = new Subject();\n protected refreshTimer$ = timer(ONE_HOUR_IN_MILLISECONDS, ONE_HOUR_IN_MILLISECONDS); // after 1 hour, then every hour\n\n cloudRegion$ = this.serverConfig$.pipe(\n map((config) => config?.environment?.cloudRegion ?? Region.US)\n );\n\n constructor(\n private stateService: StateService,\n private configApiService: ConfigApiServiceAbstraction,\n private authService: AuthService,\n private environmentService: EnvironmentService,\n private logService: LogService,\n\n // Used to avoid duplicate subscriptions, e.g. in browser between the background and popup\n private subscribe = true\n ) {}\n\n init() {\n if (!this.subscribe || this.inited) {\n return;\n }\n\n const latestServerConfig$ = defer(() => this.configApiService.get()).pipe(\n map((response) => new ServerConfigData(response)),\n delayWhen((data) => this.saveConfig(data)),\n catchError((e: unknown) => {\n // fall back to stored ServerConfig (if any)\n this.logService.error(\"Unable to fetch ServerConfig: \" + (e as Error)?.message);\n return this.stateService.getServerConfig();\n })\n );\n\n // If you need to fetch a new config when an event occurs, add an observable that emits on that event here\n merge(\n this.refreshTimer$, // an overridable interval\n this.environmentService.urls, // when environment URLs change (including when app is started)\n this._forceFetchConfig // manual\n )\n .pipe(\n concatMap(() => latestServerConfig$),\n map((data) => (data == null ? null : new ServerConfig(data)))\n )\n .subscribe((config) => this._serverConfig.next(config));\n\n this.inited = true;\n }\n\n getFeatureFlag$(key: FeatureFlag, defaultValue?: T) {\n return this.serverConfig$.pipe(\n map((serverConfig) => {\n if (serverConfig?.featureStates == null || serverConfig.featureStates[key] == null) {\n return defaultValue;\n }\n\n return serverConfig.featureStates[key] as T;\n })\n );\n }\n\n async getFeatureFlag(key: FeatureFlag, defaultValue?: T) {\n return await firstValueFrom(this.getFeatureFlag$(key, defaultValue));\n }\n\n triggerServerConfigFetch() {\n this._forceFetchConfig.next();\n }\n\n private async saveConfig(data: ServerConfigData) {\n if ((await this.authService.getAuthStatus()) === AuthenticationStatus.LoggedOut) {\n return;\n }\n\n await this.stateService.setServerConfig(data);\n this.environmentService.setCloudWebVaultUrl(data.environment?.cloudRegion);\n }\n\n /**\n * Verifies whether the server version meets the minimum required version\n * @param minimumRequiredServerVersion The minimum version required\n * @returns True if the server version is greater than or equal to the minimum required version\n */\n checkServerMeetsVersionRequirement$(minimumRequiredServerVersion: SemVer) {\n return this.serverConfig$.pipe(\n map((serverConfig) => {\n if (serverConfig == null) {\n return false;\n }\n const serverVersion = new SemVer(serverConfig.version);\n return serverVersion.compare(minimumRequiredServerVersion) >= 0;\n })\n );\n }\n}\n","import { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { EncryptedOrganizationKeyData } from \"../data/encrypted-organization-key.data\";\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","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise = descriptor.value;\n const caches = new Map>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function (...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import * as bigInt from \"big-integer\";\n\nimport { EncryptedOrganizationKeyData } from \"../../admin-console/models/data/encrypted-organization-key.data\";\nimport { BaseEncryptedOrganizationKey } from \"../../admin-console/models/domain/encrypted-organization-key\";\nimport { ProfileOrganizationResponse } from \"../../admin-console/models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../../admin-console/models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../../admin-console/models/response/profile-provider.response\";\nimport { KdfConfig } from \"../../auth/models/domain/kdf-config\";\nimport {\n KeySuffixOptions,\n HashPurpose,\n KdfType,\n DEFAULT_ARGON2_ITERATIONS,\n DEFAULT_ARGON2_MEMORY,\n DEFAULT_ARGON2_PARALLELISM,\n EncryptionType,\n} from \"../../enums\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { CryptoFunctionService } from \"../abstractions/crypto-function.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"../abstractions/crypto.service\";\nimport { EncryptService } from \"../abstractions/encrypt.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { PlatformUtilsService } from \"../abstractions/platform-utils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { EFFLongWordList } from \"../misc/wordlist\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport {\n CipherKey,\n MasterKey,\n OrgKey,\n PinKey,\n ProviderKey,\n SymmetricCryptoKey,\n UserKey,\n} from \"../models/domain/symmetric-crypto-key\";\n\nexport class CryptoService implements CryptoServiceAbstraction {\n constructor(\n protected cryptoFunctionService: CryptoFunctionService,\n protected encryptService: EncryptService,\n protected platformUtilService: PlatformUtilsService,\n protected logService: LogService,\n protected stateService: StateService\n ) {}\n\n async setUserKey(key: UserKey, userId?: string): Promise {\n if (key != null) {\n await this.stateService.setEverHadUserKey(true, { userId: userId });\n }\n await this.stateService.setUserKey(key, { userId: userId });\n await this.storeAdditionalKeys(key, userId);\n }\n\n async getEverHadUserKey(userId?: string): Promise {\n return await this.stateService.getEverHadUserKey({ userId: userId });\n }\n\n async refreshAdditionalKeys(): Promise {\n const key = await this.getUserKey();\n await this.setUserKey(key);\n }\n\n async getUserKey(userId?: string): Promise {\n let userKey = await this.stateService.getUserKey({ userId: userId });\n if (userKey) {\n return userKey;\n }\n\n // If the user has set their vault timeout to 'Never', we can load the user key from storage\n if (await this.hasUserKeyStored(KeySuffixOptions.Auto, userId)) {\n userKey = await this.getKeyFromStorage(KeySuffixOptions.Auto, userId);\n if (userKey) {\n await this.setUserKey(userKey, userId);\n return userKey;\n }\n }\n }\n\n async isLegacyUser(masterKey?: MasterKey, userId?: string): Promise {\n return await this.validateUserKey(\n (masterKey ?? (await this.getMasterKey(userId))) as unknown as UserKey\n );\n }\n\n async getUserKeyWithLegacySupport(userId?: string): Promise {\n const userKey = await this.getUserKey(userId);\n if (userKey) {\n return userKey;\n }\n\n // Legacy support: encryption used to be done with the master key (derived from master password).\n // Users who have not migrated will have a null user key and must use the master key instead.\n return (await this.getMasterKey(userId)) as unknown as UserKey;\n }\n\n async getUserKeyFromStorage(keySuffix: KeySuffixOptions, userId?: string): Promise {\n const userKey = await this.getKeyFromStorage(keySuffix, userId);\n if (userKey) {\n if (!(await this.validateUserKey(userKey))) {\n this.logService.warning(\"Invalid key, throwing away stored keys\");\n await this.clearAllStoredUserKeys(userId);\n }\n return userKey;\n }\n }\n\n async hasUserKey(): Promise {\n return (\n (await this.hasUserKeyInMemory()) || (await this.hasUserKeyStored(KeySuffixOptions.Auto))\n );\n }\n\n async hasUserKeyInMemory(userId?: string): Promise {\n return (await this.stateService.getUserKey({ userId: userId })) != null;\n }\n\n async hasUserKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise {\n return (await this.getKeyFromStorage(keySuffix, userId)) != null;\n }\n\n async makeUserKey(masterKey: MasterKey): Promise<[UserKey, EncString]> {\n masterKey ||= await this.getMasterKey();\n if (masterKey == null) {\n throw new Error(\"No Master Key found.\");\n }\n\n const newUserKey = await this.cryptoFunctionService.aesGenerateKey(512);\n return this.buildProtectedSymmetricKey(masterKey, newUserKey);\n }\n\n async clearUserKey(clearStoredKeys = true, userId?: string): Promise {\n await this.stateService.setUserKey(null, { userId: userId });\n if (clearStoredKeys) {\n await this.clearAllStoredUserKeys(userId);\n }\n }\n\n async clearStoredUserKey(keySuffix: KeySuffixOptions, userId?: string): Promise {\n if (keySuffix === KeySuffixOptions.Auto) {\n this.stateService.setUserKeyAutoUnlock(null, { userId: userId });\n this.clearDeprecatedKeys(KeySuffixOptions.Auto, userId);\n }\n if (keySuffix === KeySuffixOptions.Pin) {\n this.stateService.setPinKeyEncryptedUserKeyEphemeral(null, { userId: userId });\n this.clearDeprecatedKeys(KeySuffixOptions.Pin, userId);\n }\n }\n\n async setMasterKeyEncryptedUserKey(userKeyMasterKey: string, userId?: string): Promise {\n await this.stateService.setMasterKeyEncryptedUserKey(userKeyMasterKey, { userId: userId });\n }\n\n async setMasterKey(key: MasterKey, userId?: string): Promise {\n await this.stateService.setMasterKey(key, { userId: userId });\n }\n\n async getMasterKey(userId?: string): Promise {\n let masterKey = await this.stateService.getMasterKey({ userId: userId });\n if (!masterKey) {\n masterKey = (await this.stateService.getCryptoMasterKey({ userId: userId })) as MasterKey;\n await this.setMasterKey(masterKey, userId);\n }\n return masterKey;\n }\n\n async getOrDeriveMasterKey(password: string, userId?: string) {\n let masterKey = await this.getMasterKey(userId);\n return (masterKey ||= await this.makeMasterKey(\n password,\n await this.stateService.getEmail({ userId: userId }),\n await this.stateService.getKdfType({ userId: userId }),\n await this.stateService.getKdfConfig({ userId: userId })\n ));\n }\n\n async makeMasterKey(\n password: string,\n email: string,\n kdf: KdfType,\n KdfConfig: KdfConfig\n ): Promise {\n return (await this.makeKey(password, email, kdf, KdfConfig)) as MasterKey;\n }\n\n async clearMasterKey(userId?: string): Promise {\n await this.stateService.setMasterKey(null, { userId: userId });\n }\n\n async encryptUserKeyWithMasterKey(\n masterKey: MasterKey,\n userKey?: UserKey\n ): Promise<[UserKey, EncString]> {\n userKey ||= await this.getUserKey();\n return await this.buildProtectedSymmetricKey(masterKey, userKey.key);\n }\n\n async decryptUserKeyWithMasterKey(\n masterKey: MasterKey,\n userKey?: EncString,\n userId?: string\n ): Promise {\n masterKey ||= await this.getMasterKey(userId);\n if (masterKey == null) {\n throw new Error(\"No master key found.\");\n }\n\n if (!userKey) {\n let masterKeyEncryptedUserKey = await this.stateService.getMasterKeyEncryptedUserKey({\n userId: userId,\n });\n\n // Try one more way to get the user key if it still wasn't found.\n if (masterKeyEncryptedUserKey == null) {\n masterKeyEncryptedUserKey = await this.stateService.getEncryptedCryptoSymmetricKey({\n userId: userId,\n });\n }\n\n if (masterKeyEncryptedUserKey == null) {\n throw new Error(\"No encrypted user key found.\");\n }\n userKey = new EncString(masterKeyEncryptedUserKey);\n }\n\n let decUserKey: Uint8Array;\n if (userKey.encryptionType === EncryptionType.AesCbc256_B64) {\n decUserKey = await this.encryptService.decryptToBytes(userKey, masterKey);\n } else if (userKey.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(masterKey);\n decUserKey = await this.encryptService.decryptToBytes(userKey, newKey);\n } else {\n throw new Error(\"Unsupported encryption type.\");\n }\n if (decUserKey == null) {\n return null;\n }\n\n return new SymmetricCryptoKey(decUserKey) as UserKey;\n }\n\n async hashMasterKey(\n password: string,\n key: MasterKey,\n hashPurpose?: HashPurpose\n ): Promise {\n key ||= await this.getMasterKey();\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 setMasterKeyHash(keyHash: string): Promise {\n await this.stateService.setKeyHash(keyHash);\n }\n\n async getMasterKeyHash(): Promise {\n return await this.stateService.getKeyHash();\n }\n\n async clearMasterKeyHash(userId?: string): Promise {\n return await this.stateService.setKeyHash(null, { userId: userId });\n }\n\n async compareAndUpdateKeyHash(masterPassword: string, masterKey: MasterKey): Promise {\n const storedPasswordHash = await this.getMasterKeyHash();\n if (masterPassword != null && storedPasswordHash != null) {\n const localKeyHash = await this.hashMasterKey(\n masterPassword,\n masterKey,\n HashPurpose.LocalAuthorization\n );\n if (localKeyHash != null && storedPasswordHash === 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.hashMasterKey(\n masterPassword,\n masterKey,\n HashPurpose.ServerAuthorization\n );\n if (serverKeyHash != null && storedPasswordHash === serverKeyHash) {\n await this.setMasterKeyHash(localKeyHash);\n return true;\n }\n }\n\n return false;\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 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(() => \"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 as Map;\n }\n\n const encOrgKeyData = await this.stateService.getEncryptedOrganizationKeys();\n if (encOrgKeyData == null) {\n return result;\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)) as OrgKey;\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 makeDataEncKey(\n key: T\n ): Promise<[SymmetricCryptoKey, EncString]> {\n if (key == null) {\n throw new Error(\"No key provided\");\n }\n\n const newSymKey = await this.cryptoFunctionService.aesGenerateKey(512);\n return this.buildProtectedSymmetricKey(key, newSymKey);\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 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 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 @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 as Map;\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) as ProviderKey);\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedProviderKeys(providerKeys);\n }\n\n return providerKeys;\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 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 makeOrgKey(): Promise<[EncString, T]> {\n const shareKey = await this.cryptoFunctionService.aesGenerateKey(512);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey) as T];\n }\n\n async setPrivateKey(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 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.encryptService.decryptToBytes(\n new EncString(encPrivateKey),\n await this.getUserKeyWithLegacySupport()\n );\n await this.stateService.setDecryptedPrivateKey(privateKey);\n return privateKey;\n }\n\n async getFingerprint(fingerprintMaterial: string, publicKey?: Uint8Array): 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 fingerprintMaterial,\n 32,\n \"sha256\"\n );\n return this.hashPhrase(userFingerprint);\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n // Default to user key\n key ||= await this.getUserKeyWithLegacySupport();\n\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encryptService.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\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 makePinKey(pin: string, salt: string, kdf: KdfType, kdfConfig: KdfConfig): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfConfig);\n return (await this.stretchKey(pinKey)) as PinKey;\n }\n\n async clearPinKeys(userId?: string): Promise {\n await this.stateService.setPinKeyEncryptedUserKey(null, { userId: userId });\n await this.stateService.setPinKeyEncryptedUserKeyEphemeral(null, { userId: userId });\n await this.stateService.setProtectedPin(null, { userId: userId });\n await this.clearDeprecatedKeys(KeySuffixOptions.Pin, userId);\n }\n\n async decryptUserKeyWithPin(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n pinProtectedUserKey?: EncString\n ): Promise {\n pinProtectedUserKey ||= await this.stateService.getPinKeyEncryptedUserKey();\n pinProtectedUserKey ||= await this.stateService.getPinKeyEncryptedUserKeyEphemeral();\n if (!pinProtectedUserKey) {\n throw new Error(\"No PIN protected key found.\");\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfConfig);\n const userKey = await this.encryptService.decryptToBytes(pinProtectedUserKey, pinKey);\n return new SymmetricCryptoKey(userKey) as UserKey;\n }\n\n // only for migration purposes\n async decryptMasterKeyWithPin(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n pinProtectedMasterKey?: EncString\n ): Promise {\n if (!pinProtectedMasterKey) {\n const pinProtectedMasterKeyString = await this.stateService.getEncryptedPinProtected();\n if (pinProtectedMasterKeyString == null) {\n throw new Error(\"No PIN protected key found.\");\n }\n pinProtectedMasterKey = new EncString(pinProtectedMasterKeyString);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfConfig);\n const masterKey = await this.encryptService.decryptToBytes(pinProtectedMasterKey, pinKey);\n return new SymmetricCryptoKey(masterKey) as MasterKey;\n }\n\n async makeSendKey(keyMaterial: Uint8Array): 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 makeCipherKey(): Promise {\n const randomBytes = await this.cryptoFunctionService.aesGenerateKey(512);\n return new SymmetricCryptoKey(randomBytes) as CipherKey;\n }\n\n async clearKeys(userId?: string): Promise {\n await this.clearUserKey(true, userId);\n await this.clearMasterKeyHash(userId);\n await this.clearOrgKeys(false, userId);\n await this.clearProviderKeys(false, userId);\n await this.clearKeyPair(false, userId);\n await this.clearPinKeys(userId);\n }\n\n async rsaEncrypt(data: Uint8Array, publicKey?: Uint8Array): 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?: Uint8Array): 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]);\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 // 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 // ---HELPERS---\n protected async validateUserKey(key: UserKey): Promise {\n if (!key) {\n return false;\n }\n\n try {\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n if (encPrivateKey == null) {\n return false;\n }\n\n const privateKey = await this.encryptService.decryptToBytes(\n new EncString(encPrivateKey),\n key\n );\n await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n } catch (e) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Initialize all necessary crypto keys needed for a new account.\n * Warning! This completely replaces any existing keys!\n */\n async initAccount(): Promise<{\n userKey: UserKey;\n publicKey: string;\n privateKey: EncString;\n }> {\n const rawKey = await this.cryptoFunctionService.aesGenerateKey(512);\n const userKey = new SymmetricCryptoKey(rawKey) as UserKey;\n const [publicKey, privateKey] = await this.makeKeyPair(userKey);\n await this.setUserKey(userKey);\n await this.stateService.setEncryptedPrivateKey(privateKey.encryptedString);\n\n return {\n userKey,\n publicKey,\n privateKey,\n };\n }\n\n /**\n * Generates any additional keys if needed. Additional keys are\n * keys such as biometrics, auto, and pin keys.\n * Useful to make sure other keys stay in sync when the user key\n * has been rotated.\n * @param key The user key\n * @param userId The desired user\n */\n protected async storeAdditionalKeys(key: UserKey, userId?: string) {\n const storeAuto = await this.shouldStoreKey(KeySuffixOptions.Auto, userId);\n if (storeAuto) {\n await this.stateService.setUserKeyAutoUnlock(key.keyB64, { userId: userId });\n } else {\n await this.stateService.setUserKeyAutoUnlock(null, { userId: userId });\n }\n await this.clearDeprecatedKeys(KeySuffixOptions.Auto, userId);\n\n const storePin = await this.shouldStoreKey(KeySuffixOptions.Pin, userId);\n if (storePin) {\n await this.storePinKey(key, userId);\n // We can't always clear deprecated keys because the pin is only\n // migrated once used to unlock\n await this.clearDeprecatedKeys(KeySuffixOptions.Pin, userId);\n } else {\n await this.stateService.setPinKeyEncryptedUserKey(null, { userId: userId });\n await this.stateService.setPinKeyEncryptedUserKeyEphemeral(null, { userId: userId });\n }\n }\n\n /**\n * Stores the pin key if needed. If MP on Reset is enabled, stores the\n * ephemeral version.\n * @param key The user key\n */\n protected async storePinKey(key: UserKey, userId?: string) {\n const pin = await this.encryptService.decryptToUtf8(\n new EncString(await this.stateService.getProtectedPin({ userId: userId })),\n key\n );\n const pinKey = await this.makePinKey(\n pin,\n await this.stateService.getEmail({ userId: userId }),\n await this.stateService.getKdfType({ userId: userId }),\n await this.stateService.getKdfConfig({ userId: userId })\n );\n const encPin = await this.encryptService.encrypt(key.key, pinKey);\n\n if ((await this.stateService.getPinKeyEncryptedUserKey({ userId: userId })) != null) {\n await this.stateService.setPinKeyEncryptedUserKey(encPin, { userId: userId });\n } else {\n await this.stateService.setPinKeyEncryptedUserKeyEphemeral(encPin, { userId: userId });\n }\n }\n\n protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId?: string) {\n let shouldStoreKey = false;\n switch (keySuffix) {\n case KeySuffixOptions.Auto: {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n shouldStoreKey = vaultTimeout == null;\n break;\n }\n case KeySuffixOptions.Pin: {\n const protectedPin = await this.stateService.getProtectedPin({ userId: userId });\n shouldStoreKey = !!protectedPin;\n break;\n }\n }\n return shouldStoreKey;\n }\n\n protected async getKeyFromStorage(\n keySuffix: KeySuffixOptions,\n userId?: string\n ): Promise {\n if (keySuffix === KeySuffixOptions.Auto) {\n const userKey = await this.stateService.getUserKeyAutoUnlock({ userId: userId });\n if (userKey) {\n return new SymmetricCryptoKey(Utils.fromB64ToArray(userKey)) as UserKey;\n }\n }\n return null;\n }\n\n protected async clearAllStoredUserKeys(userId?: string): Promise {\n await this.stateService.setUserKeyAutoUnlock(null, { userId: userId });\n await this.stateService.setPinKeyEncryptedUserKeyEphemeral(null, { userId: userId });\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);\n }\n\n private async hashPhrase(hash: Uint8Array, 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 buildProtectedSymmetricKey(\n encryptionKey: SymmetricCryptoKey,\n newSymKey: Uint8Array\n ): Promise<[T, EncString]> {\n let protectedSymKey: EncString = null;\n if (encryptionKey.key.byteLength === 32) {\n const stretchedEncryptionKey = await this.stretchKey(encryptionKey);\n protectedSymKey = await this.encryptService.encrypt(newSymKey, stretchedEncryptionKey);\n } else if (encryptionKey.key.byteLength === 64) {\n protectedSymKey = await this.encryptService.encrypt(newSymKey, encryptionKey);\n } else {\n throw new Error(\"Invalid key size.\");\n }\n return [new SymmetricCryptoKey(newSymKey) as T, protectedSymKey];\n }\n\n private async makeKey(\n password: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig\n ): Promise {\n let key: Uint8Array = 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 // --LEGACY METHODS--\n // We previously used the master key for additional keys, but now we use the user key.\n // These methods support migrating the old keys to the new ones.\n // TODO: Remove after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3475)\n\n async clearDeprecatedKeys(keySuffix: KeySuffixOptions, userId?: string) {\n if (keySuffix === KeySuffixOptions.Auto) {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n } else if (keySuffix === KeySuffixOptions.Pin) {\n await this.stateService.setEncryptedPinProtected(null, { userId: userId });\n await this.stateService.setDecryptedPinProtected(null, { userId: userId });\n }\n }\n\n async migrateAutoKeyIfNeeded(userId?: string) {\n const oldAutoKey = await this.stateService.getCryptoMasterKeyAuto({ userId: userId });\n if (!oldAutoKey) {\n return;\n }\n // Decrypt\n const masterKey = new SymmetricCryptoKey(Utils.fromB64ToArray(oldAutoKey)) as MasterKey;\n if (await this.isLegacyUser(masterKey, userId)) {\n // Legacy users don't have a user key, so no need to migrate.\n // Instead, set the master key for additional isLegacyUser checks that will log the user out.\n await this.setMasterKey(masterKey, userId);\n return;\n }\n const encryptedUserKey = await this.stateService.getEncryptedCryptoSymmetricKey({\n userId: userId,\n });\n const userKey = await this.decryptUserKeyWithMasterKey(\n masterKey,\n new EncString(encryptedUserKey),\n userId\n );\n // Migrate\n await this.stateService.setUserKeyAutoUnlock(userKey.keyB64, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n // Set encrypted user key in case user immediately locks without syncing\n await this.setMasterKeyEncryptedUserKey(encryptedUserKey);\n }\n\n async decryptAndMigrateOldPinKey(\n masterPasswordOnRestart: boolean,\n pin: string,\n email: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n oldPinKey: EncString\n ): Promise {\n // Decrypt\n const masterKey = await this.decryptMasterKeyWithPin(pin, email, kdf, kdfConfig, oldPinKey);\n const encUserKey = await this.stateService.getEncryptedCryptoSymmetricKey();\n const userKey = await this.decryptUserKeyWithMasterKey(masterKey, new EncString(encUserKey));\n // Migrate\n const pinKey = await this.makePinKey(pin, email, kdf, kdfConfig);\n const pinProtectedKey = await this.encryptService.encrypt(userKey.key, pinKey);\n if (masterPasswordOnRestart) {\n await this.stateService.setDecryptedPinProtected(null);\n await this.stateService.setPinKeyEncryptedUserKeyEphemeral(pinProtectedKey);\n } else {\n await this.stateService.setEncryptedPinProtected(null);\n await this.stateService.setPinKeyEncryptedUserKey(pinProtectedKey);\n // We previously only set the protected pin if MP on Restart was enabled\n // now we set it regardless\n const encPin = await this.encryptService.encrypt(pin, userKey);\n await this.stateService.setProtectedPin(encPin.encryptedString);\n }\n // This also clears the old Biometrics key since the new Biometrics key will\n // be created when the user key is set.\n await this.stateService.setCryptoMasterKeyBiometric(null);\n return userKey;\n }\n\n // --DEPRECATED METHODS--\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 | Uint8Array, key?: SymmetricCryptoKey): Promise {\n key ||= await this.getUserKeyWithLegacySupport();\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: Uint8Array, key?: SymmetricCryptoKey): Promise {\n key ||= await this.getUserKeyWithLegacySupport();\n return this.encryptService.encryptToBytes(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.decryptToBytes\n */\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n key ||= await this.getUserKeyWithLegacySupport();\n return this.encryptService.decryptToBytes(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.decryptToUtf8\n */\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n key ||= await this.getUserKeyWithLegacySupport();\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.getUserKeyWithLegacySupport();\n\n return this.encryptService.decryptToBytes(encBuffer, key);\n }\n}\n","import { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\n\nexport class EncryptedObject {\n iv: Uint8Array;\n data: Uint8Array;\n mac: Uint8Array;\n key: SymmetricCryptoKey;\n}\n","import { EncryptionType } from \"../../../enums\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { CryptoFunctionService } from \"../../abstractions/crypto-function.service\";\nimport { EncryptService } from \"../../abstractions/encrypt.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { Encrypted } from \"../../interfaces/encrypted\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\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 | Uint8Array, 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: Uint8Array;\n if (typeof plainValue === \"string\") {\n plainBuf = Utils.fromUtf8ToArray(plainValue);\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: Uint8Array, 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);\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, \"cbc\");\n }\n\n async decryptToBytes(encThing: Encrypted, 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(macData, key.macKey, \"sha256\");\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 \"cbc\"\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: Uint8Array, 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, 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: Encrypted): 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 { Cipher } from \"../../../vault/models/domain/cipher\";\nimport { CipherView } from \"../../../vault/models/view/cipher.view\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\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 { Utils } from \"../../../platform/misc/utils\";\nimport { Decryptable } from \"../../interfaces/decryptable.interface\";\nimport { InitializerMetadata } from \"../../interfaces/initializer-metadata.interface\";\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/platform/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 { 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 { ProviderUserStatusType, ProviderUserType } from \"../../enums\";\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 { EventType } from \"../../enums\";\n\nexport class EventData {\n type: EventType;\n cipherId: string;\n date: string;\n organizationId: string;\n}\n","import { MigrationHelper } from \"./migration-helper\";\nimport { Direction, Migrator, VersionFrom, VersionTo } from \"./migrator\";\n\nexport class MigrationBuilder {\n /** Create a new MigrationBuilder with an empty buffer of migrations to perform.\n *\n * Add migrations to the buffer with {@link with} and {@link rollback}.\n * @returns A new MigrationBuilder.\n */\n static create(): MigrationBuilder<0> {\n return new MigrationBuilder([]);\n }\n\n private constructor(\n private migrations: readonly { migrator: Migrator; direction: Direction }[]\n ) {}\n\n /** Add a migrator to the MigrationBuilder. Types are updated such that the chained MigrationBuilder must currently be\n * at state version equal to the from version of the migrator. Return as MigrationBuilder where TTo is the to\n * version of the migrator, so that the next migrator can be chained.\n *\n * @param migrate A migrator class or a tuple of a migrator class, the from version, and the to version. A tuple is\n * required to instantiate version numbers unless a default constructor is defined.\n * @returns A new MigrationBuilder with the to version of the migrator as the current version.\n */\n with<\n TMigrator extends Migrator,\n TFrom extends VersionFrom & TCurrent,\n TTo extends VersionTo\n >(\n ...migrate: [new () => TMigrator] | [new (from: TFrom, to: TTo) => TMigrator, TFrom, TTo]\n ): MigrationBuilder {\n return this.addMigrator(migrate, \"up\");\n }\n\n /** Add a migrator to rollback on the MigrationBuilder's list of migrations. As with {@link with}, types of\n * MigrationBuilder and Migrator must align. However, this time the migration is reversed so TCurrent of the\n * MigrationBuilder must be equal to the to version of the migrator. Return as MigrationBuilder where TFrom\n * is the from version of the migrator, so that the next migrator can be chained.\n *\n * @param migrate A migrator class or a tuple of a migrator class, the from version, and the to version. A tuple is\n * required to instantiate version numbers unless a default constructor is defined.\n * @returns A new MigrationBuilder with the from version of the migrator as the current version.\n */\n rollback<\n TMigrator extends Migrator,\n TFrom extends VersionFrom,\n TTo extends VersionTo & TCurrent\n >(\n ...migrate: [new () => TMigrator] | [new (from: TFrom, to: TTo) => TMigrator, TTo, TFrom]\n ): MigrationBuilder {\n if (migrate.length === 3) {\n migrate = [migrate[0], migrate[2], migrate[1]];\n }\n return this.addMigrator(migrate, \"down\");\n }\n\n /** Execute the migrations as defined in the MigrationBuilder's migrator buffer */\n migrate(helper: MigrationHelper): Promise {\n return this.migrations.reduce(\n (promise, migrator) =>\n promise.then(async () => {\n await this.runMigrator(migrator.migrator, helper, migrator.direction);\n }),\n Promise.resolve()\n );\n }\n\n private addMigrator<\n TMigrator extends Migrator,\n TFrom extends VersionFrom & TCurrent,\n TTo extends VersionTo\n >(\n migrate: [new () => TMigrator] | [new (from: TFrom, to: TTo) => TMigrator, TFrom, TTo],\n direction: Direction = \"up\"\n ) {\n const newMigration =\n migrate.length === 1\n ? { migrator: new migrate[0](), direction }\n : { migrator: new migrate[0](migrate[1], migrate[2]), direction };\n\n return new MigrationBuilder([...this.migrations, newMigration]);\n }\n\n private async runMigrator(\n migrator: Migrator,\n helper: MigrationHelper,\n direction: Direction\n ): Promise {\n const shouldMigrate = await migrator.shouldMigrate(helper, direction);\n helper.info(\n `Migrator ${migrator.constructor.name} (to version ${migrator.toVersion}) should migrate: ${shouldMigrate} - ${direction}`\n );\n if (shouldMigrate) {\n const method = direction === \"up\" ? migrator.migrate : migrator.rollback;\n await method(helper);\n helper.info(\n `Migrator ${migrator.constructor.name} (to version ${migrator.toVersion}) migrated - ${direction}`\n );\n await migrator.updateVersion(helper, direction);\n helper.info(\n `Migrator ${migrator.constructor.name} (to version ${migrator.toVersion}) updated version - ${direction}`\n );\n }\n }\n}\n","// eslint-disable-next-line import/no-restricted-paths -- Needed to print log messages\nimport { LogService } from \"../platform/abstractions/log.service\";\n// eslint-disable-next-line import/no-restricted-paths -- Needed to interface with storage locations\nimport { AbstractStorageService } from \"../platform/abstractions/storage.service\";\n\nexport class MigrationHelper {\n constructor(\n public currentVersion: number,\n private storageService: AbstractStorageService,\n public logService: LogService\n ) {}\n\n get(key: string): Promise {\n return this.storageService.get(key);\n }\n\n set(key: string, value: T): Promise {\n this.logService.info(`Setting ${key}`);\n return this.storageService.save(key, value);\n }\n\n info(message: string): void {\n this.logService.info(message);\n }\n\n async getAccounts(): Promise<\n { userId: string; account: ExpectedAccountType }[]\n > {\n const userIds = (await this.get(\"authenticatedAccounts\")) ?? [];\n return Promise.all(\n userIds.map(async (userId) => ({\n userId,\n account: await this.get(userId),\n }))\n );\n }\n}\n","import { NonNegativeInteger } from \"type-fest\";\n\nimport { MigrationHelper } from \"./migration-helper\";\n\nexport const IRREVERSIBLE = new Error(\"Irreversible migration\");\n\nexport type VersionFrom = T extends Migrator\n ? TFrom extends NonNegativeInteger\n ? TFrom\n : never\n : never;\nexport type VersionTo = T extends Migrator\n ? TTo extends NonNegativeInteger\n ? TTo\n : never\n : never;\nexport type Direction = \"up\" | \"down\";\n\nexport abstract class Migrator {\n constructor(public fromVersion: TFrom, public toVersion: TTo) {\n if (fromVersion == null || toVersion == null) {\n throw new Error(\"Invalid migration\");\n }\n if (fromVersion > toVersion) {\n throw new Error(\"Invalid migration\");\n }\n }\n\n shouldMigrate(helper: MigrationHelper, direction: Direction): Promise {\n const startVersion = direction === \"up\" ? this.fromVersion : this.toVersion;\n return Promise.resolve(helper.currentVersion === startVersion);\n }\n abstract migrate(helper: MigrationHelper): Promise;\n abstract rollback(helper: MigrationHelper): Promise;\n async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n await helper.set(\"stateVersion\", endVersion);\n }\n}\n","// eslint-disable-next-line import/no-restricted-paths -- Used for token decoding, which are valid for days. We want the latest\nimport { TokenService } from \"../../auth/services/token.service\";\nimport { MigrationHelper } from \"../migration-helper\";\nimport { Migrator, IRREVERSIBLE, Direction } from \"../migrator\";\n\ntype ExpectedAccountType = {\n profile?: { hasPremiumPersonally?: boolean };\n tokens?: { accessToken?: string };\n};\n\nexport class FixPremiumMigrator extends Migrator<2, 3> {\n async migrate(helper: MigrationHelper): Promise {\n const accounts = await helper.getAccounts();\n\n async function fixPremium(userId: string, account: ExpectedAccountType) {\n if (account?.profile?.hasPremiumPersonally === null && account.tokens?.accessToken != null) {\n let decodedToken: { premium: boolean };\n try {\n decodedToken = await TokenService.decodeToken(account.tokens.accessToken);\n } catch {\n return;\n }\n\n if (decodedToken?.premium == null) {\n return;\n }\n\n account.profile.hasPremiumPersonally = decodedToken?.premium;\n return helper.set(userId, account);\n }\n }\n\n await Promise.all(accounts.map(({ userId, account }) => fixPremium(userId, account)));\n }\n\n rollback(helper: MigrationHelper): Promise {\n throw IRREVERSIBLE;\n }\n\n // Override is necessary because default implementation assumes `stateVersion` at the root, but for this version\n // it is nested inside a global object.\n override async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n const global: Record = (await helper.get(\"global\")) || {};\n await helper.set(\"global\", { ...global, stateVersion: endVersion });\n }\n}\n","import { MigrationHelper } from \"../migration-helper\";\nimport { Direction, IRREVERSIBLE, Migrator } from \"../migrator\";\n\ntype ExpectedAccountType = { profile?: { everBeenUnlocked?: boolean } };\n\nexport class RemoveEverBeenUnlockedMigrator extends Migrator<3, 4> {\n async migrate(helper: MigrationHelper): Promise {\n const accounts = await helper.getAccounts();\n\n async function removeEverBeenUnlocked(userId: string, account: ExpectedAccountType) {\n if (account?.profile?.everBeenUnlocked != null) {\n delete account.profile.everBeenUnlocked;\n return helper.set(userId, account);\n }\n }\n\n Promise.all(accounts.map(({ userId, account }) => removeEverBeenUnlocked(userId, account)));\n }\n\n rollback(helper: MigrationHelper): Promise {\n throw IRREVERSIBLE;\n }\n\n // Override is necessary because default implementation assumes `stateVersion` at the root, but for this version\n // it is nested inside a global object.\n override async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n const global: { stateVersion: number } = (await helper.get(\"global\")) || ({} as any);\n await helper.set(\"global\", { ...global, stateVersion: endVersion });\n }\n}\n","import { MigrationHelper } from \"../migration-helper\";\nimport { Direction, Migrator } from \"../migrator\";\n\ntype ExpectedAccountType = { keys?: { organizationKeys?: { encrypted: Record } } };\ntype NewAccountType = {\n keys?: {\n organizationKeys?: { encrypted: Record };\n };\n};\n\nexport class AddKeyTypeToOrgKeysMigrator extends Migrator<4, 5> {\n async migrate(helper: MigrationHelper): Promise {\n const accounts = await helper.getAccounts();\n\n async function updateOrgKey(userId: string, account: ExpectedAccountType) {\n const encryptedOrgKeys = account?.keys?.organizationKeys?.encrypted;\n if (encryptedOrgKeys == null) {\n return;\n }\n\n const newOrgKeys: Record = {};\n\n Object.entries(encryptedOrgKeys).forEach(([orgId, encKey]) => {\n newOrgKeys[orgId] = {\n type: \"organization\",\n key: encKey,\n };\n });\n (account as any).keys.organizationKeys.encrypted = newOrgKeys;\n\n await helper.set(userId, account);\n }\n\n Promise.all(accounts.map(({ userId, account }) => updateOrgKey(userId, account)));\n }\n\n async rollback(helper: MigrationHelper): Promise {\n const accounts = await helper.getAccounts();\n\n async function updateOrgKey(userId: string, account: NewAccountType) {\n const encryptedOrgKeys = account?.keys?.organizationKeys?.encrypted;\n if (encryptedOrgKeys == null) {\n return;\n }\n\n const newOrgKeys: Record = {};\n\n Object.entries(encryptedOrgKeys).forEach(([orgId, encKey]) => {\n newOrgKeys[orgId] = encKey.key;\n });\n (account as any).keys.organizationKeys.encrypted = newOrgKeys;\n\n await helper.set(userId, account);\n }\n\n Promise.all(accounts.map(async ({ userId, account }) => updateOrgKey(userId, account)));\n }\n\n // Override is necessary because default implementation assumes `stateVersion` at the root, but for this version\n // it is nested inside a global object.\n override async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n const global: { stateVersion: number } = (await helper.get(\"global\")) || ({} as any);\n await helper.set(\"global\", { ...global, stateVersion: endVersion });\n }\n}\n","import { MigrationHelper } from \"../migration-helper\";\nimport { Direction, IRREVERSIBLE, Migrator } from \"../migrator\";\n\ntype ExpectedAccountType = { keys?: { legacyEtmKey?: string } };\n\nexport class RemoveLegacyEtmKeyMigrator extends Migrator<5, 6> {\n async migrate(helper: MigrationHelper): Promise {\n const accounts = await helper.getAccounts();\n\n async function updateAccount(userId: string, account: ExpectedAccountType) {\n if (account?.keys?.legacyEtmKey) {\n delete account.keys.legacyEtmKey;\n await helper.set(userId, account);\n }\n }\n\n await Promise.all(accounts.map(({ userId, account }) => updateAccount(userId, account)));\n }\n\n async rollback(helper: MigrationHelper): Promise {\n throw IRREVERSIBLE;\n }\n\n // Override is necessary because default implementation assumes `stateVersion` at the root, but for this version\n // it is nested inside a global object.\n override async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n const global: { stateVersion: number } = (await helper.get(\"global\")) || ({} as any);\n await helper.set(\"global\", { ...global, stateVersion: endVersion });\n }\n}\n","import { MigrationHelper } from \"../migration-helper\";\nimport { Direction, IRREVERSIBLE, Migrator } from \"../migrator\";\n\ntype ExpectedAccountType = { settings?: { disableAutoBiometricsPrompt?: boolean } };\n\nexport class MoveBiometricAutoPromptToAccount extends Migrator<6, 7> {\n async migrate(helper: MigrationHelper): Promise {\n const global = await helper.get<{ noAutoPromptBiometrics?: boolean }>(\"global\");\n const noAutoPromptBiometrics = global?.noAutoPromptBiometrics ?? false;\n\n const accounts = await helper.getAccounts();\n async function updateAccount(userId: string, account: ExpectedAccountType) {\n if (account == null) {\n return;\n }\n\n if (noAutoPromptBiometrics) {\n account.settings = Object.assign(account?.settings ?? {}, {\n disableAutoBiometricsPrompt: true,\n });\n await helper.set(userId, account);\n }\n }\n\n delete global.noAutoPromptBiometrics;\n\n await Promise.all([\n ...accounts.map(({ userId, account }) => updateAccount(userId, account)),\n helper.set(\"global\", global),\n ]);\n }\n\n async rollback(helper: MigrationHelper): Promise {\n throw IRREVERSIBLE;\n }\n\n // Override is necessary because default implementation assumes `stateVersion` at the root, but for this version\n // it is nested inside a global object.\n override async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n const global: { stateVersion: number } = (await helper.get(\"global\")) || ({} as any);\n await helper.set(\"global\", { ...global, stateVersion: endVersion });\n }\n}\n","import { JsonObject } from \"type-fest\";\n\nimport { MigrationHelper } from \"../migration-helper\";\nimport { Direction, Migrator } from \"../migrator\";\n\nexport class MoveStateVersionMigrator extends Migrator<7, 8> {\n async migrate(helper: MigrationHelper): Promise {\n const global = await helper.get<{ stateVersion: number }>(\"global\");\n if (global.stateVersion) {\n await helper.set(\"stateVersion\", global.stateVersion);\n delete global.stateVersion;\n await helper.set(\"global\", global);\n } else {\n throw new Error(\"Migration failed, state version not found\");\n }\n }\n\n async rollback(helper: MigrationHelper): Promise {\n const version = await helper.get(\"stateVersion\");\n const global = await helper.get(\"global\");\n await helper.set(\"global\", { ...global, stateVersion: version });\n await helper.set(\"stateVersion\", undefined);\n }\n\n // Override is necessary because default implementation assumes `stateVersion` at the root, but this migration moves\n // it from a `global` object to root.This makes for unique rollback versioning.\n override async updateVersion(helper: MigrationHelper, direction: Direction): Promise {\n const endVersion = direction === \"up\" ? this.toVersion : this.fromVersion;\n helper.currentVersion = endVersion;\n if (direction === \"up\") {\n await helper.set(\"stateVersion\", endVersion);\n } else {\n const global: { stateVersion: number } = (await helper.get(\"global\")) || ({} as any);\n await helper.set(\"global\", { ...global, stateVersion: endVersion });\n }\n }\n}\n","import { MinVersion, MIN_VERSION } from \"../migrate\";\nimport { MigrationHelper } from \"../migration-helper\";\nimport { IRREVERSIBLE, Migrator } from \"../migrator\";\n\nexport function minVersionError(current: number) {\n return `Your local data is too old to be migrated. Your current state version is ${current}, but minimum version is ${MIN_VERSION}.`;\n}\n\nexport class MinVersionMigrator extends Migrator<0, MinVersion> {\n constructor() {\n super(0, MIN_VERSION);\n }\n\n // Overrides the default implementation to catch any version that may be passed in.\n override shouldMigrate(helper: MigrationHelper): Promise {\n return Promise.resolve(helper.currentVersion < MIN_VERSION);\n }\n async migrate(helper: MigrationHelper): Promise {\n if (helper.currentVersion < MIN_VERSION) {\n throw new Error(minVersionError(helper.currentVersion));\n }\n }\n async rollback(helper: MigrationHelper): Promise {\n throw IRREVERSIBLE;\n }\n}\n","// eslint-disable-next-line import/no-restricted-paths -- Needed to print log messages\nimport { LogService } from \"../platform/abstractions/log.service\";\n// eslint-disable-next-line import/no-restricted-paths -- Needed to interface with storage locations\nimport { AbstractStorageService } from \"../platform/abstractions/storage.service\";\n\nimport { MigrationBuilder } from \"./migration-builder\";\nimport { MigrationHelper } from \"./migration-helper\";\nimport { FixPremiumMigrator } from \"./migrations/3-fix-premium\";\nimport { RemoveEverBeenUnlockedMigrator } from \"./migrations/4-remove-ever-been-unlocked\";\nimport { AddKeyTypeToOrgKeysMigrator } from \"./migrations/5-add-key-type-to-org-keys\";\nimport { RemoveLegacyEtmKeyMigrator } from \"./migrations/6-remove-legacy-etm-key\";\nimport { MoveBiometricAutoPromptToAccount } from \"./migrations/7-move-biometric-auto-prompt-to-account\";\nimport { MoveStateVersionMigrator } from \"./migrations/8-move-state-version\";\nimport { MinVersionMigrator } from \"./migrations/min-version\";\n\nexport const MIN_VERSION = 2;\nexport const CURRENT_VERSION = 8;\nexport type MinVersion = typeof MIN_VERSION;\n\nexport async function migrate(\n storageService: AbstractStorageService,\n logService: LogService\n): Promise {\n const migrationHelper = new MigrationHelper(\n await currentVersion(storageService, logService),\n storageService,\n logService\n );\n if (migrationHelper.currentVersion < 0) {\n // Cannot determine state, assuming empty so we don't repeatedly apply a migration.\n await storageService.save(\"stateVersion\", CURRENT_VERSION);\n return;\n }\n MigrationBuilder.create()\n .with(MinVersionMigrator)\n .with(FixPremiumMigrator, 2, 3)\n .with(RemoveEverBeenUnlockedMigrator, 3, 4)\n .with(AddKeyTypeToOrgKeysMigrator, 4, 5)\n .with(RemoveLegacyEtmKeyMigrator, 5, 6)\n .with(MoveBiometricAutoPromptToAccount, 6, 7)\n .with(MoveStateVersionMigrator, 7, CURRENT_VERSION)\n .migrate(migrationHelper);\n}\n\nexport async function currentVersion(\n storageService: AbstractStorageService,\n logService: LogService\n) {\n let state = await storageService.get(\"stateVersion\");\n if (state == null) {\n // Pre v8\n state = (await storageService.get<{ stateVersion: number }>(\"global\"))?.stateVersion;\n }\n if (state == null) {\n logService.info(\"No state version found, assuming empty state.\");\n return -1;\n }\n logService.info(`State version: ${state}`);\n return state;\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/send-type\";\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 { 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 { 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, JsonValue } from \"type-fest\";\n\nimport { EncryptedOrganizationKeyData } from \"../../admin-console/models/data/encrypted-organization-key.data\";\nimport { OrganizationData } from \"../../admin-console/models/data/organization.data\";\nimport { PolicyData } from \"../../admin-console/models/data/policy.data\";\nimport { ProviderData } from \"../../admin-console/models/data/provider.data\";\nimport { Policy } from \"../../admin-console/models/domain/policy\";\nimport { AccountService } from \"../../auth/abstractions/account.service\";\nimport { AuthenticationStatus } from \"../../auth/enums/authentication-status\";\nimport { AdminAuthRequestStorable } from \"../../auth/models/domain/admin-auth-req-storable\";\nimport { EnvironmentUrls } from \"../../auth/models/domain/environment-urls\";\nimport { ForceResetPasswordReason } from \"../../auth/models/domain/force-reset-password-reason\";\nimport { KdfConfig } from \"../../auth/models/domain/kdf-config\";\nimport { BiometricKey } from \"../../auth/types/biometric-key\";\nimport {\n HtmlStorageLocation,\n KdfType,\n StorageLocation,\n ThemeType,\n UriMatchType,\n} from \"../../enums\";\nimport { VaultTimeoutAction } from \"../../enums/vault-timeout-action.enum\";\nimport { EventData } from \"../../models/data/event.data\";\nimport { WindowState } from \"../../models/domain/window-state\";\nimport { migrate } from \"../../state-migrations\";\nimport { GeneratorOptions } from \"../../tools/generator/generator-options\";\nimport { GeneratedPasswordHistory, PasswordGeneratorOptions } from \"../../tools/generator/password\";\nimport { UsernameGeneratorOptions } from \"../../tools/generator/username\";\nimport { SendData } from \"../../tools/send/models/data/send.data\";\nimport { SendView } from \"../../tools/send/models/view/send.view\";\nimport { UserId } from \"../../types/guid\";\nimport { CipherData } from \"../../vault/models/data/cipher.data\";\nimport { CollectionData } from \"../../vault/models/data/collection.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\";\nimport { CollectionView } from \"../../vault/models/view/collection.view\";\nimport { AddEditCipherInfo } from \"../../vault/types/add-edit-cipher-info\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport {\n AbstractMemoryStorageService,\n AbstractStorageService,\n} from \"../abstractions/storage.service\";\nimport { StateFactory } from \"../factories/state-factory\";\nimport { Utils } from \"../misc/utils\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport {\n Account,\n AccountData,\n AccountDecryptionOptions,\n AccountSettings,\n AccountSettingsSettings,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { GlobalState } from \"../models/domain/global-state\";\nimport { State } from \"../models/domain/state\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport {\n DeviceKey,\n MasterKey,\n SymmetricCryptoKey,\n UserKey,\n} from \"../models/domain/symmetric-crypto-key\";\n\nconst keys = {\n state: \"state\",\n stateVersion: \"stateVersion\",\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 userAutoKey: \"_user_auto\",\n userBiometricKey: \"_user_biometric\",\n\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 stateFactory: StateFactory,\n protected accountService: AccountService,\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 // FIXME: This should be refactored into AuthService or a similar service,\n // as checking for the existence of the crypto key is a low level\n // implementation detail.\n this.activeAccountUnlockedSubject.next((await this.getUserKey()) != null);\n })\n )\n .subscribe();\n }\n\n async init(): Promise {\n if (this.hasBeenInited) {\n return;\n }\n\n await migrate(this.storageService, this.logService);\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\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 // TODO: Temporary update to avoid routing all account status changes through account service for now.\n // account service tracks logged out accounts, but State service does not, so we need to add the active account\n // if it's not in the accounts list.\n if (state.activeUserId != null && this.accountsSubject.value[state.activeUserId] == null) {\n const activeDiskAccount = await this.getAccountFromDisk({ userId: state.activeUserId });\n this.accountService.addAccount(state.activeUserId as UserId, {\n name: activeDiskAccount.profile.name,\n email: activeDiskAccount.profile.email,\n status: AuthenticationStatus.LoggedOut,\n });\n }\n this.accountService.switchAccount(state.activeUserId as UserId);\n // End TODO\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 // TODO: Temporary update to avoid routing all account status changes through account service for now.\n this.accountService.addAccount(userId as UserId, {\n status: AuthenticationStatus.Locked,\n name: diskAccount.profile.name,\n email: diskAccount.profile.email,\n });\n return state;\n });\n }\n\n async addAccount(account: TAccount) {\n account = await this.setAccountEnvironment(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 // TODO: Temporary update to avoid routing all account status changes through account service for now.\n this.accountService.addAccount(account.profile.userId as UserId, {\n status: AuthenticationStatus.Locked,\n name: account.profile.name,\n email: account.profile.email,\n });\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 // TODO: temporary update to avoid routing all account status changes through account service for now.\n this.accountService.switchAccount(userId as UserId);\n\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: AddEditCipherInfo, 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 /**\n * @deprecated Do not save the Master Key. Use the User Symmetric Key instead\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 /**\n * @deprecated Do not save the Master Key. Use the User Symmetric Key instead\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 const nextStatus = value != null ? AuthenticationStatus.Unlocked : AuthenticationStatus.Locked;\n this.accountService.setAccountStatus(options.userId as UserId, nextStatus);\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 /**\n * user key used to encrypt/decrypt data\n */\n async getUserKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.userKey as UserKey;\n }\n\n /**\n * user key used to encrypt/decrypt data\n */\n async setUserKey(value: UserKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.userKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n\n const nextStatus = value != null ? AuthenticationStatus.Unlocked : AuthenticationStatus.Locked;\n this.accountService.setAccountStatus(options.userId as UserId, nextStatus);\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 /**\n * User's master key derived from MP, saved only if we decrypted with MP\n */\n async getMasterKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.masterKey;\n }\n\n /**\n * User's master key derived from MP, saved only if we decrypted with MP\n */\n async setMasterKey(value: MasterKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.masterKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n /**\n * The master key encrypted User symmetric key, saved on every auth\n * so we can unlock with MP offline\n */\n async getMasterKeyEncryptedUserKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys.masterKeyEncryptedUserKey;\n }\n\n /**\n * The master key encrypted User symmetric key, saved on every auth\n * so we can unlock with MP offline\n */\n async setMasterKeyEncryptedUserKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.masterKeyEncryptedUserKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n /**\n * user key when using the \"never\" option of vault timeout\n */\n async getUserKeyAutoUnlock(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.userAutoKey}`,\n options\n );\n }\n\n /**\n * user key when using the \"never\" option of vault timeout\n */\n async setUserKeyAutoUnlock(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.userAutoKey, value, options);\n }\n\n /**\n * User's encrypted symmetric key when using biometrics\n */\n async getUserKeyBiometric(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.userBiometricKey}`,\n options\n );\n }\n\n async hasUserKeyBiometric(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.userBiometricKey}`,\n options\n );\n }\n\n async setUserKeyBiometric(value: BiometricKey, 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.userBiometricKey, value, options);\n }\n\n async getPinKeyEncryptedUserKey(options?: StorageOptions): Promise {\n return EncString.fromJSON(\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.pinKeyEncryptedUserKey\n );\n }\n\n async setPinKeyEncryptedUserKey(value: EncString, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.pinKeyEncryptedUserKey = value?.encryptedString;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPinKeyEncryptedUserKeyEphemeral(options?: StorageOptions): Promise {\n return EncString.fromJSON(\n (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())))\n ?.settings?.pinKeyEncryptedUserKeyEphemeral\n );\n }\n\n async setPinKeyEncryptedUserKeyEphemeral(\n value: EncString,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.settings.pinKeyEncryptedUserKeyEphemeral = value?.encryptedString;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n /**\n * @deprecated Use UserKeyAuto instead\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 /**\n * @deprecated Use UserKeyAuto instead\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 /**\n * @deprecated I don't see where this is even used\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 /**\n * @deprecated I don't see where this is even used\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 /**\n * @deprecated Use UserKeyBiometric instead\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 /**\n * @deprecated Use UserKeyBiometric instead\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 /**\n * @deprecated Use UserKeyBiometric instead\n */\n async setCryptoMasterKeyBiometric(value: BiometricKey, 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 /**\n * @deprecated Use UserKey instead\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 /**\n * @deprecated Use UserKey instead\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 /**\n * @deprecated Use getPinKeyEncryptedUserKeyEphemeral instead\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 /**\n * @deprecated Use setPinKeyEncryptedUserKeyEphemeral instead\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: Uint8Array, 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 getDismissedAutofillCallout(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dismissedAutoFillOnPageLoadCallout ?? false\n );\n }\n\n async setDismissedAutofillCallout(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dismissedAutoFillOnPageLoadCallout = 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 getDeviceKey(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return null;\n }\n\n const account = await this.getAccount(options);\n\n const existingDeviceKey = account?.keys?.deviceKey;\n\n // Must manually instantiate the SymmetricCryptoKey class from the JSON object\n if (existingDeviceKey != null) {\n return SymmetricCryptoKey.fromJSON(existingDeviceKey) as DeviceKey;\n } else {\n return null;\n }\n }\n\n async setDeviceKey(value: DeviceKey | null, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return;\n }\n\n const account = await this.getAccount(options);\n\n account.keys.deviceKey = value?.toJSON() ?? null;\n\n await this.saveAccount(account, options);\n }\n\n async getAdminAuthRequest(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return null;\n }\n\n const account = await this.getAccount(options);\n\n return account?.adminAuthRequest\n ? AdminAuthRequestStorable.fromJSON(account.adminAuthRequest)\n : null;\n }\n\n async setAdminAuthRequest(\n adminAuthRequest: AdminAuthRequestStorable,\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return;\n }\n\n const account = await this.getAccount(options);\n\n account.adminAuthRequest = adminAuthRequest?.toJSON();\n\n await this.saveAccount(account, options);\n }\n\n async getShouldTrustDevice(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return null;\n }\n\n const account = await this.getAccount(options);\n\n return account?.settings?.trustDeviceChoiceForDecryption ?? null;\n }\n\n async setShouldTrustDevice(value: boolean, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n if (options?.userId == null) {\n return;\n }\n\n const account = await this.getAccount(options);\n\n account.settings.trustDeviceChoiceForDecryption = value;\n\n await this.saveAccount(account, options);\n }\n\n async getAccountDecryptionOptions(\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return null;\n }\n\n const account = await this.getAccount(options);\n\n return account?.decryptionOptions as AccountDecryptionOptions;\n }\n\n async setAccountDecryptionOptions(\n value: AccountDecryptionOptions,\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskLocalOptions());\n\n if (options?.userId == null) {\n return;\n }\n\n const account = await this.getAccount(options);\n\n account.decryptionOptions = value;\n\n await this.saveAccount(account, 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 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 /**\n * @deprecated Use UserKey instead\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 /**\n * @deprecated Use UserKey instead\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 environment 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 getRegion(options?: StorageOptions): Promise {\n if ((await this.state())?.activeUserId == null) {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).region ?? null;\n }\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getAccount(options))?.settings?.region ?? null;\n }\n\n async setRegion(value: string, 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 region values before an account is active, while still allowing individual accounts to have their own region.\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.region = 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 getEverHadUserKey(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.profile?.everHadUserKey ?? false\n );\n }\n\n async setEverHadUserKey(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.everHadUserKey = 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 getForcePasswordResetReason(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n )\n )?.profile?.forcePasswordResetReason ?? ForceResetPasswordReason.None\n );\n }\n\n async setForcePasswordResetReason(\n value: ForceResetPasswordReason,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.profile.forcePasswordResetReason = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\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 getNoAutoPromptBiometricsText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.noAutoPromptBiometricsText;\n }\n\n async setNoAutoPromptBiometricsText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometricsText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOpenAtLogin(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.openAtLogin ?? false\n );\n }\n\n async setOpenAtLogin(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.openAtLogin = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOrganizationInvitation(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.organizationInvitation;\n }\n\n async setOrganizationInvitation(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n globals.organizationInvitation = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getEmergencyAccessInvitation(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.emergencyAccessInvitation;\n }\n\n async setEmergencyAccessInvitation(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.emergencyAccessInvitation = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\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(\n value: PasswordGeneratorOptions,\n options?: StorageOptions\n ): 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(\n value: UsernameGeneratorOptions,\n options?: StorageOptions\n ): 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: GeneratorOptions, 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: Uint8Array, 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 getUserSsoOrganizationIdentifier(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.loginState?.ssoOrganizationIdentifier;\n }\n\n async setUserSsoOrganizationIdentifier(\n value: string | null,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.loginState.ssoOrganizationIdentifier = value;\n await this.saveAccount(\n account,\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 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 async getActivateAutoFillOnPageLoadFromPolicy(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.activateAutoFillOnPageLoadFromPolicy;\n }\n\n async setActivateAutoFillOnPageLoadFromPolicy(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.activateAutoFillOnPageLoadFromPolicy = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSMOnboardingTasks(\n options?: StorageOptions\n ): Promise>> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.smOnboardingTasks;\n }\n\n async setSMOnboardingTasks(\n value: Record>,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.smOnboardingTasks = 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 if (globals == null) {\n globals = this.createGlobals();\n }\n\n return globals;\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 and region are set before authenticating and should override whatever is stored from any previous session\n const environmentUrls = account.settings.environmentUrls;\n const region = account.settings.region;\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 account.settings.region = region;\n\n if (\n account.settings.vaultTimeoutAction === VaultTimeoutAction.LogOut &&\n account.settings.vaultTimeout != null\n ) {\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 storedAccount.settings.region = account.settings.region;\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 storedAccount.settings.region = account.settings.region;\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 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.setUserKeyAutoUnlock(null, { userId: userId });\n await this.setUserKeyBiometric(null, { userId: userId });\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 // TODO: Invert this logic, we should remove accounts based on logged out emit\n this.accountService.setAccountStatus(userId as UserId, AuthenticationStatus.LoggedOut);\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 affected by this method\n protected resetAccount(account: TAccount) {\n const persistentAccountInformation = {\n settings: account.settings,\n keys: { deviceKey: account.keys.deviceKey },\n adminAuthRequest: account.adminAuthRequest,\n };\n return Object.assign(this.createAccount(), persistentAccountInformation);\n }\n\n // The environment urls and region are selected before login and are transferred here to an authenticated account\n protected async setAccountEnvironment(account: TAccount): Promise {\n account.settings.region = await this.getGlobalRegion();\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 getGlobalRegion(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).region ?? null;\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 === VaultTimeoutAction.LogOut && timeout != null\n ? await this.defaultInMemoryOptions()\n : await this.defaultOnDiskOptions();\n return this.reconcileOptions(options, defaultOptions);\n }\n\n protected async saveSecureStorageKey(\n key: string,\n value: T,\n options?: StorageOptions\n ) {\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 protected 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 (!Utils.isPromise(originalResult)) {\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 (!Utils.isPromise(originalResult)) {\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","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","export class UpdateAvatarRequest {\n avatarColor: string;\n\n constructor(avatarColor: string) {\n this.avatarColor = avatarColor;\n }\n}\n","import { NotificationType } from \"../../enums\";\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 { BillingSyncConfigApi } from \"../../../billing/models/api/billing-sync-config.api\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { OrganizationConnectionType } from \"../../enums\";\nimport { ScimConfigApi } from \"../api/scim-config.api\";\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 { SelectionReadOnlyResponse } from \"../../../admin-console/models/response/selection-read-only.response\";\nimport { BaseResponse } from \"../../../models/response/base.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 hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty(\"ReadOnly\") || false;\n this.hidePasswords = this.getResponseProperty(\"HidePasswords\") || 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 \"../../../models/response/base.response\";\nimport { CipherResponse } from \"../../../vault/models/response/cipher.response\";\nimport { CollectionResponse } from \"../../../vault/models/response/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 \"../../../models/response/base.response\";\n\nexport class OrganizationSponsorshipSyncStatusResponse extends BaseResponse {\n lastSyncDate?: Date;\n\n constructor(response: any) {\n super(response);\n const lastSyncDate = this.getResponseProperty(\"LastSyncDate\");\n if (lastSyncDate) {\n this.lastSyncDate = new Date(lastSyncDate);\n }\n }\n}\n","import { BaseResponse } from \"../../../../models/response/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 \"../../../../models/response/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 { BaseResponse } from \"../../../../models/response/base.response\";\nimport { ProviderUserStatusType, ProviderUserType } from \"../../../enums\";\nimport { PermissionsApi } from \"../../api/permissions.api\";\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 \"../../../../models/response/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 { DeviceType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/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 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.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 \"../../../models/response/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 \"../../../models/response/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 { KdfType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/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 \"../../../models/response/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 { BaseResponse } from \"../../../models/response/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 \"../../../models/response/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 \"../../../models/response/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 \"../../../models/response/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 { BaseResponse } from \"../../../models/response/base.response\";\nimport { TwoFactorProviderType } from \"../../enums/two-factor-provider-type\";\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 \"../../../models/response/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 { BaseResponse } from \"../../../models/response/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 \"../../../models/response/base.response\";\n\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 \"../../../models/response/base.response\";\n\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 \"../../../models/response/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 BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty(\"AddedDate\");\n this.breachDate = this.getResponseProperty(\"BreachDate\");\n this.dataClasses = this.getResponseProperty(\"DataClasses\");\n this.description = this.getResponseProperty(\"Description\");\n this.domain = this.getResponseProperty(\"Domain\");\n this.isActive = this.getResponseProperty(\"IsActive\");\n this.isVerified = this.getResponseProperty(\"IsVerified\");\n this.logoPath = this.getResponseProperty(\"LogoPath\");\n this.modifiedDate = this.getResponseProperty(\"ModifiedDate\");\n this.name = this.getResponseProperty(\"Name\");\n this.pwnCount = this.getResponseProperty(\"PwnCount\");\n this.title = this.getResponseProperty(\"Title\");\n }\n}\n","import { BaseResponse } from \"./base.response\";\n\nexport class 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 { 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\";\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\";\nimport { SendType } from \"../../enums/send-type\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\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 { 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 { PolicyResponse } from \"../../../admin-console/models/response/policy.response\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { DomainsResponse } from \"../../../models/response/domains.response\";\nimport { ProfileResponse } from \"../../../models/response/profile.response\";\nimport { SendResponse } from \"../../../tools/send/models/response/send.response\";\n\nimport { CipherResponse } from \"./cipher.response\";\nimport { CollectionDetailsResponse } from \"./collection.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 { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { CryptoFunctionService } from \"../platform/abstractions/crypto-function.service\";\nimport { throttle } from \"../platform/misc/throttle\";\nimport { Utils } from \"../platform/misc/utils\";\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 { EventType } from \"../../enums\";\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n organizationId: string;\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class OrganizationDomainSsoDetailsResponse extends BaseResponse {\n id: string;\n organizationIdentifier: string;\n ssoAvailable: boolean;\n domainName: string;\n verifiedDate?: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"id\");\n this.organizationIdentifier = this.getResponseProperty(\"organizationIdentifier\");\n this.ssoAvailable = this.getResponseProperty(\"ssoAvailable\");\n this.domainName = this.getResponseProperty(\"domainName\");\n this.verifiedDate = this.getResponseProperty(\"verifiedDate\");\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class OrganizationDomainResponse extends BaseResponse {\n id: string;\n organizationId: string;\n txt: string;\n domainName: string;\n creationDate: string;\n nextRunDate: string;\n jobRunCount: number;\n verifiedDate?: string;\n lastCheckedDate?: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"id\");\n this.organizationId = this.getResponseProperty(\"organizationId\");\n this.txt = this.getResponseProperty(\"txt\");\n this.domainName = this.getResponseProperty(\"domainName\");\n this.creationDate = this.getResponseProperty(\"creationDate\");\n this.nextRunDate = this.getResponseProperty(\"nextRunDate\");\n this.jobRunCount = this.getResponseProperty(\"jobRunCount\");\n this.verifiedDate = this.getResponseProperty(\"verifiedDate\");\n this.lastCheckedDate = this.getResponseProperty(\"lastCheckedDate\");\n }\n}\n","export class OrganizationDomainSsoDetailsRequest {\n constructor(public email: string) {}\n}\n","import { OrganizationUserStatusType, OrganizationUserType } from \"../../../admin-console/enums\";\nimport { PermissionsApi } from \"../../../admin-console/models/api/permissions.api\";\nimport { SelectionReadOnlyResponse } from \"../../../admin-console/models/response/selection-read-only.response\";\nimport { KdfType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.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 hasMasterPassword: 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 this.hasMasterPassword = this.getResponseProperty(\"HasMasterPassword\");\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 avatarColor: 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.avatarColor = this.getResponseProperty(\"AvatarColor\");\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 OrganizationUserResetPasswordDetailsResponse 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 * as lunr from \"lunr\";\n\nimport { SearchService as SearchServiceAbstraction } from \"../abstractions/search.service\";\nimport { FieldType, UriMatchType } from \"../enums\";\nimport { I18nService } from \"../platform/abstractions/i18n.service\";\nimport { LogService } from \"../platform/abstractions/log.service\";\nimport { SendView } from \"../tools/send/models/view/send.view\";\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(private logService: LogService, private i18nService: I18nService) {\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 indexCiphers(ciphers: CipherView[], indexedEntityId?: string): void {\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 || [];\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[]\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 = [];\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 { TotpService as TotpServiceAbstraction } from \"../abstractions/totp.service\";\nimport { CryptoFunctionService } from \"../platform/abstractions/crypto-function.service\";\nimport { LogService } from \"../platform/abstractions/log.service\";\nimport { Utils } from \"../platform/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, keyBytes, alg);\n return new Uint8Array(signature);\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { SearchService } from \"../../abstractions/search.service\";\nimport { VaultTimeoutSettingsService } from \"../../abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"../../abstractions/vault-timeout/vault-timeout.service\";\nimport { AuthService } from \"../../auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"../../auth/enums/authentication-status\";\nimport { ClientType } from \"../../enums\";\nimport { VaultTimeoutAction } from \"../../enums/vault-timeout-action.enum\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { CipherService } from \"../../vault/abstractions/cipher.service\";\nimport { CollectionService } from \"../../vault/abstractions/collection.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 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 async init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n // TODO: Remove after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3483)\n await this.migrateKeyForNeverLockIfNeeded();\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 const availableActions = await firstValueFrom(\n this.vaultTimeoutSettingsService.availableVaultTimeoutActions$()\n );\n const supportsLock = availableActions.includes(VaultTimeoutAction.Lock);\n if (!supportsLock) {\n await this.logOut(userId);\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.setUserKeyAutoUnlock(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n\n await this.cryptoService.clearUserKey(false, userId);\n await this.cryptoService.clearMasterKey(userId);\n await this.cryptoService.clearOrgKeys(true, userId);\n await this.cryptoService.clearKeyPair(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 firstValueFrom(\n this.vaultTimeoutSettingsService.vaultTimeoutAction$(userId)\n );\n timeoutAction === VaultTimeoutAction.LogOut\n ? await this.logOut(userId)\n : await this.lock(userId);\n }\n\n private async migrateKeyForNeverLockIfNeeded(): Promise {\n // Web can't set vault timeout to never\n if (this.platformUtilsService.getClientType() == ClientType.Web) {\n return;\n }\n const accounts = await firstValueFrom(this.stateService.accounts$);\n for (const userId in accounts) {\n if (userId != null) {\n await this.cryptoService.migrateAutoKeyIfNeeded(userId);\n // Legacy users should be logged out since we're not on the web vault and can't migrate.\n if (await this.cryptoService.isLegacyUser(null, userId)) {\n await this.logOut(userId);\n }\n }\n }\n }\n}\n","import { BaseResponse } from \"../../../../models/response/base.response\";\nimport { SendType } from \"../../enums/send-type\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\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 \"../../../../models/response/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 { FileUploadType } from \"../../../../enums\";\nimport { BaseResponse } from \"../../../../models/response/base.response\";\n\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 { Jsonify } from \"type-fest\";\n\nimport { Utils } from \"../../../../platform/misc/utils\";\nimport Domain from \"../../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../../platform/models/domain/enc-string\";\nimport { SendType } from \"../../enums/send-type\";\nimport { SendData } from \"../data/send.data\";\nimport { SendView } from \"../view/send.view\";\n\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 static fromJSON(obj: Jsonify) {\n if (obj == null) {\n return null;\n }\n\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n const expirationDate = obj.expirationDate == null ? null : new Date(obj.expirationDate);\n const deletionDate = obj.deletionDate == null ? null : new Date(obj.deletionDate);\n\n return Object.assign(new Send(), obj, {\n key: EncString.fromJSON(obj.key),\n name: EncString.fromJSON(obj.name),\n notes: EncString.fromJSON(obj.notes),\n text: SendText.fromJSON(obj.text),\n file: SendFile.fromJSON(obj.file),\n revisionDate,\n expirationDate,\n deletionDate,\n });\n }\n}\n","import { EncArrayBuffer } from \"../../../platform/models/domain/enc-array-buffer\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { Cipher } from \"../../models/domain/cipher\";\nimport { CipherResponse } from \"../../models/response/cipher.response\";\n\nexport abstract class CipherFileUploadService {\n upload: (\n cipher: Cipher,\n encFileName: EncString,\n encData: EncArrayBuffer,\n admin: boolean,\n dataEncKey: [SymmetricCryptoKey, EncString]\n ) => Promise;\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 organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\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\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\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\";\nimport { SemVer } from \"semver\";\n\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { SearchService } from \"../../abstractions/search.service\";\nimport { SettingsService } from \"../../abstractions/settings.service\";\nimport { FieldType, UriMatchType } from \"../../enums\";\nimport { ErrorResponse } from \"../../models/response/error.response\";\nimport { View } from \"../../models/view/view\";\nimport { ConfigServiceAbstraction } from \"../../platform/abstractions/config/config.service.abstraction\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { EncryptService } from \"../../platform/abstractions/encrypt.service\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { flagEnabled } from \"../../platform/misc/flags\";\nimport { sequentialize } from \"../../platform/misc/sequentialize\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport Domain from \"../../platform/models/domain/domain-base\";\nimport { EncArrayBuffer } from \"../../platform/models/domain/enc-array-buffer\";\nimport { EncString } from \"../../platform/models/domain/enc-string\";\nimport {\n OrgKey,\n SymmetricCryptoKey,\n UserKey,\n} from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { CipherService as CipherServiceAbstraction } from \"../abstractions/cipher.service\";\nimport { CipherFileUploadService } from \"../abstractions/file-upload/cipher-file-upload.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 { Fido2Credential } from \"../models/domain/fido2-credential\";\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 { 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 CIPHER_KEY_ENC_MIN_SERVER_VER = new SemVer(\"2023.9.1\");\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 i18nService: I18nService,\n private searchService: SearchService,\n private stateService: StateService,\n private encryptService: EncryptService,\n private cipherFileUploadService: CipherFileUploadService,\n private configService: ConfigServiceAbstraction\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(value);\n }\n }\n }\n\n async clearCache(userId?: string): Promise {\n await this.clearDecryptedCiphersState(userId);\n }\n\n async encrypt(\n model: CipherView,\n keyForEncryption?: SymmetricCryptoKey,\n keyForCipherKeyDecryption?: SymmetricCryptoKey,\n originalCipher: Cipher = null\n ): Promise {\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n await this.updateModelfromExistingCipher(model, originalCipher);\n }\n this.adjustPasswordHistoryLength(model);\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 (await this.getCipherKeyEncryptionEnabled()) {\n cipher.key = originalCipher?.key ?? null;\n const userOrOrgKey = await this.getKeyForCipherKeyDecryption(cipher);\n // The keyForEncryption is only used for encrypting the cipher key, not the cipher itself, since cipher key encryption is enabled.\n // If the caller has provided a key for cipher key encryption, use it. Otherwise, use the user or org key.\n keyForEncryption ||= userOrOrgKey;\n // If the caller has provided a key for cipher key decryption, use it. Otherwise, use the user or org key.\n keyForCipherKeyDecryption ||= userOrOrgKey;\n return this.encryptCipherWithCipherKey(\n model,\n cipher,\n keyForEncryption,\n keyForCipherKeyDecryption\n );\n } else {\n if (keyForEncryption == null && cipher.organizationId != null) {\n keyForEncryption = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (keyForEncryption == null) {\n throw new Error(\"Cannot encrypt cipher for organization. No key.\");\n }\n }\n // We want to ensure that the cipher key is null if cipher key encryption is disabled\n // so that decryption uses the proper key.\n cipher.key = null;\n return this.encryptCipher(model, cipher, keyForEncryption);\n }\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 ciphers = await this.getAll();\n const orgKeys = await this.cryptoService.getOrgKeys();\n const userKey = await this.cryptoService.getUserKeyWithLegacySupport();\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 this.searchService.indexCiphers(await this.getDecryptedCipherCache(), userId);\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 equivalentDomains = this.settingsService.getEquivalentDomains(url);\n const ciphers = await this.getAllDecrypted();\n defaultMatch ??= await this.stateService.getDefaultUriMatch();\n\n return ciphers.filter((cipher) => {\n const cipherIsLogin = cipher.type === CipherType.Login && cipher.login !== null;\n\n if (cipher.deletedDate !== null) {\n return false;\n }\n\n if (\n Array.isArray(includeOtherTypes) &&\n includeOtherTypes.includes(cipher.type) &&\n !cipherIsLogin\n ) {\n return true;\n }\n\n if (cipherIsLogin) {\n return cipher.login.matchesUri(url, equivalentDomains, defaultMatch);\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, orgAdmin?: boolean): Promise {\n let response: CipherResponse;\n if (orgAdmin && cipher.organizationId != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherAdmin(request);\n } else 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, orgAdmin?: boolean, isNotClone?: boolean): Promise {\n let response: CipherResponse;\n if (orgAdmin && isNotClone) {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipherAdmin(cipher.id, request);\n } else 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.encryptSharedCipher(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.encryptSharedCipher(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: Uint8Array,\n admin = false\n ): Promise {\n const encKey = await this.getKeyForCipherKeyDecryption(cipher);\n const cipherKeyEncryptionEnabled = await this.getCipherKeyEncryptionEnabled();\n\n const cipherEncKey =\n cipherKeyEncryptionEnabled && cipher.key != null\n ? (new SymmetricCryptoKey(\n await this.encryptService.decryptToBytes(cipher.key, encKey)\n ) as UserKey)\n : encKey;\n\n //if cipher key encryption is disabled but the item has an individual key,\n //then we rollback to using the user key as the main key of encryption of the item\n //in order to keep item and it's attachments with the same encryption level\n if (cipher.key != null && !cipherKeyEncryptionEnabled) {\n const model = await cipher.decrypt(await this.getKeyForCipherKeyDecryption(cipher));\n cipher = await this.encrypt(model);\n await this.updateWithServer(cipher);\n }\n\n const encFileName = await this.encryptService.encrypt(filename, cipherEncKey);\n\n const dataEncKey = await this.cryptoService.makeDataEncKey(cipherEncKey);\n const encData = await this.encryptService.encryptToBytes(new Uint8Array(data), dataEncKey[0]);\n\n const response = await this.cipherFileUploadService.upload(\n cipher,\n encFileName,\n encData,\n admin,\n dataEncKey\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 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, asAdmin = false): Promise {\n if (asAdmin) {\n await this.apiService.deleteCipherAdmin(id);\n } else {\n await this.apiService.deleteCipher(id);\n }\n\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[], asAdmin = false): Promise {\n const request = new CipherBulkDeleteRequest(ids);\n if (asAdmin) {\n await this.apiService.deleteManyCiphersAdmin(request);\n } else {\n await this.apiService.deleteManyCiphers(request);\n }\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, asAdmin = false): Promise {\n if (asAdmin) {\n await this.apiService.putDeleteCipherAdmin(id);\n } else {\n await this.apiService.putDeleteCipher(id);\n }\n\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[], asAdmin = false): Promise {\n const request = new CipherBulkDeleteRequest(ids);\n if (asAdmin) {\n await this.apiService.putDeleteManyCiphersAdmin(request);\n } else {\n await this.apiService.putDeleteManyCiphers(request);\n }\n\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, asAdmin = false): Promise {\n let response;\n if (asAdmin) {\n response = await this.apiService.putRestoreCipherAdmin(id);\n } else {\n response = await this.apiService.putRestoreCipher(id);\n }\n\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(\n ids: string[],\n organizationId: string = null,\n asAdmin = false\n ): Promise {\n let response;\n if (asAdmin) {\n const request = new CipherBulkRestoreRequest(ids, organizationId);\n response = await this.apiService.putRestoreManyCiphersAdmin(request);\n } else {\n const request = new CipherBulkRestoreRequest(ids);\n response = await this.apiService.putRestoreManyCiphers(request);\n }\n\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 async getKeyForCipherKeyDecryption(cipher: Cipher): Promise {\n return (\n (await this.cryptoService.getOrgKey(cipher.organizationId)) ||\n ((await this.cryptoService.getUserKeyWithLegacySupport()) as UserKey)\n );\n }\n\n // Helpers\n\n // In the case of a cipher that is being shared with an organization, we want to decrypt the\n // cipher key with the user's key and then re-encrypt it with the organization's key.\n private async encryptSharedCipher(model: CipherView): Promise {\n const keyForCipherKeyDecryption = await this.cryptoService.getUserKeyWithLegacySupport();\n return await this.encrypt(model, null, keyForCipherKeyDecryption);\n }\n\n private async updateModelfromExistingCipher(\n model: CipherView,\n originalCipher: Cipher\n ): Promise {\n const existingCipher = await originalCipher.decrypt(\n await this.getKeyForCipherKeyDecryption(originalCipher)\n );\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\n private adjustPasswordHistoryLength(model: CipherView) {\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 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\n let encKey: UserKey | OrgKey;\n encKey = await this.cryptoService.getOrgKey(organizationId);\n encKey ||= (await this.cryptoService.getUserKeyWithLegacySupport()) as UserKey;\n\n const dataEncKey = await this.cryptoService.makeDataEncKey(encKey);\n\n const encFileName = await this.encryptService.encrypt(attachmentView.fileName, encKey);\n const encData = await this.encryptService.encryptToBytes(new Uint8Array(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\n if (model.login.fido2Credentials != null) {\n cipher.login.fido2Credentials = await Promise.all(\n model.login.fido2Credentials.map(async (viewKey) => {\n const domainKey = new Fido2Credential();\n await this.encryptObjProperty(\n viewKey,\n domainKey,\n {\n credentialId: null,\n keyType: null,\n keyAlgorithm: null,\n keyCurve: null,\n keyValue: null,\n rpId: null,\n rpName: null,\n userHandle: null,\n userDisplayName: null,\n origin: null,\n },\n key\n );\n domainKey.counter = await this.cryptoService.encrypt(String(viewKey.counter), key);\n domainKey.discoverable = await this.cryptoService.encrypt(\n String(viewKey.discoverable),\n key\n );\n domainKey.creationDate = viewKey.creationDate;\n return domainKey;\n })\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 private async encryptCipher(\n model: CipherView,\n cipher: Cipher,\n key: SymmetricCryptoKey\n ): Promise {\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 private async encryptCipherWithCipherKey(\n model: CipherView,\n cipher: Cipher,\n keyForCipherKeyEncryption: SymmetricCryptoKey,\n keyForCipherKeyDecryption: SymmetricCryptoKey\n ): Promise {\n // First, we get the key for cipher key encryption, in its decrypted form\n let decryptedCipherKey: SymmetricCryptoKey;\n if (cipher.key == null) {\n decryptedCipherKey = await this.cryptoService.makeCipherKey();\n } else {\n decryptedCipherKey = new SymmetricCryptoKey(\n await this.encryptService.decryptToBytes(cipher.key, keyForCipherKeyDecryption)\n );\n }\n\n // Then, we have to encrypt the cipher key with the proper key.\n cipher.key = await this.encryptService.encrypt(\n decryptedCipherKey.key,\n keyForCipherKeyEncryption\n );\n\n // Finally, we can encrypt the cipher with the decrypted cipher key.\n return this.encryptCipher(model, cipher, decryptedCipherKey);\n }\n\n private async getCipherKeyEncryptionEnabled(): Promise {\n return (\n flagEnabled(\"enableCipherKeyEncryption\") &&\n (await firstValueFrom(\n this.configService.checkServerMeetsVersionRequirement$(CIPHER_KEY_ENC_MIN_SERVER_VER)\n ))\n );\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { SettingsService } from \"../../../abstractions/settings.service\";\nimport { InternalOrganizationServiceAbstraction } from \"../../../admin-console/abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService } from \"../../../admin-console/abstractions/policy/policy.service.abstraction\";\nimport { ProviderService } from \"../../../admin-console/abstractions/provider.service\";\nimport { OrganizationData } from \"../../../admin-console/models/data/organization.data\";\nimport { PolicyData } from \"../../../admin-console/models/data/policy.data\";\nimport { ProviderData } from \"../../../admin-console/models/data/provider.data\";\nimport { PolicyResponse } from \"../../../admin-console/models/response/policy.response\";\nimport { KeyConnectorService } from \"../../../auth/abstractions/key-connector.service\";\nimport { ForceResetPasswordReason } from \"../../../auth/models/domain/force-reset-password-reason\";\nimport { DomainsResponse } from \"../../../models/response/domains.response\";\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../../models/response/notification.response\";\nimport { ProfileResponse } from \"../../../models/response/profile.response\";\nimport { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { LogService } from \"../../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../../platform/abstractions/messaging.service\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { sequentialize } from \"../../../platform/misc/sequentialize\";\nimport { SendData } from \"../../../tools/send/models/data/send.data\";\nimport { SendResponse } from \"../../../tools/send/models/response/send.response\";\nimport { SendApiService } from \"../../../tools/send/services/send-api.service.abstraction\";\nimport { InternalSendService } from \"../../../tools/send/services/send.service.abstraction\";\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\";\nimport { CollectionService } from \"../../abstractions/collection.service\";\nimport { CollectionData } from \"../../models/data/collection.data\";\nimport { CollectionDetailsResponse } from \"../../models/response/collection.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: InternalSendService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private providerService: ProviderService,\n private folderApiService: FolderApiServiceAbstraction,\n private organizationService: InternalOrganizationServiceAbstraction,\n private sendApiService: SendApiService,\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 = 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.sendApiService.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.setMasterKeyEncryptedUserKey(response.key);\n await this.cryptoService.setPrivateKey(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.keyConnectorService.setUsesKeyConnector(response.usesKeyConnector);\n\n // The `forcePasswordReset` flag indicates an admin has reset the user's password and must be updated\n if (response.forcePasswordReset) {\n await this.stateService.setForcePasswordResetReason(\n ForceResetPasswordReason.AdminForcePasswordReset\n );\n }\n\n await this.syncProfileOrganizations(response);\n\n const providers: { [id: string]: ProviderData } = {};\n response.providers.forEach((p) => {\n providers[p.id] = new ProviderData(p);\n });\n\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 syncProfileOrganizations(response: ProfileResponse) {\n const organizations: { [id: string]: OrganizationData } = {};\n response.organizations.forEach((o) => {\n organizations[o.id] = new OrganizationData(o, {\n isMember: true,\n isProviderUser: false,\n });\n });\n\n response.providerOrganizations.forEach((o) => {\n if (organizations[o.id] == null) {\n organizations[o.id] = new OrganizationData(o, {\n isMember: false,\n isProviderUser: true,\n });\n } else {\n organizations[o.id].isProviderUser = true;\n }\n });\n\n await this.organizationService.replace(organizations);\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 {\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 { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService as BaseBroadcasterService } from \"@bitwarden/common/platform/services/broadcaster.service\";\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {}\n","import { ThemeType } from \"@bitwarden/common/enums\";\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 { ThemeType } from \"@bitwarden/common/enums\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 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 { LOCALE_ID, NgModule } from \"@angular/core\";\n\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 { AuditService as AuditServiceAbstraction } from \"@bitwarden/common/abstractions/audit.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 { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { OrgDomainApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization-domain/org-domain-api.service.abstraction\";\nimport {\n OrgDomainInternalServiceAbstraction,\n OrgDomainServiceAbstraction,\n} from \"@bitwarden/common/abstractions/organization-domain/org-domain.service.abstraction\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { SearchService as SearchServiceAbstraction } from \"@bitwarden/common/abstractions/search.service\";\nimport { SettingsService as SettingsServiceAbstraction } from \"@bitwarden/common/abstractions/settings.service\";\nimport { TotpService as TotpServiceAbstraction } from \"@bitwarden/common/abstractions/totp.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport {\n InternalOrganizationServiceAbstraction,\n OrganizationService as OrganizationServiceAbstraction,\n} from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport {\n InternalPolicyService,\n PolicyService as PolicyServiceAbstraction,\n} from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { ProviderService as ProviderServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { OrganizationApiService } from \"@bitwarden/common/admin-console/services/organization/organization-api.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/services/organization/organization.service\";\nimport { PolicyApiService } from \"@bitwarden/common/admin-console/services/policy/policy-api.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/services/policy/policy.service\";\nimport { ProviderService } from \"@bitwarden/common/admin-console/services/provider.service\";\nimport { AccountApiService as AccountApiServiceAbstraction } from \"@bitwarden/common/auth/abstractions/account-api.service\";\nimport {\n AccountService as AccountServiceAbstraction,\n InternalAccountService,\n} from \"@bitwarden/common/auth/abstractions/account.service\";\nimport { AuthRequestCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction\";\nimport { AuthService as AuthServiceAbstraction } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { DevicesServiceAbstraction } from \"@bitwarden/common/auth/abstractions/devices/devices.service.abstraction\";\nimport { DevicesApiServiceAbstraction } from \"@bitwarden/common/auth/abstractions/devices-api.service.abstraction\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { PasswordResetEnrollmentServiceAbstraction } from \"@bitwarden/common/auth/abstractions/password-reset-enrollment.service.abstraction\";\nimport { TokenService as TokenServiceAbstraction } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/auth/abstractions/two-factor.service\";\nimport { UserVerificationApiServiceAbstraction } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { AccountApiServiceImplementation } from \"@bitwarden/common/auth/services/account-api.service\";\nimport { AccountServiceImplementation } from \"@bitwarden/common/auth/services/account.service\";\nimport { AuthRequestCryptoServiceImplementation } from \"@bitwarden/common/auth/services/auth-request-crypto.service.implementation\";\nimport { AuthService } from \"@bitwarden/common/auth/services/auth.service\";\nimport { DeviceTrustCryptoService } from \"@bitwarden/common/auth/services/device-trust-crypto.service.implementation\";\nimport { DevicesServiceImplementation } from \"@bitwarden/common/auth/services/devices/devices.service.implementation\";\nimport { DevicesApiServiceImplementation } from \"@bitwarden/common/auth/services/devices-api.service.implementation\";\nimport { KeyConnectorService } from \"@bitwarden/common/auth/services/key-connector.service\";\nimport { LoginService } from \"@bitwarden/common/auth/services/login.service\";\nimport { PasswordResetEnrollmentServiceImplementation } from \"@bitwarden/common/auth/services/password-reset-enrollment.service.implementation\";\nimport { TokenService } from \"@bitwarden/common/auth/services/token.service\";\nimport { TwoFactorService } from \"@bitwarden/common/auth/services/two-factor.service\";\nimport { UserVerificationApiService } from \"@bitwarden/common/auth/services/user-verification/user-verification-api.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/services/user-verification/user-verification.service\";\nimport { AppIdService as AppIdServiceAbstraction } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { BroadcasterService as BroadcasterServiceAbstraction } from \"@bitwarden/common/platform/abstractions/broadcaster.service\";\nimport { ConfigApiServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config-api.service.abstraction\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EncryptService } from \"@bitwarden/common/platform/abstractions/encrypt.service\";\nimport { EnvironmentService as EnvironmentServiceAbstraction } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"@bitwarden/common/platform/abstractions/file-upload/file-upload.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/platform/abstractions/storage.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { StateFactory } from \"@bitwarden/common/platform/factories/state-factory\";\nimport { flagEnabled } from \"@bitwarden/common/platform/misc/flags\";\nimport { Account } from \"@bitwarden/common/platform/models/domain/account\";\nimport { GlobalState } from \"@bitwarden/common/platform/models/domain/global-state\";\nimport { AppIdService } from \"@bitwarden/common/platform/services/app-id.service\";\nimport { ConfigApiService } from \"@bitwarden/common/platform/services/config/config-api.service\";\nimport { ConfigService } from \"@bitwarden/common/platform/services/config/config.service\";\nimport { ConsoleLogService } from \"@bitwarden/common/platform/services/console-log.service\";\nimport { CryptoService } from \"@bitwarden/common/platform/services/crypto.service\";\nimport { EncryptServiceImplementation } from \"@bitwarden/common/platform/services/cryptography/encrypt.service.implementation\";\nimport { MultithreadEncryptServiceImplementation } from \"@bitwarden/common/platform/services/cryptography/multithread-encrypt.service.implementation\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/services/environment.service\";\nimport { FileUploadService } from \"@bitwarden/common/platform/services/file-upload/file-upload.service\";\nimport { StateService } from \"@bitwarden/common/platform/services/state.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/services/validation.service\";\nimport { WebCryptoFunctionService } from \"@bitwarden/common/platform/services/web-crypto-function.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 { AuditService } from \"@bitwarden/common/services/audit.service\";\nimport { EventCollectionService } from \"@bitwarden/common/services/event/event-collection.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { NotificationsService } from \"@bitwarden/common/services/notifications.service\";\nimport { OrgDomainApiService } from \"@bitwarden/common/services/organization-domain/org-domain-api.service\";\nimport { OrgDomainService } from \"@bitwarden/common/services/organization-domain/org-domain.service\";\nimport { OrganizationUserServiceImplementation } from \"@bitwarden/common/services/organization-user/organization-user.service.implementation\";\nimport { SearchService } from \"@bitwarden/common/services/search.service\";\nimport { SettingsService } from \"@bitwarden/common/services/settings.service\";\nimport { TotpService } from \"@bitwarden/common/services/totp.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/services/vault-timeout/vault-timeout-settings.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/services/vault-timeout/vault-timeout.service\";\nimport {\n PasswordGenerationService,\n PasswordGenerationServiceAbstraction,\n} from \"@bitwarden/common/tools/generator/password\";\nimport {\n UsernameGenerationService,\n UsernameGenerationServiceAbstraction,\n} from \"@bitwarden/common/tools/generator/username\";\nimport {\n PasswordStrengthService,\n PasswordStrengthServiceAbstraction,\n} from \"@bitwarden/common/tools/password-strength\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service\";\nimport { SendApiService as SendApiServiceAbstraction } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/tools/send/services/send.service\";\nimport { SendService as SendServiceAbstraction } from \"@bitwarden/common/tools/send/services/send.service.abstraction\";\nimport { CipherService as CipherServiceAbstraction } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { CipherFileUploadService as CipherFileUploadServiceAbstraction } from \"@bitwarden/common/vault/abstractions/file-upload/cipher-file-upload.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 { 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 { CollectionService } from \"@bitwarden/common/vault/services/collection.service\";\nimport { CipherFileUploadService } from \"@bitwarden/common/vault/services/file-upload/cipher-file-upload.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\";\nimport {\n VaultExportService,\n VaultExportServiceAbstraction,\n} from \"@bitwarden/exporter/vault-export\";\nimport {\n ImportApiService,\n ImportApiServiceAbstraction,\n ImportService,\n ImportServiceAbstraction,\n} from \"@bitwarden/importer/core\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\n\nimport { AuthGuard } from \"../auth/guards/auth.guard\";\nimport { UnauthGuard } from \"../auth/guards/unauth.guard\";\nimport { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from \"../platform/abstractions/form-validation-errors.service\";\nimport { BroadcasterService } from \"../platform/services/broadcaster.service\";\nimport { FormValidationErrorsService } from \"../platform/services/form-validation-errors.service\";\n\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 ModalService,\n PasswordRepromptService,\n\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 EncryptService,\n PasswordStrengthServiceAbstraction,\n PolicyServiceAbstraction,\n DeviceTrustCryptoServiceAbstraction,\n AuthRequestCryptoServiceAbstraction,\n ],\n },\n {\n provide: FileUploadServiceAbstraction,\n useClass: FileUploadService,\n deps: [LoginServiceAbstraction],\n },\n {\n provide: CipherFileUploadServiceAbstraction,\n useClass: CipherFileUploadService,\n deps: [ApiServiceAbstraction, FileUploadServiceAbstraction],\n },\n {\n provide: CipherServiceAbstraction,\n useFactory: (\n cryptoService: CryptoServiceAbstraction,\n settingsService: SettingsServiceAbstraction,\n apiService: ApiServiceAbstraction,\n i18nService: I18nServiceAbstraction,\n searchService: SearchServiceAbstraction,\n stateService: StateServiceAbstraction,\n encryptService: EncryptService,\n fileUploadService: CipherFileUploadServiceAbstraction,\n configService: ConfigServiceAbstraction\n ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n i18nService,\n searchService,\n stateService,\n encryptService,\n fileUploadService,\n configService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n I18nServiceAbstraction,\n SearchServiceAbstraction,\n StateServiceAbstraction,\n EncryptService,\n CipherFileUploadServiceAbstraction,\n ConfigServiceAbstraction,\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 AppIdServiceAbstraction,\n DevicesApiServiceAbstraction,\n ],\n },\n {\n provide: PasswordStrengthServiceAbstraction,\n useClass: PasswordStrengthService,\n deps: [],\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: SendServiceAbstraction,\n useClass: SendService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: SendApiServiceAbstraction,\n useClass: SendApiService,\n deps: [ApiServiceAbstraction, FileUploadServiceAbstraction, SendServiceAbstraction],\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 SendApiServiceAbstraction,\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 UserVerificationServiceAbstraction,\n ],\n },\n {\n provide: VaultTimeoutService,\n useClass: VaultTimeoutService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n VaultTimeoutSettingsServiceAbstraction,\n LOCKED_CALLBACK,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useExisting: VaultTimeoutService,\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n AbstractStorageService,\n SECURE_STORAGE,\n MEMORY_STORAGE,\n LogService,\n STATE_FACTORY,\n AccountServiceAbstraction,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: ImportApiServiceAbstraction,\n useClass: ImportApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: ImportServiceAbstraction,\n useClass: ImportService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n ImportApiServiceAbstraction,\n I18nServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n ],\n },\n {\n provide: VaultExportServiceAbstraction,\n useClass: VaultExportService,\n deps: [\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n ApiServiceAbstraction,\n CryptoServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: SearchServiceAbstraction,\n useClass: SearchService,\n deps: [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: KeyConnectorServiceAbstraction,\n useClass: KeyConnectorService,\n deps: [\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n UserVerificationApiServiceAbstraction,\n ],\n },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: InternalOrganizationServiceAbstraction,\n useExisting: OrganizationServiceAbstraction,\n },\n {\n provide: OrganizationUserService,\n useClass: OrganizationUserServiceImplementation,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: PasswordResetEnrollmentServiceAbstraction,\n useClass: PasswordResetEnrollmentServiceImplementation,\n deps: [\n OrganizationApiServiceAbstraction,\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n OrganizationUserService,\n I18nServiceAbstraction,\n ],\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: ConfigService,\n useClass: ConfigService,\n deps: [\n StateServiceAbstraction,\n ConfigApiServiceAbstraction,\n AuthServiceAbstraction,\n EnvironmentServiceAbstraction,\n LogService,\n ],\n },\n {\n provide: ConfigServiceAbstraction,\n useExisting: ConfigService,\n },\n {\n provide: ConfigApiServiceAbstraction,\n useClass: ConfigApiService,\n deps: [ApiServiceAbstraction, AuthServiceAbstraction],\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 provide: OrgDomainServiceAbstraction,\n useClass: OrgDomainService,\n deps: [PlatformUtilsServiceAbstraction, I18nServiceAbstraction],\n },\n {\n provide: OrgDomainInternalServiceAbstraction,\n useExisting: OrgDomainServiceAbstraction,\n },\n {\n provide: OrgDomainApiServiceAbstraction,\n useClass: OrgDomainApiService,\n deps: [OrgDomainServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: DevicesApiServiceAbstraction,\n useClass: DevicesApiServiceImplementation,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: DevicesServiceAbstraction,\n useClass: DevicesServiceImplementation,\n deps: [DevicesApiServiceAbstraction],\n },\n {\n provide: DeviceTrustCryptoServiceAbstraction,\n useClass: DeviceTrustCryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n CryptoServiceAbstraction,\n EncryptService,\n StateServiceAbstraction,\n AppIdServiceAbstraction,\n DevicesApiServiceAbstraction,\n I18nServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n ],\n },\n {\n provide: AuthRequestCryptoServiceAbstraction,\n useClass: AuthRequestCryptoServiceImplementation,\n deps: [CryptoServiceAbstraction],\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 { HtmlStorageLocation } from \"../../enums\";\nimport { AppIdService as AppIdServiceAbstraction } from \"../abstractions/app-id.service\";\nimport { AbstractStorageService } from \"../abstractions/storage.service\";\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 { PolicyService } from \"../../admin-console/abstractions/policy/policy.service.abstraction\";\nimport { KdfType, KeySuffixOptions } from \"../../enums\";\nimport { PreloginRequest } from \"../../models/request/prelogin.request\";\nimport { ErrorResponse } from \"../../models/response/error.response\";\nimport { AuthRequestPushNotification } from \"../../models/response/notification.response\";\nimport { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { EncryptService } from \"../../platform/abstractions/encrypt.service\";\nimport { EnvironmentService } from \"../../platform/abstractions/environment.service\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { MasterKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { PasswordStrengthServiceAbstraction } from \"../../tools/password-strength\";\nimport { AuthRequestCryptoServiceAbstraction } from \"../abstractions/auth-request-crypto.service.abstraction\";\nimport { AuthService as AuthServiceAbstraction } from \"../abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"../abstractions/device-trust-crypto.service.abstraction\";\nimport { KeyConnectorService } from \"../abstractions/key-connector.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/two-factor.service\";\nimport { AuthenticationStatus } from \"../enums/authentication-status\";\nimport { AuthenticationType } from \"../enums/authentication-type\";\nimport { PasswordLogInStrategy } from \"../login-strategies/password-login.strategy\";\nimport { PasswordlessLogInStrategy } from \"../login-strategies/passwordless-login.strategy\";\nimport { SsoLogInStrategy } from \"../login-strategies/sso-login.strategy\";\nimport { UserApiLogInStrategy } from \"../login-strategies/user-api-login.strategy\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport { KdfConfig } from \"../models/domain/kdf-config\";\nimport {\n PasswordlessLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n UserApiLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { PasswordlessAuthRequest } from \"../models/request/passwordless-auth.request\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.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 this.logInStrategy instanceof SsoLogInStrategy\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 get ssoEmail2FaSessionToken(): string {\n return this.logInStrategy instanceof SsoLogInStrategy\n ? this.logInStrategy.ssoEmail2FaSessionToken\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 protected passwordStrengthService: PasswordStrengthServiceAbstraction,\n protected policyService: PolicyService,\n protected deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n protected authReqCryptoService: AuthRequestCryptoServiceAbstraction\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.passwordStrengthService,\n this.policyService,\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 this.deviceTrustCryptoService,\n this.authReqCryptoService,\n this.i18nService\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.deviceTrustCryptoService\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 // If we don't have an access token or userId, we're logged out\n const isAuthenticated = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!isAuthenticated) {\n return AuthenticationStatus.LoggedOut;\n }\n\n // If we don't have a user key in memory, we're locked\n if (!(await this.cryptoService.hasUserKeyInMemory(userId))) {\n // Check if the user has vault timeout set to never and verify that\n // they've never unlocked their vault\n const neverLock =\n (await this.cryptoService.hasUserKeyStored(KeySuffixOptions.Auto, userId)) &&\n !(await this.stateService.getEverBeenUnlocked({ userId: userId }));\n\n if (neverLock) {\n // Attempt to get the key from storage and set it in memory\n const userKey = await this.cryptoService.getUserKeyFromStorage(\n KeySuffixOptions.Auto,\n userId\n );\n await this.cryptoService.setUserKey(userKey, userId);\n }\n }\n\n // We do another check here in case setting the auto key failed\n const hasKeyInMemory = await this.cryptoService.hasUserKeyInMemory(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 await this.cryptoService.makeMasterKey(masterPassword, email, kdf, kdfConfig);\n }\n\n async authResponsePushNotification(notification: AuthRequestPushNotification): Promise {\n this.pushNotificationSubject.next(notification.id);\n }\n\n getPushNotificationObs$(): 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\n const masterKey = await this.cryptoService.getMasterKey();\n let keyToEncrypt;\n let encryptedMasterKeyHash = null;\n\n if (masterKey) {\n keyToEncrypt = masterKey.encKey;\n\n // Only encrypt the master password hash if masterKey exists as\n // we won't have a masterKeyHash without a masterKey\n const masterKeyHash = await this.stateService.getKeyHash();\n if (masterKeyHash != null) {\n encryptedMasterKeyHash = await this.cryptoService.rsaEncrypt(\n Utils.fromUtf8ToArray(masterKeyHash),\n pubKey\n );\n }\n } else {\n const userKey = await this.cryptoService.getUserKey();\n keyToEncrypt = userKey.key;\n }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(keyToEncrypt, pubKey);\n\n const request = new PasswordlessAuthRequest(\n encryptedKey.encryptedString,\n encryptedMasterKeyHash?.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 { FileUploadType } from \"../../../enums\";\nimport {\n FileUploadApiMethods,\n FileUploadService as FileUploadServiceAbstraction,\n} from \"../../abstractions/file-upload/file-upload.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { EncArrayBuffer } from \"../../models/domain/enc-array-buffer\";\nimport { EncString } from \"../../models/domain/enc-string\";\n\nimport { AzureFileUploadService } from \"./azure-file-upload.service\";\nimport { BitwardenFileUploadService } from \"./bitwarden-file-upload.service\";\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(protected logService: LogService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService();\n }\n\n async upload(\n uploadData: { url: string; fileUploadType: FileUploadType },\n fileName: EncString,\n encryptedFileData: EncArrayBuffer,\n fileUploadMethods: FileUploadApiMethods\n ) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n fileName.encryptedString,\n encryptedFileData,\n (fd) => fileUploadMethods.postDirect(fd)\n );\n break;\n case FileUploadType.Azure: {\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n fileUploadMethods.renewFileUploadUrl\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type\");\n }\n } catch (e) {\n await fileUploadMethods.rollback();\n throw e;\n }\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { ErrorResponse } from \"../../../models/response/error.response\";\nimport {\n FileUploadApiMethods,\n FileUploadService,\n} from \"../../../platform/abstractions/file-upload/file-upload.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { EncArrayBuffer } from \"../../../platform/models/domain/enc-array-buffer\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { CipherFileUploadService as CipherFileUploadServiceAbstraction } from \"../../abstractions/file-upload/cipher-file-upload.service\";\nimport { Cipher } from \"../../models/domain/cipher\";\nimport { AttachmentRequest } from \"../../models/request/attachment.request\";\nimport { AttachmentUploadDataResponse } from \"../../models/response/attachment-upload-data.response\";\nimport { CipherResponse } from \"../../models/response/cipher.response\";\n\nexport class CipherFileUploadService implements CipherFileUploadServiceAbstraction {\n constructor(private apiService: ApiService, private fileUploadService: FileUploadService) {}\n\n async upload(\n cipher: Cipher,\n encFileName: EncString,\n encData: EncArrayBuffer,\n admin: boolean,\n dataEncKey: [SymmetricCryptoKey, EncString]\n ): Promise {\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.upload(\n uploadDataResponse,\n encFileName,\n encData,\n this.generateMethods(uploadDataResponse, response, request.adminRequest)\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 request.adminRequest,\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 return response;\n }\n\n private generateMethods(\n uploadData: AttachmentUploadDataResponse,\n response: CipherResponse,\n isAdmin: boolean\n ): FileUploadApiMethods {\n return {\n postDirect: this.generatePostDirectCallback(uploadData, isAdmin),\n renewFileUploadUrl: this.generateRenewFileUploadUrlCallback(uploadData, response, isAdmin),\n rollback: this.generateRollbackCallback(response, uploadData, isAdmin),\n };\n }\n\n private generatePostDirectCallback(uploadData: AttachmentUploadDataResponse, isAdmin: boolean) {\n return (data: FormData) => {\n const response = isAdmin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n return this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, data);\n };\n }\n\n private generateRenewFileUploadUrlCallback(\n uploadData: AttachmentUploadDataResponse,\n response: CipherResponse,\n isAdmin: boolean\n ) {\n return async () => {\n const renewResponse = await this.apiService.renewAttachmentUploadUrl(\n response.id,\n uploadData.attachmentId\n );\n return renewResponse?.url;\n };\n }\n\n private generateRollbackCallback(\n response: CipherResponse,\n uploadData: AttachmentUploadDataResponse,\n isAdmin: boolean\n ) {\n return () => {\n if (isAdmin) {\n return this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n return this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n };\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","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../../platform/abstractions/i18n.service\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { SymmetricCryptoKey } from \"../../../platform/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.hasUserKey()) {\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 { ApiService } from \"../../abstractions/api.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { Verification } from \"../../types/verification\";\nimport { AccountApiService } from \"../abstractions/account-api.service\";\nimport { InternalAccountService } from \"../abstractions/account.service\";\nimport { UserVerificationService } from \"../abstractions/user-verification/user-verification.service.abstraction\";\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 {\n BehaviorSubject,\n Subject,\n combineLatestWith,\n map,\n distinctUntilChanged,\n shareReplay,\n} from \"rxjs\";\n\nimport { AccountInfo, InternalAccountService } from \"../../auth/abstractions/account.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\nimport { UserId } from \"../../types/guid\";\nimport { AuthenticationStatus } from \"../enums/authentication-status\";\n\nexport class AccountServiceImplementation implements InternalAccountService {\n private accounts = new BehaviorSubject>({});\n private activeAccountId = new BehaviorSubject(undefined);\n private lock = new Subject();\n private logout = new Subject();\n\n accounts$ = this.accounts.asObservable();\n activeAccount$ = this.activeAccountId.pipe(\n combineLatestWith(this.accounts$),\n map(([id, accounts]) => (id ? { id, ...accounts[id] } : undefined)),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: false })\n );\n accountLock$ = this.lock.asObservable();\n accountLogout$ = this.logout.asObservable();\n constructor(private messagingService: MessagingService, private logService: LogService) {}\n\n addAccount(userId: UserId, accountData: AccountInfo): void {\n this.accounts.value[userId] = accountData;\n this.accounts.next(this.accounts.value);\n }\n\n setAccountName(userId: UserId, name: string): void {\n this.setAccountInfo(userId, { ...this.accounts.value[userId], name });\n }\n\n setAccountEmail(userId: UserId, email: string): void {\n this.setAccountInfo(userId, { ...this.accounts.value[userId], email });\n }\n\n setAccountStatus(userId: UserId, status: AuthenticationStatus): void {\n this.setAccountInfo(userId, { ...this.accounts.value[userId], status });\n\n if (status === AuthenticationStatus.LoggedOut) {\n this.logout.next(userId);\n } else if (status === AuthenticationStatus.Locked) {\n this.lock.next(userId);\n }\n }\n\n switchAccount(userId: UserId) {\n if (userId == null) {\n // indicates no account is active\n this.activeAccountId.next(undefined);\n return;\n }\n\n if (this.accounts.value[userId] == null) {\n throw new Error(\"Account does not exist\");\n }\n this.activeAccountId.next(userId);\n }\n\n // TODO: update to use our own account status settings. Requires inverting direction of state service accounts flow\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 private setAccountInfo(userId: UserId, accountInfo: AccountInfo) {\n if (this.accounts.value[userId] == null) {\n throw new Error(\"Account does not exist\");\n }\n\n // Avoid unnecessary updates\n // TODO: Faster comparison, maybe include a hash on the objects?\n if (JSON.stringify(this.accounts.value[userId]) === JSON.stringify(accountInfo)) {\n return;\n }\n\n this.accounts.value[userId] = accountInfo;\n this.accounts.next(this.accounts.value);\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 { UpdateAvatarRequest } from \"../../models/request/update-avatar.request\";\nimport { ProfileResponse } from \"../../models/response/profile.response\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\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 { ServiceUtils } from \"../../misc/serviceUtils\";\nimport { TreeNode } from \"../../models/domain/tree-node\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { CollectionService as CollectionServiceAbstraction } from \"../../vault/abstractions/collection.service\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\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.hasUserKey();\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, ReplaySubject } from \"rxjs\";\n\nimport { EnvironmentUrls } from \"../../auth/models/domain/environment-urls\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Region,\n Urls,\n} from \"../abstractions/environment.service\";\nimport { StateService } from \"../abstractions/state.service\";\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n private readonly urlsSubject = new ReplaySubject(1);\n urls: Observable = this.urlsSubject.asObservable();\n selectedRegion?: Region;\n initialized = false;\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 private cloudWebVaultUrl: string;\n\n readonly usUrls: Urls = {\n base: null,\n api: \"https://api.bitwarden.com\",\n identity: \"https://identity.bitwarden.com\",\n icons: \"https://icons.bitwarden.net\",\n webVault: \"https://vault.bitwarden.com\",\n notifications: \"https://notifications.bitwarden.com\",\n events: \"https://events.bitwarden.com\",\n scim: \"https://scim.bitwarden.com\",\n };\n\n readonly euUrls: Urls = {\n base: null,\n api: \"https://api.bitwarden.eu\",\n identity: \"https://identity.bitwarden.eu\",\n icons: \"https://icons.bitwarden.eu\",\n webVault: \"https://vault.bitwarden.eu\",\n notifications: \"https://notifications.bitwarden.eu\",\n events: \"https://events.bitwarden.eu\",\n scim: \"https://scim.bitwarden.eu\",\n };\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n if (!this.initialized) {\n return;\n }\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 getCloudWebVaultUrl() {\n if (this.cloudWebVaultUrl != null) {\n return this.cloudWebVaultUrl;\n }\n\n return this.usUrls.webVault;\n }\n\n setCloudWebVaultUrl(region: Region) {\n switch (region) {\n case Region.EU:\n this.cloudWebVaultUrl = this.euUrls.webVault;\n break;\n case Region.US:\n default:\n this.cloudWebVaultUrl = this.usUrls.webVault;\n break;\n }\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 region = await this.stateService.getRegion();\n const savedUrls = await this.stateService.getEnvironmentUrls();\n const envUrls = new EnvironmentUrls();\n\n // In release `2023.5.0`, we set the `base` property of the environment URLs to the US web vault URL when a user clicked the \"US\" region.\n // This check will detect these cases and convert them to the proper region instead.\n // We are detecting this by checking for the presence of the web vault URL in the `base` and the absence of the `notifications` property.\n // This is because the `notifications` will not be `null` in the web vault, and we don't want to migrate the URLs in that case.\n if (savedUrls.base === \"https://vault.bitwarden.com\" && savedUrls.notifications == null) {\n await this.setRegion(Region.US);\n return;\n }\n\n switch (region) {\n case Region.EU:\n await this.setRegion(Region.EU);\n return;\n case Region.US:\n await this.setRegion(Region.US);\n return;\n case Region.SelfHosted:\n case null:\n default:\n this.baseUrl = envUrls.base = savedUrls.base;\n this.webVaultUrl = savedUrls.webVault;\n this.apiUrl = envUrls.api = savedUrls.api;\n this.identityUrl = envUrls.identity = savedUrls.identity;\n this.iconsUrl = savedUrls.icons;\n this.notificationsUrl = savedUrls.notifications;\n this.eventsUrl = envUrls.events = savedUrls.events;\n this.keyConnectorUrl = savedUrls.keyConnector;\n await this.setRegion(Region.SelfHosted);\n // scimUrl is not saved to storage\n this.urlsSubject.next();\n break;\n }\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 await this.setRegion(Region.SelfHosted);\n\n this.urlsSubject.next();\n\n return urls;\n }\n\n getUrls() {\n return {\n base: this.baseUrl,\n webVault: this.webVaultUrl,\n cloudWebVault: this.cloudWebVaultUrl,\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 isEmpty(): boolean {\n return (\n this.baseUrl == null &&\n this.webVaultUrl == null &&\n this.apiUrl == null &&\n this.identityUrl == null &&\n this.iconsUrl == null &&\n this.notificationsUrl == null &&\n this.eventsUrl == null\n );\n }\n\n async setRegion(region: Region) {\n this.selectedRegion = region;\n await this.stateService.setRegion(region);\n\n if (region === Region.SelfHosted) {\n // If user saves a self-hosted region with empty fields, default to US\n if (this.isEmpty()) {\n await this.setRegion(Region.US);\n }\n } else {\n // If we are setting the region to EU or US, clear the self-hosted URLs\n await this.stateService.setEnvironmentUrls(new EnvironmentUrls());\n if (region === Region.EU) {\n this.setUrlsInternal(this.euUrls);\n } else if (region === Region.US) {\n this.setUrlsInternal(this.usUrls);\n }\n }\n }\n\n private setUrlsInternal(urls: Urls) {\n this.baseUrl = this.formatUrl(urls.base);\n this.webVaultUrl = this.formatUrl(urls.webVault);\n this.apiUrl = this.formatUrl(urls.api);\n this.identityUrl = this.formatUrl(urls.identity);\n this.iconsUrl = this.formatUrl(urls.icons);\n this.notificationsUrl = this.formatUrl(urls.notifications);\n this.eventsUrl = this.formatUrl(urls.events);\n this.keyConnectorUrl = this.formatUrl(urls.keyConnector);\n\n // scimUrl cannot be cleared\n this.scimUrl = this.formatUrl(urls.scim) ?? this.scimUrl;\n this.urlsSubject.next();\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 [\n \"https://api.bitwarden.com\",\n \"https://vault.bitwarden.com/api\",\n \"https://api.bitwarden.eu\",\n \"https://vault.bitwarden.eu/api\",\n ].includes(this.getApiUrl());\n }\n}\n","import { ApiService as ApiServiceAbstraction } from \"../abstractions/api.service\";\nimport { OrganizationConnectionType } from \"../admin-console/enums\";\nimport { OrganizationSponsorshipCreateRequest } from \"../admin-console/models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../admin-console/models/request/organization/organization-sponsorship-redeem.request\";\nimport { OrganizationConnectionRequest } from \"../admin-console/models/request/organization-connection.request\";\nimport { ProviderAddOrganizationRequest } from \"../admin-console/models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../admin-console/models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../admin-console/models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../admin-console/models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../admin-console/models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../admin-console/models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../admin-console/models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../admin-console/models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../admin-console/models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../admin-console/models/request/provider/provider-user-update.request\";\nimport { SelectionReadOnlyRequest } from \"../admin-console/models/request/selection-read-only.request\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../admin-console/models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../admin-console/models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../admin-console/models/response/organization-sponsorship-sync-status.response\";\nimport { PolicyResponse } from \"../admin-console/models/response/policy.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../admin-console/models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../admin-console/models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../admin-console/models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../admin-console/models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../admin-console/models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../admin-console/models/response/selection-read-only.response\";\nimport { TokenService } from \"../auth/abstractions/token.service\";\nimport { DeviceVerificationRequest } from \"../auth/models/request/device-verification.request\";\nimport { EmailTokenRequest } from \"../auth/models/request/email-token.request\";\nimport { EmailRequest } from \"../auth/models/request/email.request\";\nimport { EmergencyAccessAcceptRequest } from \"../auth/models/request/emergency-access-accept.request\";\nimport { EmergencyAccessConfirmRequest } from \"../auth/models/request/emergency-access-confirm.request\";\nimport { EmergencyAccessInviteRequest } from \"../auth/models/request/emergency-access-invite.request\";\nimport { EmergencyAccessPasswordRequest } from \"../auth/models/request/emergency-access-password.request\";\nimport { EmergencyAccessUpdateRequest } from \"../auth/models/request/emergency-access-update.request\";\nimport { DeviceRequest } from \"../auth/models/request/identity-token/device.request\";\nimport { PasswordTokenRequest } from \"../auth/models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../auth/models/request/identity-token/sso-token.request\";\nimport { TokenTwoFactorRequest } from \"../auth/models/request/identity-token/token-two-factor.request\";\nimport { UserApiTokenRequest } from \"../auth/models/request/identity-token/user-api-token.request\";\nimport { KeyConnectorUserKeyRequest } from \"../auth/models/request/key-connector-user-key.request\";\nimport { PasswordHintRequest } from \"../auth/models/request/password-hint.request\";\nimport { PasswordRequest } from \"../auth/models/request/password.request\";\nimport { PasswordlessAuthRequest } from \"../auth/models/request/passwordless-auth.request\";\nimport { PasswordlessCreateAuthRequest } from \"../auth/models/request/passwordless-create-auth.request\";\nimport { SecretVerificationRequest } from \"../auth/models/request/secret-verification.request\";\nimport { SetKeyConnectorKeyRequest } from \"../auth/models/request/set-key-connector-key.request\";\nimport { SetPasswordRequest } from \"../auth/models/request/set-password.request\";\nimport { TwoFactorEmailRequest } from \"../auth/models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../auth/models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../auth/models/request/two-factor-recovery.request\";\nimport { UpdateProfileRequest } from \"../auth/models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../auth/models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../auth/models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../auth/models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../auth/models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../auth/models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../auth/models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../auth/models/request/update-two-factor-yubio-otp.request\";\nimport { ApiKeyResponse } from \"../auth/models/response/api-key.response\";\nimport { AuthRequestResponse } from \"../auth/models/response/auth-request.response\";\nimport { DeviceVerificationResponse } from \"../auth/models/response/device-verification.response\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../auth/models/response/emergency-access.response\";\nimport { IdentityCaptchaResponse } from \"../auth/models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../auth/models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../auth/models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../auth/models/response/key-connector-user-key.response\";\nimport { MasterPasswordPolicyResponse } from \"../auth/models/response/master-password-policy.response\";\nimport { PreloginResponse } from \"../auth/models/response/prelogin.response\";\nimport { RegisterResponse } from \"../auth/models/response/register.response\";\nimport { SsoPreValidateResponse } from \"../auth/models/response/sso-pre-validate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../auth/models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../auth/models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../auth/models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../auth/models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../auth/models/response/two-factor-recover.response\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../auth/models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../auth/models/response/two-factor-yubi-key.response\";\nimport { BitPayInvoiceRequest } from \"../billing/models/request/bit-pay-invoice.request\";\nimport { PaymentRequest } from \"../billing/models/request/payment.request\";\nimport { TaxInfoUpdateRequest } from \"../billing/models/request/tax-info-update.request\";\nimport { BillingHistoryResponse } from \"../billing/models/response/billing-history.response\";\nimport { BillingPaymentResponse } from \"../billing/models/response/billing-payment.response\";\nimport { PaymentResponse } from \"../billing/models/response/payment.response\";\nimport { PlanResponse } from \"../billing/models/response/plan.response\";\nimport { SubscriptionResponse } from \"../billing/models/response/subscription.response\";\nimport { TaxInfoResponse } from \"../billing/models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../billing/models/response/tax-rate.response\";\nimport { DeviceType } from \"../enums\";\nimport { CollectionBulkDeleteRequest } from \"../models/request/collection-bulk-delete.request\";\nimport { DeleteRecoverRequest } from \"../models/request/delete-recover.request\";\nimport { EventRequest } from \"../models/request/event.request\";\nimport { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { StorageRequest } from \"../models/request/storage.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 { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { DomainsResponse } from \"../models/response/domains.response\";\nimport { ErrorResponse } from \"../models/response/error.response\";\nimport { EventResponse } from \"../models/response/event.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\nimport { AppIdService } from \"../platform/abstractions/app-id.service\";\nimport { EnvironmentService } from \"../platform/abstractions/environment.service\";\nimport { PlatformUtilsService } from \"../platform/abstractions/platform-utils.service\";\nimport { Utils } from \"../platform/misc/utils\";\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 { CollectionRequest } from \"../vault/models/request/collection.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 {\n CollectionAccessDetailsResponse,\n CollectionResponse,\n} from \"../vault/models/response/collection.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 // TODO: PM-3519: Create and move to AuthRequest Api service\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 async postAdminAuthRequest(request: PasswordlessCreateAuthRequest): Promise {\n const r = await this.send(\"POST\", \"/auth-requests/admin-request\", request, true, 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(\n request: SecretVerificationRequest\n ): Promise {\n return this.send(\"POST\", \"/accounts/verify-password\", request, true, true);\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 // 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: CipherBulkRestoreRequest\n ): Promise> {\n const r = await this.send(\"PUT\", \"/ciphers/restore\", request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n async putRestoreManyCiphersAdmin(\n request: CipherBulkRestoreRequest\n ): Promise> {\n const r = await this.send(\"PUT\", \"/ciphers/restore-admin\", 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 // 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 getMasterKeyFromKeyConnector(\n keyConnectorUrl: string\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: \"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 { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { SEND_KDF_ITERATIONS } from \"../../../enums\";\nimport { CryptoFunctionService } from \"../../../platform/abstractions/crypto-function.service\";\nimport { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../../platform/abstractions/i18n.service\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { EncArrayBuffer } from \"../../../platform/models/domain/enc-array-buffer\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { SendType } from \"../enums/send-type\";\nimport { SendData } from \"../models/data/send.data\";\nimport { Send } from \"../models/domain/send\";\nimport { SendFile } from \"../models/domain/send-file\";\nimport { SendText } from \"../models/domain/send-text\";\nimport { SendView } from \"../models/view/send.view\";\n\nimport { InternalSendService as InternalSendServiceAbstraction } from \"./send.service.abstraction\";\n\nexport class SendService implements InternalSendServiceAbstraction {\n protected _sends: BehaviorSubject = new BehaviorSubject([]);\n protected _sendViews: BehaviorSubject = new BehaviorSubject([]);\n\n sends$ = this._sends.asObservable();\n sendViews$ = this._sendViews.asObservable();\n\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\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._sends.next([]);\n this._sendViews.next([]);\n return;\n }\n\n const data = await this.stateService.getEncryptedSends();\n\n await this.updateObservables(data);\n })\n )\n .subscribe();\n }\n\n async clearCache(): Promise {\n await this._sendViews.next([]);\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.aesGenerateKey(128);\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 get(id: string): Send {\n const sends = this._sends.getValue();\n return sends.find((send) => send.id === id);\n }\n\n async getFromState(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 getAllDecryptedFromState(): 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.hasUserKey();\n if (!hasKey) {\n throw new Error(\"No user key found.\");\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 upsert(send: SendData | SendData[]): Promise {\n let sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n sends = {};\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 clear(userId?: string): Promise {\n if (userId == null || userId == (await this.stateService.getUserId())) {\n this._sends.next([]);\n this._sendViews.next([]);\n }\n await this.stateService.setDecryptedSends(null, { userId: userId });\n await this.stateService.setEncryptedSends(null, { userId: userId });\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 replace(sends: { [id: string]: SendData }): Promise {\n await this.updateObservables(sends);\n await this.stateService.setEncryptedSends(sends);\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(new Uint8Array(data), key);\n return [encFileName, encFileData];\n }\n\n private async updateObservables(sendsMap: { [id: string]: SendData }) {\n const sends = Object.values(sendsMap || {}).map((f) => new Send(f));\n this._sends.next(sends);\n\n if (await this.cryptoService.hasUserKey()) {\n this._sendViews.next(await this.decryptSends(sends));\n }\n }\n\n private async decryptSends(sends: Send[]) {\n const decryptSendPromises = sends.map((s) => s.decrypt());\n const decryptedSends = await Promise.all(decryptSendPromises);\n\n decryptedSends.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n return decryptedSends;\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { ErrorResponse } from \"../../../models/response/error.response\";\nimport { ListResponse } from \"../../../models/response/list.response\";\nimport {\n FileUploadApiMethods,\n FileUploadService,\n} from \"../../../platform/abstractions/file-upload/file-upload.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { EncArrayBuffer } from \"../../../platform/models/domain/enc-array-buffer\";\nimport { SendType } from \"../enums/send-type\";\nimport { SendData } from \"../models/data/send.data\";\nimport { Send } from \"../models/domain/send\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\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 { SendAccessView } from \"../models/view/send-access.view\";\n\nimport { SendApiService as SendApiServiceAbstraction } from \"./send-api.service.abstraction\";\nimport { InternalSendService } from \"./send.service.abstraction\";\n\nexport class SendApiService implements SendApiServiceAbstraction {\n constructor(\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private sendService: InternalSendService\n ) {}\n\n async getSend(id: string): Promise {\n const r = await this.apiService.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.apiService.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.apiService.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.apiService.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.apiService.send(\"POST\", \"/sends\", request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.apiService.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.apiService.send(\n \"GET\",\n \"/sends/\" + sendId + \"/file/\" + fileId,\n null,\n true,\n true\n );\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.apiService.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.apiService.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.apiService.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.apiService.send(\n \"PUT\",\n \"/sends/\" + id + \"/remove-password\",\n null,\n true,\n true\n );\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.apiService.send(\"DELETE\", \"/sends/\" + id, null, true, false);\n }\n\n async save(sendData: [Send, EncArrayBuffer]): Promise {\n const response = await this.upload(sendData);\n\n const data = new SendData(response);\n await this.sendService.upsert(data);\n }\n\n async delete(id: string): Promise {\n await this.deleteSend(id);\n await this.sendService.delete(id);\n }\n\n async removePassword(id: string): Promise {\n const response = await this.putSendRemovePassword(id);\n const data = new SendData(response);\n await this.sendService.upsert(data);\n }\n\n // Send File Upload methods\n\n private async upload(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.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n await this.fileUploadService.upload(\n uploadDataResponse,\n sendData[0].file.fileName,\n sendData[1],\n this.generateMethods(uploadDataResponse, response)\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.putSend(sendData[0].id, request);\n }\n return response;\n }\n\n private generateMethods(\n uploadData: SendFileUploadDataResponse,\n response: SendResponse\n ): FileUploadApiMethods {\n return {\n postDirect: this.generatePostDirectCallback(response),\n renewFileUploadUrl: this.generateRenewFileUploadUrlCallback(response.id, response.file.id),\n rollback: this.generateRollbackCallback(response.id),\n };\n }\n\n private generatePostDirectCallback(sendResponse: SendResponse) {\n return (data: FormData) => {\n return this.postSendFile(sendResponse.id, sendResponse.file.id, data);\n };\n }\n\n private generateRenewFileUploadUrlCallback(sendId: string, fileId: string) {\n return async () => {\n const renewResponse = await this.renewSendFileUploadUrl(sendId, fileId);\n return renewResponse?.url;\n };\n }\n\n private generateRollbackCallback(sendId: string) {\n return () => {\n return this.deleteSend(sendId);\n };\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.postSendFileLegacy(fd);\n }\n}\n","import { BehaviorSubject, concatMap } from \"rxjs\";\n\nimport { SettingsService as SettingsServiceAbstraction } from \"../abstractions/settings.service\";\nimport { StateService } from \"../platform/abstractions/state.service\";\nimport { Utils } from \"../platform/misc/utils\";\nimport { AccountSettingsSettings } from \"../platform/models/domain/account\";\n\nexport class SettingsService implements SettingsServiceAbstraction {\n protected _settings: BehaviorSubject = new BehaviorSubject({});\n protected _disableFavicon = new BehaviorSubject(null);\n\n settings$ = this._settings.asObservable();\n disableFavicon$ = this._disableFavicon.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 const disableFavicon = await this.stateService.getDisableFavicon();\n\n this._settings.next(data);\n this._disableFavicon.next(disableFavicon);\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 getEquivalentDomains(url: string): Set {\n const domain = Utils.getDomain(url);\n if (domain == null) {\n return new Set();\n }\n\n const settings = this._settings.getValue();\n\n let result: string[] = [];\n\n if (settings?.equivalentDomains != null) {\n settings.equivalentDomains\n .filter((ed) => ed.length > 0 && ed.includes(domain))\n .forEach((ed) => {\n result = result.concat(ed);\n });\n }\n\n return new Set(result);\n }\n\n async setDisableFavicon(value: boolean) {\n this._disableFavicon.next(value);\n await this.stateService.setDisableFavicon(value);\n }\n\n getDisableFavicon(): boolean {\n return this._disableFavicon.getValue();\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 { defer } from \"rxjs\";\n\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"../../abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { PolicyService } from \"../../admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"../../admin-console/enums\";\nimport { TokenService } from \"../../auth/abstractions/token.service\";\nimport { UserVerificationService } from \"../../auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { VaultTimeoutAction } from \"../../enums/vault-timeout-action.enum\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\n\n/**\n * - DISABLED: No Pin set\n * - PERSISTENT: Pin is set and survives client reset\n * - TRANSIENT: Pin is set and requires password unlock after client reset\n */\nexport type PinLockType = \"DISABLED\" | \"PERSISTANT\" | \"TRANSIENT\";\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 private userVerificationService: UserVerificationService\n ) {}\n\n async setVaultTimeoutOptions(timeout: number, action: VaultTimeoutAction): 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 (\n (timeout != null || timeout === 0) &&\n action === VaultTimeoutAction.LogOut &&\n action !== currentAction\n ) {\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.refreshAdditionalKeys();\n }\n\n availableVaultTimeoutActions$(userId?: string) {\n return defer(() => this.getAvailableVaultTimeoutActions(userId));\n }\n\n async isPinLockSet(userId?: string): Promise {\n // we can't check the protected pin for both because old accounts only\n // used it for MP on Restart\n const pinIsEnabled = !!(await this.stateService.getProtectedPin({ userId }));\n const aUserKeyPinIsSet = !!(await this.stateService.getPinKeyEncryptedUserKey({ userId }));\n const anOldUserKeyPinIsSet = !!(await this.stateService.getEncryptedPinProtected({ userId }));\n\n if (aUserKeyPinIsSet || anOldUserKeyPinIsSet) {\n return \"PERSISTANT\";\n } else if (pinIsEnabled && !aUserKeyPinIsSet && !anOldUserKeyPinIsSet) {\n return \"TRANSIENT\";\n } else {\n return \"DISABLED\";\n }\n }\n\n async isBiometricLockSet(userId?: string): Promise {\n return await this.stateService.getBiometricUnlock({ userId });\n }\n\n async getVaultTimeout(userId?: string): Promise {\n const vaultTimeout = await this.stateService.getVaultTimeout({ 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 // TODO @jlf0dev: Can we move this somwhere else? Maybe add it to the initialization process?\n // ( Apparently I'm the one that reviewed the original PR that added this :) )\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 });\n }\n\n return timeout;\n }\n\n return vaultTimeout;\n }\n\n vaultTimeoutAction$(userId?: string) {\n return defer(() => this.getVaultTimeoutAction(userId));\n }\n\n async getVaultTimeoutAction(userId?: string): Promise {\n const availableActions = await this.getAvailableVaultTimeoutActions();\n if (availableActions.length === 1) {\n return availableActions[0];\n }\n\n const vaultTimeoutAction = await this.stateService.getVaultTimeoutAction({ 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 const action = policy[0].data.action;\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n if (action && vaultTimeoutAction !== action) {\n await this.stateService.setVaultTimeoutAction(action, { userId: userId });\n }\n if (action && availableActions.includes(action)) {\n return action;\n }\n }\n\n if (vaultTimeoutAction == null) {\n // Depends on whether or not the user has a master password\n const defaultValue = (await this.userVerificationService.hasMasterPassword())\n ? VaultTimeoutAction.Lock\n : VaultTimeoutAction.LogOut;\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n await this.stateService.setVaultTimeoutAction(defaultValue, { userId: userId });\n return defaultValue;\n }\n\n return vaultTimeoutAction === VaultTimeoutAction.LogOut\n ? VaultTimeoutAction.LogOut\n : VaultTimeoutAction.Lock;\n }\n\n private async getAvailableVaultTimeoutActions(userId?: string): Promise {\n const availableActions = [VaultTimeoutAction.LogOut];\n\n const canLock =\n (await this.userVerificationService.hasMasterPassword(userId)) ||\n (await this.isPinLockSet(userId)) !== \"DISABLED\" ||\n (await this.isBiometricLockSet(userId));\n\n if (canLock) {\n availableActions.push(VaultTimeoutAction.Lock);\n }\n\n return availableActions;\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEverBeenUnlocked(false, { userId: userId });\n await this.cryptoService.clearPinKeys(userId);\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 { NotificationsService as NotificationsServiceAbstraction } from \"../abstractions/notifications.service\";\nimport { AuthService } from \"../auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"../auth/enums/authentication-status\";\nimport { NotificationType } from \"../enums\";\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notification.response\";\nimport { AppIdService } from \"../platform/abstractions/app-id.service\";\nimport { EnvironmentService } from \"../platform/abstractions/environment.service\";\nimport { LogService } from \"../platform/abstractions/log.service\";\nimport { MessagingService } from \"../platform/abstractions/messaging.service\";\nimport { StateService } from \"../platform/abstractions/state.service\";\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 { Utils } from \"../../platform/misc/utils\";\nimport { CsprngArray } from \"../../types/csprng\";\nimport { CryptoFunctionService } from \"../abstractions/crypto-function.service\";\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 | Uint8Array,\n salt: string | Uint8Array,\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 const buffer = await this.subtle.deriveBits(pbkdf2Params as any, impKey, wcLen);\n return new Uint8Array(buffer);\n }\n\n async argon2(\n password: string | Uint8Array,\n salt: string | Uint8Array,\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 argon2.unloadRuntime();\n return result.hash;\n }\n\n async hkdf(\n ikm: Uint8Array,\n salt: string | Uint8Array,\n info: string | Uint8Array,\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 const buffer = await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n return new Uint8Array(buffer);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(\n prk: Uint8Array,\n info: string | Uint8Array,\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, 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);\n }\n\n async hash(\n value: string | Uint8Array,\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);\n }\n\n const valueBuf = this.toBuf(value);\n const buffer = await this.subtle.digest(\n { name: this.toWebCryptoAlgorithm(algorithm) },\n valueBuf\n );\n return new Uint8Array(buffer);\n }\n\n async hmac(\n value: Uint8Array,\n key: Uint8Array,\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 const buffer = await this.subtle.sign(signingAlgorithm, impKey, value);\n return new Uint8Array(buffer);\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: Uint8Array, b: Uint8Array): 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: Uint8Array, iv: Uint8Array, key: Uint8Array): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"encrypt\",\n ]);\n const buffer = await this.subtle.encrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n return new Uint8Array(buffer);\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, mode: \"cbc\" | \"ecb\"): Promise {\n const decipher = (forge as any).cipher.createDecipher(\n this.toWebCryptoAesMode(mode),\n parameters.encKey\n );\n const options = {} as any;\n if (mode === \"cbc\") {\n options.iv = parameters.iv;\n }\n const dataBuffer = (forge as any).util.createBuffer(parameters.data);\n decipher.start(options);\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString();\n return Promise.resolve(val);\n }\n\n async aesDecrypt(\n data: Uint8Array,\n iv: Uint8Array,\n key: Uint8Array,\n mode: \"cbc\" | \"ecb\"\n ): Promise {\n if (mode === \"ecb\") {\n // Web crypto does not support AES-ECB mode, so we need to do this in forge.\n const params = new DecryptParameters();\n params.data = this.toByteString(data);\n params.encKey = this.toByteString(key);\n const result = await this.aesDecryptFast(params, \"ecb\");\n return Utils.fromByteStringToArray(result);\n }\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"decrypt\",\n ]);\n const buffer = await this.subtle.decrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n return new Uint8Array(buffer);\n }\n\n async rsaEncrypt(\n data: Uint8Array,\n publicKey: Uint8Array,\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 const buffer = await this.subtle.encrypt(rsaParams, impKey, data);\n return new Uint8Array(buffer);\n }\n\n async rsaDecrypt(\n data: Uint8Array,\n privateKey: Uint8Array,\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 const buffer = await this.subtle.decrypt(rsaParams, impKey, data);\n return new Uint8Array(buffer);\n }\n\n async rsaExtractPublicKey(privateKey: Uint8Array): 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 const buffer = await this.subtle.exportKey(\"spki\", impPublicKey);\n return new Uint8Array(buffer);\n }\n\n async aesGenerateKey(bitLength = 128 | 192 | 256 | 512): Promise {\n if (bitLength === 512) {\n // 512 bit keys are not supported in WebCrypto, so we concat two 256 bit keys\n const key1 = await this.aesGenerateKey(256);\n const key2 = await this.aesGenerateKey(256);\n return new Uint8Array([...key1, ...key2]) as CsprngArray;\n }\n const aesParams = {\n name: \"AES-CBC\",\n length: bitLength,\n };\n\n const key = await this.subtle.generateKey(aesParams, true, [\"encrypt\", \"decrypt\"]);\n const rawKey = await this.subtle.exportKey(\"raw\", key);\n return new Uint8Array(rawKey) as CsprngArray;\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[Uint8Array, Uint8Array]> {\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, [\"encrypt\", \"decrypt\"]);\n const publicKey = await this.subtle.exportKey(\"spki\", keyPair.publicKey);\n const privateKey = await this.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return [new Uint8Array(publicKey), new Uint8Array(privateKey)];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr as CsprngArray);\n }\n\n private toBuf(value: string | Uint8Array): Uint8Array {\n let buf: Uint8Array;\n if (typeof value === \"string\") {\n buf = Utils.fromUtf8ToArray(value);\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | Uint8Array): 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 private toWebCryptoAesMode(mode: \"cbc\" | \"ecb\"): string {\n return mode === \"cbc\" ? \"AES-CBC\" : \"AES-ECB\";\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 { EventRequest } from \"../../models/request/event.request\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\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 \"../../admin-console/abstractions/organization/organization.service.abstraction\";\nimport { EventType } from \"../../enums\";\nimport { EventData } from \"../../models/data/event.data\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\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 { BehaviorSubject, concatMap, map, Observable, of } from \"rxjs\";\n\nimport { ListResponse } from \"../../../models/response/list.response\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { OrganizationService } from \"../../abstractions/organization/organization.service.abstraction\";\nimport { InternalPolicyService as InternalPolicyServiceAbstraction } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { OrganizationUserStatusType, OrganizationUserType, PolicyType } from \"../../enums\";\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 { 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 protected 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 * Returns the first policy found that applies to the active user\n * @param policyType Policy type to search for\n * @param policyFilter Additional filter to apply to the policy\n */\n get$(policyType: PolicyType, policyFilter?: (policy: Policy) => boolean): Observable {\n return this.policies$.pipe(\n concatMap(async (policies) => {\n const userId = await this.stateService.getUserId();\n const appliesToCurrentUser = await this.checkPoliciesThatApplyToUser(\n policies,\n policyType,\n policyFilter,\n userId\n );\n if (appliesToCurrentUser) {\n return policies.find((policy) => policy.type === policyType && policy.enabled);\n }\n })\n );\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 if (currentPolicy.data.enforceOnLogin) {\n enforcedOptions.enforceOnLogin = 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 isExemptFromPolicies(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.isExemptFromPolicies(o, policyType)\n );\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"../../../abstractions/api.service\";\nimport { ListResponse } from \"../../../models/response/list.response\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { PolicyApiServiceAbstraction } from \"../../abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"../../abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"../../enums\";\nimport { PolicyData } from \"../../models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\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 { OrganizationService } from \"../../admin-console/abstractions/organization/organization.service.abstraction\";\nimport { OrganizationUserType } from \"../../admin-console/enums\";\nimport { KeysRequest } from \"../../models/request/keys.request\";\nimport { CryptoFunctionService } from \"../../platform/abstractions/crypto-function.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { MasterKey, SymmetricCryptoKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"../abstractions/key-connector.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { KdfConfig } from \"../models/domain/kdf-config\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/key-connector-user-key.request\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/set-key-connector-key.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) => Promise\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 masterKey = await this.cryptoService.getMasterKey();\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(masterKey.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 // TODO: UserKey should be renamed to MasterKey and typed accordingly\n async setMasterKeyFromUrl(url: string) {\n try {\n const masterKeyResponse = await this.apiService.getMasterKeyFromKeyConnector(url);\n const keyArr = Utils.fromB64ToArray(masterKeyResponse.key);\n const masterKey = new SymmetricCryptoKey(keyArr) as MasterKey;\n await this.cryptoService.setMasterKey(masterKey);\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 // TODO: Remove after tokenResponse.keyConnectorUrl is deprecated in 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3537)\n const {\n kdf,\n kdfIterations,\n kdfMemory,\n kdfParallelism,\n keyConnectorUrl: legacyKeyConnectorUrl,\n userDecryptionOptions,\n } = tokenResponse;\n const password = await this.cryptoFunctionService.aesGenerateKey(512);\n const kdfConfig = new KdfConfig(kdfIterations, kdfMemory, kdfParallelism);\n\n const masterKey = await this.cryptoService.makeMasterKey(\n Utils.fromBufferToB64(password),\n await this.tokenService.getEmail(),\n kdf,\n kdfConfig\n );\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(masterKey.encKeyB64);\n await this.cryptoService.setMasterKey(masterKey);\n\n const userKey = await this.cryptoService.makeUserKey(masterKey);\n await this.cryptoService.setUserKey(userKey[0]);\n await this.cryptoService.setMasterKeyEncryptedUserKey(userKey[1].encryptedString);\n\n const [pubKey, privKey] = await this.cryptoService.makeKeyPair();\n\n try {\n const keyConnectorUrl =\n legacyKeyConnectorUrl ?? userDecryptionOptions?.keyConnectorOption?.keyConnectorUrl;\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 userKey[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 \"../../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../../platform/abstractions/i18n.service\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { Verification } from \"../../../types/verification\";\nimport { UserVerificationApiServiceAbstraction } from \"../../abstractions/user-verification/user-verification-api.service.abstraction\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"../../abstractions/user-verification/user-verification.service.abstraction\";\nimport { VerificationType } from \"../../enums/verification-type\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\nimport { VerifyOTPRequest } from \"../../models/request/verify-otp.request\";\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 stateService: StateService,\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 let masterKey = await this.cryptoService.getMasterKey();\n if (!masterKey && !alreadyHashed) {\n masterKey = await this.cryptoService.makeMasterKey(\n verification.secret,\n await this.stateService.getEmail(),\n await this.stateService.getKdfType(),\n await this.stateService.getKdfConfig()\n );\n }\n request.masterPasswordHash = alreadyHashed\n ? verification.secret\n : await this.cryptoService.hashMasterKey(verification.secret, masterKey);\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 let masterKey = await this.cryptoService.getMasterKey();\n if (!masterKey) {\n masterKey = await this.cryptoService.makeMasterKey(\n verification.secret,\n await this.stateService.getEmail(),\n await this.stateService.getKdfType(),\n await this.stateService.getKdfConfig()\n );\n }\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n verification.secret,\n masterKey\n );\n if (!passwordValid) {\n throw new Error(this.i18nService.t(\"invalidMasterPassword\"));\n }\n this.cryptoService.setMasterKey(masterKey);\n }\n return true;\n }\n\n async requestOTP() {\n await this.userVerificationApiService.postAccountRequestOTP();\n }\n\n /**\n * Check if user has master password or can only use passwordless technologies to log in\n * Note: This only checks the server, not the local state\n * @param userId The user id to check. If not provided, the current user is used\n * @returns True if the user has a master password\n */\n async hasMasterPassword(userId?: string): Promise {\n const decryptionOptions = await this.stateService.getAccountDecryptionOptions({ userId });\n\n if (decryptionOptions?.hasMasterPassword != undefined) {\n return decryptionOptions.hasMasterPassword;\n }\n\n // TODO: PM-3518 - Left for backwards compatibility, remove after 2023.12.0\n return !(await this.stateService.getUsesKeyConnector({ userId }));\n }\n\n async hasMasterPasswordAndMasterKeyHash(userId?: string): Promise {\n return (\n (await this.hasMasterPassword(userId)) &&\n (await this.cryptoService.getMasterKeyHash()) != null\n );\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, map, Observable } from \"rxjs\";\n\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport {\n InternalOrganizationServiceAbstraction,\n isMember,\n} from \"../../abstractions/organization/organization.service.abstraction\";\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 memberOrganizations$ = this.organizations$.pipe(map((orgs) => orgs.filter(isMember)));\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 get$(id: string): Observable {\n return this.organizations$.pipe(map((orgs) => orgs.find((o) => o.id === id)));\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 OrganizationUserAcceptInitRequest,\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 OrganizationUserResetPasswordDetailsResponse,\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 OrganizationUserResetPasswordDetailsResponse(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 postOrganizationUserAcceptInit(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptInitRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/accept-init\",\n request,\n true,\n false\n );\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 async putOrganizationUserBulkEnableSecretsManager(\n organizationId: string,\n ids: string[]\n ): Promise {\n await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/enable-secrets-manager\",\n new OrganizationUserBulkRequest(ids),\n true,\n false\n );\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 { OrganizationUserService } from \"../../abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../../abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"../../admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { UserKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { PasswordResetEnrollmentServiceAbstraction } from \"../abstractions/password-reset-enrollment.service.abstraction\";\n\nexport class PasswordResetEnrollmentServiceImplementation\n implements PasswordResetEnrollmentServiceAbstraction\n{\n constructor(\n protected organizationApiService: OrganizationApiServiceAbstraction,\n protected stateService: StateService,\n protected cryptoService: CryptoService,\n protected organizationUserService: OrganizationUserService,\n protected i18nService: I18nService\n ) {}\n\n async enrollIfRequired(organizationSsoIdentifier: string): Promise {\n const orgAutoEnrollStatusResponse = await this.organizationApiService.getAutoEnrollStatus(\n organizationSsoIdentifier\n );\n\n if (!orgAutoEnrollStatusResponse.resetPasswordEnabled) {\n await this.enroll(orgAutoEnrollStatusResponse.id, null, null);\n }\n }\n\n async enroll(organizationId: string): Promise;\n async enroll(organizationId: string, userId: string, userKey: UserKey): Promise;\n async enroll(organizationId: string, userId?: string, userKey?: UserKey): Promise {\n const orgKeyResponse = await this.organizationApiService.getKeys(organizationId);\n if (orgKeyResponse == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const orgPublicKey = Utils.fromB64ToArray(orgKeyResponse.publicKey);\n\n userId = userId ?? (await this.stateService.getUserId());\n userKey = userKey ?? (await this.cryptoService.getUserKey(userId));\n // RSA Encrypt user's userKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, orgPublicKey);\n\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n organizationId,\n userId,\n resetRequest\n );\n }\n}\n","import { Provider } from \"../../models/domain/provider\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { ProviderData } from \"../models/data/provider.data\";\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/form-validation-errors.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/user-verification/user-verification-api.service.abstraction\";\nimport { VerifyOTPRequest } from \"../../models/request/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 { OrganizationApiKeyRequest } from \"../../../admin-console/models/request/organization-api-key.request\";\nimport { OrganizationSsoRequest } from \"../../../auth/models/request/organization-sso.request\";\nimport { SecretVerificationRequest } from \"../../../auth/models/request/secret-verification.request\";\nimport { ApiKeyResponse } from \"../../../auth/models/response/api-key.response\";\nimport { OrganizationSsoResponse } from \"../../../auth/models/response/organization-sso.response\";\nimport { OrganizationSmSubscriptionUpdateRequest } from \"../../../billing/models/request/organization-sm-subscription-update.request\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../../billing/models/request/organization-subscription-update.request\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../../billing/models/request/organization-tax-info-update.request\";\nimport { PaymentRequest } from \"../../../billing/models/request/payment.request\";\nimport { SecretsManagerSubscribeRequest } from \"../../../billing/models/request/sm-subscribe.request\";\nimport { BillingResponse } from \"../../../billing/models/response/billing.response\";\nimport { OrganizationSubscriptionResponse } from \"../../../billing/models/response/organization-subscription.response\";\nimport { PaymentResponse } from \"../../../billing/models/response/payment.response\";\nimport { TaxInfoResponse } from \"../../../billing/models/response/tax-info.response\";\nimport { ImportDirectoryRequest } from \"../../../models/request/import-directory.request\";\nimport { SeatRequest } from \"../../../models/request/seat.request\";\nimport { StorageRequest } from \"../../../models/request/storage.request\";\nimport { VerifyBankRequest } from \"../../../models/request/verify-bank.request\";\nimport { ListResponse } from \"../../../models/response/list.response\";\nimport { SyncService } from \"../../../vault/abstractions/sync/sync.service.abstraction\";\nimport { OrganizationApiServiceAbstraction } from \"../../abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationApiKeyType } from \"../../enums\";\nimport { OrganizationCreateRequest } from \"../../models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"../../models/request/organization-keys.request\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organization-update.request\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organization-upgrade.request\";\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 { OrganizationResponse } from \"../../models/response/organization.response\";\nimport { ProfileOrganizationResponse } from \"../../models/response/profile-organization.response\";\n\nexport class OrganizationApiService implements OrganizationApiServiceAbstraction {\n constructor(private apiService: ApiService, private syncService: SyncService) {}\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getBilling(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/billing\",\n null,\n true,\n true\n );\n return new BillingResponse(r);\n }\n\n async getSubscription(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/subscription\",\n null,\n true,\n true\n );\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getLicense(id: string, installationId: string): Promise {\n return this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/license?installationId=\" + installationId,\n null,\n true,\n true\n );\n }\n\n async getAutoEnrollStatus(identifier: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + identifier + \"/auto-enroll-status\",\n null,\n true,\n true\n );\n return new OrganizationAutoEnrollStatusResponse(r);\n }\n\n async create(request: OrganizationCreateRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/organizations\", request, true, true);\n // Forcing a sync will notify organization service that they need to repull\n await this.syncService.fullSync(true);\n return new OrganizationResponse(r);\n }\n\n async createLicense(data: FormData): Promise {\n const r = await this.apiService.send(\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 updatePasswordManagerSeats(\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 updateSecretsManagerSubscription(\n id: string,\n request: OrganizationSmSubscriptionUpdateRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/sm-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 async subscribeToSecretsManager(\n id: string,\n request: SecretsManagerSubscribeRequest\n ): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/subscribe-secrets-manager\",\n request,\n true,\n true\n );\n return new ProfileOrganizationResponse(r);\n }\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 { 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 { ApiService } from \"../../../abstractions/api.service\";\nimport { AuthService } from \"../../../auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"../../../auth/enums/authentication-status\";\nimport { 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, private authService: AuthService) {}\n\n async get(): Promise {\n const authed: boolean =\n (await this.authService.getAuthStatus()) !== AuthenticationStatus.LoggedOut;\n\n const r = await this.apiService.send(\"GET\", \"/config\", null, authed, true);\n return new ServerConfigResponse(r);\n }\n}\n","import {\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 \"../auth/abstractions/auth.service\";\nimport { EnvironmentService } from \"../platform/abstractions/environment.service\";\nimport { LogService } from \"../platform/abstractions/log.service\";\n\nimport {\n AuthRequestPushNotification,\n NotificationResponse,\n} from \"./../models/response/notification.response\";\n\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.authResponsePushNotification(\n notification.payload as AuthRequestPushNotification\n );\n }\n}\n","import { ErrorResponse } from \"../../models/response/error.response\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platform-utils.service\";\nimport { ValidationService as ValidationServiceAbstraction } from \"../abstractions/validation.service\";\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 { BehaviorSubject } from \"rxjs\";\n\nimport { OrgDomainInternalServiceAbstraction } from \"../../abstractions/organization-domain/org-domain.service.abstraction\";\nimport { OrganizationDomainResponse } from \"../../abstractions/organization-domain/responses/organization-domain.response\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\n\nexport class OrgDomainService implements OrgDomainInternalServiceAbstraction {\n protected _orgDomains$: BehaviorSubject = new BehaviorSubject([]);\n\n orgDomains$ = this._orgDomains$.asObservable();\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n get(orgDomainId: string): OrganizationDomainResponse {\n const orgDomains: OrganizationDomainResponse[] = this._orgDomains$.getValue();\n\n return orgDomains.find((orgDomain) => orgDomain.id === orgDomainId);\n }\n\n copyDnsTxt(dnsTxt: string): void {\n this.platformUtilsService.copyToClipboard(dnsTxt);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"dnsTxtRecord\"))\n );\n }\n\n upsert(orgDomains: OrganizationDomainResponse[]): void {\n const existingOrgDomains: OrganizationDomainResponse[] = this._orgDomains$.getValue();\n\n orgDomains.forEach((orgDomain: OrganizationDomainResponse) => {\n // Determine if passed in orgDomain exists in existing array:\n const index = existingOrgDomains.findIndex(\n (existingOrgDomain) => existingOrgDomain.id === orgDomain.id\n );\n if (index !== -1) {\n existingOrgDomains[index] = orgDomain;\n } else {\n existingOrgDomains.push(orgDomain);\n }\n });\n\n this._orgDomains$.next(existingOrgDomains);\n }\n\n replace(orgDomains: OrganizationDomainResponse[]): void {\n this._orgDomains$.next(orgDomains);\n }\n\n clearCache(): void {\n this._orgDomains$.next([]);\n }\n\n delete(orgDomainIds: string[]): void {\n const existingOrgDomains: OrganizationDomainResponse[] = this._orgDomains$.getValue();\n\n orgDomainIds.forEach((orgDomainId: string) => {\n const index = existingOrgDomains.findIndex(\n (existingOrgDomain) => existingOrgDomain.id === orgDomainId\n );\n if (index !== -1) {\n existingOrgDomains.splice(index, 1);\n }\n });\n\n this._orgDomains$.next(existingOrgDomains);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { OrgDomainApiServiceAbstraction } from \"../../abstractions/organization-domain/org-domain-api.service.abstraction\";\nimport { OrgDomainInternalServiceAbstraction } from \"../../abstractions/organization-domain/org-domain.service.abstraction\";\nimport { OrganizationDomainSsoDetailsResponse } from \"../../abstractions/organization-domain/responses/organization-domain-sso-details.response\";\nimport { OrganizationDomainResponse } from \"../../abstractions/organization-domain/responses/organization-domain.response\";\nimport { ListResponse } from \"../../models/response/list.response\";\n\nimport { OrganizationDomainSsoDetailsRequest } from \"./requests/organization-domain-sso-details.request\";\nimport { OrganizationDomainRequest } from \"./requests/organization-domain.request\";\n\nexport class OrgDomainApiService implements OrgDomainApiServiceAbstraction {\n constructor(\n private orgDomainService: OrgDomainInternalServiceAbstraction,\n private apiService: ApiService\n ) {}\n\n async getAllByOrgId(orgId: string): Promise> {\n const listResponse: ListResponse = await this.apiService.send(\n \"GET\",\n `/organizations/${orgId}/domain`,\n null,\n true,\n true\n );\n\n const orgDomains = listResponse.data.map(\n (resultOrgDomain: any) => new OrganizationDomainResponse(resultOrgDomain)\n );\n\n this.orgDomainService.replace(orgDomains);\n\n return orgDomains;\n }\n\n async getByOrgIdAndOrgDomainId(\n orgId: string,\n orgDomainId: string\n ): Promise {\n const result = await this.apiService.send(\n \"GET\",\n `/organizations/${orgId}/domain/${orgDomainId}`,\n null,\n true,\n true\n );\n\n const response = new OrganizationDomainResponse(result);\n\n this.orgDomainService.upsert([response]);\n\n return response;\n }\n\n async post(\n orgId: string,\n orgDomainReq: OrganizationDomainRequest\n ): Promise {\n const result = await this.apiService.send(\n \"POST\",\n `/organizations/${orgId}/domain`,\n orgDomainReq,\n true,\n true\n );\n\n const response = new OrganizationDomainResponse(result);\n\n this.orgDomainService.upsert([response]);\n\n return response;\n }\n\n async verify(orgId: string, orgDomainId: string): Promise {\n const result = await this.apiService.send(\n \"POST\",\n `/organizations/${orgId}/domain/${orgDomainId}/verify`,\n null,\n true,\n true\n );\n\n const response = new OrganizationDomainResponse(result);\n\n this.orgDomainService.upsert([response]);\n\n return response;\n }\n\n async delete(orgId: string, orgDomainId: string): Promise {\n await this.apiService.send(\n \"DELETE\",\n `/organizations/${orgId}/domain/${orgDomainId}`,\n null,\n true,\n false\n );\n this.orgDomainService.delete([orgDomainId]);\n }\n\n async getClaimedOrgDomainByEmail(email: string): Promise {\n const result = await this.apiService.send(\n \"POST\",\n `/organizations/domain/sso/details`,\n new OrganizationDomainSsoDetailsRequest(email),\n false, // anonymous\n true\n );\n const response = new OrganizationDomainSsoDetailsResponse(result);\n\n return response;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { ListResponse } from \"../../models/response/list.response\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { DeviceResponse } from \"../abstractions/devices/responses/device.response\";\nimport { DevicesApiServiceAbstraction } from \"../abstractions/devices-api.service.abstraction\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { UpdateDevicesTrustRequest } from \"../models/request/update-devices-trust.request\";\nimport { ProtectedDeviceResponse } from \"../models/response/protected-device.response\";\n\nimport { TrustedDeviceKeysRequest } from \"./devices/requests/trusted-device-keys.request\";\n\nexport class DevicesApiServiceImplementation implements DevicesApiServiceAbstraction {\n constructor(private apiService: ApiService) {}\n\n async getKnownDevice(email: string, deviceIdentifier: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/devices/knowndevice\",\n null,\n false,\n true,\n null,\n (headers) => {\n headers.set(\"X-Device-Identifier\", deviceIdentifier);\n headers.set(\"X-Request-Email\", Utils.fromUtf8ToUrlB64(email));\n }\n );\n return r as boolean;\n }\n\n /**\n * Get device by identifier\n * @param deviceIdentifier - client generated id (not device id in DB)\n */\n async getDeviceByIdentifier(deviceIdentifier: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n `/devices/identifier/${deviceIdentifier}`,\n null,\n true,\n true\n );\n return new DeviceResponse(r);\n }\n\n async getDevices(): Promise> {\n const r = await this.apiService.send(\"GET\", \"/devices\", null, true, true, null);\n return new ListResponse(r, DeviceResponse);\n }\n\n async updateTrustedDeviceKeys(\n deviceIdentifier: string,\n devicePublicKeyEncryptedUserKey: string,\n userKeyEncryptedDevicePublicKey: string,\n deviceKeyEncryptedDevicePrivateKey: string\n ): Promise {\n const request = new TrustedDeviceKeysRequest(\n devicePublicKeyEncryptedUserKey,\n userKeyEncryptedDevicePublicKey,\n deviceKeyEncryptedDevicePrivateKey\n );\n\n const result = await this.apiService.send(\n \"PUT\",\n `/devices/${deviceIdentifier}/keys`,\n request,\n true,\n true\n );\n\n return new DeviceResponse(result);\n }\n\n async updateTrust(updateDevicesTrustRequestModel: UpdateDevicesTrustRequest): Promise {\n await this.apiService.send(\n \"POST\",\n \"/devices/update-trust\",\n updateDevicesTrustRequestModel,\n true,\n false\n );\n }\n\n async getDeviceKeys(\n deviceIdentifier: string,\n secretVerificationRequest: SecretVerificationRequest\n ): Promise {\n const result = await this.apiService.send(\n \"POST\",\n `/devices/${deviceIdentifier}/retrieve-keys`,\n secretVerificationRequest,\n true,\n true\n );\n return new ProtectedDeviceResponse(result);\n }\n}\n","import { Observable, defer, map } from \"rxjs\";\n\nimport { ListResponse } from \"../../../models/response/list.response\";\nimport { DevicesServiceAbstraction } from \"../../abstractions/devices/devices.service.abstraction\";\nimport { DeviceResponse } from \"../../abstractions/devices/responses/device.response\";\nimport { DeviceView } from \"../../abstractions/devices/views/device.view\";\nimport { DevicesApiServiceAbstraction } from \"../../abstractions/devices-api.service.abstraction\";\n\n/**\n * @class DevicesServiceImplementation\n * @implements {DevicesServiceAbstraction}\n * @description Observable based data store service for Devices.\n * note: defer is used to convert the promises to observables and to ensure\n * that observables are created for each subscription\n * (i.e., promsise --> observables are cold until subscribed to)\n */\nexport class DevicesServiceImplementation implements DevicesServiceAbstraction {\n constructor(private devicesApiService: DevicesApiServiceAbstraction) {}\n\n /**\n * @description Gets the list of all devices.\n */\n getDevices$(): Observable> {\n return defer(() => this.devicesApiService.getDevices()).pipe(\n map((deviceResponses: ListResponse) => {\n return deviceResponses.data.map((deviceResponse: DeviceResponse) => {\n return new DeviceView(deviceResponse);\n });\n })\n );\n }\n\n /**\n * @description Gets the device with the specified identifier.\n */\n getDeviceByIdentifier$(deviceIdentifier: string): Observable {\n return defer(() => this.devicesApiService.getDeviceByIdentifier(deviceIdentifier)).pipe(\n map((deviceResponse: DeviceResponse) => new DeviceView(deviceResponse))\n );\n }\n\n /**\n * @description Checks if a device is known for a user by user's email and device's identifier.\n */\n isDeviceKnownForUser$(email: string, deviceIdentifier: string): Observable {\n return defer(() => this.devicesApiService.getKnownDevice(email, deviceIdentifier));\n }\n\n /**\n * @description Updates the keys for the specified device.\n */\n\n updateTrustedDeviceKeys$(\n deviceIdentifier: string,\n devicePublicKeyEncryptedUserKey: string,\n userKeyEncryptedDevicePublicKey: string,\n deviceKeyEncryptedDevicePrivateKey: string\n ): Observable {\n return defer(() =>\n this.devicesApiService.updateTrustedDeviceKeys(\n deviceIdentifier,\n devicePublicKeyEncryptedUserKey,\n userKeyEncryptedDevicePublicKey,\n deviceKeyEncryptedDevicePrivateKey\n )\n ).pipe(map((deviceResponse: DeviceResponse) => new DeviceView(deviceResponse)));\n }\n}\n","import { AppIdService } from \"../../platform/abstractions/app-id.service\";\nimport { CryptoFunctionService } from \"../../platform/abstractions/crypto-function.service\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { EncryptService } from \"../../platform/abstractions/encrypt.service\";\nimport { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\nimport { EncString } from \"../../platform/models/domain/enc-string\";\nimport {\n SymmetricCryptoKey,\n DeviceKey,\n UserKey,\n} from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { CsprngArray } from \"../../types/csprng\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"../abstractions/device-trust-crypto.service.abstraction\";\nimport { DeviceResponse } from \"../abstractions/devices/responses/device.response\";\nimport { DevicesApiServiceAbstraction } from \"../abstractions/devices-api.service.abstraction\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport {\n DeviceKeysUpdateRequest,\n UpdateDevicesTrustRequest,\n} from \"../models/request/update-devices-trust.request\";\n\nexport class DeviceTrustCryptoService implements DeviceTrustCryptoServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private cryptoService: CryptoService,\n private encryptService: EncryptService,\n private stateService: StateService,\n private appIdService: AppIdService,\n private devicesApiService: DevicesApiServiceAbstraction,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n /**\n * @description Retrieves the users choice to trust the device which can only happen after decryption\n * Note: this value should only be used once and then reset\n */\n async getShouldTrustDevice(): Promise {\n return await this.stateService.getShouldTrustDevice();\n }\n\n async setShouldTrustDevice(value: boolean): Promise {\n await this.stateService.setShouldTrustDevice(value);\n }\n\n async trustDeviceIfRequired(): Promise {\n const shouldTrustDevice = await this.getShouldTrustDevice();\n if (shouldTrustDevice) {\n await this.trustDevice();\n // reset the trust choice\n await this.setShouldTrustDevice(false);\n }\n }\n\n async trustDevice(): Promise {\n // Attempt to get user key\n const userKey: UserKey = await this.cryptoService.getUserKey();\n\n // If user key is not found, throw error\n if (!userKey) {\n throw new Error(\"User symmetric key not found\");\n }\n\n // Generate deviceKey\n const deviceKey = await this.makeDeviceKey();\n\n // Generate asymmetric RSA key pair: devicePrivateKey, devicePublicKey\n const [devicePublicKey, devicePrivateKey] = await this.cryptoFunctionService.rsaGenerateKeyPair(\n 2048\n );\n\n const [\n devicePublicKeyEncryptedUserKey,\n userKeyEncryptedDevicePublicKey,\n deviceKeyEncryptedDevicePrivateKey,\n ] = await Promise.all([\n // Encrypt user key with the DevicePublicKey\n this.cryptoService.rsaEncrypt(userKey.key, devicePublicKey),\n\n // Encrypt devicePublicKey with user key\n this.encryptService.encrypt(devicePublicKey, userKey),\n\n // Encrypt devicePrivateKey with deviceKey\n this.encryptService.encrypt(devicePrivateKey, deviceKey),\n ]);\n\n // Send encrypted keys to server\n const deviceIdentifier = await this.appIdService.getAppId();\n const deviceResponse = await this.devicesApiService.updateTrustedDeviceKeys(\n deviceIdentifier,\n devicePublicKeyEncryptedUserKey.encryptedString,\n userKeyEncryptedDevicePublicKey.encryptedString,\n deviceKeyEncryptedDevicePrivateKey.encryptedString\n );\n\n // store device key in local/secure storage if enc keys posted to server successfully\n await this.setDeviceKey(deviceKey);\n\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deviceTrusted\"));\n\n return deviceResponse;\n }\n\n async rotateDevicesTrust(newUserKey: UserKey, masterPasswordHash: string): Promise {\n const currentDeviceKey = await this.getDeviceKey();\n if (currentDeviceKey == null) {\n // If the current device doesn't have a device key available to it, then we can't\n // rotate any trust at all, so early return.\n return;\n }\n\n // At this point of rotating their keys, they should still have their old user key in state\n const oldUserKey = await this.stateService.getUserKey();\n\n const deviceIdentifier = await this.appIdService.getAppId();\n const secretVerificationRequest = new SecretVerificationRequest();\n secretVerificationRequest.masterPasswordHash = masterPasswordHash;\n\n // Get the keys that are used in rotating a devices keys from the server\n const currentDeviceKeys = await this.devicesApiService.getDeviceKeys(\n deviceIdentifier,\n secretVerificationRequest\n );\n\n // Decrypt the existing device public key with the old user key\n const decryptedDevicePublicKey = await this.encryptService.decryptToBytes(\n currentDeviceKeys.encryptedPublicKey,\n oldUserKey\n );\n\n // Encrypt the brand new user key with the now-decrypted public key for the device\n const encryptedNewUserKey = await this.cryptoService.rsaEncrypt(\n newUserKey.key,\n decryptedDevicePublicKey\n );\n\n // Re-encrypt the device public key with the new user key\n const encryptedDevicePublicKey = await this.encryptService.encrypt(\n decryptedDevicePublicKey,\n newUserKey\n );\n\n const currentDeviceUpdateRequest = new DeviceKeysUpdateRequest();\n currentDeviceUpdateRequest.encryptedUserKey = encryptedNewUserKey.encryptedString;\n currentDeviceUpdateRequest.encryptedPublicKey = encryptedDevicePublicKey.encryptedString;\n\n // TODO: For device management, allow this method to take an array of device ids that can be looped over and individually rotated\n // then it can be added to trustRequest.otherDevices.\n\n const trustRequest = new UpdateDevicesTrustRequest();\n trustRequest.masterPasswordHash = masterPasswordHash;\n trustRequest.currentDevice = currentDeviceUpdateRequest;\n trustRequest.otherDevices = [];\n\n await this.devicesApiService.updateTrust(trustRequest);\n }\n\n async getDeviceKey(): Promise {\n return await this.stateService.getDeviceKey();\n }\n\n private async setDeviceKey(deviceKey: DeviceKey | null): Promise {\n await this.stateService.setDeviceKey(deviceKey);\n }\n\n private async makeDeviceKey(): Promise {\n // Create 512-bit device key\n const randomBytes: CsprngArray = await this.cryptoFunctionService.aesGenerateKey(512);\n const deviceKey = new SymmetricCryptoKey(randomBytes) as DeviceKey;\n\n return deviceKey;\n }\n\n async decryptUserKeyWithDeviceKey(\n encryptedDevicePrivateKey: EncString,\n encryptedUserKey: EncString,\n deviceKey?: DeviceKey\n ): Promise {\n // If device key provided use it, otherwise try to retrieve from storage\n deviceKey ||= await this.getDeviceKey();\n\n if (!deviceKey) {\n // User doesn't have a device key anymore so device is untrusted\n return null;\n }\n\n try {\n // attempt to decrypt encryptedDevicePrivateKey with device key\n const devicePrivateKey = await this.encryptService.decryptToBytes(\n encryptedDevicePrivateKey,\n deviceKey\n );\n\n // Attempt to decrypt encryptedUserDataKey with devicePrivateKey\n const userKey = await this.cryptoService.rsaDecrypt(\n encryptedUserKey.encryptedString,\n devicePrivateKey\n );\n\n return new SymmetricCryptoKey(userKey) as UserKey;\n } catch (e) {\n // If either decryption effort fails, we want to remove the device key\n await this.setDeviceKey(null);\n\n return null;\n }\n }\n\n async supportsDeviceTrust(): Promise {\n const decryptionOptions = await this.stateService.getAccountDecryptionOptions();\n return decryptionOptions?.trustedDeviceOption != null;\n }\n}\n","import { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport {\n UserKey,\n SymmetricCryptoKey,\n MasterKey,\n} from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { AuthRequestCryptoServiceAbstraction } from \"../abstractions/auth-request-crypto.service.abstraction\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\n\nexport class AuthRequestCryptoServiceImplementation implements AuthRequestCryptoServiceAbstraction {\n constructor(private cryptoService: CryptoService) {}\n\n async setUserKeyAfterDecryptingSharedUserKey(\n authReqResponse: AuthRequestResponse,\n authReqPrivateKey: Uint8Array\n ) {\n const userKey = await this.decryptPubKeyEncryptedUserKey(\n authReqResponse.key,\n authReqPrivateKey\n );\n await this.cryptoService.setUserKey(userKey);\n }\n\n async setKeysAfterDecryptingSharedMasterKeyAndHash(\n authReqResponse: AuthRequestResponse,\n authReqPrivateKey: Uint8Array\n ) {\n const { masterKey, masterKeyHash } = await this.decryptPubKeyEncryptedMasterKeyAndHash(\n authReqResponse.key,\n authReqResponse.masterPasswordHash,\n authReqPrivateKey\n );\n\n // Decrypt and set user key in state\n const userKey = await this.cryptoService.decryptUserKeyWithMasterKey(masterKey);\n\n // Set masterKey + masterKeyHash in state after decryption (in case decryption fails)\n await this.cryptoService.setMasterKey(masterKey);\n await this.cryptoService.setMasterKeyHash(masterKeyHash);\n\n await this.cryptoService.setUserKey(userKey);\n }\n\n // Decryption helpers\n async decryptPubKeyEncryptedUserKey(\n pubKeyEncryptedUserKey: string,\n privateKey: Uint8Array\n ): Promise {\n const decryptedUserKeyBytes = await this.cryptoService.rsaDecrypt(\n pubKeyEncryptedUserKey,\n privateKey\n );\n\n return new SymmetricCryptoKey(decryptedUserKeyBytes) as UserKey;\n }\n\n async decryptPubKeyEncryptedMasterKeyAndHash(\n pubKeyEncryptedMasterKey: string,\n pubKeyEncryptedMasterKeyHash: string,\n privateKey: Uint8Array\n ): Promise<{ masterKey: MasterKey; masterKeyHash: string }> {\n const decryptedMasterKeyArrayBuffer = await this.cryptoService.rsaDecrypt(\n pubKeyEncryptedMasterKey,\n privateKey\n );\n\n const decryptedMasterKeyHashArrayBuffer = await this.cryptoService.rsaDecrypt(\n pubKeyEncryptedMasterKeyHash,\n privateKey\n );\n\n const masterKey = new SymmetricCryptoKey(decryptedMasterKeyArrayBuffer) as MasterKey;\n const masterKeyHash = Utils.fromBufferToUtf8(decryptedMasterKeyHashArrayBuffer);\n\n return {\n masterKey,\n masterKeyHash,\n };\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 { Injectable } from \"@angular/core\";\n\nimport { HtmlStorageLocation } from \"@bitwarden/common/enums\";\nimport { AbstractStorageService } from \"@bitwarden/common/platform/abstractions/storage.service\";\nimport { StorageOptions } from \"@bitwarden/common/platform/models/domain/storage-options\";\n\n@Injectable()\nexport class HtmlStorageService implements AbstractStorageService {\n get defaultOptions(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Session };\n }\n\n get(key: string, options: StorageOptions = this.defaultOptions): Promise {\n let json: string = null;\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n json = window.localStorage.getItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n json = window.sessionStorage.getItem(key);\n break;\n }\n\n if (json != null) {\n const obj = JSON.parse(json);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string, options: StorageOptions = this.defaultOptions): Promise {\n return (await this.get(key, options)) != null;\n }\n\n save(key: string, obj: any, options: StorageOptions = this.defaultOptions): Promise {\n if (obj == null) {\n return this.remove(key, options);\n }\n\n if (obj instanceof Set) {\n obj = Array.from(obj);\n }\n\n const json = JSON.stringify(obj);\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.setItem(key, json);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.setItem(key, json);\n break;\n }\n return Promise.resolve();\n }\n\n remove(key: string, options: StorageOptions = this.defaultOptions): Promise {\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.removeItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.removeItem(key);\n break;\n }\n return Promise.resolve();\n }\n}\n","import { 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 { 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","// 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 { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService } from \"@bitwarden/common/platform/abstractions/broadcaster.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/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 { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { DeviceType, EventType } from \"@bitwarden/common/enums\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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);\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(\"updatedTempPassword\");\n break;\n case EventType.User_MigratedKeyToKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"migratedKeyConnector\");\n break;\n case EventType.User_RequestedDeviceApproval:\n msg = humanReadableMsg = this.i18nService.t(\"requestedDeviceApproval\");\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(\"eventEnrollAccountRecovery\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventEnrollAccountRecovery\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t(\"eventWithdrawAccountRecovery\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventWithdrawAccountRecovery\",\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 case EventType.OrganizationUser_ApprovedAuthRequest:\n msg = this.i18nService.t(\"approvedAuthRequest\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"approvedAuthRequest\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_RejectedAuthRequest:\n msg = this.i18nService.t(\"rejectedAuthRequest\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"rejectedAuthRequest\",\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 // Org Domain claiming events\n case EventType.OrganizationDomain_Added:\n msg = humanReadableMsg = this.i18nService.t(\"addedDomain\", ev.domainName);\n break;\n case EventType.OrganizationDomain_Removed:\n msg = humanReadableMsg = this.i18nService.t(\"removedDomain\", ev.domainName);\n break;\n case EventType.OrganizationDomain_Verified:\n msg = humanReadableMsg = this.i18nService.t(\"domainVerifiedEvent\", ev.domainName);\n break;\n case EventType.OrganizationDomain_NotVerified:\n msg = humanReadableMsg = this.i18nService.t(\"domainNotVerifiedEvent\", ev.domainName);\n break;\n // Secrets Manager\n case EventType.Secret_Retrieved:\n msg = this.i18nService.t(\"accessedSecret\", this.formatSecretId(ev));\n humanReadableMsg = this.i18nService.t(\"accessedSecret\", this.getShortId(ev.secretId));\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(ev: EventResponse): [string, string] {\n if (ev.serviceAccountId) {\n return [\"bwi-globe\", this.i18nService.t(\"sdk\")];\n }\n\n switch (ev.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.Server:\n return [\"bwi-server\", this.i18nService.t(\"server\")];\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/${ev.organizationId}/vault?search=${shortId}&viewEvents=${ev.cipherId}&type=all`\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 a.setAttribute(\n \"href\",\n `#/organizations/${ev.organizationId}/vault?collectionId=${ev.collectionId}`\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 + \"/settings/policies?policyId=\" + ev.policyId\n );\n return a.outerHTML;\n }\n\n formatSecretId(ev: EventResponse): string {\n const shortId = this.getShortId(ev.secretId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\"href\", \"#/sm/\" + ev.organizationId + \"/secrets?search=\" + shortId);\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 { 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 { EventUploadService as EventUploadServiceAbstraction } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"@bitwarden/common/auth/abstractions/two-factor.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EncryptService } from \"@bitwarden/common/platform/abstractions/encrypt.service\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { StateService as StateServiceAbstraction } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { ConfigService } from \"@bitwarden/common/platform/services/config/config.service\";\nimport { ContainerService } from \"@bitwarden/common/platform/services/container.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/services/vault-timeout/vault-timeout.service\";\n\nimport { I18nService } from \"../core/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: VaultTimeoutService,\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 private configService: ConfigService\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 await this.environmentService.setUrls(urls);\n // Workaround to ignore stateService.activeAccount until process.env.URLS are set\n // TODO: Remove this when implementing ticket PM-2637\n this.environmentService.initialized = true;\n\n setTimeout(() => this.notificationsService.init(), 3000);\n await this.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 this.configService.init();\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/platform/abstractions/messaging.service\";\nimport { Utils } from \"@bitwarden/common/platform/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 {\n Account as BaseAccount,\n AccountSettings as BaseAccountSettings,\n} from \"@bitwarden/common/platform/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 { AccountService } from \"@bitwarden/common/auth/abstractions/account.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport {\n AbstractMemoryStorageService,\n AbstractStorageService,\n} from \"@bitwarden/common/platform/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/platform/factories/state-factory\";\nimport { StorageOptions } from \"@bitwarden/common/platform/models/domain/storage-options\";\nimport { StateService as BaseStateService } from \"@bitwarden/common/platform/services/state.service\";\nimport { SendData } from \"@bitwarden/common/tools/send/models/data/send.data\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { CollectionData } from \"@bitwarden/common/vault/models/data/collection.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 @Inject(STATE_FACTORY) stateFactory: StateFactory,\n accountService: AccountService,\n @Inject(STATE_SERVICE_USE_CACHE) useAccountCache = true\n ) {\n super(\n storageService,\n secureStorageService,\n memoryStorageService,\n logService,\n stateFactory,\n accountService,\n useAccountCache\n );\n }\n\n async addAccount(account: Account) {\n // Apply web overrides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCiphers(options);\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCiphers(value, options);\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCollections(options);\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCollections(value, options);\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedFolders(options);\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedFolders(value, options);\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedSends(options);\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setLastSync(value, options);\n }\n}\n","import { FileDownloadRequest } from \"./file-download.request\";\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 { FileDownloadBuilder } from \"@bitwarden/common/platform/abstractions/file-download/file-download.builder\";\nimport { FileDownloadRequest } from \"@bitwarden/common/platform/abstractions/file-download/file-download.request\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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 { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { LoginService } from \"@bitwarden/common/auth/services/login.service\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService as I18nServiceAbstraction } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService as BaseStateServiceAbstraction } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { AbstractStorageService } from \"@bitwarden/common/platform/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/platform/factories/state-factory\";\nimport { MemoryStorageService } from \"@bitwarden/common/platform/services/memory-storage.service\";\n\nimport { PolicyListService } from \"../admin-console/core/policy-list.service\";\nimport { HtmlStorageService } from \"../core/html-storage.service\";\nimport { I18nService } from \"../core/i18n.service\";\nimport { CollectionAdminService } from \"../vault/core/collection-admin.service\";\n\nimport { BroadcasterMessagingService } from \"./broadcaster-messaging.service\";\nimport { EventService } from \"./event.service\";\nimport { InitService } from \"./init.service\";\nimport { ModalService } from \"./modal.service\";\nimport { RouterService } from \"./router.service\";\nimport { Account, GlobalState, StateService } from \"./state\";\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 environment 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 StateService,\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateService,\n },\n {\n provide: FileDownloadService,\n useClass: WebFileDownloadService,\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n deps: [StateService],\n },\n CollectionAdminService,\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\";\nimport { GlobalState as BaseGlobalState } from \"@bitwarden/common/platform/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/platform/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 { 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/platform/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(\"bitWebVault\");\n\n if (this.currentUrl.includes(\"/sm/\")) {\n title = i18nService.t(\"bitSecretsManager\");\n }\n\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 { Injectable } from \"@angular/core\";\n\nimport { ClientType, DeviceType } from \"@bitwarden/common/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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 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 (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 getAutofillKeyboardShortcut(): Promise {\n return null;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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/platform/abstractions/platform-utils.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\n document.body.classList.add(\"layout_frontend\");\n }\n\n ngOnDestroy() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n
\n \n © {{ year }} Bitwarden Inc.
\n {{ \"versionNumber\" | i18n : version }}\n
\n","\n","import { Component, OnInit } from \"@angular/core\";\nimport { map, Observable } from \"rxjs\";\n\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service\";\nimport {\n canAccessAdmin,\n OrganizationService,\n} from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { TokenService } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { VaultTimeoutAction } from \"@bitwarden/common/enums/vault-timeout-action.enum\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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 canLock$: 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 vaultTimeoutSettingsService: VaultTimeoutSettingsService,\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.memberOrganizations$.pipe(\n canAccessAdmin(this.i18nService)\n );\n this.canLock$ = this.vaultTimeoutSettingsService\n .availableVaultTimeoutActions$()\n .pipe(map((actions) => actions.includes(VaultTimeoutAction.Lock)));\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-gap-2 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, Router } from \"@angular/router\";\nimport { combineLatest, map } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/admin-console/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 * Used to apply css styles to show when a button is selected\n */\n isActive?: boolean;\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 =\n routeOrg?.canAccessSecretsManager && routeOrg?.enabled == true\n ? routeOrg\n : orgs.find((o) => o.canAccessSecretsManager && o.enabled == true);\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 isActive: !this.router.url.includes(\"/sm/\"),\n },\n sm: {\n name: \"Secrets Manager\",\n icon: \"bwi-cli\",\n appRoute: [\"/sm\", smOrg?.id],\n marketingRoute: \"https://bitwarden.com/products/secrets-manager/\",\n isActive: this.router.url.includes(\"/sm/\"),\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 (orgs.length === 0) {\n other.push(products.orgs);\n }\n\n if (smOrg) {\n bento.push(products.sm);\n } else {\n other.push(products.sm);\n }\n\n return {\n bento,\n other,\n };\n })\n );\n\n constructor(\n private organizationService: OrganizationService,\n private route: ActivatedRoute,\n private router: Router\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/platform/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 { svgIcon } from \"@bitwarden/components\";\n\nexport const SecretsManagerLogo = svgIcon`\n \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 \"../../../../billing/enums\";\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","import { Component, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { lastValueFrom, Observable, Subject } from \"rxjs\";\nimport { first, map, takeUntil } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { OrganizationSponsorshipRedeemRequest } from \"@bitwarden/common/admin-console/models/request/organization/organization-sponsorship-redeem.request\";\nimport { PlanSponsorshipType, PlanType } from \"@bitwarden/common/billing/enums\";\nimport { ProductType } from \"@bitwarden/common/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { OrganizationPlansComponent } from \"../../../billing\";\nimport { SharedModule } from \"../../../shared\";\nimport {\n DeleteOrganizationDialogResult,\n openDeleteOrganizationDialog,\n} from \"../settings/components\";\n\n@Component({\n templateUrl: \"families-for-enterprise-setup.component.html\",\n standalone: true,\n imports: [SharedModule, OrganizationPlansComponent],\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 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 dialogService: DialogService\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 const dialog = openDeleteOrganizationDialog(this.dialogService, {\n data: {\n organizationId: organizationId,\n requestType: \"InvalidFamiliesForEnterprise\",\n },\n });\n\n const result = await lastValueFrom(dialog.closed);\n\n if (result === DeleteOrganizationDialogResult.Deleted) {\n this.router.navigate([\"/\"]);\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 { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { PlanType } from \"@bitwarden/common/billing/enums\";\nimport { ProductType } from \"@bitwarden/common/enums\";\n\nimport { OrganizationPlansComponent } from \"../../billing\";\nimport { SharedModule } from \"../../shared\";\n\n@Component({\n templateUrl: \"create-organization.component.html\",\n standalone: true,\n imports: [SharedModule, OrganizationPlansComponent],\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 === \"teamsStarter\") {\n this.orgPlansComponent.plan = PlanType.TeamsStarter;\n this.orgPlansComponent.product = ProductType.TeamsStarter;\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","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from \"@angular/forms\";\n\nexport function notAllowedValueAsync(\n valueGetter: () => Promise,\n caseInsensitive = false\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise => {\n let notAllowedValue = await valueGetter();\n let controlValue = control.value;\n if (caseInsensitive) {\n notAllowedValue = notAllowedValue.toLowerCase();\n controlValue = controlValue.toLowerCase();\n }\n\n if (controlValue === notAllowedValue) {\n return {\n notAllowedValue: true,\n };\n }\n };\n}\n","\n {{ sponsoringOrg.familySponsorshipFriendlyName }}\n\n{{ sponsoringOrg.name }}\n\n {{ statusMessage }}\n\n\n
\n \n \n \n
\n \n \n {{ \"resendEmail\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n\n","import { formatDate } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output, OnInit } from \"@angular/core\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 private dialogService: DialogService\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 confirmed = await this.dialogService.openSimpleDialog({\n title: `${this.i18nService.t(\"remove\")} ${this.sponsoringOrg.familySponsorshipFriendlyName}?`,\n content: { key: \"revokeSponsorshipConfirmation\" },\n acceptButtonText: { key: \"remove\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\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 { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { PlanSponsorshipType } from \"@bitwarden/common/billing/enums/\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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","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 { EmergencyAccessAcceptRequest } from \"@bitwarden/common/auth/models/request/emergency-access-accept.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 await this.stateService.setEmergencyAccessInvitation(null);\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 // save the invitation to state so sso logins can find it later\n await this.stateService.setEmergencyAccessInvitation(qParams);\n }\n}\n","import { OrganizationKeysRequest } from \"../../../admin-console/models/request/organization-keys.request\";\n\nexport class OrganizationUserAcceptInitRequest {\n token: string;\n key: string;\n keys: OrganizationKeysRequest;\n collectionName: string;\n}\n","export class OrganizationUserAcceptRequest {\n token: string;\n // Used to auto-enroll in master password reset\n resetPasswordKey: string;\n}\n","
\n
\n \"Bitwarden\"\n

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

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

{{ \"joinOrganization\" | i18n }}

\n
\n
\n

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

\n

{{ \"joinOrganizationDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport {\n OrganizationUserAcceptInitRequest,\n OrganizationUserAcceptRequest,\n} from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { OrganizationKeysRequest } from \"@bitwarden/common/admin-console/models/request/organization-keys.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { OrgKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\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 private apiService: ApiService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n const initOrganization =\n qParams.initOrganization != null && qParams.initOrganization.toLocaleLowerCase() === \"true\";\n if (initOrganization) {\n this.actionPromise = this.acceptInitOrganizationFlow(qParams);\n } else {\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.acceptFlow(qParams);\n }\n\n await this.actionPromise;\n await this.apiService.refreshIdentityToken();\n await this.stateService.setOrganizationInvitation(null);\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n initOrganization\n ? this.i18nService.t(\"inviteInitAcceptedDesc\")\n : this.i18nService.t(\"inviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params): Promise {\n await this.prepareOrganizationInvitation(qParams);\n }\n\n private async acceptInitOrganizationFlow(qParams: Params): Promise {\n return this.prepareAcceptInitRequest(qParams).then((request) =>\n this.organizationUserService.postOrganizationUserAcceptInit(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n )\n );\n }\n\n private async acceptFlow(qParams: Params): Promise {\n return this.prepareAcceptRequest(qParams).then((request) =>\n this.organizationUserService.postOrganizationUserAccept(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n )\n );\n }\n\n private async prepareAcceptInitRequest(\n qParams: Params\n ): Promise {\n const request = new OrganizationUserAcceptInitRequest();\n request.token = qParams.token;\n\n const [encryptedOrgKey, orgKey] = await this.cryptoService.makeOrgKey();\n const [orgPublicKey, encryptedOrgPrivateKey] = await this.cryptoService.makeKeyPair(orgKey);\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n orgKey\n );\n\n request.key = encryptedOrgKey.encryptedString;\n request.keys = new OrganizationKeysRequest(\n orgPublicKey,\n encryptedOrgPrivateKey.encryptedString\n );\n request.collectionName = collection.encryptedString;\n\n return request;\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 userKey = await this.cryptoService.getUserKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey);\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 { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { PasswordHintRequest } from \"@bitwarden/common/auth/models/request/password-hint.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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/auth/components/hint.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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 { firstValueFrom, Subject } from \"rxjs\";\nimport { concatMap, take, takeUntil } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/auth/models/request/secret-verification.request\";\nimport { MasterPasswordPolicyResponse } from \"@bitwarden/common/auth/models/response/master-password-policy.response\";\nimport { HashPurpose, KeySuffixOptions } from \"@bitwarden/common/enums\";\nimport { VaultTimeoutAction } from \"@bitwarden/common/enums/vault-timeout-action.enum\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { UserKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PinLockType } from \"@bitwarden/common/services/vault-timeout/vault-timeout-settings.service\";\nimport { PasswordStrengthServiceAbstraction } from \"@bitwarden/common/tools/password-strength\";\nimport { DialogService } from \"@bitwarden/components\";\n\n@Directive()\nexport class LockComponent implements OnInit, OnDestroy {\n masterPassword = \"\";\n pin = \"\";\n showPassword = false;\n email: string;\n pinEnabled = false;\n masterPasswordEnabled = false;\n webVaultHostname = \"\";\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected onSuccessfulSubmit: () => Promise;\n\n private invalidPinAttempts = 0;\n private pinStatus: PinLockType;\n\n private enforcedMasterPasswordOptions: MasterPasswordPolicyOptions = undefined;\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 protected ngZone: NgZone,\n protected policyApiService: PolicyApiServiceAbstraction,\n protected policyService: InternalPolicyService,\n protected passwordStrengthService: PasswordStrengthServiceAbstraction,\n protected dialogService: DialogService,\n protected deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n protected userVerificationService: UserVerificationService\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.pinEnabled) {\n return await this.handlePinRequiredUnlock();\n }\n\n await this.handleMasterPasswordRequiredUnlock();\n }\n\n async logOut() {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"logOut\" },\n content: { key: \"logOutConfirmation\" },\n acceptButtonText: { key: \"logOut\" },\n type: \"warning\",\n });\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 userKey = await this.cryptoService.getUserKeyFromStorage(KeySuffixOptions.Biometric);\n\n if (userKey) {\n await this.setUserKeyAndContinue(userKey, false);\n }\n\n return !!userKey;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n const input = document.getElementById(this.pinEnabled ? \"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 let userKeyPin: EncString;\n let oldPinKey: EncString;\n switch (this.pinStatus) {\n case \"PERSISTANT\": {\n userKeyPin = await this.stateService.getPinKeyEncryptedUserKey();\n const oldEncryptedPinKey = await this.stateService.getEncryptedPinProtected();\n oldPinKey = oldEncryptedPinKey ? new EncString(oldEncryptedPinKey) : undefined;\n break;\n }\n case \"TRANSIENT\": {\n userKeyPin = await this.stateService.getPinKeyEncryptedUserKeyEphemeral();\n oldPinKey = await this.stateService.getDecryptedPinProtected();\n break;\n }\n case \"DISABLED\": {\n throw new Error(\"Pin is disabled\");\n }\n default: {\n const _exhaustiveCheck: never = this.pinStatus;\n return _exhaustiveCheck;\n }\n }\n\n let userKey: UserKey;\n if (oldPinKey) {\n userKey = await this.cryptoService.decryptAndMigrateOldPinKey(\n this.pinStatus === \"TRANSIENT\",\n this.pin,\n this.email,\n kdf,\n kdfConfig,\n oldPinKey\n );\n } else {\n userKey = await this.cryptoService.decryptUserKeyWithPin(\n this.pin,\n this.email,\n kdf,\n kdfConfig,\n userKeyPin\n );\n }\n\n const protectedPin = await this.stateService.getProtectedPin();\n const decryptedPin = await this.cryptoService.decryptToUtf8(\n new EncString(protectedPin),\n userKey\n );\n failed = decryptedPin !== this.pin;\n\n if (!failed) {\n await this.setUserKeyAndContinue(userKey);\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 masterKey = await this.cryptoService.makeMasterKey(\n this.masterPassword,\n this.email,\n kdf,\n kdfConfig\n );\n const storedPasswordHash = await this.cryptoService.getMasterKeyHash();\n\n let passwordValid = false;\n\n if (storedPasswordHash != null) {\n // Offline unlock possible\n passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n this.masterPassword,\n masterKey\n );\n } else {\n // Online only\n const request = new SecretVerificationRequest();\n const serverKeyHash = await this.cryptoService.hashMasterKey(\n this.masterPassword,\n masterKey,\n HashPurpose.ServerAuthorization\n );\n request.masterPasswordHash = serverKeyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n const response = await this.formPromise;\n this.enforcedMasterPasswordOptions = MasterPasswordPolicyOptions.fromResponse(response);\n passwordValid = true;\n const localKeyHash = await this.cryptoService.hashMasterKey(\n this.masterPassword,\n masterKey,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setMasterKeyHash(localKeyHash);\n } catch (e) {\n this.logService.error(e);\n } finally {\n this.formPromise = null;\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 const userKey = await this.cryptoService.decryptUserKeyWithMasterKey(masterKey);\n await this.cryptoService.setMasterKey(masterKey);\n await this.setUserKeyAndContinue(userKey, true);\n }\n\n private async setUserKeyAndContinue(key: UserKey, evaluatePasswordAfterUnlock = false) {\n await this.cryptoService.setUserKey(key);\n\n // Now that we have a decrypted user key in memory, we can check if we\n // need to establish trust on the current device\n await this.deviceTrustCryptoService.trustDeviceIfRequired();\n\n await this.doContinue(evaluatePasswordAfterUnlock);\n }\n\n private async doContinue(evaluatePasswordAfterUnlock: boolean) {\n await this.stateService.setEverBeenUnlocked(true);\n this.messagingService.send(\"unlocked\");\n\n if (evaluatePasswordAfterUnlock) {\n try {\n // If we do not have any saved policies, attempt to load them from the service\n if (this.enforcedMasterPasswordOptions == undefined) {\n this.enforcedMasterPasswordOptions = await firstValueFrom(\n this.policyService.masterPasswordPolicyOptions$()\n );\n }\n\n if (this.requirePasswordChange()) {\n await this.stateService.setForcePasswordResetReason(\n ForceResetPasswordReason.WeakMasterPassword\n );\n this.router.navigate([this.forcePasswordResetRoute]);\n return;\n }\n } catch (e) {\n // Do not prevent unlock if there is an error evaluating policies\n this.logService.error(e);\n }\n }\n\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 // TODO: Investigate PM-3515\n\n // The loading of the lock component works as follows:\n // 1. First, is locking a valid timeout action? If not, we will log the user out.\n // 2. If locking IS a valid timeout action, we proceed to show the user the lock screen.\n // The user will be able to unlock as follows:\n // - If they have a PIN set, they will be presented with the PIN input\n // - If they have a master password and no PIN, they will be presented with the master password input\n // - If they have biometrics enabled, they will be presented with the biometric prompt\n\n const availableVaultTimeoutActions = await firstValueFrom(\n this.vaultTimeoutSettingsService.availableVaultTimeoutActions$()\n );\n const supportsLock = availableVaultTimeoutActions.includes(VaultTimeoutAction.Lock);\n if (!supportsLock) {\n return await this.vaultTimeoutService.logOut();\n }\n\n this.pinStatus = await this.vaultTimeoutSettingsService.isPinLockSet();\n\n let ephemeralPinSet = await this.stateService.getPinKeyEncryptedUserKeyEphemeral();\n ephemeralPinSet ||= await this.stateService.getDecryptedPinProtected();\n this.pinEnabled =\n (this.pinStatus === \"TRANSIENT\" && !!ephemeralPinSet) || this.pinStatus === \"PERSISTANT\";\n this.masterPasswordEnabled = await this.userVerificationService.hasMasterPassword();\n\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock =\n (await this.vaultTimeoutSettingsService.isBiometricLockSet()) &&\n ((await this.cryptoService.hasUserKeyStored(KeySuffixOptions.Biometric)) ||\n !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.stateService.getBiometricText();\n this.email = await this.stateService.getEmail();\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 /**\n * Checks if the master password meets the enforced policy requirements\n * If not, returns false\n */\n private requirePasswordChange(): boolean {\n if (\n this.enforcedMasterPasswordOptions == undefined ||\n !this.enforcedMasterPasswordOptions.enforceOnLogin\n ) {\n return false;\n }\n\n const passwordStrength = this.passwordStrengthService.getPasswordStrength(\n this.masterPassword,\n this.email\n )?.score;\n\n return !this.policyService.evaluateMasterPassword(\n passwordStrength,\n this.masterPassword,\n this.enforcedMasterPasswordOptions\n );\n }\n}\n","import { Component, NgZone } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { LockComponent as BaseLockComponent } from \"@bitwarden/angular/auth/components/lock.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordStrengthServiceAbstraction } from \"@bitwarden/common/tools/password-strength\";\nimport { DialogService } from \"@bitwarden/components\";\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 ngZone: NgZone,\n policyApiService: PolicyApiServiceAbstraction,\n policyService: InternalPolicyService,\n passwordStrengthService: PasswordStrengthServiceAbstraction,\n dialogService: DialogService,\n deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n userVerificationService: UserVerificationService\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 ngZone,\n policyApiService,\n policyService,\n passwordStrengthService,\n dialogService,\n deviceTrustCryptoService,\n userVerificationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = async () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl && previousUrl !== \"/\" && previousUrl.indexOf(\"lock\") === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigateByUrl(this.successRoute);\n };\n }\n}\n","
\n
\n
\n

\n \n

\n

{{ \"yourVaultIsLocked\" | i18n }}

\n
\n
\n
\n \n
\n \n \n \n \n
\n \n {{ \"loggedInAsEmailOn\" | i18n : email : webVaultHostname }}\n \n
\n
\n
\n \n {{ \"unlock\" | i18n }} \n \n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormControl } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport {\n firstValueFrom,\n switchMap,\n Subject,\n catchError,\n from,\n of,\n finalize,\n takeUntil,\n defer,\n throwError,\n} from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { DevicesServiceAbstraction } from \"@bitwarden/common/auth/abstractions/devices/devices.service.abstraction\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { PasswordResetEnrollmentServiceAbstraction } from \"@bitwarden/common/auth/abstractions/password-reset-enrollment.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keys.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { AccountDecryptionOptions } from \"@bitwarden/common/platform/models/domain/account\";\n\nenum State {\n NewUser,\n ExistingUserUntrustedDevice,\n}\n\ntype NewUserData = {\n readonly state: State.NewUser;\n readonly organizationId: string;\n readonly userEmail: string;\n};\n\ntype ExistingUserUntrustedDeviceData = {\n readonly state: State.ExistingUserUntrustedDevice;\n readonly showApproveFromOtherDeviceBtn: boolean;\n readonly showReqAdminApprovalBtn: boolean;\n readonly showApproveWithMasterPasswordBtn: boolean;\n readonly userEmail: string;\n};\n\ntype Data = NewUserData | ExistingUserUntrustedDeviceData;\n\n@Directive()\nexport class BaseLoginDecryptionOptionsComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n\n protected State = State;\n\n protected data?: Data;\n protected loading = true;\n\n // Remember device means for the user to trust the device\n rememberDeviceForm = this.formBuilder.group({\n rememberDevice: [true],\n });\n\n get rememberDevice(): FormControl {\n return this.rememberDeviceForm?.controls.rememberDevice;\n }\n\n constructor(\n protected formBuilder: FormBuilder,\n protected devicesService: DevicesServiceAbstraction,\n protected stateService: StateService,\n protected router: Router,\n protected activatedRoute: ActivatedRoute,\n protected messagingService: MessagingService,\n protected tokenService: TokenService,\n protected loginService: LoginService,\n protected organizationApiService: OrganizationApiServiceAbstraction,\n protected cryptoService: CryptoService,\n protected organizationUserService: OrganizationUserService,\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected validationService: ValidationService,\n protected deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n protected platformUtilsService: PlatformUtilsService,\n protected passwordResetEnrollmentService: PasswordResetEnrollmentServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.loading = true;\n\n this.setupRememberDeviceValueChanges();\n\n // Persist user choice from state if it exists\n await this.setRememberDeviceDefaultValue();\n\n try {\n const accountDecryptionOptions: AccountDecryptionOptions =\n await this.stateService.getAccountDecryptionOptions();\n\n // see sso-login.strategy - to determine if a user is new or not it just checks if there is a key on the token response..\n // can we check if they have a user key or master key in crypto service? Would that be sufficient?\n if (\n !accountDecryptionOptions?.trustedDeviceOption?.hasAdminApproval &&\n !accountDecryptionOptions?.hasMasterPassword\n ) {\n // We are dealing with a new account if:\n // - User does not have admin approval (i.e. has not enrolled into admin reset)\n // - AND does not have a master password\n\n this.loadNewUserData();\n } else {\n this.loadUntrustedDeviceData(accountDecryptionOptions);\n }\n\n // Note: this is probably not a comprehensive write up of all scenarios:\n\n // If the TDE feature flag is enabled and TDE is configured for the org that the user is a member of,\n // then new and existing users can be redirected here after completing the SSO flow (and 2FA if enabled).\n\n // First we must determine user type (new or existing):\n\n // New User\n // - present user with option to remember the device or not (trust the device)\n // - present a continue button to proceed to the vault\n // - loadNewUserData() --> will need to load enrollment status and user email address.\n\n // Existing User\n // - Determine if user is an admin with access to account recovery in admin console\n // - Determine if user has a MP or not, if not, they must be redirected to set one (see PM-1035)\n // - Determine if device is trusted or not via device crypto service (method not yet written)\n // - If not trusted, present user with login decryption options (approve from other device, approve with master password, request admin approval)\n // - loadUntrustedDeviceData()\n } catch (err) {\n this.validationService.showError(err);\n }\n }\n\n private async setRememberDeviceDefaultValue() {\n const rememberDeviceFromState = await this.deviceTrustCryptoService.getShouldTrustDevice();\n\n const rememberDevice = rememberDeviceFromState ?? true;\n\n this.rememberDevice.setValue(rememberDevice);\n }\n\n private setupRememberDeviceValueChanges() {\n this.rememberDevice.valueChanges\n .pipe(\n switchMap((value) =>\n defer(() => this.deviceTrustCryptoService.setShouldTrustDevice(value))\n ),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n async loadNewUserData() {\n const autoEnrollStatus$ = defer(() =>\n this.stateService.getUserSsoOrganizationIdentifier()\n ).pipe(\n switchMap((organizationIdentifier) => {\n if (organizationIdentifier == undefined) {\n return throwError(() => new Error(this.i18nService.t(\"ssoIdentifierRequired\")));\n }\n\n return from(this.organizationApiService.getAutoEnrollStatus(organizationIdentifier));\n }),\n catchError((err: unknown) => {\n this.validationService.showError(err);\n return of(undefined);\n })\n );\n\n const email$ = from(this.stateService.getEmail()).pipe(\n catchError((err: unknown) => {\n this.validationService.showError(err);\n return of(undefined);\n }),\n takeUntil(this.destroy$)\n );\n\n const autoEnrollStatus = await firstValueFrom(autoEnrollStatus$);\n const email = await firstValueFrom(email$);\n\n this.data = { state: State.NewUser, organizationId: autoEnrollStatus.id, userEmail: email };\n this.loading = false;\n }\n\n loadUntrustedDeviceData(accountDecryptionOptions: AccountDecryptionOptions) {\n this.loading = true;\n\n const email$ = from(this.stateService.getEmail()).pipe(\n catchError((err: unknown) => {\n this.validationService.showError(err);\n return of(undefined);\n }),\n takeUntil(this.destroy$)\n );\n\n email$\n .pipe(\n takeUntil(this.destroy$),\n finalize(() => {\n this.loading = false;\n })\n )\n .subscribe((email) => {\n const showApproveFromOtherDeviceBtn =\n accountDecryptionOptions?.trustedDeviceOption?.hasLoginApprovingDevice || false;\n\n const showReqAdminApprovalBtn =\n !!accountDecryptionOptions?.trustedDeviceOption?.hasAdminApproval || false;\n\n const showApproveWithMasterPasswordBtn =\n accountDecryptionOptions?.hasMasterPassword || false;\n\n const userEmail = email;\n\n this.data = {\n state: State.ExistingUserUntrustedDevice,\n showApproveFromOtherDeviceBtn,\n showReqAdminApprovalBtn,\n showApproveWithMasterPasswordBtn,\n userEmail,\n };\n });\n }\n\n async approveFromOtherDevice() {\n if (this.data.state !== State.ExistingUserUntrustedDevice) {\n return;\n }\n\n this.loginService.setEmail(this.data.userEmail);\n this.router.navigate([\"/login-with-device\"]);\n }\n\n async requestAdminApproval() {\n this.loginService.setEmail(this.data.userEmail);\n this.router.navigate([\"/admin-approval-requested\"]);\n }\n\n async approveWithMasterPassword() {\n this.router.navigate([\"/lock\"], { queryParams: { from: \"login-initiated\" } });\n }\n\n async createUser() {\n if (this.data.state !== State.NewUser) {\n return;\n }\n\n // this.loading to support clients without async-actions-support\n this.loading = true;\n try {\n const { publicKey, privateKey } = await this.cryptoService.initAccount();\n const keysRequest = new KeysRequest(publicKey, privateKey.encryptedString);\n await this.apiService.postAccountKeys(keysRequest);\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"accountSuccessfullyCreated\")\n );\n\n await this.passwordResetEnrollmentService.enroll(this.data.organizationId);\n\n if (this.rememberDeviceForm.value.rememberDevice) {\n await this.deviceTrustCryptoService.trustDevice();\n }\n } catch (error) {\n this.validationService.showError(error);\n } finally {\n this.loading = false;\n }\n }\n\n logOut() {\n this.loading = true; // to avoid an awkward delay in browser extension\n this.messagingService.send(\"logout\");\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","
\n \n
\n \n
\n\n \n

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

\n
\n\n \n \n

{{ \"loginInitiated\" | i18n }}

\n\n

\n {{ \"deviceApprovalRequired\" | i18n }}\n

\n\n
\n \n \n {{ \"rememberThisDevice\" | i18n }} \n {{ \"uncheckIfPublicDevice\" | i18n }}\n \n
\n\n
\n \n {{ \"approveFromYourOtherDevice\" | i18n }}\n \n\n \n {{ \"requestAdminApproval\" | i18n }}\n \n\n \n {{ \"approveWithMasterPassword\" | i18n }}\n \n
\n
\n\n \n

{{ \"loggedInExclamation\" | i18n }}

\n\n
\n \n \n {{ \"rememberThisDevice\" | i18n }} \n {{ \"uncheckIfPublicDevice\" | i18n }}\n \n
\n\n \n {{ \"continue\" | i18n }}\n \n
\n\n
\n\n
\n

{{ \"loggingInAs\" | i18n }} {{ data.userEmail }}

\n {{ \"notYou\" | i18n }}\n
\n
\n \n\n","import { Component } from \"@angular/core\";\n\nimport { BaseLoginDecryptionOptionsComponent } from \"@bitwarden/angular/auth/components/base-login-decryption-options.component\";\n@Component({\n selector: \"web-login-decryption-options\",\n templateUrl: \"login-decryption-options.component.html\",\n})\nexport class LoginDecryptionOptionsComponent extends BaseLoginDecryptionOptionsComponent {\n override async createUser(): Promise {\n try {\n await super.createUser();\n await this.router.navigate([\"/vault\"]);\n } catch (error) {\n this.validationService.showError(error);\n }\n }\n\n createUserAction = async (): Promise => {\n return this.createUser();\n };\n}\n","export enum AuthRequestType {\n AuthenticateAndUnlock = 0,\n Unlock = 1,\n AdminApproval = 2,\n}\n","import { AuthRequestType } from \"../../enums/auth-request-type\";\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 ) {}\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 { IFrameComponent } from \"../misc/iframe_component\";\nimport { I18nService } from \"../platform/abstractions/i18n.service\";\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","import { Directive, Input } from \"@angular/core\";\n\nimport { CaptchaIFrame } from \"@bitwarden/common/auth/captcha-iframe\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/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 { IsActiveMatchOptions, 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 { AuthRequestCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { AuthRequestType } from \"@bitwarden/common/auth/enums/auth-request-type\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\nimport { AdminAuthRequestStorable } from \"@bitwarden/common/auth/models/domain/admin-auth-req-storable\";\nimport { AuthResult } from \"@bitwarden/common/auth/models/domain/auth-result\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { PasswordlessLogInCredentials } from \"@bitwarden/common/auth/models/domain/log-in-credentials\";\nimport { PasswordlessCreateAuthRequest } from \"@bitwarden/common/auth/models/request/passwordless-create-auth.request\";\nimport { AuthRequestResponse } from \"@bitwarden/common/auth/models/response/auth-request.response\";\nimport { HttpStatusCode } from \"@bitwarden/common/enums/http-status-code.enum\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\n\nimport { CaptchaProtectedComponent } from \"./captcha-protected.component\";\n\n// TODO: consider renaming this component something like LoginViaAuthReqComponent\n\nenum State {\n StandardAuthRequest,\n AdminAuthRequest,\n}\n\n@Directive()\nexport class LoginWithDeviceComponent\n extends CaptchaProtectedComponent\n implements OnInit, OnDestroy\n{\n private destroy$ = new Subject();\n userAuthNStatus: AuthenticationStatus;\n email: string;\n showResendNotification = false;\n passwordlessRequest: PasswordlessCreateAuthRequest;\n fingerprintPhrase: string;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected adminApprovalRoute = \"admin-approval-requested\";\n\n protected StateEnum = State;\n protected state = State.StandardAuthRequest;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n private resendTimeout = 12000;\n\n private authRequestKeyPair: { publicKey: Uint8Array; privateKey: Uint8Array };\n\n // TODO: in future, go to child components and remove child constructors and let deps fall through to the super class\n constructor(\n protected router: Router,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService,\n private appIdService: AppIdService,\n private passwordGenerationService: PasswordGenerationServiceAbstraction,\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 private deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n private authReqCryptoService: AuthRequestCryptoServiceAbstraction\n ) {\n super(environmentService, i18nService, platformUtilsService);\n\n // TODO: I don't know why this is necessary.\n // Why would the existence of the email depend on the navigation?\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 .getPushNotificationObs$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((id) => {\n // Only fires on approval currently\n this.verifyAndHandleApprovedAuthReq(id);\n });\n }\n\n async ngOnInit() {\n this.userAuthNStatus = await this.authService.getAuthStatus();\n\n const matchOptions: IsActiveMatchOptions = {\n paths: \"exact\",\n queryParams: \"ignored\",\n fragment: \"ignored\",\n matrixParams: \"ignored\",\n };\n\n if (this.router.isActive(this.adminApprovalRoute, matchOptions)) {\n this.state = State.AdminAuthRequest;\n }\n\n if (this.state === State.AdminAuthRequest) {\n // Pull email from state for admin auth reqs b/c it is available\n // This also prevents it from being lost on refresh as the\n // login service email does not persist.\n this.email = await this.stateService.getEmail();\n\n if (!this.email) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"userEmailMissing\"));\n this.router.navigate([\"/login-initiated\"]);\n return;\n }\n\n // We only allow a single admin approval request to be active at a time\n // so must check state to see if we have an existing one or not\n const adminAuthReqStorable = await this.stateService.getAdminAuthRequest();\n\n if (adminAuthReqStorable) {\n await this.handleExistingAdminAuthRequest(adminAuthReqStorable);\n } else {\n // No existing admin auth request; so we need to create one\n await this.startPasswordlessLogin();\n }\n } else {\n // Standard auth request\n // TODO: evaluate if we can remove the setting of this.email in the constructor\n this.email = this.loginService.getEmail();\n\n if (!this.email) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"userEmailMissing\"));\n this.router.navigate([\"/login\"]);\n return;\n }\n\n await this.startPasswordlessLogin();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.anonymousHubService.stopHubConnection();\n }\n\n private async handleExistingAdminAuthRequest(adminAuthReqStorable: AdminAuthRequestStorable) {\n // Note: on login, the SSOLoginStrategy will also call to see an existing admin auth req\n // has been approved and handle it if so.\n\n // Regardless, we always retrieve the auth request from the server verify and handle status changes here as well\n let adminAuthReqResponse: AuthRequestResponse;\n try {\n adminAuthReqResponse = await this.apiService.getAuthRequest(adminAuthReqStorable.id);\n } catch (error) {\n if (error instanceof ErrorResponse && error.statusCode === HttpStatusCode.NotFound) {\n return await this.handleExistingAdminAuthReqDeletedOrDenied();\n }\n }\n\n // Request doesn't exist anymore\n if (!adminAuthReqResponse) {\n return await this.handleExistingAdminAuthReqDeletedOrDenied();\n }\n\n // Re-derive the user's fingerprint phrase\n // It is important to not use the server's public key here as it could have been compromised via MITM\n const derivedPublicKeyArrayBuffer = await this.cryptoFunctionService.rsaExtractPublicKey(\n adminAuthReqStorable.privateKey\n );\n this.fingerprintPhrase = (\n await this.cryptoService.getFingerprint(this.email, derivedPublicKeyArrayBuffer)\n ).join(\"-\");\n\n // Request denied\n if (adminAuthReqResponse.isAnswered && !adminAuthReqResponse.requestApproved) {\n return await this.handleExistingAdminAuthReqDeletedOrDenied();\n }\n\n // Request approved\n if (adminAuthReqResponse.requestApproved) {\n return await this.handleApprovedAdminAuthRequest(\n adminAuthReqResponse,\n adminAuthReqStorable.privateKey\n );\n }\n\n // Request still pending response from admin\n // So, create hub connection so that any approvals will be received via push notification\n this.anonymousHubService.createHubConnection(adminAuthReqStorable.id);\n }\n\n private async handleExistingAdminAuthReqDeletedOrDenied() {\n // clear the admin auth request from state\n await this.stateService.setAdminAuthRequest(null);\n\n // start new auth request\n this.startPasswordlessLogin();\n }\n\n private async buildAuthRequest(authRequestType: AuthRequestType) {\n const authRequestKeyPairArray = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n\n this.authRequestKeyPair = {\n publicKey: authRequestKeyPairArray[0],\n privateKey: authRequestKeyPairArray[1],\n };\n\n const deviceIdentifier = await this.appIdService.getAppId();\n const publicKey = Utils.fromBufferToB64(this.authRequestKeyPair.publicKey);\n const accessCode = await this.passwordGenerationService.generatePassword({ length: 25 });\n\n this.fingerprintPhrase = (\n await this.cryptoService.getFingerprint(this.email, this.authRequestKeyPair.publicKey)\n ).join(\"-\");\n\n this.passwordlessRequest = new PasswordlessCreateAuthRequest(\n this.email,\n deviceIdentifier,\n publicKey,\n authRequestType,\n accessCode\n );\n }\n\n async startPasswordlessLogin() {\n this.showResendNotification = false;\n\n try {\n let reqResponse: AuthRequestResponse;\n\n if (this.state === State.AdminAuthRequest) {\n await this.buildAuthRequest(AuthRequestType.AdminApproval);\n reqResponse = await this.apiService.postAdminAuthRequest(this.passwordlessRequest);\n\n const adminAuthReqStorable = new AdminAuthRequestStorable({\n id: reqResponse.id,\n privateKey: this.authRequestKeyPair.privateKey,\n });\n\n await this.stateService.setAdminAuthRequest(adminAuthReqStorable);\n } else {\n await this.buildAuthRequest(AuthRequestType.AuthenticateAndUnlock);\n reqResponse = await this.apiService.postAuthRequest(this.passwordlessRequest);\n }\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 private async verifyAndHandleApprovedAuthReq(requestId: string) {\n try {\n // Retrieve the auth request from server and verify it's approved\n let authReqResponse: AuthRequestResponse;\n\n switch (this.state) {\n case State.StandardAuthRequest:\n // Unauthed - access code required for user verification\n authReqResponse = await this.apiService.getAuthResponse(\n requestId,\n this.passwordlessRequest.accessCode\n );\n break;\n\n case State.AdminAuthRequest:\n // Authed - no access code required\n authReqResponse = await this.apiService.getAuthRequest(requestId);\n break;\n\n default:\n break;\n }\n\n if (!authReqResponse.requestApproved) {\n return;\n }\n\n // Approved so proceed:\n\n // 4 Scenarios to handle for approved auth requests:\n // Existing flow 1:\n // - Anon Login with Device > User is not AuthN > receives approval from device with pubKey(masterKey)\n // > decrypt masterKey > must authenticate > gets masterKey(userKey) > decrypt userKey and proceed to vault\n\n // 3 new flows from TDE:\n // Flow 2:\n // - Post SSO > User is AuthN > SSO login strategy success sets masterKey(userKey) > receives approval from device with pubKey(masterKey)\n // > decrypt masterKey > decrypt userKey > establish trust if required > proceed to vault\n // Flow 3:\n // - Post SSO > User is AuthN > Receives approval from device with pubKey(userKey) > decrypt userKey > establish trust if required > proceed to vault\n // Flow 4:\n // - Anon Login with Device > User is not AuthN > receives approval from device with pubKey(userKey)\n // > decrypt userKey > must authenticate > set userKey > proceed to vault\n\n // if user has authenticated via SSO\n if (this.userAuthNStatus === AuthenticationStatus.Locked) {\n return await this.handleApprovedAdminAuthRequest(\n authReqResponse,\n this.authRequestKeyPair.privateKey\n );\n }\n\n // Flow 1 and 4:\n const loginAuthResult = await this.loginViaPasswordlessStrategy(requestId, authReqResponse);\n await this.handlePostLoginNavigation(loginAuthResult);\n } catch (error) {\n if (error instanceof ErrorResponse) {\n let errorRoute = \"/login\";\n if (this.state === State.AdminAuthRequest) {\n errorRoute = \"/login-initiated\";\n }\n\n this.router.navigate([errorRoute]);\n this.validationService.showError(error);\n return;\n }\n\n this.logService.error(error);\n }\n }\n\n async handleApprovedAdminAuthRequest(\n adminAuthReqResponse: AuthRequestResponse,\n privateKey: ArrayBuffer\n ) {\n // See verifyAndHandleApprovedAuthReq(...) for flow details\n // it's flow 2 or 3 based on presence of masterPasswordHash\n if (adminAuthReqResponse.masterPasswordHash) {\n // Flow 2: masterPasswordHash is not null\n // key is authRequestPublicKey(masterKey) + we have authRequestPublicKey(masterPasswordHash)\n await this.authReqCryptoService.setKeysAfterDecryptingSharedMasterKeyAndHash(\n adminAuthReqResponse,\n privateKey\n );\n } else {\n // Flow 3: masterPasswordHash is null\n // we can assume key is authRequestPublicKey(userKey) and we can just decrypt with userKey and proceed to vault\n await this.authReqCryptoService.setUserKeyAfterDecryptingSharedUserKey(\n adminAuthReqResponse,\n privateKey\n );\n }\n\n // clear the admin auth request from state so it cannot be used again (it's a one time use)\n // TODO: this should eventually be enforced via deleting this on the server once it is used\n await this.stateService.setAdminAuthRequest(null);\n\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"loginApproved\"));\n\n // Now that we have a decrypted user key in memory, we can check if we\n // need to establish trust on the current device\n await this.deviceTrustCryptoService.trustDeviceIfRequired();\n\n // TODO: don't forget to use auto enrollment service everywhere we trust device\n\n await this.handleSuccessfulLoginNavigation();\n }\n\n // Authentication helper\n private async buildPasswordlessLoginCredentials(\n requestId: string,\n response: AuthRequestResponse\n ): Promise {\n // if masterPasswordHash has a value, we will always receive key as authRequestPublicKey(masterKey) + authRequestPublicKey(masterPasswordHash)\n // if masterPasswordHash is null, we will always receive key as authRequestPublicKey(userKey)\n if (response.masterPasswordHash) {\n const { masterKey, masterKeyHash } =\n await this.authReqCryptoService.decryptPubKeyEncryptedMasterKeyAndHash(\n response.key,\n response.masterPasswordHash,\n this.authRequestKeyPair.privateKey\n );\n\n return new PasswordlessLogInCredentials(\n this.email,\n this.passwordlessRequest.accessCode,\n requestId,\n null, // no userKey\n masterKey,\n masterKeyHash\n );\n } else {\n const userKey = await this.authReqCryptoService.decryptPubKeyEncryptedUserKey(\n response.key,\n this.authRequestKeyPair.privateKey\n );\n return new PasswordlessLogInCredentials(\n this.email,\n this.passwordlessRequest.accessCode,\n requestId,\n userKey,\n null, // no masterKey\n null // no masterKeyHash\n );\n }\n }\n\n private async loginViaPasswordlessStrategy(\n requestId: string,\n authReqResponse: AuthRequestResponse\n ): Promise {\n // Note: credentials change based on if the authReqResponse.key is a encryptedMasterKey or UserKey\n const credentials = await this.buildPasswordlessLoginCredentials(requestId, authReqResponse);\n\n // Note: keys are set by PasswordlessLogInStrategy success handling\n return await this.authService.logIn(credentials);\n }\n\n // Routing logic\n private async handlePostLoginNavigation(loginResponse: AuthResult) {\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 != ForceResetPasswordReason.None) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n await this.handleSuccessfulLoginNavigation();\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 handleSuccessfulLoginNavigation() {\n if (this.state === State.StandardAuthRequest) {\n // Only need to set remembered email on standard login with auth req flow\n await this.setRememberEmailValues();\n }\n\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}\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 {{ fingerprintPhrase }}\n

\n
\n\n \n\n
\n\n
\n {{ \"loginWithDeviceEnabledNote\" | i18n }}\n {{ \"viewAllLoginOptions\" | i18n }}\n
\n
\n \n \n \n

{{ \"adminApprovalRequested\" | i18n }}

\n\n
\n

{{ \"adminApprovalRequestSentToAdmins\" | i18n }}

\n

{{ \"youWillBeNotifiedOnceApproved\" | i18n }}

\n
\n\n
\n

{{ \"fingerprintPhraseHeader\" | i18n }}

\n

\n {{ fingerprintPhrase }}\n

\n
\n\n
\n\n
\n {{ \"troubleLoggingIn\" | i18n }}\n {{ \"viewAllLoginOptions\" | i18n }}\n
\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/auth/components/login-with-device.component\";\nimport { AnonymousHubService } from \"@bitwarden/common/abstractions/anonymousHub.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthRequestCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\n\nimport { StateService } from \"../../core\";\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: PasswordGenerationServiceAbstraction,\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 deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n authReqCryptoService: AuthRequestCryptoServiceAbstraction\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 deviceTrustCryptoService,\n authReqCryptoService\n );\n }\n}\n","import { Directive, ElementRef, NgZone, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { take, takeUntil } from \"rxjs/operators\";\n\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DevicesApiServiceAbstraction } from \"@bitwarden/common/auth/abstractions/devices-api.service.abstraction\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { AuthResult } from \"@bitwarden/common/auth/models/domain/auth-result\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { PasswordLogInCredentials } from \"@bitwarden/common/auth/models/domain/log-in-credentials\";\nimport { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\n\nimport {\n AllValidationErrors,\n FormValidationErrorsService,\n} from \"../../platform/abstractions/form-validation-errors.service\";\n\nimport { CaptchaProtectedComponent } from \"./captcha-protected.component\";\n\n@Directive()\nexport class LoginComponent extends CaptchaProtectedComponent implements OnInit, OnDestroy {\n @ViewChild(\"masterPasswordInput\", { static: true }) masterPasswordInput: ElementRef;\n\n showPassword = false;\n formPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n showLoginWithDevice: boolean;\n validatedEmail = false;\n paramEmailSet = false;\n\n formGroup = this.formBuilder.group({\n email: [\"\", [Validators.required, Validators.email]],\n masterPassword: [\n \"\",\n [Validators.required, Validators.minLength(Utils.originalMinimumPasswordLength)],\n ],\n rememberEmail: [false],\n });\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n\n protected destroy$ = new Subject();\n\n get loggedEmail() {\n return this.formGroup.value.email;\n }\n\n constructor(\n protected devicesApiService: DevicesApiServiceAbstraction,\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: PasswordGenerationServiceAbstraction,\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 }\n\n get selfHostedDomain() {\n return this.environmentService.hasBaseUrl() ? this.environmentService.getWebVaultUrl() : null;\n }\n\n async ngOnInit() {\n this.route?.queryParams.pipe(takeUntil(this.destroy$)).subscribe((params) => {\n if (!params) {\n return;\n }\n\n const queryParamsEmail = params.email;\n\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 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 ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\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 (this.handleMigrateEncryptionKey(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 != ForceResetPasswordReason.None) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (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 \"&email=\" +\n encodeURIComponent(this.formGroup.controls.email.value)\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 if (!this.validatedEmail) {\n // Reset master password only when going from validated to not validated\n // so that autofill can work properly\n this.formGroup.controls.masterPassword.reset();\n } else {\n // Mark MP as untouched so that, when users enter email and hit enter,\n // the MP field doesn't load with validation errors\n this.formGroup.controls.masterPassword.markAsUntouched();\n\n // When email is validated, focus on master password after\n // waiting for input to be rendered\n if (this.ngZone.isStable) {\n this.masterPasswordInput?.nativeElement?.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.masterPasswordInput?.nativeElement?.focus();\n });\n }\n }\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 // Legacy accounts used the master key to encrypt data. Migration is required\n // but only performed on web\n protected handleMigrateEncryptionKey(result: AuthResult): boolean {\n if (!result.requiresEncryptionKeyMigration) {\n return false;\n }\n\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccured\"),\n this.i18nService.t(\"encryptionKeyMigrationRequired\")\n );\n return true;\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 \"minlength\":\n return this.i18nService.t(\"masterPasswordMinlength\", Utils.originalMinimumPasswordLength);\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 this.showLoginWithDevice = await this.devicesApiService.getKnownDevice(\n email,\n deviceIdentifier\n );\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 {{ \"masterPass\" | i18n }}\n \n \n \n {{ \"getMasterPasswordHint\" | i18n }}\n
\n\n
\n \n
\n\n
\n \n {{ \"loginWithMasterPassword\" | i18n }} \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
\n \n \n\n","import { Component, NgZone, OnInit } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { takeUntil } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { LoginComponent as BaseLoginComponent } from \"@bitwarden/angular/auth/components/login.component\";\nimport { FormValidationErrorsService } from \"@bitwarden/angular/platform/abstractions/form-validation-errors.service\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { InternalPolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyData } from \"@bitwarden/common/admin-console/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { PolicyResponse } from \"@bitwarden/common/admin-console/models/response/policy.response\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DevicesApiServiceAbstraction } from \"@bitwarden/common/auth/abstractions/devices-api.service.abstraction\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { AuthResult } from \"@bitwarden/common/auth/models/domain/auth-result\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { PasswordStrengthServiceAbstraction } from \"@bitwarden/common/tools/password-strength\";\n\nimport { flagEnabled } from \"../../../utils/flags\";\nimport { RouterService, StateService } from \"../../core\";\n\n@Component({\n selector: \"app-login\",\n templateUrl: \"login.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class LoginComponent extends BaseLoginComponent implements OnInit {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n showPasswordless = false;\n\n constructor(\n devicesApiService: DevicesApiServiceAbstraction,\n appIdService: AppIdService,\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationServiceAbstraction,\n private passwordStrengthService: PasswordStrengthServiceAbstraction,\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 devicesApiService,\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 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.passwordStrengthService.getPasswordStrength(\n masterPassword,\n this.formGroup.value.email\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 protected override handleMigrateEncryptionKey(result: AuthResult): boolean {\n if (!result.requiresEncryptionKeyMigration) {\n return false;\n }\n this.router.navigate([\"migrate-legacy-encryption\"]);\n return true;\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 { DeleteRecoverRequest } from \"@bitwarden/common/models/request/delete-recover.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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/auth/abstractions/auth.service\";\nimport { TwoFactorRecoveryRequest } from \"@bitwarden/common/auth/models/request/two-factor-recovery.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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.hashMasterKey(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 { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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 private dialogService: DialogService\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.dialogService.openSimpleDialog({\n title: this.organization.name,\n content: { key: \"leaveOrganizationConfirmation\" },\n type: \"warning\",\n });\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/auth/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\";\nimport { KeysRequest } from \"../../../models/request/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 { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { KdfConfig } from \"@bitwarden/common/auth/models/domain/kdf-config\";\nimport { KdfType } from \"@bitwarden/common/enums\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { MasterKey, UserKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { DialogService } from \"@bitwarden/components\";\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 leakedPassword: boolean;\n minimumLength = Utils.minimumPasswordLength;\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: PasswordGenerationServiceAbstraction,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n protected stateService: StateService,\n protected dialogService: DialogService\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\n // Create new master key\n const newMasterKey = await this.cryptoService.makeMasterKey(\n this.masterPassword,\n email.trim().toLowerCase(),\n this.kdf,\n this.kdfConfig\n );\n const newMasterKeyHash = await this.cryptoService.hashMasterKey(\n this.masterPassword,\n newMasterKey\n );\n\n let newProtectedUserKey: [UserKey, EncString] = null;\n const userKey = await this.cryptoService.getUserKey();\n if (userKey == null) {\n newProtectedUserKey = await this.cryptoService.makeUserKey(newMasterKey);\n } else {\n newProtectedUserKey = await this.cryptoService.encryptUserKeyWithMasterKey(newMasterKey);\n }\n\n await this.performSubmitActions(newMasterKeyHash, newMasterKey, newProtectedUserKey);\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 newMasterKeyHash: string,\n newMasterKey: MasterKey,\n newUserKey: [UserKey, 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 < this.minimumLength) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordMinimumlength\", this.minimumLength)\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 const weakPassword = strengthResult != null && strengthResult.score < 3;\n\n if (weakPassword && this.leakedPassword) {\n const result = await this.dialogService.openSimpleDialog({\n title: { key: \"weakAndExposedMasterPassword\" },\n content: { key: \"weakAndBreachedMasterPasswordDesc\" },\n type: \"warning\",\n });\n\n if (!result) {\n return false;\n }\n } else {\n if (weakPassword) {\n const result = await this.dialogService.openSimpleDialog({\n title: { key: \"weakMasterPassword\" },\n content: { key: \"weakMasterPasswordDesc\" },\n type: \"warning\",\n });\n\n if (!result) {\n return false;\n }\n }\n if (this.leakedPassword) {\n const result = await this.dialogService.openSimpleDialog({\n title: { key: \"exposedMasterPassword\" },\n content: { key: \"exposedMasterPasswordDesc\" },\n type: \"warning\",\n });\n\n if (!result) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n async logOut() {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"logOut\" },\n content: { key: \"logOutConfirmation\" },\n acceptButtonText: { key: \"logOut\" },\n type: \"warning\",\n });\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 { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { SetPasswordRequest } from \"@bitwarden/common/auth/models/request/set-password.request\";\nimport { HashPurpose, DEFAULT_KDF_TYPE, DEFAULT_KDF_CONFIG } from \"@bitwarden/common/enums\";\nimport { KeysRequest } from \"@bitwarden/common/models/request/keys.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { MasterKey, UserKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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: PasswordGenerationServiceAbstraction,\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 dialogService: DialogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService,\n dialogService\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 masterKey: MasterKey,\n userKey: [UserKey, EncString]\n ) {\n const newKeyPair = await this.cryptoService.makeKeyPair(userKey[0]);\n const request = new SetPasswordRequest(\n masterPasswordHash,\n userKey[1].encryptedString,\n this.hint,\n this.identifier,\n new KeysRequest(newKeyPair[0], newKeyPair[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(masterKey, userKey, newKeyPair);\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 key with organization public key\n const userKey = await this.cryptoService.getUserKey();\n const encryptedUserKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey);\n\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.masterPasswordHash = masterPasswordHash;\n resetRequest.resetPasswordKey = encryptedUserKey.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(masterKey, userKey, newKeyPair);\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 masterKey: MasterKey,\n userKey: [UserKey, EncString],\n keyPair: [string, EncString]\n ) {\n await this.stateService.setKdfType(this.kdf);\n await this.stateService.setKdfConfig(this.kdfConfig);\n await this.cryptoService.setMasterKey(masterKey);\n await this.cryptoService.setUserKey(userKey[0]);\n await this.cryptoService.setPrivateKey(keyPair[1].encryptedString);\n\n const localMasterKeyHash = await this.cryptoService.hashMasterKey(\n this.masterPassword,\n masterKey,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setMasterKeyHash(localMasterKeyHash);\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/auth/components/set-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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: PasswordGenerationServiceAbstraction,\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 dialogService: DialogService\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 dialogService\n );\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 {{ \"attachmentFixDescription\" | 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/platform/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { AttachmentView } from \"@bitwarden/common/vault/models/view/attachment.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\n@Component({\n selector: \"emergency-access-attachments\",\n templateUrl: \"../../../vault/individual-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 dialogService: DialogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService,\n dialogService\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","
\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
\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 { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password/\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { DialogService } from \"@bitwarden/components\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../../vault/individual-vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../../vault/individual-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: PasswordGenerationServiceAbstraction,\n messagingService: MessagingService,\n eventCollectionService: EventCollectionService,\n policyService: PolicyService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n logService: LogService,\n sendApiService: SendApiService,\n dialogService: DialogService,\n datePipe: DatePipe\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 sendApiService,\n dialogService,\n datePipe\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 { EmergencyAccessViewResponse } from \"@bitwarden/common/auth/models/response/emergency-access.response\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport {\n SymmetricCryptoKey,\n UserKey,\n} from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\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 oldUserKey = new SymmetricCryptoKey(oldKeyBuffer) as UserKey;\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(oldUserKey).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 EmergencyAccessType {\n View = 0,\n Takeover = 1,\n}\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergency-access-type\";\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\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 { EmergencyAccessType } from \"@bitwarden/common/auth/enums/emergency-access-type\";\nimport { EmergencyAccessInviteRequest } from \"@bitwarden/common/auth/models/request/emergency-access-invite.request\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/auth/models/request/emergency-access-update.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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/platform/abstractions/crypto.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/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);\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/auth/components/change-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyData } from \"@bitwarden/common/admin-console/models/data/policy.data\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { PolicyResponse } from \"@bitwarden/common/admin-console/models/response/policy.response\";\nimport { KdfConfig } from \"@bitwarden/common/auth/models/domain/kdf-config\";\nimport { EmergencyAccessPasswordRequest } from \"@bitwarden/common/auth/models/request/emergency-access-password.request\";\nimport { KdfType } from \"@bitwarden/common/enums\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport {\n SymmetricCryptoKey,\n UserKey,\n} from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { DialogService } from \"@bitwarden/components\";\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: PasswordGenerationServiceAbstraction,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private apiService: ApiService,\n private logService: LogService,\n dialogService: DialogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService,\n dialogService\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 oldUserKey = new SymmetricCryptoKey(oldKeyBuffer) as UserKey;\n\n if (oldUserKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unexpectedError\")\n );\n return;\n }\n\n const masterKey = await this.cryptoService.makeMasterKey(\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 masterKeyHash = await this.cryptoService.hashMasterKey(this.masterPassword, masterKey);\n\n const encKey = await this.cryptoService.encryptUserKeyWithMasterKey(masterKey, oldUserKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterKeyHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"emergencyAccess\" | i18n }}

\n
\n

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

\n\n

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

\n\n
\n

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

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

{{ \"noTrustedContacts\" | i18n }}

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

{{ \"designatedEmergencyContacts\" | i18n }}

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

{{ \"noGrantedAccess\" | i18n }}

\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { UserNamePipe } from \"@bitwarden/angular/pipes/user-name.pipe\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { EmergencyAccessStatusType } from \"@bitwarden/common/auth/enums/emergency-access-status-type\";\nimport { EmergencyAccessType } from \"@bitwarden/common/auth/enums/emergency-access-type\";\nimport { EmergencyAccessConfirmRequest } from \"@bitwarden/common/auth/models/request/emergency-access-confirm.request\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n} from \"@bitwarden/common/auth/models/response/emergency-access.response\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { DialogService } from \"@bitwarden/components\";\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 protected dialogService: DialogService\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.dialogService.openSimpleDialog({\n title: this.userNamePipe.transform(details),\n content: { key: \"removeUserConfirmation\" },\n type: \"warning\",\n });\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.dialogService.openSimpleDialog({\n title: this.userNamePipe.transform(details),\n content: {\n key: \"requestAccessConfirmation\",\n placeholders: [details.waitTimeDays.toString()],\n },\n acceptButtonText: { key: \"requestAccess\" },\n type: \"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.dialogService.openSimpleDialog({\n title: this.userNamePipe.transform(details),\n content: {\n key: \"approveAccessConfirmation\",\n placeholders: [this.userNamePipe.transform(details), type],\n },\n acceptButtonText: { key: \"approve\" },\n type: \"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 user key with the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const userKey = await this.cryptoService.getUserKey();\n if (!userKey) {\n throw new Error(\"No user key found\");\n }\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)).join(\"-\")\n );\n } catch {\n // Ignore errors since it's just a debug message\n }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\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/auth/components/sso.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrgDomainApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization-domain/org-domain-api.service.abstraction\";\nimport { OrganizationDomainSsoDetailsResponse } from \"@bitwarden/common/abstractions/organization-domain/responses/organization-domain-sso-details.response\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { HttpStatusCode } from \"@bitwarden/common/enums\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\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: PasswordGenerationServiceAbstraction,\n logService: LogService,\n private orgDomainApiService: OrgDomainApiServiceAbstraction,\n private loginService: LoginService,\n private validationService: ValidationService,\n configService: ConfigServiceAbstraction\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 configService\n );\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngOnInit() {\n super.ngOnInit();\n\n // if we have an emergency access invite, redirect to emergency access\n const emergencyAccessInvite = await this.stateService.getEmergencyAccessInvitation();\n if (emergencyAccessInvite != null) {\n this.onSuccessfulLoginNavigate = async () => {\n this.router.navigate([\"/accept-emergency\"], {\n queryParams: {\n id: emergencyAccessInvite.id,\n name: emergencyAccessInvite.name,\n email: emergencyAccessInvite.email,\n token: emergencyAccessInvite.token,\n },\n });\n };\n }\n\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 // SSO Org Identifier in query params takes precedence over claimed domains\n this.identifier = qParams.identifier;\n } else {\n // Note: this flow is written for web but both browser and desktop\n // redirect here on SSO button click.\n\n // Check if email matches any claimed domains\n if (qParams.email) {\n // show loading spinner\n this.loggingIn = true;\n try {\n const response: OrganizationDomainSsoDetailsResponse =\n await this.orgDomainApiService.getClaimedOrgDomainByEmail(qParams.email);\n\n if (response?.ssoAvailable) {\n this.identifier = response.organizationIdentifier;\n await this.submit();\n return;\n }\n } catch (error) {\n this.handleGetClaimedDomainByEmailError(error);\n }\n\n this.loggingIn = false;\n }\n\n // Fallback to state svc if domain is unclaimed\n const storedIdentifier = await this.stateService.getSsoOrgIdentifier();\n if (storedIdentifier != null) {\n this.identifier = storedIdentifier;\n }\n }\n });\n }\n\n private handleGetClaimedDomainByEmailError(error: any): void {\n if (error instanceof ErrorResponse) {\n const errorResponse: ErrorResponse = error as ErrorResponse;\n switch (errorResponse.statusCode) {\n case HttpStatusCode.NotFound:\n //this is a valid case for a domain not found\n return;\n\n default:\n this.validationService.showError(errorResponse);\n break;\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 session: 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 {{ 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 { CaptchaProtectedRequest } from \"../../auth/models/request/captcha-protected.request\";\nimport { KdfType } from \"../../enums\";\n\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 \"../platform/abstractions/form-validation-errors.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/auth/abstractions/auth.service\";\nimport { PasswordLogInCredentials } from \"@bitwarden/common/auth/models/domain/log-in-credentials\";\nimport { RegisterResponse } from \"@bitwarden/common/auth/models/response/register.response\";\nimport { DEFAULT_KDF_CONFIG, DEFAULT_KDF_TYPE } from \"@bitwarden/common/enums\";\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 { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport {\n AllValidationErrors,\n FormValidationErrorsService,\n} from \"../../platform/abstractions/form-validation-errors.service\";\nimport { PasswordColorText } from \"../../shared/components/password-strength/password-strength.component\";\nimport { InputsFieldMatch } from \"../../validators/inputsFieldMatch.validator\";\n\nimport { CaptchaProtectedComponent } from \"./captcha-protected.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 = Utils.minimumPasswordLength;\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: PasswordGenerationServiceAbstraction,\n environmentService: EnvironmentService,\n protected logService: LogService,\n protected auditService: AuditService,\n protected dialogService: DialogService\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 case \"minlength\":\n return this.i18nService.t(\"masterPasswordMinlength\", Utils.minimumPasswordLength);\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.dialogService.openSimpleDialog({\n title: { key: \"weakAndExposedMasterPassword\" },\n content: { key: \"weakAndBreachedMasterPasswordDesc\" },\n type: \"warning\",\n });\n\n if (!result) {\n return { isValid: false };\n }\n } else if (passwordWeak) {\n const result = await this.dialogService.openSimpleDialog({\n title: { key: \"weakMasterPassword\" },\n content: { key: \"weakMasterPasswordDesc\" },\n type: \"warning\",\n });\n\n if (!result) {\n return { isValid: false };\n }\n } else if (passwordLeak) {\n const result = await this.dialogService.openSimpleDialog({\n title: { key: \"exposedMasterPassword\" },\n content: { key: \"exposedMasterPasswordDesc\" },\n type: \"warning\",\n });\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.makeMasterKey(masterPassword, email, kdf, kdfConfig);\n const newUserKey = await this.cryptoService.makeUserKey(key);\n const masterKeyHash = await this.cryptoService.hashMasterKey(masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(newUserKey[0]);\n const request = new RegisterRequest(\n email,\n name,\n masterKeyHash,\n hint,\n newUserKey[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\" | i18n }}\n {{ \"masterPassImportant\" | i18n }} {{ characterMinimumMessage }}\n \n \n \n \n
\n\n
\n \n {{ \"reTypeMasterPass\" | i18n }}\n \n \n \n
\n\n
\n \n {{ \"masterPassHintLabel\" | i18n }}\n \n {{ \"masterPassHintDesc\" | i18n }}\n \n
\n\n
\n \n
\n
\n \n {{ \"checkForBreaches\" | i18n }}\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 {{ \"createAccount\" | i18n }}\n \n \n \n \n {{ \"logIn\" | i18n }}\n \n \n
\n

\n {{ \"alreadyHaveAccount\" | i18n }}\n {{ \"logIn\" | i18n }}\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/auth/components/register.component\";\nimport { FormValidationErrorsService } from \"@bitwarden/angular/platform/abstractions/form-validation-errors.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { DialogService } from \"@bitwarden/components\";\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 characterMinimumMessage: string;\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: PasswordGenerationServiceAbstraction,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService,\n auditService: AuditService,\n dialogService: DialogService\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 dialogService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.referenceData = this.referenceDataValue;\n\n if (this.queryParamEmail) {\n this.formGroup.get(\"email\")?.setValue(this.queryParamEmail);\n }\n\n if (this.enforcedPolicyOptions != null && this.enforcedPolicyOptions.minLength > 0) {\n this.characterMinimumMessage = \"\";\n } else {\n this.characterMinimumMessage = this.i18nService.t(\"characterMinimum\", this.minimumLength);\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 { FormGroup } from \"@angular/forms\";\n\nimport { PlanType } from \"@bitwarden/common/billing/enums\";\nimport { ProductType } from \"@bitwarden/common/enums\";\n\nimport { OrganizationPlansComponent } from \"../../organizations\";\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 async ngOnInit() {\n const additionalSeats =\n this.product == ProductType.Families || this.plan === PlanType.TeamsStarter ? 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-teams3-content\",\n templateUrl: \"teams3-content.component.html\",\n})\nexport class Teams3ContentComponent {}\n","

Begin Teams Starter 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
  • Powerful security for up to 10 users
  • \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

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

\n {{ \"startYour7DayFreeTrialOfBitwardenFor\" | i18n : orgDisplayName }}\n

\n \n
\n \n \n \n \n \n \n \n {{ \"next\" | i18n }}\n \n \n \n \n \n \n \n
\n \n \n {{ \"inviteUsers\" | i18n }}\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 { PolicyApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyData } from \"@bitwarden/common/admin-console/models/data/policy.data\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { PlanType } from \"@bitwarden/common/billing/enums\";\nimport { ProductType } from \"@bitwarden/common/enums\";\nimport { ReferenceEventRequest } from \"@bitwarden/common/models/request/reference-event.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 teamsStarter = \"teamsStarter\",\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 teams3 = \"teams3\",\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.teamsStarter,\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 } else {\n // Matches \"_ga_QBRN562QQQ=value1.value2.session\" and captures values and session.\n const regex = /_ga_QBRN562QQQ=([^.]+)\\.([^.]+)\\.(\\d+)/;\n const match = document.cookie.match(regex);\n if (match) {\n this.referenceData.session = match[3];\n }\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.orgDisplayName);\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.teamsStarter) {\n this.plan = PlanType.TeamsStarter;\n this.product = ProductType.TeamsStarter;\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 \" +\n this.titleCasePipe.transform(this.orgDisplayName) +\n \" 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, \"members\"]);\n }\n\n previousStep() {\n this.verticalStepper.previous();\n }\n\n get orgDisplayName() {\n if (this.org === \"teamsStarter\") {\n return \"Teams Starter\";\n }\n\n return this.org;\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 \"../platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../platform/abstractions/platform-utils.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, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\nimport * as DuoWebSDK from \"duo_web_sdk\";\nimport { first } from \"rxjs/operators\";\n\n// eslint-disable-next-line no-restricted-imports\nimport { WINDOW } from \"@bitwarden/angular/services/injection-tokens\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { TwoFactorService } from \"@bitwarden/common/auth/abstractions/two-factor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { AuthResult } from \"@bitwarden/common/auth/models/domain/auth-result\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { TrustedDeviceUserDecryptionOption } from \"@bitwarden/common/auth/models/domain/user-decryption-options/trusted-device-user-decryption-option\";\nimport { TokenTwoFactorRequest } from \"@bitwarden/common/auth/models/request/identity-token/token-two-factor.request\";\nimport { TwoFactorEmailRequest } from \"@bitwarden/common/auth/models/request/two-factor-email.request\";\nimport { TwoFactorProviders } from \"@bitwarden/common/auth/services/two-factor.service\";\nimport { WebAuthnIFrame } from \"@bitwarden/common/auth/webauthn-iframe\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { AccountDecryptionOptions } from \"@bitwarden/common/platform/models/domain/account\";\n\nimport { CaptchaProtectedComponent } from \"./captcha-protected.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 orgIdentifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n onSuccessfulLoginTde: () => Promise;\n onSuccessfulLoginTdeNavigate: () => Promise;\n\n protected loginRoute = \"login\";\n\n protected trustedDeviceEncRoute = \"login-initiated\";\n protected changePasswordRoute = \"set-password\";\n protected forcePasswordResetRoute = \"update-temp-password\";\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 @Inject(WINDOW) 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 protected configService: ConfigServiceAbstraction\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.orgIdentifier = 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 authResult: AuthResult = await this.formPromise;\n\n await this.handleLoginResponse(authResult);\n }\n\n protected handleMigrateEncryptionKey(result: AuthResult): boolean {\n if (!result.requiresEncryptionKeyMigration) {\n return false;\n }\n\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccured\"),\n this.i18nService.t(\"encryptionKeyMigrationRequired\")\n );\n return true;\n }\n\n private async handleLoginResponse(authResult: AuthResult) {\n if (this.handleCaptchaRequired(authResult)) {\n return;\n } else if (this.handleMigrateEncryptionKey(authResult)) {\n return;\n }\n\n // Save off the OrgSsoIdentifier for use in the TDE flows\n // - TDE login decryption options component\n // - Browser SSO on extension open\n await this.stateService.setUserSsoOrganizationIdentifier(this.orgIdentifier);\n\n this.loginService.clearValues();\n\n const acctDecryptionOpts: AccountDecryptionOptions =\n await this.stateService.getAccountDecryptionOptions();\n\n const tdeEnabled = await this.isTrustedDeviceEncEnabled(acctDecryptionOpts.trustedDeviceOption);\n\n if (tdeEnabled) {\n return await this.handleTrustedDeviceEncryptionEnabled(\n authResult,\n this.orgIdentifier,\n acctDecryptionOpts\n );\n }\n\n // User must set password if they don't have one and they aren't using either TDE or key connector.\n const requireSetPassword =\n !acctDecryptionOpts.hasMasterPassword && acctDecryptionOpts.keyConnectorOption === undefined;\n\n if (requireSetPassword || authResult.resetMasterPassword) {\n // Change implies going no password -> password in this case\n return await this.handleChangePasswordRequired(this.orgIdentifier);\n }\n\n // Users can be forced to reset their password via an admin or org policy\n // disallowing weak passwords\n if (authResult.forcePasswordReset !== ForceResetPasswordReason.None) {\n return await this.handleForcePasswordReset(this.orgIdentifier);\n }\n\n return await this.handleSuccessfulLogin();\n }\n\n private async isTrustedDeviceEncEnabled(\n trustedDeviceOption: TrustedDeviceUserDecryptionOption\n ): Promise {\n const ssoTo2faFlowActive = this.route.snapshot.queryParamMap.get(\"sso\") === \"true\";\n const trustedDeviceEncryptionFeatureActive = await this.configService.getFeatureFlag(\n FeatureFlag.TrustedDeviceEncryption\n );\n\n return (\n ssoTo2faFlowActive &&\n trustedDeviceEncryptionFeatureActive &&\n trustedDeviceOption !== undefined\n );\n }\n\n private async handleTrustedDeviceEncryptionEnabled(\n authResult: AuthResult,\n orgIdentifier: string,\n acctDecryptionOpts: AccountDecryptionOptions\n ): Promise {\n // If user doesn't have a MP, but has reset password permission, they must set a MP\n if (\n !acctDecryptionOpts.hasMasterPassword &&\n acctDecryptionOpts.trustedDeviceOption.hasManageResetPasswordPermission\n ) {\n // Change implies going no password -> password in this case\n return await this.handleChangePasswordRequired(orgIdentifier);\n }\n\n // Users can be forced to reset their password via an admin or org policy disallowing weak passwords\n // Note: this is different from SSO component login flow as a user can\n // login with MP and then have to pass 2FA to finish login and we can actually\n // evaluate if they have a weak password at this time.\n if (authResult.forcePasswordReset !== ForceResetPasswordReason.None) {\n return await this.handleForcePasswordReset(orgIdentifier);\n }\n\n if (this.onSuccessfulLoginTde != null) {\n // Note: awaiting this will currently cause a hang on desktop & browser as they will wait for a full sync to complete\n // before navigating to the success route.\n this.onSuccessfulLoginTde();\n }\n\n this.navigateViaCallbackOrRoute(\n this.onSuccessfulLoginTdeNavigate,\n // Navigate to TDE page (if user was on trusted device and TDE has decrypted\n // their user key, the login-initiated guard will redirect them to the vault)\n [this.trustedDeviceEncRoute]\n );\n }\n\n private async handleChangePasswordRequired(orgIdentifier: string) {\n await this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdentifier,\n },\n });\n }\n\n private async handleForcePasswordReset(orgIdentifier: string) {\n this.router.navigate([this.forcePasswordResetRoute], {\n queryParams: {\n identifier: orgIdentifier,\n },\n });\n }\n\n private async handleSuccessfulLogin() {\n if (this.onSuccessfulLogin != null) {\n // Note: awaiting this will currently cause a hang on desktop & browser as they will wait for a full sync to complete\n // before navigating to the success route.\n this.onSuccessfulLogin();\n }\n await this.navigateViaCallbackOrRoute(this.onSuccessfulLoginNavigate, [this.successRoute]);\n }\n\n private async navigateViaCallbackOrRoute(\n callback: () => Promise,\n commands: unknown[],\n extras?: NavigationExtras\n ): Promise {\n if (callback) {\n await callback();\n } else {\n await this.router.navigate(commands, extras);\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 if (this.authService.email == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"sessionTimeout\")\n );\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.ssoEmail2FaSessionToken = this.authService.ssoEmail2FaSessionToken;\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 { TwoFactorService } from \"@bitwarden/common/auth/abstractions/two-factor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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://vault.bitwarden.com/#/recover-2fa\");\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/auth/components/two-factor-options.component\";\nimport { TwoFactorService } from \"@bitwarden/common/auth/abstractions/two-factor.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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, Inject, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from \"@bitwarden/angular/auth/components/two-factor.component\";\nimport { WINDOW } from \"@bitwarden/angular/services/injection-tokens\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { TwoFactorService } from \"@bitwarden/common/auth/abstractions/two-factor.service\";\nimport { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { AuthResult } from \"@bitwarden/common/auth/models/domain/auth-result\";\nimport { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.service\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 configService: ConfigServiceAbstraction,\n @Inject(WINDOW) protected win: Window\n ) {\n super(\n authService,\n router,\n i18nService,\n apiService,\n platformUtilsService,\n win,\n environmentService,\n stateService,\n route,\n logService,\n twoFactorService,\n appIdService,\n loginService,\n configService\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 protected override handleMigrateEncryptionKey(result: AuthResult): boolean {\n if (!result.requiresEncryptionKeyMigration) {\n return false;\n }\n this.router.navigate([\"migrate-legacy-encryption\"]);\n return true;\n }\n\n goAfterLogIn = async () => {\n this.loginService.clearValues();\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n // if we have an emergency access invite, redirect to emergency access\n const emergencyAccessInvite = await this.stateService.getEmergencyAccessInvitation();\n if (emergencyAccessInvite != null) {\n this.router.navigate([\"/accept-emergency\"], {\n queryParams: {\n id: emergencyAccessInvite.id,\n name: emergencyAccessInvite.name,\n email: emergencyAccessInvite.email,\n token: emergencyAccessInvite.token,\n },\n });\n return;\n }\n\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.orgIdentifier,\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 { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { PasswordRequest } from \"@bitwarden/common/auth/models/request/password.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { MasterKey, UserKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\nimport { DialogService } from \"@bitwarden/components\";\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: PasswordGenerationServiceAbstraction,\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 dialogService: DialogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService,\n dialogService\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 newMasterKeyHash: string,\n newMasterKey: MasterKey,\n newUserKey: [UserKey, EncString]\n ) {\n try {\n // Create Request\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashMasterKey(\n this.currentMasterPassword,\n await this.cryptoService.getOrDeriveMasterKey(this.currentMasterPassword)\n );\n request.newMasterPasswordHash = newMasterKeyHash;\n request.key = newUserKey[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/auth/components/update-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { DialogService } from \"@bitwarden/components\";\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: PasswordGenerationServiceAbstraction,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n userVerificationService: UserVerificationService,\n dialogService: DialogService\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 dialogService\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\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { PasswordRequest } from \"@bitwarden/common/auth/models/request/password.request\";\nimport { UpdateTempPasswordRequest } from \"@bitwarden/common/auth/models/request/update-temp-password.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { MasterKey, UserKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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 reason: ForceResetPasswordReason = ForceResetPasswordReason.None;\n verification: Verification = {\n type: VerificationType.MasterPassword,\n secret: \"\",\n };\n\n onSuccessfulChangePassword: () => Promise;\n\n get requireCurrentPassword(): boolean {\n return this.reason === ForceResetPasswordReason.WeakMasterPassword;\n }\n\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationServiceAbstraction,\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 private userVerificationService: UserVerificationService,\n private router: Router,\n dialogService: DialogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService,\n dialogService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n\n this.reason = await this.stateService.getForcePasswordResetReason();\n\n // If we somehow end up here without a reason, go back to the home page\n if (this.reason == ForceResetPasswordReason.None) {\n this.router.navigate([\"/\"]);\n return;\n }\n\n await super.ngOnInit();\n }\n\n get masterPasswordWarningText(): string {\n return this.reason == ForceResetPasswordReason.WeakMasterPassword\n ? this.i18nService.t(\"updateWeakMasterPasswordWarning\")\n : this.i18nService.t(\"updateMasterPasswordWarning\");\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 newMasterKey = await this.cryptoService.makeMasterKey(\n this.masterPassword,\n this.email.trim().toLowerCase(),\n this.kdf,\n this.kdfConfig\n );\n const newPasswordHash = await this.cryptoService.hashMasterKey(\n this.masterPassword,\n newMasterKey\n );\n\n // Grab user key\n const userKey = await this.cryptoService.getUserKey();\n\n // Encrypt user key with new master key\n const newProtectedUserKey = await this.cryptoService.encryptUserKeyWithMasterKey(\n newMasterKey,\n userKey\n );\n\n await this.performSubmitActions(newPasswordHash, newMasterKey, newProtectedUserKey);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n masterKey: MasterKey,\n userKey: [UserKey, EncString]\n ) {\n try {\n switch (this.reason) {\n case ForceResetPasswordReason.AdminForcePasswordReset:\n this.formPromise = this.updateTempPassword(masterPasswordHash, userKey);\n break;\n case ForceResetPasswordReason.WeakMasterPassword:\n this.formPromise = this.updatePassword(masterPasswordHash, userKey);\n break;\n }\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedMasterPassword\")\n );\n\n await this.stateService.setForcePasswordResetReason(ForceResetPasswordReason.None);\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 private async updateTempPassword(masterPasswordHash: string, userKey: [UserKey, EncString]) {\n const request = new UpdateTempPasswordRequest();\n request.key = userKey[1].encryptedString;\n request.newMasterPasswordHash = masterPasswordHash;\n request.masterPasswordHint = this.hint;\n\n return this.apiService.putUpdateTempPassword(request);\n }\n\n private async updatePassword(newMasterPasswordHash: string, userKey: [UserKey, EncString]) {\n const request = await this.userVerificationService.buildRequest(\n this.verification,\n PasswordRequest\n );\n request.masterPasswordHint = this.hint;\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = userKey[1].encryptedString;\n\n return this.apiService.postPassword(request);\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n \n {{ masterPasswordWarningText }} \n \n \n \n {{ \"currentMasterPass\" | i18n }}\n \n \n \n
\n \n {{ \"newMasterPass\" | i18n }}\n \n \n \n \n \n
\n \n {{ \"confirmNewMasterPass\" | i18n }}\n \n \n \n \n {{ \"masterPassHint\" | i18n }}\n \n {{ \"masterPassHintDesc\" | i18n }}\n \n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n
\n
\n
\n \n
\n","import { Component } from \"@angular/core\";\n\nimport { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from \"@bitwarden/angular/auth/components/update-temp-password.component\";\n\n@Component({\n selector: \"app-update-temp-password\",\n templateUrl: \"update-temp-password.component.html\",\n})\nexport class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent {}\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 { VerifyEmailRequest } from \"@bitwarden/common/models/request/verify-email.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 { VerifyDeleteRecoverRequest } from \"@bitwarden/common/models/request/verify-delete-recover.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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 { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-user-layout\",\n templateUrl: \"user-layout.component.html\",\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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/auth/abstractions/account-api.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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 { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { EmailTokenRequest } from \"@bitwarden/common/auth/models/request/email-token.request\";\nimport { EmailRequest } from \"@bitwarden/common/auth/models/request/email.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 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.hashMasterKey(\n this.masterPassword,\n await this.cryptoService.getOrDeriveMasterKey(this.masterPassword)\n );\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.hashMasterKey(\n this.masterPassword,\n await this.cryptoService.getOrDeriveMasterKey(this.masterPassword)\n );\n const kdf = await this.stateService.getKdfType();\n const kdfConfig = await this.stateService.getKdfConfig();\n const newMasterKey = await this.cryptoService.makeMasterKey(\n this.masterPassword,\n this.newEmail,\n kdf,\n kdfConfig\n );\n request.newMasterPasswordHash = await this.cryptoService.hashMasterKey(\n this.masterPassword,\n newMasterKey\n );\n const newUserKey = await this.cryptoService.encryptUserKeyWithMasterKey(newMasterKey);\n request.key = newUserKey[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","
\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\n\nimport { DeauthorizeSessionsComponent } from \"../auth/settings/deauthorize-sessions.component\";\n\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 userVerificationService: UserVerificationService\n ) {}\n\n async ngOnInit() {\n this.showChangeEmail = await this.userVerificationService.hasMasterPassword();\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","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 { UpdateDomainsRequest } from \"@bitwarden/common/models/request/update-domains.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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 { Directive, Input, OnChanges, OnDestroy, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport { filter, map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { VaultTimeoutAction } from \"@bitwarden/common/enums/vault-timeout-action.enum\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\ninterface VaultTimeoutFormValue {\n vaultTimeout: number | null;\n custom: {\n hours: number | null;\n minutes: number | null;\n };\n}\n\n@Directive()\nexport class VaultTimeoutInputComponent\n implements ControlValueAccessor, Validator, OnInit, OnDestroy, OnChanges\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() vaultTimeoutOptions: { name: string; value: number }[];\n vaultTimeoutPolicy: Policy;\n vaultTimeoutPolicyHours: number;\n vaultTimeoutPolicyMinutes: number;\n\n protected canLockVault$: Observable;\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 vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .get$(PolicyType.MaximumVaultTimeout)\n .pipe(\n filter((policy) => policy != null),\n takeUntil(this.destroy$)\n )\n .subscribe((policy) => {\n this.vaultTimeoutPolicy = policy;\n this.applyVaultTimeoutPolicy();\n });\n\n this.form.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: VaultTimeoutFormValue) => {\n if (this.onChange) {\n this.onChange(this.getVaultTimeout(value));\n }\n });\n\n // Assign the current value to the custom fields\n // so that if the user goes from a numeric value to custom\n // we can initialize the custom fields with the current value\n // ex: user picks 5 min, goes to custom, we want to show 0 hr, 5 min in the custom fields\n this.form.controls.vaultTimeout.valueChanges\n .pipe(\n filter((value) => value !== VaultTimeoutInputComponent.CUSTOM_VALUE),\n takeUntil(this.destroy$)\n )\n .subscribe((value) => {\n const current = Math.max(value, 0);\n\n // This cannot emit an event b/c it would cause form.valueChanges to fire again\n // and we are already handling that above so just silently update\n // custom fields when vaultTimeout changes to a non-custom value\n this.form.patchValue(\n {\n custom: {\n hours: Math.floor(current / 60),\n minutes: current % 60,\n },\n },\n { emitEvent: false }\n );\n });\n\n this.canLockVault$ = this.vaultTimeoutSettingsService\n .availableVaultTimeoutActions$()\n .pipe(map((actions) => actions.includes(VaultTimeoutAction.Lock)));\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges() {\n if (\n !this.vaultTimeoutOptions.find((p) => p.value === VaultTimeoutInputComponent.CUSTOM_VALUE)\n ) {\n this.vaultTimeoutOptions.push({\n name: this.i18nService.t(\"custom\"),\n value: VaultTimeoutInputComponent.CUSTOM_VALUE,\n });\n }\n }\n\n getVaultTimeout(value: VaultTimeoutFormValue) {\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.vaultTimeoutOptions.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.vaultTimeoutOptions = this.vaultTimeoutOptions.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
\n \n \n \n \n {{\n ((canLockVault$ | async) ? \"vaultTimeoutDesc\" : \"vaultTimeoutLogoutDesc\") | i18n\n }}\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 \"vaultTimeoutPolicyWithActionInEffect\"\n | i18n : policy.timeout.hours : policy.timeout.minutes : (policy.action | i18n)\n }}\n \n \n {{ \"vaultTimeoutPolicyInEffect\" | i18n : policy.timeout.hours : policy.timeout.minutes }}\n \n \n {{ \"vaultTimeoutActionPolicyInEffect\" | i18n : (policy.action | i18n) }}\n \n \n \n \n
\n
\n \n
1\" class=\"form-group\">\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 { FormBuilder } from \"@angular/forms\";\nimport { concatMap, filter, firstValueFrom, map, Observable, Subject, takeUntil, tap } from \"rxjs\";\n\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { SettingsService } from \"@bitwarden/common/abstractions/settings.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { ThemeType } from \"@bitwarden/common/enums\";\nimport { VaultTimeoutAction } from \"@bitwarden/common/enums/vault-timeout-action.enum\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { DialogService } from \"@bitwarden/components\";\n\n@Component({\n selector: \"app-preferences\",\n templateUrl: \"preferences.component.html\",\n})\nexport class PreferencesComponent implements OnInit {\n // For use in template\n protected readonly VaultTimeoutAction = VaultTimeoutAction;\n\n protected availableVaultTimeoutActions$: Observable;\n\n vaultTimeoutPolicyCallout: Observable<{\n timeout: { hours: number; minutes: number };\n action: VaultTimeoutAction;\n }>;\n vaultTimeoutOptions: { name: string; value: number }[];\n localeOptions: any[];\n themeOptions: any[];\n\n private startingLocale: string;\n private startingTheme: ThemeType;\n private destroy$ = new Subject();\n\n form = this.formBuilder.group({\n vaultTimeout: [null as number | null],\n vaultTimeoutAction: [VaultTimeoutAction.Lock],\n enableFavicons: true,\n enableFullWidth: false,\n theme: [ThemeType.Light],\n locale: [null as string | null],\n });\n\n constructor(\n private formBuilder: FormBuilder,\n private policyService: PolicyService,\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 private settingsService: SettingsService,\n private dialogService: DialogService\n ) {\n this.vaultTimeoutOptions = [\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.vaultTimeoutOptions.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.availableVaultTimeoutActions$ =\n this.vaultTimeoutSettingsService.availableVaultTimeoutActions$();\n\n this.vaultTimeoutPolicyCallout = this.policyService.get$(PolicyType.MaximumVaultTimeout).pipe(\n filter((policy) => policy != null),\n map((policy) => {\n let timeout;\n if (policy.data?.minutes) {\n timeout = {\n hours: Math.floor(policy.data?.minutes / 60),\n minutes: policy.data?.minutes % 60,\n };\n }\n return { timeout: timeout, action: policy.data?.action };\n }),\n tap((policy) => {\n if (policy.action) {\n this.form.controls.vaultTimeoutAction.disable({ emitEvent: false });\n } else {\n this.form.controls.vaultTimeoutAction.enable({ emitEvent: false });\n }\n })\n );\n\n this.form.controls.vaultTimeoutAction.valueChanges\n .pipe(\n concatMap(async (action) => {\n if (action === VaultTimeoutAction.LogOut) {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"vaultTimeoutLogOutConfirmationTitle\" },\n content: { key: \"vaultTimeoutLogOutConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n this.form.controls.vaultTimeoutAction.patchValue(VaultTimeoutAction.Lock, {\n emitEvent: false,\n });\n return;\n }\n }\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n const initialFormValues = {\n vaultTimeout: await this.vaultTimeoutSettingsService.getVaultTimeout(),\n vaultTimeoutAction: await firstValueFrom(\n this.vaultTimeoutSettingsService.vaultTimeoutAction$()\n ),\n enableFavicons: !(await this.settingsService.getDisableFavicon()),\n enableFullWidth: await this.stateService.getEnableFullWidth(),\n theme: await this.stateService.getTheme(),\n locale: (await this.stateService.getLocale()) ?? null,\n };\n this.startingLocale = initialFormValues.locale;\n this.startingTheme = initialFormValues.theme;\n this.form.setValue(initialFormValues, { emitEvent: false });\n }\n\n async submit() {\n if (!this.form.controls.vaultTimeout.valid) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"vaultTimeoutRangeError\")\n );\n return;\n }\n const values = this.form.value;\n\n await this.vaultTimeoutSettingsService.setVaultTimeoutOptions(\n values.vaultTimeout,\n values.vaultTimeoutAction\n );\n await this.settingsService.setDisableFavicon(!values.enableFavicons);\n await this.stateService.setEnableFullWidth(values.enableFullWidth);\n this.messagingService.send(\"setFullWidth\");\n if (values.theme !== this.startingTheme) {\n await this.themingService.updateConfiguredTheme(values.theme);\n this.startingTheme = values.theme;\n }\n await this.stateService.setLocale(values.locale);\n if (values.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 ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const CreatePasskeyFailedIcon = svgIcon`\n\n \n \n \n \n \n \n \n \n \n\n`;\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const CreatePasskeyIcon = svgIcon`\n\n \n \n \n \n \n \n \n \n\n`;\n","import { DialogConfig, DialogRef } from \"@angular/cdk/dialog\";\nimport { Component, OnInit } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { firstValueFrom, map, Observable } from \"rxjs\";\n\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { WebauthnLoginService } from \"../../../core\";\nimport { CredentialCreateOptionsView } from \"../../../core/views/credential-create-options.view\";\n\nimport { CreatePasskeyFailedIcon } from \"./create-passkey-failed.icon\";\nimport { CreatePasskeyIcon } from \"./create-passkey.icon\";\n\nexport enum CreateCredentialDialogResult {\n Success,\n}\n\ntype Step =\n | \"userVerification\"\n | \"credentialCreation\"\n | \"credentialCreationFailed\"\n | \"credentialNaming\";\n\n@Component({\n templateUrl: \"create-credential-dialog.component.html\",\n})\nexport class CreateCredentialDialogComponent implements OnInit {\n protected readonly NameMaxCharacters = 50;\n protected readonly CreateCredentialDialogResult = CreateCredentialDialogResult;\n protected readonly Icons = { CreatePasskeyIcon, CreatePasskeyFailedIcon };\n\n protected currentStep: Step = \"userVerification\";\n protected formGroup = this.formBuilder.group({\n userVerification: this.formBuilder.group({\n masterPassword: [\"\", [Validators.required]],\n }),\n credentialNaming: this.formBuilder.group({\n name: [\"\", Validators.maxLength(50)],\n }),\n });\n protected credentialOptions?: CredentialCreateOptionsView;\n protected deviceResponse?: PublicKeyCredential;\n protected hasPasskeys$?: Observable;\n protected loading$ = this.webauthnService.loading$;\n\n constructor(\n private formBuilder: FormBuilder,\n private dialogRef: DialogRef,\n private webauthnService: WebauthnLoginService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n ngOnInit(): void {\n this.hasPasskeys$ = this.webauthnService\n .getCredentials$()\n .pipe(map((credentials) => credentials.length > 0));\n }\n\n protected submit = async () => {\n this.dialogRef.disableClose = true;\n\n try {\n switch (this.currentStep) {\n case \"userVerification\":\n return await this.submitUserVerification();\n case \"credentialCreationFailed\":\n return await this.submitCredentialCreationFailed();\n case \"credentialCreation\":\n return await this.submitCredentialCreation();\n case \"credentialNaming\":\n return await this.submitCredentialNaming();\n }\n } finally {\n this.dialogRef.disableClose = false;\n }\n };\n\n protected async submitUserVerification() {\n this.formGroup.controls.userVerification.markAllAsTouched();\n if (this.formGroup.controls.userVerification.invalid) {\n return;\n }\n\n try {\n this.credentialOptions = await this.webauthnService.getCredentialCreateOptions({\n type: VerificationType.MasterPassword,\n secret: this.formGroup.value.userVerification.masterPassword,\n });\n } catch (error) {\n if (error instanceof ErrorResponse && error.statusCode === 400) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"error\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n } else {\n this.logService?.error(error);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"unexpectedError\"));\n }\n return;\n }\n\n this.currentStep = \"credentialCreation\";\n await this.submitCredentialCreation();\n }\n\n protected async submitCredentialCreation() {\n this.deviceResponse = await this.webauthnService.createCredential(this.credentialOptions);\n if (this.deviceResponse === undefined) {\n this.currentStep = \"credentialCreationFailed\";\n return;\n }\n\n this.currentStep = \"credentialNaming\";\n }\n\n protected async submitCredentialCreationFailed() {\n this.currentStep = \"credentialCreation\";\n await this.submitCredentialCreation();\n }\n\n protected async submitCredentialNaming() {\n this.formGroup.controls.credentialNaming.markAllAsTouched();\n if (this.formGroup.controls.credentialNaming.invalid) {\n return;\n }\n\n const name = this.formGroup.value.credentialNaming.name;\n try {\n await this.webauthnService.saveCredential(\n this.credentialOptions,\n this.deviceResponse,\n this.formGroup.value.credentialNaming.name\n );\n } catch (error) {\n this.logService?.error(error);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"unexpectedError\"));\n return;\n }\n\n if (await firstValueFrom(this.hasPasskeys$)) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"passkeySaved\", name)\n );\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"loginWithPasskeyEnabled\")\n );\n }\n\n this.dialogRef.close(CreateCredentialDialogResult.Success);\n }\n}\n\n/**\n * Strongly typed helper to open a CreateCredentialDialog\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 openCreateCredentialDialog = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(\n CreateCredentialDialogComponent,\n config\n );\n};\n","
\n \n {{ \"loginWithPasskey\" | i18n }}\n {{ \"newPasskey\" | i18n }}\n \n \n \n

\n {{ \"passkeyEnterMasterPassword\" | i18n }}\n

\n \n {{ \"masterPassword\" | i18n }}\n \n \n {{ \"confirmIdentity\" | i18n }}\n \n
\n\n
\n \n

{{ \"creatingPasskeyLoading\" | i18n }}

\n

{{ \"creatingPasskeyLoadingInfo\" | i18n }}

\n
\n\n \n \n

{{ \"errorCreatingPasskey\" | i18n }}

\n

{{ \"errorCreatingPasskeyInfo\" | i18n }}

\n \n\n
\n

{{ \"passkeySuccessfullyCreated\" | i18n }}

\n

\n {{ \"customPasskeyNameInfo\" | i18n }}\n

\n \n {{ \"customName\" | i18n }}\n \n {{\n \"charactersCurrentAndMaximum\"\n | i18n : formGroup.value.credentialNaming.name.length : NameMaxCharacters\n }}\n \n
\n
\n \n \n \n \n
\n
\n","
\n \n {{ \"removePasskey\" | i18n }}\n {{\n credential.name\n }}\n \n \n \n \n \n\n \n

{{ \"removePasskeyInfo\" | i18n }}

\n\n \n {{ \"masterPassword\" | i18n }}\n \n \n {{ \"confirmIdentity\" | i18n }}\n \n
\n
\n \n \n \n \n
\n
\n","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { WebauthnLoginService } from \"../../../core\";\nimport { WebauthnCredentialView } from \"../../../core/views/webauth-credential.view\";\n\nexport interface DeleteCredentialDialogParams {\n credentialId: string;\n}\n\n@Component({\n templateUrl: \"delete-credential-dialog.component.html\",\n})\nexport class DeleteCredentialDialogComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n\n protected formGroup = this.formBuilder.group({\n masterPassword: [\"\", [Validators.required]],\n });\n protected credential?: WebauthnCredentialView;\n protected loading$ = this.webauthnService.loading$;\n\n constructor(\n @Inject(DIALOG_DATA) private params: DeleteCredentialDialogParams,\n private formBuilder: FormBuilder,\n private dialogRef: DialogRef,\n private webauthnService: WebauthnLoginService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n ngOnInit(): void {\n this.webauthnService\n .getCredential$(this.params.credentialId)\n .pipe(takeUntil(this.destroy$))\n .subscribe((credential) => (this.credential = credential));\n }\n\n submit = async () => {\n if (this.credential === undefined) {\n return;\n }\n\n this.dialogRef.disableClose = true;\n try {\n await this.webauthnService.deleteCredential(this.credential.id, {\n type: VerificationType.MasterPassword,\n secret: this.formGroup.value.masterPassword,\n });\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passkeyRemoved\"));\n } catch (error) {\n if (error instanceof ErrorResponse && error.statusCode === 400) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"error\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n } else {\n this.logService.error(error);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"unexpectedError\"));\n }\n return false;\n } finally {\n this.dialogRef.disableClose = false;\n }\n\n this.dialogRef.close();\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n\n/**\n * Strongly typed helper to open a DeleteCredentialDialogComponent\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 openDeleteCredentialDialogComponent = (\n dialogService: DialogService,\n config: DialogConfig\n) => {\n return dialogService.open(DeleteCredentialDialogComponent, config);\n};\n","

\n {{ \"loginWithPasskey\" | i18n }}\n \n {{\n \"on\" | i18n\n }}\n {{\n \"off\" | i18n\n }}\n \n \n \n \n

\n

\n {{ \"loginWithPasskeyInfo\" | i18n }}\n {{\n \"learnMoreAboutPasswordless\" | i18n\n }}\n

\n\n\n \n \n \n \n \n
{{ credential.name }}\n \n \n {{ \"supportsEncryption\" | i18n }}\n \n \n {{ \"encryptionNotSupported\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n\n

{{ \"passkeyLimitReachedInfo\" | i18n }}

\n\n\n \n {{ \"newPasskey\" | i18n }}\n \n\n \n {{ \"enable\" | i18n }}\n \n\n","import { Component, HostBinding, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { WebauthnLoginService } from \"../../core\";\nimport { WebauthnCredentialView } from \"../../core/views/webauth-credential.view\";\n\nimport { openCreateCredentialDialog } from \"./create-credential-dialog/create-credential-dialog.component\";\nimport { openDeleteCredentialDialogComponent } from \"./delete-credential-dialog/delete-credential-dialog.component\";\n\n@Component({\n selector: \"app-webauthn-login-settings\",\n templateUrl: \"webauthn-login-settings.component.html\",\n host: {\n \"aria-live\": \"polite\",\n },\n})\nexport class WebauthnLoginSettingsComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n\n protected readonly MaxCredentialCount = WebauthnLoginService.MaxCredentialCount;\n\n protected credentials?: WebauthnCredentialView[];\n protected loading = true;\n\n constructor(\n private webauthnService: WebauthnLoginService,\n private dialogService: DialogService\n ) {}\n\n @HostBinding(\"attr.aria-busy\")\n get ariaBusy() {\n return this.loading ? \"true\" : \"false\";\n }\n\n get hasCredentials() {\n return this.credentials && this.credentials.length > 0;\n }\n\n get hasData() {\n return this.credentials !== undefined;\n }\n\n get limitReached() {\n return this.credentials?.length >= this.MaxCredentialCount;\n }\n\n ngOnInit(): void {\n this.webauthnService\n .getCredentials$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((credentials) => (this.credentials = credentials));\n\n this.webauthnService.loading$\n .pipe(takeUntil(this.destroy$))\n .subscribe((loading) => (this.loading = loading));\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected createCredential() {\n openCreateCredentialDialog(this.dialogService, {});\n }\n\n protected deleteCredential(credentialId: string) {\n openDeleteCredentialDialogComponent(this.dialogService, { data: { credentialId } });\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 {{ \"important\" | i18n }}\n {{ \"masterPassImportant\" | i18n }} {{ characterMinimumMessage }}\n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\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, Observable } from \"rxjs\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"@bitwarden/angular/auth/components/change-password.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.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/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { EmergencyAccessStatusType } from \"@bitwarden/common/auth/enums/emergency-access-status-type\";\nimport { EmergencyAccessUpdateRequest } from \"@bitwarden/common/auth/models/request/emergency-access-update.request\";\nimport { PasswordRequest } from \"@bitwarden/common/auth/models/request/password.request\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.request\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport {\n MasterKey,\n SymmetricCryptoKey,\n UserKey,\n} from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { SendWithIdRequest } from \"@bitwarden/common/tools/send/models/request/send-with-id.request\";\nimport { SendService } from \"@bitwarden/common/tools/send/services/send.service.abstraction\";\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\";\nimport { DialogService } from \"@bitwarden/components\";\n\n@Component({\n selector: \"app-change-password\",\n templateUrl: \"change-password.component.html\",\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateUserKey = false;\n currentMasterPassword: string;\n masterPasswordHint: string;\n checkForBreaches = true;\n characterMinimumMessage = \"\";\n\n protected showWebauthnLoginSettings$: Observable;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationServiceAbstraction,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private auditService: AuditService,\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 router: Router,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService,\n dialogService: DialogService,\n private userVerificationService: UserVerificationService,\n private deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction,\n private configService: ConfigServiceAbstraction\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService,\n dialogService\n );\n }\n\n async ngOnInit() {\n this.showWebauthnLoginSettings$ = this.configService.getFeatureFlag$(\n FeatureFlag.PasswordlessLogin\n );\n\n if (!(await this.userVerificationService.hasMasterPassword())) {\n this.router.navigate([\"/settings/security/two-factor\"]);\n }\n\n this.masterPasswordHint = (await this.apiService.getProfile()).masterPasswordHint;\n await super.ngOnInit();\n\n this.characterMinimumMessage = this.i18nService.t(\"characterMinimum\", this.minimumLength);\n }\n\n async rotateUserKeyClicked() {\n if (this.rotateUserKey) {\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.dialogService.openSimpleDialog({\n title: { key: \"warning\" },\n content: { key: \"oldAttachmentsNeedFixDesc\" },\n acceptButtonText: { key: \"learnMore\" },\n cancelButtonText: { key: \"close\" },\n type: \"warning\",\n });\n\n if (learnMore) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/attachments/#add-storage-space\"\n );\n }\n this.rotateUserKey = false;\n return;\n }\n\n const result = await this.dialogService.openSimpleDialog({\n title: { key: \"rotateEncKeyTitle\" },\n content:\n this.i18nService.t(\"updateEncryptionKeyWarning\") +\n \" \" +\n this.i18nService.t(\"updateEncryptionKeyExportWarning\") +\n \" \" +\n this.i18nService.t(\"rotateEncKeyConfirmation\"),\n type: \"warning\",\n });\n\n if (!result) {\n this.rotateUserKey = false;\n }\n }\n }\n\n async submit() {\n if (this.masterPasswordHint != null && this.masterPasswordHint == this.masterPassword) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"hintEqualsPassword\")\n );\n return;\n }\n\n this.leakedPassword = false;\n if (this.checkForBreaches) {\n this.leakedPassword = (await this.auditService.passwordLeaked(this.masterPassword)) > 0;\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.rotateUserKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(\n newMasterPasswordHash: string,\n newMasterKey: MasterKey,\n newUserKey: [UserKey, EncString]\n ) {\n const masterKey = await this.cryptoService.getOrDeriveMasterKey(this.currentMasterPassword);\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashMasterKey(\n this.currentMasterPassword,\n masterKey\n );\n request.masterPasswordHint = this.masterPasswordHint;\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newUserKey[1].encryptedString;\n\n try {\n if (this.rotateUserKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newMasterKey, 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(masterKey: MasterKey, masterPasswordHash: string) {\n const [newUserKey, masterKeyEncUserKey] = await this.cryptoService.makeUserKey(masterKey);\n const userPrivateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (userPrivateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(userPrivateKey, newUserKey);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = masterKeyEncUserKey.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], newUserKey);\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], newUserKey);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n const sends = await firstValueFrom(this.sendService.sends$);\n await Promise.all(\n sends.map(async (send) => {\n const sendKey = await this.cryptoService.decryptToBytes(send.key, null);\n send.key = (await this.cryptoService.encrypt(sendKey, newUserKey)) ?? send.key;\n request.sends.push(new SendWithIdRequest(send));\n })\n );\n\n await this.deviceTrustCryptoService.rotateDevicesTrust(newUserKey, masterPasswordHash);\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(newUserKey);\n\n await this.updateAllResetPasswordKeys(newUserKey, 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);\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(userKey: UserKey, 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 - encrypt user's encKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey);\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 { PasswordRequest } from \"../../auth/models/request/password.request\";\nimport { KdfType } from \"../../enums\";\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n kdfMemory?: number;\n kdfParallelism?: number;\n}\n","import { DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\nimport { FormGroup, FormControl, Validators } from \"@angular/forms\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { KdfConfig } from \"@bitwarden/common/auth/models/domain/kdf-config\";\nimport { KdfType } from \"@bitwarden/common/enums\";\nimport { KdfRequest } from \"@bitwarden/common/models/request/kdf.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\n\n@Component({\n selector: \"app-change-kdf-confirmation\",\n templateUrl: \"change-kdf-confirmation.component.html\",\n})\nexport class ChangeKdfConfirmationComponent {\n kdf: KdfType;\n kdfConfig: KdfConfig;\n\n form = new FormGroup({\n masterPassword: new FormControl(null, Validators.required),\n });\n showPassword = false;\n masterPassword: string;\n formPromise: Promise;\n loading = false;\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 stateService: StateService,\n private logService: LogService,\n @Inject(DIALOG_DATA) params: { kdf: KdfType; kdfConfig: KdfConfig }\n ) {\n this.kdf = params.kdf;\n this.kdfConfig = params.kdfConfig;\n this.masterPassword = null;\n }\n\n async submit() {\n this.loading = true;\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 } finally {\n this.loading = false;\n }\n }\n\n private async makeKeyAndSaveAsync() {\n const masterPassword = this.form.value.masterPassword;\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 const masterKey = await this.cryptoService.getOrDeriveMasterKey(masterPassword);\n request.masterPasswordHash = await this.cryptoService.hashMasterKey(masterPassword, masterKey);\n const email = await this.stateService.getEmail();\n const newMasterKey = await this.cryptoService.makeMasterKey(\n masterPassword,\n email,\n this.kdf,\n this.kdfConfig\n );\n request.newMasterPasswordHash = await this.cryptoService.hashMasterKey(\n masterPassword,\n newMasterKey\n );\n const newUserKey = await this.cryptoService.encryptUserKeyWithMasterKey(newMasterKey);\n request.key = newUserKey[1].encryptedString;\n\n await this.apiService.postAccountKdf(request);\n }\n}\n","\n \n {{ \"changeKdf\" | i18n }}\n \n\n \n {{ \"changeKdfLoggedOutWarning\" | i18n }}\n \n
\n
\n {{ \"masterPass\" | i18n }}\n \n \n {{ \"confirmIdentity\" | i18n }}\n \n
\n
\n \n
\n \n \n \n \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 {{ \"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 {{ \"changeKdf\" | i18n }}\n \n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { KdfConfig } from \"@bitwarden/common/auth/models/domain/kdf-config\";\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\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { ChangeKdfConfirmationComponent } from \"./change-kdf-confirmation.component\";\n\n@Component({\n selector: \"app-change-kdf\",\n templateUrl: \"change-kdf.component.html\",\n})\nexport class ChangeKdfComponent implements OnInit {\n kdf = KdfType.PBKDF2_SHA256;\n kdfConfig: KdfConfig = DEFAULT_KDF_CONFIG;\n kdfType = KdfType;\n kdfOptions: any[] = [];\n recommendedPbkdf2Iterations = DEFAULT_PBKDF2_ITERATIONS;\n\n constructor(private stateService: StateService, private dialogService: DialogService) {\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 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 async openConfirmationModal() {\n this.dialogService.open(ChangeKdfConfirmationComponent, {\n data: {\n kdf: this.kdf,\n kdfConfig: this.kdfConfig,\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { StateService } from \"@bitwarden/common/platform/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 userVerificationService: UserVerificationService,\n private stateService: StateService,\n private modalService: ModalService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.showChangeKdf = await this.userVerificationService.hasMasterPassword();\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\n\n@Component({\n selector: \"app-security\",\n templateUrl: \"security.component.html\",\n})\nexport class SecurityComponent {\n showChangePassword = true;\n\n constructor(private userVerificationService: UserVerificationService) {}\n\n async ngOnInit() {\n this.showChangePassword = await this.userVerificationService.hasMasterPassword();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ChangePasswordComponent } from \"../auth/settings/change-password.component\";\nimport { TwoFactorSetupComponent } from \"../auth/settings/two-factor-setup.component\";\n\nimport { SecurityKeysComponent } from \"./security-keys.component\";\nimport { SecurityComponent } from \"./security.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 { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { TokenService } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { BroadcasterService } from \"@bitwarden/common/platform/abstractions/broadcaster.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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 { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { PasswordGeneratorPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/password-generator-policy-options\";\nimport { EmailForwarderOptions } from \"@bitwarden/common/models/domain/email-forwarder-options\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { GeneratorOptions } from \"@bitwarden/common/tools/generator/generator-options\";\nimport {\n PasswordGenerationServiceAbstraction,\n PasswordGeneratorOptions,\n} from \"@bitwarden/common/tools/generator/password\";\nimport {\n UsernameGenerationServiceAbstraction,\n UsernameGeneratorOptions,\n} from \"@bitwarden/common/tools/generator/username\";\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: EmailForwarderOptions[];\n usernameOptions: UsernameGeneratorOptions = {};\n passwordOptions: PasswordGeneratorOptions = {};\n username = \"-\";\n password = \"-\";\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPasswordPolicyOptions: PasswordGeneratorPolicyOptions;\n usernameWebsite: string = null;\n\n constructor(\n protected passwordGenerationService: PasswordGenerationServiceAbstraction,\n protected usernameGenerationService: UsernameGenerationServiceAbstraction,\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 } as GeneratorOptions);\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 dependent 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: \"addy.io\", value: \"anonaddy\", validForSelfHosted: true },\n { name: \"DuckDuckGo\", value: \"duckduckgo\", validForSelfHosted: false },\n { name: \"Fastmail\", value: \"fastmail\", validForSelfHosted: true },\n { name: \"Firefox Relay\", value: \"firefoxrelay\", validForSelfHosted: false },\n { name: \"SimpleLogin\", value: \"simplelogin\", validForSelfHosted: true },\n { name: \"Forward Email\", value: \"forwardemail\", validForSelfHosted: true },\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, validForSelfHosted: false });\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/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport {\n GeneratedPasswordHistory,\n PasswordGenerationServiceAbstraction,\n} from \"@bitwarden/common/tools/generator/password\";\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(\n protected passwordGenerationService: PasswordGenerationServiceAbstraction,\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 = async () => {\n this.history = [];\n await 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, Input } from \"@angular/core\";\n\nimport { ClientType } from \"@bitwarden/common/enums\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\n@Directive({\n selector: \"[appCopyText]\",\n})\nexport class CopyTextDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) {}\n\n @Input(\"appCopyText\") copyText: string;\n\n @HostListener(\"copy\") onCopy() {\n if (window == null) {\n return;\n }\n\n const timeout = this.platformUtilsService.getClientType() === ClientType.Desktop ? 100 : 0;\n setTimeout(() => {\n this.platformUtilsService.copyToClipboard(this.copyText, { window: window });\n }, timeout);\n }\n}\n","\n \n {{ \"passwordHistory\" | i18n }}\n \n \n \n \n \n \n \n \n {{ h.date | date : \"medium\" }}\n \n \n \n \n \n \n \n \n
\n {{ \"noPasswordsInList\" | i18n }}\n
\n
\n \n \n \n \n
\n","import { Component } from \"@angular/core\";\n\nimport { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from \"@bitwarden/angular/tools/generator/components/password-generator-history.component\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\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: PasswordGenerationServiceAbstraction,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService\n ) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n}\n","
\n

{{ \"generator\" | i18n }}

\n
\n\n {{ \"passwordGeneratorPolicyInEffect\" | i18n }}\n\n
\n
\n \n
\n
\n
\n \n
\n \n \n
\n
\n\n
\n \n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\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 } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { GeneratorComponent as BaseGeneratorComponent } from \"@bitwarden/angular/tools/generator/components/generator.component\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { UsernameGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/username\";\nimport { DialogService } from \"@bitwarden/components\";\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 constructor(\n passwordGenerationService: PasswordGenerationServiceAbstraction,\n usernameGenerationService: UsernameGenerationServiceAbstraction,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n logService: LogService,\n route: ActivatedRoute,\n private dialogService: DialogService\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 // Allow only valid email forwarders for self host\n this.forwardOptions = this.forwardOptions.filter((forwarder) => forwarder.validForSelfHosted);\n }\n }\n\n get isSelfHosted(): boolean {\n return this.platformUtilsService.isSelfHost();\n }\n\n async history() {\n this.dialogService.open(PasswordGeneratorHistoryComponent);\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 { View } from \"../../../../models/view/view\";\nimport { SendType } from \"../../enums/send-type\";\nimport { SendAccess } from \"../domain/send-access\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.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 Domain from \"../../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../../platform/models/domain/symmetric-crypto-key\";\nimport { SendType } from \"../../enums/send-type\";\nimport { SendAccessResponse } from \"../response/send-access.response\";\nimport { SendAccessView } from \"../view/send-access.view\";\n\nimport { SendFile } from \"./send-file\";\nimport { SendText } from \"./send-text\";\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 { SEND_KDF_ITERATIONS } from \"@bitwarden/common/enums\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncArrayBuffer } from \"@bitwarden/common/platform/models/domain/enc-array-buffer\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { SendType } from \"@bitwarden/common/tools/send/enums/send-type\";\nimport { SendAccess } from \"@bitwarden/common/tools/send/models/domain/send-access\";\nimport { SendAccessRequest } from \"@bitwarden/common/tools/send/models/request/send-access.request\";\nimport { SendAccessResponse } from \"@bitwarden/common/tools/send/models/response/send-access.response\";\nimport { SendAccessView } from \"@bitwarden/common/tools/send/models/view/send-access.view\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\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 private sendApiService: SendApiService\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.sendApiService.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.sendApiService.postSendAccess(this.id, this.accessRequest);\n } else {\n this.formPromise = this.sendApiService.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 { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { SendType } from \"@bitwarden/common/tools/send/enums/send-type\";\nimport { SendView } from \"@bitwarden/common/tools/send/models/view/send.view\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/tools/send/services/send.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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 searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\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 private _filteredSends: SendView[];\n\n get filteredSends(): SendView[] {\n return this._filteredSends;\n }\n\n set filteredSends(filteredSends: SendView[]) {\n this._filteredSends = filteredSends;\n }\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 protected sendApiService: SendApiService,\n protected dialogService: DialogService\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 this.sendService.sendViews$.pipe(takeUntil(this.destroy$)).subscribe((sends) => {\n this.sends = sends;\n });\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\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"removePassword\" },\n content: { key: \"removePasswordConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendApiService.removePassword(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\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"deleteSend\" },\n content: { key: \"deleteSendConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendApiService.delete(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, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncArrayBuffer } from \"@bitwarden/common/platform/models/domain/enc-array-buffer\";\nimport { SendType } from \"@bitwarden/common/tools/send/enums/send-type\";\nimport { Send } from \"@bitwarden/common/tools/send/models/domain/send\";\nimport { SendFileView } from \"@bitwarden/common/tools/send/models/view/send-file.view\";\nimport { SendTextView } from \"@bitwarden/common/tools/send/models/view/send-text.view\";\nimport { SendView } from \"@bitwarden/common/tools/send/models/view/send.view\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/tools/send/services/send.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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\ninterface DatePresetSelectOption {\n name: string;\n value: DatePreset;\n}\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 deletionDatePresets: DatePresetSelectOption[] = [\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: DatePresetSelectOption[] = [\n { name: this.i18nService.t(\"never\"), value: DatePreset.Never },\n ...this.deletionDatePresets,\n ];\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n hasPassword: boolean;\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 protected formGroup = this.formBuilder.group({\n name: [\"\", Validators.required],\n text: [],\n textHidden: [false],\n fileContents: [],\n file: [null, Validators.required],\n link: [],\n copyLink: false,\n maxAccessCount: [],\n accessCount: [],\n password: [],\n notes: [],\n hideEmail: false,\n disabled: false,\n type: [],\n defaultExpirationDateTime: [],\n defaultDeletionDateTime: [\"\", Validators.required],\n selectedDeletionDatePreset: [DatePreset.SevenDays, Validators.required],\n selectedExpirationDatePreset: [],\n });\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 protected logService: LogService,\n protected stateService: StateService,\n protected sendApiService: SendApiService,\n protected dialogService: DialogService,\n protected formBuilder: FormBuilder\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 != null && 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 if (this.disableSend) {\n this.formGroup.disable();\n }\n });\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.SendOptions, (p) => p.data.disableHideEmail)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n if (\n (this.disableHideEmail = policyAppliesToActiveUser) &&\n !this.formGroup.controls.hideEmail.value\n ) {\n this.formGroup.controls.hideEmail.disable();\n } else {\n this.formGroup.controls.hideEmail.enable();\n }\n });\n\n this.formGroup.controls.type.valueChanges.subscribe((val) => {\n this.type = val;\n this.typeChanged();\n });\n\n this.formGroup.controls.selectedDeletionDatePreset.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((datePreset) => {\n datePreset === DatePreset.Custom\n ? this.formGroup.controls.defaultDeletionDateTime.enable()\n : this.formGroup.controls.defaultDeletionDateTime.disable();\n });\n\n this.formGroup.controls.hideEmail.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((val) => {\n if (!val && this.disableHideEmail) {\n this.formGroup.controls.hideEmail.disable();\n }\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 async load() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n this.emailVerified = await this.stateService.getEmailVerified();\n\n this.type = !this.canAccessPremium || !this.emailVerified ? SendType.Text : SendType.File;\n if (this.send == null) {\n if (this.editMode) {\n const send = this.loadSend();\n this.send = await send.decrypt();\n this.type = this.send.type;\n this.updateFormValues();\n } else {\n this.send = new SendView();\n this.send.type = 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 this.formGroup.controls.type.patchValue(this.send.type);\n\n this.formGroup.patchValue({\n selectedDeletionDatePreset: DatePreset.SevenDays,\n selectedExpirationDatePreset: DatePreset.Never,\n });\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== \"\";\n }\n\n async submit(): Promise {\n this.formGroup.markAllAsTouched();\n\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 this.send.name = this.formGroup.controls.name.value;\n this.send.text.text = this.formGroup.controls.text.value;\n this.send.text.hidden = this.formGroup.controls.textHidden.value;\n this.send.maxAccessCount = this.formGroup.controls.maxAccessCount.value;\n this.send.accessCount = this.formGroup.controls.accessCount.value;\n this.send.password = this.formGroup.controls.password.value;\n this.send.notes = this.formGroup.controls.notes.value;\n this.send.hideEmail = this.formGroup.controls.hideEmail.value;\n this.send.disabled = this.formGroup.controls.disabled.value;\n this.send.type = this.type;\n\n if (Utils.isNullOrWhitespace(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.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 (Utils.isNullOrWhitespace(this.send.password)) {\n this.send.password = null;\n }\n\n this.formPromise = this.encryptSend(file).then(async (encSend) => {\n const uploadPromise = this.sendApiService.save(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.formGroup.controls.copyLink.value && 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 protected async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"deleteSend\" },\n content: { key: \"deleteSendConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendApiService.delete(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.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 this.type === SendType.Text || this.editMode\n ? this.formGroup.controls.file.disable()\n : this.formGroup.controls.file.enable();\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n protected loadSend(): Send {\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.send.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate =\n this.formattedDeletionDate == null ? null : new Date(this.formattedDeletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate =\n this.formattedExpirationDate == null ? null : new Date(this.formattedExpirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"password\").focus();\n }\n\n updateFormValues() {\n this.formGroup.patchValue({\n name: this.send?.name ?? \"\",\n text: this.send?.text?.text ?? \"\",\n textHidden: this.send?.text?.hidden ?? false,\n link: this.link ?? \"\",\n maxAccessCount: this.send?.maxAccessCount,\n accessCount: this.send?.accessCount ?? 0,\n notes: this.send?.notes ?? \"\",\n hideEmail: this.send?.hideEmail ?? false,\n disabled: this.send?.disabled ?? false,\n type: this.send.type ?? this.type,\n password: null,\n\n selectedDeletionDatePreset: this.editMode ? DatePreset.Custom : DatePreset.SevenDays,\n selectedExpirationDatePreset: this.editMode ? DatePreset.Custom : DatePreset.Never,\n defaultExpirationDateTime:\n this.send.expirationDate != null\n ? this.datePipe.transform(new Date(this.send.expirationDate), \"yyyy-MM-ddTHH:mm\")\n : null,\n defaultDeletionDateTime: this.datePipe.transform(\n new Date(this.send.deletionDate),\n \"yyyy-MM-ddTHH:mm\"\n ),\n });\n\n if (this.send.hideEmail) {\n this.formGroup.controls.hideEmail.enable();\n }\n }\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.dialogService.openSimpleDialog({\n title: \"\",\n content: { key: this.editMode ? \"editedSend\" : \"createdSend\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: \"success\",\n });\n\n await this.copyLinkToClipboard(this.link);\n }\n }\n\n clearExpiration() {\n this.formGroup.controls.defaultExpirationDateTime.patchValue(null);\n }\n\n get formattedExpirationDate(): string {\n switch (this.formGroup.controls.selectedExpirationDatePreset.value as DatePreset) {\n case DatePreset.Never:\n return null;\n case DatePreset.Custom:\n if (!this.formGroup.controls.defaultExpirationDateTime.value) {\n return null;\n }\n return this.formGroup.controls.defaultExpirationDateTime.value;\n default: {\n const now = new Date();\n const milliseconds = now.setTime(\n now.getTime() +\n (this.formGroup.controls.selectedExpirationDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(milliseconds).toString();\n }\n }\n }\n\n get formattedDeletionDate(): string {\n switch (this.formGroup.controls.selectedDeletionDatePreset.value as DatePreset) {\n case DatePreset.Never:\n this.formGroup.controls.selectedDeletionDatePreset.patchValue(DatePreset.SevenDays);\n return this.formattedDeletionDate;\n case DatePreset.Custom:\n return this.formGroup.controls.defaultDeletionDateTime.value;\n default: {\n const now = new Date();\n const milliseconds = now.setTime(\n now.getTime() +\n (this.formGroup.controls.selectedDeletionDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(milliseconds).toString();\n }\n }\n }\n}\n","\n \n \n {{ title }}\n \n \n \n {{ \"sendDisabledWarning\" | i18n }}\n \n \n {{ \"sendOptionsPolicyInEffect\" | i18n }}\n
    \n
  • {{ \"sendDisableHideEmailInEffect\" | i18n }}
  • \n
\n
\n \n {{ \"name\" | i18n }}\n \n {{ \"sendNameDesc\" | i18n }}\n \n
\n \n {{ \"whatTypeOfSend\" | i18n }}\n\n \n {{ o.name }}\n \n \n
\n \n \n \n {{ \"sendTypeText\" | i18n }}\n \n {{ \"sendTextDesc\" | i18n }}\n \n \n \n {{ \"textHiddenByDefault\" | i18n }}\n \n \n \n \n
\n
\n {{ \"file\" | i18n }}\n

\n {{ send.file.fileName }} ({{ send.file.sizeName }})\n

\n
\n \n {{ \"file\" | i18n }}\n
\n \n {{ selectedFile?.name ?? (\"noFileChosen\" | i18n) }}\n
\n \n {{ \"sendFileDesc\" | i18n }} {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n

{{ \"share\" | i18n }}

\n\n \n {{ \"sendLinkLabel\" | i18n }}\n \n \n\n \n \n {{ \"copySendLinkOnSave\" | i18n }}\n \n
\n

\n \n

\n
\n
\n
\n
\n \n {{ \"deletionDate\" | i18n }}\n \n \n \n \n \n \n {{ \"deletionDateDesc\" | i18n }}\n \n
\n
\n \n {{ \"deletionDate\" | i18n }}\n \n {{ \"deletionDateDesc\" | i18n }}\n \n
\n
\n \n \n {{ \"expirationDate\" | i18n }}\n \n \n \n \n \n \n \n {{ \"expirationDateDesc\" | i18n }}\n \n
\n
\n \n \n {{ \"expirationDate\" | i18n }}\n\n \n {{ \"clear\" | i18n }}\n \n \n \n {{ \"expirationDateDesc\" | i18n }}\n \n
\n
\n
\n \n {{ \"maxAccessCount\" | i18n }}\n \n {{ \"maxAccessCountDesc\" | i18n }}\n \n \n {{ \"currentAccessCount\" | i18n }}\n \n \n
\n
\n \n {{ \"password\" | i18n }}\n {{ \"newPassword\" | i18n }}\n\n \n \n {{ \"sendPasswordDesc\" | i18n }}\n \n
\n \n {{ \"notes\" | i18n }}\n \n {{ \"sendNotesDesc\" | i18n }}\n \n\n \n \n {{ \"hideEmail\" | i18n }}\n \n\n \n \n {{ \"disableThisSend\" | i18n }}\n \n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"cancel\" | i18n }}\n \n\n \n \n
\n\n","import { DIALOG_DATA, DialogRef } from \"@angular/cdk/dialog\";\nimport { DatePipe } from \"@angular/common\";\nimport { Component, Inject } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"@bitwarden/angular/tools/send/add-edit.component\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/tools/send/services/send.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\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 protected selectedFile: File;\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 sendApiService: SendApiService,\n dialogService: DialogService,\n formBuilder: FormBuilder,\n protected dialogRef: DialogRef,\n @Inject(DIALOG_DATA) params: { sendId: string }\n ) {\n super(\n i18nService,\n platformUtilsService,\n environmentService,\n datePipe,\n sendService,\n messagingService,\n policyService,\n logService,\n stateService,\n sendApiService,\n dialogService,\n formBuilder\n );\n\n this.sendId = params.sendId;\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 protected setSelectedFile(event: Event) {\n const fileInputEl = event.target;\n const file = fileInputEl.files.length > 0 ? fileInputEl.files[0] : null;\n this.selectedFile = file;\n }\n\n submitAndClose = async () => {\n this.formGroup.markAllAsTouched();\n if (this.formGroup.invalid) {\n return;\n }\n\n const success = await this.submit();\n if (success) {\n this.dialogRef.close();\n }\n };\n\n deleteAndClose = async () => {\n const success = await this.delete();\n if (success) {\n this.dialogRef.close();\n }\n };\n}\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const NoSend = svgIcon`\n \n \n \n \n \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
\n
\n

{{ \"types\" | i18n }}

\n
\n
    \n
  • \n \n \n {{ \"sendTypeText\" | i18n }}\n \n \n
  • \n
  • \n \n \n {{ \"sendTypeFile\" | i18n }}\n \n \n
  • \n
\n
\n
\n
\n
\n
\n
\n

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

\n
\n \n \n {{ \"createSend\" | i18n }}\n \n
\n
\n \n \n \n \n {{ \"name\" | i18n }}\n {{ \"deletionDate\" | i18n }}\n {{ \"options\" | i18n }}\n \n \n \n \n \n \n \n \n \n \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 \n {{\n s.deletionDate | date : \"medium\"\n }}\n \n \n \n \n \n \n \n {{ \"removePassword\" | i18n }}\n \n \n \n \n \n \n \n
\n \n \n {{ \"loading\" | i18n }}\n \n \n \n {{ \"sendsNoItemsTitle\" | i18n }}\n {{ \"sendsNoItemsMessage\" | i18n }}\n \n \n {{ \"createSend\" | i18n }}\n \n \n \n
\n
\n
\n
\n\n","import { Component, NgZone, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { lastValueFrom } from \"rxjs\";\n\nimport { SendComponent as BaseSendComponent } from \"@bitwarden/angular/tools/send/send.component\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { BroadcasterService } from \"@bitwarden/common/platform/abstractions/broadcaster.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { SendView } from \"@bitwarden/common/tools/send/models/view/send.view\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { SendService } from \"@bitwarden/common/tools/send/services/send.service.abstraction\";\nimport { DialogService, NoItemsModule, SearchModule, TableDataSource } from \"@bitwarden/components\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { NoSend } from \"./icons/no-send.icon\";\n\nconst BroadcasterSubscriptionId = \"SendComponent\";\n\n@Component({\n selector: \"app-send\",\n standalone: true,\n imports: [SharedModule, SearchModule, NoItemsModule],\n templateUrl: \"send.component.html\",\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild(\"sendAddEdit\", { read: ViewContainerRef, static: true })\n sendAddEditModalRef: ViewContainerRef;\n noItemIcon = NoSend;\n\n override set filteredSends(filteredSends: SendView[]) {\n super.filteredSends = filteredSends;\n this.dataSource.data = filteredSends;\n }\n\n override get filteredSends() {\n return super.filteredSends;\n }\n\n protected dataSource = new TableDataSource();\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 broadcasterService: BroadcasterService,\n logService: LogService,\n sendApiService: SendApiService,\n dialogService: DialogService\n ) {\n super(\n sendService,\n i18nService,\n platformUtilsService,\n environmentService,\n ngZone,\n searchService,\n policyService,\n logService,\n sendApiService,\n dialogService\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 await this.editSend(null);\n }\n\n async editSend(send: SendView) {\n const dialog = this.dialogService.open(AddEditComponent, {\n data: {\n sendId: send == null ? null : send.id,\n },\n });\n\n await lastValueFrom(dialog.closed);\n await this.load();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/platform/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\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { BulkDeleteDialogComponent } from \"./bulk-delete-dialog/bulk-delete-dialog.component\";\nimport { BulkMoveDialogComponent } from \"./bulk-move-dialog/bulk-move-dialog.component\";\nimport { BulkShareDialogComponent } from \"./bulk-share-dialog/bulk-share-dialog.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [BulkDeleteDialogComponent, BulkMoveDialogComponent, BulkShareDialogComponent],\n exports: [BulkDeleteDialogComponent, BulkMoveDialogComponent, BulkShareDialogComponent],\n})\nexport class BulkDialogsModule {}\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/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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 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","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 { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnInit } from \"@angular/core\";\n\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.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 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 { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { Validators, FormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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\";\nimport { DialogService } from \"@bitwarden/components\";\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 formGroup = this.formBuilder.group({\n name: [\"\", [Validators.required]],\n });\n\n constructor(\n protected folderService: FolderService,\n protected folderApiService: FolderApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected dialogService: DialogService,\n protected formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n this.folder.name = this.formGroup.controls.name.value;\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.dialogService.openSimpleDialog({\n title: { key: \"deleteFolder\" },\n content: { key: \"deleteFolderConfirmation\" },\n type: \"warning\",\n });\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 this.formGroup.controls.name.setValue(this.folder.name);\n }\n}\n","import { DIALOG_DATA, DialogConfig, DialogRef } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { FolderAddEditComponent as BaseFolderAddEditComponent } from \"@bitwarden/angular/vault/components/folder-add-edit.component\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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 { DialogService } from \"@bitwarden/components\";\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 dialogService: DialogService,\n formBuilder: FormBuilder,\n protected dialogRef: DialogRef,\n @Inject(DIALOG_DATA) params: FolderAddEditDialogParams\n ) {\n super(\n folderService,\n folderApiService,\n i18nService,\n platformUtilsService,\n logService,\n dialogService,\n formBuilder\n );\n params?.folderId ? (this.folderId = params.folderId) : null;\n }\n\n deleteAndClose = async () => {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"deleteFolder\" },\n content: { key: \"deleteFolderConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return;\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 this.dialogRef.close(FolderAddEditDialogResult.Deleted);\n };\n\n submitAndClose = async () => {\n this.folder.name = this.formGroup.controls.name.value;\n if (this.folder.name == null || this.folder.name === \"\") {\n this.formGroup.controls.name.markAsTouched();\n return;\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 this.dialogRef.close(FolderAddEditDialogResult.Saved);\n } catch (e) {\n this.logService.error(e);\n }\n return;\n };\n}\n\nexport interface FolderAddEditDialogParams {\n folderId: string;\n}\n\nexport enum FolderAddEditDialogResult {\n Deleted = \"deleted\",\n Canceled = \"canceled\",\n Saved = \"saved\",\n}\n\n/**\n * Strongly typed helper to open a FolderAddEdit dialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Optional configuration for the dialog\n */\nexport function openFolderAddEditDialog(\n dialogService: DialogService,\n config?: DialogConfig\n) {\n return dialogService.open(\n FolderAddEditComponent,\n config\n );\n}\n","
\n \n \n {{ title }}\n \n \n \n {{ \"name\" | i18n }}\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { OrganizationUserStatusType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { Checkable, isChecked } from \"@bitwarden/common/types/checkable\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.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.memberOrganizations$.pipe(\n map((orgs) => {\n return orgs\n .filter((o) => o.enabled && o.status === OrganizationUserStatusType.Confirmed)\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 await this.cipherService.getKeyForCipherKeyDecryption(cipherDomain)\n );\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 await this.cipherService.getKeyForCipherKeyDecryption(cipherDomain)\n );\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 { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\n@Component({\n selector: \"app-vault-share\",\n templateUrl: \"share.component.html\",\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n collectionService,\n platformUtilsService,\n i18nService,\n cipherService,\n logService,\n organizationService\n );\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n}\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { TokenService } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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

{{ \"updateLowKdfIterationsDesc\" | i18n }}

\n \n {{ \"updateKdfSettings\" | i18n }}\n \n
\n
\n","
\n
\n \n \n {{ activeOrganizationId | orgNameFromId : organizations }} {{ \"vault\" | i18n | lowercase }}\n \n \n \n {{ collection.name }}\n \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 {{ \"loading\" | i18n }}\n \n

\n
\n\n
\n
\n \n {{ \"new\" | i18n }}\n \n \n \n \n \n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\nimport { CollectionDialogTabType } from \"../../components/collection-dialog\";\nimport {\n All,\n RoutedVaultFilterModel,\n Unassigned,\n} from \"../vault-filter/shared/models/routed-vault-filter.model\";\n\n@Component({\n selector: \"app-vault-header\",\n templateUrl: \"./vault-header.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VaultHeaderComponent {\n protected Unassigned = Unassigned;\n protected All = All;\n protected CollectionDialogTabType = CollectionDialogTabType;\n\n /**\n * Boolean to determine the loading state of the header.\n * Shows a loading spinner if set to true\n */\n @Input() loading: boolean;\n\n /** Current active filter */\n @Input() filter: RoutedVaultFilterModel;\n\n /** All organizations that can be shown */\n @Input() organizations: Organization[] = [];\n\n /** Currently selected collection */\n @Input() collection?: TreeNode;\n\n /** Whether 'Collection' option is shown in the 'New' dropdown */\n @Input() canCreateCollections: boolean;\n\n /** Emits an event when the new item button is clicked in the header */\n @Output() onAddCipher = new EventEmitter();\n\n /** Emits an event when the new collection button is clicked in the 'New' dropdown menu */\n @Output() onAddCollection = new EventEmitter();\n\n /** Emits an event when the new folder button is clicked in the 'New' dropdown menu */\n @Output() onAddFolder = new EventEmitter();\n\n /** Emits an event when the edit collection button is clicked in the header */\n @Output() onEditCollection = new EventEmitter<{ tab: CollectionDialogTabType }>();\n\n /** Emits an event when the delete collection button is clicked in the header */\n @Output() onDeleteCollection = new EventEmitter();\n\n constructor(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 protected get activeOrganizationId() {\n if (this.collection != undefined) {\n return this.collection.node.organizationId;\n }\n\n if (this.filter.organizationId !== undefined) {\n return this.filter.organizationId;\n }\n\n return undefined;\n }\n\n protected get activeOrganization() {\n const organizationId = this.activeOrganizationId;\n return this.organizations?.find((org) => org.id === organizationId);\n }\n\n protected get showBreadcrumbs() {\n return this.filter.collectionId !== undefined && this.filter.collectionId !== All;\n }\n\n protected get title() {\n if (this.filter.collectionId === Unassigned) {\n return this.i18nService.t(\"unassigned\");\n }\n\n if (this.collection) {\n return this.collection.node.name;\n }\n\n if (this.filter.organizationId === Unassigned) {\n return this.i18nService.t(\"myVault\");\n }\n\n const activeOrganization = this.activeOrganization;\n if (activeOrganization) {\n return `${activeOrganization.name} ${this.i18nService.t(\"vault\").toLowerCase()}`;\n }\n\n return this.i18nService.t(\"allVaults\");\n }\n\n /**\n * A list of collection filters that form a chain from the organization root to currently selected collection.\n * Begins from the organization root and excludes the currently selected collection.\n */\n protected get collections() {\n if (this.collection == undefined) {\n return [];\n }\n\n const collections = [this.collection];\n while (collections[collections.length - 1].parent != undefined) {\n collections.push(collections[collections.length - 1].parent);\n }\n\n return collections\n .slice(1)\n .reverse()\n .map((treeNode) => treeNode.node);\n }\n\n get canEditCollection(): boolean {\n // Only edit collections if not editing \"Unassigned\"\n if (this.collection === undefined) {\n return false;\n }\n\n // Otherwise, check if we can edit the specified collection\n const organization = this.organizations.find(\n (o) => o.id === this.collection?.node.organizationId\n );\n return this.collection.node.canEdit(organization);\n }\n\n async editCollection(tab: CollectionDialogTabType): Promise {\n this.onEditCollection.emit({ tab });\n }\n\n get canDeleteCollection(): boolean {\n // Only delete collections if not deleting \"Unassigned\"\n if (this.collection === undefined) {\n return false;\n }\n\n // Otherwise, check if we can edit the specified collection\n const organization = this.organizations.find(\n (o) => o.id === this.collection?.node.organizationId\n );\n return this.collection.node.canDelete(organization);\n }\n\n deleteCollection() {\n this.onDeleteCollection.emit();\n }\n\n protected addCipher() {\n this.onAddCipher.emit();\n }\n\n async addFolder(): Promise {\n this.onAddFolder.emit();\n }\n\n async addCollection(): Promise {\n this.onAddCollection.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 {{ \"loading\" | i18n }}\n
\n \n \n

{{ \"noItemsInList\" | i18n }}

\n \n \n {{ \"newItem\" | 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 {\n BehaviorSubject,\n combineLatest,\n firstValueFrom,\n lastValueFrom,\n Observable,\n Subject,\n} from \"rxjs\";\nimport {\n concatMap,\n debounceTime,\n filter,\n first,\n map,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} 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 { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { TokenService } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { DEFAULT_PBKDF2_ITERATIONS, EventType, KdfType } from \"@bitwarden/common/enums\";\nimport { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { BroadcasterService } from \"@bitwarden/common/platform/abstractions/broadcaster.service\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CollectionData } from \"@bitwarden/common/vault/models/data/collection.data\";\nimport { CollectionDetailsResponse } from \"@bitwarden/common/vault/models/response/collection.response\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\nimport { DialogService, Icons } from \"@bitwarden/components\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\n\nimport {\n CollectionDialogAction,\n CollectionDialogTabType,\n openCollectionDialog,\n} from \"../components/collection-dialog\";\nimport { VaultItem } from \"../components/vault-items/vault-item\";\nimport { VaultItemEvent } from \"../components/vault-items/vault-item-event\";\nimport { getNestedCollectionTree } from \"../utils/collection-utils\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\nimport { AttachmentsComponent } from \"./attachments.component\";\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 BulkShareDialogResult,\n openBulkShareDialog,\n} from \"./bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { FolderAddEditDialogResult, openFolderAddEditDialog } 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 { RoutedVaultFilterBridgeService } from \"./vault-filter/services/routed-vault-filter-bridge.service\";\nimport { RoutedVaultFilterService } from \"./vault-filter/services/routed-vault-filter.service\";\nimport { createFilterFunction } from \"./vault-filter/shared/models/filter-function\";\nimport {\n All,\n RoutedVaultFilterModel,\n Unassigned,\n} from \"./vault-filter/shared/models/routed-vault-filter.model\";\nimport { VaultFilter } from \"./vault-filter/shared/models/vault-filter.model\";\nimport { FolderFilter, OrganizationFilter } from \"./vault-filter/shared/models/vault-filter.type\";\n\nconst BroadcasterSubscriptionId = \"VaultComponent\";\nconst SearchTextDebounceInterval = 200;\n\n@Component({\n selector: \"app-vault\",\n templateUrl: \"vault.component.html\",\n providers: [RoutedVaultFilterService, RoutedVaultFilterBridgeService],\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n @ViewChild(\"vaultFilter\", { static: true }) filterComponent: VaultFilterComponent;\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(\"collectionsModal\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showPremiumCallout = false;\n showLowKdf = false;\n trashCleanupWarning: string = null;\n kdfIterations: number;\n activeFilter: VaultFilter = new VaultFilter();\n\n protected noItemIcon = Icons.Search;\n protected performingInitialLoad = true;\n protected refreshing = false;\n protected processingEvent = false;\n protected filter: RoutedVaultFilterModel = {};\n protected showBulkMove: boolean;\n protected canAccessPremium: boolean;\n protected allCollections: CollectionView[];\n protected allOrganizations: Organization[] = [];\n protected ciphers: CipherView[];\n protected collections: CollectionView[];\n protected isEmpty: boolean;\n protected selectedCollection: TreeNode | undefined;\n protected canCreateCollections = false;\n protected currentSearchText$: Observable;\n\n private searchText$ = new Subject();\n private refresh$ = new BehaviorSubject(null);\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 dialogService: DialogService,\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 routedVaultFilterService: RoutedVaultFilterService,\n private routedVaultFilterBridgeService: RoutedVaultFilterBridgeService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService,\n private collectionService: CollectionService,\n private logService: LogService,\n private totpService: TotpService,\n private eventCollectionService: EventCollectionService,\n private searchService: SearchService,\n private searchPipe: SearchPipe,\n private configService: ConfigServiceAbstraction,\n private apiService: ApiService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async ngOnInit() {\n this.showBrowserOutdated = window.navigator.userAgent.indexOf(\"MSIE\") !== -1;\n this.trashCleanupWarning = this.i18nService.t(\n this.platformUtilsService.isSelfHost()\n ? \"trashCleanupWarningSelfHosted\"\n : \"trashCleanupWarning\"\n );\n\n const firstSetup$ = this.route.queryParams.pipe(\n first(),\n switchMap(async (params: Params) => {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showLowKdf = (await this.userVerificationService.hasMasterPassword())\n ? await this.isLowKdfIteration()\n : false;\n await this.syncService.fullSync(false);\n\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.showPremiumCallout =\n !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost();\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 shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n this.refresh();\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n\n this.routedVaultFilterBridgeService.activeFilter$\n .pipe(takeUntil(this.destroy$))\n .subscribe((activeFilter) => {\n this.activeFilter = activeFilter;\n });\n\n const filter$ = this.routedVaultFilterService.filter$;\n const canAccessPremium$ = Utils.asyncToObservable(() =>\n this.stateService.getCanAccessPremium()\n ).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n const allCollections$ = Utils.asyncToObservable(() => this.collectionService.getAllDecrypted());\n const nestedCollections$ = allCollections$.pipe(\n map((collections) => getNestedCollectionTree(collections))\n );\n\n this.searchText$\n .pipe(debounceTime(SearchTextDebounceInterval), takeUntil(this.destroy$))\n .subscribe((searchText) =>\n this.router.navigate([], {\n queryParams: { search: Utils.isNullOrEmpty(searchText) ? null : searchText },\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n })\n );\n\n this.currentSearchText$ = this.route.queryParams.pipe(map((queryParams) => queryParams.search));\n\n const ciphers$ = combineLatest([\n Utils.asyncToObservable(() => this.cipherService.getAllDecrypted()),\n filter$,\n this.currentSearchText$,\n ]).pipe(\n filter(([ciphers, filter]) => ciphers != undefined && filter != undefined),\n concatMap(async ([ciphers, filter, searchText]) => {\n const filterFunction = createFilterFunction(filter);\n\n if (this.searchService.isSearchable(searchText)) {\n return await this.searchService.searchCiphers(searchText, [filterFunction], ciphers);\n }\n\n return ciphers.filter(filterFunction);\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n const collections$ = combineLatest([nestedCollections$, filter$, this.currentSearchText$]).pipe(\n filter(([collections, filter]) => collections != undefined && filter != undefined),\n map(([collections, filter, searchText]) => {\n if (filter.collectionId === undefined || filter.collectionId === Unassigned) {\n return [];\n }\n\n let collectionsToReturn = [];\n if (filter.organizationId !== undefined && filter.collectionId === All) {\n collectionsToReturn = collections\n .filter((c) => c.node.organizationId === filter.organizationId)\n .map((c) => c.node);\n } else if (filter.collectionId === All) {\n collectionsToReturn = collections.map((c) => c.node);\n } else {\n const selectedCollection = ServiceUtils.getTreeNodeObjectFromList(\n collections,\n filter.collectionId\n );\n collectionsToReturn = selectedCollection?.children.map((c) => c.node) ?? [];\n }\n\n if (this.searchService.isSearchable(searchText)) {\n collectionsToReturn = this.searchPipe.transform(\n collectionsToReturn,\n searchText,\n (collection) => collection.name,\n (collection) => collection.id\n );\n }\n\n return collectionsToReturn;\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n const selectedCollection$ = combineLatest([nestedCollections$, filter$]).pipe(\n filter(([collections, filter]) => collections != undefined && filter != undefined),\n map(([collections, filter]) => {\n if (\n filter.collectionId === undefined ||\n filter.collectionId === All ||\n filter.collectionId === Unassigned\n ) {\n return undefined;\n }\n\n return ServiceUtils.getTreeNodeObjectFromList(collections, filter.collectionId);\n }),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n firstSetup$\n .pipe(\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 firstSetup$\n .pipe(\n switchMap(() => this.refresh$),\n tap(() => (this.refreshing = true)),\n switchMap(() =>\n combineLatest([\n filter$,\n canAccessPremium$,\n allCollections$,\n this.organizationService.organizations$,\n ciphers$,\n collections$,\n selectedCollection$,\n ])\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(\n ([\n filter,\n canAccessPremium,\n allCollections,\n allOrganizations,\n ciphers,\n collections,\n selectedCollection,\n ]) => {\n this.filter = filter;\n this.canAccessPremium = canAccessPremium;\n this.allCollections = allCollections;\n this.allOrganizations = allOrganizations;\n this.ciphers = ciphers;\n this.collections = collections;\n this.selectedCollection = selectedCollection;\n\n this.canCreateCollections = allOrganizations?.some(\n (o) => o.canCreateNewCollections && !o.isProviderUser\n );\n\n this.showBulkMove =\n filter.type !== \"trash\" &&\n (filter.organizationId === undefined || filter.organizationId === Unassigned);\n this.isEmpty = collections?.length === 0 && ciphers?.length === 0;\n\n // This is a temporary fix to avoid double fetching collections.\n // TODO: Remove when implementing new VVR menu\n this.vaultFilterService.reloadCollections(allCollections);\n\n this.performingInitialLoad = false;\n this.refreshing = false;\n }\n );\n }\n\n get isShowingCards() {\n return (\n this.showBrowserOutdated || this.showPremiumCallout || this.showVerifyEmail || 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 onVaultItemsEvent(event: VaultItemEvent) {\n this.processingEvent = true;\n try {\n if (event.type === \"viewAttachments\") {\n await this.editCipherAttachments(event.item);\n } else if (event.type === \"viewCollections\") {\n await this.editCipherCollections(event.item);\n } else if (event.type === \"clone\") {\n await this.cloneCipher(event.item);\n } else if (event.type === \"restore\") {\n if (event.items.length === 1) {\n await this.restore(event.items[0]);\n } else {\n await this.bulkRestore(event.items);\n }\n } else if (event.type === \"delete\") {\n await this.handleDeleteEvent(event.items);\n } else if (event.type === \"moveToFolder\") {\n await this.bulkMove(event.items);\n } else if (event.type === \"moveToOrganization\") {\n if (event.items.length === 1) {\n await this.shareCipher(event.items[0]);\n } else {\n await this.bulkShare(event.items);\n }\n } else if (event.type === \"copyField\") {\n await this.copy(event.item, event.field);\n } else if (event.type === \"editCollection\") {\n await this.editCollection(event.item, CollectionDialogTabType.Info);\n } else if (event.type === \"viewCollectionAccess\") {\n await this.editCollection(event.item, CollectionDialogTabType.Access);\n }\n } finally {\n this.processingEvent = false;\n }\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 openFolderAddEditDialog(this.dialogService);\n };\n\n editFolder = async (folder: FolderFilter): Promise => {\n const dialog = openFolderAddEditDialog(this.dialogService, {\n data: {\n folderId: folder.id,\n },\n });\n\n const result = await lastValueFrom(dialog.closed);\n\n if (result === FolderAddEditDialogResult.Deleted) {\n this.router.navigate([], {\n queryParams: { folderId: null },\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n };\n\n filterSearchText(searchText: string) {\n this.searchText$.next(searchText);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n if (cipher?.reprompt !== 0 && !(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n\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 comp.onUploadedAttachment\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => (madeAttachmentChanges = true));\n comp.onDeletedAttachment\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => (madeAttachmentChanges = true));\n comp.onReuploadedAttachment\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n modal.onClosed.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (madeAttachmentChanges) {\n this.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async shareCipher(cipher: CipherView) {\n if (cipher?.reprompt !== 0 && !(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n const [modal] = await this.modalService.openViewRef(\n ShareComponent,\n this.shareModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onSharedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n this.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 comp.onSavedCollections.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n this.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.organizationId = component.collections.find(\n (collection) => collection.id === selectedColId\n )?.organizationId;\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 exists (cipher is null when new) and MP reprompt\n // is on for this cipher, then show password reprompt\n if (\n cipher &&\n cipher.reprompt !== 0 &&\n !(await this.passwordRepromptService.showPasswordPrompt())\n ) {\n // didn't pass password prompt, so don't open add / edit modal\n this.go({ cipherId: null, itemId: null });\n return;\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = id;\n comp.onSavedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n this.refresh();\n });\n comp.onDeletedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n this.refresh();\n });\n comp.onRestoredCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n this.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 addCollection() {\n const dialog = openCollectionDialog(this.dialogService, {\n data: {\n organizationId: this.allOrganizations\n .filter((o) => o.canCreateNewCollections)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))[0].id,\n parentCollectionId: this.filter.collectionId,\n showOrgSelector: true,\n collectionIds: this.allCollections.map((c) => c.id),\n },\n });\n const result = await lastValueFrom(dialog.closed);\n if (result.action === CollectionDialogAction.Saved) {\n if (result.collection) {\n // Update CollectionService with the new collection\n const c = new CollectionData(result.collection as CollectionDetailsResponse);\n await this.collectionService.upsert(c);\n }\n this.refresh();\n }\n }\n\n async editCollection(c: CollectionView, tab: CollectionDialogTabType): Promise {\n const dialog = openCollectionDialog(this.dialogService, {\n data: { collectionId: c?.id, organizationId: c.organizationId, initialTab: tab },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result.action === CollectionDialogAction.Saved) {\n if (result.collection) {\n // Update CollectionService with the new collection\n const c = new CollectionData(result.collection as CollectionDetailsResponse);\n await this.collectionService.upsert(c);\n }\n this.refresh();\n } else if (result.action === CollectionDialogAction.Deleted) {\n await this.collectionService.delete(result.collection?.id);\n this.refresh();\n }\n }\n\n async deleteCollection(collection: CollectionView): Promise {\n const organization = this.organizationService.get(collection.organizationId);\n if (!organization.canDeleteAssignedCollections && !organization.canDeleteAnyCollection) {\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.dialogService.openSimpleDialog({\n title: collection.name,\n content: { key: \"deleteCollectionConfirmation\" },\n type: \"warning\",\n });\n if (!confirmed) {\n return;\n }\n try {\n await this.apiService.deleteCollection(collection.organizationId, collection.id);\n await this.collectionService.delete(collection.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", collection.name)\n );\n // Navigate away if we deleted the collection we were viewing\n if (this.selectedCollection?.node.id === collection.id) {\n this.router.navigate([], {\n queryParams: { collectionId: this.selectedCollection.parent?.node.id ?? null },\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cloneCipher(cipher: CipherView) {\n if (cipher.login?.hasFido2Credentials) {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"passkeyNotCopied\" },\n content: { key: \"passkeyNotCopiedAlert\" },\n type: \"info\",\n });\n\n if (!confirmed) {\n return false;\n }\n }\n\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n async restore(c: CipherView): Promise {\n if (!(await this.repromptCipher([c]))) {\n return;\n }\n\n if (!c.isDeleted) {\n return;\n }\n\n try {\n await this.cipherService.restoreWithServer(c.id);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async bulkRestore(ciphers: CipherView[]) {\n if (!(await this.repromptCipher(ciphers))) {\n return;\n }\n\n const selectedCipherIds = ciphers.map((cipher) => cipher.id);\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 await this.cipherService.restoreManyWithServer(selectedCipherIds);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItems\"));\n this.refresh();\n }\n\n private async handleDeleteEvent(items: VaultItem[]) {\n const ciphers = items.filter((i) => i.collection === undefined).map((i) => i.cipher);\n const collections = items.filter((i) => i.cipher === undefined).map((i) => i.collection);\n if (ciphers.length === 1 && collections.length === 0) {\n await this.deleteCipher(ciphers[0]);\n } else if (ciphers.length === 0 && collections.length === 1) {\n await this.deleteCollection(collections[0]);\n } else {\n const orgIds = items\n .filter((i) => i.cipher === undefined)\n .map((i) => i.collection.organizationId);\n const orgs = await firstValueFrom(\n this.organizationService.organizations$.pipe(\n map((orgs) => orgs.filter((o) => orgIds.includes(o.id)))\n )\n );\n await this.bulkDelete(ciphers, collections, orgs);\n }\n }\n\n async deleteCipher(c: CipherView): Promise {\n if (!(await this.repromptCipher([c]))) {\n return;\n }\n\n const permanent = c.isDeleted;\n\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: permanent ? \"permanentlyDeleteItem\" : \"deleteItem\" },\n content: { key: permanent ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.deleteCipherWithServer(c.id, permanent);\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 }\n\n async bulkDelete(\n ciphers: CipherView[],\n collections: CollectionView[],\n organizations: Organization[]\n ) {\n if (!(await this.repromptCipher(ciphers))) {\n return;\n }\n\n if (ciphers.length === 0 && collections.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n const dialog = openBulkDeleteDialog(this.dialogService, {\n data: {\n permanent: this.filter.type === \"trash\",\n cipherIds: ciphers.map((c) => c.id),\n collectionIds: collections.map((c) => c.id),\n organizations: organizations,\n collections: collections,\n },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkDeleteDialogResult.Deleted) {\n this.refresh();\n }\n }\n\n async bulkMove(ciphers: CipherView[]) {\n if (!(await this.repromptCipher(ciphers))) {\n return;\n }\n\n const selectedCipherIds = ciphers.map((cipher) => cipher.id);\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.refresh();\n }\n }\n\n async copy(cipher: CipherView, field: \"username\" | \"password\" | \"totp\") {\n let aType;\n let value;\n let typeI18nKey;\n\n if (field === \"username\") {\n aType = \"Username\";\n value = cipher.login.username;\n typeI18nKey = \"username\";\n } else if (field === \"password\") {\n aType = \"Password\";\n value = cipher.login.password;\n typeI18nKey = \"password\";\n } else if (field === \"totp\") {\n aType = \"TOTP\";\n value = await this.totpService.getCode(cipher.login.totp);\n typeI18nKey = \"verificationCodeTotp\";\n } else {\n this.platformUtilsService.showToast(\"info\", null, this.i18nService.t(\"unexpectedError\"));\n return;\n }\n\n if (\n this.passwordRepromptService.protectedFields().includes(aType) &&\n !(await this.repromptCipher([cipher]))\n ) {\n return;\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 (field === \"password\") {\n this.eventCollectionService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id);\n } else if (field === \"totp\") {\n this.eventCollectionService.collect(EventType.Cipher_ClientCopiedHiddenField, cipher.id);\n }\n }\n\n async bulkShare(ciphers: CipherView[]) {\n if (!(await this.repromptCipher(ciphers))) {\n return;\n }\n\n if (ciphers.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 } });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkShareDialogResult.Shared) {\n this.refresh();\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 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 protected async repromptCipher(ciphers: CipherView[]) {\n const notProtected = !ciphers.find((cipher) => cipher.reprompt !== CipherRepromptType.None);\n\n return notProtected || (await this.passwordRepromptService.showPasswordPrompt());\n }\n\n private refresh() {\n this.refresh$.next();\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 { LooseComponentsModule, SharedModule } from \"../../shared\";\nimport { CollectionDialogModule } from \"../components/collection-dialog\";\nimport { VaultItemsModule } from \"../components/vault-items/vault-items.module\";\nimport { CollectionBadgeModule } from \"../org-vault/collection-badge/collection-badge.module\";\nimport { GroupBadgeModule } from \"../org-vault/group-badge/group-badge.module\";\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 { 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 VaultItemsModule,\n CollectionDialogModule,\n ],\n declarations: [VaultComponent, VaultHeaderComponent],\n exports: [VaultComponent],\n})\nexport class VaultModule {}\n","import { NgModule } from \"@angular/core\";\nimport { Route, RouterModule, Routes } from \"@angular/router\";\n\nimport {\n AuthGuard,\n lockGuard,\n redirectGuard,\n tdeDecryptionRequiredGuard,\n UnauthGuard,\n} from \"@bitwarden/angular/auth/guards\";\nimport { canAccessFeature } from \"@bitwarden/angular/guard/feature-flag.guard\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\n\nimport { flagEnabled, Flags } from \"../utils/flags\";\n\nimport { AcceptFamilySponsorshipComponent } from \"./admin-console/organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./admin-console/organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { CreateOrganizationComponent } from \"./admin-console/settings/create-organization.component\";\nimport { SponsoredFamiliesComponent } from \"./admin-console/settings/sponsored-families.component\";\nimport { AcceptEmergencyComponent } from \"./auth/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"./auth/accept-organization.component\";\nimport { HintComponent } from \"./auth/hint.component\";\nimport { LockComponent } from \"./auth/lock.component\";\nimport { LoginDecryptionOptionsComponent } from \"./auth/login/login-decryption-options/login-decryption-options.component\";\nimport { LoginWithDeviceComponent } from \"./auth/login/login-with-device.component\";\nimport { LoginComponent } from \"./auth/login/login.component\";\nimport { RecoverDeleteComponent } from \"./auth/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./auth/recover-two-factor.component\";\nimport { RemovePasswordComponent } from \"./auth/remove-password.component\";\nimport { SetPasswordComponent } from \"./auth/set-password.component\";\nimport { EmergencyAccessViewComponent } from \"./auth/settings/emergency-access/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"./auth/settings/emergency-access/emergency-access.component\";\nimport { SsoComponent } from \"./auth/sso.component\";\nimport { TrialInitiationComponent } from \"./auth/trial-initiation/trial-initiation.component\";\nimport { TwoFactorComponent } from \"./auth/two-factor.component\";\nimport { UpdatePasswordComponent } from \"./auth/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"./auth/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"./auth/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"./auth/verify-recover-delete.component\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { ReportsModule } from \"./reports\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { DomainRulesComponent } from \"./settings/domain-rules.component\";\nimport { PreferencesComponent } from \"./settings/preferences.component\";\nimport { SecurityRoutingModule } from \"./settings/security-routing.module\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { AccessComponent } from \"./tools/send/access.component\";\nimport { SendComponent } from \"./tools/send/send.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { VaultModule } from \"./vault/individual-vault/vault.module\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: FrontendLayoutComponent,\n data: { doNotSaveUrl: true },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n children: [], // Children lets us have an empty component.\n canActivate: [redirectGuard()], // 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 {\n path: \"admin-approval-requested\",\n component: LoginWithDeviceComponent,\n data: { titleId: \"loginWithDevice\" },\n },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuard] },\n {\n path: \"login-initiated\",\n component: LoginDecryptionOptionsComponent,\n canActivate: [\n tdeDecryptionRequiredGuard(),\n canAccessFeature(FeatureFlag.TrustedDeviceEncryption),\n ],\n },\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 path: \"migrate-legacy-encryption\",\n loadComponent: () =>\n import(\"./auth/migrate-encryption/migrate-legacy-encryption.component\").then(\n (mod) => mod.MigrateFromLegacyEncryptionComponent\n ),\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: () =>\n import(\"./billing/individual/individual-billing.module\").then(\n (m) => m.IndividualBillingModule\n ),\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: \"import\",\n loadComponent: () =>\n import(\"./tools/import/import-web.component\").then((mod) => mod.ImportWebComponent),\n data: {\n titleId: \"importData\",\n },\n },\n {\n path: \"export\",\n loadChildren: () =>\n import(\"./tools/vault-export/export.module\").then((m) => m.ExportModule),\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: () =>\n import(\"./admin-console/organizations/organization.module\").then((m) => m.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/platform/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/platform/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 { BreachAccountResponse } from \"@bitwarden/common/models/response/breach-account.response\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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/platform/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/auth/guards\";\n\nimport { HasPremiumGuard } from \"../core/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 { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\n\nimport { AddEditComponent } from \"../../vault/individual-vault/add-edit.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"../../vault/org-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 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/platform/abstractions/messaging.service\";\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\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 async ngOnInit() {\n await super.load();\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/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\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\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 await super.load();\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/platform/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 await super.load();\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/platform/abstractions/messaging.service\";\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\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 await super.load();\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/platform/abstractions/messaging.service\";\nimport { PasswordStrengthServiceAbstraction } from \"@bitwarden/common/tools/password-strength\";\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\";\nimport { BadgeTypes } from \"@bitwarden/components\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 passwordStrengthService: PasswordStrengthServiceAbstraction,\n modalService: ModalService,\n messagingService: MessagingService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, passwordRepromptService);\n }\n\n async ngOnInit() {\n await super.load();\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.passwordStrengthService.getPasswordStrength(\n c.login.password,\n null,\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","
\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 { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { SecretVerificationRequest } from \"@bitwarden/common/auth/models/request/secret-verification.request\";\nimport { ApiKeyResponse } from \"@bitwarden/common/auth/models/response/api-key.response\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\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 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 { ProfileResponse } from \"@bitwarden/common/models/response/profile.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\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 \n Customize\n \n
\n \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 { UpdateProfileRequest } from \"@bitwarden/common/auth/models/request/update-profile.request\";\nimport { ProfileResponse } from \"@bitwarden/common/models/response/profile.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 fingerprintMaterial: 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 logService: LogService,\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 this.fingerprintMaterial = await this.stateService.getUserId();\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","import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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 {{ fingerprintLabel }}:\n \n \n
\n {{ fingerprint }}\n

\n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\n\nimport { SharedModule } from \"../../shared.module\";\n\n@Component({\n selector: \"app-account-fingerprint\",\n templateUrl: \"account-fingerprint.component.html\",\n standalone: true,\n imports: [SharedModule],\n})\nexport class AccountFingerprintComponent implements OnInit {\n @Input() fingerprintMaterial: string;\n @Input() publicKeyBuffer: Uint8Array;\n @Input() fingerprintLabel: string;\n\n protected fingerprint: string;\n\n constructor(private cryptoService: CryptoService) {}\n\n async ngOnInit() {\n // TODO - In the future, remove this code and use the fingerprint pipe once merged\n const generatedFingerprint = await this.cryptoService.getFingerprint(\n this.fingerprintMaterial,\n this.publicKeyBuffer\n );\n this.fingerprint = generatedFingerprint?.join(\"-\") ?? null;\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { ChangeKdfConfirmationComponent } from \"./change-kdf-confirmation.component\";\nimport { ChangeKdfComponent } from \"./change-kdf.component\";\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n declarations: [ChangeKdfComponent, ChangeKdfConfirmationComponent],\n exports: [ChangeKdfComponent, ChangeKdfConfirmationComponent],\n})\nexport class ChangeKdfModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { PasswordCalloutComponent } from \"@bitwarden/auth\";\n\nimport { OrganizationSwitcherComponent } from \"../admin-console/components/organization-switcher.component\";\nimport { OrganizationLayoutComponent } from \"../admin-console/organizations/layouts/organization-layout.component\";\nimport { EventsComponent as OrgEventsComponent } from \"../admin-console/organizations/manage/events.component\";\nimport { UserConfirmComponent as OrgUserConfirmComponent } from \"../admin-console/organizations/manage/user-confirm.component\";\nimport { AcceptFamilySponsorshipComponent } from \"../admin-console/organizations/sponsorships/accept-family-sponsorship.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"../admin-console/organizations/tools/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from \"../admin-console/organizations/tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from \"../admin-console/organizations/tools/reused-passwords-report.component\";\nimport { ToolsComponent as OrgToolsComponent } from \"../admin-console/organizations/tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from \"../admin-console/organizations/tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from \"../admin-console/organizations/tools/weak-passwords-report.component\";\nimport { ProvidersComponent } from \"../admin-console/providers/providers.component\";\nimport { SponsoredFamiliesComponent } from \"../admin-console/settings/sponsored-families.component\";\nimport { SponsoringOrgRowComponent } from \"../admin-console/settings/sponsoring-org-row.component\";\nimport { AcceptEmergencyComponent } from \"../auth/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"../auth/accept-organization.component\";\nimport { HintComponent } from \"../auth/hint.component\";\nimport { LockComponent } from \"../auth/lock.component\";\nimport { RecoverDeleteComponent } from \"../auth/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"../auth/recover-two-factor.component\";\nimport { RegisterFormModule } from \"../auth/register-form/register-form.module\";\nimport { RemovePasswordComponent } from \"../auth/remove-password.component\";\nimport { SetPasswordComponent } from \"../auth/set-password.component\";\nimport { DeauthorizeSessionsComponent } from \"../auth/settings/deauthorize-sessions.component\";\nimport { EmergencyAccessAddEditComponent } from \"../auth/settings/emergency-access/emergency-access-add-edit.component\";\nimport { EmergencyAccessAttachmentsComponent } from \"../auth/settings/emergency-access/emergency-access-attachments.component\";\nimport { EmergencyAccessConfirmComponent } from \"../auth/settings/emergency-access/emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"../auth/settings/emergency-access/emergency-access-takeover.component\";\nimport { EmergencyAccessViewComponent } from \"../auth/settings/emergency-access/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"../auth/settings/emergency-access/emergency-access.component\";\nimport { EmergencyAddEditComponent } from \"../auth/settings/emergency-access/emergency-add-edit.component\";\nimport { TwoFactorAuthenticatorComponent } from \"../auth/settings/two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"../auth/settings/two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"../auth/settings/two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"../auth/settings/two-factor-recovery.component\";\nimport { TwoFactorSetupComponent } from \"../auth/settings/two-factor-setup.component\";\nimport { TwoFactorVerifyComponent } from \"../auth/settings/two-factor-verify.component\";\nimport { TwoFactorWebAuthnComponent } from \"../auth/settings/two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"../auth/settings/two-factor-yubikey.component\";\nimport { VerifyEmailComponent } from \"../auth/settings/verify-email.component\";\nimport { UserVerificationModule } from \"../auth/shared/components/user-verification\";\nimport { SsoComponent } from \"../auth/sso.component\";\nimport { TwoFactorOptionsComponent } from \"../auth/two-factor-options.component\";\nimport { TwoFactorComponent } from \"../auth/two-factor.component\";\nimport { UpdatePasswordComponent } from \"../auth/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"../auth/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"../auth/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"../auth/verify-recover-delete.component\";\nimport { DynamicAvatarComponent } from \"../components/dynamic-avatar.component\";\nimport { SelectableAvatarComponent } from \"../components/selectable-avatar.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 { AccountComponent } from \"../settings/account.component\";\nimport { ApiKeyComponent } from \"../settings/api-key.component\";\nimport { ChangeAvatarComponent } from \"../settings/change-avatar.component\";\nimport { ChangeEmailComponent } from \"../settings/change-email.component\";\nimport { ChangeKdfModule } from \"../settings/change-kdf/change-kdf.module\";\nimport { DeleteAccountComponent } from \"../settings/delete-account.component\";\nimport { DomainRulesComponent } from \"../settings/domain-rules.component\";\nimport { LowKdfComponent } from \"../settings/low-kdf.component\";\nimport { PreferencesComponent } from \"../settings/preferences.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 { VaultTimeoutInputComponent } from \"../settings/vault-timeout-input.component\";\nimport { GeneratorComponent } from \"../tools/generator.component\";\nimport { PasswordGeneratorHistoryComponent } from \"../tools/password-generator-history.component\";\nimport { AccessComponent } from \"../tools/send/access.component\";\nimport { AddEditComponent as SendAddEditComponent } from \"../tools/send/add-edit.component\";\nimport { ToolsComponent } from \"../tools/tools.component\";\nimport { PremiumBadgeComponent } from \"../vault/components/premium-badge.component\";\nimport { AddEditCustomFieldsComponent } from \"../vault/individual-vault/add-edit-custom-fields.component\";\nimport { AddEditComponent } from \"../vault/individual-vault/add-edit.component\";\nimport { AttachmentsComponent } from \"../vault/individual-vault/attachments.component\";\nimport { CollectionsComponent } from \"../vault/individual-vault/collections.component\";\nimport { FolderAddEditComponent } from \"../vault/individual-vault/folder-add-edit.component\";\nimport { ShareComponent } from \"../vault/individual-vault/share.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"../vault/org-vault/add-edit.component\";\nimport { AttachmentsComponent as OrgAttachmentsComponent } from \"../vault/org-vault/attachments.component\";\nimport { CollectionsComponent as OrgCollectionsComponent } from \"../vault/org-vault/collections.component\";\n\nimport { EnvironmentSelectorModule } from \"./../components/environment-selector/environment-selector.module\";\nimport { AccountFingerprintComponent } from \"./components/account-fingerprint/account-fingerprint.component\";\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: [\n SharedModule,\n RegisterFormModule,\n ProductSwitcherModule,\n UserVerificationModule,\n ChangeKdfModule,\n DynamicAvatarComponent,\n EnvironmentSelectorModule,\n AccountFingerprintComponent,\n PasswordCalloutComponent,\n ],\n declarations: [\n AcceptEmergencyComponent,\n AcceptFamilySponsorshipComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n ChangeEmailComponent,\n CollectionsComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrgAttachmentsComponent,\n OrgCollectionsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserConfirmComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserLayoutComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n LowKdfComponent,\n ],\n exports: [\n UserVerificationModule,\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n ChangeEmailComponent,\n CollectionsComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n DynamicAvatarComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrgAttachmentsComponent,\n OrgCollectionsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserConfirmComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserLayoutComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n LowKdfComponent,\n ],\n})\nexport class LooseComponentsModule {}\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 { ColorPasswordComponent } from \"./color-password.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ColorPasswordComponent],\n declarations: [ColorPasswordComponent],\n})\nexport class ColorPasswordModule {}\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 ProgressModule,\n RadioButtonModule,\n SelectModule,\n TableModule,\n TabsModule,\n ToggleGroupModule,\n TypographyModule,\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 ProgressModule,\n RadioButtonModule,\n TableModule,\n TabsModule,\n ToggleGroupModule,\n TypographyModule,\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 ProgressModule,\n RadioButtonModule,\n SelectModule,\n TableModule,\n TabsModule,\n ToggleGroupModule,\n TypographyModule,\n\n // Web specific\n ],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class SharedModule {}\n","import { EventType } from \"@bitwarden/common/enums\";\nimport { EventView } from \"@bitwarden/common/models/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","import { Injectable } from \"@angular/core\";\nimport * as papa from \"papaparse\";\n\nimport { EventView } from \"@bitwarden/common/models/view/event.view\";\nimport { ExportHelper } from \"@bitwarden/exporter/export-helper\";\n\nimport { EventExport } from \"./event.export\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class EventExportService {\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 return ExportHelper.getFileName(prefix, extension);\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 {\n combineLatest,\n map,\n Observable,\n of,\n shareReplay,\n Subject,\n switchMap,\n takeUntil,\n} from \"rxjs\";\n\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/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { CollectionResponse } from \"@bitwarden/common/vault/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\nimport { DialogService, BitValidators } from \"@bitwarden/components\";\n\nimport { GroupService, GroupView } from \"../../../admin-console/organizations/core\";\nimport { PermissionMode } from \"../../../admin-console/organizations/shared/components/access-selector/access-selector.component\";\nimport {\n AccessItemView,\n AccessItemValue,\n AccessItemType,\n convertToSelectionView,\n convertToPermission,\n} from \"../../../admin-console/organizations/shared/components/access-selector/access-selector.models\";\nimport { CollectionAdminService } from \"../../core/collection-admin.service\";\nimport { CollectionAdminView } from \"../../core/views/collection-admin.view\";\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 showOrgSelector?: boolean;\n collectionIds?: string[];\n}\n\nexport interface CollectionDialogResult {\n action: CollectionDialogAction;\n collection: CollectionResponse | CollectionView;\n}\n\nexport enum CollectionDialogAction {\n Saved = \"saved\",\n Canceled = \"canceled\",\n Deleted = \"deleted\",\n}\n\n@Component({\n templateUrl: \"collection-dialog.component.html\",\n})\nexport class CollectionDialogComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject();\n protected organizations$: Observable;\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 showOrgSelector = false;\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 selectedOrg: \"\",\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 private dialogService: DialogService\n ) {\n this.tabIndex = params.initialTab ?? CollectionDialogTabType.Info;\n }\n\n async ngOnInit() {\n // Opened from the individual vault\n if (this.params.showOrgSelector) {\n this.showOrgSelector = true;\n this.formGroup.controls.selectedOrg.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((id) => this.loadOrg(id, this.params.collectionIds));\n this.organizations$ = this.organizationService.organizations$.pipe(\n map((orgs) =>\n orgs\n .filter((o) => o.canCreateNewCollections && !o.isProviderUser)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))\n )\n );\n // patchValue will trigger a call to loadOrg() in this case, so no need to call it again here\n this.formGroup.patchValue({ selectedOrg: this.params.organizationId });\n } else {\n // Opened from the org vault\n this.formGroup.patchValue({ selectedOrg: this.params.organizationId });\n this.loadOrg(this.params.organizationId, this.params.collectionIds);\n }\n }\n\n async loadOrg(orgId: string, collectionIds: string[]) {\n const organization$ = of(this.organizationService.get(orgId)).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(orgId);\n })\n );\n combineLatest({\n organization: organization$,\n collections: this.collectionService.getAll(orgId),\n collectionDetails: this.params.collectionId\n ? this.collectionService.get(orgId, this.params.collectionId)\n : of(null),\n groups: groups$,\n users: this.organizationUserService.getAllUsers(orgId),\n })\n .pipe(takeUntil(this.formGroup.controls.selectedOrg.valueChanges), 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 (collectionIds) {\n collections = collections.filter((c) => collectionIds.includes(c.id));\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(CollectionDialogAction.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.formGroup.controls.selectedOrg.value;\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 const savedCollection = 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(CollectionDialogAction.Saved, savedCollection);\n };\n\n protected delete = async () => {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: this.collection?.name,\n content: { key: \"deleteCollectionConfirmation\" },\n type: \"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(CollectionDialogAction.Deleted, this.collection);\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private close(action: CollectionDialogAction, collection?: CollectionResponse | CollectionView) {\n this.dialogRef.close({ action, collection } as CollectionDialogResult);\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 {{ \"organization\" | i18n }}\n \n \n \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 { NgModule } from \"@angular/core\";\n\nimport { SelectModule } from \"@bitwarden/components\";\n\nimport { AccessSelectorModule } from \"../../../admin-console/organizations/shared/components/access-selector/access-selector.module\";\nimport { SharedModule } from \"../../../shared\";\n\nimport { CollectionDialogComponent } from \"./collection-dialog.component\";\n@NgModule({\n imports: [SharedModule, AccessSelectorModule, SelectModule],\n declarations: [CollectionDialogComponent],\n exports: [CollectionDialogComponent],\n})\nexport class CollectionDialogModule {}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\nimport { StateService } from \"@bitwarden/common/platform/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/platform/abstractions/messaging.service\";\n\n@Component({\n selector: \"app-premium-badge\",\n template: `\n \n `,\n})\nexport class PremiumBadgeComponent {\n constructor(private messagingService: MessagingService) {}\n\n premiumRequired() {\n this.messagingService.send(\"premiumRequired\");\n }\n}\n","\n \n \n \n \n \n \n \n {{ \"name\" | i18n }}\n {{ \"owner\" | i18n }}\n {{ \"collections\" | i18n }}\n {{ \"groups\" | i18n }}\n \n \n \n \n \n \n {{ \"moveSelectedToOrg\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n","import { SelectionModel } from \"@angular/cdk/collections\";\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\nimport { TableDataSource } from \"@bitwarden/components\";\n\nimport { GroupView } from \"../../../admin-console/organizations/core\";\nimport { Unassigned } from \"../../individual-vault/vault-filter/shared/models/routed-vault-filter.model\";\n\nimport { VaultItem } from \"./vault-item\";\nimport { VaultItemEvent } from \"./vault-item-event\";\n\n// Fixed manual row height required due to how cdk-virtual-scroll works\nexport const RowHeight = 65;\nexport const RowHeightClass = `tw-h-[65px]`;\n\nconst MaxSelectionCount = 500;\n\n@Component({\n selector: \"app-vault-items\",\n templateUrl: \"vault-items.component.html\",\n // TODO: Improve change detection, see: https://bitwarden.atlassian.net/browse/TDL-220\n // changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VaultItemsComponent {\n protected RowHeight = RowHeight;\n\n @Input() disabled: boolean;\n @Input() showOwner: boolean;\n @Input() showCollections: boolean;\n @Input() showGroups: boolean;\n @Input() useEvents: boolean;\n @Input() cloneableOrganizationCiphers: boolean;\n @Input() showPremiumFeatures: boolean;\n @Input() showBulkMove: boolean;\n @Input() showBulkTrashOptions: boolean;\n @Input() allOrganizations: Organization[] = [];\n @Input() allCollections: CollectionView[] = [];\n @Input() allGroups: GroupView[] = [];\n\n private _ciphers?: CipherView[] = [];\n @Input() get ciphers(): CipherView[] {\n return this._ciphers;\n }\n set ciphers(value: CipherView[] | undefined) {\n this._ciphers = value ?? [];\n this.refreshItems();\n }\n\n private _collections?: CollectionView[] = [];\n @Input() get collections(): CollectionView[] {\n return this._collections;\n }\n set collections(value: CollectionView[] | undefined) {\n this._collections = value ?? [];\n this.refreshItems();\n }\n\n @Output() onEvent = new EventEmitter();\n\n protected editableItems: VaultItem[] = [];\n protected dataSource = new TableDataSource();\n protected selection = new SelectionModel(true, [], true);\n\n get showExtraColumn() {\n return this.showCollections || this.showGroups || this.showOwner;\n }\n\n get isAllSelected() {\n return this.editableItems\n .slice(0, MaxSelectionCount)\n .every((item) => this.selection.isSelected(item));\n }\n\n get isEmpty() {\n return this.dataSource.data.length === 0;\n }\n\n get bulkMoveAllowed() {\n return (\n this.showBulkMove && this.selection.selected.filter((item) => item.collection).length === 0\n );\n }\n\n protected canEditCollection(collection: CollectionView): boolean {\n // Only allow allow deletion if collection editing is enabled and not deleting \"Unassigned\"\n if (collection.id === Unassigned) {\n return false;\n }\n\n const organization = this.allOrganizations.find((o) => o.id === collection.organizationId);\n return collection.canEdit(organization);\n }\n\n protected canDeleteCollection(collection: CollectionView): boolean {\n // Only allow allow deletion if collection editing is enabled and not deleting \"Unassigned\"\n if (collection.id === Unassigned) {\n return false;\n }\n\n const organization = this.allOrganizations.find((o) => o.id === collection.organizationId);\n return collection.canDelete(organization);\n }\n\n protected toggleAll() {\n this.isAllSelected\n ? this.selection.clear()\n : this.selection.select(...this.editableItems.slice(0, MaxSelectionCount));\n }\n\n protected event(event: VaultItemEvent) {\n this.onEvent.emit(event);\n }\n\n protected bulkMoveToFolder() {\n this.event({\n type: \"moveToFolder\",\n items: this.selection.selected\n .filter((item) => item.cipher !== undefined)\n .map((item) => item.cipher),\n });\n }\n\n protected bulkMoveToOrganization() {\n this.event({\n type: \"moveToOrganization\",\n items: this.selection.selected\n .filter((item) => item.cipher !== undefined)\n .map((item) => item.cipher),\n });\n }\n\n protected bulkRestore() {\n this.event({\n type: \"restore\",\n items: this.selection.selected\n .filter((item) => item.cipher !== undefined)\n .map((item) => item.cipher),\n });\n }\n\n protected bulkDelete() {\n this.event({\n type: \"delete\",\n items: this.selection.selected,\n });\n }\n\n protected canClone(vaultItem: VaultItem) {\n return (\n (vaultItem.cipher.organizationId && this.cloneableOrganizationCiphers) ||\n vaultItem.cipher.organizationId == null\n );\n }\n\n private refreshItems() {\n const collections: VaultItem[] = this.collections.map((collection) => ({ collection }));\n const ciphers: VaultItem[] = this.ciphers.map((cipher) => ({ cipher }));\n const items: VaultItem[] = [].concat(collections).concat(ciphers);\n\n this.selection.clear();\n this.editableItems = items.filter(\n (item) =>\n item.cipher !== undefined ||\n (item.collection !== undefined && this.canDeleteCollection(item.collection))\n );\n this.dataSource.data = items;\n }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { AvatarUpdateService } from \"@bitwarden/common/abstractions/account/avatar-update.service\";\nimport { TokenService } from \"@bitwarden/common/auth/abstractions/token.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\n\nimport { Unassigned } from \"../vault-filter/shared/models/routed-vault-filter.model\";\n\n@Component({\n selector: \"app-org-badge\",\n templateUrl: \"organization-name-badge.component.html\",\n})\nexport class OrganizationNameBadgeComponent implements OnChanges {\n @Input() organizationId?: string;\n @Input() organizationName: string;\n @Input() disabled: boolean;\n\n // Need a separate variable or we get weird behavior when used as part of cdk virtual scrolling\n name: string;\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 // ngOnChanges is required since this component might be reused as part of\n // cdk virtual scrolling\n async ngOnChanges() {\n this.isMe = this.organizationName == null || this.organizationName === \"\";\n\n if (this.isMe) {\n this.name = this.i18nService.t(\"me\");\n this.color = await this.avatarService.loadColorFromState();\n if (this.color == null) {\n const userId = await this.tokenService.getUserId();\n if (userId != null) {\n this.color = Utils.stringToColor(userId);\n } else {\n const userName =\n (await this.tokenService.getName()) ?? (await this.tokenService.getEmail());\n this.color = Utils.stringToColor(userName.toUpperCase());\n }\n }\n } else {\n this.name = this.organizationName;\n this.color = Utils.stringToColor(this.organizationName.toUpperCase());\n }\n this.textColor = Utils.pickTextColorBasedOnBgColor(this.color, 135, true) + \"!important\";\n }\n\n get organizationIdLink() {\n return this.organizationId ?? Unassigned;\n }\n}\n","\n {{ name | ellipsis : 13 }}\n\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { CollectionView } from \"@bitwarden/common/vault/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/vault/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","\n \n\n\n \n\n\n
\n \n {{ cipher.name }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n \n {{ \"attachmentsNeedFix\" | i18n }}\n \n \n
\n
\n {{ cipher.subTitle }}\n\n\n \n \n\n\n \n\n\n\n \n \n \n \n \n \n \n \n {{ \"launch\" | i18n }}\n \n \n\n \n \n \n \n {{ \"moveToOrganization\" | i18n }}\n \n \n \n {{ \"collections\" | i18n }}\n \n \n \n \n \n\n","import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\nimport { VaultItemEvent } from \"./vault-item-event\";\nimport { RowHeightClass } from \"./vault-items.component\";\n\n@Component({\n selector: \"tr[appVaultCipherRow]\",\n templateUrl: \"vault-cipher-row.component.html\",\n})\nexport class VaultCipherRowComponent {\n protected RowHeightClass = RowHeightClass;\n\n @Input() disabled: boolean;\n @Input() cipher: CipherView;\n @Input() showOwner: boolean;\n @Input() showCollections: boolean;\n @Input() showGroups: boolean;\n @Input() showPremiumFeatures: boolean;\n @Input() useEvents: boolean;\n @Input() cloneable: boolean;\n @Input() organizations: Organization[];\n @Input() collections: CollectionView[];\n\n @Output() onEvent = new EventEmitter();\n\n @Input() checked: boolean;\n @Output() checkedToggled = new EventEmitter();\n\n protected CipherType = CipherType;\n\n constructor(private router: Router, private activatedRoute: ActivatedRoute) {}\n\n @HostBinding(\"class\")\n get classes() {\n return [].concat(this.disabled ? [] : [\"tw-cursor-pointer\"]);\n }\n\n protected get showTotpCopyButton() {\n return (\n (this.cipher.login?.hasTotp ?? false) &&\n (this.cipher.organizationUseTotp || this.showPremiumFeatures)\n );\n }\n\n protected get showFixOldAttachments() {\n return this.cipher.hasOldAttachments && this.cipher.organizationId == null;\n }\n\n @HostListener(\"click\")\n protected click() {\n this.router.navigate([], {\n queryParams: { itemId: this.cipher.id },\n queryParamsHandling: \"merge\",\n });\n }\n\n protected copy(field: \"username\" | \"password\" | \"totp\") {\n this.onEvent.emit({ type: \"copyField\", item: this.cipher, field });\n }\n\n protected clone() {\n this.onEvent.emit({ type: \"clone\", item: this.cipher });\n }\n\n protected moveToOrganization() {\n this.onEvent.emit({ type: \"moveToOrganization\", items: [this.cipher] });\n }\n\n protected editCollections() {\n this.onEvent.emit({ type: \"viewCollections\", item: this.cipher });\n }\n\n protected events() {\n this.onEvent.emit({ type: \"viewEvents\", item: this.cipher });\n }\n\n protected restore() {\n this.onEvent.emit({ type: \"restore\", items: [this.cipher] });\n }\n\n protected deleteCipher() {\n this.onEvent.emit({ type: \"delete\", items: [{ cipher: this.cipher }] });\n }\n\n protected attachments() {\n this.onEvent.emit({ type: \"viewAttachments\", item: this.cipher });\n }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/admin-console/models/request/selection-read-only.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\nimport { GroupView } from \"../../../admin-console/organizations/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","\n \n\n\n
\n \n
\n\n\n \n {{ collection.name }}\n \n\n\n \n \n\n\n\n \n\n\n \n \n \n \n \n \n\n","import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\nimport { GroupView } from \"../../../admin-console/organizations/core\";\nimport { CollectionAdminView } from \"../../core/views/collection-admin.view\";\n\nimport { VaultItemEvent } from \"./vault-item-event\";\nimport { RowHeightClass } from \"./vault-items.component\";\n\n@Component({\n selector: \"tr[appVaultCollectionRow]\",\n templateUrl: \"vault-collection-row.component.html\",\n})\nexport class VaultCollectionRowComponent {\n protected RowHeightClass = RowHeightClass;\n\n @Input() disabled: boolean;\n @Input() collection: CollectionView;\n @Input() showOwner: boolean;\n @Input() showCollections: boolean;\n @Input() showGroups: boolean;\n @Input() canEditCollection: boolean;\n @Input() canDeleteCollection: boolean;\n @Input() organizations: Organization[];\n @Input() groups: GroupView[];\n\n @Output() onEvent = new EventEmitter();\n\n @Input() checked: boolean;\n @Output() checkedToggled = new EventEmitter();\n\n constructor(private router: Router, private activatedRoute: ActivatedRoute) {}\n\n @HostBinding(\"class\")\n get classes() {\n return [].concat(this.disabled ? [] : [\"tw-cursor-pointer\"]);\n }\n\n get collectionGroups() {\n if (!(this.collection instanceof CollectionAdminView)) {\n return [];\n }\n\n return this.collection.groups;\n }\n\n get organization() {\n return this.organizations.find((o) => o.id === this.collection.organizationId);\n }\n\n @HostListener(\"click\")\n protected click() {\n this.router.navigate([], {\n queryParams: { collectionId: this.collection.id },\n queryParamsHandling: \"merge\",\n });\n }\n\n protected edit() {\n this.onEvent.next({ type: \"editCollection\", item: this.collection });\n }\n\n protected access() {\n this.onEvent.next({ type: \"viewCollectionAccess\", item: this.collection });\n }\n\n protected deleteCollection() {\n this.onEvent.next({ type: \"delete\", items: [{ collection: this.collection }] });\n }\n}\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { TableModule } from \"@bitwarden/components\";\n\nimport { SharedModule } from \"../../../shared/shared.module\";\nimport { OrganizationBadgeModule } from \"../../individual-vault/organization-badge/organization-badge.module\";\nimport { PipesModule } from \"../../individual-vault/pipes/pipes.module\";\nimport { CollectionBadgeModule } from \"../../org-vault/collection-badge/collection-badge.module\";\nimport { GroupBadgeModule } from \"../../org-vault/group-badge/group-badge.module\";\n\nimport { VaultCipherRowComponent } from \"./vault-cipher-row.component\";\nimport { VaultCollectionRowComponent } from \"./vault-collection-row.component\";\nimport { VaultItemsComponent } from \"./vault-items.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ScrollingModule,\n SharedModule,\n TableModule,\n OrganizationBadgeModule,\n CollectionBadgeModule,\n GroupBadgeModule,\n PipesModule,\n ],\n declarations: [VaultItemsComponent, VaultCipherRowComponent, VaultCollectionRowComponent],\n exports: [VaultItemsComponent],\n})\nexport class VaultItemsModule {}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { SelectionReadOnlyRequest } from \"@bitwarden/common/admin-console/models/request/selection-read-only.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { CollectionRequest } from \"@bitwarden/common/vault/models/request/collection.request\";\nimport {\n CollectionAccessDetailsResponse,\n CollectionResponse,\n} from \"@bitwarden/common/vault/models/response/collection.response\";\n\nimport { CollectionAdminView } from \"./views/collection-admin.view\";\n\n@Injectable()\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 return response;\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 { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { CollectionAccessDetailsResponse } from \"@bitwarden/common/src/vault/models/response/collection.response\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\nimport { CollectionAccessSelectionView } from \"../../../admin-console/organizations/core/views/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 override canEdit(org: Organization): boolean {\n return org?.canEditAnyCollection || (org?.canEditAssignedCollections && this.assigned);\n }\n\n override canDelete(org: Organization): boolean {\n return org?.canDeleteAnyCollection || (org?.canDeleteAssignedCollections && this.assigned);\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 { EventType, FieldType } from \"@bitwarden/common/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/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/platform/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 { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport {\n isMember,\n OrganizationService,\n} from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { OrganizationUserStatusType, PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { EventType, SecureNoteType, UriMatchType } from \"@bitwarden/common/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\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 { CollectionView } from \"@bitwarden/common/vault/models/view/collection.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\";\nimport { DialogService } from \"@bitwarden/components\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 protected sendApiService: SendApiService,\n protected dialogService: DialogService\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(\"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(isMember)\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 && this.organizationId == undefined) {\n this.organizationId = this.defaultOwnerId;\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 loadedAddEditCipherInfo = await this.loadAddEditCipherInfo();\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt(\n await this.cipherService.getKeyForCipherKeyDecryption(cipher)\n );\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 || loadedAddEditCipherInfo || 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 // We don't want to copy passkeys when we clone a cipher\n if (this.cloneMode && this.cipher?.login?.hasFido2Credentials) {\n this.cipher.login.fido2Credentials = null;\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 if (this.reprompt) {\n this.cipher.login.autofillOnPageLoad = this.autofillOnPageLoadOptions[2].value;\n }\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 if exists 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 onCardNumberChange(): void {\n this.cipher.card.brand = CardView.getCardBrandByPatterns(this.cipher.card.number);\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.dialogService.openSimpleDialog({\n title: { key: \"deleteItem\" },\n content: {\n key: this.cipher.isDeleted ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\",\n },\n type: \"warning\",\n });\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 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.dialogService.openSimpleDialog({\n title: { key: \"overwriteUsername\" },\n content: { key: \"overwriteUsernameConfirmation\" },\n type: \"warning\",\n });\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.dialogService.openSimpleDialog({\n title: { key: \"overwritePassword\" },\n content: { key: \"overwritePasswordConfirmation\" },\n type: \"warning\",\n });\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 this.cipher.login.autofillOnPageLoad = this.autofillOnPageLoadOptions[2].value;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n this.cipher.login.autofillOnPageLoad = this.autofillOnPageLoadOptions[0].value;\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 const isNotClone = this.editMode && !this.cloneMode;\n const orgAdmin = this.organization?.isAdmin;\n return this.cipher.id == null\n ? this.cipherService.createWithServer(cipher, orgAdmin)\n : this.cipherService.updateWithServer(cipher, orgAdmin, isNotClone);\n }\n\n protected deleteCipher() {\n const asAdmin = this.organization?.canEditAnyCollection;\n return this.cipher.isDeleted\n ? this.cipherService.deleteWithServer(this.cipher.id, asAdmin)\n : this.cipherService.softDeleteWithServer(this.cipher.id, asAdmin);\n }\n\n protected restoreCipher() {\n const asAdmin = this.organization?.canEditAnyCollection;\n return this.cipherService.restoreWithServer(this.cipher.id, asAdmin);\n }\n\n get defaultOwnerId(): string | null {\n return this.ownershipOptions[0].value;\n }\n\n async loadAddEditCipherInfo(): Promise {\n const addEditCipherInfo: any = await this.stateService.getAddEditCipherInfo();\n const loadedSavedInfo = addEditCipherInfo != null;\n\n if (loadedSavedInfo) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n\n if (!this.editMode && !this.allowPersonal && this.cipher.organizationId == null) {\n // This is a new cipher and personal ownership isn't allowed, so we need to set the default owner\n this.cipher.organizationId = this.defaultOwnerId;\n }\n }\n\n await this.stateService.setAddEditCipherInfo(null);\n\n return loadedSavedInfo;\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { 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 { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { EventType, ProductType } from \"@bitwarden/common/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { Launchable } from \"@bitwarden/common/vault/interfaces/launchable\";\nimport { DialogService } from \"@bitwarden/components\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\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 get fido2CredentialCreationDateValue(): string {\n const dateCreated = this.i18nService.t(\"dateCreated\");\n const creationDate = this.datePipe.transform(\n this.cipher?.login?.fido2Credentials?.[0]?.creationDate,\n \"short\"\n );\n return `${dateCreated} ${creationDate}`;\n }\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: PasswordGenerationServiceAbstraction,\n protected messagingService: MessagingService,\n eventCollectionService: EventCollectionService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n sendApiService: SendApiService,\n dialogService: DialogService,\n private datePipe: DatePipe\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 sendApiService,\n dialogService\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 (this.showTotp()) {\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: Launchable) {\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(EventType.Cipher_ClientCopiedPassword, this.cipherId);\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 protected showTotp() {\n return (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n this.organization?.planProductType != ProductType.Free &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n );\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round(((78.6 / intervalSeconds) * mod + \"e+2\") as any) + \"e-2\");\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"@bitwarden/angular/vault/components/attachments.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { AttachmentView } from \"@bitwarden/common/vault/models/view/attachment.view\";\nimport { DialogService } from \"@bitwarden/components\";\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 dialogService: DialogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService,\n fileDownloadService,\n dialogService\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","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 { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { CollectionBulkDeleteRequest } from \"@bitwarden/common/models/request/collection-bulk-delete.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { CipherBulkDeleteRequest } from \"@bitwarden/common/vault/models/request/cipher-bulk-delete.request\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\nimport { DialogService } from \"@bitwarden/components\";\n\nexport interface BulkDeleteDialogParams {\n cipherIds?: string[];\n collectionIds?: string[];\n permanent?: boolean;\n organization?: Organization;\n organizations?: Organization[];\n collections?: CollectionView[];\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 templateUrl: \"bulk-delete-dialog.component.html\",\n})\nexport class BulkDeleteDialogComponent {\n cipherIds: string[];\n collectionIds: string[];\n permanent = false;\n organization: Organization;\n organizations: Organization[];\n collections: CollectionView[];\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 private collectionService: CollectionService\n ) {\n this.cipherIds = params.cipherIds ?? [];\n this.collectionIds = params.collectionIds ?? [];\n this.permanent = params.permanent;\n this.organization = params.organization;\n this.organizations = params.organizations;\n this.collections = params.collections;\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) {\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 await this.collectionService.delete(this.collectionIds);\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 const asAdmin = this.organization?.canEditAnyCollection;\n if (this.permanent) {\n await this.cipherService.deleteManyWithServer(this.cipherIds, asAdmin);\n } else {\n await this.cipherService.softDeleteManyWithServer(this.cipherIds, asAdmin);\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 // From org vault\n if (this.organization) {\n if (\n !this.organization.canDeleteAssignedCollections &&\n !this.organization.canDeleteAnyCollection\n ) {\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(\n this.collectionIds,\n this.organization.id\n );\n return await this.apiService.deleteManyCollections(deleteRequest);\n // From individual vault, so there can be multiple organizations\n } else if (this.organizations && this.collections) {\n const deletePromises: Promise[] = [];\n for (const organization of this.organizations) {\n if (!organization.canDeleteAssignedCollections && !organization.canDeleteAnyCollection) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"missingPermissions\")\n );\n return;\n }\n const orgCollections = this.collections\n .filter((o) => o.organizationId === organization.id)\n .map((c) => c.id);\n const deleteRequest = new CollectionBulkDeleteRequest(orgCollections, organization.id);\n deletePromises.push(this.apiService.deleteManyCollections(deleteRequest));\n }\n return await Promise.all(deletePromises);\n }\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 { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt(\n await this.cipherService.getKeyForCipherKeyDecryption(this.cipherDomain)\n );\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/admin-console/components/collections.component\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\n\n@Component({\n selector: \"app-vault-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared/shared.module\";\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 { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Organization } from \"@bitwarden/common/admin-console/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","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 { DIALOG_DATA, DialogRef } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\nimport { FormControl, FormGroup, Validators } from \"@angular/forms\";\n\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/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\n\ninterface EnrollMasterPasswordResetData {\n organization: Organization;\n}\n\n@Component({\n selector: \"app-enroll-master-password-reset\",\n templateUrl: \"enroll-master-password-reset.component.html\",\n})\nexport class EnrollMasterPasswordReset {\n protected organization: Organization;\n\n protected formGroup = new FormGroup({\n verification: new FormControl(null, Validators.required),\n });\n\n constructor(\n private dialogRef: DialogRef,\n @Inject(DIALOG_DATA) protected data: EnrollMasterPasswordResetData,\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 organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {\n this.organization = data.organization;\n }\n\n submit = async () => {\n let toastStringRef = \"withdrawPasswordResetSuccess\";\n\n try {\n await this.userVerificationService\n .buildRequest(\n this.formGroup.value.verification,\n OrganizationUserResetPasswordEnrollmentRequest\n )\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 userKey = await this.cryptoService.getUserKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey);\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 this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(toastStringRef));\n this.dialogRef.close();\n } catch (e) {\n this.logService.error(e);\n }\n };\n\n static open(dialogService: DialogService, data: EnrollMasterPasswordResetData) {\n return dialogService.open(EnrollMasterPasswordReset, { data });\n }\n}\n","
\n \n {{ \"enrollAccountRecovery\" | i18n }}\n
\n \n {{ \"resetPasswordEnrollmentWarning\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n","import { AfterContentInit, Component, Input } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SsoComponent } from \"@bitwarden/angular/auth/components/sso.component\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\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: PasswordGenerationServiceAbstraction,\n stateService: StateService,\n environmentService: EnvironmentService,\n logService: LogService,\n configService: ConfigServiceAbstraction\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 configService\n );\n\n this.returnUri = \"/settings/organizations\";\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n","\n \n {{ \"linkSso\" | i18n }}\n\n","\n \n {{ \"loading\" | i18n }}\n\n\n \n \n {{ \"enrollAccountRecovery\" | i18n }}\n \n \n \n {{ \"withdrawAccountRecovery\" | 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 { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"@bitwarden/common/abstractions/organization-user/requests\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { EnrollMasterPasswordReset } from \"../../../../admin-console/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 private dialogService: DialogService\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.dialogService.openSimpleDialog({\n title: org.name,\n content: { key: \"unlinkSsoConfirmation\" },\n type: \"warning\",\n });\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.dialogService.openSimpleDialog({\n title: org.name,\n content: { key: \"leaveOrganizationConfirmation\" },\n type: \"warning\",\n });\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 EnrollMasterPasswordReset.open(this.dialogService, { organization: org });\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 } from \"rxjs\";\n\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\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() onEditFolder = new EventEmitter();\n\n @Input() searchText = \"\";\n @Output() searchTextChanged = new EventEmitter();\n\n isLoaded = false;\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\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 onSearchTextChanged(t: string) {\n this.searchText = t;\n this.searchTextChanged.emit(t);\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 if (orgNode?.node.id === \"AllVaults\") {\n filter.resetOrganization();\n } else {\n filter.selectedOrganizationNode = orgNode;\n }\n this.vaultFilterService.setOrganizationFilter(orgNode.node);\n await this.vaultFilterService.expandOrgFilter();\n };\n\n applyTypeFilter = async (filterNode: TreeNode): Promise => {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCipherTypeNode = filterNode;\n };\n\n applyFolderFilter = async (folderNode: TreeNode): Promise => {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedFolderNode = folderNode;\n };\n\n applyCollectionFilter = async (collectionNode: TreeNode): Promise => {\n const filter = this.activeFilter;\n filter.resetFilter();\n filter.selectedCollectionNode = collectionNode;\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 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 };\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 { Observable } from \"rxjs\";\n\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { TreeNode } from \"@bitwarden/common/src/models/domain/tree-node\";\nimport { CollectionView } from \"@bitwarden/common/src/vault/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 cipherTypeTree$: Observable>;\n reloadCollections: (collections: CollectionView[]) => void;\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 { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\n\nimport { RoutedVaultFilterBridgeService } from \"../../services/routed-vault-filter-bridge.service\";\n\nimport {\n All,\n isRoutedVaultFilterItemType,\n RoutedVaultFilterItemType,\n RoutedVaultFilterModel,\n Unassigned,\n} from \"./routed-vault-filter.model\";\nimport { VaultFilter, VaultFilterFunction } from \"./vault-filter.model\";\nimport {\n OrganizationFilter,\n CipherTypeFilter,\n FolderFilter,\n CollectionFilter,\n CipherStatus,\n} from \"./vault-filter.type\";\n\n/**\n * This file is part of a layer that is used to temporary bridge between URL filtering and the old state-in-code method.\n * This should be removed after we have refactored the {@link VaultItemsComponent} and introduced vertical navigation\n * (which will refactor the {@link VaultFilterComponent}).\n *\n * This model supplies legacy code with the old state-in-code models saved as tree nodes.\n * It can also receive requests to select a new tree node by using setters.\n * However instead of just replacing the tree node models, it requests a URL navigation,\n * thereby bridging between legacy and URL filtering.\n */\nexport class RoutedVaultFilterBridge implements VaultFilter {\n constructor(\n private routedFilter: RoutedVaultFilterModel,\n private legacyFilter: VaultFilter,\n private bridgeService: RoutedVaultFilterBridgeService\n ) {}\n get collectionBreadcrumbs(): TreeNode[] {\n return this.legacyFilter.collectionBreadcrumbs;\n }\n get isCollectionSelected(): boolean {\n return this.legacyFilter.isCollectionSelected;\n }\n get isUnassignedCollectionSelected(): boolean {\n return this.legacyFilter.isUnassignedCollectionSelected;\n }\n get isMyVaultSelected(): boolean {\n return this.legacyFilter.isMyVaultSelected;\n }\n get selectedOrganizationNode(): TreeNode {\n return this.legacyFilter.selectedOrganizationNode;\n }\n set selectedOrganizationNode(value: TreeNode) {\n this.bridgeService.navigate({\n ...this.routedFilter,\n organizationId: value?.node.id === \"MyVault\" ? Unassigned : value?.node.id,\n folderId: undefined,\n collectionId: undefined,\n });\n }\n get selectedCipherTypeNode(): TreeNode {\n return this.legacyFilter.selectedCipherTypeNode;\n }\n set selectedCipherTypeNode(value: TreeNode) {\n let type: RoutedVaultFilterItemType | undefined;\n\n if (value?.node.id === \"AllItems\" && this.routedFilter.organizationIdParamType === \"path\") {\n type = \"all\";\n } else if (\n value?.node.id === \"AllItems\" &&\n this.routedFilter.organizationIdParamType === \"query\"\n ) {\n type = undefined;\n } else if (isRoutedVaultFilterItemType(value?.node.id)) {\n type = value?.node.id;\n }\n\n this.bridgeService.navigate({\n ...this.routedFilter,\n type,\n folderId: undefined,\n collectionId: undefined,\n });\n }\n get selectedFolderNode(): TreeNode {\n return this.legacyFilter.selectedFolderNode;\n }\n set selectedFolderNode(value: TreeNode) {\n const folderId = value != null && value.node.id === null ? Unassigned : value?.node.id;\n this.bridgeService.navigate({\n ...this.routedFilter,\n folderId,\n type: undefined,\n collectionId: undefined,\n });\n }\n get selectedCollectionNode(): TreeNode {\n return this.legacyFilter.selectedCollectionNode;\n }\n set selectedCollectionNode(value: TreeNode) {\n let collectionId: string | undefined;\n\n if (value != null && value.node.id === null) {\n collectionId = Unassigned;\n } else if (\n value?.node.id === \"AllCollections\" &&\n this.routedFilter.organizationIdParamType === \"path\"\n ) {\n collectionId = undefined;\n } else if (\n value?.node.id === \"AllCollections\" &&\n this.routedFilter.organizationIdParamType === \"query\"\n ) {\n collectionId = All;\n } else {\n collectionId = value?.node.id;\n }\n\n this.bridgeService.navigate({\n ...this.routedFilter,\n collectionId,\n type: undefined,\n folderId: undefined,\n });\n }\n get isFavorites(): boolean {\n return this.legacyFilter.isFavorites;\n }\n get isDeleted(): boolean {\n return this.legacyFilter.isDeleted;\n }\n get organizationId(): string {\n return this.legacyFilter.organizationId;\n }\n get cipherType(): CipherType {\n return this.legacyFilter.cipherType;\n }\n get cipherStatus(): CipherStatus {\n return this.legacyFilter.cipherStatus;\n }\n get cipherTypeId(): string {\n return this.legacyFilter.cipherTypeId;\n }\n get folderId(): string {\n return this.legacyFilter.folderId;\n }\n get collectionId(): string {\n return this.legacyFilter.collectionId;\n }\n resetFilter(): void {\n this.bridgeService.navigate({\n ...this.routedFilter,\n collectionId: undefined,\n folderId: undefined,\n organizationId:\n this.routedFilter.organizationIdParamType === \"path\"\n ? this.routedFilter.organizationId\n : undefined,\n type: undefined,\n });\n }\n resetOrganization(): void {\n this.bridgeService.navigate({ ...this.routedFilter, organizationId: undefined });\n }\n buildFilter(): VaultFilterFunction {\n return this.legacyFilter.buildFilter();\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { combineLatest, map, Observable } from \"rxjs\";\n\nimport { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\n\nimport { RoutedVaultFilterBridge } from \"../shared/models/routed-vault-filter-bridge.model\";\nimport {\n RoutedVaultFilterModel,\n Unassigned,\n All,\n} from \"../shared/models/routed-vault-filter.model\";\nimport { VaultFilter } from \"../shared/models/vault-filter.model\";\nimport {\n CipherTypeFilter,\n CollectionFilter,\n FolderFilter,\n OrganizationFilter,\n} from \"../shared/models/vault-filter.type\";\n\nimport { VaultFilterService } from \"./abstractions/vault-filter.service\";\nimport { RoutedVaultFilterService } from \"./routed-vault-filter.service\";\n\n/**\n * This file is part of a layer that is used to temporary bridge between URL filtering and the old state-in-code method.\n * This should be removed after we have refactored the {@link VaultItemsComponent} and introduced vertical navigation\n * (which will refactor the {@link VaultFilterComponent}).\n *\n * This class listens to both the new {@link RoutedVaultFilterService} and the old {@link VaultFilterService}.\n * When a new filter is emitted the service uses the ids to find the corresponding tree nodes needed for\n * the old {@link VaultFilter} model. It then emits a bridge model that contains this information.\n */\n@Injectable()\nexport class RoutedVaultFilterBridgeService {\n readonly activeFilter$: Observable;\n\n constructor(\n private router: Router,\n private routedVaultFilterService: RoutedVaultFilterService,\n legacyVaultFilterService: VaultFilterService\n ) {\n this.activeFilter$ = combineLatest([\n routedVaultFilterService.filter$,\n legacyVaultFilterService.collectionTree$,\n legacyVaultFilterService.folderTree$,\n legacyVaultFilterService.organizationTree$,\n legacyVaultFilterService.cipherTypeTree$,\n ]).pipe(\n map(([filter, collectionTree, folderTree, organizationTree, cipherTypeTree]) => {\n const legacyFilter = isAdminConsole(filter)\n ? createLegacyFilterForAdminConsole(filter, collectionTree, cipherTypeTree)\n : createLegacyFilterForEndUser(\n filter,\n collectionTree,\n folderTree,\n organizationTree,\n cipherTypeTree\n );\n\n return new RoutedVaultFilterBridge(filter, legacyFilter, this);\n })\n );\n }\n\n navigate(filter: RoutedVaultFilterModel) {\n const [commands, extras] = this.routedVaultFilterService.createRoute(filter);\n this.router.navigate(commands, extras);\n }\n}\n\n/**\n * Check if the filtering is being done as part of admin console.\n * Admin console can be identified by checking if the `organizationId`\n * is part of the path.\n *\n * @param filter Model to check if origin is admin console\n * @returns true if filtering being done as part of admin console\n */\nfunction isAdminConsole(filter: RoutedVaultFilterModel) {\n return filter.organizationIdParamType === \"path\";\n}\n\nfunction createLegacyFilterForAdminConsole(\n filter: RoutedVaultFilterModel,\n collectionTree: TreeNode,\n cipherTypeTree: TreeNode\n): VaultFilter {\n const legacyFilter = new VaultFilter();\n\n if (filter.collectionId === undefined && filter.type === undefined) {\n legacyFilter.selectedCollectionNode = ServiceUtils.getTreeNodeObject(\n collectionTree,\n \"AllCollections\"\n );\n } else if (filter.collectionId !== undefined && filter.collectionId === Unassigned) {\n legacyFilter.selectedCollectionNode = ServiceUtils.getTreeNodeObject(collectionTree, null);\n } else if (filter.collectionId !== undefined) {\n legacyFilter.selectedCollectionNode = ServiceUtils.getTreeNodeObject(\n collectionTree,\n filter.collectionId\n );\n }\n\n if (filter.collectionId === undefined && filter.type === All) {\n legacyFilter.selectedCipherTypeNode = ServiceUtils.getTreeNodeObject(\n cipherTypeTree,\n \"AllItems\"\n );\n } else if (filter.type !== undefined && filter.type === \"trash\") {\n legacyFilter.selectedCipherTypeNode = new TreeNode(\n { id: \"trash\", name: \"\", type: \"trash\", icon: \"\" },\n null\n );\n } else if (filter.type !== undefined && filter.type !== \"trash\") {\n legacyFilter.selectedCipherTypeNode = ServiceUtils.getTreeNodeObject(\n cipherTypeTree,\n filter.type\n );\n }\n\n return legacyFilter;\n}\n\nfunction createLegacyFilterForEndUser(\n filter: RoutedVaultFilterModel,\n collectionTree: TreeNode,\n folderTree: TreeNode,\n organizationTree: TreeNode,\n cipherTypeTree: TreeNode\n): VaultFilter {\n const legacyFilter = new VaultFilter();\n\n if (filter.collectionId !== undefined && filter.collectionId === Unassigned) {\n legacyFilter.selectedCollectionNode = ServiceUtils.getTreeNodeObject(collectionTree, null);\n } else if (filter.collectionId !== undefined && filter.collectionId === All) {\n legacyFilter.selectedCollectionNode = ServiceUtils.getTreeNodeObject(\n collectionTree,\n \"AllCollections\"\n );\n } else if (filter.collectionId !== undefined) {\n legacyFilter.selectedCollectionNode = ServiceUtils.getTreeNodeObject(\n collectionTree,\n filter.collectionId\n );\n }\n\n if (filter.folderId !== undefined && filter.folderId === Unassigned) {\n legacyFilter.selectedFolderNode = ServiceUtils.getTreeNodeObject(folderTree, null);\n } else if (filter.folderId !== undefined && filter.folderId !== Unassigned) {\n legacyFilter.selectedFolderNode = ServiceUtils.getTreeNodeObject(folderTree, filter.folderId);\n }\n\n if (filter.organizationId !== undefined && filter.organizationId === Unassigned) {\n legacyFilter.selectedOrganizationNode = ServiceUtils.getTreeNodeObject(\n organizationTree,\n \"MyVault\"\n );\n } else if (filter.organizationId !== undefined && filter.organizationId !== Unassigned) {\n legacyFilter.selectedOrganizationNode = ServiceUtils.getTreeNodeObject(\n organizationTree,\n filter.organizationId\n );\n }\n\n if (filter.type === undefined) {\n legacyFilter.selectedCipherTypeNode = ServiceUtils.getTreeNodeObject(\n cipherTypeTree,\n \"AllItems\"\n );\n } else if (filter.type !== undefined && filter.type === \"trash\") {\n legacyFilter.selectedCipherTypeNode = new TreeNode(\n { id: \"trash\", name: \"\", type: \"trash\", icon: \"\" },\n null\n );\n } else if (filter.type !== undefined && filter.type !== \"trash\") {\n legacyFilter.selectedCipherTypeNode = ServiceUtils.getTreeNodeObject(\n cipherTypeTree,\n filter.type\n );\n }\n\n return legacyFilter;\n}\n","import { Injectable, OnDestroy } from \"@angular/core\";\nimport { ActivatedRoute, NavigationExtras } from \"@angular/router\";\nimport { combineLatest, map, Observable, Subject, takeUntil } from \"rxjs\";\n\nimport {\n isRoutedVaultFilterItemType,\n RoutedVaultFilterModel,\n} from \"../shared/models/routed-vault-filter.model\";\n\n/**\n * This service is an abstraction layer on top of ActivatedRoute that\n * encapsulates the logic of how filters are stored in the URL.\n *\n * The service builds and emits filter models based on URL params and\n * also contains a method for generating routes to corresponding to those params.\n */\n@Injectable()\nexport class RoutedVaultFilterService implements OnDestroy {\n private onDestroy = new Subject();\n\n /**\n * Filter values extracted from the URL.\n * To change the values use {@link RoutedVaultFilterService.createRoute}.\n */\n filter$: Observable;\n\n constructor(activatedRoute: ActivatedRoute) {\n this.filter$ = combineLatest([activatedRoute.paramMap, activatedRoute.queryParamMap]).pipe(\n map(([params, queryParams]) => {\n const unsafeType = queryParams.get(\"type\");\n const type = isRoutedVaultFilterItemType(unsafeType) ? unsafeType : undefined;\n\n return {\n collectionId: queryParams.get(\"collectionId\") ?? undefined,\n folderId: queryParams.get(\"folderId\") ?? undefined,\n organizationId:\n params.get(\"organizationId\") ?? queryParams.get(\"organizationId\") ?? undefined,\n organizationIdParamType:\n params.get(\"organizationId\") != undefined ? (\"path\" as const) : (\"query\" as const),\n type,\n };\n }),\n takeUntil(this.onDestroy)\n );\n }\n\n /**\n * Create a route that can be used to modify filters with Router or RouterLink.\n * This method is specifically built to leave other query parameters untouched,\n * meaning that navigation will only affect filters and not e.g. `cipherId`.\n * To subscribe to changes use {@link RoutedVaultFilterService.filter$}.\n *\n * Note:\n * This method currently only supports changing filters that are stored\n * in query parameters. This means that {@link RoutedVaultFilterModel.organizationId}\n * will be ignored if {@link RoutedVaultFilterModel.organizationIdParamType}\n * is set to `path`.\n *\n * @param filter Filter values that should be applied to the URL.\n * @returns route that can be used with Router or RouterLink\n */\n createRoute(filter: RoutedVaultFilterModel): [commands: any[], extras?: NavigationExtras] {\n const commands: string[] = [];\n const extras: NavigationExtras = {\n queryParams: {\n collectionId: filter.collectionId ?? null,\n folderId: filter.folderId ?? null,\n organizationId:\n filter.organizationIdParamType === \"path\" ? null : filter.organizationId ?? null,\n type: filter.type ?? null,\n },\n queryParamsHandling: \"merge\",\n };\n return [commands, extras];\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {\n BehaviorSubject,\n combineLatest,\n combineLatestWith,\n firstValueFrom,\n map,\n Observable,\n of,\n ReplaySubject,\n switchMap,\n} from \"rxjs\";\n\nimport {\n isMember,\n OrganizationService,\n} from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CollectionView } from \"@bitwarden/common/vault/models/view/collection.view\";\nimport { FolderView } from \"@bitwarden/common/vault/models/view/folder.view\";\n\nimport { CollectionAdminView } from \"../../../core/views/collection-admin.view\";\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 = combineLatest([\n this.collectionViews$,\n this._organizationFilter,\n ]).pipe(\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 cipherTypeTree$: Observable> = this.buildCipherTypeTree();\n\n constructor(\n protected stateService: StateService,\n protected organizationService: OrganizationService,\n protected folderService: FolderService,\n protected cipherService: CipherService,\n protected policyService: PolicyService,\n protected i18nService: I18nService\n ) {}\n\n async reloadCollections(collections: CollectionView[]) {\n this.collectionViews$.next(collections);\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 const orgNodes: TreeNode[] = [];\n orgs.filter(isMember).forEach((org) => {\n const orgCopy = org as OrganizationFilter;\n orgCopy.icon = \"bwi-business\";\n const node = new TreeNode(orgCopy, headNode, orgCopy.name);\n orgNodes.push(node);\n });\n // Sort organization nodes, then add them to the list after 'My Vault' and 'All Vaults' if present\n orgNodes.sort((a, b) => a.node.name.localeCompare(b.node.name));\n headNode.children.push(...orgNodes);\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 no org or \"My Vault\" is selected, show all folders\n if (org?.id == null || org?.id == \"MyVault\") {\n return storedFolders;\n }\n\n // Otherwise, show only folders that have ciphers from the selected org and the \"no folder\" folder\n const ciphers = await this.cipherService.getAllDecrypted();\n const orgCiphers = ciphers.filter((c) => c.organizationId == org?.id);\n return storedFolders.filter(\n (f) => orgCiphers.some((oc) => oc.folderId == f.id) || f.id == null\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 protected buildCipherTypeTree(): Observable> {\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 return this.buildTypeTree(\n { id: \"AllItems\", name: \"allItems\", type: \"all\", icon: \"\" },\n allTypeFilters\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  {{ 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/admin-console/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 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 { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { All, RoutedVaultFilterModel, Unassigned } from \"./routed-vault-filter.model\";\n\nexport type FilterFunction = (cipher: CipherView) => boolean;\n\nexport function createFilterFunction(filter: RoutedVaultFilterModel): FilterFunction {\n return (cipher) => {\n if (filter.type === \"favorites\" && !cipher.favorite) {\n return false;\n }\n if (filter.type === \"card\" && cipher.type !== CipherType.Card) {\n return false;\n }\n if (filter.type === \"identity\" && cipher.type !== CipherType.Identity) {\n return false;\n }\n if (filter.type === \"login\" && cipher.type !== CipherType.Login) {\n return false;\n }\n if (filter.type === \"note\" && cipher.type !== CipherType.SecureNote) {\n return false;\n }\n if (filter.type === \"trash\" && !cipher.isDeleted) {\n return false;\n }\n // Hide trash unless explicitly selected\n if (filter.type !== \"trash\" && cipher.isDeleted) {\n return false;\n }\n // No folder\n if (filter.folderId === Unassigned && cipher.folderId !== null) {\n return false;\n }\n // Folder\n if (\n filter.folderId !== undefined &&\n filter.folderId !== All &&\n filter.folderId !== Unassigned &&\n cipher.folderId !== filter.folderId\n ) {\n return false;\n }\n // All collections (top level)\n if (filter.collectionId === All) {\n return false;\n }\n // Unassigned\n if (\n filter.collectionId === Unassigned &&\n (cipher.organizationId == null ||\n (cipher.collectionIds != null && cipher.collectionIds.length > 0))\n ) {\n return false;\n }\n // Collection\n if (\n filter.collectionId !== undefined &&\n filter.collectionId !== All &&\n filter.collectionId !== Unassigned &&\n (cipher.collectionIds == null || !cipher.collectionIds.includes(filter.collectionId))\n ) {\n return false;\n }\n // My Vault\n if (filter.organizationId === Unassigned && cipher.organizationId != null) {\n return false;\n }\n // Organization\n else if (\n filter.organizationId !== undefined &&\n filter.organizationId !== Unassigned &&\n cipher.organizationId !== filter.organizationId\n ) {\n return false;\n }\n\n return true;\n };\n}\n","export const Unassigned = \"unassigned\";\n\nexport const All = \"all\";\n\n// TODO: Remove `All` when moving to vertical navigation.\nconst itemTypes = [\"favorites\", \"login\", \"card\", \"identity\", \"note\", \"trash\", All] as const;\n\nexport type RoutedVaultFilterItemType = (typeof itemTypes)[number];\n\nexport function isRoutedVaultFilterItemType(value: unknown): value is RoutedVaultFilterItemType {\n return itemTypes.includes(value as any);\n}\n\nexport interface RoutedVaultFilterModel {\n collectionId?: string;\n folderId?: string;\n organizationId?: string;\n type?: RoutedVaultFilterItemType;\n\n organizationIdParamType?: \"path\" | \"query\";\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 { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../../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 \"../../individual-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 { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuditService } from \"@bitwarden/common/abstractions/audit.service\";\nimport { EventCollectionService } from \"@bitwarden/common/abstractions/event/event-collection.service\";\nimport { TotpService } from \"@bitwarden/common/abstractions/totp.service\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { PolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { SendApiService } from \"@bitwarden/common/tools/send/services/send-api.service.abstraction\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { DialogService } from \"@bitwarden/components\";\nimport { PasswordRepromptService } from \"@bitwarden/vault\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../individual-vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../individual-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: PasswordGenerationServiceAbstraction,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventCollectionService: EventCollectionService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n sendApiService: SendApiService,\n dialogService: DialogService,\n datePipe: DatePipe\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 sendApiService,\n dialogService,\n datePipe\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, null, this.originalCipher);\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 { SharedModule } from \"../../../shared/shared.module\";\nimport { PipesModule } from \"../../individual-vault/pipes/pipes.module\";\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 { SharedModule } from \"../../../shared/shared.module\";\nimport { PipesModule } from \"../../individual-vault/pipes/pipes.module\";\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 { ServiceUtils } from \"@bitwarden/common/misc/serviceUtils\";\nimport { TreeNode } from \"@bitwarden/common/models/domain/tree-node\";\nimport {\n CollectionView,\n NestingDelimiter,\n} from \"@bitwarden/common/vault/models/view/collection.view\";\n\nimport { CollectionAdminView } from \"../../vault/core/views/collection-admin.view\";\n\nexport function getNestedCollectionTree(\n collections: CollectionAdminView[]\n): TreeNode[];\nexport function getNestedCollectionTree(collections: CollectionView[]): TreeNode[];\nexport function getNestedCollectionTree(\n collections: (CollectionView | CollectionAdminView)[]\n): TreeNode[] {\n // Collections need to be cloned because ServiceUtils.nestedTraverse actively\n // modifies the names of collections.\n // These changes risk affecting collections store in StateService.\n const clonedCollections = collections\n .sort((a, b) => a.name.localeCompare(b.name))\n .map(cloneCollection);\n\n const nodes: TreeNode[] = [];\n clonedCollections.forEach((collection) => {\n const parts =\n collection.name != null\n ? collection.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter)\n : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collection, null, NestingDelimiter);\n });\n return nodes;\n}\n\nfunction cloneCollection(collection: CollectionView): CollectionView;\nfunction cloneCollection(collection: CollectionAdminView): CollectionAdminView;\nfunction cloneCollection(\n collection: CollectionView | CollectionAdminView\n): CollectionView | CollectionAdminView {\n let cloned;\n\n if (collection instanceof CollectionAdminView) {\n cloned = new CollectionAdminView();\n cloned.groups = [...collection.groups];\n cloned.users = [...collection.users];\n cloned.assigned = collection.assigned;\n } else {\n cloned = new CollectionView();\n }\n\n cloned.id = collection.id;\n cloned.externalId = collection.externalId;\n cloned.hidePasswords = collection.hidePasswords;\n cloned.name = collection.name;\n cloned.organizationId = collection.organizationId;\n cloned.readOnly = collection.readOnly;\n return cloned;\n}\n","import {\n flagEnabled as baseFlagEnabled,\n devFlagEnabled as baseDevFlagEnabled,\n devFlagValue as baseDevFlagValue,\n SharedFlags,\n SharedDevFlags,\n} from \"@bitwarden/common/platform/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 { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { UserVerificationModule } from \"../../../auth/shared/components/user-verification\";\nimport { LooseComponentsModule, SharedModule } from \"../../../shared\";\n\nimport { EnrollMasterPasswordReset } from \"./enroll-master-password-reset.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule, LooseComponentsModule, UserVerificationModule],\n declarations: [EnrollMasterPasswordReset],\n exports: [EnrollMasterPasswordReset],\n})\nexport class OrganizationUserModule {}\n","import { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { SharedModule } from \"../../../shared/shared.module\";\n\nimport { CreateCredentialDialogComponent } from \"./create-credential-dialog/create-credential-dialog.component\";\nimport { DeleteCredentialDialogComponent } from \"./delete-credential-dialog/delete-credential-dialog.component\";\nimport { WebauthnLoginSettingsComponent } from \"./webauthn-login-settings.component\";\n\n@NgModule({\n imports: [SharedModule, FormsModule, ReactiveFormsModule],\n declarations: [\n WebauthnLoginSettingsComponent,\n CreateCredentialDialogComponent,\n DeleteCredentialDialogComponent,\n ],\n exports: [WebauthnLoginSettingsComponent],\n})\nexport class WebauthnLoginSettingsModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { PasswordCalloutComponent } from \"@bitwarden/auth\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { ChangePasswordComponent } from \"./change-password.component\";\nimport { WebauthnLoginSettingsModule } from \"./webauthn-login-settings\";\n\n@NgModule({\n imports: [SharedModule, WebauthnLoginSettingsModule, PasswordCalloutComponent],\n declarations: [ChangePasswordComponent],\n providers: [],\n exports: [ChangePasswordComponent],\n})\nexport class AuthSettingsModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { AuthSettingsModule } from \"./settings/settings.module\";\n\n@NgModule({\n imports: [AuthSettingsModule],\n declarations: [],\n providers: [],\n exports: [AuthSettingsModule],\n})\nexport class AuthModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { CheckboxModule } from \"@bitwarden/components\";\n\nimport { SharedModule } from \"../../../app/shared\";\n\nimport { LoginDecryptionOptionsComponent } from \"./login-decryption-options/login-decryption-options.component\";\nimport { LoginWithDeviceComponent } from \"./login-with-device.component\";\nimport { LoginComponent } from \"./login.component\";\n\n@NgModule({\n imports: [SharedModule, CheckboxModule],\n declarations: [LoginComponent, LoginWithDeviceComponent, LoginDecryptionOptionsComponent],\n exports: [LoginComponent, LoginWithDeviceComponent, LoginDecryptionOptionsComponent],\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 \"../../admin-console/organizations/create/organization-create.module\";\nimport { RegisterFormModule } from \"../../auth/register-form/register-form.module\";\nimport { PaymentComponent, TaxInfoComponent } from \"../../billing\";\nimport { BillingComponent } from \"../../billing/accounts/trial-initiation/billing.component\";\nimport { EnvironmentSelectorModule } from \"../../components/environment-selector/environment-selector.module\";\nimport { SharedModule } from \"../../shared\";\n\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 { Teams3ContentComponent } from \"./content/teams3-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 EnvironmentSelectorModule,\n PaymentComponent,\n TaxInfoComponent,\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 Teams3ContentComponent,\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 { NgModule } from \"@angular/core\";\n\nimport { OrganizationUserModule } from \"./admin-console/organizations/users/organization-user.module\";\nimport { AuthModule } from \"./auth\";\nimport { LoginModule } from \"./auth/login/login.module\";\nimport { TrialInitiationModule } from \"./auth/trial-initiation/trial-initiation.module\";\nimport { LooseComponentsModule, SharedModule } from \"./shared\";\nimport { OrganizationBadgeModule } from \"./vault/individual-vault/organization-badge/organization-badge.module\";\nimport { VaultFilterModule } from \"./vault/individual-vault/vault-filter/vault-filter.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n OrganizationUserModule,\n LoginModule,\n AuthModule,\n ],\n exports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n LoginModule,\n ],\n bootstrap: [],\n})\nexport class OssModule {}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nconst routes: Routes = [{ path: \"**\", redirectTo: \"\" }];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class WildcardRoutingModule {}\n","import { View } from \"@bitwarden/common/models/view/view\";\n\nimport { PendingOrganizationAuthRequestResponse } from \"../services/auth-requests\";\n\nexport class PendingAuthRequestView implements View {\n id: string;\n userId: string;\n organizationUserId: string;\n email: string;\n publicKey: string;\n requestDeviceIdentifier: string;\n requestDeviceType: string;\n requestIpAddress: string;\n creationDate: Date;\n\n static fromResponse(response: PendingOrganizationAuthRequestResponse): PendingAuthRequestView {\n const view = Object.assign(new PendingAuthRequestView(), response) as PendingAuthRequestView;\n\n view.creationDate = new Date(response.creationDate);\n\n return view;\n }\n}\n","export class AdminAuthRequestUpdateRequest {\n /**\n *\n * @param requestApproved - Whether the request was approved/denied. If true, the key must be provided.\n * @param encryptedUserKey The user key that has been encrypted with a device public key if the request was approved.\n */\n constructor(public requestApproved: boolean, public encryptedUserKey?: string) {}\n}\n","export class BulkDenyAuthRequestsRequest {\n private ids: string[];\n constructor(authRequestIds: string[]) {\n this.ids = authRequestIds;\n }\n}\n","import { BaseResponse } from \"@bitwarden/common/models/response/base.response\";\n\nexport class PendingOrganizationAuthRequestResponse extends BaseResponse {\n id: string;\n userId: string;\n organizationUserId: string;\n email: string;\n publicKey: string;\n requestDeviceIdentifier: string;\n requestDeviceType: string;\n requestIpAddress: string;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.email = this.getResponseProperty(\"Email\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n this.requestDeviceIdentifier = this.getResponseProperty(\"RequestDeviceIdentifier\");\n this.requestDeviceType = this.getResponseProperty(\"RequestDeviceType\");\n this.requestIpAddress = this.getResponseProperty(\"RequestIpAddress\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\n\nimport { PendingAuthRequestView } from \"../../views/pending-auth-request.view\";\n\nimport { AdminAuthRequestUpdateRequest } from \"./admin-auth-request-update.request\";\nimport { BulkDenyAuthRequestsRequest } from \"./bulk-deny-auth-requests.request\";\nimport { PendingOrganizationAuthRequestResponse } from \"./pending-organization-auth-request.response\";\n\n@Injectable()\nexport class OrganizationAuthRequestService {\n constructor(private apiService: ApiService) {}\n\n async listPendingRequests(organizationId: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n `/organizations/${organizationId}/auth-requests`,\n null,\n true,\n true\n );\n\n const listResponse = new ListResponse(r, PendingOrganizationAuthRequestResponse);\n\n return listResponse.data.map((ar) => PendingAuthRequestView.fromResponse(ar));\n }\n\n async denyPendingRequests(organizationId: string, ...requestIds: string[]): Promise {\n await this.apiService.send(\n \"POST\",\n `/organizations/${organizationId}/auth-requests/deny`,\n new BulkDenyAuthRequestsRequest(requestIds),\n true,\n false\n );\n }\n\n async approvePendingRequest(\n organizationId: string,\n requestId: string,\n encryptedKey: EncString\n ): Promise {\n await this.apiService.send(\n \"POST\",\n `/organizations/${organizationId}/auth-requests/${requestId}`,\n new AdminAuthRequestUpdateRequest(true, encryptedKey.encryptedString),\n true,\n false\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { OrganizationAuthRequestService } from \"./services/auth-requests\";\n\n@NgModule({\n providers: [OrganizationAuthRequestService],\n})\nexport class CoreOrganizationModule {}\n","import { SsoConfigApi } from \"../api/sso-config.api\";\n\nexport class OrganizationSsoRequest {\n enabled = false;\n identifier: string;\n data: SsoConfigApi;\n}\n","import { View } from \"../../../models/view/view\";\nimport {\n MemberDecryptionType,\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/sso\";\nimport { OrganizationSsoResponse } from \"../response/organization-sso.response\";\n\nexport class SsoConfigView extends View {\n enabled: boolean;\n ssoIdentifier: string;\n\n configType: SsoType;\n\n memberDecryptionType: MemberDecryptionType;\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(orgSsoResponse: OrganizationSsoResponse) {\n super();\n\n if (orgSsoResponse == null) {\n return;\n }\n\n this.enabled = orgSsoResponse.enabled;\n this.ssoIdentifier = orgSsoResponse.identifier;\n\n if (orgSsoResponse.data == null) {\n return;\n }\n\n this.configType = orgSsoResponse.data.configType;\n this.memberDecryptionType = orgSsoResponse.data.memberDecryptionType;\n\n this.keyConnectorUrl = orgSsoResponse.data.keyConnectorUrl;\n\n if (this.configType === SsoType.OpenIdConnect) {\n this.openId = {\n authority: orgSsoResponse.data.authority,\n clientId: orgSsoResponse.data.clientId,\n clientSecret: orgSsoResponse.data.clientSecret,\n metadataAddress: orgSsoResponse.data.metadataAddress,\n redirectBehavior: orgSsoResponse.data.redirectBehavior,\n getClaimsFromUserInfoEndpoint: orgSsoResponse.data.getClaimsFromUserInfoEndpoint,\n additionalScopes: orgSsoResponse.data.additionalScopes,\n additionalUserIdClaimTypes: orgSsoResponse.data.additionalUserIdClaimTypes,\n additionalEmailClaimTypes: orgSsoResponse.data.additionalEmailClaimTypes,\n additionalNameClaimTypes: orgSsoResponse.data.additionalNameClaimTypes,\n acrValues: orgSsoResponse.data.acrValues,\n expectedReturnAcrValue: orgSsoResponse.data.expectedReturnAcrValue,\n };\n } else if (this.configType === SsoType.Saml2) {\n this.saml = {\n spNameIdFormat: orgSsoResponse.data.spNameIdFormat,\n spOutboundSigningAlgorithm: orgSsoResponse.data.spOutboundSigningAlgorithm,\n spSigningBehavior: orgSsoResponse.data.spSigningBehavior,\n spMinIncomingSigningAlgorithm: orgSsoResponse.data.spMinIncomingSigningAlgorithm,\n spWantAssertionsSigned: orgSsoResponse.data.spWantAssertionsSigned,\n spValidateCertificates: orgSsoResponse.data.spValidateCertificates,\n\n idpEntityId: orgSsoResponse.data.idpEntityId,\n idpBindingType: orgSsoResponse.data.idpBindingType,\n idpSingleSignOnServiceUrl: orgSsoResponse.data.idpSingleSignOnServiceUrl,\n idpSingleLogoutServiceUrl: orgSsoResponse.data.idpSingleLogoutServiceUrl,\n idpX509PublicCert: orgSsoResponse.data.idpX509PublicCert,\n idpOutboundSigningAlgorithm: orgSsoResponse.data.idpOutboundSigningAlgorithm,\n idpAllowUnsolicitedAuthnResponse: orgSsoResponse.data.idpAllowUnsolicitedAuthnResponse,\n idpWantAuthnRequestsSigned: orgSsoResponse.data.idpWantAuthnRequestsSigned,\n\n // Value is inverted in the view model (allow instead of disable)\n idpAllowOutboundLogoutRequests:\n orgSsoResponse.data.idpDisableOutboundLogoutRequests == null\n ? null\n : !orgSsoResponse.data.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/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/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","
    \n

    {{ \"singleSignOn\" | i18n }}

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

    \n {{ \"ssoPolicyHelpStart\" | i18n }}\n {{ \"ssoPolicyHelpAnchor\" | i18n }}\n {{ \"ssoPolicyHelpEnd\" | i18n }}\n
    \n

    \n\n \n \n \n {{ \"allowSso\" | i18n }}\n \n {{ \"allowSsoDesc\" | i18n }}\n \n\n \n {{ \"ssoIdentifier\" | i18n }}\n \n \n {{ \"ssoIdentifierHintPartOne\" | i18n }}\n {{ \"domainVerification\" | i18n }}\n \n \n\n
    \n\n \n {{ \"memberDecryptionOption\" | i18n }}\n\n \n {{ \"masterPass\" | i18n }}\n \n\n \n \n {{ \"keyConnector\" | i18n }}\n \n \n \n \n \n {{ \"memberDecryptionKeyConnectorDescStart\" | i18n }}\n {{ \"memberDecryptionKeyConnectorDescLink\" | i18n }}\n {{ \"memberDecryptionKeyConnectorDescEnd\" | i18n }}\n \n \n\n \n \n {{ \"trustedDevices\" | i18n }}\n \n \n {{ \"memberDecryptionOptionTdeDescriptionPartOne\" | i18n }}\n {{ \"memberDecryptionOptionTdeDescriptionLinkOne\" | i18n }}\n {{ \"memberDecryptionOptionTdeDescriptionPartTwo\" | i18n }}\n {{ \"memberDecryptionOptionTdeDescriptionLinkTwo\" | i18n }}\n {{ \"memberDecryptionOptionTdeDescriptionPartThree\" | i18n }}\n {{\n \"memberDecryptionOptionTdeDescriptionLinkThree\" | i18n\n }}\n {{ \"memberDecryptionOptionTdeDescriptionPartFour\" | i18n }}\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 {{ \"getClaimsFromUserInfoEndpoint\" | i18n }}\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 {{ \"spWantAssertionsSigned\" | i18n }}\n \n \n\n \n {{ \"spValidateCertificates\" | i18n }}\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 {{ \"idpAllowOutboundLogoutRequests\" | i18n }}\n \n \n\n \n {{ \"idpSignAuthenticationRequests\" | i18n }}\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 { ControlsOf } from \"@bitwarden/angular/types/controls-of\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport {\n MemberDecryptionType,\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"@bitwarden/common/auth/enums/sso\";\nimport { SsoConfigApi } from \"@bitwarden/common/auth/models/api/sso-config.api\";\nimport { OrganizationSsoRequest } from \"@bitwarden/common/auth/models/request/organization-sso.request\";\nimport { OrganizationSsoResponse } from \"@bitwarden/common/auth/models/response/organization-sso.response\";\nimport { SsoConfigView } from \"@bitwarden/common/auth/models/view/sso-config.view\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\n\nimport { ssoTypeValidator } from \"./sso-type.validator\";\n\ninterface SelectOptions {\n name: string;\n value: any;\n disabled?: boolean;\n}\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 readonly memberDecryptionType = MemberDecryptionType;\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 destroy$ = new Subject();\n showTdeOptions = false;\n showKeyConnectorOptions = false;\n\n showOpenIdCustomizations = false;\n\n loading = true;\n haveTestedKeyConnector = false;\n organizationId: string;\n organization: Organization;\n\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\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 memberDecryptionType: new FormControl(MemberDecryptionType.MasterPassword),\n keyConnectorUrl: new FormControl(\"\"),\n openId: this.openIdForm,\n saml: this.samlForm,\n enabled: new FormControl(false),\n ssoIdentifier: new FormControl(\"\", {\n validators: [Validators.maxLength(50), Validators.required],\n }),\n });\n\n get enabledCtrl() {\n return this.ssoConfigForm?.controls?.enabled as FormControl;\n }\n get ssoIdentifierCtrl() {\n return this.ssoConfigForm?.controls?.ssoIdentifier as FormControl;\n }\n get configTypeCtrl() {\n return this.ssoConfigForm?.controls?.configType as FormControl;\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 private configService: ConfigServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.enabledCtrl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((enabled) => {\n if (enabled) {\n this.ssoIdentifierCtrl.setValidators([Validators.maxLength(50), Validators.required]);\n this.configTypeCtrl.setValidators([\n ssoTypeValidator(this.i18nService.t(\"selectionIsRequired\")),\n ]);\n } else {\n this.ssoIdentifierCtrl.setValidators([]);\n this.configTypeCtrl.setValidators([]);\n }\n\n this.ssoIdentifierCtrl.updateValueAndValidity();\n this.configTypeCtrl.updateValueAndValidity();\n });\n\n this.ssoConfigForm\n .get(\"configType\")\n .valueChanges.pipe(takeUntil(this.destroy$))\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.destroy$))\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.destroy$)\n )\n .subscribe();\n\n const tdeFeatureFlag = await this.configService.getFeatureFlag(\n FeatureFlag.TrustedDeviceEncryption\n );\n\n this.showTdeOptions = tdeFeatureFlag;\n // If the tde flag is not enabled, continue showing the key connector options to keep the UI the same\n // Once the flag is removed, we can rely on the platformUtilsService.isSelfHost() check alone\n this.showKeyConnectorOptions = !tdeFeatureFlag || this.platformUtilsService.isSelfHost();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.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 submit = async () => {\n this.updateFormValidationState(this.ssoConfigForm);\n\n if (this.ssoConfigForm.value.memberDecryptionType === MemberDecryptionType.KeyConnector) {\n this.haveTestedKeyConnector = false;\n await this.validateKeyConnectorUrl();\n }\n\n if (!this.ssoConfigForm.valid) {\n this.readOutErrors();\n return;\n }\n const request = new OrganizationSsoRequest();\n request.enabled = this.enabledCtrl.value;\n // Return null instead of empty string to avoid duplicate id errors in database\n request.identifier = this.ssoIdentifierCtrl.value === \"\" ? null : this.ssoIdentifierCtrl.value;\n request.data = SsoConfigApi.fromView(this.ssoConfigForm.getRawValue());\n\n const response = await this.organizationApiService.updateSso(this.organizationId, request);\n this.populateForm(response);\n\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"ssoSettingsSaved\"));\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.value?.memberDecryptionType === MemberDecryptionType.KeyConnector &&\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 /**\n * Shows any validation errors for the form by marking all controls as dirty and touched.\n * If nested form groups are found, they are also updated.\n * @param form - the form to show validation errors for\n */\n private updateFormValidationState(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.updateFormValidationState(control);\n } else {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n }\n });\n }\n\n private populateForm(orgSsoResponse: OrganizationSsoResponse) {\n const ssoConfigView = new SsoConfigView(orgSsoResponse);\n this.ssoConfigForm.patchValue(ssoConfigView);\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 { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nimport { SsoType } from \"@bitwarden/common/auth/enums/sso\";\n\nexport function ssoTypeValidator(errorMessage: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n\n if (value === SsoType.None) {\n return {\n validSsoTypeRequired: {\n message: errorMessage,\n },\n };\n }\n\n return null;\n };\n}\n","import { svgIcon } from \"@bitwarden/components\";\n\nexport const Devices = svgIcon`\n\n \n \n \n \n \n \n \n \n \n \n \n\n`;\n","

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

    \n

    \n {{ \"deviceApprovalsDesc\" | i18n }}\n

    \n\n\n \n \n {{ \"member\" | i18n }}\n {{ \"deviceInfo\" | i18n }}\n {{ \"time\" | i18n }}\n \n \n \n \n \n \n {{ \"denyAllRequests\" | i18n }}\n \n \n \n \n \n \n \n \n \n
    {{ r.email }}
    \n {{ r.publicKey | fingerprint : r.email | async }}\n \n \n
    {{ r.requestDeviceType }}
    \n
    {{ r.requestIpAddress }}
    \n \n \n {{ r.creationDate | date : \"medium\" }}\n \n \n \n \n \n \n {{ \"approveRequest\" | i18n }}\n \n \n \n \n {{ \"denyRequest\" | i18n }}\n \n \n \n \n \n
    \n
    \n\n\n {{ \"noDeviceRequests\" | i18n }}\n {{ \"noDeviceRequestsDesc\" | i18n }}\n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { BehaviorSubject, Subject, switchMap, takeUntil, tap } from \"rxjs\";\n\nimport { OrganizationUserService } from \"@bitwarden/common/abstractions/organization-user/organization-user.service\";\nimport { OrganizationUserResetPasswordDetailsResponse } from \"@bitwarden/common/abstractions/organization-user/responses\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { TableDataSource } from \"@bitwarden/components\";\nimport { Devices } from \"@bitwarden/web-vault/app/admin-console/icons\";\n\nimport { OrganizationAuthRequestService } from \"../../core/services/auth-requests\";\nimport { PendingAuthRequestView } from \"../../core/views/pending-auth-request.view\";\n\n@Component({\n selector: \"app-org-device-approvals\",\n templateUrl: \"./device-approvals.component.html\",\n})\nexport class DeviceApprovalsComponent implements OnInit, OnDestroy {\n tableDataSource = new TableDataSource();\n organizationId: string;\n loading = true;\n actionInProgress = false;\n\n protected readonly Devices = Devices;\n\n private destroy$ = new Subject();\n private refresh$ = new BehaviorSubject(null);\n\n constructor(\n private organizationAuthRequestService: OrganizationAuthRequestService,\n private organizationUserService: OrganizationUserService,\n private cryptoService: CryptoService,\n private route: ActivatedRoute,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService,\n private validationService: ValidationService\n ) {}\n\n async ngOnInit() {\n this.route.params\n .pipe(\n tap((params) => (this.organizationId = params.organizationId)),\n switchMap(() =>\n this.refresh$.pipe(\n tap(() => (this.loading = true)),\n switchMap(() =>\n this.organizationAuthRequestService.listPendingRequests(this.organizationId)\n )\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe((r) => {\n this.tableDataSource.data = r;\n this.loading = false;\n });\n }\n\n /**\n * Creates a copy of the user key that has been encrypted with the provided device's public key.\n * @param devicePublicKey\n * @param resetPasswordDetails\n * @private\n */\n private async getEncryptedUserKey(\n devicePublicKey: string,\n resetPasswordDetails: OrganizationUserResetPasswordDetailsResponse\n ): Promise {\n const encryptedUserKey = resetPasswordDetails.resetPasswordKey;\n const encryptedOrgPrivateKey = resetPasswordDetails.encryptedPrivateKey;\n const devicePubKey = Utils.fromB64ToArray(devicePublicKey);\n\n // Decrypt Organization's encrypted Private Key with org key\n const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n const decOrgPrivateKey = await this.cryptoService.decryptToBytes(\n new EncString(encryptedOrgPrivateKey),\n orgSymKey\n );\n\n // Decrypt user key with decrypted org private key\n const decValue = await this.cryptoService.rsaDecrypt(encryptedUserKey, decOrgPrivateKey);\n const userKey = new SymmetricCryptoKey(decValue);\n\n // Re-encrypt user Key with the Device Public Key\n return await this.cryptoService.rsaEncrypt(userKey.key, devicePubKey);\n }\n\n async approveRequest(authRequest: PendingAuthRequestView) {\n await this.performAsyncAction(async () => {\n const details = await this.organizationUserService.getOrganizationUserResetPasswordDetails(\n this.organizationId,\n authRequest.organizationUserId\n );\n\n // The user must be enrolled in account recovery (password reset) in order for the request to be approved.\n if (details == null || details.resetPasswordKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"resetPasswordDetailsError\")\n );\n return;\n }\n\n const encryptedKey = await this.getEncryptedUserKey(authRequest.publicKey, details);\n\n await this.organizationAuthRequestService.approvePendingRequest(\n this.organizationId,\n authRequest.id,\n encryptedKey\n );\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"loginRequestApproved\")\n );\n });\n }\n\n async denyRequest(requestId: string) {\n await this.performAsyncAction(async () => {\n await this.organizationAuthRequestService.denyPendingRequests(this.organizationId, requestId);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"loginRequestDenied\"));\n });\n }\n\n async denyAllRequests() {\n if (this.tableDataSource.data.length === 0) {\n return;\n }\n\n await this.performAsyncAction(async () => {\n await this.organizationAuthRequestService.denyPendingRequests(\n this.organizationId,\n ...this.tableDataSource.data.map((r) => r.id)\n );\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"allLoginRequestsDenied\")\n );\n });\n }\n\n private async performAsyncAction(action: () => Promise) {\n if (this.actionInProgress) {\n return;\n }\n this.actionInProgress = true;\n try {\n await action();\n this.refresh$.next();\n } catch (err: unknown) {\n this.logService.error(err.toString());\n this.validationService.showError(err);\n } finally {\n this.actionInProgress = false;\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","export class OrganizationDomainRequest {\n txt: string;\n domainName: string;\n\n constructor(txt: string, domainName: string) {\n this.txt = txt;\n this.domainName = domainName;\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\nexport function uniqueInArrayValidator(values: Array, errorMessage: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n\n if (!value) {\n return null;\n }\n\n const lowerTrimmedValue = value.toLowerCase().trim();\n\n // check if the entered value is unique\n if (values.some((val) => val.toLowerCase().trim() === lowerTrimmedValue)) {\n return {\n nonUniqueValue: {\n message: errorMessage,\n },\n };\n }\n\n return null;\n };\n}\n","\n \n \n {{ \"newDomain\" | i18n }}\n {{ \"verifyDomain\" | i18n }}\n\n {{\n data.orgDomain.domainName\n }}\n\n {{\n \"domainStatusUnverified\" | i18n\n }}\n {{\n \"domainStatusVerified\" | i18n\n }}\n \n
    \n \n {{ \"domainName\" | i18n }}\n \n {{ \"domainNameInputHint\" | i18n }}\n \n\n \n {{ \"dnsTxtRecord\" | i18n }}\n \n {{ \"dnsTxtRecordInputHint\" | i18n }}\n \n \n \n \n\n \n {{ \"automaticDomainVerificationProcess\" | i18n }}\n \n
    \n \n \n \n\n \n \n
    \n\n","import { DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { OrgDomainApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization-domain/org-domain-api.service.abstraction\";\nimport { OrgDomainServiceAbstraction } from \"@bitwarden/common/abstractions/organization-domain/org-domain.service.abstraction\";\nimport { OrganizationDomainResponse } from \"@bitwarden/common/abstractions/organization-domain/responses/organization-domain.response\";\nimport { HttpStatusCode } from \"@bitwarden/common/enums\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { OrganizationDomainRequest } from \"@bitwarden/common/services/organization-domain/requests/organization-domain.request\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { domainNameValidator } from \"./validators/domain-name.validator\";\nimport { uniqueInArrayValidator } from \"./validators/unique-in-array.validator\";\nexport interface DomainAddEditDialogData {\n organizationId: string;\n orgDomain: OrganizationDomainResponse;\n existingDomainNames: Array;\n}\n\n@Component({\n templateUrl: \"domain-add-edit-dialog.component.html\",\n})\nexport class DomainAddEditDialogComponent implements OnInit, OnDestroy {\n private componentDestroyed$: Subject = new Subject();\n\n domainForm: FormGroup = this.formBuilder.group({\n domainName: [\n \"\",\n [\n Validators.required,\n domainNameValidator(this.i18nService.t(\"invalidDomainNameMessage\")),\n uniqueInArrayValidator(\n this.data.existingDomainNames,\n this.i18nService.t(\"duplicateDomainError\")\n ),\n ],\n ],\n txt: [{ value: null, disabled: true }],\n });\n\n get domainNameCtrl(): FormControl {\n return this.domainForm.controls.domainName as FormControl;\n }\n get txtCtrl(): FormControl {\n return this.domainForm.controls.txt as FormControl;\n }\n\n rejectedDomainNameValidator: ValidatorFn = null;\n\n rejectedDomainNames: Array = [];\n\n constructor(\n public dialogRef: DialogRef,\n @Inject(DIALOG_DATA) public data: DomainAddEditDialogData,\n private formBuilder: FormBuilder,\n private cryptoFunctionService: CryptoFunctionServiceAbstraction,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private orgDomainApiService: OrgDomainApiServiceAbstraction,\n private orgDomainService: OrgDomainServiceAbstraction,\n private validationService: ValidationService,\n private dialogService: DialogService\n ) {}\n\n // Angular Method Implementations\n\n async ngOnInit(): Promise {\n // If we have data.orgDomain, then editing, otherwise creating new domain\n await this.populateForm();\n }\n\n ngOnDestroy(): void {\n this.componentDestroyed$.next();\n this.componentDestroyed$.complete();\n }\n\n // End Angular Method Implementations\n\n // Form methods\n\n async populateForm(): Promise {\n if (this.data.orgDomain) {\n // Edit\n this.domainForm.patchValue(this.data.orgDomain);\n this.domainForm.disable();\n } else {\n // Add\n\n // Figuring out the proper length of our DNS TXT Record value was fun.\n // DNS-Based Service Discovery RFC: https://www.ietf.org/rfc/rfc6763.txt; see section 6.1\n // Google uses 43 chars for their TXT record value: https://support.google.com/a/answer/2716802\n // So, chose a magic # of 33 bytes to achieve at least that once converted to base 64 (47 char length).\n const generatedTxt = `bw=${Utils.fromBufferToB64(\n await this.cryptoFunctionService.randomBytes(33)\n )}`;\n this.txtCtrl.setValue(generatedTxt);\n }\n\n this.setupFormListeners();\n }\n\n setupFormListeners(): void {\n // suppresses touched state on change for reactive form controls\n // Manually set touched to show validation errors as the user stypes\n this.domainForm.valueChanges.pipe(takeUntil(this.componentDestroyed$)).subscribe(() => {\n this.domainForm.markAllAsTouched();\n });\n }\n\n copyDnsTxt(): void {\n this.orgDomainService.copyDnsTxt(this.txtCtrl.value);\n }\n\n // End Form methods\n\n // Async Form Actions\n saveDomain = async (): Promise => {\n if (this.domainForm.invalid) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"domainFormInvalid\"));\n return;\n }\n\n this.domainNameCtrl.disable();\n\n const request: OrganizationDomainRequest = new OrganizationDomainRequest(\n this.txtCtrl.value,\n this.domainNameCtrl.value\n );\n\n try {\n this.data.orgDomain = await this.orgDomainApiService.post(this.data.organizationId, request);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainSaved\"));\n await this.verifyDomain();\n } catch (e) {\n this.handleDomainSaveError(e);\n }\n };\n\n private handleDomainSaveError(e: any): void {\n if (e instanceof ErrorResponse) {\n const errorResponse: ErrorResponse = e as ErrorResponse;\n switch (errorResponse.statusCode) {\n case HttpStatusCode.Conflict:\n if (errorResponse.message.includes(\"The domain is not available to be claimed\")) {\n // If user has attempted to claim a different rejected domain first:\n if (this.rejectedDomainNameValidator) {\n // Remove the validator:\n this.domainNameCtrl.removeValidators(this.rejectedDomainNameValidator);\n this.domainNameCtrl.updateValueAndValidity();\n }\n\n // Update rejected domain names and add new unique in validator\n // which will prevent future known bad domain name submissions.\n this.rejectedDomainNames.push(this.domainNameCtrl.value);\n\n this.rejectedDomainNameValidator = uniqueInArrayValidator(\n this.rejectedDomainNames,\n this.i18nService.t(\"domainNotAvailable\", this.domainNameCtrl.value)\n );\n\n this.domainNameCtrl.addValidators(this.rejectedDomainNameValidator);\n this.domainNameCtrl.updateValueAndValidity();\n\n // Give them another chance to enter a new domain name:\n this.domainForm.enable();\n } else {\n this.validationService.showError(errorResponse);\n }\n\n break;\n\n default:\n this.validationService.showError(errorResponse);\n break;\n }\n } else {\n this.validationService.showError(e);\n }\n }\n\n verifyDomain = async (): Promise => {\n if (this.domainForm.invalid) {\n // Note: shouldn't be possible, but going to leave this to be safe.\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"domainFormInvalid\"));\n return;\n }\n\n try {\n this.data.orgDomain = await this.orgDomainApiService.verify(\n this.data.organizationId,\n this.data.orgDomain.id\n );\n\n if (this.data.orgDomain.verifiedDate) {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainVerified\"));\n this.dialogRef.close();\n } else {\n this.domainNameCtrl.setErrors({\n errorPassthrough: {\n message: this.i18nService.t(\"domainNotVerified\", this.domainNameCtrl.value),\n },\n });\n // For the case where user opens dialog and reverifies when domain name formControl disabled.\n // The input directive only shows error if touched, so must manually mark as touched.\n this.domainNameCtrl.markAsTouched();\n // Update this item so the last checked date gets updated.\n await this.updateOrgDomain();\n }\n } catch (e) {\n this.handleVerifyDomainError(e, this.domainNameCtrl.value);\n // Update this item so the last checked date gets updated.\n await this.updateOrgDomain();\n }\n };\n\n private handleVerifyDomainError(e: any, domainName: string): void {\n if (e instanceof ErrorResponse) {\n const errorResponse: ErrorResponse = e as ErrorResponse;\n switch (errorResponse.statusCode) {\n case HttpStatusCode.Conflict:\n if (errorResponse.message.includes(\"The domain is not available to be claimed\")) {\n this.domainNameCtrl.setErrors({\n errorPassthrough: {\n message: this.i18nService.t(\"domainNotAvailable\", domainName),\n },\n });\n }\n break;\n\n default:\n this.validationService.showError(errorResponse);\n break;\n }\n }\n }\n\n private async updateOrgDomain() {\n // Update this item so the last checked date gets updated.\n await this.orgDomainApiService.getByOrgIdAndOrgDomainId(\n this.data.organizationId,\n this.data.orgDomain.id\n );\n }\n\n deleteDomain = async (): Promise => {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"removeDomain\" },\n content: { key: \"removeDomainWarning\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return;\n }\n\n await this.orgDomainApiService.delete(this.data.organizationId, this.data.orgDomain.id);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainRemoved\"));\n\n this.dialogRef.close();\n };\n\n // End Async Form Actions\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nexport function domainNameValidator(errorMessage: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n\n if (!value) {\n return null;\n }\n\n // Domain labels (sections) are only allowed to be 63 chars in length max\n // 1st and last chars cannot be hyphens per RFC 3696 (https://www.rfc-editor.org/rfc/rfc3696#section-2)\n // We do not want any prefixes per industry standards.\n\n // Must support top-level domains and any number of subdomains.\n // / # start regex\n // ^ # start of string\n // (?!(http(s)?:\\/\\/|www\\.)) # negative lookahead to check if input doesn't match \"http://\", \"https://\" or \"www.\"\n // [a-zA-Z0-9] # first character must be a letter or a number\n // [a-zA-Z0-9-]{0,61} # domain name can have 0 to 61 characters that are letters, numbers, or hyphens\n // [a-zA-Z0-9] # domain name must end with a letter or a number\n // (?: # start of non-capturing group (subdomain sections are optional)\n // \\. # subdomain must have a period\n // [a-zA-Z0-9] # first character of subdomain must be a letter or a number\n // [a-zA-Z0-9-]{0,61} # subdomain can have 0 to 61 characters that are letters, numbers, or hyphens\n // [a-zA-Z0-9] # subdomain must end with a letter or a number\n // )* # end of non-capturing group (subdomain sections are optional)\n // \\. # domain name must have a period\n // [a-zA-Z]{2,} # domain name must have at least two letters (the domain extension)\n // $/ # end of string\n\n const validDomainNameRegex =\n /^(?!(http(s)?:\\/\\/|www\\.))[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9](?:\\.[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])*\\.[a-zA-Z]{2,}$/;\n\n const invalid = !validDomainNameRegex.test(control.value);\n\n if (invalid) {\n return {\n invalidDomainName: {\n message: errorMessage,\n },\n };\n }\n\n return null;\n };\n}\n","
    \n

    {{ \"domainVerification\" | i18n }}

    \n\n \n
    \n\n\n \n {{ \"loading\" | i18n }}\n\n\n\n \n
    \n \n \n \n {{ \"name\" | i18n }}\n {{ \"status\" | i18n }}\n {{ \"lastChecked\" | i18n }}\n {{ \"options\" | i18n }}\n \n \n \n \n \n \n {{ orgDomain.domainName }}\n \n \n \n {{\n \"domainStatusUnverified\" | i18n\n }}\n {{\n \"domainStatusVerified\" | i18n\n }}\n \n \n {{ orgDomain.lastCheckedDate | date : \"medium\" }}\n \n\n \n \n \n \n \n \n \n \n {{ \"verifyDomain\" | i18n }}\n \n \n \n \n \n \n \n
    \n\n \n \"\"\n\n
    \n {{ \"noDomains\" | i18n }}\n
    \n\n
    \n \n {{ \"noDomainsSubText\" | i18n }}\n \n
    \n\n \n \n
    \n
    \n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Params } from \"@angular/router\";\nimport { concatMap, Observable, Subject, take, takeUntil } from \"rxjs\";\n\nimport { OrgDomainApiServiceAbstraction } from \"@bitwarden/common/abstractions/organization-domain/org-domain-api.service.abstraction\";\nimport { OrgDomainServiceAbstraction } from \"@bitwarden/common/abstractions/organization-domain/org-domain.service.abstraction\";\nimport { OrganizationDomainResponse } from \"@bitwarden/common/abstractions/organization-domain/responses/organization-domain.response\";\nimport { HttpStatusCode } from \"@bitwarden/common/enums\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport {\n DomainAddEditDialogComponent,\n DomainAddEditDialogData,\n} from \"./domain-add-edit-dialog/domain-add-edit-dialog.component\";\n\n@Component({\n selector: \"app-org-manage-domain-verification\",\n templateUrl: \"domain-verification.component.html\",\n})\nexport class DomainVerificationComponent implements OnInit, OnDestroy {\n private componentDestroyed$ = new Subject();\n\n loading = true;\n\n organizationId: string;\n orgDomains$: Observable;\n\n constructor(\n private route: ActivatedRoute,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private orgDomainApiService: OrgDomainApiServiceAbstraction,\n private orgDomainService: OrgDomainServiceAbstraction,\n private dialogService: DialogService,\n private validationService: ValidationService\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n async ngOnInit() {\n this.orgDomains$ = this.orgDomainService.orgDomains$;\n\n // Note: going to use concatMap as async subscribe blocks don't work as you expect and\n // as such, ESLint rejects it\n // ex: https://stackoverflow.com/a/71056380\n this.route.params\n .pipe(\n concatMap(async (params: Params) => {\n this.organizationId = params.organizationId;\n await this.load();\n }),\n takeUntil(this.componentDestroyed$)\n )\n .subscribe();\n }\n\n async load() {\n await this.orgDomainApiService.getAllByOrgId(this.organizationId);\n\n this.loading = false;\n }\n\n addDomain() {\n const domainAddEditDialogData: DomainAddEditDialogData = {\n organizationId: this.organizationId,\n orgDomain: null,\n existingDomainNames: this.getExistingDomainNames(),\n };\n\n this.dialogService.open(DomainAddEditDialogComponent, {\n data: domainAddEditDialogData,\n });\n }\n\n editDomain(orgDomain: OrganizationDomainResponse) {\n const domainAddEditDialogData: DomainAddEditDialogData = {\n organizationId: this.organizationId,\n orgDomain: orgDomain,\n existingDomainNames: this.getExistingDomainNames(),\n };\n\n this.dialogService.open(DomainAddEditDialogComponent, {\n data: domainAddEditDialogData,\n });\n }\n\n private getExistingDomainNames(): Array {\n let existingDomainNames: string[];\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.orgDomains$.pipe(take(1)).subscribe((orgDomains: Array) => {\n existingDomainNames = orgDomains.map((o) => o.domainName);\n });\n return existingDomainNames;\n }\n\n // Options\n\n copyDnsTxt(dnsTxt: string): void {\n this.orgDomainService.copyDnsTxt(dnsTxt);\n }\n\n async verifyDomain(orgDomainId: string, domainName: string): Promise {\n try {\n const orgDomain: OrganizationDomainResponse = await this.orgDomainApiService.verify(\n this.organizationId,\n orgDomainId\n );\n\n if (orgDomain.verifiedDate) {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainVerified\"));\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"domainNotVerified\", domainName)\n );\n // Update this item so the last checked date gets updated.\n await this.updateOrgDomain(orgDomainId);\n }\n } catch (e) {\n this.handleVerifyDomainError(e, domainName);\n // Update this item so the last checked date gets updated.\n await this.updateOrgDomain(orgDomainId);\n }\n }\n\n private async updateOrgDomain(orgDomainId: string) {\n // Update this item so the last checked date gets updated.\n await this.orgDomainApiService.getByOrgIdAndOrgDomainId(this.organizationId, orgDomainId);\n }\n\n private handleVerifyDomainError(e: any, domainName: string): void {\n if (e instanceof ErrorResponse) {\n const errorResponse: ErrorResponse = e as ErrorResponse;\n switch (errorResponse.statusCode) {\n case HttpStatusCode.Conflict:\n if (errorResponse.message.includes(\"The domain is not available to be claimed\")) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"domainNotAvailable\", domainName)\n );\n }\n break;\n\n default:\n this.validationService.showError(errorResponse);\n break;\n }\n }\n }\n\n async deleteDomain(orgDomainId: string): Promise {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"removeDomain\" },\n content: { key: \"removeDomainWarning\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return;\n }\n\n await this.orgDomainApiService.delete(this.organizationId, orgDomainId);\n\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainRemoved\"));\n }\n\n ngOnDestroy(): void {\n this.componentDestroyed$.next();\n this.componentDestroyed$.complete();\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\nimport { ScimProviderType } from \"../../enums\";\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\";\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 { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport {\n OrganizationApiKeyType,\n OrganizationConnectionType,\n} from \"@bitwarden/common/admin-console/enums\";\nimport { ScimConfigApi } from \"@bitwarden/common/admin-console/models/api/scim-config.api\";\nimport { OrganizationApiKeyRequest } from \"@bitwarden/common/admin-console/models/request/organization-api-key.request\";\nimport { OrganizationConnectionRequest } from \"@bitwarden/common/admin-console/models/request/organization-connection.request\";\nimport { ScimConfigRequest } from \"@bitwarden/common/admin-console/models/request/scim-config.request\";\nimport { OrganizationConnectionResponse } from \"@bitwarden/common/admin-console/models/response/organization-connection.response\";\nimport { ApiKeyResponse } from \"@bitwarden/common/auth/models/response/api-key.response\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 private dialogService: DialogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n });\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.dialogService.openSimpleDialog({\n title: { key: \"rotateScimKey\" },\n content: { key: \"rotateScimKeyWarning\" },\n acceptButtonText: { key: \"rotateKey\" },\n type: \"warning\",\n });\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 { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"@bitwarden/angular/auth/guards\";\nimport { canAccessFeature } from \"@bitwarden/angular/guard/feature-flag.guard\";\nimport { canAccessSettingsTab } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { OrganizationPermissionsGuard } from \"@bitwarden/web-vault/app/admin-console/organizations/guards/org-permissions.guard\";\nimport { OrganizationLayoutComponent } from \"@bitwarden/web-vault/app/admin-console/organizations/layouts/organization-layout.component\";\nimport { SettingsComponent } from \"@bitwarden/web-vault/app/admin-console/organizations/settings/settings.component\";\n\nimport { SsoComponent } from \"../../auth/sso/sso.component\";\n\nimport { DeviceApprovalsComponent } from \"./manage/device-approvals/device-approvals.component\";\nimport { DomainVerificationComponent } from \"./manage/domain-verification/domain-verification.component\";\nimport { ScimComponent } from \"./manage/scim.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: \"domain-verification\",\n component: DomainVerificationComponent,\n canActivate: [OrganizationPermissionsGuard],\n data: {\n organizationPermissions: (org: Organization) => org.canManageDomainVerification,\n },\n },\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 path: \"device-approvals\",\n component: DeviceApprovalsComponent,\n canActivate: [\n OrganizationPermissionsGuard,\n canAccessFeature(FeatureFlag.TrustedDeviceEncryption),\n ],\n data: {\n organizationPermissions: (org: Organization) => org.canManageDeviceApprovals,\n titleId: \"deviceApprovals\",\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 { NoItemsModule } from \"@bitwarden/components\";\nimport { SharedModule } from \"@bitwarden/web-vault/app/shared/shared.module\";\n\nimport { SsoComponent } from \"../../auth/sso/sso.component\";\n\nimport { CoreOrganizationModule } from \"./core\";\nimport { DeviceApprovalsComponent } from \"./manage/device-approvals/device-approvals.component\";\nimport { DomainAddEditDialogComponent } from \"./manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component\";\nimport { DomainVerificationComponent } from \"./manage/domain-verification/domain-verification.component\";\nimport { ScimComponent } from \"./manage/scim.component\";\nimport { OrganizationsRoutingModule } from \"./organizations-routing.module\";\n\n@NgModule({\n imports: [SharedModule, CoreOrganizationModule, OrganizationsRoutingModule, NoItemsModule],\n declarations: [\n SsoComponent,\n ScimComponent,\n DomainVerificationComponent,\n DomainAddEditDialogComponent,\n DeviceApprovalsComponent,\n ],\n})\nexport class OrganizationsModule {}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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 { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\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","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 { ProviderAddOrganizationRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-add-organization.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\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 detachOrganization(providerId: string, organizationId: string): Promise {\n await this.apiService.deleteProviderOrganization(providerId, organizationId);\n await this.syncService.fullSync(true);\n }\n}\n","\n {{ \"addExistingOrganization\" | i18n }}\n \n \n \n \n \n \n \n \n {{ o.name }}\n \n \n \n \n \n \n \n \n \n \n \n\n","import { DIALOG_DATA, DialogRef } from \"@angular/cdk/dialog\";\nimport { Component, Inject, OnInit } from \"@angular/core\";\n\nimport { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { WebProviderService } from \"../services/web-provider.service\";\n\ninterface AddOrganizationDialogData {\n providerId: string;\n organizations: Organization[];\n}\n\n@Component({\n templateUrl: \"add-organization.component.html\",\n})\nexport class AddOrganizationComponent implements OnInit {\n protected provider: Provider;\n protected loading = true;\n\n constructor(\n private dialogRef: DialogRef,\n @Inject(DIALOG_DATA) protected data: AddOrganizationDialogData,\n private providerService: ProviderService,\n private webProviderService: WebProviderService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private validationService: ValidationService,\n private dialogService: DialogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n if (this.data.providerId == null) {\n return;\n }\n\n this.provider = await this.providerService.get(this.data.providerId);\n\n this.loading = false;\n }\n\n add(organization: Organization) {\n return async () => {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: organization.name,\n content: {\n key: \"addOrganizationConfirmation\",\n placeholders: [organization.name, this.provider.name],\n },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.webProviderService.addOrganizationToProvider(\n this.data.providerId,\n organization.id\n );\n } catch (e) {\n this.validationService.showError(e);\n return;\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationJoinedProvider\")\n );\n\n this.dialogRef.close(true);\n };\n }\n\n static open(dialogService: DialogService, data: AddOrganizationDialogData) {\n return dialogService.open(AddOrganizationComponent, {\n data,\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","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { firstValueFrom } 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 { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationService } from \"@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction\";\nimport { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { ProviderUserType } from \"@bitwarden/common/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport { ProviderOrganizationOrganizationDetailsResponse } from \"@bitwarden/common/admin-console/models/response/provider/provider-organization.response\";\nimport { PlanType } from \"@bitwarden/common/billing/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { WebProviderService } from \"../services/web-provider.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 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 private dialogService: DialogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.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 dialogRef = AddOrganizationComponent.open(this.dialogService, {\n providerId: this.providerId,\n organizations: this.addableOrganizations,\n });\n\n if (await firstValueFrom(dialogRef.closed)) {\n await this.load();\n }\n }\n\n async remove(organization: ProviderOrganizationOrganizationDetailsResponse) {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: organization.organizationName,\n content: { key: \"detachOrganizationConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.webProviderService.detachOrganization(\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/billing\";\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 { ProviderUserAcceptRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-accept.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { EventResponse } from \"@bitwarden/common/models/response/event.response\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { BaseEventsComponent } from \"@bitwarden/web-vault/app/common/base.events.component\";\nimport { EventService } from \"@bitwarden/web-vault/app/core\";\nimport { EventExportService } from \"@bitwarden/web-vault/app/tools/event-export\";\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: EventExportService,\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/admin-console/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/admin-console/enums\";\nimport { ProviderUserBulkConfirmRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-bulk.request\";\nimport { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { BulkConfirmComponent as OrganizationBulkConfirmComponent } from \"@bitwarden/web-vault/app/admin-console/organizations/members/components/bulk/bulk-confirm.component\";\nimport { BulkUserDetails } from \"@bitwarden/web-vault/app/admin-console/organizations/members/components/bulk/bulk-status.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../../apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent extends OrganizationBulkConfirmComponent {\n @Input() providerId: string;\n\n protected override isAccepted(user: BulkUserDetails) {\n return user.status === ProviderUserStatusType.Accepted;\n }\n\n protected override 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 override getCryptoKey(): Promise {\n return this.cryptoService.getProviderKey(this.providerId);\n }\n\n protected override 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/admin-console/models/request/provider/provider-user-bulk.request\";\nimport { BulkRemoveComponent as OrganizationBulkRemoveComponent } from \"@bitwarden/web-vault/app/admin-console/organizations/members/components/bulk/bulk-remove.component\";\n\n@Component({\n templateUrl:\n \"../../../../../../../../apps/web/src/app/admin-console/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\";\n\nexport class ProviderUserInviteRequest {\n emails: string[] = [];\n type: ProviderUserType;\n}\n","import { ProviderUserType } from \"../../../enums\";\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 { ProviderUserType } from \"@bitwarden/common/admin-console/enums\";\nimport { PermissionsApi } from \"@bitwarden/common/admin-console/models/api/permissions.api\";\nimport { ProviderUserInviteRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-update.request\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { DialogService } from \"@bitwarden/components\";\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 private dialogService: DialogService\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.dialogService.openSimpleDialog({\n title: this.name,\n content: { key: \"removeUserConfirmation\" },\n type: \"warning\",\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteProviderUser(this.providerId, this.providerUserId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.name)\n );\n this.onDeletedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
    \n

    {{ \"people\" | i18n }}

    \n
    \n \n \n {{ \"all\" | i18n }}\n {{ allCount }}\n \n\n \n {{ \"invited\" | i18n }}\n {{ invitedCount }}\n \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","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 { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { ProviderService } from \"@bitwarden/common/admin-console/abstractions/provider.service\";\nimport { ProviderUserStatusType, ProviderUserType } from \"@bitwarden/common/admin-console/enums\";\nimport { ProviderUserBulkRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserBulkResponse } from \"@bitwarden/common/admin-console/models/response/provider/provider-user-bulk.response\";\nimport { ProviderUserUserDetailsResponse } from \"@bitwarden/common/admin-console/models/response/provider/provider-user.response\";\nimport { ListResponse } from \"@bitwarden/common/models/response/list.response\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { DialogService } from \"@bitwarden/components\";\nimport { openEntityEventsDialog } from \"@bitwarden/web-vault/app/admin-console/organizations/manage/entity-events.component\";\nimport { BulkStatusComponent } from \"@bitwarden/web-vault/app/admin-console/organizations/members/components/bulk/bulk-status.component\";\nimport { BasePeopleComponent } from \"@bitwarden/web-vault/app/common/base.people.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(\"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 status: ProviderUserStatusType = null;\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 dialogService: DialogService\n ) {\n super(\n apiService,\n searchService,\n i18nService,\n platformUtilsService,\n cryptoService,\n validationService,\n modalService,\n logService,\n searchPipe,\n userNamePipe,\n stateService,\n dialogService\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);\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 openEntityEventsDialog(this.dialogService, {\n data: {\n name: this.userNamePipe.transform(user),\n providerId: this.providerId,\n entityId: user.id,\n showUser: false,\n entity: \"user\",\n },\n });\n }\n\n async bulkRemove() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRemoveComponent,\n this.bulkRemoveModalRef,\n (comp) => {\n comp.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/admin-console/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 { ProviderUpdateRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-update.request\";\nimport { ProviderResponse } from \"@bitwarden/common/admin-console/models/response/provider/provider.response\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\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/admin-console/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 { ProviderSetupRequest } from \"@bitwarden/common/admin-console/models/request/provider/provider-setup.request\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\nimport { ProviderKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\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 providerKey = await this.cryptoService.makeOrgKey();\n const key = providerKey[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/auth/guards\";\nimport { Provider } from \"@bitwarden/common/models/domain/provider\";\nimport { ProvidersComponent } from \"@bitwarden/web-vault/app/admin-console/providers/providers.component\";\nimport { FrontendLayoutComponent } from \"@bitwarden/web-vault/app/layouts/frontend-layout.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 { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport { SearchModule } from \"@bitwarden/components\";\nimport { OrganizationPlansComponent } from \"@bitwarden/web-vault/app/billing\";\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/web-provider.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: [\n CommonModule,\n FormsModule,\n OssModule,\n JslibModule,\n ProvidersRoutingModule,\n OrganizationPlansComponent,\n SearchModule,\n ],\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","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ProvidersModule } from \"./admin-console/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\";\n\nimport { EventUploadService } from \"@bitwarden/common/abstractions/event/event-upload.service\";\nimport { NotificationsService } from \"@bitwarden/common/abstractions/notifications.service\";\nimport { SearchService } from \"@bitwarden/common/abstractions/search.service\";\nimport { SettingsService } from \"@bitwarden/common/abstractions/settings.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vault-timeout/vault-timeout.service\";\nimport { InternalPolicyService } from \"@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { BroadcasterService } from \"@bitwarden/common/platform/abstractions/broadcaster.service\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CollectionService } from \"@bitwarden/common/vault/abstractions/collection.service\";\nimport { InternalFolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { DialogService } from \"@bitwarden/components\";\n\nimport { PolicyListService } from \"./admin-console/core/policy-list.service\";\nimport {\n DisableSendPolicy,\n MasterPasswordPolicy,\n PasswordGeneratorPolicy,\n PersonalOwnershipPolicy,\n RequireSsoPolicy,\n ResetPasswordPolicy,\n SendOptionsPolicy,\n SingleOrgPolicy,\n TwoFactorAuthenticationPolicy,\n} from \"./admin-console/organizations/policies\";\nimport { RouterService } from \"./core\";\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: PasswordGenerationServiceAbstraction,\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 private configService: ConfigServiceAbstraction,\n private dialogService: DialogService\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 /// ############ DEPRECATED ############\n /// Please do not use the AppComponent to send events between services.\n ///\n /// Services that depends on other services, should do so through Dependency Injection\n /// and subscribe to events through that service observable.\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 this.configService.triggerServerConfigFetch();\n break;\n case \"upgradeOrganization\": {\n const upgradeConfirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"upgradeOrganization\" },\n content: { key: \"upgradeOrganizationDesc\" },\n acceptButtonText: { key: \"upgradeOrganization\" },\n type: \"info\",\n });\n if (upgradeConfirmed) {\n this.router.navigate([\n \"organizations\",\n message.organizationId,\n \"billing\",\n \"subscription\",\n ]);\n }\n break;\n }\n case \"premiumRequired\": {\n const premiumConfirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"premiumRequired\" },\n content: { key: \"premiumRequiredDesc\" },\n acceptButtonText: { key: \"upgrade\" },\n type: \"success\",\n });\n if (premiumConfirmed) {\n this.router.navigate([\"settings/subscription/premium\"]);\n }\n break;\n }\n case \"emailVerificationRequired\": {\n const emailVerificationConfirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"emailVerificationRequired\" },\n content: { key: \"emailVerificationRequiredDesc\" },\n acceptButtonText: { key: \"learnMore\" },\n type: \"info\",\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 });\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 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/admin-console/enums\";\nimport { Organization } from \"@bitwarden/common/admin-console/models/domain/organization\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component\";\n\nexport class ActivateAutofillPolicy extends BasePolicy {\n name = \"activateAutofill\";\n description = \"activateAutofillPolicyDesc\";\n type = PolicyType.ActivateAutofill;\n component = ActivateAutofillPolicyComponent;\n\n display(organization: Organization) {\n return organization.useActivateAutofillPolicy;\n }\n}\n\n@Component({\n selector: \"policy-activate-autofill\",\n templateUrl: \"activate-autofill.component.html\",\n})\nexport class ActivateAutofillPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"experimentalFeature\" | i18n }}\n {{\n \"learnMoreAboutAutofill\" | i18n\n }}\n\n\n
    \n
    \n \n \n
    \n
    \n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component\";\n\nexport class DisablePersonalVaultExportPolicy extends BasePolicy {\n name = \"disablePersonalVaultExport\";\n description = \"disablePersonalVaultExportDescription\";\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","\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
    \n
    \n \n \n
    \n
    \n
    \n
    \n","import { Component } from \"@angular/core\";\nimport { FormBuilder, FormControl } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/common/admin-console/enums\";\nimport { PolicyRequest } from \"@bitwarden/common/admin-console/models/request/policy.request\";\nimport { VaultTimeoutAction } from \"@bitwarden/common/enums/vault-timeout-action.enum\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport {\n BasePolicy,\n BasePolicyComponent,\n} from \"@bitwarden/web-vault/app/admin-console/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 vaultTimeoutActionOptions: { name: string; value: string }[];\n data = this.formBuilder.group({\n hours: new FormControl(null),\n minutes: new FormControl(null),\n action: new FormControl(null),\n });\n\n constructor(private formBuilder: FormBuilder, private i18nService: I18nService) {\n super();\n this.vaultTimeoutActionOptions = [\n { name: i18nService.t(\"userPreference\"), value: null },\n { name: i18nService.t(VaultTimeoutAction.Lock), value: VaultTimeoutAction.Lock },\n { name: i18nService.t(VaultTimeoutAction.LogOut), value: VaultTimeoutAction.LogOut },\n ];\n }\n\n loadData() {\n const minutes = this.policyResponse.data?.minutes;\n const action = this.policyResponse.data?.action;\n\n this.data.patchValue({\n hours: minutes ? Math.floor(minutes / 60) : null,\n minutes: minutes ? minutes % 60 : null,\n action: action,\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 action: this.data.value.action,\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","import { Component } from \"@angular/core\";\n\nimport { AppComponent as BaseAppComponent } from \"@bitwarden/web-vault/app/app.component\";\n\nimport { ActivateAutofillPolicy } from \"./admin-console/policies/activate-autofill.component\";\nimport { DisablePersonalVaultExportPolicy } from \"./admin-console/policies/disable-personal-vault-export.component\";\nimport { MaximumVaultTimeoutPolicy } from \"./admin-console/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 new ActivateAutofillPolicy(),\n ]);\n }\n}\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 { OrganizationsModule } from \"./admin-console/organizations/organizations.module\";\nimport { ActivateAutofillPolicyComponent } from \"./admin-console/policies/activate-autofill.component\";\nimport { DisablePersonalVaultExportPolicyComponent } from \"./admin-console/policies/disable-personal-vault-export.component\";\nimport { MaximumVaultTimeoutPolicyComponent } from \"./admin-console/policies/maximum-vault-timeout.component\";\nimport { AppRoutingModule } from \"./app-routing.module\";\nimport { AppComponent } from \"./app.component\";\n\n/**\n * This is the AppModule for the commercial version of Bitwarden.\n * `apps/web/app.module.ts` contains the OSS version.\n *\n * You probably do not want to modify this file. Consider editing `oss.module.ts` instead.\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 ActivateAutofillPolicyComponent,\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","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { AuthResult } from \"@bitwarden/common/auth/models/domain/auth-result\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { SsoLogInCredentials } from \"@bitwarden/common/auth/models/domain/log-in-credentials\";\nimport { TrustedDeviceUserDecryptionOption } from \"@bitwarden/common/auth/models/domain/user-decryption-options/trusted-device-user-decryption-option\";\nimport { SsoPreValidateResponse } from \"@bitwarden/common/auth/models/response/sso-pre-validate.response\";\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { CryptoFunctionService } from \"@bitwarden/common/platform/abstractions/crypto-function.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\nimport { AccountDecryptionOptions } from \"@bitwarden/common/platform/models/domain/account\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\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 onSuccessfulLoginTde: () => Promise;\n onSuccessfulLoginTdeNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"lock\";\n protected trustedDeviceEncRoute = \"login-initiated\";\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: PasswordGenerationServiceAbstraction,\n protected logService: LogService,\n protected configService: ConfigServiceAbstraction\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 const ssoOrganizationIdentifier = this.getOrgIdentifierFromState(qParams.state);\n await this.logIn(qParams.code, codeVerifier, ssoOrganizationIdentifier);\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, orgSsoIdentifier: string): Promise {\n this.loggingIn = true;\n try {\n const credentials = new SsoLogInCredentials(\n code,\n codeVerifier,\n this.redirectUri,\n orgSsoIdentifier\n );\n this.formPromise = this.authService.logIn(credentials);\n const authResult = await this.formPromise;\n\n const acctDecryptionOpts: AccountDecryptionOptions =\n await this.stateService.getAccountDecryptionOptions();\n\n if (authResult.requiresTwoFactor) {\n return await this.handleTwoFactorRequired(orgSsoIdentifier);\n }\n\n // Everything after the 2FA check is considered a successful login\n // Just have to figure out where to send the user\n\n // Save off the OrgSsoIdentifier for use in the TDE flows\n // - TDE login decryption options component\n // - Browser SSO on extension open\n // Note: you cannot set this in state before 2FA b/c there won't be an account in state.\n await this.stateService.setUserSsoOrganizationIdentifier(orgSsoIdentifier);\n\n const tdeEnabled = await this.isTrustedDeviceEncEnabled(\n acctDecryptionOpts.trustedDeviceOption\n );\n\n if (tdeEnabled) {\n return await this.handleTrustedDeviceEncryptionEnabled(\n authResult,\n orgSsoIdentifier,\n acctDecryptionOpts\n );\n }\n\n // In the standard, non TDE case, a user must set password if they don't\n // have one and they aren't using key connector.\n // Note: TDE & Key connector are mutually exclusive org config options.\n const requireSetPassword =\n !acctDecryptionOpts.hasMasterPassword &&\n acctDecryptionOpts.keyConnectorOption === undefined;\n\n if (requireSetPassword || authResult.resetMasterPassword) {\n // Change implies going no password -> password in this case\n return await this.handleChangePasswordRequired(orgSsoIdentifier);\n }\n\n // Users enrolled in admin acct recovery can be forced to set a new password after\n // having the admin set a temp password for them\n if (authResult.forcePasswordReset == ForceResetPasswordReason.AdminForcePasswordReset) {\n return await this.handleForcePasswordReset(orgSsoIdentifier);\n }\n\n // Standard SSO login success case\n return await this.handleSuccessfulLogin();\n } catch (e) {\n await this.handleLoginError(e);\n }\n }\n\n private async isTrustedDeviceEncEnabled(\n trustedDeviceOption: TrustedDeviceUserDecryptionOption\n ): Promise {\n const trustedDeviceEncryptionFeatureActive = await this.configService.getFeatureFlag(\n FeatureFlag.TrustedDeviceEncryption\n );\n\n return trustedDeviceEncryptionFeatureActive && trustedDeviceOption !== undefined;\n }\n\n private async handleTwoFactorRequired(orgIdentifier: string) {\n await this.navigateViaCallbackOrRoute(\n this.onSuccessfulLoginTwoFactorNavigate,\n [this.twoFactorRoute],\n {\n queryParams: {\n identifier: orgIdentifier,\n sso: \"true\",\n },\n }\n );\n }\n\n private async handleTrustedDeviceEncryptionEnabled(\n authResult: AuthResult,\n orgIdentifier: string,\n acctDecryptionOpts: AccountDecryptionOptions\n ): Promise {\n // If user doesn't have a MP, but has reset password permission, they must set a MP\n if (\n !acctDecryptionOpts.hasMasterPassword &&\n acctDecryptionOpts.trustedDeviceOption.hasManageResetPasswordPermission\n ) {\n // Change implies going no password -> password in this case\n return await this.handleChangePasswordRequired(orgIdentifier);\n }\n\n if (authResult.forcePasswordReset !== ForceResetPasswordReason.None) {\n return await this.handleForcePasswordReset(orgIdentifier);\n }\n\n if (this.onSuccessfulLoginTde != null) {\n // Don't await b/c causes hang on desktop & browser\n this.onSuccessfulLoginTde();\n }\n\n this.navigateViaCallbackOrRoute(\n this.onSuccessfulLoginTdeNavigate,\n // Navigate to TDE page (if user was on trusted device and TDE has decrypted\n // their user key, the login-initiated guard will redirect them to the vault)\n [this.trustedDeviceEncRoute]\n );\n }\n\n private async handleChangePasswordRequired(orgIdentifier: string) {\n await this.navigateViaCallbackOrRoute(\n this.onSuccessfulLoginChangePasswordNavigate,\n [this.changePasswordRoute],\n {\n queryParams: {\n identifier: orgIdentifier,\n },\n }\n );\n }\n\n private async handleForcePasswordReset(orgIdentifier: string) {\n await this.navigateViaCallbackOrRoute(\n this.onSuccessfulLoginForceResetNavigate,\n [this.forcePasswordResetRoute],\n {\n queryParams: {\n identifier: orgIdentifier,\n },\n }\n );\n }\n\n private async handleSuccessfulLogin() {\n if (this.onSuccessfulLogin != null) {\n // Don't await b/c causes hang on desktop & browser\n this.onSuccessfulLogin();\n }\n\n await this.navigateViaCallbackOrRoute(this.onSuccessfulLoginNavigate, [this.successRoute]);\n }\n\n private async handleLoginError(e: any) {\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\n private async navigateViaCallbackOrRoute(\n callback: () => Promise,\n commands: unknown[],\n extras?: NavigationExtras\n ): Promise {\n if (callback) {\n await callback();\n } else {\n await this.router.navigate(commands, extras);\n }\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 { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\nimport { ForceResetPasswordReason } from \"@bitwarden/common/auth/models/domain/force-reset-password-reason\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 private stateService: StateService\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 if (\n !routerState.url.includes(\"update-temp-password\") &&\n (await this.stateService.getForcePasswordResetReason()) != ForceResetPasswordReason.None\n ) {\n return this.router.createUrlTree([\"/update-temp-password\"]);\n }\n\n return true;\n }\n}\n","import { inject } from \"@angular/core\";\nimport {\n ActivatedRouteSnapshot,\n CanActivateFn,\n Router,\n RouterStateSnapshot,\n} from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\nimport { ClientType } from \"@bitwarden/common/enums\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { MessagingService } from \"@bitwarden/common/platform/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\n/**\n * Only allow access to this route if the vault is locked.\n * If TDE is enabled then the user must also have had a user key at some point.\n * Otherwise redirect to root.\n */\nexport function lockGuard(): CanActivateFn {\n return async (\n activatedRouteSnapshot: ActivatedRouteSnapshot,\n routerStateSnapshot: RouterStateSnapshot\n ) => {\n const authService = inject(AuthService);\n const cryptoService = inject(CryptoService);\n const deviceTrustCryptoService = inject(DeviceTrustCryptoServiceAbstraction);\n const platformUtilService = inject(PlatformUtilsService);\n const messagingService = inject(MessagingService);\n const router = inject(Router);\n const userVerificationService = inject(UserVerificationService);\n\n const authStatus = await authService.getAuthStatus();\n if (authStatus !== AuthenticationStatus.Locked) {\n return router.createUrlTree([\"/\"]);\n }\n\n // If legacy user on web, redirect to migration page\n if (await cryptoService.isLegacyUser()) {\n if (platformUtilService.getClientType() === ClientType.Web) {\n return router.createUrlTree([\"migrate-legacy-encryption\"]);\n }\n // Log out legacy users on other clients\n messagingService.send(\"logout\");\n return false;\n }\n\n // User is authN and in locked state.\n\n const tdeEnabled = await deviceTrustCryptoService.supportsDeviceTrust();\n\n // Create special exception which allows users to go from the login-initiated page to the lock page for the approve w/ MP flow\n // The MP check is necessary to prevent direct manual navigation from other locked state pages for users who don't have a MP\n if (\n activatedRouteSnapshot.queryParams[\"from\"] === \"login-initiated\" &&\n tdeEnabled &&\n (await userVerificationService.hasMasterPassword())\n ) {\n return true;\n }\n\n // If authN user with TDE directly navigates to lock, kick them upwards so redirect guard can\n // properly route them to the login decryption options component.\n const everHadUserKey = await cryptoService.getEverHadUserKey();\n if (tdeEnabled && !everHadUserKey) {\n return router.createUrlTree([\"/\"]);\n }\n\n return true;\n };\n}\n","import { inject } from \"@angular/core\";\nimport { CanActivateFn, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\n\nexport interface RedirectRoutes {\n loggedIn: string;\n loggedOut: string;\n locked: string;\n notDecrypted: string;\n}\n\nconst defaultRoutes: RedirectRoutes = {\n loggedIn: \"/vault\",\n loggedOut: \"/login\",\n locked: \"/lock\",\n notDecrypted: \"/login-initiated\",\n};\n\n/**\n * Guard that consolidates all redirection logic, should be applied to root route.\n */\nexport function redirectGuard(overrides: Partial = {}): CanActivateFn {\n const routes = { ...defaultRoutes, ...overrides };\n return async (route) => {\n const authService = inject(AuthService);\n const cryptoService = inject(CryptoService);\n const deviceTrustCryptoService = inject(DeviceTrustCryptoServiceAbstraction);\n const router = inject(Router);\n\n const authStatus = await authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return router.createUrlTree([routes.loggedOut], { queryParams: route.queryParams });\n }\n\n if (authStatus === AuthenticationStatus.Unlocked) {\n return router.createUrlTree([routes.loggedIn], { queryParams: route.queryParams });\n }\n\n // If locked, TDE is enabled, and the user hasn't decrypted yet, then redirect to the\n // login decryption options component.\n const tdeEnabled = await deviceTrustCryptoService.supportsDeviceTrust();\n const everHadUserKey = await cryptoService.getEverHadUserKey();\n if (authStatus === AuthenticationStatus.Locked && tdeEnabled && !everHadUserKey) {\n return router.createUrlTree([routes.notDecrypted], { queryParams: route.queryParams });\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n return router.createUrlTree([routes.locked], { queryParams: route.queryParams });\n }\n\n return router.createUrlTree([\"/\"]);\n };\n}\n","import { inject } from \"@angular/core\";\nimport {\n ActivatedRouteSnapshot,\n Router,\n RouterStateSnapshot,\n CanActivateFn,\n} from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { DeviceTrustCryptoServiceAbstraction } from \"@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\n\n/**\n * Only allow access to this route if the vault is locked and has never been decrypted.\n * Otherwise redirect to root.\n */\nexport function tdeDecryptionRequiredGuard(): CanActivateFn {\n return async (_: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const authService = inject(AuthService);\n const cryptoService = inject(CryptoService);\n const deviceTrustCryptoService = inject(DeviceTrustCryptoServiceAbstraction);\n const router = inject(Router);\n\n const authStatus = await authService.getAuthStatus();\n const tdeEnabled = await deviceTrustCryptoService.supportsDeviceTrust();\n const everHadUserKey = await cryptoService.getEverHadUserKey();\n if (authStatus !== AuthenticationStatus.Locked || !tdeEnabled || everHadUserKey) {\n return router.createUrlTree([\"/\"]);\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/auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\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","\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 { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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 { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/abstractions/validation.service\";\n\n/**\n * Provides error handling, in particular for any error returned by the server in an api call.\n * Attach it to a
    element and provide the name of the class property that will hold the api call promise.\n * e.g. \n * Any errors/rejections that occur will be intercepted and displayed as error toasts.\n */\n@Directive({\n selector: \"[appApiAction]\",\n})\nexport class ApiActionDirective implements OnChanges {\n @Input() appApiAction: Promise;\n\n constructor(\n private el: ElementRef,\n private validationService: ValidationService,\n private logService: LogService\n ) {}\n\n ngOnChanges(changes: any) {\n if (this.appApiAction == null || this.appApiAction.then == null) {\n return;\n }\n\n this.el.nativeElement.loading = true;\n\n this.appApiAction.then(\n (response: any) => {\n this.el.nativeElement.loading = false;\n },\n (e: any) => {\n this.el.nativeElement.loading = false;\n\n if ((e as ErrorResponse).captchaRequired) {\n this.logService.error(\"Captcha required error response: \" + e.getSingleMessage());\n return;\n }\n this.logService?.error(`Received API exception: ${e}`);\n this.validationService.showError(e);\n }\n );\n }\n}\n","import { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\nimport { take } from \"rxjs/operators\";\n\nimport { Utils } from \"@bitwarden/common/platform/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, HostListener, Input } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.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, 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 { inject } from \"@angular/core\";\nimport { CanActivateFn, Router } from \"@angular/router\";\n\nimport { FeatureFlag } from \"@bitwarden/common/enums/feature-flag.enum\";\nimport { ConfigServiceAbstraction } from \"@bitwarden/common/platform/abstractions/config/config.service.abstraction\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\n// Replace this with a type safe lookup of the feature flag values in PM-2282\ntype FlagValue = boolean | number | string;\n\n/**\n * Returns a CanActivateFn that checks if the feature flag is enabled. If not, it shows an \"Access Denied!\"\n * toast and optionally redirects to the specified url.\n * @param featureFlag - The feature flag to check\n * @param requiredFlagValue - Optional value to the feature flag must be equal to, defaults to true\n * @param redirectUrlOnDisabled - Optional url to redirect to if the feature flag is disabled\n */\nexport const canAccessFeature = (\n featureFlag: FeatureFlag,\n requiredFlagValue: FlagValue = true,\n redirectUrlOnDisabled?: string\n): CanActivateFn => {\n return async () => {\n const configService = inject(ConfigServiceAbstraction);\n const platformUtilsService = inject(PlatformUtilsService);\n const router = inject(Router);\n const i18nService = inject(I18nService);\n const logService = inject(LogService);\n\n try {\n const flagValue = await configService.getFeatureFlag(featureFlag);\n\n if (flagValue === requiredFlagValue) {\n return true;\n }\n\n platformUtilsService.showToast(\"error\", null, i18nService.t(\"accessDenied\"));\n\n if (redirectUrlOnDisabled != null) {\n return router.createUrlTree([redirectUrlOnDisabled]);\n }\n return false;\n } catch (e) {\n logService.error(e);\n return false;\n }\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 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 { 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 { CopyTextDirective } from \"./directives/copy-text.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { IfFeatureDirective } from \"./directives/if-feature.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 { 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 { 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 { EllipsisPipe } from \"./platform/pipes/ellipsis.pipe\";\nimport { FingerprintPipe } from \"./platform/pipes/fingerprint.pipe\";\nimport { I18nPipe } from \"./platform/pipes/i18n.pipe\";\nimport { PasswordStrengthComponent } from \"./shared/components/password-strength/password-strength.component\";\nimport { ExportScopeCalloutComponent } from \"./tools/export/components/export-scope-callout.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 CopyTextDirective,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n UserTypePipe,\n IfFeatureDirective,\n FingerprintPipe,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BitwardenToastModule,\n BoxRowDirective,\n CalloutComponent,\n CopyTextDirective,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n UserTypePipe,\n IfFeatureDirective,\n FingerprintPipe,\n ],\n providers: [\n CreditCardNumberPipe,\n DatePipe,\n I18nPipe,\n SearchPipe,\n UserNamePipe,\n UserTypePipe,\n FingerprintPipe,\n ],\n})\nexport class JslibModule {}\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 if (user.name == null && user.email == 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 { OrganizationUserType } from \"@bitwarden/common/admin-console/enums\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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 { 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 { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ellipsis\",\n})\n/**\n * @deprecated Use the tailwind class 'tw-truncate' instead\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 { Pipe } from \"@angular/core\";\n\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { Utils } from \"@bitwarden/common/platform/misc/utils\";\n\n@Pipe({\n name: \"fingerprint\",\n})\nexport class FingerprintPipe {\n constructor(private cryptoService: CryptoService) {}\n\n async transform(publicKey: string | Uint8Array, fingerprintMaterial: string): Promise {\n try {\n if (typeof publicKey === \"string\") {\n publicKey = Utils.fromB64ToArray(publicKey);\n }\n\n const fingerprint = await this.cryptoService.getFingerprint(fingerprintMaterial, publicKey);\n\n if (fingerprint != null) {\n return fingerprint.join(\"-\");\n }\n\n return \"\";\n } catch {\n return \"\";\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/platform/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 { InjectionToken } from \"@angular/core\";\n\nimport {\n AbstractMemoryStorageService,\n AbstractStorageService,\n} from \"@bitwarden/common/platform/abstractions/storage.service\";\nimport { StateFactory } from \"@bitwarden/common/platform/factories/state-factory\";\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<\n (expired: boolean, userId?: string) => Promise\n>(\"LOGOUT_CALLBACK\");\nexport const LOCKED_CALLBACK = new InjectionToken<(userId?: string) => Promise>(\n \"LOCKED_CALLBACK\"\n);\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, InjectOptions, Injector, ProviderToken } from \"@angular/core\";\n\nexport class ModalInjector implements Injector {\n constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap) {}\n\n get(\n token: ProviderToken,\n notFoundValue: undefined,\n options: InjectOptions & { optional?: false }\n ): T;\n get(token: ProviderToken, notFoundValue: null, options: InjectOptions): T;\n get(token: ProviderToken, notFoundValue?: T, options?: InjectOptions | InjectFlags): T;\n get(token: ProviderToken, notFoundValue?: T, flags?: InjectFlags): T;\n get(token: any, notFoundValue?: any): any;\n get(token: any, notFoundValue?: any, flags?: any): 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/**\n * @deprecated Use the Component Library's `DialogService` instead.\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` 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 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\";\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/platform/abstractions/i18n.service\";\nimport { PasswordStrengthServiceAbstraction } from \"@bitwarden/common/tools/password-strength\";\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 passwordStrengthService: PasswordStrengthServiceAbstraction\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.passwordStrengthService.getPasswordStrength(\n masterPassword,\n this.email,\n this.name?.trim().toLowerCase().split(\" \")\n );\n this.passwordStrengthResult.emit(strengthResult);\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { ErrorResponse } from \"@bitwarden/common/models/response/error.response\";\nimport { CryptoService } from \"@bitwarden/common/platform/abstractions/crypto.service\";\nimport { FileDownloadService } from \"@bitwarden/common/platform/abstractions/file-download/file-download.service\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\nimport { EncArrayBuffer } from \"@bitwarden/common/platform/models/domain/enc-array-buffer\";\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\";\nimport { DialogService } from \"@bitwarden/components\";\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 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 protected dialogService: DialogService\n ) {}\n\n async ngOnInit() {\n await this.init();\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 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 await this.cipherService.getKeyForCipherKeyDecryption(this.cipherDomain)\n );\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.dialogService.openSimpleDialog({\n title: { key: \"deleteAttachment\" },\n content: { key: \"deleteAttachmentConfirmation\" },\n type: \"warning\",\n });\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 await this.cipherService.getKeyForCipherKeyDecryption(this.cipherDomain)\n );\n\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.dialogService.openSimpleDialog({\n title: { key: \"premiumRequired\" },\n content: { key: \"premiumRequiredDesc\" },\n acceptButtonText: { key: \"learnMore\" },\n type: \"success\",\n });\n\n if (confirmed) {\n this.platformUtilsService.launchUri(\"https://vault.bitwarden.com/#/?premium=purchase\");\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 await this.cipherService.getKeyForCipherKeyDecryption(this.cipherDomain)\n );\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","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 /** Only try setting the fallback once. This prevents an infinite loop if the fallback itself is missing. */\n private tryFallback = true;\n\n constructor(private el: ElementRef) {}\n\n @HostListener(\"error\") onError() {\n if (this.tryFallback) {\n this.el.nativeElement.src = this.appFallbackSrc;\n this.tryFallback = false;\n }\n }\n}\n","
    \n \n \n \n \n
    \n","import { ChangeDetectionStrategy, Component, Input, OnInit } from \"@angular/core\";\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n filter,\n map,\n Observable,\n} from \"rxjs\";\n\nimport { SettingsService } from \"@bitwarden/common/abstractions/settings.service\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.service\";\nimport { Utils } from \"@bitwarden/common/platform/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};\n\n@Component({\n selector: \"app-vault-icon\",\n templateUrl: \"icon.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent implements OnInit {\n @Input()\n set cipher(value: CipherView) {\n this.cipher$.next(value);\n }\n\n protected data$: Observable<{\n imageEnabled: boolean;\n image?: string;\n fallbackImage: string;\n icon?: string;\n }>;\n\n private cipher$ = new BehaviorSubject(undefined);\n\n constructor(\n private environmentService: EnvironmentService,\n private settingsService: SettingsService\n ) {}\n\n async ngOnInit() {\n const iconsUrl = this.environmentService.getIconsUrl();\n\n this.data$ = combineLatest([\n this.settingsService.disableFavicon$.pipe(distinctUntilChanged()),\n this.cipher$.pipe(filter((c) => c !== undefined)),\n ]).pipe(\n map(([disableFavicon, cipher]) => {\n const imageEnabled = !disableFavicon;\n let image = undefined;\n let fallbackImage = \"\";\n let icon = undefined;\n\n switch (cipher.type) {\n case CipherType.Login:\n icon = \"bwi-globe\";\n\n if (cipher.login.uri) {\n let hostnameUri = cipher.login.uri;\n let isWebsite = false;\n\n if (hostnameUri.indexOf(\"androidapp://\") === 0) {\n icon = \"bwi-android\";\n image = null;\n } else if (hostnameUri.indexOf(\"iosapp://\") === 0) {\n icon = \"bwi-apple\";\n image = null;\n } else if (\n imageEnabled &&\n hostnameUri.indexOf(\"://\") === -1 &&\n hostnameUri.indexOf(\".\") > -1\n ) {\n hostnameUri = \"http://\" + hostnameUri;\n isWebsite = true;\n } else if (imageEnabled) {\n isWebsite = hostnameUri.indexOf(\"http\") === 0 && hostnameUri.indexOf(\".\") > -1;\n }\n\n if (imageEnabled && isWebsite) {\n try {\n image = iconsUrl + \"/\" + Utils.getHostname(hostnameUri) + \"/icon.png\";\n 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 image = null;\n }\n break;\n case CipherType.SecureNote:\n icon = \"bwi-sticky-note\";\n break;\n case CipherType.Card:\n icon = \"bwi-credit-card\";\n if (imageEnabled && cipher.card.brand in cardIcons) {\n icon = \"credit-card-icon \" + cardIcons[cipher.card.brand];\n }\n break;\n case CipherType.Identity:\n icon = \"bwi-id-card\";\n break;\n default:\n break;\n }\n\n return {\n imageEnabled,\n image,\n fallbackImage,\n icon,\n };\n })\n );\n }\n}\n","import { DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport { ButtonModule, DialogModule, DialogService } from \"@bitwarden/components\";\n\nexport type FingerprintDialogData = {\n fingerprint: string[];\n};\n\n@Component({\n templateUrl: \"fingerprint-dialog.component.html\",\n standalone: true,\n imports: [JslibModule, ButtonModule, DialogModule],\n})\nexport class FingerprintDialogComponent {\n constructor(@Inject(DIALOG_DATA) protected data: FingerprintDialogData) {}\n\n static open(dialogService: DialogService, data: FingerprintDialogData) {\n return dialogService.open(FingerprintDialogComponent, { data });\n }\n}\n","\n \n {{ \"yourAccountsFingerprint\" | i18n }}:\n \n {{ data.fingerprint.join(\"-\") }}\n \n \n \n {{ \"learnMore\" | i18n }}\n \n \n \n \n\n","\n {{ message | i18n }}\n\n
      \n
    • 0\">\n {{ \"policyInEffectMinComplexity\" | i18n : getPasswordScoreAlertDisplay() }}\n
    • \n
    • 0\">\n {{ \"policyInEffectMinLength\" | i18n : policy?.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","import { CommonModule } from \"@angular/common\";\nimport { Component, Input } from \"@angular/core\";\n\nimport { JslibModule } from \"@bitwarden/angular/jslib.module\";\nimport { MasterPasswordPolicyOptions } from \"@bitwarden/common/admin-console/models/domain/master-password-policy-options\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { CalloutModule } from \"@bitwarden/components\";\n\n@Component({\n selector: \"auth-password-callout\",\n templateUrl: \"password-callout.component.html\",\n standalone: true,\n imports: [CommonModule, JslibModule, CalloutModule],\n})\nexport class PasswordCalloutComponent {\n @Input() message = \"masterPasswordPolicyInEffect\";\n @Input() policy: MasterPasswordPolicyOptions;\n\n constructor(private i18nService: I18nService) {}\n\n getPasswordScoreAlertDisplay() {\n let str: string;\n switch (this.policy.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.policy.minComplexity + \")\";\n }\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 \"../admin-console/enums\";\nimport { OrganizationSponsorshipCreateRequest } from \"../admin-console/models/request/organization/organization-sponsorship-create.request\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../admin-console/models/request/organization/organization-sponsorship-redeem.request\";\nimport { OrganizationConnectionRequest } from \"../admin-console/models/request/organization-connection.request\";\nimport { ProviderAddOrganizationRequest } from \"../admin-console/models/request/provider/provider-add-organization.request\";\nimport { ProviderOrganizationCreateRequest } from \"../admin-console/models/request/provider/provider-organization-create.request\";\nimport { ProviderSetupRequest } from \"../admin-console/models/request/provider/provider-setup.request\";\nimport { ProviderUpdateRequest } from \"../admin-console/models/request/provider/provider-update.request\";\nimport { ProviderUserAcceptRequest } from \"../admin-console/models/request/provider/provider-user-accept.request\";\nimport { ProviderUserBulkConfirmRequest } from \"../admin-console/models/request/provider/provider-user-bulk-confirm.request\";\nimport { ProviderUserBulkRequest } from \"../admin-console/models/request/provider/provider-user-bulk.request\";\nimport { ProviderUserConfirmRequest } from \"../admin-console/models/request/provider/provider-user-confirm.request\";\nimport { ProviderUserInviteRequest } from \"../admin-console/models/request/provider/provider-user-invite.request\";\nimport { ProviderUserUpdateRequest } from \"../admin-console/models/request/provider/provider-user-update.request\";\nimport { SelectionReadOnlyRequest } from \"../admin-console/models/request/selection-read-only.request\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"../admin-console/models/response/organization-connection.response\";\nimport { OrganizationExportResponse } from \"../admin-console/models/response/organization-export.response\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../admin-console/models/response/organization-sponsorship-sync-status.response\";\nimport { PolicyResponse } from \"../admin-console/models/response/policy.response\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../admin-console/models/response/provider/provider-organization.response\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../admin-console/models/response/provider/provider-user-bulk-public-key.response\";\nimport { ProviderUserBulkResponse } from \"../admin-console/models/response/provider/provider-user-bulk.response\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../admin-console/models/response/provider/provider-user.response\";\nimport { ProviderResponse } from \"../admin-console/models/response/provider/provider.response\";\nimport { SelectionReadOnlyResponse } from \"../admin-console/models/response/selection-read-only.response\";\nimport { DeviceVerificationRequest } from \"../auth/models/request/device-verification.request\";\nimport { EmailTokenRequest } from \"../auth/models/request/email-token.request\";\nimport { EmailRequest } from \"../auth/models/request/email.request\";\nimport { EmergencyAccessAcceptRequest } from \"../auth/models/request/emergency-access-accept.request\";\nimport { EmergencyAccessConfirmRequest } from \"../auth/models/request/emergency-access-confirm.request\";\nimport { EmergencyAccessInviteRequest } from \"../auth/models/request/emergency-access-invite.request\";\nimport { EmergencyAccessPasswordRequest } from \"../auth/models/request/emergency-access-password.request\";\nimport { EmergencyAccessUpdateRequest } from \"../auth/models/request/emergency-access-update.request\";\nimport { PasswordTokenRequest } from \"../auth/models/request/identity-token/password-token.request\";\nimport { SsoTokenRequest } from \"../auth/models/request/identity-token/sso-token.request\";\nimport { UserApiTokenRequest } from \"../auth/models/request/identity-token/user-api-token.request\";\nimport { KeyConnectorUserKeyRequest } from \"../auth/models/request/key-connector-user-key.request\";\nimport { PasswordHintRequest } from \"../auth/models/request/password-hint.request\";\nimport { PasswordRequest } from \"../auth/models/request/password.request\";\nimport { PasswordlessAuthRequest } from \"../auth/models/request/passwordless-auth.request\";\nimport { PasswordlessCreateAuthRequest } from \"../auth/models/request/passwordless-create-auth.request\";\nimport { SecretVerificationRequest } from \"../auth/models/request/secret-verification.request\";\nimport { SetKeyConnectorKeyRequest } from \"../auth/models/request/set-key-connector-key.request\";\nimport { SetPasswordRequest } from \"../auth/models/request/set-password.request\";\nimport { TwoFactorEmailRequest } from \"../auth/models/request/two-factor-email.request\";\nimport { TwoFactorProviderRequest } from \"../auth/models/request/two-factor-provider.request\";\nimport { TwoFactorRecoveryRequest } from \"../auth/models/request/two-factor-recovery.request\";\nimport { UpdateProfileRequest } from \"../auth/models/request/update-profile.request\";\nimport { UpdateTempPasswordRequest } from \"../auth/models/request/update-temp-password.request\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../auth/models/request/update-two-factor-authenticator.request\";\nimport { UpdateTwoFactorDuoRequest } from \"../auth/models/request/update-two-factor-duo.request\";\nimport { UpdateTwoFactorEmailRequest } from \"../auth/models/request/update-two-factor-email.request\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../auth/models/request/update-two-factor-web-authn-delete.request\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../auth/models/request/update-two-factor-web-authn.request\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../auth/models/request/update-two-factor-yubio-otp.request\";\nimport { ApiKeyResponse } from \"../auth/models/response/api-key.response\";\nimport { AuthRequestResponse } from \"../auth/models/response/auth-request.response\";\nimport { DeviceVerificationResponse } from \"../auth/models/response/device-verification.response\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../auth/models/response/emergency-access.response\";\nimport { IdentityCaptchaResponse } from \"../auth/models/response/identity-captcha.response\";\nimport { IdentityTokenResponse } from \"../auth/models/response/identity-token.response\";\nimport { IdentityTwoFactorResponse } from \"../auth/models/response/identity-two-factor.response\";\nimport { KeyConnectorUserKeyResponse } from \"../auth/models/response/key-connector-user-key.response\";\nimport { MasterPasswordPolicyResponse } from \"../auth/models/response/master-password-policy.response\";\nimport { PreloginResponse } from \"../auth/models/response/prelogin.response\";\nimport { RegisterResponse } from \"../auth/models/response/register.response\";\nimport { SsoPreValidateResponse } from \"../auth/models/response/sso-pre-validate.response\";\nimport { TwoFactorAuthenticatorResponse } from \"../auth/models/response/two-factor-authenticator.response\";\nimport { TwoFactorDuoResponse } from \"../auth/models/response/two-factor-duo.response\";\nimport { TwoFactorEmailResponse } from \"../auth/models/response/two-factor-email.response\";\nimport { TwoFactorProviderResponse } from \"../auth/models/response/two-factor-provider.response\";\nimport { TwoFactorRecoverResponse } from \"../auth/models/response/two-factor-recover.response\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../auth/models/response/two-factor-web-authn.response\";\nimport { TwoFactorYubiKeyResponse } from \"../auth/models/response/two-factor-yubi-key.response\";\nimport { BitPayInvoiceRequest } from \"../billing/models/request/bit-pay-invoice.request\";\nimport { PaymentRequest } from \"../billing/models/request/payment.request\";\nimport { TaxInfoUpdateRequest } from \"../billing/models/request/tax-info-update.request\";\nimport { BillingHistoryResponse } from \"../billing/models/response/billing-history.response\";\nimport { BillingPaymentResponse } from \"../billing/models/response/billing-payment.response\";\nimport { PaymentResponse } from \"../billing/models/response/payment.response\";\nimport { PlanResponse } from \"../billing/models/response/plan.response\";\nimport { SubscriptionResponse } from \"../billing/models/response/subscription.response\";\nimport { TaxInfoResponse } from \"../billing/models/response/tax-info.response\";\nimport { TaxRateResponse } from \"../billing/models/response/tax-rate.response\";\nimport { CollectionBulkDeleteRequest } from \"../models/request/collection-bulk-delete.request\";\nimport { DeleteRecoverRequest } from \"../models/request/delete-recover.request\";\nimport { EventRequest } from \"../models/request/event.request\";\nimport { IapCheckRequest } from \"../models/request/iap-check.request\";\nimport { KdfRequest } from \"../models/request/kdf.request\";\nimport { KeysRequest } from \"../models/request/keys.request\";\nimport { OrganizationImportRequest } from \"../models/request/organization-import.request\";\nimport { PreloginRequest } from \"../models/request/prelogin.request\";\nimport { RegisterRequest } from \"../models/request/register.request\";\nimport { StorageRequest } from \"../models/request/storage.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 { VerifyDeleteRecoverRequest } from \"../models/request/verify-delete-recover.request\";\nimport { VerifyEmailRequest } from \"../models/request/verify-email.request\";\nimport { BreachAccountResponse } from \"../models/response/breach-account.response\";\nimport { DomainsResponse } from \"../models/response/domains.response\";\nimport { EventResponse } from \"../models/response/event.response\";\nimport { ListResponse } from \"../models/response/list.response\";\nimport { ProfileResponse } from \"../models/response/profile.response\";\nimport { UserKeyResponse } from \"../models/response/user-key.response\";\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 { CollectionRequest } from \"../vault/models/request/collection.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 {\n CollectionAccessDetailsResponse,\n CollectionResponse,\n} from \"../vault/models/response/collection.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: (\n request: SecretVerificationRequest\n ) => 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 postAdminAuthRequest: (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 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 putRestoreManyCiphersAdmin: (\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\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 getMasterKeyFromKeyConnector: (keyConnectorUrl: string) => Promise;\n postUserKeyToKeyConnector: (\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ) => Promise;\n getKeyConnectorAlive: (keyConnectorUrl: string) => Promise;\n getOrganizationExport: (organizationId: string) => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breach-account.response\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { EventType } from \"../../enums\";\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","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { OrganizationDomainRequest } from \"../../services/organization-domain/requests/organization-domain.request\";\n\nimport { OrganizationDomainSsoDetailsResponse } from \"./responses/organization-domain-sso-details.response\";\nimport { OrganizationDomainResponse } from \"./responses/organization-domain.response\";\n\nexport abstract class OrgDomainApiServiceAbstraction {\n getAllByOrgId: (orgId: string) => Promise>;\n getByOrgIdAndOrgDomainId: (\n orgId: string,\n orgDomainId: string\n ) => Promise;\n post: (\n orgId: string,\n orgDomain: OrganizationDomainRequest\n ) => Promise;\n verify: (orgId: string, orgDomainId: string) => Promise;\n delete: (orgId: string, orgDomainId: string) => Promise;\n getClaimedOrgDomainByEmail: (email: string) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { OrganizationDomainResponse } from \"./responses/organization-domain.response\";\n\nexport abstract class OrgDomainServiceAbstraction {\n orgDomains$: Observable;\n\n get: (orgDomainId: string) => OrganizationDomainResponse;\n\n copyDnsTxt: (dnsTxt: string) => void;\n}\n\n// Note: this separate class is designed to hold methods that are not\n// meant to be used in components (e.g., data write methods)\nexport abstract class OrgDomainInternalServiceAbstraction extends OrgDomainServiceAbstraction {\n upsert: (orgDomains: OrganizationDomainResponse[]) => void;\n replace: (orgDomains: OrganizationDomainResponse[]) => void;\n clearCache: () => void;\n delete: (orgDomainIds: string[]) => void;\n}\n","import { ListResponse } from \"../../models/response/list.response\";\n\nimport {\n OrganizationUserAcceptInitRequest,\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 OrganizationUserResetPasswordDetailsResponse,\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 invitation to initialize and join an organization created via the Admin Portal **only**.\n * This is only used once for the initial Owner, because it also creates the organization's encryption keys.\n * This should not be used for organizations created via the Web client.\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 postOrganizationUserAcceptInit(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptInitRequest\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 * Enable Secrets Manager for many users\n * @param organizationId - Identifier for the organization the user belongs to\n * @param ids - List of organization user identifiers to enable\n * @return List of user ids, including both those that were successfully enabled and those that had an error\n */\n abstract putOrganizationUserBulkEnableSecretsManager(\n organizationId: string,\n ids: string[]\n ): Promise;\n\n /**\n * Delete an organization user\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract deleteOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Delete many organization users\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to delete\n * @return List of user ids, including both those that were successfully deleted and those that had an error\n */\n abstract deleteManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Revoke an organization user's access to the organization\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract revokeOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Revoke many organization users' access to the organization\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to revoke\n * @return List of user ids, including both those that were successfully revoked and those that had an error\n */\n abstract revokeManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n\n /**\n * Restore an organization user's access to the organization\n * @param organizationId - Identifier for the organization the user belongs to\n * @param id - Organization user identifier\n */\n abstract restoreOrganizationUser(organizationId: string, id: string): Promise;\n\n /**\n * Restore many organization users' access to the organization\n * @param organizationId - Identifier for the organization the users belongs to\n * @param ids - List of organization user identifiers to restore\n * @return List of user ids, including both those that were successfully restored and those that had an error\n */\n abstract restoreManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise>;\n}\n","import { SecretVerificationRequest } from \"../../../auth/models/request/secret-verification.request\";\n\nexport class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {\n resetPasswordKey: string;\n}\n","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { SendView } from \"../tools/send/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: (ciphersToIndex: CipherView[], indexedEntityGuid?: string) => void;\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 { Observable } from \"rxjs\";\n\nimport { AccountSettingsSettings } from \"../platform/models/domain/account\";\n\nexport abstract class SettingsService {\n settings$: Observable;\n disableFavicon$: Observable;\n\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n getEquivalentDomains: (url: string) => Set;\n setDisableFavicon: (value: boolean) => Promise;\n getDisableFavicon: () => boolean;\n clear: (userId?: string) => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n}\n","import { Observable } from \"rxjs\";\n\nimport { VaultTimeoutAction } from \"../../enums/vault-timeout-action.enum\";\nimport { PinLockType } from \"../../services/vault-timeout/vault-timeout-settings.service\";\n\nexport abstract class VaultTimeoutSettingsService {\n /**\n * Set the vault timeout options for the user\n * @param vaultTimeout The vault timeout in minutes\n * @param vaultTimeoutAction The vault timeout action\n * @param userId The user id to set. If not provided, the current user is used\n */\n setVaultTimeoutOptions: (\n vaultTimeout: number,\n vaultTimeoutAction: VaultTimeoutAction\n ) => Promise;\n\n /**\n * Get the available vault timeout actions for the current user\n *\n * **NOTE:** This observable is not yet connected to the state service, so it will not update when the state changes\n * @param userId The user id to check. If not provided, the current user is used\n */\n availableVaultTimeoutActions$: (userId?: string) => Observable;\n\n /**\n * Get the current vault timeout action for the user. This is not the same as the current state, it is\n * calculated based on the current state, the user's policy, and the user's available unlock methods.\n */\n getVaultTimeout: (userId?: string) => Promise;\n\n /**\n * Observe the vault timeout action for the user. This is calculated based on users preferred lock action saved in the state,\n * the user's policy, and the user's available unlock methods.\n *\n * **NOTE:** This observable is not yet connected to the state service, so it will not update when the state changes\n * @param userId The user id to check. If not provided, the current user is used\n */\n vaultTimeoutAction$: (userId?: string) => Observable;\n\n /**\n * Has the user enabled unlock with Pin.\n * @param userId The user id to check. If not provided, the current user is used\n * @returns PinLockType\n */\n isPinLockSet: (userId?: string) => Promise;\n\n /**\n * Has the user enabled unlock with Biometric.\n * @param userId The user id to check. If not provided, the current user is used\n * @returns boolean true if biometric lock is set\n */\n isBiometricLockSet: (userId?: string) => Promise;\n\n clear: (userId?: string) => Promise;\n}\n","export abstract class VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n}\n","import { OrganizationApiKeyRequest } from \"../../../admin-console/models/request/organization-api-key.request\";\nimport { OrganizationSsoRequest } from \"../../../auth/models/request/organization-sso.request\";\nimport { SecretVerificationRequest } from \"../../../auth/models/request/secret-verification.request\";\nimport { ApiKeyResponse } from \"../../../auth/models/response/api-key.response\";\nimport { OrganizationSsoResponse } from \"../../../auth/models/response/organization-sso.response\";\nimport { OrganizationSmSubscriptionUpdateRequest } from \"../../../billing/models/request/organization-sm-subscription-update.request\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../../../billing/models/request/organization-subscription-update.request\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../../../billing/models/request/organization-tax-info-update.request\";\nimport { PaymentRequest } from \"../../../billing/models/request/payment.request\";\nimport { SecretsManagerSubscribeRequest } from \"../../../billing/models/request/sm-subscribe.request\";\nimport { BillingResponse } from \"../../../billing/models/response/billing.response\";\nimport { OrganizationSubscriptionResponse } from \"../../../billing/models/response/organization-subscription.response\";\nimport { PaymentResponse } from \"../../../billing/models/response/payment.response\";\nimport { TaxInfoResponse } from \"../../../billing/models/response/tax-info.response\";\nimport { ImportDirectoryRequest } from \"../../../models/request/import-directory.request\";\nimport { SeatRequest } from \"../../../models/request/seat.request\";\nimport { StorageRequest } from \"../../../models/request/storage.request\";\nimport { VerifyBankRequest } from \"../../../models/request/verify-bank.request\";\nimport { ListResponse } from \"../../../models/response/list.response\";\nimport { OrganizationApiKeyType } from \"../../enums\";\nimport { OrganizationCreateRequest } from \"../../models/request/organization-create.request\";\nimport { OrganizationKeysRequest } from \"../../models/request/organization-keys.request\";\nimport { OrganizationUpdateRequest } from \"../../models/request/organization-update.request\";\nimport { OrganizationUpgradeRequest } from \"../../models/request/organization-upgrade.request\";\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 { OrganizationResponse } from \"../../models/response/organization.response\";\nimport { ProfileOrganizationResponse } from \"../../models/response/profile-organization.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 updatePasswordManagerSeats: (\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ) => Promise;\n updateSecretsManagerSubscription: (\n id: string,\n request: OrganizationSmSubscriptionUpdateRequest\n ) => 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 subscribeToSecretsManager: (\n id: string,\n request: SecretsManagerSubscribeRequest\n ) => Promise;\n}\n","import { map, Observable } from \"rxjs\";\n\nimport { I18nService } from \"../../../platform/abstractions/i18n.service\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { OrganizationData } from \"../../models/data/organization.data\";\nimport { Organization } from \"../../models/domain/organization\";\n\nexport function canAccessVaultTab(org: Organization): boolean {\n return org.canViewAssignedCollections || org.canViewAllCollections;\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 org.canManageDeviceApprovals\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.isOwner;\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 canAccessImportExport(i18nService: I18nService) {\n return map((orgs) =>\n orgs.filter((org) => org.canAccessImportExport).sort(Utils.getSortFunction(i18nService, \"name\"))\n );\n}\n\n/**\n * Returns `true` if a user is a member of an organization (rather than only being a ProviderUser)\n * @deprecated Use organizationService.memberOrganizations$ instead\n */\nexport function isMember(org: Organization): boolean {\n return org.isMember;\n}\n\nexport abstract class OrganizationService {\n organizations$: Observable;\n\n /**\n * Organizations that the user is a member of (excludes organizations that they only have access to via a provider)\n */\n memberOrganizations$: Observable;\n\n get$: (id: string) => Observable;\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 InternalOrganizationServiceAbstraction extends OrganizationService {\n replace: (organizations: { [id: string]: OrganizationData }) => Promise;\n upsert: (OrganizationData: OrganizationData | OrganizationData[]) => Promise;\n}\n","import { ListResponse } from \"../../../models/response/list.response\";\nimport { PolicyType } from \"../../enums\";\nimport { MasterPasswordPolicyOptions } from \"../../models/domain/master-password-policy-options\";\nimport { PolicyRequest } from \"../../models/request/policy.request\";\nimport { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport class PolicyApiServiceAbstraction {\n getPolicy: (organizationId: string, type: PolicyType) => Promise;\n getPolicies: (organizationId: string) => Promise>;\n\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 { ListResponse } from \"../../../models/response/list.response\";\nimport { PolicyType } from \"../../enums\";\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 { PolicyResponse } from \"../../models/response/policy.response\";\n\nexport abstract class PolicyService {\n policies$: Observable;\n get$: (policyType: PolicyType, policyFilter?: (policy: Policy) => boolean) => 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 { Provider } from \"../../models/domain/provider\";\nimport { ProviderData } from \"../models/data/provider.data\";\n\nexport abstract class ProviderService {\n get: (id: string) => Promise;\n getAll: () => Promise;\n save: (providers: { [id: string]: ProviderData }) => Promise;\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 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 ActivateAutofill = 11, // Activates autofill with page load on the browser extension\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 ScimProviderType {\n Default = 0,\n AzureAd = 1,\n Okta = 2,\n OneLogin = 3,\n JumpCloud = 4,\n GoogleWorkspace = 5,\n Rippling = 6,\n}\n","import { BaseResponse } from \"../../../models/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 { ProductType, ProviderType } from \"../../../enums\";\nimport { OrganizationUserStatusType, OrganizationUserType } from \"../../enums\";\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 usePasswordManager: boolean;\n useActivateAutofillPolicy: 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 providerType?: ProviderType;\n isProviderUser: boolean;\n isMember: 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(\n response: ProfileOrganizationResponse,\n options: {\n isMember: boolean;\n isProviderUser: boolean;\n }\n ) {\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.usePasswordManager = response.usePasswordManager;\n this.useActivateAutofillPolicy = response.useActivateAutofillPolicy;\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.providerType = response.providerType;\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 this.isMember = options.isMember;\n this.isProviderUser = options.isProviderUser;\n }\n}\n","import { PolicyType } from \"../../enums\";\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 { MasterPasswordPolicyResponse } from \"../../../auth/models/response/master-password-policy.response\";\nimport Domain from \"../../../platform/models/domain/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 /**\n * Flag to indicate if the policy should be enforced on login.\n * If true, and the user's password does not meet the policy requirements,\n * the user will be forced to update their password.\n */\n enforceOnLogin = false;\n\n static fromResponse(policy: MasterPasswordPolicyResponse): MasterPasswordPolicyOptions {\n if (policy == null) {\n return null;\n }\n const options = new MasterPasswordPolicyOptions();\n options.minComplexity = policy.minComplexity;\n options.minLength = policy.minLength;\n options.requireUpper = policy.requireUpper;\n options.requireLower = policy.requireLower;\n options.requireNumbers = policy.requireNumbers;\n options.requireSpecial = policy.requireSpecial;\n options.enforceOnLogin = policy.enforceOnLogin;\n return options;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { ProductType, ProviderType } from \"../../../enums\";\nimport { OrganizationUserStatusType, OrganizationUserType } from \"../../enums\";\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\n /**\n * The member's role in the organization.\n * Avoid using this for permission checks - use the getters instead (e.g. isOwner, isAdmin, canManageX), because they\n * properly handle permission inheritance and relationships.\n */\n type: OrganizationUserType;\n\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 usePasswordManager: boolean;\n useActivateAutofillPolicy: 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 providerType?: ProviderType;\n /**\n * Indicates that a user is a ProviderUser for the organization\n */\n isProviderUser: boolean;\n /**\n * Indicates that a user is a member for the organization (may be `false` if they have access via a Provider only)\n */\n isMember: 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.usePasswordManager = obj.usePasswordManager;\n this.useActivateAutofillPolicy = obj.useActivateAutofillPolicy;\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.providerType = obj.providerType;\n this.isProviderUser = obj.isProviderUser;\n this.isMember = obj.isMember;\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.isOwner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n /**\n * Whether a user has Manager permissions or greater\n */\n get isManager() {\n return this.type === OrganizationUserType.Manager || this.isAdmin;\n }\n\n /**\n * Whether a user has Admin permissions or greater\n */\n get isAdmin() {\n return this.type === OrganizationUserType.Admin || this.isOwner;\n }\n\n /**\n * Whether a user has Owner permissions (including ProviderUsers)\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.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 canManageDomainVerification() {\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 canManageDeviceApprovals() {\n return (this.isAdmin || this.permissions.manageResetPassword) && this.useSso;\n }\n\n get isExemptFromPolicies() {\n return this.canManagePolicies;\n }\n\n get canViewSubscription() {\n if (this.canEditSubscription) {\n return true;\n }\n\n return this.hasProvider && this.providerType === ProviderType.Msp\n ? this.isProviderUser\n : this.isOwner;\n }\n\n get canEditSubscription() {\n return this.hasProvider ? this.isProviderUser : this.isOwner;\n }\n\n get canEditPaymentMethods() {\n return this.canEditSubscription;\n }\n\n get canViewBillingHistory() {\n return this.canEditSubscription;\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 get isFreeOrg() {\n // return true if organization needs to be upgraded from a free org\n return !this.useTotp;\n }\n\n static fromJSON(json: Jsonify) {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Organization(), json, {\n familySponsorshipLastSyncDate: new Date(json.familySponsorshipLastSyncDate),\n familySponsorshipValidUntil: new Date(json.familySponsorshipValidUntil),\n });\n }\n}\n","import Domain from \"../../../platform/models/domain/domain-base\";\nimport { PolicyType } from \"../../enums\";\nimport { PolicyData } from \"../data/policy.data\";\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 { SecretVerificationRequest } from \"../../../auth/models/request/secret-verification.request\";\nimport { OrganizationApiKeyType } from \"../../enums\";\n\nexport class OrganizationApiKeyRequest extends SecretVerificationRequest {\n type: OrganizationApiKeyType = OrganizationApiKeyType.Default;\n}\n","import { BillingSyncConfigRequest } from \"../../../billing/models/request/billing-sync-config.request\";\nimport { OrganizationConnectionType } from \"../../enums\";\n\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 \"../../../models/request/keys.request\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n this.hidePasswords = hidePasswords;\n }\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\nimport { PolicyType } from \"../../enums\";\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 \"../../../models/response/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 { Verification } from \"../../types/verification\";\n\nexport abstract class AccountApiService {\n abstract deleteAccount(verification: Verification): Promise;\n}\n","import { UserKey, MasterKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\n\nexport abstract class AuthRequestCryptoServiceAbstraction {\n setUserKeyAfterDecryptingSharedUserKey: (\n authReqResponse: AuthRequestResponse,\n authReqPrivateKey: ArrayBuffer\n ) => Promise;\n setKeysAfterDecryptingSharedMasterKeyAndHash: (\n authReqResponse: AuthRequestResponse,\n authReqPrivateKey: ArrayBuffer\n ) => Promise;\n\n decryptPubKeyEncryptedUserKey: (\n pubKeyEncryptedUserKey: string,\n privateKey: ArrayBuffer\n ) => Promise;\n\n decryptPubKeyEncryptedMasterKeyAndHash: (\n pubKeyEncryptedMasterKey: string,\n pubKeyEncryptedMasterKeyHash: string,\n privateKey: ArrayBuffer\n ) => Promise<{ masterKey: MasterKey; masterKeyHash: string }>;\n}\n","import { Observable } from \"rxjs\";\n\nimport { AuthRequestPushNotification } from \"../../models/response/notification.response\";\nimport { MasterKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { AuthenticationStatus } from \"../enums/authentication-status\";\nimport { AuthResult } from \"../models/domain/auth-result\";\nimport {\n UserApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n PasswordlessLogInCredentials,\n} from \"../models/domain/log-in-credentials\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\nimport { AuthRequestResponse } from \"../models/response/auth-request.response\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n accessCode: string;\n authRequestId: string;\n ssoEmail2FaSessionToken: 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 authResponsePushNotification: (notification: AuthRequestPushNotification) => Promise;\n passwordlessLogin: (\n id: string,\n key: string,\n requestApproved: boolean\n ) => Promise;\n getPushNotificationObs$: () => Observable;\n}\n","import { EncString } from \"../../platform/models/domain/enc-string\";\nimport { DeviceKey, UserKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { DeviceResponse } from \"../abstractions/devices/responses/device.response\";\n\nexport abstract class DeviceTrustCryptoServiceAbstraction {\n /**\n * @description Retrieves the users choice to trust the device which can only happen after decryption\n * Note: this value should only be used once and then reset\n */\n getShouldTrustDevice: () => Promise;\n setShouldTrustDevice: (value: boolean) => Promise;\n\n trustDeviceIfRequired: () => Promise;\n\n trustDevice: () => Promise;\n getDeviceKey: () => Promise;\n decryptUserKeyWithDeviceKey: (\n encryptedDevicePrivateKey: EncString,\n encryptedUserKey: EncString,\n deviceKey?: DeviceKey\n ) => Promise;\n rotateDevicesTrust: (newUserKey: UserKey, masterPasswordHash: string) => Promise;\n\n supportsDeviceTrust: () => Promise;\n}\n","import { ListResponse } from \"../../models/response/list.response\";\nimport { DeviceResponse } from \"../abstractions/devices/responses/device.response\";\nimport { SecretVerificationRequest } from \"../models/request/secret-verification.request\";\nimport { UpdateDevicesTrustRequest } from \"../models/request/update-devices-trust.request\";\nimport { ProtectedDeviceResponse } from \"../models/response/protected-device.response\";\n\nexport abstract class DevicesApiServiceAbstraction {\n getKnownDevice: (email: string, deviceIdentifier: string) => Promise;\n\n getDeviceByIdentifier: (deviceIdentifier: string) => Promise;\n\n getDevices: () => Promise>;\n\n updateTrustedDeviceKeys: (\n deviceIdentifier: string,\n devicePublicKeyEncryptedUserKey: string,\n userKeyEncryptedDevicePublicKey: string,\n deviceKeyEncryptedDevicePrivateKey: string\n ) => Promise;\n\n updateTrust: (updateDevicesTrustRequestModel: UpdateDevicesTrustRequest) => Promise;\n\n getDeviceKeys: (\n deviceIdentifier: string,\n secretVerificationRequest: SecretVerificationRequest\n ) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { DeviceView } from \"./views/device.view\";\n\nexport abstract class DevicesServiceAbstraction {\n getDevices$: () => Observable>;\n getDeviceByIdentifier$: (deviceIdentifier: string) => Observable;\n isDeviceKnownForUser$: (email: string, deviceIdentifier: string) => Observable;\n updateTrustedDeviceKeys$: (\n deviceIdentifier: string,\n devicePublicKeyEncryptedUserKey: string,\n userKeyEncryptedDevicePublicKey: string,\n deviceKeyEncryptedDevicePrivateKey: string\n ) => Observable;\n}\n","import { Organization } from \"../../admin-console/models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class KeyConnectorService {\n setMasterKeyFromUrl: (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","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","import { UserKey } from \"../../platform/models/domain/symmetric-crypto-key\";\n\nexport abstract class PasswordResetEnrollmentServiceAbstraction {\n /*\n * Checks the user's enrollment status and enrolls them if required\n */\n abstract enrollIfRequired(organizationSsoIdentifier: string): Promise;\n\n /**\n * Enroll current user in password reset\n * @param organizationId - Organization in which to enroll the user\n * @returns Promise that resolves when the user is enrolled\n * @throws Error if the action fails\n */\n abstract enroll(organizationId: string): Promise;\n\n /**\n * Enroll user in password reset\n * @param organizationId - Organization in which to enroll the user\n * @param userId - User to enroll\n * @param userKey - User's symmetric key\n * @returns Promise that resolves when the user is enrolled\n * @throws Error if the action fails\n */\n abstract enroll(organizationId: string, userId: string, userKey: UserKey): 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) => Promise;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","import { TwoFactorProviderType } from \"../enums/two-factor-provider-type\";\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 { Verification } from \"../../../types/verification\";\nimport { SecretVerificationRequest } from \"../../models/request/secret-verification.request\";\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 * Check if user has master password or only uses passwordless technologies to log in\n * @param userId The user id to check. If not provided, the current user is used\n * @returns True if the user has a master password\n */\n hasMasterPassword: (userId?: string) => Promise;\n /**\n * Check if the user has a master password and has used it during their current session\n * @param userId The user id to check. If not provided, the current user id used\n * @returns True if the user has a master password and has used it in the current session\n */\n hasMasterPasswordAndMasterKeyHash: (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 EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","export enum SsoType {\n None = 0,\n OpenIdConnect = 1,\n Saml2 = 2,\n}\n\nexport enum MemberDecryptionType {\n MasterPassword = 0,\n KeyConnector = 1,\n TrustedDeviceEncryption = 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 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 VerificationType {\n MasterPassword = 0,\n OTP = 1,\n}\n","import { BaseResponse } from \"../../../models/response/base.response\";\nimport {\n MemberDecryptionType,\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/sso\";\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 api.memberDecryptionType = view.memberDecryptionType;\n\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 memberDecryptionType: MemberDecryptionType;\n\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 this.memberDecryptionType = this.getResponseProperty(\"MemberDecryptionType\");\n\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 { Utils } from \"../../../platform/misc/utils\";\n\n// TODO: Tech Debt: potentially create a type Storage shape vs using a class here in the future\n// type StorageShape {\n// id: string;\n// privateKey: string;\n// }\n// so we can get rid of the any type passed into fromJSON and coming out of ToJSON\nexport class AdminAuthRequestStorable {\n id: string;\n privateKey: Uint8Array;\n\n constructor(init?: Partial) {\n if (init) {\n Object.assign(this, init);\n }\n }\n\n toJSON() {\n return {\n id: this.id,\n privateKey: Utils.fromBufferToByteString(this.privateKey),\n };\n }\n\n static fromJSON(obj: any): AdminAuthRequestStorable {\n if (obj == null) {\n return null;\n }\n\n let privateKeyBuffer = null;\n if (obj.privateKey) {\n privateKeyBuffer = Utils.fromByteStringToArray(obj.privateKey);\n }\n\n return new AdminAuthRequestStorable({\n id: obj.id,\n privateKey: privateKeyBuffer,\n });\n }\n}\n","/*\n * This enum is used to determine if a user should be forced to reset their password\n * on login (server flag) or unlock via MP (client evaluation).\n */\nexport enum ForceResetPasswordReason {\n /**\n * A password reset should not be forced.\n */\n None,\n\n /**\n * Occurs when an organization admin forces a user to reset their password.\n * Communicated via server flag.\n */\n AdminForcePasswordReset,\n\n /**\n * Occurs when a user logs in / unlocks their vault with a master password that does not meet an organization's\n * master password policy that is enforced on login/unlock.\n * Only set client side b/c server can't evaluate MP.\n */\n WeakMasterPassword,\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 { MasterKey, UserKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { AuthenticationType } from \"../../enums/authentication-type\";\nimport { TokenTwoFactorRequest } from \"../request/identity-token/token-two-factor.request\";\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 decryptedUserKey: UserKey,\n public decryptedMasterKey: MasterKey,\n public decryptedMasterKeyHash: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\n}\n","import { EmergencyAccessType } from \"../../enums/emergency-access-type\";\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","import { TwoFactorProviderType } from \"../../../enums/two-factor-provider-type\";\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 SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\n authRequestAccessCode: 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 ssoEmail2FaSessionToken?: string;\n}\n","import { KdfType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\nimport { CipherResponse } from \"../../../vault/models/response/cipher.response\";\nimport { EmergencyAccessStatusType } from \"../../enums/emergency-access-status-type\";\nimport { EmergencyAccessType } from \"../../enums/emergency-access-type\";\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 { BaseResponse } from \"../../../models/response/base.response\";\nimport { Utils } from \"../../../platform/misc/utils\";\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 { I18nService } from \"../../platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../../platform/abstractions/platform-utils.service\";\nimport {\n TwoFactorProviderDetails,\n TwoFactorService as TwoFactorServiceAbstraction,\n} from \"../abstractions/two-factor.service\";\nimport { TwoFactorProviderType } from \"../enums/two-factor-provider-type\";\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: false,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","export 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 PlanSponsorshipType {\n FamiliesForEnterprise = 0,\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 TeamsMonthly2020 = 8,\n TeamsAnnually2020 = 9,\n EnterpriseMonthly2020 = 10,\n EnterpriseAnnually2020 = 11,\n TeamsMonthly = 12,\n TeamsAnnually = 13,\n EnterpriseMonthly = 14,\n EnterpriseAnnually = 15,\n TeamsStarter = 16,\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\n}\n","export enum BitwardenProductType {\n PasswordManager = 0,\n SecretsManager = 1,\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 TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\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","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 SDK = 21,\n Server = 22,\n}\n\nexport const MobileDeviceTypes: Set = new Set([\n DeviceType.Android,\n DeviceType.iOS,\n DeviceType.AndroidAmazon,\n]);\n\nexport const DesktopDeviceTypes: Set = new Set([\n DeviceType.WindowsDesktop,\n DeviceType.MacOsDesktop,\n DeviceType.LinuxDesktop,\n DeviceType.UWP,\n]);\n","export enum EncryptedExportType {\n AccountEncrypted = 0,\n FileEncrypted = 1,\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\n/** The expected number of parts to a serialized EncString of the given encryption type.\n * For example, an EncString of type AesCbc256_B64 will have 2 parts, and an EncString of type\n * AesCbc128_HmacSha256_B64 will have 3 parts.\n *\n * Example of annotated serialized EncStrings:\n * 0.iv|data\n * 1.iv|data|mac\n * 2.iv|data|mac\n * 3.data\n * 4.data\n *\n * @see EncString\n * @see EncryptionType\n * @see EncString.parseEncryptedString\n */\nexport const EXPECTED_NUM_PARTS_BY_ENCRYPTION_TYPE = {\n [EncryptionType.AesCbc256_B64]: 2,\n [EncryptionType.AesCbc128_HmacSha256_B64]: 3,\n [EncryptionType.AesCbc256_HmacSha256_B64]: 3,\n [EncryptionType.Rsa2048_OaepSha256_B64]: 1,\n [EncryptionType.Rsa2048_OaepSha1_B64]: 1,\n [EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64]: 2,\n [EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64]: 2,\n};\n","// Note: the enum key is used to describe the EventSystemUser in the UI. Be careful about changing it.\nexport enum EventSystemUser {\n SCIM = 1,\n DomainVerification = 2,\n}\n","// Increment by 100 for each new set of events\nexport 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 User_RequestedDeviceApproval = 1010,\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 OrganizationUser_ApprovedAuthRequest = 1513,\n OrganizationUser_RejectedAuthRequest = 1514,\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 OrganizationDomain_Added = 2000,\n OrganizationDomain_Removed = 2001,\n OrganizationDomain_Verified = 2002,\n OrganizationDomain_NotVerified = 2003,\n\n Secret_Retrieved = 2100,\n}\n","export enum FeatureFlag {\n DisplayEuEnvironmentFlag = \"display-eu-environment\",\n DisplayLowKdfIterationWarningFlag = \"display-kdf-iteration-warning\",\n Fido2VaultCredentials = \"fido2-vault-credentials\",\n TrustedDeviceEncryption = \"trusted-device-encryption\",\n PasswordlessLogin = \"passwordless-login\",\n AutofillV2 = \"autofill-v2\",\n BrowserFilelessImport = \"browser-fileless-import\",\n}\n\n// Replace this with a type safe lookup of the feature flag values in PM-2282\nexport type FeatureFlagValue = number | string | boolean;\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n Linked = 3,\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\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","/**\n * Hypertext Transfer Protocol (HTTP) response status codes.\n *\n * @see {@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}\n * src: https://gist.github.com/RWOverdijk/6cef816cfdf5722228e01cc05fd4b094\n */\nexport enum HttpStatusCode {\n /**\n * The server has received the request headers and the client should proceed to send the request body\n * (in the case of a request for which a body needs to be sent; for example, a POST request).\n * Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient.\n * To have a server check the request's headers, a client must send Expect: 100-continue as a header in its initial request\n * and receive a 100 Continue status code in response before sending the body. The response 417 Expectation Failed indicates the request should not be continued.\n */\n Continue = 100,\n\n /**\n * The requester has asked the server to switch protocols and the server has agreed to do so.\n */\n SwitchingProtocols = 101,\n\n /**\n * A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request.\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n * This prevents the client from timing out and assuming the request was lost.\n */\n Processing = 102,\n\n // **********************************************************************************************************\n // 200s - SUCCESS\n // **********************************************************************************************************\n\n /**\n * Standard response for successful HTTP requests.\n * The actual response will depend on the request method used.\n * In a GET request, the response will contain an entity corresponding to the requested resource.\n * In a POST request, the response will contain an entity describing or containing the result of the action.\n */\n Ok = 200,\n\n /**\n * The request has been fulfilled, resulting in the creation of a new resource.\n */\n Created = 201,\n\n /**\n * The request has been accepted for processing, but the processing has not been completed.\n * The request might or might not be eventually acted upon, and may be disallowed when processing occurs.\n */\n Accepted = 202,\n\n /**\n * SINCE HTTP/1.1\n * The server is a transforming proxy that received a 200 OK from its origin,\n * but is returning a modified version of the origin's response.\n */\n NonAuthoritativeInformation = 203,\n\n /**\n * The server successfully processed the request and is not returning any content.\n */\n NoContent = 204,\n\n /**\n * The server successfully processed the request, but is not returning any content.\n * Unlike a 204 response, this response requires that the requester reset the document view.\n */\n ResetContent = 205,\n\n /**\n * The server is delivering only part of the resource (byte serving) due to a range header sent by the client.\n * The range header is used by HTTP clients to enable resuming of interrupted downloads,\n * or split a download into multiple simultaneous streams.\n */\n PartialContent = 206,\n\n /**\n * The message body that follows is an XML message and can contain a number of separate response codes,\n * depending on how many sub-requests were made.\n */\n MultiStatus = 207,\n\n /**\n * The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response,\n * and are not being included again.\n */\n AlreadyReported = 208,\n\n /**\n * The server has fulfilled a request for the resource,\n * and the response is a representation of the result of one or more instance-manipulations applied to the current instance.\n */\n ImUsed = 226,\n\n // **********************************************************************************************************\n // 300s - Redirections\n // **********************************************************************************************************\n\n /**\n * Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation).\n * For example, this code could be used to present multiple video format options,\n * to list files with different filename extensions, or to suggest word-sense disambiguation.\n */\n MultipleChoices = 300,\n\n /**\n * This and all future requests should be directed to the given URI.\n */\n MovedPermanently = 301,\n\n /**\n * This is an example of industry practice contradicting the standard.\n * The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect\n * (the original describing phrase was \"Moved Temporarily\"), but popular browsers implemented 302\n * with the functionality of a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307\n * to distinguish between the two behaviours. However, some Web applications and frameworks\n * use the 302 status code as if it were the 303.\n */\n Found = 302,\n\n /**\n * SINCE HTTP/1.1\n * The response to the request can be found under another URI using a GET method.\n * When received in response to a POST (or PUT/DELETE), the client should presume that\n * the server has received the data and should issue a redirect with a separate GET message.\n */\n SeeOther = 303,\n\n /**\n * Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match.\n * In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.\n */\n NotModified = 304,\n\n /**\n * SINCE HTTP/1.1\n * The requested resource is available only through a proxy, the address for which is provided in the response.\n * Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons.\n */\n UseProxy = 305,\n\n /**\n * No longer used. Originally meant \"Subsequent requests should use the specified proxy.\"\n */\n SwitchProxy = 306,\n\n /**\n * SINCE HTTP/1.1\n * In this case, the request should be repeated with another URI; however, future requests should still use the original URI.\n * In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request.\n * For example, a POST request should be repeated using another POST request.\n */\n TemporaryRedirect = 307,\n\n /**\n * The request and all future requests should be repeated using another URI.\n * 307 and 308 parallel the behaviors of 302 and 301, but do not allow the HTTP method to change.\n * So, for example, submitting a form to a permanently redirected resource may continue smoothly.\n */\n PermanentRedirect = 308,\n\n // **********************************************************************************************************\n // 400s - Client / User messed up\n // **********************************************************************************************************\n\n /**\n * The server cannot or will not process the request due to an apparent client error\n * (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).\n */\n BadRequest = 400,\n\n /**\n * Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet\n * been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the\n * requested resource. See Basic access authentication and Digest access authentication. 401 semantically means\n * \"unauthenticated\",i.e. the user does not have the necessary credentials.\n */\n Unauthorized = 401,\n\n /**\n * Reserved for future use. The original intention was that this code might be used as part of some form of digital\n * cash or micro payment scheme, but that has not happened, and this code is not usually used.\n * Google Developers API uses this status if a particular developer has exceeded the daily limit on requests.\n */\n PaymentRequired = 402,\n\n /**\n * The request was valid, but the server is refusing action.\n * The user might not have the necessary permissions for a resource.\n */\n Forbidden = 403,\n\n /**\n * The requested resource could not be found but may be available in the future.\n * Subsequent requests by the client are permissible.\n */\n NotFound = 404,\n\n /**\n * A request method is not supported for the requested resource;\n * for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.\n */\n MethodNotAllowed = 405,\n\n /**\n * The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.\n */\n NotAcceptable = 406,\n\n /**\n * The client must first authenticate itself with the proxy.\n */\n ProxyAuthenticationRequired = 407,\n\n /**\n * The server timed out waiting for the request.\n * According to HTTP specifications:\n * \"The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.\"\n */\n RequestTimeout = 408,\n\n /**\n * Indicates that the request could not be processed because of conflict in the request,\n * such as an edit conflict between multiple simultaneous updates.\n */\n Conflict = 409,\n\n /**\n * Indicates that the resource requested is no longer available and will not be available again.\n * This should be used when a resource has been intentionally removed and the resource should be purged.\n * Upon receiving a 410 status code, the client should not request the resource in the future.\n * Clients such as search engines should remove the resource from their indices.\n * Most use cases do not require clients and search engines to purge the resource, and a \"404 Not Found\" may be used instead.\n */\n Gone = 410,\n\n /**\n * The request did not specify the length of its content, which is required by the requested resource.\n */\n LengthRequired = 411,\n\n /**\n * The server does not meet one of the preconditions that the requester put on the request.\n */\n PreconditionFailed = 412,\n\n /**\n * The request is larger than the server is willing or able to process. Previously called \"Request Entity Too Large\".\n */\n PayloadTooLarge = 413,\n\n /**\n * The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request,\n * in which case it should be converted to a POST request.\n * Called \"Request-URI Too Long\" previously.\n */\n UriTooLong = 414,\n\n /**\n * The request entity has a media type which the server or resource does not support.\n * For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.\n */\n UnsupportedMediaType = 415,\n\n /**\n * The client has asked for a portion of the file (byte serving), but the server cannot supply that portion.\n * For example, if the client asked for a part of the file that lies beyond the end of the file.\n * Called \"Requested Range Not Satisfiable\" previously.\n */\n RangeNotSatisfiable = 416,\n\n /**\n * The server cannot meet the requirements of the Expect request-header field.\n */\n ExpectationFailed = 417,\n\n /**\n * This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol,\n * and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by\n * teapots requested to brew coffee. This HTTP status is used as an Easter egg in some websites, including Google.com.\n */\n IAmATeapot = 418,\n\n /**\n * The request was directed at a server that is not able to produce a response (for example because a connection reuse).\n */\n MisdirectedRequest = 421,\n\n /**\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\n UnprocessableEntity = 422,\n\n /**\n * The resource that is being accessed is locked.\n */\n Locked = 423,\n\n /**\n * The request failed due to failure of a previous request (e.g., a PROPPATCH).\n */\n FailedDependency = 424,\n\n /**\n * The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.\n */\n UpgradeRequired = 426,\n\n /**\n * The origin server requires the request to be conditional.\n * Intended to prevent \"the 'lost update' problem, where a client\n * GETs a resource's state, modifies it, and PUTs it back to the server,\n * when meanwhile a third party has modified the state on the server, leading to a conflict.\"\n */\n PreconditionRequired = 428,\n\n /**\n * The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.\n */\n TooManyRequests = 429,\n\n /**\n * The server is unwilling to process the request because either an individual header field,\n * or all the header fields collectively, are too large.\n */\n RequestHeaderFieldsTooLarge = 431,\n\n /**\n * A server operator has received a legal demand to deny access to a resource or to a set of resources\n * that includes the requested resource. The code 451 was chosen as a reference to the novel Fahrenheit 451.\n */\n UnavailableForLegalReasons = 451,\n\n // **********************************************************************************************************\n // 500s - Server messed up\n // **********************************************************************************************************\n\n /**\n * A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.\n */\n InternalServerError = 500,\n\n /**\n * The server either does not recognize the request method, or it lacks the ability to fulfill the request.\n * Usually this implies future availability (e.g., a new feature of a web-service API).\n */\n NotImplemented = 501,\n\n /**\n * The server was acting as a gateway or proxy and received an invalid response from the upstream server.\n */\n BadGateway = 502,\n\n /**\n * The server is currently unavailable (because it is overloaded or down for maintenance).\n * Generally, this is a temporary state.\n */\n ServiceUnavailable = 503,\n\n /**\n * The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.\n */\n GatewayTimeout = 504,\n\n /**\n * The server does not support the HTTP protocol version used in the request\n */\n HttpVersionNotSupported = 505,\n\n /**\n * Transparent content negotiation for the request results in a circular reference.\n */\n VariantAlsoNegotiates = 506,\n\n /**\n * The server is unable to store the representation needed to complete the request.\n */\n InsufficientStorage = 507,\n\n /**\n * The server detected an infinite loop while processing the request.\n */\n LoopDetected = 508,\n\n /**\n * Further extensions to the request are required for the server to fulfill it.\n */\n NotExtended = 510,\n\n /**\n * The client needs to authenticate to gain network access.\n * Intended for use by intercepting proxies used to control access to the network (e.g., \"captive portals\" used\n * to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).\n */\n NetworkAuthenticationRequired = 511,\n}\n","import { KdfConfig } from \"../auth/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 Pin = \"pin\",\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 NativeMessagingVersion {\n One = 1, // Original implementation\n Latest = One,\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","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n TeamsStarter = 4,\n}\n","export enum ProviderType {\n Msp = 0,\n Reseller = 1,\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","export enum StorageLocation {\n Both = \"both\",\n Disk = \"disk\",\n Memory = \"memory\",\n}\n","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\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 VaultTimeoutAction {\n Lock = \"lock\",\n LogOut = \"logOut\",\n}\n","import { LinkedIdType } from \"../enums\";\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","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, LinkedIdType } from \"../../enums\";\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\";\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 { JsonObject } from \"type-fest\";\n\nimport { Fido2CredentialApi } from \"../../vault/api/fido2-credential.api\";\nimport { 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 fido2Credentials?: Fido2CredentialApi[];\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 const fido2Credentials = this.getResponseProperty(\"Fido2Credentials\");\n if (fido2Credentials != null) {\n this.fido2Credentials = fido2Credentials.map(\n (key: JsonObject) => new Fido2CredentialApi(key)\n );\n }\n }\n}\n","import { SecureNoteType } from \"../../enums\";\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","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","import { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Card as CardDomain } from \"../../vault/models/domain/card\";\nimport { CardView } from \"../../vault/models/view/card.view\";\n\nexport class CardExport {\n static template(): CardExport {\n const req = new CardExport();\n req.cardholderName = \"John Doe\";\n req.brand = \"visa\";\n req.number = \"4242424242424242\";\n req.expMonth = \"04\";\n req.expYear = \"2023\";\n req.code = \"123\";\n return req;\n }\n\n static toView(req: CardExport, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n static toDomain(req: CardExport, domain = new CardDomain()) {\n domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n domain.brand = req.brand != null ? new EncString(req.brand) : null;\n domain.number = req.number != null ? new EncString(req.number) : null;\n domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n domain.code = req.code != null ? new EncString(req.code) : null;\n return domain;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView | CardDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof CardView) {\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n } else {\n this.cardholderName = o.cardholderName?.encryptedString;\n this.brand = o.brand?.encryptedString;\n this.number = o.number?.encryptedString;\n this.expMonth = o.expMonth?.encryptedString;\n this.expYear = o.expYear?.encryptedString;\n this.code = o.code?.encryptedString;\n }\n }\n}\n","import { FieldType, LinkedIdType } from \"../../enums\";\nimport { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Field as FieldDomain } from \"../../vault/models/domain/field\";\nimport { FieldView } from \"../../vault/models/view/field.view\";\n\nexport class FieldExport {\n static template(): FieldExport {\n const req = new FieldExport();\n req.name = \"Field name\";\n req.value = \"Some value\";\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: FieldExport, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n view.linkedId = req.linkedId;\n return view;\n }\n\n static toDomain(req: FieldExport, domain = new FieldDomain()) {\n domain.type = req.type;\n domain.value = req.value != null ? new EncString(req.value) : null;\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.linkedId = req.linkedId;\n return domain;\n }\n\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(o?: FieldView | FieldDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof FieldView) {\n this.name = o.name;\n this.value = o.value;\n } else {\n this.name = o.name?.encryptedString;\n this.value = o.value?.encryptedString;\n }\n this.type = o.type;\n this.linkedId = o.linkedId;\n }\n}\n","import { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Identity as IdentityDomain } from \"../../vault/models/domain/identity\";\nimport { IdentityView } from \"../../vault/models/view/identity.view\";\n\nexport class IdentityExport {\n static template(): IdentityExport {\n const req = new IdentityExport();\n req.title = \"Mr\";\n req.firstName = \"John\";\n req.middleName = \"William\";\n req.lastName = \"Doe\";\n req.address1 = \"123 Any St\";\n req.address2 = \"Apt #123\";\n req.address3 = null;\n req.city = \"New York\";\n req.state = \"NY\";\n req.postalCode = \"10001\";\n req.country = \"US\";\n req.company = \"Acme Inc.\";\n req.email = \"john@company.com\";\n req.phone = \"5555551234\";\n req.ssn = \"000-123-4567\";\n req.username = \"jdoe\";\n req.passportNumber = \"US-123456789\";\n req.licenseNumber = \"D123-12-123-12333\";\n return req;\n }\n\n static toView(req: IdentityExport, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n static toDomain(req: IdentityExport, domain = new IdentityDomain()) {\n domain.title = req.title != null ? new EncString(req.title) : null;\n domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n domain.city = req.city != null ? new EncString(req.city) : null;\n domain.state = req.state != null ? new EncString(req.state) : null;\n domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n domain.country = req.country != null ? new EncString(req.country) : null;\n domain.company = req.company != null ? new EncString(req.company) : null;\n domain.email = req.email != null ? new EncString(req.email) : null;\n domain.phone = req.phone != null ? new EncString(req.phone) : null;\n domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n return domain;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView | IdentityDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof IdentityView) {\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n } else {\n this.title = o.title?.encryptedString;\n this.firstName = o.firstName?.encryptedString;\n this.middleName = o.middleName?.encryptedString;\n this.lastName = o.lastName?.encryptedString;\n this.address1 = o.address1?.encryptedString;\n this.address2 = o.address2?.encryptedString;\n this.address3 = o.address3?.encryptedString;\n this.city = o.city?.encryptedString;\n this.state = o.state?.encryptedString;\n this.postalCode = o.postalCode?.encryptedString;\n this.country = o.country?.encryptedString;\n this.company = o.company?.encryptedString;\n this.email = o.email?.encryptedString;\n this.phone = o.phone?.encryptedString;\n this.ssn = o.ssn?.encryptedString;\n this.username = o.username?.encryptedString;\n this.passportNumber = o.passportNumber?.encryptedString;\n this.licenseNumber = o.licenseNumber?.encryptedString;\n }\n }\n}\n","import { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Fido2Credential } from \"../../vault/models/domain/fido2-credential\";\nimport { Fido2CredentialView } from \"../../vault/models/view/fido2-credential.view\";\n\n/**\n * Represents format of Fido2 Credentials in JSON exports.\n */\nexport class Fido2CredentialExport {\n /**\n * Generates a template for Fido2CredentialExport\n * @returns Instance of Fido2CredentialExport with predefined values.\n */\n static template(): Fido2CredentialExport {\n const req = new Fido2CredentialExport();\n req.credentialId = \"keyId\";\n req.keyType = \"keyType\";\n req.keyAlgorithm = \"keyAlgorithm\";\n req.keyCurve = \"keyCurve\";\n req.keyValue = \"keyValue\";\n req.rpId = \"rpId\";\n req.userHandle = \"userHandle\";\n req.counter = \"counter\";\n req.rpName = \"rpName\";\n req.userDisplayName = \"userDisplayName\";\n req.discoverable = \"false\";\n req.creationDate = null;\n return req;\n }\n\n /**\n * Converts a Fido2CredentialExport object to its view representation.\n * @param req - The Fido2CredentialExport object to be converted.\n * @param view - (Optional) The Fido2CredentialView object to popualte with Fido2CredentialExport data\n * @returns Fido2CredentialView - The populated view, or a new instance if none was provided.\n */\n static toView(req: Fido2CredentialExport, view = new Fido2CredentialView()) {\n view.credentialId = req.credentialId;\n view.keyType = req.keyType as \"public-key\";\n view.keyAlgorithm = req.keyAlgorithm as \"ECDSA\";\n view.keyCurve = req.keyCurve as \"P-256\";\n view.keyValue = req.keyValue;\n view.rpId = req.rpId;\n view.userHandle = req.userHandle;\n view.counter = parseInt(req.counter);\n view.rpName = req.rpName;\n view.userDisplayName = req.userDisplayName;\n view.discoverable = req.discoverable === \"true\";\n view.creationDate = new Date(req.creationDate);\n return view;\n }\n\n /**\n * Converts a Fido2CredentialExport object to its domain representation.\n * @param req - The Fido2CredentialExport object to be converted.\n * @param domain - (Optional) The Fido2Credential object to popualte with Fido2CredentialExport data\n * @returns Fido2Credential - The populated domain, or a new instance if none was provided.\n */\n static toDomain(req: Fido2CredentialExport, domain = new Fido2Credential()) {\n domain.credentialId = req.credentialId != null ? new EncString(req.credentialId) : null;\n domain.keyType = req.keyType != null ? new EncString(req.keyType) : null;\n domain.keyAlgorithm = req.keyAlgorithm != null ? new EncString(req.keyAlgorithm) : null;\n domain.keyCurve = req.keyCurve != null ? new EncString(req.keyCurve) : null;\n domain.keyValue = req.keyValue != null ? new EncString(req.keyValue) : null;\n domain.rpId = req.rpId != null ? new EncString(req.rpId) : null;\n domain.userHandle = req.userHandle != null ? new EncString(req.userHandle) : null;\n domain.counter = req.counter != null ? new EncString(req.counter) : null;\n domain.rpName = req.rpName != null ? new EncString(req.rpName) : null;\n domain.userDisplayName =\n req.userDisplayName != null ? new EncString(req.userDisplayName) : null;\n domain.discoverable = req.discoverable != null ? new EncString(req.discoverable) : null;\n domain.creationDate = req.creationDate;\n return domain;\n }\n\n credentialId: string;\n keyType: string;\n keyAlgorithm: string;\n keyCurve: string;\n keyValue: string;\n rpId: string;\n userHandle: string;\n counter: string;\n rpName: string;\n userDisplayName: string;\n discoverable: string;\n creationDate: Date;\n\n /**\n * Constructs a new Fid2CredentialExport instance.\n *\n * @param o - The credential storing the data being exported. When not provided, an empty export is created instead.\n */\n constructor(o?: Fido2CredentialView | Fido2Credential) {\n if (o == null) {\n return;\n }\n\n if (o instanceof Fido2CredentialView) {\n this.credentialId = o.credentialId;\n this.keyType = o.keyType;\n this.keyAlgorithm = o.keyAlgorithm;\n this.keyCurve = o.keyCurve;\n this.keyValue = o.keyValue;\n this.rpId = o.rpId;\n this.userHandle = o.userHandle;\n this.counter = String(o.counter);\n this.rpName = o.rpName;\n this.userDisplayName = o.userDisplayName;\n this.discoverable = String(o.discoverable);\n } else {\n this.credentialId = o.credentialId?.encryptedString;\n this.keyType = o.keyType?.encryptedString;\n this.keyAlgorithm = o.keyAlgorithm?.encryptedString;\n this.keyCurve = o.keyCurve?.encryptedString;\n this.keyValue = o.keyValue?.encryptedString;\n this.rpId = o.rpId?.encryptedString;\n this.userHandle = o.userHandle?.encryptedString;\n this.counter = o.counter?.encryptedString;\n this.rpName = o.rpName?.encryptedString;\n this.userDisplayName = o.userDisplayName?.encryptedString;\n this.discoverable = o.discoverable?.encryptedString;\n }\n this.creationDate = o.creationDate;\n }\n}\n","import { UriMatchType } from \"../../enums\";\nimport { EncString } from \"../../platform/models/domain/enc-string\";\nimport { LoginUri as LoginUriDomain } from \"../../vault/models/domain/login-uri\";\nimport { LoginUriView } from \"../../vault/models/view/login-uri.view\";\n\nexport class LoginUriExport {\n static template(): LoginUriExport {\n const req = new LoginUriExport();\n req.uri = \"https://google.com\";\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUriExport, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUriExport, domain = new LoginUriDomain()) {\n domain.uri = req.uri != null ? new EncString(req.uri) : null;\n domain.match = req.match;\n return domain;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView | LoginUriDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof LoginUriView) {\n this.uri = o.uri;\n } else {\n this.uri = o.uri?.encryptedString;\n }\n this.match = o.match;\n }\n}\n","import { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Login as LoginDomain } from \"../../vault/models/domain/login\";\nimport { LoginView } from \"../../vault/models/view/login.view\";\n\nimport { Fido2CredentialExport } from \"./fido2-credential.export\";\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 req.fido2Credentials = [Fido2CredentialExport.template()];\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 if (req.fido2Credentials != null) {\n view.fido2Credentials = req.fido2Credentials.map((key) => Fido2CredentialExport.toView(key));\n }\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 // Fido2credentials are currently not supported for exports.\n\n return domain;\n }\n\n uris: LoginUriExport[];\n username: string;\n password: string;\n totp: string;\n fido2Credentials: Fido2CredentialExport[] = [];\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.fido2Credentials != null) {\n this.fido2Credentials = o.fido2Credentials.map((key) => new Fido2CredentialExport(key));\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 { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Password } from \"../../vault/models/domain/password\";\nimport { PasswordHistoryView } from \"../../vault/models/view/password-history.view\";\n\nexport class PasswordHistoryExport {\n static template(): PasswordHistoryExport {\n const req = new PasswordHistoryExport();\n req.password = null;\n req.lastUsedDate = null;\n return req;\n }\n\n static toView(req: PasswordHistoryExport, view = new PasswordHistoryView()) {\n view.password = req.password;\n view.lastUsedDate = req.lastUsedDate;\n return view;\n }\n\n static toDomain(req: PasswordHistoryExport, domain = new Password()) {\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.lastUsedDate = req.lastUsedDate;\n return domain;\n }\n\n password: string;\n lastUsedDate: Date = null;\n\n constructor(o?: PasswordHistoryView | Password) {\n if (o == null) {\n return;\n }\n\n if (o instanceof PasswordHistoryView) {\n this.password = o.password;\n } else {\n this.password = o.password?.encryptedString;\n }\n this.lastUsedDate = o.lastUsedDate;\n }\n}\n","import { SecureNoteType } from \"../../enums\";\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 { EncString } from \"../../platform/models/domain/enc-string\";\nimport { 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\";\n\nimport { CardExport } from \"./card.export\";\nimport { FieldExport } from \"./field.export\";\nimport { IdentityExport } from \"./identity.export\";\nimport { LoginExport } from \"./login.export\";\nimport { PasswordHistoryExport } from \"./password-history.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 req.passwordHistory = [];\n req.creationDate = null;\n req.revisionDate = null;\n req.deletedDate = null;\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 if (req.passwordHistory != null) {\n view.passwordHistory = req.passwordHistory.map((ph) => PasswordHistoryExport.toView(ph));\n }\n\n view.creationDate = req.creationDate;\n view.revisionDate = req.revisionDate;\n view.deletedDate = req.deletedDate;\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 domain.key = req.key != null ? new EncString(req.key) : null;\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 if (req.passwordHistory != null) {\n domain.passwordHistory = req.passwordHistory.map((ph) => PasswordHistoryExport.toDomain(ph));\n }\n\n domain.creationDate = req.creationDate;\n domain.revisionDate = req.revisionDate;\n domain.deletedDate = req.deletedDate;\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 passwordHistory: PasswordHistoryExport[] = null;\n revisionDate: Date = null;\n creationDate: Date = null;\n deletedDate: Date = null;\n key: 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.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 this.key = o.key?.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 if (o.passwordHistory != null) {\n if (o instanceof CipherView) {\n this.passwordHistory = o.passwordHistory.map((ph) => new PasswordHistoryExport(ph));\n } else {\n this.passwordHistory = o.passwordHistory.map((ph) => new PasswordHistoryExport(ph));\n }\n }\n\n this.creationDate = o.creationDate;\n this.revisionDate = o.revisionDate;\n this.deletedDate = o.deletedDate;\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 { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Collection as CollectionDomain } from \"../../vault/models/domain/collection\";\nimport { CollectionView } from \"../../vault/models/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 \"../../vault/models/domain/collection\";\nimport { CollectionView } from \"../../vault/models/view/collection.view\";\n\nimport { CollectionExport } from \"./collection.export\";\n\nexport class CollectionWithIdExport extends CollectionExport {\n id: string;\n\n static toView(req: CollectionWithIdExport, view = new CollectionView()) {\n view.id = req.id;\n return super.toView(req, view);\n }\n\n static toDomain(req: CollectionWithIdExport, domain = new CollectionDomain()) {\n domain.id = req.id;\n return super.toDomain(req, domain);\n }\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { EncString } from \"../../platform/models/domain/enc-string\";\nimport { Folder as FolderDomain } from \"../../vault/models/domain/folder\";\nimport { FolderView } from \"../../vault/models/view/folder.view\";\n\nexport class FolderExport {\n static template(): FolderExport {\n const req = new FolderExport();\n req.name = \"Folder name\";\n return req;\n }\n\n static toView(req: FolderExport, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: FolderExport, domain = new FolderDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n if (o instanceof FolderView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n }\n}\n","import { Folder as FolderDomain } from \"../../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 static toView(req: FolderWithIdExport, view = new FolderView()) {\n view.id = req.id;\n return super.toView(req, view);\n }\n\n static toDomain(req: FolderWithIdExport, domain = new FolderDomain()) {\n domain.id = req.id;\n return super.toDomain(req, domain);\n }\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","export class 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 { SendWithIdRequest } from \"../../tools/send/models/request/send-with-id.request\";\nimport { CipherWithIdRequest } from \"../../vault/models/request/cipher-with-id.request\";\nimport { FolderWithIdRequest } from \"../../vault/models/request/folder-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","export abstract class BaseResponse {\n private response: any;\n\n constructor(response: any) {\n this.response = response;\n }\n\n protected getResponseProperty(\n propertyName: string,\n response: any = null,\n exactName = false\n ): any {\n if (propertyName == null || propertyName === \"\") {\n throw new Error(\"propertyName must not be null/empty.\");\n }\n if (response == null && this.response != null) {\n response = this.response;\n }\n if (response == null) {\n return null;\n }\n if (!exactName && response[propertyName] === undefined) {\n let otherCasePropertyName: string = null;\n if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n } else {\n otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n }\n if (propertyName.length > 1) {\n otherCasePropertyName += propertyName.slice(1);\n }\n\n propertyName = otherCasePropertyName;\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toLowerCase();\n }\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toUpperCase();\n }\n }\n return response[propertyName];\n }\n}\n","import { Utils } from \"../../platform/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 { DeviceType, EventSystemUser, EventType } from \"../../enums\";\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 domainName: string;\n secretId: string;\n serviceAccountId: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.cipherId = this.getResponseProperty(\"CipherId\");\n this.collectionId = this.getResponseProperty(\"CollectionId\");\n this.groupId = this.getResponseProperty(\"GroupId\");\n this.policyId = this.getResponseProperty(\"PolicyId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.providerUserId = this.getResponseProperty(\"ProviderUserId\");\n this.providerOrganizationId = this.getResponseProperty(\"ProviderOrganizationId\");\n this.actingUserId = this.getResponseProperty(\"ActingUserId\");\n this.date = this.getResponseProperty(\"Date\");\n this.deviceType = this.getResponseProperty(\"DeviceType\");\n this.ipAddress = this.getResponseProperty(\"IpAddress\");\n this.installationId = this.getResponseProperty(\"InstallationId\");\n this.systemUser = this.getResponseProperty(\"SystemUser\");\n this.domainName = this.getResponseProperty(\"DomainName\");\n this.secretId = this.getResponseProperty(\"SecretId\");\n this.serviceAccountId = this.getResponseProperty(\"ServiceAccountId\");\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 { EventSystemUser, EventType } from \"../../enums\";\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 serviceAccountId: string;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n this.installationId = data.installationId;\n this.systemUser = data.systemUser;\n this.serviceAccountId = data.serviceAccountId;\n }\n}\n","export class View {}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","export interface MessageBase {\n command: string;\n}\n\n/**\n * @deprecated Use the observable from the appropriate service instead.\n */\nexport abstract class BroadcasterService {\n /**\n * @deprecated Use the observable from the appropriate service instead.\n */\n send: (message: MessageBase, id?: string) => void;\n /**\n * @deprecated Use the observable from the appropriate service instead.\n */\n subscribe: (id: string, messageCallback: (message: MessageBase) => void) => void;\n /**\n * @deprecated Use the observable from the appropriate service instead.\n */\n unsubscribe: (id: string) => void;\n}\n","import { Observable } from \"rxjs\";\nimport { SemVer } from \"semver\";\n\nimport { FeatureFlag } from \"../../../enums/feature-flag.enum\";\nimport { Region } from \"../environment.service\";\n\nimport { ServerConfig } from \"./server-config\";\n\nexport abstract class ConfigServiceAbstraction {\n serverConfig$: Observable;\n cloudRegion$: Observable;\n getFeatureFlag$: (\n key: FeatureFlag,\n defaultValue?: T\n ) => Observable;\n getFeatureFlag: (\n key: FeatureFlag,\n defaultValue?: T\n ) => Promise;\n checkServerMeetsVersionRequirement$: (\n minimumRequiredServerVersion: SemVer\n ) => Observable;\n\n /**\n * Force ConfigService to fetch an updated config from the server and emit it from serverConfig$\n * @deprecated The service implementation should subscribe to an observable and use that to trigger a new fetch from\n * server instead\n */\n triggerServerConfigFetch: () => void;\n}\n","import { CsprngArray } from \"../../types/csprng\";\nimport { DecryptParameters } from \"../models/domain/decrypt-parameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (\n password: string | Uint8Array,\n salt: string | Uint8Array,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n argon2: (\n password: string | Uint8Array,\n salt: string | Uint8Array,\n iterations: number,\n memory: number,\n parallelism: number\n ) => Promise;\n hkdf: (\n ikm: Uint8Array,\n salt: string | Uint8Array,\n info: string | Uint8Array,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: Uint8Array,\n info: string | Uint8Array,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | Uint8Array,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: Uint8Array,\n key: Uint8Array,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: Uint8Array, b: Uint8Array) => Promise;\n hmacFast: (\n value: Uint8Array | string,\n key: Uint8Array | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: Uint8Array | string, b: Uint8Array | string) => Promise;\n aesEncrypt: (data: Uint8Array, iv: Uint8Array, key: Uint8Array) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (\n parameters: DecryptParameters,\n mode: \"cbc\" | \"ecb\"\n ) => Promise;\n aesDecrypt: (\n data: Uint8Array,\n iv: Uint8Array,\n key: Uint8Array,\n mode: \"cbc\" | \"ecb\"\n ) => Promise;\n rsaEncrypt: (\n data: Uint8Array,\n publicKey: Uint8Array,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: Uint8Array,\n privateKey: Uint8Array,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: Uint8Array) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[Uint8Array, Uint8Array]>;\n /**\n * Generates a key of the given length suitable for use in AES encryption\n */\n aesGenerateKey: (bitLength: 128 | 192 | 256 | 512) => Promise;\n /**\n * Generates a random array of bytes of the given length. Uses a cryptographically secure random number generator.\n *\n * Do not use this for generating encryption keys. Use aesGenerateKey or rsaGenerateKeyPair instead.\n */\n randomBytes: (length: number) => Promise;\n}\n","import { ProfileOrganizationResponse } from \"../../admin-console/models/response/profile-organization.response\";\nimport { ProfileProviderOrganizationResponse } from \"../../admin-console/models/response/profile-provider-organization.response\";\nimport { ProfileProviderResponse } from \"../../admin-console/models/response/profile-provider.response\";\nimport { KdfConfig } from \"../../auth/models/domain/kdf-config\";\nimport { KeySuffixOptions, KdfType, HashPurpose } from \"../../enums\";\nimport { EncArrayBuffer } from \"../models/domain/enc-array-buffer\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport {\n CipherKey,\n MasterKey,\n OrgKey,\n PinKey,\n ProviderKey,\n SymmetricCryptoKey,\n UserKey,\n} from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class CryptoService {\n /**\n * Sets the provided user key and stores\n * any other necessary versions (such as auto, biometrics,\n * or pin)\n * @param key The user key to set\n * @param userId The desired user\n */\n setUserKey: (key: UserKey, userId?: string) => Promise;\n /**\n * Gets the user key from memory and sets it again,\n * kicking off a refresh of any additional keys\n * (such as auto, biometrics, or pin)\n */\n /**\n * Check if the current sessions has ever had a user key, i.e. has ever been unlocked/decrypted.\n * This is key for differentiating between TDE locked and standard locked states.\n * @param userId The desired user\n * @returns True if the current session has ever had a user key\n */\n getEverHadUserKey: (userId?: string) => Promise;\n refreshAdditionalKeys: () => Promise;\n /**\n * Retrieves the user key\n * @param userId The desired user\n * @returns The user key\n */\n getUserKey: (userId?: string) => Promise;\n\n /**\n * Checks if the user is using an old encryption scheme that used the master key\n * for encryption of data instead of the user key.\n */\n isLegacyUser: (masterKey?: MasterKey, userId?: string) => Promise;\n /**\n * Use for encryption/decryption of data in order to support legacy\n * encryption models. It will return the user key if available,\n * if not it will return the master key.\n * @param userId The desired user\n */\n getUserKeyWithLegacySupport: (userId?: string) => Promise;\n /**\n * Retrieves the user key from storage\n * @param keySuffix The desired version of the user's key to retrieve\n * @param userId The desired user\n * @returns The user key\n */\n getUserKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n\n /**\n * @returns True if the user key is available\n */\n hasUserKey: () => Promise;\n /**\n * @param userId The desired user\n * @returns True if the user key is set in memory\n */\n hasUserKeyInMemory: (userId?: string) => Promise;\n /**\n * @param keySuffix The desired version of the user's key to check\n * @param userId The desired user\n * @returns True if the provided version of the user key is stored\n */\n hasUserKeyStored: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n /**\n * Generates a new user key\n * @param masterKey The user's master key\n * @returns A new user key and the master key protected version of it\n */\n makeUserKey: (key: MasterKey) => Promise<[UserKey, EncString]>;\n /**\n * Clears the user key\n * @param clearStoredKeys Clears all stored versions of the user keys as well,\n * such as the biometrics key\n * @param userId The desired user\n */\n clearUserKey: (clearSecretStorage?: boolean, userId?: string) => Promise;\n /**\n * Clears the user's stored version of the user key\n * @param keySuffix The desired version of the key to clear\n * @param userId The desired user\n */\n clearStoredUserKey: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n /**\n * Stores the master key encrypted user key\n * @param userKeyMasterKey The master key encrypted user key to set\n * @param userId The desired user\n */\n setMasterKeyEncryptedUserKey: (UserKeyMasterKey: string, userId?: string) => Promise;\n /**\n * Sets the user's master key\n * @param key The user's master key to set\n * @param userId The desired user\n */\n setMasterKey: (key: MasterKey, userId?: string) => Promise;\n /**\n * @param userId The desired user\n * @returns The user's master key\n */\n getMasterKey: (userId?: string) => Promise;\n\n /**\n * @param password The user's master password that will be used to derive a master key if one isn't found\n * @param userId The desired user\n */\n getOrDeriveMasterKey: (password: string, userId?: string) => Promise;\n /**\n * Generates a master key from the provided password\n * @param password The user's master password\n * @param email The user's email\n * @param kdf The user's selected key derivation function to use\n * @param KdfConfig The user's key derivation function configuration\n * @returns A master key derived from the provided password\n */\n makeMasterKey: (\n password: string,\n email: string,\n kdf: KdfType,\n KdfConfig: KdfConfig\n ) => Promise;\n /**\n * Clears the user's master key\n * @param userId The desired user\n */\n clearMasterKey: (userId?: string) => Promise;\n /**\n * Encrypts the existing (or provided) user key with the\n * provided master key\n * @param masterKey The user's master key\n * @param userKey The user key\n * @returns The user key and the master key protected version of it\n */\n encryptUserKeyWithMasterKey: (\n masterKey: MasterKey,\n userKey?: UserKey\n ) => Promise<[UserKey, EncString]>;\n /**\n * Decrypts the user key with the provided master key\n * @param masterKey The user's master key\n * @param userKey The user's encrypted symmetric key\n * @param userId The desired user\n * @returns The user key\n */\n decryptUserKeyWithMasterKey: (\n masterKey: MasterKey,\n userKey?: EncString,\n userId?: string\n ) => Promise;\n /**\n * Creates a master password hash from the user's master password. Can\n * be used for local authentication or for server authentication depending\n * on the hashPurpose provided.\n * @param password The user's master password\n * @param key The user's master key\n * @param hashPurpose The iterations to use for the hash\n * @returns The user's master password hash\n */\n hashMasterKey: (password: string, key: MasterKey, hashPurpose?: HashPurpose) => Promise;\n /**\n * Sets the user's master password hash\n * @param keyHash The user's master password hash to set\n */\n setMasterKeyHash: (keyHash: string) => Promise;\n /**\n * @returns The user's master password hash\n */\n getMasterKeyHash: () => Promise;\n /**\n * Clears the user's stored master password hash\n * @param userId The desired user\n */\n clearMasterKeyHash: (userId?: string) => Promise;\n /**\n * Compares the provided master password to the stored password hash and server password hash.\n * Updates the stored hash if outdated.\n * @param masterPassword The user's master password\n * @param key The user's master key\n * @returns True if the provided master password matches either the stored\n * key hash or the server key hash\n */\n compareAndUpdateKeyHash: (masterPassword: string, masterKey: MasterKey) => Promise;\n /**\n * Stores the encrypted organization keys and clears any decrypted\n * organization keys currently in memory\n * @param orgs The organizations to set keys for\n * @param providerOrgs The provider organizations to set keys for\n */\n setOrgKeys: (\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ) => Promise;\n /**\n * Returns the organization's symmetric key\n * @param orgId The desired organization\n * @returns The organization's symmetric key\n */\n getOrgKey: (orgId: string) => Promise;\n /**\n * @returns A map of the organization Ids to their symmetric keys\n */\n getOrgKeys: () => Promise>;\n /**\n * Uses the org key to derive a new symmetric key for encrypting data\n * @param orgKey The organization's symmetric key\n */\n makeDataEncKey: (key: T) => Promise<[SymmetricCryptoKey, EncString]>;\n /**\n * Clears the user's stored organization keys\n * @param memoryOnly Clear only the in-memory keys\n * @param userId The desired user\n */\n clearOrgKeys: (memoryOnly?: boolean, userId?: string) => Promise;\n /**\n * Stores the encrypted provider keys and clears any decrypted\n * provider keys currently in memory\n * @param providers The providers to set keys for\n */\n setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise;\n /**\n * @param providerId The desired provider\n * @returns The provider's symmetric key\n */\n getProviderKey: (providerId: string) => Promise;\n /**\n * @returns A map of the provider Ids to their symmetric keys\n */\n getProviderKeys: () => Promise>;\n /**\n * @param memoryOnly Clear only the in-memory keys\n * @param userId The desired user\n */\n clearProviderKeys: (memoryOnly?: boolean, userId?: string) => Promise;\n /**\n * Returns the public key from memory. If not available, extracts it\n * from the private key and stores it in memory\n * @returns The user's public key\n */\n getPublicKey: () => Promise;\n /**\n * Creates a new organization key and encrypts it with the user's public key.\n * This method can also return Provider keys for creating new Provider users.\n * @returns The new encrypted org key and the decrypted key itself\n */\n makeOrgKey: () => Promise<[EncString, T]>;\n /**\n * Sets the the user's encrypted private key in storage and\n * clears the decrypted private key from memory\n * Note: does not clear the private key if null is provided\n * @param encPrivateKey An encrypted private key\n */\n setPrivateKey: (encPrivateKey: string) => Promise;\n /**\n * Returns the private key from memory. If not available, decrypts it\n * from storage and stores it in memory\n * @returns The user's private key\n */\n getPrivateKey: () => Promise;\n /**\n * Generates a fingerprint phrase for the user based on their public key\n * @param fingerprintMaterial Fingerprint material\n * @param publicKey The user's public key\n * @returns The user's fingerprint phrase\n */\n getFingerprint: (fingerprintMaterial: string, publicKey?: Uint8Array) => Promise;\n /**\n * Generates a new keypair\n * @param key A key to encrypt the private key with. If not provided,\n * defaults to the user key\n * @returns A new keypair: [publicKey in Base64, encrypted privateKey]\n */\n makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n /**\n * Clears the user's key pair\n * @param memoryOnly Clear only the in-memory keys\n * @param userId The desired user\n */\n clearKeyPair: (memoryOnly?: boolean, userId?: string) => Promise;\n /**\n * @param pin The user's pin\n * @param salt The user's salt\n * @param kdf The user's kdf\n * @param kdfConfig The user's kdf config\n * @returns A key derived from the user's pin\n */\n makePinKey: (pin: string, salt: string, kdf: KdfType, kdfConfig: KdfConfig) => Promise;\n /**\n * Clears the user's pin keys from storage\n * Note: This will remove the stored pin and as a result,\n * disable pin protection for the user\n * @param userId The desired user\n */\n clearPinKeys: (userId?: string) => Promise;\n /**\n * Decrypts the user key with their pin\n * @param pin The user's PIN\n * @param salt The user's salt\n * @param kdf The user's KDF\n * @param kdfConfig The user's KDF config\n * @param pinProtectedUserKey The user's PIN protected symmetric key, if not provided\n * it will be retrieved from storage\n * @returns The decrypted user key\n */\n decryptUserKeyWithPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n protectedKeyCs?: EncString\n ) => Promise;\n /**\n * Creates a new Pin key that encrypts the user key instead of the\n * master key. Clears the old Pin key from state.\n * @param masterPasswordOnRestart True if Master Password on Restart is enabled\n * @param pin User's PIN\n * @param email User's email\n * @param kdf User's KdfType\n * @param kdfConfig User's KdfConfig\n * @param oldPinKey The old Pin key from state (retrieved from different\n * places depending on if Master Password on Restart was enabled)\n * @returns The user key\n */\n decryptAndMigrateOldPinKey: (\n masterPasswordOnRestart: boolean,\n pin: string,\n email: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n oldPinKey: EncString\n ) => Promise;\n /**\n * Replaces old master auto keys with new user auto keys\n */\n migrateAutoKeyIfNeeded: (userId?: string) => Promise;\n /**\n * @param keyMaterial The key material to derive the send key from\n * @returns A new send key\n */\n makeSendKey: (keyMaterial: Uint8Array) => Promise;\n /**\n * Clears all of the user's keys from storage\n * @param userId The user's Id\n */\n clearKeys: (userId?: string) => Promise;\n /**\n * RSA encrypts a value.\n * @param data The data to encrypt\n * @param publicKey The public key to use for encryption, if not provided, the user's public key will be used\n * @returns The encrypted data\n */\n rsaEncrypt: (data: Uint8Array, publicKey?: Uint8Array) => Promise;\n /**\n * Decrypts a value using RSA.\n * @param encValue The encrypted value to decrypt\n * @param privateKeyValue The private key to use for decryption\n * @returns The decrypted value\n */\n rsaDecrypt: (encValue: string, privateKeyValue?: Uint8Array) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n /**\n * Generates a new cipher key\n * @returns A new cipher key\n */\n makeCipherKey: () => Promise;\n\n /**\n * Initialize all necessary crypto keys needed for a new account.\n * Warning! This completely replaces any existing keys!\n * @returns The user's newly created public key, private key, and encrypted private key\n */\n initAccount: () => Promise<{\n userKey: UserKey;\n publicKey: string;\n privateKey: EncString;\n }>;\n\n /**\n * @deprecated Left for migration purposes. Use decryptUserKeyWithPin instead.\n */\n decryptMasterKeyWithPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n protectedKeyCs?: EncString\n ) => Promise;\n /**\n * Previously, the master key was used for any additional key like the biometrics or pin key.\n * We have switched to using the user key for these purposes. This method is for clearing the state\n * of the older keys on logout or post migration.\n * @param keySuffix The desired type of key to clear\n * @param userId The desired user\n */\n clearDeprecatedKeys: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encrypt\n */\n encrypt: (plainValue: string | Uint8Array, key?: SymmetricCryptoKey) => Promise;\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encryptToBytes\n */\n encryptToBytes: (plainValue: Uint8Array, key?: SymmetricCryptoKey) => Promise;\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToUtf8\n */\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n decryptFromBytes: (encBuffer: EncArrayBuffer, key: SymmetricCryptoKey) => Promise;\n}\n","import { Decryptable } from \"../interfaces/decryptable.interface\";\nimport { Encrypted } from \"../interfaces/encrypted\";\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 | Uint8Array, key: SymmetricCryptoKey): Promise;\n abstract encryptToBytes: (\n plainValue: Uint8Array,\n key?: SymmetricCryptoKey\n ) => Promise;\n abstract decryptToUtf8: (encString: EncString, key: SymmetricCryptoKey) => Promise;\n abstract decryptToBytes: (encThing: Encrypted, key: SymmetricCryptoKey) => Promise;\n abstract resolveLegacyKey: (key: SymmetricCryptoKey, encThing: Encrypted) => 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 enum Region {\n US = \"US\",\n EU = \"EU\",\n SelfHosted = \"Self-hosted\",\n}\n\nexport enum RegionDomain {\n US = \"bitwarden.com\",\n EU = \"bitwarden.eu\",\n USQA = \"bitwarden.pw\",\n}\n\nexport abstract class EnvironmentService {\n urls: Observable;\n usUrls: Urls;\n euUrls: Urls;\n selectedRegion?: Region;\n initialized = true;\n\n hasBaseUrl: () => boolean;\n getNotificationsUrl: () => string;\n getWebVaultUrl: () => string;\n /**\n * Retrieves the URL of the cloud web vault app.\n *\n * @returns {string} The URL of the cloud web vault app.\n * @remarks Use this method only in views exclusive to self-host instances.\n */\n getCloudWebVaultUrl: () => string;\n /**\n * Sets the URL of the cloud web vault app based on the region parameter.\n *\n * @param {Region} region - The region of the cloud web vault app.\n */\n setCloudWebVaultUrl: (region: Region) => void;\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 setRegion: (region: Region) => Promise;\n getUrls: () => Urls;\n isCloud: () => boolean;\n isEmpty: () => boolean;\n}\n","import { FileDownloadRequest } from \"./file-download.request\";\n\nexport abstract class FileDownloadService {\n download: (request: FileDownloadRequest) => void;\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 { Observable } from \"rxjs\";\n\nimport { TranslationService } from \"./translation.service\";\n\nexport abstract class I18nService extends TranslationService {\n locale$: Observable;\n}\n","import { LogLevelType } from \"../../enums\";\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","import { ClientType, DeviceType } from \"../../enums\";\n\ninterface ToastOptions {\n timeout?: number;\n}\n\nexport type ClipboardOptions = {\n allowHistory?: boolean;\n clearing?: boolean;\n clearMs?: number;\n window?: Window;\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 isDev: () => boolean;\n isSelfHost: () => boolean;\n copyToClipboard: (text: string, options?: ClipboardOptions) => void | boolean;\n readFromClipboard: () => Promise;\n supportsBiometric: () => Promise;\n authenticateBiometric: () => Promise;\n supportsSecureStorage: () => boolean;\n getAutofillKeyboardShortcut: () => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { EncryptedOrganizationKeyData } from \"../../admin-console/models/data/encrypted-organization-key.data\";\nimport { OrganizationData } from \"../../admin-console/models/data/organization.data\";\nimport { PolicyData } from \"../../admin-console/models/data/policy.data\";\nimport { ProviderData } from \"../../admin-console/models/data/provider.data\";\nimport { Policy } from \"../../admin-console/models/domain/policy\";\nimport { AdminAuthRequestStorable } from \"../../auth/models/domain/admin-auth-req-storable\";\nimport { EnvironmentUrls } from \"../../auth/models/domain/environment-urls\";\nimport { ForceResetPasswordReason } from \"../../auth/models/domain/force-reset-password-reason\";\nimport { KdfConfig } from \"../../auth/models/domain/kdf-config\";\nimport { BiometricKey } from \"../../auth/types/biometric-key\";\nimport { KdfType, ThemeType, UriMatchType } from \"../../enums\";\nimport { EventData } from \"../../models/data/event.data\";\nimport { WindowState } from \"../../models/domain/window-state\";\nimport { GeneratorOptions } from \"../../tools/generator/generator-options\";\nimport { GeneratedPasswordHistory, PasswordGeneratorOptions } from \"../../tools/generator/password\";\nimport { UsernameGeneratorOptions } from \"../../tools/generator/username\";\nimport { SendData } from \"../../tools/send/models/data/send.data\";\nimport { SendView } from \"../../tools/send/models/view/send.view\";\nimport { CipherData } from \"../../vault/models/data/cipher.data\";\nimport { CollectionData } from \"../../vault/models/data/collection.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\";\nimport { CollectionView } from \"../../vault/models/view/collection.view\";\nimport { AddEditCipherInfo } from \"../../vault/types/add-edit-cipher-info\";\nimport { ServerConfigData } from \"../models/data/server-config.data\";\nimport {\n Account,\n AccountDecryptionOptions,\n AccountSettingsSettings,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport {\n DeviceKey,\n MasterKey,\n SymmetricCryptoKey,\n UserKey,\n} from \"../models/domain/symmetric-crypto-key\";\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: AddEditCipherInfo, 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 /**\n * gets the user key\n */\n getUserKey: (options?: StorageOptions) => Promise;\n /**\n * Sets the user key\n */\n setUserKey: (value: UserKey, options?: StorageOptions) => Promise;\n /**\n * Gets the user's master key\n */\n getMasterKey: (options?: StorageOptions) => Promise;\n /**\n * Sets the user's master key\n */\n setMasterKey: (value: MasterKey, options?: StorageOptions) => Promise;\n /**\n * Gets the user key encrypted by the master key\n */\n getMasterKeyEncryptedUserKey: (options?: StorageOptions) => Promise;\n /**\n * Sets the user key encrypted by the master key\n */\n setMasterKeyEncryptedUserKey: (value: string, options?: StorageOptions) => Promise;\n /**\n * Gets the user's auto key\n */\n getUserKeyAutoUnlock: (options?: StorageOptions) => Promise;\n /**\n * Sets the user's auto key\n */\n setUserKeyAutoUnlock: (value: string, options?: StorageOptions) => Promise;\n /**\n * Gets the user's biometric key\n */\n getUserKeyBiometric: (options?: StorageOptions) => Promise;\n /**\n * Checks if the user has a biometric key available\n */\n hasUserKeyBiometric: (options?: StorageOptions) => Promise;\n /**\n * Sets the user's biometric key\n */\n setUserKeyBiometric: (value: BiometricKey, options?: StorageOptions) => Promise;\n /**\n * Gets the user key encrypted by the Pin key.\n * Used when Lock with MP on Restart is disabled\n */\n getPinKeyEncryptedUserKey: (options?: StorageOptions) => Promise;\n /**\n * Sets the user key encrypted by the Pin key.\n * Used when Lock with MP on Restart is disabled\n */\n setPinKeyEncryptedUserKey: (value: EncString, options?: StorageOptions) => Promise;\n /**\n * Gets the ephemeral version of the user key encrypted by the Pin key.\n * Used when Lock with MP on Restart is enabled\n */\n getPinKeyEncryptedUserKeyEphemeral: (options?: StorageOptions) => Promise;\n /**\n * Sets the ephemeral version of the user key encrypted by the Pin key.\n * Used when Lock with MP on Restart is enabled\n */\n setPinKeyEncryptedUserKeyEphemeral: (value: EncString, options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use getUserKeyMasterKey instead\n */\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use setUserKeyMasterKey instead\n */\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated For legacy purposes only, use getMasterKey instead\n */\n getCryptoMasterKey: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use getUserKeyAuto instead\n */\n getCryptoMasterKeyAuto: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use setUserKeyAuto instead\n */\n setCryptoMasterKeyAuto: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use getUserKeyBiometric instead\n */\n getCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use hasUserKeyBiometric instead\n */\n hasCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use setUserKeyBiometric instead\n */\n setCryptoMasterKeyBiometric: (value: BiometricKey, 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 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 /**\n * @deprecated For migration purposes only, use getDecryptedUserKeyPin instead\n */\n getDecryptedPinProtected: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use setDecryptedUserKeyPin instead\n */\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: Uint8Array, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n /**\n * @deprecated Do not call this directly, use SendService\n */\n getDecryptedSends: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use SendService\n */\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 /**\n * @deprecated Do not call this, use SettingsService\n */\n getDisableFavicon: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use SettingsService\n */\n setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise;\n getDisableGa: (options?: StorageOptions) => Promise;\n setDisableGa: (value: boolean, options?: StorageOptions) => Promise;\n getDismissedAutofillCallout: (options?: StorageOptions) => Promise;\n setDismissedAutofillCallout: (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 getDeviceKey: (options?: StorageOptions) => Promise;\n setDeviceKey: (value: DeviceKey | null, options?: StorageOptions) => Promise;\n getAdminAuthRequest: (options?: StorageOptions) => Promise;\n setAdminAuthRequest: (\n adminAuthRequest: AdminAuthRequestStorable,\n options?: StorageOptions\n ) => Promise;\n getShouldTrustDevice: (options?: StorageOptions) => Promise;\n setShouldTrustDevice: (value: boolean, options?: StorageOptions) => Promise;\n getAccountDecryptionOptions: (\n options?: StorageOptions\n ) => Promise;\n setAccountDecryptionOptions: (\n value: AccountDecryptionOptions,\n options?: StorageOptions\n ) => 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 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 /**\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 /**\n * @deprecated For migration purposes only, use getEncryptedUserKeyPin instead\n */\n getEncryptedPinProtected: (options?: StorageOptions) => Promise;\n /**\n * @deprecated For migration purposes only, use setEncryptedUserKeyPin instead\n */\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 /**\n * @deprecated Do not call this directly, use SendService\n */\n getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;\n /**\n * @deprecated Do not call this directly, use SendService\n */\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 getRegion: (options?: StorageOptions) => Promise;\n setRegion: (value: string, 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 getEverHadUserKey: (options?: StorageOptions) => Promise;\n setEverHadUserKey: (value: boolean, options?: StorageOptions) => Promise;\n getEverBeenUnlocked: (options?: StorageOptions) => Promise;\n setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise;\n getForcePasswordResetReason: (options?: StorageOptions) => Promise;\n setForcePasswordResetReason: (\n value: ForceResetPasswordReason,\n options?: StorageOptions\n ) => 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 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 getEmergencyAccessInvitation: (options?: StorageOptions) => Promise;\n setEmergencyAccessInvitation: (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: (\n value: PasswordGeneratorOptions,\n options?: StorageOptions\n ) => Promise;\n getUsernameGenerationOptions: (options?: StorageOptions) => Promise;\n setUsernameGenerationOptions: (\n value: UsernameGeneratorOptions,\n options?: StorageOptions\n ) => Promise;\n getGeneratorOptions: (options?: StorageOptions) => Promise;\n setGeneratorOptions: (value: GeneratorOptions, options?: StorageOptions) => Promise;\n /**\n * Gets the user's Pin, encrypted by the user key\n */\n getProtectedPin: (options?: StorageOptions) => Promise;\n /**\n * Sets the user's Pin, encrypted by the user key\n */\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: Uint8Array, 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 getUserSsoOrganizationIdentifier: (options?: StorageOptions) => Promise;\n setUserSsoOrganizationIdentifier: (\n value: string | null,\n options?: StorageOptions\n ) => 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: (value: 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 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 getActivateAutoFillOnPageLoadFromPolicy: (\n options?: StorageOptions\n ) => Promise;\n setActivateAutoFillOnPageLoadFromPolicy: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getSMOnboardingTasks: (\n options?: StorageOptions\n ) => Promise>>;\n setSMOnboardingTasks: (\n value: Record>,\n options?: StorageOptions\n ) => Promise;\n}\n","export abstract class ValidationService {\n showError: (data: any) => string[];\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 enableCipherKeyEncryption?: 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","/* eslint-disable no-useless-escape */\nimport * as path from \"path\";\n\nimport { Observable, of, switchMap } from \"rxjs\";\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 static readonly originalMinimumPasswordLength = 8;\n static readonly minimumPasswordLength = 12;\n static readonly DomainMatchBlacklist = new Map>([\n [\"google.com\", new Set([\"script.google.com\"])],\n ]);\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 return Utils.getUrlObject(uriString);\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 /**\n * Generate an observable from a function that returns a promise.\n * Similar to the rxjs function {@link from} with one big exception:\n * {@link from} will not re-execute the function when observers resubscribe.\n * {@link Util.asyncToObservable} will execute `generator` for every\n * subscribe, making it ideal if the value ever needs to be refreshed.\n * */\n static asyncToObservable(generator: () => Promise): Observable {\n return of(undefined).pipe(switchMap(() => generator()));\n }\n\n /**\n * Return the number of days remaining before a target date arrives.\n * Returns 0 if the day has already passed.\n */\n static daysRemaining(targetDate: Date): number {\n const diffTime = targetDate.getTime() - Date.now();\n const msPerDay = 86400000;\n return Math.max(0, Math.floor(diffTime / msPerDay));\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 // All the methods below require a protocol to properly parse a URL string\n // Assume http if no other protocol is present\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\n try {\n if (nodeURL != null) {\n return new nodeURL.URL(uriString);\n }\n\n return new URL(uriString);\n } catch (e) {\n // Ignore error\n }\n\n return null;\n }\n}\n\nUtils.init();\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 { View } from \"../../../models/view/view\";\n\nimport { EncString } from \"./enc-string\";\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\n// https://contributing.bitwarden.com/architecture/clients/data-model#domain\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\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { Encrypted } from \"../../interfaces/encrypted\";\n\nconst ENC_TYPE_LENGTH = 1;\nconst IV_LENGTH = 16;\nconst MAC_LENGTH = 32;\nconst MIN_DATA_LENGTH = 1;\n\nexport class EncArrayBuffer implements Encrypted {\n readonly encryptionType: EncryptionType = null;\n readonly dataBytes: Uint8Array = null;\n readonly ivBytes: Uint8Array = null;\n readonly macBytes: Uint8Array = null;\n\n constructor(readonly buffer: Uint8Array) {\n const encBytes = 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);\n this.macBytes = encBytes.slice(\n ENC_TYPE_LENGTH + IV_LENGTH,\n ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH\n );\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH);\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);\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH);\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(new Uint8Array(buffer));\n }\n\n static fromB64(b64: string) {\n const buffer = Utils.fromB64ToArray(b64);\n return new EncArrayBuffer(buffer);\n }\n}\n","import { Jsonify, Opaque } from \"type-fest\";\n\nimport { EncryptionType, EXPECTED_NUM_PARTS_BY_ENCRYPTION_TYPE } from \"../../../enums\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { Encrypted } from \"../../interfaces/encrypted\";\n\nimport { SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncString implements Encrypted {\n encryptedString?: EncryptedString;\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(): Uint8Array {\n return this.iv == null ? null : Utils.fromB64ToArray(this.iv);\n }\n\n get macBytes(): Uint8Array {\n return this.mac == null ? null : Utils.fromB64ToArray(this.mac);\n }\n\n get dataBytes(): Uint8Array {\n return this.data == null ? null : Utils.fromB64ToArray(this.data);\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) as EncryptedString;\n } else {\n this.encryptedString = (encType + \".\" + data) as EncryptedString;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString = (this.encryptedString + \"|\" + mac) as EncryptedString;\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 EncryptedString;\n if (!this.encryptedString) {\n return;\n }\n\n const { encType, encPieces } = EncString.parseEncryptedString(this.encryptedString);\n this.encryptionType = encType;\n\n if (encPieces.length !== EXPECTED_NUM_PARTS_BY_ENCRYPTION_TYPE[encType]) {\n return;\n }\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\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 this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n private static 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 static isSerializedEncString(s: string): boolean {\n const { encType, encPieces } = this.parseEncryptedString(s);\n\n return EXPECTED_NUM_PARTS_BY_ENCRYPTION_TYPE[encType] === encPieces.length;\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.getUserKeyWithLegacySupport();\n }\n}\n\nexport type EncryptedString = Opaque;\n","import { Jsonify, Opaque } from \"type-fest\";\n\nimport { EncryptionType } from \"../../../enums\";\nimport { Utils } from \"../../../platform/misc/utils\";\n\nexport class SymmetricCryptoKey {\n key: Uint8Array;\n encKey?: Uint8Array;\n macKey?: Uint8Array;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: Uint8Array, 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 fromString(s: string): SymmetricCryptoKey {\n if (s == null) {\n return null;\n }\n\n const arrayBuffer = Utils.fromB64ToArray(s);\n return new SymmetricCryptoKey(arrayBuffer);\n }\n\n static fromJSON(obj: Jsonify): SymmetricCryptoKey {\n return SymmetricCryptoKey.fromString(obj?.keyB64);\n }\n}\n\n// Setup all separate key types as opaque types\nexport type DeviceKey = Opaque;\nexport type UserKey = Opaque;\nexport type MasterKey = Opaque;\nexport type PinKey = Opaque;\nexport type OrgKey = Opaque;\nexport type ProviderKey = Opaque;\nexport type CipherKey = Opaque;\n","import { LogLevelType } from \"../../enums\";\nimport { LogService as LogServiceAbstraction } from \"../abstractions/log.service\";\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","import { PasswordGeneratorPolicyOptions } from \"../../../admin-console/models/domain/password-generator-policy-options\";\n\nimport { GeneratedPasswordHistory } from \"./generated-password-history\";\nimport { PasswordGeneratorOptions } from \"./password-generator-options\";\n\nexport abstract class PasswordGenerationServiceAbstraction {\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 normalizeOptions: (\n options: PasswordGeneratorOptions,\n enforcedPolicyOptions: PasswordGeneratorPolicyOptions\n ) => void;\n}\n","import Domain from \"../../../platform/models/domain/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","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","import { PolicyService } from \"../../../admin-console/abstractions/policy/policy.service.abstraction\";\nimport { PolicyType } from \"../../../admin-console/enums\";\nimport { PasswordGeneratorPolicyOptions } from \"../../../admin-console/models/domain/password-generator-policy-options\";\nimport { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { EFFLongWordList } from \"../../../platform/misc/wordlist\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\n\nimport { GeneratedPasswordHistory } from \"./generated-password-history\";\nimport { PasswordGenerationServiceAbstraction } from \"./password-generation.service.abstraction\";\nimport { PasswordGeneratorOptions } from \"./password-generator-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.hasUserKey();\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.hasUserKey();\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 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 { UsernameGeneratorOptions } from \"./username-generation-options\";\n\nexport abstract class UsernameGenerationServiceAbstraction {\n generateUsername: (options: UsernameGeneratorOptions) => Promise;\n generateWord: (options: UsernameGeneratorOptions) => Promise;\n generateSubaddress: (options: UsernameGeneratorOptions) => Promise;\n generateCatchall: (options: UsernameGeneratorOptions) => Promise;\n generateForwarded: (options: UsernameGeneratorOptions) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: UsernameGeneratorOptions) => Promise;\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 addy.io API token.\";\n }\n if (options.anonaddy?.domain == null || options.anonaddy.domain === \"\") {\n throw \"Invalid addy.io domain.\";\n }\n if (options.anonaddy?.baseUrl == null || options.anonaddy.baseUrl === \"\") {\n throw \"Invalid addy.io url.\";\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 \"X-Requested-With\": \"XMLHttpRequest\",\n }),\n };\n const url = options.anonaddy.baseUrl + \"/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 addy.io API token.\";\n }\n if (response?.statusText != null) {\n throw \"addy.io error:\\n\" + response.statusText;\n }\n throw \"Unknown addy.io 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 forwardemail = new ForwardEmailForwarderOptions();\n simplelogin = new SimpleLoginForwarderOptions();\n}\n\nexport class FastmailForwarderOptions {\n prefix: string;\n}\n\nexport class AnonAddyForwarderOptions {\n domain: string;\n baseUrl: string;\n}\n\nexport class ForwardEmailForwarderOptions {\n domain: string;\n}\n\nexport class SimpleLoginForwarderOptions {\n baseUrl: 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 = options.simplelogin.baseUrl + \"/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 const json = await response.json();\n if (json?.error != null) {\n throw \"SimpleLogin error:\" + json.error;\n }\n throw \"Unknown SimpleLogin error occurred.\";\n }\n}\n","import { ApiService } from \"../../../../abstractions/api.service\";\nimport { Utils } from \"../../../../platform/misc/utils\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class ForwardEmailForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Forward Email API key.\";\n }\n if (options.forwardemail?.domain == null || options.forwardemail.domain === \"\") {\n throw \"Invalid Forward Email domain.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Basic \" + Utils.fromUtf8ToB64(options.apiKey + \":\"),\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = `https://api.forwardemail.net/v1/domains/${options.forwardemail.domain}/aliases`;\n requestInit.body = JSON.stringify({\n labels: options.website,\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?.name + \"@\" + (json?.domain?.name || options.forwardemail.domain);\n }\n if (response.status === 401) {\n throw \"Invalid Forward Email API key.\";\n }\n const json = await response.json();\n if (json?.message != null) {\n throw \"Forward Email error:\\n\" + json.message;\n }\n if (json?.error != null) {\n throw \"Forward Email error:\\n\" + json.error;\n }\n throw \"Unknown Forward Email error occurred.\";\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport { EFFLongWordList } from \"../../../platform/misc/wordlist\";\n\nimport {\n AnonAddyForwarder,\n DuckDuckGoForwarder,\n FastmailForwarder,\n FirefoxRelayForwarder,\n ForwardEmailForwarder,\n Forwarder,\n ForwarderOptions,\n SimpleLoginForwarder,\n} from \"./email-forwarders\";\nimport { UsernameGeneratorOptions } from \"./username-generation-options\";\nimport { UsernameGenerationServiceAbstraction } from \"./username-generation.service.abstraction\";\n\nconst DefaultOptions: UsernameGeneratorOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n forwardedService: \"\",\n forwardedAnonAddyDomain: \"anonaddy.me\",\n forwardedAnonAddyBaseUrl: \"https://app.addy.io\",\n forwardedForwardEmailDomain: \"hideaddress.net\",\n forwardedSimpleLoginBaseUrl: \"https://app.simplelogin.io\",\n};\n\nexport class UsernameGenerationService implements UsernameGenerationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\n\n generateUsername(options: UsernameGeneratorOptions): 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: UsernameGeneratorOptions): 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: UsernameGeneratorOptions): 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: UsernameGeneratorOptions): 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: UsernameGeneratorOptions): 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 forwarderOptions.simplelogin.baseUrl = o.forwardedSimpleLoginBaseUrl;\n } else if (o.forwardedService === \"anonaddy\") {\n forwarder = new AnonAddyForwarder();\n forwarderOptions.apiKey = o.forwardedAnonAddyApiToken;\n forwarderOptions.anonaddy.domain = o.forwardedAnonAddyDomain;\n forwarderOptions.anonaddy.baseUrl = o.forwardedAnonAddyBaseUrl;\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 } else if (o.forwardedService === \"forwardemail\") {\n forwarder = new ForwardEmailForwarder();\n forwarderOptions.apiKey = o.forwardedForwardEmailApiToken;\n forwarderOptions.forwardemail.domain = o.forwardedForwardEmailDomain;\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: UsernameGeneratorOptions) {\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","import { ZXCVBNResult } from \"zxcvbn\";\n\nexport abstract class PasswordStrengthServiceAbstraction {\n getPasswordStrength: (password: string, email?: string, userInputs?: string[]) => ZXCVBNResult;\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { PasswordStrengthServiceAbstraction } from \"./password-strength.service.abstraction\";\n\nexport class PasswordStrengthService implements PasswordStrengthServiceAbstraction {\n /**\n * Calculates a password strength score using zxcvbn.\n * @param password The password to calculate the strength of.\n * @param emailInput An unparsed email address to use as user input.\n * @param userInputs An array of additional user inputs to use when calculating the strength.\n */\n getPasswordStrength(\n password: string,\n emailInput: string = null,\n userInputs: string[] = null\n ): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n const globalUserInputs = [\n \"bitwarden\",\n \"bit\",\n \"warden\",\n ...(userInputs ?? []),\n ...this.emailToUserInputs(emailInput),\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 /**\n * Convert an email address into a list of user inputs for zxcvbn by\n * taking the local part of the email address and splitting it into words.\n * @param email\n * @private\n */\n private emailToUserInputs(email: string): string[] {\n if (email == null || email.length === 0) {\n return [];\n }\n const atPosition = email.indexOf(\"@\");\n if (atPosition < 0) {\n return [];\n }\n return email\n .substring(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/);\n }\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","import { BaseResponse } from \"../../../../models/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 \"../../../../models/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 { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../../platform/models/domain/symmetric-crypto-key\";\nimport { SendFileData } from \"../data/send-file.data\";\nimport { SendFileView } from \"../view/send-file.view\";\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 static fromJSON(obj: Jsonify) {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new SendFile(), obj, {\n fileName: EncString.fromJSON(obj.fileName),\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../../platform/models/domain/symmetric-crypto-key\";\nimport { SendTextData } from \"../data/send-text.data\";\nimport { SendTextView } from \"../view/send-text.view\";\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 static fromJSON(obj: Jsonify) {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new SendText(), obj, {\n text: EncString.fromJSON(obj.text),\n });\n }\n}\n","import { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./send.request\";\n\nexport class SendWithIdRequest extends SendRequest {\n id: string;\n\n constructor(send: Send) {\n super(send);\n this.id = send.id;\n }\n}\n","import { SendType } from \"../../enums/send-type\";\nimport { SendFileApi } from \"../api/send-file.api\";\nimport { SendTextApi } from \"../api/send-text.api\";\nimport { Send } from \"../domain/send\";\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","import { View } from \"../../../../models/view/view\";\nimport { DeepJsonify } from \"../../../../types/deep-jsonify\";\nimport { SendFile } from \"../domain/send-file\";\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 { View } from \"../../../../models/view/view\";\nimport { DeepJsonify } from \"../../../../types/deep-jsonify\";\nimport { SendText } from \"../domain/send-text\";\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 { View } from \"../../../../models/view/view\";\nimport { Utils } from \"../../../../platform/misc/utils\";\nimport { SymmetricCryptoKey } from \"../../../../platform/models/domain/symmetric-crypto-key\";\nimport { DeepJsonify } from \"../../../../types/deep-jsonify\";\nimport { SendType } from \"../../enums/send-type\";\nimport { Send } from \"../domain/send\";\n\nimport { SendFileView } from \"./send-file.view\";\nimport { SendTextView } from \"./send-text.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: Uint8Array;\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(\n { ...this },\n {\n key: Utils.fromBufferToB64(this.key),\n }\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),\n cryptoKey: SymmetricCryptoKey.fromJSON(json.cryptoKey),\n text: SendTextView.fromJSON(json.text),\n file: SendFileView.fromJSON(json.file),\n revisionDate: json.revisionDate == null ? null : new Date(json.revisionDate),\n deletionDate: json.deletionDate == null ? null : new Date(json.deletionDate),\n expirationDate: json.expirationDate == null ? null : new Date(json.expirationDate),\n });\n }\n}\n","import { ListResponse } from \"../../../models/response/list.response\";\nimport { EncArrayBuffer } from \"../../../platform/models/domain/enc-array-buffer\";\nimport { Send } from \"../models/domain/send\";\nimport { SendAccessRequest } from \"../models/request/send-access.request\";\nimport { SendRequest } from \"../models/request/send.request\";\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 { SendAccessView } from \"../models/view/send-access.view\";\n\nexport abstract class SendApiService {\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 removePassword: (id: string) => Promise;\n delete: (id: string) => Promise;\n save: (sendData: [Send, EncArrayBuffer]) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nimport { EncArrayBuffer } from \"../../../platform/models/domain/enc-array-buffer\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { SendData } from \"../models/data/send.data\";\nimport { Send } from \"../models/domain/send\";\nimport { SendView } from \"../models/view/send.view\";\n\nexport abstract class SendService {\n sends$: Observable;\n sendViews$: Observable;\n\n encrypt: (\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ) => Promise<[Send, EncArrayBuffer]>;\n get: (id: string) => Send;\n /**\n * @deprecated Do not call this, use the sends$ observable collection\n */\n getAll: () => 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 InternalSendService extends SendService {\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}\n","import { UriMatchType } from \"../../enums\";\nimport { SymmetricCryptoKey } from \"../../platform/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 keyForEncryption?: SymmetricCryptoKey,\n keyForCipherKeyDecryption?: 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, orgAdmin?: boolean) => Promise;\n updateWithServer: (cipher: Cipher, orgAdmin?: boolean, isNotClone?: boolean) => 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, asAdmin?: boolean) => Promise;\n deleteManyWithServer: (ids: string[], asAdmin?: boolean) => 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, asAdmin?: boolean) => Promise;\n softDeleteManyWithServer: (ids: string[], asAdmin?: boolean) => Promise;\n restore: (\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) => Promise;\n restoreWithServer: (id: string, asAdmin?: boolean) => Promise;\n restoreManyWithServer: (\n ids: string[],\n organizationId?: string,\n asAdmin?: boolean\n ) => Promise;\n getKeyForCipherKeyDecryption: (cipher: Cipher) => Promise;\n}\n","import { TreeNode } from \"../../models/domain/tree-node\";\nimport { CollectionData } from \"../models/data/collection.data\";\nimport { Collection } from \"../models/domain/collection\";\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 { 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 \"../../../platform/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","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../../models/response/notification.response\";\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date, userId?: string) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","import { BaseResponse } from \"../../models/response/base.response\";\n\nexport class Fido2CredentialApi extends BaseResponse {\n credentialId: string;\n keyType: \"public-key\";\n keyAlgorithm: \"ECDSA\";\n keyCurve: \"P-256\";\n keyValue: string;\n rpId: string;\n userHandle: string;\n counter: string;\n rpName: string;\n userDisplayName: string;\n discoverable: string;\n creationDate: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n\n this.credentialId = this.getResponseProperty(\"CredentialId\");\n this.keyType = this.getResponseProperty(\"KeyType\");\n this.keyAlgorithm = this.getResponseProperty(\"KeyAlgorithm\");\n this.keyCurve = this.getResponseProperty(\"KeyCurve\");\n this.keyValue = this.getResponseProperty(\"keyValue\");\n this.rpId = this.getResponseProperty(\"RpId\");\n this.userHandle = this.getResponseProperty(\"UserHandle\");\n this.counter = this.getResponseProperty(\"Counter\");\n this.rpName = this.getResponseProperty(\"RpName\");\n this.userDisplayName = this.getResponseProperty(\"UserDisplayName\");\n this.discoverable = this.getResponseProperty(\"Discoverable\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\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 key: string;\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 this.key = response.key;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { CollectionDetailsResponse } from \"../response/collection.response\";\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n hidePasswords: 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 this.hidePasswords = response.hidePasswords;\n }\n}\n","import { Fido2CredentialApi } from \"../../api/fido2-credential.api\";\n\nexport class Fido2CredentialData {\n credentialId: string;\n keyType: \"public-key\";\n keyAlgorithm: \"ECDSA\";\n keyCurve: \"P-256\";\n keyValue: string;\n rpId: string;\n userHandle: string;\n counter: string;\n rpName: string;\n userDisplayName: string;\n discoverable: string;\n creationDate: string;\n\n constructor(data?: Fido2CredentialApi) {\n if (data == null) {\n return;\n }\n\n this.credentialId = data.credentialId;\n this.keyType = data.keyType;\n this.keyAlgorithm = data.keyAlgorithm;\n this.keyCurve = data.keyCurve;\n this.keyValue = data.keyValue;\n this.rpId = data.rpId;\n this.userHandle = data.userHandle;\n this.counter = data.counter;\n this.rpName = data.rpName;\n this.userDisplayName = data.userDisplayName;\n this.discoverable = data.discoverable;\n this.creationDate = data.creationDate;\n }\n}\n","import { FieldType, LinkedIdType } from \"../../../enums\";\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 { 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\";\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 { Fido2CredentialData } from \"./fido2-credential.data\";\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 fido2Credentials?: Fido2CredentialData[];\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 if (data.fido2Credentials) {\n this.fido2Credentials = data.fido2Credentials?.map((key) => new Fido2CredentialData(key));\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\";\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 \"../../../platform/misc/utils\";\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/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.getUserKeyWithLegacySupport();\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 \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/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 \"../../../platform/interfaces/decryptable.interface\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { InitializerKey } from \"../../../platform/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 key: EncString;\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 key: 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 // We are passing the organizationId into the EncString.decrypt() method here, but because the encKey will always be\n // present and so the organizationId will not be used.\n // We will refactor the EncString.decrypt() in https://bitwarden.atlassian.net/browse/PM-3762 to remove the dependency on the organizationId.\n async decrypt(encKey: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n if (this.key != null) {\n const encryptService = Utils.getContainerService().getEncryptService();\n encKey = new SymmetricCryptoKey(await encryptService.decryptToBytes(this.key, encKey));\n }\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 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(this.organizationId, 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(this.organizationId, 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(this.organizationId, 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 c.key = this.key?.encryptedString;\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 const key = EncString.fromJSON(obj.key);\n\n Object.assign(domain, obj, {\n name,\n notes,\n revisionDate,\n deletedDate,\n attachments,\n fields,\n passwordHistory,\n key,\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 Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { CollectionData } from \"../data/collection.data\";\nimport { CollectionView } from \"../view/collection.view\";\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 { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { Fido2CredentialData } from \"../data/fido2-credential.data\";\nimport { Fido2CredentialView } from \"../view/fido2-credential.view\";\n\nexport class Fido2Credential extends Domain {\n credentialId: EncString | null = null;\n keyType: EncString;\n keyAlgorithm: EncString;\n keyCurve: EncString;\n keyValue: EncString;\n rpId: EncString;\n userHandle: EncString;\n counter: EncString;\n rpName: EncString;\n userDisplayName: EncString;\n discoverable: EncString;\n creationDate: Date;\n\n constructor(obj?: Fido2CredentialData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n credentialId: null,\n keyType: null,\n keyAlgorithm: null,\n keyCurve: null,\n keyValue: null,\n rpId: null,\n userHandle: null,\n counter: null,\n rpName: null,\n userDisplayName: null,\n discoverable: null,\n },\n []\n );\n this.creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new Fido2CredentialView(),\n {\n credentialId: null,\n keyType: null,\n keyAlgorithm: null,\n keyCurve: null,\n keyValue: null,\n rpId: null,\n userHandle: null,\n rpName: null,\n userDisplayName: null,\n discoverable: null,\n },\n orgId,\n encKey\n );\n\n const { counter } = await this.decryptObj(\n { counter: \"\" },\n {\n counter: null,\n },\n orgId,\n encKey\n );\n // Counter will end up as NaN if this fails\n view.counter = parseInt(counter);\n\n const { discoverable } = await this.decryptObj(\n { discoverable: \"\" },\n {\n discoverable: null,\n },\n orgId,\n encKey\n );\n view.discoverable = discoverable === \"true\";\n view.creationDate = this.creationDate;\n\n return view;\n }\n\n toFido2CredentialData(): Fido2CredentialData {\n const i = new Fido2CredentialData();\n i.creationDate = this.creationDate.toISOString();\n this.buildDataModel(this, i, {\n credentialId: null,\n keyType: null,\n keyAlgorithm: null,\n keyCurve: null,\n keyValue: null,\n rpId: null,\n userHandle: null,\n counter: null,\n rpName: null,\n userDisplayName: null,\n discoverable: null,\n });\n return i;\n }\n\n static fromJSON(obj: Jsonify): Fido2Credential {\n if (obj == null) {\n return null;\n }\n\n const credentialId = EncString.fromJSON(obj.credentialId);\n const keyType = EncString.fromJSON(obj.keyType);\n const keyAlgorithm = EncString.fromJSON(obj.keyAlgorithm);\n const keyCurve = EncString.fromJSON(obj.keyCurve);\n const keyValue = EncString.fromJSON(obj.keyValue);\n const rpId = EncString.fromJSON(obj.rpId);\n const userHandle = EncString.fromJSON(obj.userHandle);\n const counter = EncString.fromJSON(obj.counter);\n const rpName = EncString.fromJSON(obj.rpName);\n const userDisplayName = EncString.fromJSON(obj.userDisplayName);\n const discoverable = EncString.fromJSON(obj.discoverable);\n const creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;\n\n return Object.assign(new Fido2Credential(), obj, {\n credentialId,\n keyType,\n keyAlgorithm,\n keyCurve,\n keyValue,\n rpId,\n userHandle,\n counter,\n rpName,\n userDisplayName,\n discoverable,\n creationDate,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FieldType, LinkedIdType } from \"../../../enums\";\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/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 \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/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 \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/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\";\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/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 \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\nimport { LoginData } from \"../data/login.data\";\nimport { LoginView } from \"../view/login.view\";\n\nimport { Fido2Credential } from \"./fido2-credential\";\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 fido2Credentials: Fido2Credential[];\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 if (obj.fido2Credentials) {\n this.fido2Credentials = obj.fido2Credentials.map((key) => new Fido2Credential(key));\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 if (this.fido2Credentials != null) {\n view.fido2Credentials = await Promise.all(\n this.fido2Credentials.map((key) => key.decrypt(orgId, encKey))\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 if (this.fido2Credentials != null && this.fido2Credentials.length > 0) {\n l.fido2Credentials = this.fido2Credentials.map((key) => key.toFido2CredentialData());\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 const fido2Credentials =\n obj.fido2Credentials?.map((key) => Fido2Credential.fromJSON(key)) ?? [];\n\n return Object.assign(new Login(), obj, {\n username,\n password,\n totp,\n passwordRevisionDate,\n uris,\n fido2Credentials,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { EncString } from \"../../../platform/models/domain/enc-string\";\nimport { SymmetricCryptoKey } from \"../../../platform/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\";\nimport Domain from \"../../../platform/models/domain/domain-base\";\nimport { SymmetricCryptoKey } from \"../../../platform/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 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 { Fido2CredentialApi } from \"../../api/fido2-credential.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 key: string;\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 this.key = cipher.key?.encryptedString;\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\n if (cipher.login.fido2Credentials != null) {\n this.login.fido2Credentials = cipher.login.fido2Credentials.map((key) => {\n const keyApi = new Fido2CredentialApi();\n keyApi.credentialId =\n key.credentialId != null ? key.credentialId.encryptedString : null;\n keyApi.keyType =\n key.keyType != null ? (key.keyType.encryptedString as \"public-key\") : null;\n keyApi.keyAlgorithm =\n key.keyAlgorithm != null ? (key.keyAlgorithm.encryptedString as \"ECDSA\") : null;\n keyApi.keyCurve =\n key.keyCurve != null ? (key.keyCurve.encryptedString as \"P-256\") : null;\n keyApi.keyValue = key.keyValue != null ? key.keyValue.encryptedString : null;\n keyApi.rpId = key.rpId != null ? key.rpId.encryptedString : null;\n keyApi.rpName = key.rpName != null ? key.rpName.encryptedString : null;\n keyApi.counter = key.counter != null ? key.counter.encryptedString : null;\n keyApi.userHandle = key.userHandle != null ? key.userHandle.encryptedString : null;\n keyApi.userDisplayName =\n key.userDisplayName != null ? key.userDisplayName.encryptedString : null;\n keyApi.discoverable =\n key.discoverable != null ? key.discoverable.encryptedString : null;\n keyApi.creationDate = key.creationDate != null ? key.creationDate.toISOString() : null;\n return keyApi;\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 { SelectionReadOnlyRequest } from \"../../../admin-console/models/request/selection-read-only.request\";\nimport { Collection } from \"../domain/collection\";\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 { 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 { 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 key: string;\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 this.key = this.getResponseProperty(\"Key\") || null;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { View } from \"../../../models/view/view\";\nimport { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\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\";\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 // ref https://stackoverflow.com/a/5911300\n static getCardBrandByPatterns(cardNum: string): string {\n if (cardNum == null || typeof cardNum !== \"string\" || cardNum.trim() === \"\") {\n return null;\n }\n\n // Visa\n let re = new RegExp(\"^4\");\n if (cardNum.match(re) != null) {\n return \"Visa\";\n }\n\n // Mastercard\n // Updated for Mastercard 2017 BINs expansion\n if (\n /^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(\n cardNum\n )\n ) {\n return \"Mastercard\";\n }\n\n // AMEX\n re = new RegExp(\"^3[47]\");\n if (cardNum.match(re) != null) {\n return \"Amex\";\n }\n\n // Discover\n re = new RegExp(\n \"^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)\"\n );\n if (cardNum.match(re) != null) {\n return \"Discover\";\n }\n\n // Diners\n re = new RegExp(\"^36\");\n if (cardNum.match(re) != null) {\n return \"Diners Club\";\n }\n\n // Diners - Carte Blanche\n re = new RegExp(\"^30[0-5]\");\n if (cardNum.match(re) != null) {\n return \"Diners Club\";\n }\n\n // JCB\n re = new RegExp(\"^35(2[89]|[3-8][0-9])\");\n if (cardNum.match(re) != null) {\n return \"JCB\";\n }\n\n // Visa Electron\n re = new RegExp(\"^(4026|417500|4508|4844|491(3|7))\");\n if (cardNum.match(re) != null) {\n return \"Visa\";\n }\n\n return null;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { LinkedIdType } from \"../../../enums\";\nimport { View } from \"../../../models/view/view\";\nimport { InitializerMetadata } from \"../../../platform/interfaces/initializer-metadata.interface\";\nimport { InitializerKey } from \"../../../platform/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 { Organization } from \"../../../admin-console/models/domain/organization\";\nimport { ITreeNodeObject } from \"../../../models/domain/tree-node\";\nimport { View } from \"../../../models/view/view\";\nimport { Collection } from \"../domain/collection\";\nimport { CollectionAccessDetailsResponse } from \"../response/collection.response\";\n\nexport const NestingDelimiter = \"/\";\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 applies to the items within a collection\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 // For editing collection details, not the items within it.\n canEdit(org: Organization): boolean {\n if (org.id !== this.organizationId) {\n throw new Error(\n \"Id of the organization provided does not match the org id of the collection.\"\n );\n }\n return org?.canEditAnyCollection || org?.canEditAssignedCollections;\n }\n\n // For deleting a collection, not the items within it.\n canDelete(org: Organization): boolean {\n if (org.id !== this.organizationId) {\n throw new Error(\n \"Id of the organization provided does not match the org id of the collection.\"\n );\n }\n return org?.canDeleteAnyCollection || org?.canDeleteAssignedCollections;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { ItemView } from \"./item.view\";\n\nexport class Fido2CredentialView extends ItemView {\n credentialId: string;\n keyType: \"public-key\";\n keyAlgorithm: \"ECDSA\";\n keyCurve: \"P-256\";\n keyValue: string;\n rpId: string;\n userHandle: string;\n counter: number;\n rpName: string;\n userDisplayName: string;\n discoverable: boolean;\n creationDate: Date = null;\n\n get subTitle(): string {\n return this.userDisplayName;\n }\n\n static fromJSON(obj: Partial>): Fido2CredentialView {\n const creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;\n return Object.assign(new Fido2CredentialView(), obj, {\n creationDate,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { FieldType, LinkedIdType } from \"../../../enums\";\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\";\nimport { linkedFieldOption } from \"../../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../../platform/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\";\nimport { View } from \"../../../models/view/view\";\nimport { Utils } from \"../../../platform/misc/utils\";\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 matchesUri(\n targetUri: string,\n equivalentDomains: Set,\n defaultUriMatch: UriMatchType = null\n ): boolean {\n if (!this.uri || !targetUri) {\n return false;\n }\n\n let matchType = this.match ?? defaultUriMatch;\n matchType ??= UriMatchType.Domain;\n\n const targetDomain = Utils.getDomain(targetUri);\n const matchDomains = equivalentDomains.add(targetDomain);\n\n switch (matchType) {\n case UriMatchType.Domain:\n return this.matchesDomain(targetUri, matchDomains);\n case UriMatchType.Host: {\n const urlHost = Utils.getHost(targetUri);\n return urlHost != null && urlHost === Utils.getHost(this.uri);\n }\n case UriMatchType.Exact:\n return targetUri === this.uri;\n case UriMatchType.StartsWith:\n return targetUri.startsWith(this.uri);\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(this.uri, \"i\");\n return regex.test(targetUri);\n } catch (e) {\n // Invalid regex\n return false;\n }\n case UriMatchType.Never:\n return false;\n default:\n break;\n }\n\n return false;\n }\n\n private matchesDomain(targetUri: string, matchDomains: Set) {\n if (targetUri == null || this.domain == null || !matchDomains.has(this.domain)) {\n return false;\n }\n\n if (Utils.DomainMatchBlacklist.has(this.domain)) {\n const domainUrlHost = Utils.getHost(targetUri);\n return !Utils.DomainMatchBlacklist.get(this.domain).has(domainUrlHost);\n }\n\n return true;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { LoginLinkedId as LinkedId, UriMatchType } from \"../../../enums\";\nimport { linkedFieldOption } from \"../../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../../platform/misc/utils\";\nimport { Login } from \"../domain/login\";\n\nimport { Fido2CredentialView } from \"./fido2-credential.view\";\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 fido2Credentials: Fido2CredentialView[] = 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 get hasFido2Credentials(): boolean {\n return this.fido2Credentials != null && this.fido2Credentials.length > 0;\n }\n\n matchesUri(\n targetUri: string,\n equivalentDomains: Set,\n defaultUriMatch: UriMatchType = null\n ): boolean {\n if (this.uris == null) {\n return false;\n }\n\n return this.uris.some((uri) => uri.matchesUri(targetUri, equivalentDomains, defaultUriMatch));\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 const fido2Credentials = obj.fido2Credentials?.map((key) => Fido2CredentialView.fromJSON(key));\n\n return Object.assign(new LoginView(), obj, {\n passwordRevisionDate,\n uris,\n fido2Credentials,\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\";\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 { 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 { Directive, HostListener, Input, OnDestroy, Optional } from \"@angular/core\";\nimport { BehaviorSubject, finalize, Subject, takeUntil, tap } from \"rxjs\";\n\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/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\") 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/platform/abstractions/log.service\";\nimport { ValidationService } from \"@bitwarden/common/platform/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\") handler: FunctionReturningAwaitable;\n\n @Input() allowDisabledFormSubmit?: boolean = false;\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 executes 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.pipe(takeUntil(this.destroy$)).subscribe((c) => {\n if (this.allowDisabledFormSubmit) {\n this._disabled$.next(false);\n } else {\n this._disabled$.next(c === \"DISABLED\");\n }\n });\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 * Note: you must use a directive that implements the ButtonLikeAbstraction (bitButton or bitIconButton for example)\n * along with this one in order to avoid provider errors.\n */\n@Directive({\n selector: \"button[bitFormButton]\",\n})\nexport class BitFormButtonDirective implements OnDestroy {\n private destroy$ = new Subject();\n\n @Input() type: string;\n @Input() disabled?: boolean;\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 if (this.disabled !== false) {\n buttonComponent.disabled = disabled;\n }\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/platform/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 \n {{ item }}\n \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 @Input() truncate = true;\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-block\",\n \"tw-py-0.5\",\n \"tw-px-1.5\",\n \"tw-font-bold\",\n \"tw-text-center\",\n \"tw-align-text-top\",\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 .concat(this.truncate ? [\"tw-truncate\", \"tw-max-w-40\"] : []);\n }\n @HostBinding(\"attr.title\") get title() {\n return this.truncate ? this.el.nativeElement.textContent.trim() : null;\n }\n\n @Input() badgeType: BadgeTypes = \"primary\";\n @Input() truncate = true;\n\n private hasHoverEffects = false;\n\n constructor(private 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\";\nimport { QueryParamsHandling } from \"@angular/router\";\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 @Input()\n queryParamsHandling?: QueryParamsHandling;\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 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","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","\n \n \n {{ title }}\n \n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/platform/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// Increments for each instance of this component\nlet nextId = 0;\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 protected titleId = `bit-callout-title-${nextId++}`;\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 { 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 { 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 \"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 \"checked:before:tw-bg-text-contrast\",\n \"checked:before:tw-mask-position-[center]\",\n \"checked:before:tw-mask-repeat-[no-repeat]\",\n \"checked:disabled:tw-border-secondary-100\",\n \"checked:disabled:tw-bg-secondary-100\",\n \"checked:disabled:before:tw-bg-text-muted\",\n\n \"[&:not(:indeterminate)]:checked:before:tw-mask-image-[var(--mask-image)]\",\n \"indeterminate:before:tw-mask-image-[var(--indeterminate-mask-image)]\",\n\n \"indeterminate:tw-bg-primary-500\",\n \"indeterminate:tw-border-primary-500\",\n \"indeterminate:hover:tw-bg-primary-700\",\n \"indeterminate:hover:tw-border-primary-700\",\n \"[&>label:hover]:indeterminate:tw-bg-primary-700\",\n \"[&>label:hover]:indeterminate:tw-border-primary-700\",\n \"indeterminate:before:tw-bg-text-contrast\",\n \"indeterminate:before:tw-mask-position-[center]\",\n \"indeterminate:before:tw-mask-repeat-[no-repeat]\",\n \"indeterminate:before:tw-mask-image-[var(--indeterminate-mask-image)]\",\n \"indeterminate:disabled:tw-border-secondary-100\",\n \"indeterminate:disabled:tw-bg-secondary-100\",\n \"indeterminate: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(\"style.--indeterminate-mask-image\")\n protected indeterminateImage = `url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" fill=\"none\" viewBox=\"0 0 13 13\"%3E%3Cpath stroke=\"%23fff\" stroke-width=\"2\" d=\"M2.5 6.5h8\"/%3E%3C/svg%3E%0A')`;\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/platform/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 preserveWhitespaces: false,\n})\nexport class ColorPasswordComponent {\n @Input() 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];\n\n if (this.showCount) {\n return charClass.concat([\n \"tw-inline-flex\",\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","import { DialogModule as CdkDialogModule } from \"@angular/cdk/dialog\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\n\nimport { AsyncActionsModule } from \"../async-actions\";\nimport { ButtonModule } from \"../button\";\nimport { IconButtonModule } from \"../icon-button\";\nimport { SharedModule } from \"../shared\";\n\nimport { DialogComponent } from \"./dialog/dialog.component\";\nimport { DialogService } from \"./dialog.service\";\nimport { DialogCloseDirective } from \"./directives/dialog-close.directive\";\nimport { DialogTitleContainerDirective } from \"./directives/dialog-title-container.directive\";\nimport { SimpleConfigurableDialogComponent } from \"./simple-dialog/simple-configurable-dialog/simple-configurable-dialog.component\";\nimport { IconDirective, SimpleDialogComponent } from \"./simple-dialog/simple-dialog.component\";\n\n@NgModule({\n imports: [\n SharedModule,\n AsyncActionsModule,\n ButtonModule,\n CdkDialogModule,\n IconButtonModule,\n ReactiveFormsModule,\n ],\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","\n \n \n\n {{ title }}\n\n
    {{ content }}
    \n\n \n \n\n \n {{ cancelButtonText }}\n \n \n
    \n\n","import { DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\nimport { SimpleDialogOptions, SimpleDialogType, Translation } from \"../..\";\n\nconst DEFAULT_ICON: Record = {\n primary: \"bwi-business\",\n success: \"bwi-star\",\n info: \"bwi-info-circle\",\n warning: \"bwi-exclamation-triangle\",\n danger: \"bwi-error\",\n};\n\nconst DEFAULT_COLOR: Record = {\n primary: \"tw-text-primary-500\",\n success: \"tw-text-success\",\n info: \"tw-text-info\",\n warning: \"tw-text-warning\",\n danger: \"tw-text-danger\",\n};\n\n@Component({\n templateUrl: \"./simple-configurable-dialog.component.html\",\n})\nexport class SimpleConfigurableDialogComponent {\n get iconClasses() {\n return [\n this.simpleDialogOpts.icon ?? DEFAULT_ICON[this.simpleDialogOpts.type],\n DEFAULT_COLOR[this.simpleDialogOpts.type],\n ];\n }\n\n protected title: string;\n protected content: string;\n protected acceptButtonText: string;\n protected cancelButtonText: string;\n protected formGroup = new FormGroup({});\n\n protected 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 protected accept = async () => {\n if (this.simpleDialogOpts.acceptAction) {\n await this.simpleDialogOpts.acceptAction();\n }\n\n this.dialogRef.close(true);\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, firstValueFrom, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\nimport { SimpleConfigurableDialogComponent } from \"./simple-dialog/simple-configurable-dialog/simple-configurable-dialog.component\";\nimport { SimpleDialogOptions, Translation } from \"./simple-dialog/types\";\n\n@Injectable()\nexport class DialogService extends Dialog implements OnDestroy {\n private _destroy$ = new Subject();\n\n private backDropClasses = [\"tw-fixed\", \"tw-bg-black\", \"tw-bg-opacity-30\", \"tw-inset-0\"];\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 protected i18nService: I18nService\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, returns true if the user accepted the dialog.\n *\n * @param {SimpleDialogOptions} simpleDialogOptions - An object containing options for the dialog.\n * @returns `boolean` - True if the user accepted the dialog, false otherwise.\n */\n async openSimpleDialog(simpleDialogOptions: SimpleDialogOptions): Promise {\n const dialogRef = this.open(SimpleConfigurableDialogComponent, {\n data: simpleDialogOptions,\n disableClose: simpleDialogOptions.disableClose,\n });\n\n return firstValueFrom(dialogRef.closed);\n }\n\n /**\n * Opens a simple dialog.\n *\n * @deprecated Use `openSimpleDialog` instead. If you find a use case for the `dialogRef`\n * please let #wg-component-library know and we can un-deprecate this method.\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\n */\n openSimpleDialogRef(simpleDialogOptions: SimpleDialogOptions): DialogRef {\n return this.open(SimpleConfigurableDialogComponent, {\n data: simpleDialogOptions,\n disableClose: simpleDialogOptions.disableClose,\n });\n }\n\n protected translate(translation: string | Translation, defaultKey?: string): string {\n if (translation == null && defaultKey == null) {\n return null;\n }\n\n if (translation == null) {\n return this.i18nService.t(defaultKey);\n }\n\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 return translation;\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 { 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 /**\n * Dialog size, more complex dialogs should use large, otherwise default is fine.\n */\n @Input() dialogSize: \"small\" | \"default\" | \"large\" = \"default\";\n\n private _disablePadding = false;\n /**\n * Disable the built-in padding on the dialog, for use with tabbed dialogs.\n */\n @Input() set disablePadding(value: boolean | \"\") {\n this._disablePadding = coerceBooleanProperty(value);\n }\n get disablePadding() {\n return this._disablePadding;\n }\n\n /**\n * Mark the dialog as loading which replaces the content with a spinner.\n */\n @Input() loading = false;\n\n @HostBinding(\"class\") get classes() {\n return [\"tw-flex\", \"tw-flex-col\", \"tw-max-h-screen\", \"tw-w-screen\", \"tw-p-4\"].concat(\n this.width\n );\n }\n\n get width() {\n switch (this.dialogSize) {\n case \"small\": {\n return \"tw-max-w-sm\";\n }\n case \"large\": {\n return \"tw-max-w-3xl\";\n }\n default: {\n return \"tw-max-w-xl\";\n }\n }\n }\n}\n","import { DialogRef } from \"@angular/cdk/dialog\";\nimport { Directive, HostBinding, HostListener, Input, Optional } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitDialogClose]\",\n})\nexport class DialogCloseDirective {\n @Input(\"bitDialogClose\") dialogResult: any;\n\n constructor(@Optional() public dialogRef: DialogRef) {}\n\n @HostBinding(\"attr.disabled\")\n get disableClose() {\n return this.dialogRef?.disableClose ? true : null;\n }\n\n @HostListener(\"click\")\n close(): void {\n if (this.disableClose) {\n return;\n }\n\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","\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: \"[bitDialogIcon]\" })\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/platform/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 | \"file\"\n | \"date\"\n | \"time\";\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/platform/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 \"min\":\n return this.i18nService.t(\"inputMinValue\", this.error[1]?.min);\n case \"max\":\n return this.i18nService.t(\"inputMaxValue\", this.error[1]?.max);\n case \"forbiddenCharacters\":\n return this.i18nService.t(\"inputForbiddenCharacters\", this.error[1]?.characters.join(\", \"));\n case \"multipleEmails\":\n return this.i18nService.t(\"multipleInputEmails\");\n case \"trim\":\n return this.i18nService.t(\"inputTrimValidator\");\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 { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n AfterContentChecked,\n Component,\n ContentChild,\n ContentChildren,\n HostBinding,\n Input,\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})\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 private _disableMargin = false;\n @Input() set disableMargin(value: boolean | \"\") {\n this._disableMargin = coerceBooleanProperty(value);\n }\n get disableMargin() {\n return this._disableMargin;\n }\n\n @HostBinding(\"class\")\n get classList() {\n return [\"tw-block\"].concat(this.disableMargin ? [] : [\"tw-mb-6\"]);\n }\n\n ngAfterContentChecked(): void {\n if (this.error) {\n this.input.ariaDescribedBy = this.error.id;\n } else if (this.hint) {\n this.input.ariaDescribedBy = this.hint.id;\n } else {\n this.input.ariaDescribedBy = undefined;\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { 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/platform/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, SafeHtml } 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() set icon(icon: Icon) {\n if (!isIcon(icon)) {\n this.innerHtml = \"\";\n return;\n }\n\n const svg = icon.svg;\n this.innerHtml = this.domSanitizer.bypassSecurityTrustHtml(svg);\n }\n\n @HostBinding() innerHtml: SafeHtml;\n\n constructor(private domSanitizer: DomSanitizer) {}\n}\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","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 \"[&:is(input,textarea):read-only]: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 @Input() showErrorsWhenDisabled? = false;\n\n get labelForId(): string {\n return this.id;\n }\n\n @HostListener(\"input\")\n onInput() {\n this.ngControl?.control?.markAsUntouched();\n }\n\n get hasError() {\n if (this.showErrorsWhenDisabled) {\n return (\n (this.ngControl?.status === \"INVALID\" || this.ngControl?.status === \"DISABLED\") &&\n this.ngControl?.touched &&\n this.ngControl?.errors != null\n );\n } else {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\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 { 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 { 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-text-unset\",\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: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 ([\"Tab\", \"Escape\"].includes(event?.key)) {\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","\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 { hasModifierKey } from \"@angular/cdk/keycodes\";\nimport {\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/platform/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 /** Function for customizing keyboard navigation */\n /** Needs to be arrow function to retain `this` scope. */\n keyDown = (event: KeyboardEvent) => {\n if (!this.select.isOpen && event.key === \"Enter\" && !hasModifierKey(event)) {\n return false;\n }\n\n if (this.select.isOpen && event.key === \"Escape\" && !hasModifierKey(event)) {\n this.selectedItems = [];\n this.select.close();\n event.stopPropagation();\n return false;\n }\n\n return true;\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 { 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 { Component, Input } from \"@angular/core\";\n\nimport { Icons } from \"..\";\n\n/**\n * Component for displaying a message when there are no items to display. Expects title, description and button slots.\n */\n@Component({\n selector: \"bit-no-items\",\n templateUrl: \"./no-items.component.html\",\n})\nexport class NoItemsComponent {\n @Input() icon = Icons.Search;\n}\n","\n
    \n \n

    \n \n

    \n

    \n \n

    \n
    \n
    \n \n
    \n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { IconModule } from \"../icon\";\n\nimport { NoItemsComponent } from \"./no-items.component\";\n\n@NgModule({\n imports: [CommonModule, IconModule],\n exports: [NoItemsComponent],\n declarations: [NoItemsComponent],\n})\nexport class NoItemsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ProgressComponent } from \"./progress.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ProgressComponent],\n declarations: [ProgressComponent],\n})\nexport class ProgressModule {}\n","import { Component, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormControlAbstraction } from \"../form-control\";\n\nlet nextId = 0;\n\n@Component({\n selector: \"input[type=radio][bitRadio]\",\n template: \"\",\n providers: [{ provide: BitFormControlAbstraction, useExisting: RadioInputComponent }],\n})\nexport class RadioInputComponent implements BitFormControlAbstraction {\n @HostBinding(\"attr.id\") @Input() id = `bit-radio-input-${nextId++}`;\n\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-full\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-w-3.5\",\n \"tw-h-3.5\",\n \"tw-mr-1.5\",\n \"tw-bottom-[-1px]\", // Fix checkbox looking off-center\n\n \"hover:tw-border-2\",\n \"[&>label:hover]:tw-border-2\",\n\n \"before:tw-content-['']\",\n \"before:tw-transition\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:tw-rounded-full\",\n \"before:tw-inset-[2px]\",\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-text-contrast\",\n \"checked:tw-border-primary-500\",\n\n \"checked:hover:tw-border\",\n \"checked:hover:tw-border-primary-700\",\n \"checked:hover:before:tw-bg-primary-700\",\n \"[&>label:hover]:checked:tw-bg-primary-700\",\n \"[&>label:hover]:checked:tw-border-primary-700\",\n\n \"checked:before:tw-bg-primary-500\",\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()\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 { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { RadioGroupComponent } from \"./radio-group.component\";\n\nlet nextId = 0;\n\n@Component({\n selector: \"bit-radio-button\",\n templateUrl: \"radio-button.component.html\",\n})\nexport class RadioButtonComponent {\n @HostBinding(\"attr.id\") @Input() id = `bit-radio-button-${nextId++}`;\n @Input() value: unknown;\n @Input() disabled = false;\n\n constructor(private groupComponent: RadioGroupComponent) {}\n\n get inputId() {\n return `${this.id}-input`;\n }\n\n get name() {\n return this.groupComponent.name;\n }\n\n get selected() {\n return this.groupComponent.selected === this.value;\n }\n\n get groupDisabled() {\n return this.groupComponent.disabled;\n }\n\n protected onInputChange() {\n this.groupComponent.onInputChange(this.value);\n }\n\n protected onBlur() {\n this.groupComponent.onBlur();\n }\n}\n","\n \n \n \n\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","\n
    \n \n \n \n \n
    \n
    \n\n\n \n\n\n\n","import { Component, ContentChild, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\n\nimport { BitLabel } from \"../form-control/label.directive\";\n\nlet nextId = 0;\n\n@Component({\n selector: \"bit-radio-group\",\n templateUrl: \"radio-group.component.html\",\n})\nexport class RadioGroupComponent implements ControlValueAccessor {\n selected: unknown;\n disabled = false;\n\n private _name?: string;\n @Input() get name() {\n return this._name ?? this.ngControl?.name?.toString();\n }\n set name(value: string) {\n this._name = value;\n }\n\n @HostBinding(\"attr.role\") role = \"radiogroup\";\n @HostBinding(\"attr.id\") @Input() id = `bit-radio-group-${nextId++}`;\n\n @ContentChild(BitLabel) protected label: BitLabel;\n\n constructor(@Optional() @Self() private ngControl?: NgControl) {\n if (ngControl != null) {\n ngControl.valueAccessor = this;\n }\n }\n\n // ControlValueAccessor\n onChange: (value: unknown) => void;\n onTouched: () => void;\n\n writeValue(value: boolean): void {\n this.selected = value;\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onInputChange(value: unknown) {\n this.selected = value;\n this.onChange(this.selected);\n }\n\n onBlur() {\n this.onTouched();\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nlet nextId = 0;\n\n@Component({\n selector: \"bit-search\",\n templateUrl: \"./search.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: SearchComponent,\n },\n ],\n})\nexport class SearchComponent implements ControlValueAccessor {\n private notifyOnChange: (v: string) => void;\n private notifyOnTouch: () => void;\n\n protected id = `search-id-${nextId++}`;\n protected searchText: string;\n\n @Input() disabled: boolean;\n @Input() placeholder: string;\n\n onChange(searchText: string) {\n if (this.notifyOnChange != undefined) {\n this.notifyOnChange(searchText);\n }\n }\n\n onTouch() {\n if (this.notifyOnTouch != undefined) {\n this.notifyOnTouch();\n }\n }\n\n registerOnChange(fn: (v: string) => void): void {\n this.notifyOnChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.notifyOnTouch = fn;\n }\n\n writeValue(searchText: string): void {\n this.searchText = searchText;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n}\n","\n
    \n \n \n \n \n
    \n","import { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { InputModule } from \"../input/input.module\";\nimport { SharedModule } from \"../shared\";\n\nimport { SearchComponent } from \"./search.component\";\n\n@NgModule({\n imports: [SharedModule, InputModule, FormsModule],\n declarations: [SearchComponent],\n exports: [SearchComponent],\n})\nexport class SearchModule {}\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/platform/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 { 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","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/platform/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 { Directive, HostBinding } from \"@angular/core\";\n\n@Directive({\n selector: \"th[bitCell], td[bitCell]\",\n})\nexport class CellDirective {\n @HostBinding(\"class\") get classList() {\n return [\"tw-p-3\"];\n }\n}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"tr[bitRow]\",\n})\nexport class RowDirective {\n @Input() alignContent: \"top\" | \"middle\" | \"bottom\" | \"baseline\" = \"middle\";\n\n get alignmentClass(): string {\n switch (this.alignContent) {\n case \"top\":\n return \"tw-align-top\";\n case \"middle\":\n return \"tw-align-middle\";\n case \"bottom\":\n return \"tw-align-bottom\";\n default:\n return \"tw-align-baseline\";\n }\n }\n\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-border-0\",\n \"tw-border-b\",\n \"tw-border-secondary-300\",\n \"tw-border-solid\",\n \"hover:tw-bg-background-alt\",\n \"last:tw-border-0\",\n this.alignmentClass,\n ];\n }\n}\n","import { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Component, HostBinding, Input, OnInit } from \"@angular/core\";\n\nimport type { SortFn } from \"./table-data-source\";\nimport { TableComponent } from \"./table.component\";\n\n@Component({\n selector: \"th[bitSortable]\",\n template: `\n \n `,\n})\nexport class SortableComponent implements OnInit {\n /**\n * Mark the column as sortable and specify the key to sort by\n */\n @Input() bitSortable: string;\n\n private _default: boolean;\n /**\n * Mark the column as the default sort column\n */\n @Input() set default(value: boolean | \"\") {\n this._default = coerceBooleanProperty(value);\n }\n\n /**\n * Custom sorting function\n *\n * @example\n * fn = (a, b) => a.name.localeCompare(b.name)\n */\n @Input() fn: SortFn;\n\n constructor(private table: TableComponent) {}\n\n ngOnInit(): void {\n if (this._default && !this.isActive) {\n this.setActive();\n }\n }\n\n @HostBinding(\"attr.aria-sort\") get ariaSort() {\n if (!this.isActive) {\n return undefined;\n }\n return this.sort.direction === \"asc\" ? \"ascending\" : \"descending\";\n }\n\n protected setActive() {\n if (this.table.dataSource) {\n const direction = this.isActive && this.direction === \"asc\" ? \"desc\" : \"asc\";\n this.table.dataSource.sort = { column: this.bitSortable, direction: direction, fn: this.fn };\n }\n }\n\n private get sort() {\n return this.table.dataSource?.sort;\n }\n\n get isActive() {\n return this.sort?.column === this.bitSortable;\n }\n\n get direction() {\n return this.sort?.direction;\n }\n\n get icon() {\n if (!this.isActive) {\n return \"bwi-up-down-btn\";\n }\n return this.direction === \"asc\" ? \"bwi-up-solid\" : \"bwi-down-solid\";\n }\n\n get classList() {\n return [\n \"tw-group\",\n \"tw-min-w-max\",\n\n // Offset to border and padding\n \"-tw-m-1.5\",\n \"tw-font-bold\",\n\n // Below is copied from BitIconButtonComponent\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 \"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\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 }\n}\n","import { _isNumberValue } from \"@angular/cdk/coercion\";\nimport { DataSource } from \"@angular/cdk/collections\";\nimport { BehaviorSubject, combineLatest, map, Observable, Subscription } from \"rxjs\";\n\nexport type SortDirection = \"asc\" | \"desc\";\nexport type SortFn = (a: any, b: any) => number;\nexport type Sort = {\n column?: string;\n direction: SortDirection;\n fn?: SortFn;\n};\n\n// Loosely based on CDK TableDataSource\n// https://github.com/angular/components/blob/main/src/material/table/table-data-source.ts\nexport class TableDataSource extends DataSource {\n private readonly _data: BehaviorSubject;\n private readonly _sort: BehaviorSubject;\n private readonly _filter = new BehaviorSubject(\"\");\n private readonly _renderData = new BehaviorSubject([]);\n private _renderChangesSubscription: Subscription | null = null;\n\n /**\n * The filtered set of data that has been matched by the filter string, or all the data if there\n * is no filter. Useful for knowing the set of data the table represents.\n * For example, a 'selectAll()' function would likely want to select the set of filtered data\n * shown to the user rather than all the data.\n */\n filteredData: T[];\n\n constructor() {\n super();\n this._data = new BehaviorSubject([]);\n this._sort = new BehaviorSubject({ direction: \"asc\" });\n }\n\n get data() {\n return this._data.value;\n }\n\n set data(data: T[]) {\n data = Array.isArray(data) ? data : [];\n this._data.next(data);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this.filterData(data);\n }\n }\n\n set sort(sort: Sort) {\n this._sort.next(sort);\n }\n\n get sort() {\n return this._sort.value;\n }\n\n get filter() {\n return this._filter.value;\n }\n\n set filter(filter: string) {\n this._filter.next(filter);\n // Normally the `filteredData` is updated by the re-render\n // subscription, but that won't happen if it's inactive.\n if (!this._renderChangesSubscription) {\n this.filterData(this.data);\n }\n }\n\n connect(): Observable {\n if (!this._renderChangesSubscription) {\n this.updateChangeSubscription();\n }\n\n return this._renderData;\n }\n\n disconnect(): void {\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = null;\n }\n\n private updateChangeSubscription() {\n const filteredData = combineLatest([this._data, this._filter]).pipe(\n map(([data]) => this.filterData(data))\n );\n\n const orderedData = combineLatest([filteredData, this._sort]).pipe(\n map(([data, sort]) => this.orderData(data, sort))\n );\n\n this._renderChangesSubscription?.unsubscribe();\n this._renderChangesSubscription = orderedData.subscribe((data) => this._renderData.next(data));\n }\n\n private filterData(data: T[]): T[] {\n this.filteredData =\n this.filter == null || this.filter === \"\"\n ? data\n : data.filter((obj) => this.filterPredicate(obj, this.filter));\n\n return this.filteredData;\n }\n\n private orderData(data: T[], sort: Sort): T[] {\n if (!sort) {\n return data;\n }\n\n return this.sortData(data, sort);\n }\n\n /**\n * Copied from https://github.com/angular/components/blob/main/src/material/table/table-data-source.ts\n * License: MIT\n * Copyright (c) 2022 Google LLC.\n *\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n protected sortingDataAccessor(data: T, sortHeaderId: string): string | number {\n const value = (data as unknown as Record)[sortHeaderId];\n\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n\n return numberValue < Number.MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n return value;\n }\n\n /**\n * Copied from https://github.com/angular/components/blob/main/src/material/table/table-data-source.ts\n * License: MIT\n * Copyright (c) 2022 Google LLC.\n *\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n protected sortData(data: T[], sort: Sort): T[] {\n const column = sort.column;\n const directionModifier = sort.direction === \"asc\" ? 1 : -1;\n if (!column) {\n return data;\n }\n\n return data.sort((a, b) => {\n // If a custom sort function is provided, use it instead of the default.\n if (sort.fn) {\n return sort.fn(a, b) * directionModifier;\n }\n\n let valueA = this.sortingDataAccessor(a, column);\n let valueB = this.sortingDataAccessor(b, column);\n\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n\n if (valueAType !== valueBType) {\n if (valueAType === \"number\") {\n valueA += \"\";\n }\n if (valueBType === \"number\") {\n valueB += \"\";\n }\n }\n\n if (typeof valueA === \"string\" && typeof valueB === \"string\") {\n return valueA.localeCompare(valueB) * directionModifier;\n }\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * directionModifier;\n });\n }\n\n /**\n * Copied from https://github.com/angular/components/blob/main/src/material/table/table-data-source.ts\n * License: MIT\n * Copyright (c) 2022 Google LLC.\n *\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n protected filterPredicate(data: T, filter: string): boolean {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data as unknown as Record)\n .reduce((currentTerm: string, key: string) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + (data as unknown as Record)[key] + \"◬\";\n }, \"\")\n .toLowerCase();\n\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n\n return dataStr.indexOf(transformedFilter) != -1;\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 @Input() layout: \"auto\" | \"fixed\" = \"auto\";\n\n @ContentChild(TableBodyDirective) templateVariable: TableBodyDirective;\n\n protected rows: Observable;\n\n private _initialized = false;\n\n get tableClass() {\n return [\n \"tw-w-full\",\n \"tw-leading-normal\",\n \"tw-text-main\",\n \"tw-border-collapse\",\n \"tw-text-start\",\n this.layout === \"auto\" ? \"tw-table-auto\" : \"tw-table-fixed\",\n ];\n }\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 { 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 { 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