{"version":3,"file":"app/main.879186d1f7548594844e.js","mappings":"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GT,IACE,OAAe,MAAXvC,EACK,IAAIA,EAAQrzH,IAAI00H,GAGlB,IAAI10H,IAAI00H,E,CACf,MAAOvxK,G,CAIT,OAAO,IACT,EAhiBO,EAAA+3F,QAAS,EACT,EAAAp3C,QAAS,EACT,EAAAC,WAAY,EACZ,EAAAi0D,iBAAkB,EAClB,EAAA07D,sBAAuB,EACvB,EAAAn0F,OAAwB,KAExB,EAAAs2F,wBACL,02BACc,EAAAlB,WAAuB,CAAC,aACxB,EAAAh2K,sBAAwB,GACxB,EAAAm3K,qBAAuB,IAAIzzK,IAAyB,CAClE,CAAC,aAAc,IAAIi4F,IAAI,CAAC,yBAuhB5Bg5E,EAAMvvI,M,gDC1jBC,MAAMgyI,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,MAAM9gD,EACT1lD,iBACR9J,EACAuwG,EACA59K,EACA69K,EAAoB,IAEpB,IAAK,MAAM9vI,KAAQ/tC,EAAK,CAEtB,IAAKA,EAAI2iB,eAAeorB,GACtB,SAGF,MAAM+vI,EAAUF,EAAQ59K,EAAI+tC,IAASA,GACjC8vI,EAAW/mJ,QAAQiX,IAAS,EAC7Bs/B,EAAet/B,GAAQ+vI,GAAoB,KAE3CzwG,EAAet/B,GAAQ+vI,EAAU,IAAI,IAAUA,GAAW,I,CAGjE,CACUC,eACR1wG,EACAuwG,EACA59K,EACAg+K,EAA0B,IAE1B,IAAK,MAAMjwI,KAAQ/tC,EAAK,CAEtB,IAAKA,EAAI2iB,eAAeorB,GACtB,SAGF,MAAM+vI,EAAWzwG,EAAertE,EAAI+tC,IAASA,GACzCiwI,EAAiBlnJ,QAAQiX,IAAS,EACnC6vI,EAAgB7vI,GAAmB,MAAX+vI,EAAkBA,EAAU,KAEpDF,EAAgB7vI,GAAmB,MAAX+vI,EAAmBA,EAAsBrxJ,gBAAkB,I,CAG1F,CAEgB+qD,WACdymG,EACAj+K,EACAgB,EACAuS,EAA0B,M,yCAE1B,MAAM/P,EAAW,GACXy3E,EAAYj8E,KAElB,IAAK,MAAM+uC,KAAQ/tC,EAEZA,EAAI2iB,eAAeorB,IAIxB,SAAWu0C,GACT,MAAMvpE,EAAIjV,QAAQ4B,UACfkJ,MAAK,KACJ,MAAMsvK,EAAUl+K,EAAIsiF,IAAYA,EAChC,OAAIrH,EAAKijG,GACAjjG,EAAKijG,GAAS9kI,QAAQp4C,EAAOuS,GAE/B,IAAI,IAEZ3E,MAAM4B,IACJytK,EAAkB37F,GAAW9xE,CAAG,IAErChN,EAASvE,KAAK8Z,EACf,CAbD,CAaGg1B,GAIL,aADMjqC,QAAQC,IAAIP,GACXy6K,CACT,G,kXCxEK,MAAME,EAMX9+K,YAAqB8rC,GAAA,KAAAA,OAAAA,EALZ,KAAAia,eAAiC,KACjC,KAAA0B,UAAyB,KACzB,KAAAD,QAAuB,KACvB,KAAAD,SAAwB,KAG/B,MAAM1E,EAAW,IAAI0B,WAAWzY,GAC1BqX,EAAUN,EAAS,GAEzB,OAAQM,GACN,KAAK,KAAe2E,yBACpB,KAAK,KAAe7B,yBAA0B,CAC5C,MAAMq5F,EAAgBy/B,GAClBl8H,EAASv1C,OAASgyI,GACpB3/I,KAAKq/K,uBAGPr/K,KAAK6nD,QAAU3E,EAASlwC,MAvBR,EAuB+BosK,IAA6BjzI,OAC5EnsC,KAAK4nD,SAAW1E,EAASlwC,MACvBosK,GACAA,IACAjzI,OACFnsC,KAAK8nD,UAAY5E,EAASlwC,MAAMosK,IAA0CjzI,OAC1E,K,CAEF,KAAK,KAAeka,cAAe,CACjC,MAAMs5F,EAAgBy/B,GAClBl8H,EAASv1C,OAASgyI,GACpB3/I,KAAKq/K,uBAGPr/K,KAAK6nD,QAAU3E,EAASlwC,MArCR,EAqC+BosK,IAA6BjzI,OAC5EnsC,KAAK8nD,UAAY5E,EAASlwC,MAAMosK,IAA6BjzI,OAC7D,K,CAEF,QACEnsC,KAAKq/K,uBAGTr/K,KAAKomD,eAAiB5C,CACxB,CAEQ67H,uBACN,MAAM,IAAI11K,MACR,mFAEJ,CAEAvI,oBAA0Bd,G,yCAGxB,MAAM6rC,QAAe7rC,EAASg/K,cAC9B,GAAc,MAAVnzI,EACF,MAAM,IAAIxiC,MAAM,kEAElB,OAAO,IAAIw1K,EAAehzI,EAC5B,G,CAEA/qC,eAAem+K,GACb,MAAMpzI,EAAS,IAAM+Q,eAAeqiI,GAAKpzI,OACzC,OAAO,IAAIgzI,EAAehzI,EAC5B,E,gXC/DK,MAAMqzI,EAQXn/K,YACEo/K,EACAj9K,EACAukD,EACAC,GAEY,MAARxkD,EACFxC,KAAK0/K,aAAaD,EAAyCj9K,EAAMukD,EAAIC,GAErEhnD,KAAK2/K,wBAAwBF,EAEjC,CAEI53H,cACF,OAAkB,MAAX7nD,KAAK+mD,GAAa,KAAO,IAAM7J,eAAel9C,KAAK+mD,IAAI5a,MAChE,CAEIyb,eACF,OAAmB,MAAZ5nD,KAAKgnD,IAAc,KAAO,IAAM9J,eAAel9C,KAAKgnD,KAAK7a,MAClE,CAEI2b,gBACF,OAAoB,MAAb9nD,KAAKwC,KAAe,KAAO,IAAM06C,eAAel9C,KAAKwC,MAAM2pC,MACpE,CAEAvB,SACE,OAAO5qC,KAAKytB,eACd,CAEArsB,gBAAgBgU,GACd,OAAW,MAAPA,EACK,KAGF,IAAIoqK,EAAUpqK,EACvB,CAEQsqK,aAAal8H,EAAyBhhD,EAAcukD,EAAYC,GAEpEhnD,KAAKytB,gBADG,MAANs5B,EACqBvD,EAAU,IAAMuD,EAAK,IAAMvkD,EAE3BghD,EAAU,IAAMhhD,EAI9B,MAAPwkD,IACFhnD,KAAKytB,iBAAmB,IAAMu5B,GAGhChnD,KAAKomD,eAAiB5C,EACtBxjD,KAAKwC,KAAOA,EACZxC,KAAK+mD,GAAKA,EACV/mD,KAAKgnD,IAAMA,CACb,CAEQ24H,wBAAwBlyJ,GAE9B,GADAztB,KAAKytB,gBAAkBA,GAClBztB,KAAKytB,gBACR,OAGF,MAAM,QAAE+1B,EAAO,UAAED,GAAci8H,EAAUI,qBAAqB5/K,KAAKytB,iBAGnE,GAFAztB,KAAKomD,eAAiB5C,EAElBD,EAAU51C,SAAW,KAAsC61C,GAI/D,OAAQA,GACN,KAAK,KAAe2E,yBACpB,KAAK,KAAe7B,yBAClBtmD,KAAK+mD,GAAKxD,EAAU,GACpBvjD,KAAKwC,KAAO+gD,EAAU,GACtBvjD,KAAKgnD,IAAMzD,EAAU,GACrB,MACF,KAAK,KAAe8C,cAClBrmD,KAAK+mD,GAAKxD,EAAU,GACpBvjD,KAAKwC,KAAO+gD,EAAU,GACtB,MACF,KAAK,KAAeE,uBACpB,KAAK,KAAeN,qBAClBnjD,KAAKwC,KAAO+gD,EAAU,GACtB,MACF,QACE,OAEN,CAEQniD,4BAA4BqsB,GAIlC,MAAM61B,EAAe71B,EAAgBkoB,MAAM,KAC3C,IAAI6N,EACAD,EAAsB,KAE1B,GAA4B,IAAxBD,EAAa31C,OACf,IACE61C,EAAUxU,SAASsU,EAAa,GAAI,MACpCC,EAAYD,EAAa,GAAG3N,MAAM,I,CAClC,MAAO5pC,GACP,M,MAGFw3C,EAAY91B,EAAgBkoB,MAAM,KAClC6N,EACuB,IAArBD,EAAU51C,OACN,KAAew6C,yBACf,KAAe9B,cAGvB,MAAO,CACL7C,UACAD,YAEJ,CAEAniD,6BAA6Bqe,GAC3B,MAAM,QAAE+jC,EAAO,UAAED,GAAcvjD,KAAK4/K,qBAAqBngK,GAEzD,OAAO,KAAsC+jC,KAAaD,EAAU51C,MACtE,CAEMysC,QAAQp4C,EAAeuS,EAA0B,M,yCACrD,GAA2B,MAAvBvU,KAAK6/K,eACP,OAAO7/K,KAAK6/K,eAGd,IAIE,GAHW,MAAPtrK,IACFA,QAAYvU,KAAK8/K,oBAAoB99K,IAE5B,MAAPuS,EACF,MAAM,IAAI5K,MAAM,0CAA4C3H,GAG9D,MAAMu5C,EAAiB,IAAM88B,sBAAsBynC,oBACnD9/G,KAAK6/K,qBAAuBtkI,EAAewI,cAAc/jD,KAAMuU,E,CAC/D,MAAOxI,GACP/L,KAAK6/K,eAAiB,yB,CAExB,OAAO7/K,KAAK6/K,cACd,G,CAEcC,oBAAoB99K,G,yCAChC,MAAMknB,EAAgB,IAAMmvD,sBAAsBC,mBAClD,OAAgB,MAATt2E,QACGknB,EAAc2F,UAAU7sB,SACxBknB,EAAc25B,yBAC1B,G,4EChKK,MAAMk9H,EAYX1/K,YAAYkU,EAAkBivC,GAC5B,GAAW,MAAPjvC,EACF,MAAM,IAAI5K,MAAM,oBAGlB,GAAe,MAAX65C,EACF,GAAuB,KAAnBjvC,EAAIyxC,WACNxC,EAAU,KAAe6C,kBACpB,IAAuB,KAAnB9xC,EAAIyxC,WAGb,MAAM,IAAIr8C,MAAM,gCAFhB65C,EAAU,KAAe8C,wB,CAS7B,GAHAtmD,KAAKuU,IAAMA,EACXvU,KAAKwjD,QAAUA,EAEXA,IAAY,KAAe6C,eAAoC,KAAnB9xC,EAAIyxC,WAClDhmD,KAAK47C,OAASrnC,EACdvU,KAAKqlD,OAAS,UACT,GAAI7B,IAAY,KAAe2E,0BAA+C,KAAnB5zC,EAAIyxC,WACpEhmD,KAAK47C,OAASrnC,EAAIvB,MAAM,EAAG,IAC3BhT,KAAKqlD,OAAS9wC,EAAIvB,MAAM,GAAI,QACvB,IAAIwwC,IAAY,KAAe8C,0BAA+C,KAAnB/xC,EAAIyxC,WAIpE,MAAM,IAAIr8C,MAAM,mCAHhB3J,KAAK47C,OAASrnC,EAAIvB,MAAM,EAAG,IAC3BhT,KAAKqlD,OAAS9wC,EAAIvB,MAAM,GAAI,G,CAKd,MAAZhT,KAAKuU,MACPvU,KAAK+kD,OAAS,IAAM3C,gBAAgBpiD,KAAKuU,MAExB,MAAfvU,KAAK47C,SACP57C,KAAK4pG,UAAY,IAAMxnD,gBAAgBpiD,KAAK47C,SAE3B,MAAf57C,KAAKqlD,SACPrlD,KAAK6pG,UAAY,IAAMznD,gBAAgBpiD,KAAKqlD,QAEhD,CAEAza,SAEE,MAAO,CAAEma,OAAQ/kD,KAAK+kD,OACxB,CAEA3jD,kBAAkBqe,GAChB,GAAS,MAALA,EACF,OAAO,KAGT,MAAM6/J,EAAc,IAAMpiI,eAAez9B,GAAG0sB,OAC5C,OAAO,IAAI4zI,EAAmBT,EAChC,CAEAl+K,gBAAgBgU,GACd,OAAO2qK,EAAmBC,WAAW5qK,aAAG,EAAHA,EAAK2vC,OAC5C,E,+DCxEK,MAAMk7H,EAGX5/K,YACYmkH,EACA9zG,EAA2C,MAD3C,KAAA8zG,MAAAA,EACA,KAAA9zG,OAAAA,EAJF,KAAAwvK,UAA2C,IAAIj1K,GAKtD,CAEH+5G,MAAM54G,GACCpM,KAAKwkH,OAGVxkH,KAAKof,MAAM,KAAa+gK,MAAO/zK,EACjC,CAEAq8C,KAAKr8C,GACHpM,KAAKof,MAAM,KAAaq1G,KAAMroH,EAChC,CAEAgxC,QAAQhxC,GACNpM,KAAKof,MAAM,KAAaghK,QAASh0K,EACnC,CAEAI,MAAMJ,GACJpM,KAAKof,MAAM,KAAazV,MAAOyC,EACjC,CAEAgT,MAAMihK,EAAqBj0K,GACzB,GAAmB,MAAfpM,KAAK0Q,SAAkB1Q,KAAK0Q,OAAO2vK,GAIvC,OAAQA,GACN,KAAK,KAAaF,MAIlB,KAAK,KAAa1rD,KAEhBxzG,QAAQC,IAAI9U,GACZ,MACF,KAAK,KAAag0K,QAEhBn/J,QAAQgkG,KAAK74G,GACb,MACF,KAAK,KAAazC,MAEhBsX,QAAQzU,MAAMJ,GAKpB,E,+BCvDF,IAAYk0K,E,iBAAZ,SAAYA,GACV,uBACA,8BACD,CAHD,CAAYA,IAAAA,EAAc,I,mECKnB,MAAeC,G,0BCHf,MAAMC,UAAuC,IAApD,c,oBACE,KAAAj4K,YAAc,GACd,KAAAd,UAAY,EACZ,KAAAg5K,cAAe,EACf,KAAAC,cAAe,EACf,KAAAh4K,YAAa,EACb,KAAAi4K,YAAc,EACd,KAAAh4K,YAAa,EACb,KAAAi4K,aAAe,EACf,KAAA93K,eAAiB,EACjB,KAAAC,YAAa,EACb,KAAAC,eAAgB,CAiBlB,CAfE63K,WACE,MACuB,KAArB7gL,KAAKuI,aACLvI,KAAKyH,UAAY,GACjBzH,KAAK2gL,YAAc,GACnB3gL,KAAK4gL,aAAe,GACpB5gL,KAAKygL,cACLzgL,KAAK0gL,cACL1gL,KAAK0I,YACL1I,KAAK2I,YACL3I,KAAK8I,eAAiB,GACtB9I,KAAK+I,YACL/I,KAAKgJ,aAET,E,0BC7BK,MAAM83K,EAIXzgL,YAAY4oC,EAAkBtJ,GAC5B3/B,KAAKipC,SAAWA,EAChBjpC,KAAK2/B,KAAOA,CACd,E,0SCKF,MAAMohJ,EAA2C,CAC/CpzK,OAAQ,GACRqoJ,WAAW,EACXv2H,QAAQ,EACRuhJ,UAAW,EACXzjC,WAAW,EACX0jC,aAAc,EACdzjC,WAAW,EACX0jC,aAAc,EACdxjC,SAAS,EACT70I,WAAY,EACZ1E,KAAM,WACNqhD,SAAU,EACV27H,cAAe,IACfp4K,YAAY,EACZC,eAAe,GAKV,MAAMo4K,EACX/gL,YACU6oB,EACA7F,EACAlG,GAFA,KAAA+L,cAAAA,EACA,KAAA7F,cAAAA,EACA,KAAAlG,aAAAA,CACP,CAEGuiH,iBAAiB/sF,G,yCAErB,MAAM7/B,EAAIxR,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,GAE5C,GAAe,eAAX7/B,EAAE3O,KACJ,OAAOnE,KAAKqhL,mBAAmB1uI,GAIjC3yC,KAAKshL,uBAAuBxuK,GAAG,GAE/B,MAAMrL,EAAoBqL,EAAEmuK,aAAenuK,EAAEouK,aAAepuK,EAAEkuK,UAAYluK,EAAEjK,WACxEiK,EAAEnF,OAASlG,IACbqL,EAAEnF,OAASlG,GAGb,MAAM85K,EAAsB,GAC5B,GAAIzuK,EAAE0qI,WAAa1qI,EAAEouK,aAAe,EAClC,IAAK,IAAIxzK,EAAI,EAAGA,EAAIoF,EAAEouK,aAAcxzK,IAClC6zK,EAAUthL,KAAK,KAGnB,GAAI6S,EAAEyqI,WAAazqI,EAAEmuK,aAAe,EAClC,IAAK,IAAIvzK,EAAI,EAAGA,EAAIoF,EAAEmuK,aAAcvzK,IAClC6zK,EAAUthL,KAAK,KAGnB,GAAI6S,EAAE2sB,QAAU3sB,EAAEkuK,UAAY,EAC5B,IAAK,IAAItzK,EAAI,EAAGA,EAAIoF,EAAEkuK,UAAWtzK,IAC/B6zK,EAAUthL,KAAK,KAGnB,GAAI6S,EAAE4qI,SAAW5qI,EAAEjK,WAAa,EAC9B,IAAK,IAAI6E,EAAI,EAAGA,EAAIoF,EAAEjK,WAAY6E,IAChC6zK,EAAUthL,KAAK,KAGnB,KAAOshL,EAAU5zK,OAASmF,EAAEnF,QAC1B4zK,EAAUthL,KAAK,WAIXD,KAAKwhL,aAAaD,GAGxB,IAAIE,EAAa,GAEbC,EAAmB,4BACnB5uK,EAAEkjJ,YACJ0rB,GAAoB,KAElB5uK,EAAE0qI,YACJikC,GAAcC,GAGhB,IAAIC,EAAmB,2BACnB7uK,EAAEkjJ,YACJ2rB,GAAoB,MAElB7uK,EAAEyqI,YACJkkC,GAAcE,GAGhB,IAAIC,EAAgB,WAChB9uK,EAAEkjJ,YACJ4rB,GAAiB,MAEf9uK,EAAE2sB,SACJgiJ,GAAcG,GAGhB,MAAMC,EAAiB,WACnB/uK,EAAE4qI,UACJ+jC,GAAcI,GAGhB,IAAI54I,EAAW,GACf,IAAK,IAAIv7B,EAAI,EAAGA,EAAIoF,EAAEnF,OAAQD,IAAK,CACjC,IAAIo0K,EACJ,OAAQP,EAAU7zK,IAChB,IAAK,IACHo0K,EAAgBJ,EAChB,MACF,IAAK,IACHI,EAAgBH,EAChB,MACF,IAAK,IACHG,EAAgBF,EAChB,MACF,IAAK,IACHE,EAAgBD,EAChB,MACF,IAAK,IACHC,EAAgBL,EAMpB,MAAMM,QAAwB/hL,KAAKkpB,cAAcg7B,aAAa,EAAG49H,EAAcn0K,OAAS,GACxFs7B,GAAY64I,EAAc1sF,OAAO2sF,E,CAGnC,OAAO94I,CACT,G,CAEMo4I,mBAAmB1uI,G,yCACvB,MAAM7/B,EAAIxR,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,IAE1B,MAAd7/B,EAAE0yC,UAAoB1yC,EAAE0yC,UAAY,KACtC1yC,EAAE0yC,SAAWu7H,EAAev7H,WAEP,MAAnB1yC,EAAEquK,eAAoD,IAA3BruK,EAAEquK,cAAcxzK,QAAgBmF,EAAEquK,cAAcxzK,OAAS,KACtFmF,EAAEquK,cAAgB,KAEA,MAAhBruK,EAAE/J,aACJ+J,EAAE/J,YAAa,GAEM,MAAnB+J,EAAE9J,gBACJ8J,EAAE9J,eAAgB,GAGpB,MAAMg5K,EAAa,IAAgBr0K,OAAS,EACtCs0K,EAAW,IAAI1oK,MAAMzG,EAAE0yC,UAC7B,IAAK,IAAI93C,EAAI,EAAGA,EAAIoF,EAAE0yC,SAAU93C,IAAK,CACnC,MAAMw0K,QAAkBliL,KAAKkpB,cAAcg7B,aAAa,EAAG89H,GACvDlvK,EAAE/J,WACJk5K,EAASv0K,GAAK1N,KAAK+I,WAAW,IAAgBm5K,IAE9CD,EAASv0K,GAAK,IAAgBw0K,E,CAOlC,OAHIpvK,EAAE9J,sBACEhJ,KAAKmiL,+BAA+BF,IAErCA,EAASlrG,KAAKjkE,EAAEquK,cACzB,G,CAEMz/C,a,yCACJ,IAAI/uF,QAAgB3yC,KAAKmd,aAAaolD,+BAEpC5vB,EADa,MAAXA,EACQrxC,OAAOC,OAAO,CAAC,EAAGw/K,GAElBz/K,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,SAExC3yC,KAAKmd,aAAaqlD,6BAA6B7vB,GACrD,MAAM+5D,QAAwB1sG,KAAKoiL,0CAA0CzvI,GAE7E,OADAA,EAAU+5D,EAAgB,GACnB,CAAC/5D,EAAS+5D,EAAgB,GACnC,G,CAEM01E,0CACJzvI,G,yCAEA,IAAIm6D,QAA8B9sG,KAAKqiL,oCA0DvC,OAzD6B,MAAzBv1E,GACEn6D,EAAQhlC,OAASm/F,EAAsBrlG,YACzCkrC,EAAQhlC,OAASm/F,EAAsBrlG,WAGrCqlG,EAAsB2zE,eACxB9tI,EAAQ4qG,WAAY,GAGlBzwC,EAAsB4zE,eACxB/tI,EAAQ6qG,WAAY,GAGlB1wC,EAAsBpkG,aACxBiqC,EAAQlT,QAAS,GAGfkT,EAAQquI,UAAYl0E,EAAsB6zE,cAC5ChuI,EAAQquI,UAAYl0E,EAAsB6zE,aAGxC7zE,EAAsBnkG,aACxBgqC,EAAQ+qG,SAAU,GAGhB/qG,EAAQ9pC,WAAaikG,EAAsB8zE,eAC7CjuI,EAAQ9pC,WAAaikG,EAAsB8zE,cAIzCjuI,EAAQ9pC,WAAa8pC,EAAQquI,UAAYruI,EAAQhlC,SACnDglC,EAAQ9pC,WAAa8pC,EAAQhlC,OAASglC,EAAQquI,WAG5CruI,EAAQ6S,SAAWsnD,EAAsBhkG,iBAC3C6pC,EAAQ6S,SAAWsnD,EAAsBhkG,gBAGvCgkG,EAAsB/jG,aACxB4pC,EAAQ5pC,YAAa,GAGnB+jG,EAAsB9jG,gBACxB2pC,EAAQ3pC,eAAgB,GAKc,aAAtC8jG,EAAsBvkG,aACgB,eAAtCukG,EAAsBvkG,cAEtBoqC,EAAQxuC,KAAO2oG,EAAsBvkG,cAIvCukG,EAAwB,IAAI0zE,EAEvB,CAAC7tI,EAASm6D,EACnB,G,CAEMu1E,oC,+CACJ,MAAMviL,QAAmC,QAAlB,EAAAE,KAAKqjB,qBAAa,eAAEhhB,OAAO,KAAWgG,mBAC7D,IAAIqkG,EAAkD,KAEtD,OAAgB,MAAZ5sG,GAAwC,IAApBA,EAAS6N,QAIjC7N,EAAS8N,SAASg/F,IACXA,EAAc7mG,SAAiC,MAAtB6mG,EAAcpqG,OAIrB,MAAnBkqG,IACFA,EAAkB,IAAI8zE,GAIc,MAAlC5zE,EAAcpqG,KAAK+F,aAAuD,aAAhCmkG,EAAgBnkG,cAC5DmkG,EAAgBnkG,YAAcqkG,EAAcpqG,KAAK+F,aAIjB,MAAhCqkG,EAAcpqG,KAAKiF,WACnBmlG,EAAcpqG,KAAKiF,UAAYilG,EAAgBjlG,YAE/CilG,EAAgBjlG,UAAYmlG,EAAcpqG,KAAKiF,WAG7CmlG,EAAcpqG,KAAKgG,WACrBkkG,EAAgB+zE,cAAe,GAG7B7zE,EAAcpqG,KAAKiG,WACrBikG,EAAgBg0E,cAAe,GAG7B9zE,EAAcpqG,KAAKkG,aACrBgkG,EAAgBhkG,YAAa,GAII,MAAjCkkG,EAAcpqG,KAAKoG,YACnBgkG,EAAcpqG,KAAKoG,WAAa8jG,EAAgBi0E,cAEhDj0E,EAAgBi0E,YAAc/zE,EAAcpqG,KAAKoG,YAG/CgkG,EAAcpqG,KAAKmG,aACrB+jG,EAAgB/jG,YAAa,GAII,MAAjCikG,EAAcpqG,KAAKqG,YACnB+jG,EAAcpqG,KAAKqG,WAAa6jG,EAAgBk0E,eAEhDl0E,EAAgBk0E,aAAeh0E,EAAcpqG,KAAKqG,YAIb,MAArC+jG,EAAcpqG,KAAKsG,gBACnB8jG,EAAcpqG,KAAKsG,eAAiB4jG,EAAgB5jG,iBAEpD4jG,EAAgB5jG,eAAiB8jG,EAAcpqG,KAAKsG,gBAGlD8jG,EAAcpqG,KAAKuG,aACrB2jG,EAAgB3jG,YAAa,GAG3B6jG,EAAcpqG,KAAKwG,gBACrB0jG,EAAgB1jG,eAAgB,G,IAlE3B0jG,C,IAyELsqD,YAAYrkH,G,+CACV3yC,KAAKmd,aAAaqlD,6BAA6B7vB,EACvD,G,CAEM8kH,a,yCAEJ,WADqBz3J,KAAKkpB,cAAcw2B,UAEtC,OAAO,IAAInmC,MAGb,GAAyE,aAA9DvZ,KAAKmd,aAAa29C,yCAAkD,CAC7E,MAAMjwB,QAAkB7qC,KAAKmd,aAAagiD,wCACpCr0B,QAAkB9qC,KAAKsiL,eAAez3I,SACtC7qC,KAAKmd,aAAa49C,sCAAsCjwB,E,CAGhE,MAAMW,QACEzrC,KAAKmd,aAAa29C,wCAC1B,OAAoC,MAA7BrvB,EACHA,EACA,IAAIlyB,KACV,G,CAEMs9I,WAAW5tH,G,yCAGf,WADqBjpC,KAAKkpB,cAAcw2B,UAEtC,OAGF,MAAM6iI,QAAuBviL,KAAKy3J,aAGlC,GAAIz3J,KAAKwiL,gBAAgBv5I,EAAUs5I,GACjC,OAGFA,EAAeE,QAAQ,IAAI3B,EAAyB73I,EAAU3pB,KAAKqsC,QAG/D42H,EAAe50K,OAvVO,KAwVxB40K,EAAez3B,MAGjB,MAAM43B,QAAmB1iL,KAAK2iL,eAAeJ,GAE7C,aADMviL,KAAKmd,aAAa49C,sCAAsCwnH,SACjDviL,KAAKmd,aAAaiiD,sCAAsCsjH,EACvE,G,CAEM/vK,MAAMjO,G,+CACJ1E,KAAKmd,aAAaiiD,sCAAsC,KAAM,CAAE16D,OAAQA,UACxE1E,KAAKmd,aAAa49C,sCAAsC,KAAM,CAAEr2D,OAAQA,GAChF,G,CAEA2yJ,iBACE1kH,EACAm6D,GAEAn6D,EAAQuuI,aAAe,EACvBvuI,EAAQsuI,aAAe,GAElBtuI,EAAQhlC,QAAUglC,EAAQhlC,OAAS,EACtCglC,EAAQhlC,OAAS,EACRglC,EAAQhlC,OAAS,MAC1BglC,EAAQhlC,OAAS,KAGfglC,EAAQhlC,OAASm/F,EAAsBrlG,YACzCkrC,EAAQhlC,OAASm/F,EAAsBrlG,WAGpCkrC,EAAQquI,UAEFruI,EAAQquI,UAAYruI,EAAQhlC,OACrCglC,EAAQquI,UAAYruI,EAAQhlC,OACnBglC,EAAQquI,UAAY,IAC7BruI,EAAQquI,UAAY,GAJpBruI,EAAQquI,UAAY,EAOlBruI,EAAQquI,UAAYl0E,EAAsB6zE,cAC5ChuI,EAAQquI,UAAYl0E,EAAsB6zE,aAGvChuI,EAAQ9pC,WAEF8pC,EAAQ9pC,WAAa8pC,EAAQhlC,OACtCglC,EAAQ9pC,WAAa8pC,EAAQhlC,OACpBglC,EAAQ9pC,WAAa,IAC9B8pC,EAAQ9pC,WAAa,GAJrB8pC,EAAQ9pC,WAAa,EAOnB8pC,EAAQ9pC,WAAaikG,EAAsB8zE,eAC7CjuI,EAAQ9pC,WAAaikG,EAAsB8zE,cAGzCjuI,EAAQ9pC,WAAa8pC,EAAQquI,UAAYruI,EAAQhlC,SACnDglC,EAAQ9pC,WAAa8pC,EAAQhlC,OAASglC,EAAQquI,WAGxB,MAApBruI,EAAQ6S,UAAoB7S,EAAQhlC,OAAS,EAC/CglC,EAAQ6S,SAAW,EACV7S,EAAQ6S,SAAW,KAC5B7S,EAAQ6S,SAAW,IAGjB7S,EAAQ6S,SAAWsnD,EAAsBhkG,iBAC3C6pC,EAAQ6S,SAAWsnD,EAAsBhkG,gBAGd,MAAzB6pC,EAAQwuI,eAAyBxuI,EAAQwuI,cAAcxzK,OAAS,IAClEglC,EAAQwuI,cAAgBxuI,EAAQwuI,cAAc,IAGhDnhL,KAAKshL,uBAAuB3uI,GAAS,EACvC,CAEQ5pC,WAAW+Z,GACjB,OAAOA,EAAIsyE,OAAO,GAAGx1E,cAAgBkD,EAAI9P,MAAM,EACjD,CAEcmvK,+BAA+BF,G,yCAC3C,GAAgB,MAAZA,GAAoBA,EAASt0K,QAAU,EACzC,OAEF,MAAMiF,QAAc5S,KAAKkpB,cAAcg7B,aAAa,EAAG+9H,EAASt0K,OAAS,GACnE+xG,QAAY1/G,KAAKkpB,cAAcg7B,aAAa,EAAG,GACrD+9H,EAASrvK,GAASqvK,EAASrvK,GAAS8sG,CACtC,G,CAEcijE,eACZtzH,G,yCAEA,GAAe,MAAXA,GAAsC,IAAnBA,EAAQ1hD,OAC7B,OAAO7I,QAAQ4B,QAAQ,IAGzB,MAAMlC,EAAW6qD,EAAQruD,KAAW2P,GAAS,EAAD,gCAC1C,MAAMk6B,QAAkB7qC,KAAKkpB,cAAcyE,QAAQhd,EAAKs4B,UACxD,OAAO,IAAI63I,EAAyBj2I,EAAUpd,gBAAiB9c,EAAKgvB,KACtE,MAEA,aAAa76B,QAAQC,IAAIP,EAC3B,G,CAEc89K,eACZjzH,G,yCAEA,GAAe,MAAXA,GAAsC,IAAnBA,EAAQ1hD,OAC7B,OAAO7I,QAAQ4B,QAAQ,IAGzB,MAAMlC,EAAW6qD,EAAQruD,KAAW2P,GAAS,EAAD,gCAC1C,MAAMm6B,QAAkB9qC,KAAKkpB,cAAc66B,cAAc,IAAI,IAAUpzC,EAAKs4B,WAC5E,OAAO,IAAI63I,EAAyBh2I,EAAWn6B,EAAKgvB,KACtD,MAEA,aAAa76B,QAAQC,IAAIP,EAC3B,G,CAEQg+K,gBAAgBv5I,EAAkBomB,GACxC,OAAe,MAAXA,GAAsC,IAAnBA,EAAQ1hD,QAIxB0hD,EAAQA,EAAQ1hD,OAAS,GAAGs7B,WAAaA,CAClD,CAGcu4I,aAAal1C,G,yCACzB,IAAK,IAAI5+H,EAAI4+H,EAAM3+H,OAAS,EAAGD,EAAI,EAAGA,IAAK,CACzC,MAAMk1K,QAAU5iL,KAAKkpB,cAAcg7B,aAAa,EAAGx2C,IAClD4+H,EAAM5+H,GAAI4+H,EAAMs2C,IAAM,CAACt2C,EAAMs2C,GAAIt2C,EAAM5+H,G,CAE5C,G,CAEQ4zK,uBAAuB3uI,EAAckwI,GAC3C,IAAIC,EAAmB,EACnBC,EAAmB,EACnBC,EAAwBrwI,EAAQquI,UAChCiC,EAAyBtwI,EAAQ9pC,WAEjC8pC,EAAQ4qG,WAAa5qG,EAAQsuI,cAAgB,EAC/C6B,EAAmB,EACTnwI,EAAQ4qG,YAClBulC,EAAmB,GAGjBnwI,EAAQ6qG,WAAa7qG,EAAQuuI,cAAgB,EAC/C6B,EAAmB,EACTpwI,EAAQ6qG,YAClBulC,EAAmB,GAGjBpwI,EAAQlT,QAAUkT,EAAQquI,WAAa,EACzCgC,EAAgB,EACNrwI,EAAQlT,SAClBujJ,EAAgB,GAGdrwI,EAAQ+qG,SAAW/qG,EAAQ9pC,YAAc,EAC3Co6K,EAAiB,EACPtwI,EAAQ+qG,UAClBulC,EAAiB,KAIdtwI,EAAQhlC,QAAUglC,EAAQhlC,OAAS,KACtCglC,EAAQhlC,OAAS,IAGnB,MAAMlG,EAAoBq7K,EAAmBC,EAAmBC,EAAgBC,EAE5EtwI,EAAQhlC,OAASlG,IACnBkrC,EAAQhlC,OAASlG,GAIfo7K,IACFlwI,EAAQsuI,aAAe6B,EACvBnwI,EAAQuuI,aAAe6B,EACvBpwI,EAAQquI,UAAYgC,EACpBrwI,EAAQ9pC,WAAao6K,EAEzB,E,wDC5iBK,MAAeC,G,qTCKf,MAAMC,EACLC,SAASthL,EAAwB6wC,G,iDACrC,GAAsB,MAAlBA,EAAQ1W,QAAqC,KAAnB0W,EAAQ1W,OACpC,KAAM,8BAER,GAAgC,OAAZ,QAAhB,EAAA0W,EAAQ0wI,gBAAQ,eAAEh1G,SAA8C,KAA5B17B,EAAQ0wI,SAASh1G,OACvD,KAAM,2BAER,MAAMqyB,EAA2B,CAC/BuvC,SAAU,SACVj1F,MAAO,WACP5tB,OAAQ,OACRwa,QAAS,IAAIqiB,QAAQ,CACnB60C,cAAe,UAAYnsD,EAAQ1W,OACnC,eAAgB,mBAChB,mBAAoB,oBAIxBykE,EAAY/iF,KAAOm4B,KAAKkT,UAAU,CAChCqlB,OAAQ17B,EAAQ0wI,SAASh1G,OACzBznE,aACsB,MAAnB+rC,EAAQyjH,QAAkB,YAAczjH,EAAQyjH,QAAU,KAAO,IAClE,4BAEJ,MAAMpzJ,EAAU,IAAIonD,QAPR,0CAOqBs2C,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,QAAsC,MAApBrE,EAASqE,OAAgB,CACtD,MAAMooC,QAAazsC,EAASysC,OAC5B,OAAiB,QAAV,EAAAA,aAAI,EAAJA,EAAMvqC,YAAI,eAAEwb,K,CAErB,GAAwB,MAApB1d,EAASqE,OACX,KAAM,8BAER,KAAM,kC,+SClCH,MAAM2+K,EACLF,SAASthL,EAAwB6wC,G,yCACrC,GAAsB,MAAlBA,EAAQ1W,QAAqC,KAAnB0W,EAAQ1W,OACpC,KAAM,gCAER,MAAMykE,EAA2B,CAC/BuvC,SAAU,SACVj1F,MAAO,WACP5tB,OAAQ,OACRwa,QAAS,IAAIqiB,QAAQ,CACnB60C,cAAe,UAAYnsD,EAAQ1W,OACnC,eAAgB,sBAIdj5B,EAAU,IAAIonD,QADR,mDACqBs2C,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,QAAsC,MAApBrE,EAASqE,OAAgB,CACtD,MAAMooC,QAAazsC,EAASysC,OAC5B,GAAIA,EAAKw2I,QACP,MAAO,GAAGx2I,EAAKw2I,kB,MAEZ,GAAwB,MAApBjjL,EAASqE,OAClB,KAAM,gCAER,KAAM,oCACR,G,4SC1BK,MAAM6+K,EACLJ,SAASthL,EAAwB6wC,G,mEACrC,GAAsB,MAAlBA,EAAQ1W,QAAqC,KAAnB0W,EAAQ1W,OACpC,KAAM,8BAGR,MAAMwnJ,QAAkBzjL,KAAK0jL,aAAa5hL,EAAY6wC,GACtD,GAAiB,MAAb8wI,GAAmC,KAAdA,EACvB,KAAM,qDAGR,MAAM/iF,EAA2B,CAC/BuvC,SAAU,SACVj1F,MAAO,WACP5tB,OAAQ,OACRwa,QAAS,IAAIqiB,QAAQ,CACnB60C,cAAe,UAAYnsD,EAAQ1W,OACnC,eAAgB,sBAIpBykE,EAAY/iF,KAAOm4B,KAAKkT,UAAU,CAChC26H,MAAO,CAAC,2CAA4C,6BACpDC,YAAa,CACX,CACE,kBACA,CACEH,UAAWA,EACXniK,OAAQ,CACN,mBAAoB,CAClB2O,MAAO,UACPrpB,YAAa,GACb24B,IAAKoT,EAAQyjH,QACbytB,YAAalxI,EAAQmxI,SAAS/I,UAIpC,QAIN,MAAM/3K,EAAU,IAAIonD,QArBR,qCAqBqBs2C,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,OAAgB,CAC3B,MAAMooC,QAAazsC,EAASysC,OAC5B,GAC0B,MAAxBA,EAAKg3I,iBACLh3I,EAAKg3I,gBAAgBp2K,OAAS,GAC9Bo/B,EAAKg3I,gBAAgB,GAAGp2K,OAAS,EAEjC,GAAmC,oBAA/Bo/B,EAAKg3I,gBAAgB,GAAG,GAA0B,CACpD,GAAiE,OAA1B,QAAnC,EAA0B,QAA1B,EAAAh3I,EAAKg3I,gBAAgB,GAAG,UAAE,eAAEjb,eAAO,eAAG,qBACxC,OAAgE,QAAzD,EAAmC,QAAnC,EAA0B,QAA1B,EAAA/7H,EAAKg3I,gBAAgB,GAAG,UAAE,eAAEjb,eAAO,eAAG,2BAAmB,eAAE9qJ,MAEpE,GAAoE,OAA1B,QAAtC,EAA0B,QAA1B,EAAA+uB,EAAKg3I,gBAAgB,GAAG,UAAE,eAAEC,kBAAU,eAAG,qBAC3C,KACE,oBAC4D,QAA5D,EAAsC,QAAtC,EAA0B,QAA1B,EAAAj3I,EAAKg3I,gBAAgB,GAAG,UAAE,eAAEC,kBAAU,eAAG,2BAAmB,eAAEp9K,Y,MAG7D,GAAmC,UAA/BmmC,EAAKg3I,gBAAgB,GAAG,GACjC,KAAM,oBAA+C,QAA1B,EAAAh3I,EAAKg3I,gBAAgB,GAAG,UAAE,eAAEn9K,Y,CAI7D,GAAwB,MAApBtG,EAASqE,QAAsC,MAApBrE,EAASqE,OACtC,KAAM,8BAER,KAAM,kC,IAGM++K,aAAa5hL,EAAwB6wC,G,yCACjD,MAAM+tD,EAA2B,CAC/B1lD,MAAO,WACP5tB,OAAQ,MACRwa,QAAS,IAAIqiB,QAAQ,CACnB60C,cAAe,UAAYnsD,EAAQ1W,UAIjCj5B,EAAU,IAAIonD,QADR,4CACqBs2C,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,OAAgB,CAC3B,MAAMooC,QAAazsC,EAASysC,OAC5B,GAA4B,MAAxBA,EAAKk3I,gBACP,OAAOl3I,EAAKk3I,gBAAgB,2C,CAGhC,OAAO,IACT,G,4SCzFK,MAAMC,EACLd,SAASthL,EAAwB6wC,G,yCACrC,GAAsB,MAAlBA,EAAQ1W,QAAqC,KAAnB0W,EAAQ1W,OACpC,KAAM,mCAER,MAAMykE,EAA2B,CAC/BuvC,SAAU,SACVj1F,MAAO,WACP5tB,OAAQ,OACRwa,QAAS,IAAIqiB,QAAQ,CACnB60C,cAAe,SAAWnsD,EAAQ1W,OAClC,eAAgB,sBAIpBykE,EAAY/iF,KAAOm4B,KAAKkT,UAAU,CAChCjjD,SAAS,EACTo+K,cAAexxI,EAAQyjH,QACvBxvJ,aACsB,MAAnB+rC,EAAQyjH,QAAkBzjH,EAAQyjH,QAAU,MAAQ,IAAM,4BAE/D,MAAMpzJ,EAAU,IAAIonD,QAPR,mDAOqBs2C,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,QAAsC,MAApBrE,EAASqE,OAAgB,CACtD,MAAMooC,QAAazsC,EAASysC,OAC5B,OAAOA,aAAI,EAAJA,EAAMq3I,Y,CAEf,GAAwB,MAApB9jL,EAASqE,OACX,KAAM,mCAER,KAAM,uCACR,G,ECpCK,MAAM0/K,EAAb,cAGE,KAAAP,SAAW,IAAIQ,EACf,KAAAjB,SAAW,IAAIkB,EACf,KAAAC,aAAe,IAAIC,CACrB,EAEO,MAAMH,GAIN,MAAMC,GAIN,MAAME,G,0SCXN,MAAMC,EACLtB,SAASthL,EAAwB6wC,G,yCACrC,GAAsB,MAAlBA,EAAQ1W,QAAqC,KAAnB0W,EAAQ1W,OACpC,KAAM,+BAER,MAAMykE,EAA2B,CAC/BuvC,SAAU,SACVj1F,MAAO,WACP5tB,OAAQ,OACRwa,QAAS,IAAIqiB,QAAQ,CACnB06H,eAAgBhyI,EAAQ1W,OACxB,eAAgB,sBAGpB,IAAIsD,EAAM,kDACa,MAAnBoT,EAAQyjH,UACV72H,GAAO,aAAeoT,EAAQyjH,SAEhC11D,EAAY/iF,KAAOm4B,KAAKkT,UAAU,CAChC47H,MACsB,MAAnBjyI,EAAQyjH,QAAkB,YAAczjH,EAAQyjH,QAAU,KAAO,IAClE,4BAEJ,MAAMpzJ,EAAU,IAAIonD,QAAQ7qB,EAAKmhE,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,QAAsC,MAApBrE,EAASqE,OAAgB,CAEtD,aADmBrE,EAASysC,QAChB83I,K,CAEd,GAAwB,MAApBvkL,EAASqE,OACX,KAAM,+BAER,MAAMooC,QAAazsC,EAASysC,OAC5B,GAAmB,OAAfA,aAAI,EAAJA,EAAMvgC,OACR,KAAM,qBAAuBugC,EAAKvgC,MAEpC,KAAM,qCACR,G,uTCpCK,MAAMs4K,EACL1B,SAASthL,EAAwB6wC,G,iDACrC,GAAsB,MAAlBA,EAAQ1W,QAAqC,KAAnB0W,EAAQ1W,OACpC,KAAM,iCAER,GAAoC,OAAZ,QAApB,EAAA0W,EAAQ6xI,oBAAY,eAAEn2G,SAAkD,KAAhC17B,EAAQ6xI,aAAan2G,OAC/D,KAAM,gCAER,MAAMqyB,EAA2B,CAC/BuvC,SAAU,SACVj1F,MAAO,WACP5tB,OAAQ,OACRwa,QAAS,IAAIqiB,QAAQ,CACnB60C,cAAe,SAAW,IAAMjzC,cAAclZ,EAAQ1W,OAAS,KAC/D,eAAgB,sBAGdsD,EAAM,2CAA2CoT,EAAQ6xI,aAAan2G,iBAC5EqyB,EAAY/iF,KAAOm4B,KAAKkT,UAAU,CAChC+7H,OAAQpyI,EAAQyjH,QAChBxvJ,aACsB,MAAnB+rC,EAAQyjH,QAAkB,YAAczjH,EAAQyjH,QAAU,KAAO,IAClE,4BAEJ,MAAMpzJ,EAAU,IAAIonD,QAAQ7qB,EAAKmhE,GAC3BpgG,QAAiBwB,EAAW+uE,YAAY7tE,GAC9C,GAAwB,MAApB1C,EAASqE,QAAsC,MAApBrE,EAASqE,OAAgB,CACtD,MAAMooC,QAAazsC,EAASysC,OAC5B,OAAOA,aAAI,EAAJA,EAAMpsC,MAAO,MAAmB,QAAZ,EAAAosC,aAAI,EAAJA,EAAMshC,cAAM,eAAE1tE,OAAQgyC,EAAQ6xI,aAAan2G,O,CAExE,GAAwB,MAApB/tE,EAASqE,OACX,KAAM,iCAER,MAAMooC,QAAazsC,EAASysC,OAC5B,GAAqB,OAAjBA,aAAI,EAAJA,EAAM3gC,SACR,KAAM,yBAA2B2gC,EAAK3gC,QAExC,GAAmB,OAAf2gC,aAAI,EAAJA,EAAMvgC,OACR,KAAM,yBAA2BugC,EAAKvgC,MAExC,KAAM,uC,+SC7BV,MAAMu0K,EAAiB,CACrB58K,KAAM,OACN6gL,gBAAgB,EAChBC,mBAAmB,EACnB/uB,eAAgB,SAChBC,aAAc,SACdqB,iBAAkB,GAClB0tB,wBAAyB,cACzBC,4BAA6B,mBAGxB,MAAMC,EACX/kL,YACU6oB,EACA/L,EACArb,GAFA,KAAAonB,cAAAA,EACA,KAAA/L,aAAAA,EACA,KAAArb,WAAAA,CACP,CAEH29H,iBAAiB9sF,GACf,MAAqB,aAAjBA,EAAQxuC,KACHnE,KAAKqlL,iBAAiB1yI,GACH,eAAjBA,EAAQxuC,KACVnE,KAAKslL,mBAAmB3yI,GACL,cAAjBA,EAAQxuC,KACVnE,KAAKulL,kBAAkB5yI,GAEvB3yC,KAAKwlL,aAAa7yI,EAE7B,CAEM6yI,aAAa7yI,G,yCACjB,MAAM7/B,EAAIxR,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,GAEpB,MAApB7/B,EAAEkyK,iBACJlyK,EAAEkyK,gBAAiB,GAEM,MAAvBlyK,EAAEmyK,oBACJnyK,EAAEmyK,mBAAoB,GAGxB,MAAM/C,QAAkBliL,KAAKkpB,cAAcg7B,aAAa,EAAG,IAAgBv2C,OAAS,GACpF,IAAI83K,EAAO,IAAgBvD,GAI3B,GAHIpvK,EAAEkyK,iBACJS,EAAOA,EAAKrwF,OAAO,GAAGx1E,cAAgB6lK,EAAKzyK,MAAM,IAE/CF,EAAEmyK,kBAAmB,CACvB,MAAMvlE,QAAY1/G,KAAKkpB,cAAcg7B,aAAa,EAAG,MACrDuhI,GAAczlL,KAAK0lL,QAAQhmE,EAAI5sF,WAAY,E,CAE7C,OAAO2yJ,CACT,G,CAEMH,mBAAmB3yI,G,yCACvB,MAAM7/B,EAAIxR,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,GAEtCsjH,EAAkBnjJ,EAAEmjJ,gBAC1B,GAAuB,MAAnBA,GAA2BA,EAAgBtoJ,OAAS,EACtD,OAAOmF,EAAEmjJ,gBAEX,MAAM0vB,EAAU1vB,EAAgBn+H,QAAQ,KACxC,GAAI6tJ,EAAU,GAAKA,GAAW1vB,EAAgBtoJ,OAAS,EACrD,OAAOsoJ,EAEe,MAApBnjJ,EAAEojJ,iBACJpjJ,EAAEojJ,eAAiB,UAGrB,MAAM0vB,EAAiB3vB,EAAgBtlF,OAAO,EAAGg1G,GAC3CE,EAAc5vB,EAAgBtlF,OAAOg1G,EAAU,EAAG1vB,EAAgBtoJ,QAExE,IAAIm4K,EAAmB,GAMvB,MALyB,WAArBhzK,EAAEojJ,eACJ4vB,QAAyB9lL,KAAK+lL,aAAa,GACb,iBAArBjzK,EAAEojJ,iBACX4vB,EAAmBhzK,EAAEsjJ,SAEhBwvB,EAAiB,IAAME,EAAmB,IAAMD,CACzD,G,CAEMR,iBAAiB1yI,G,yCACrB,MAAM7/B,EAAIxR,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,GAE5C,GAAwB,MAApB7/B,EAAEkzK,gBAA+C,KAArBlzK,EAAEkzK,eAChC,OAAO,KAEa,MAAlBlzK,EAAEqjJ,eACJrjJ,EAAEqjJ,aAAe,UAGnB,IAAI8vB,EAAc,GAMlB,MALuB,WAAnBnzK,EAAEqjJ,aACJ8vB,QAAoBjmL,KAAK+lL,aAAa,GACV,iBAAnBjzK,EAAEqjJ,eACX8vB,EAAcnzK,EAAEsjJ,SAEX6vB,EAAc,IAAMnzK,EAAEkzK,cAC/B,G,CAEMT,kBAAkB5yI,G,yCACtB,MAAM7/B,EAAIxR,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,GAE5C,GAA0B,MAAtB7/B,EAAE0kJ,iBACJ,OAAO,KAGT,IAAIe,EAAuB,KAC3B,MAAM2tB,EAAmB,IAAI7B,EAwB7B,OAvBA6B,EAAiB9vB,QAAUtjJ,EAAEsjJ,QACF,gBAAvBtjJ,EAAE0kJ,kBACJe,EAAY,IAAImsB,EAChBwB,EAAiBjqJ,OAASnpB,EAAEqzK,4BACI,aAAvBrzK,EAAE0kJ,kBACXe,EAAY,IAAI4qB,EAChB+C,EAAiBjqJ,OAASnpB,EAAEszK,0BAC5BF,EAAiB7C,SAASh1G,OAASv7D,EAAEoyK,yBACL,iBAAvBpyK,EAAE0kJ,kBACXe,EAAY,IAAI2rB,EAChBgC,EAAiBjqJ,OAASnpB,EAAEuzK,0BACI,aAAvBvzK,EAAE0kJ,kBACXe,EAAY,IAAIirB,EAChB0C,EAAiBjqJ,OAASnpB,EAAEwzK,2BACI,eAAvBxzK,EAAE0kJ,kBACXe,EAAY,IAAI+qB,EAChB4C,EAAiBjqJ,OAASnpB,EAAEyzK,0BACI,iBAAvBzzK,EAAE0kJ,mBACXe,EAAY,IAAIusB,EAChBoB,EAAiBjqJ,OAASnpB,EAAE0zK,8BAC5BN,EAAiB1B,aAAan2G,OAASv7D,EAAEqyK,6BAG1B,MAAb5sB,EACK,KAGFA,EAAU6qB,SAASpjL,KAAK8B,WAAYokL,EAC7C,G,CAEMxkD,a,yCACJ,IAAI/uF,QAAgB3yC,KAAKmd,aAAaslD,+BAOtC,OALE9vB,EADa,MAAXA,EACQrxC,OAAOC,OAAO,CAAC,EAAGw/K,GAElBz/K,OAAOC,OAAO,CAAC,EAAGw/K,EAAgBpuI,SAExC3yC,KAAKmd,aAAawlD,6BAA6BhwB,GAC9CA,CACT,G,CAEMqkH,YAAYrkH,G,+CACV3yC,KAAKmd,aAAawlD,6BAA6BhwB,EACvD,G,CAEcozI,aAAap4K,G,yCACzB,IAAImV,EAAM,GACV,MAAM2jK,EAAU,uCAChB,IAAK,IAAI/4K,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAC/B,MAAMq0K,QAAwB/hL,KAAKkpB,cAAcg7B,aAAa,EAAGuiI,IACjE3jK,GAAO2jK,EAAQrxF,OAAO2sF,E,CAExB,OAAOj/J,CACT,G,CAGQ4iK,QAAQjmJ,EAAgBk7G,GAC9B,OAAOl7G,EAAO9xB,QAAUgtI,EACpBl7G,EACA,IAAIlmB,MAAMohI,EAAQl7G,EAAO9xB,OAAS,GAAGopE,KAAK,KAAOt3C,CACvD,E,wDCtLK,MAAeinJ,G,cCEf,MAAMC,EAOX9zI,oBACE5J,EACA29I,EAAqB,KACrBC,EAAuB,MAEvB,GAAgB,MAAZ59I,GAAwC,IAApBA,EAASt7B,OAC/B,OAAO,KAET,MAAMm5K,EAAmB,CACvB,YACA,MACA,YACID,QAAAA,EAAc,MACf7mL,KAAK+mL,kBAAkBH,IAGtBI,EAAkBztK,MAAMoe,KAAK,IAAIurE,IAAI4jF,IAE3C,OADe,EAAO79I,EAAU+9I,EAElC,CAQQD,kBAAkB/oK,GACxB,GAAa,MAATA,GAAkC,IAAjBA,EAAMrQ,OACzB,MAAO,GAET,MAAM08G,EAAarsG,EAAM8Z,QAAQ,KACjC,OAAIuyF,EAAa,EACR,GAEFrsG,EACJu5D,UAAU,EAAG8yC,GACb1qG,OACAu1D,cACAv/B,MAAM,eACX,E,+BCnDF,IAAYsxI,E,iBAAZ,SAAYA,GACV,mBACA,kBACD,CAHD,CAAYA,IAAAA,EAAQ,I,+DCEb,MAAMC,UAAoB,IAM/B7mL,YAAYmC,EAAY,MACtBjC,MAAMiC,GACM,MAARA,IAGJxC,KAAKQ,GAAKR,KAAKS,oBAAoB,MACnCT,KAAKo0D,SAAWp0D,KAAKS,oBAAoB,YACzCT,KAAKwe,KAAOxe,KAAKS,oBAAoB,QACrCT,KAAKq0D,SAAWr0D,KAAKS,oBAAoB,YAC3C,E,+DCfK,MAAM0mL,UAAoB,IAI/B9mL,YAAYmC,EAAY,MACtBjC,MAAMiC,GACM,MAARA,IAGJxC,KAAK6wB,KAAO7wB,KAAKS,oBAAoB,QACrCT,KAAKu0D,OAASv0D,KAAKS,oBAAoB,YAAa,EACtD,E,2XCLK,MAAM2mL,UAAiB,IAM5B/mL,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKwe,KAAOpJ,EAAIoJ,KAChBxe,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE5U,GAAI,KACJ6zD,SAAU,KACVD,SAAU,MAEZ,CAAC,KAAM,aAEX,CAEMha,QAAQ7lC,G,yCASZ,aARmBvU,KAAKw4E,WACtB,IAAI,IAAax4E,MACjB,CACEo0D,SAAU,MAEZ,KACA7/C,EAGJ,G,CAEAnT,gBAAgBgU,GACd,OAAW,MAAPA,EACK,KAGF9T,OAAOC,OAAO,IAAI6lL,EAAYhyK,EAAK,CACxCg/C,SAAU,IAAU7pB,SAASn1B,EAAIg/C,WAErC,E,qFC7CK,MAAMizH,UAAiB,IAI5BhnL,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKu0D,OAASn/C,EAAIm/C,OAClBv0D,KAAKm4E,iBACHn4E,KACAoV,EACA,CACEyb,KAAM,MAER,IAEJ,CAEAupB,QAAQ7lC,GACN,OAAOvU,KAAKw4E,WACV,IAAI,IAAax4E,MACjB,CACE6wB,KAAM,MAER,KACAtc,EAEJ,CAEAnT,gBAAgBgU,GACd,OAAW,MAAPA,EACK,KAGF9T,OAAOC,OAAO,IAAI8lL,EAAYjyK,EAAK,CACxCyb,KAAM,IAAU0Z,SAASn1B,EAAIyb,OAEjC,E,qFC3CK,MAAMy2J,EAeXjnL,YAAY8B,EAAYolL,GAatB,OAZAvnL,KAAKmE,KAAOhC,EAAKgC,KACjBnE,KAAKunL,WAAaA,EAClBvnL,KAAKW,KAAOwB,EAAKxB,KAAOwB,EAAKxB,KAAK8sB,gBAAkB,KACpDztB,KAAK00D,MAAQvyD,EAAKuyD,MAAQvyD,EAAKuyD,MAAMjnC,gBAAkB,KACvDztB,KAAK20D,eAAiBxyD,EAAKwyD,eAC3B30D,KAAK60D,eAAwC,MAAvB1yD,EAAK0yD,eAAyB1yD,EAAK0yD,eAAezqB,cAAgB,KACxFpqC,KAAK80D,aAAoC,MAArB3yD,EAAK2yD,aAAuB3yD,EAAK2yD,aAAa1qB,cAAgB,KAClFpqC,KAAKuU,IAAkB,MAAZpS,EAAKoS,IAAcpS,EAAKoS,IAAIkZ,gBAAkB,KACzDztB,KAAKipC,SAAW9mC,EAAK8mC,SACrBjpC,KAAKgU,SAAW7R,EAAK6R,SACrBhU,KAAK+0D,UAAY5yD,EAAK4yD,UAEd/0D,KAAKmE,MACX,KAAK,IAAS6wD,KACZh1D,KAAK6wB,KAAO,IAAI,IAChB7wB,KAAK6wB,KAAKA,KAAyB,MAAlB1uB,EAAK0uB,KAAKA,KAAe1uB,EAAK0uB,KAAKA,KAAKpD,gBAAkB,KAC3EztB,KAAK6wB,KAAK0jC,OAASpyD,EAAK0uB,KAAK0jC,OAC7B,MACF,KAAK,IAASU,KACZj1D,KAAKk1D,KAAO,IAAI,IAChBl1D,KAAKk1D,KAAKd,SAAiC,MAAtBjyD,EAAK+yD,KAAKd,SAAmBjyD,EAAK+yD,KAAKd,SAAS3mC,gBAAkB,KAK7F,E,gDC1CK,MAAM+5J,EAMXnnL,YAAYgwE,GALZ,KAAA7vE,GAAa,KACb,KAAAge,KAAe,KACf,KAAA61C,SAAmB,KACnB,KAAAD,SAAmB,KAGZic,IAILrwE,KAAKQ,GAAK6vE,EAAE7vE,GACZR,KAAKwe,KAAO6xD,EAAE7xD,KACdxe,KAAKq0D,SAAWgc,EAAEhc,SACpB,CAEIk5B,eACF,IACE,GAAiB,MAAbvtF,KAAKwe,KACP,OAAOwwB,SAAShvC,KAAKwe,KAAM,K,CAE7B,S,CAGF,OAAO,CACT,CAEApd,gBAAgB2rC,GACd,OAAY,MAARA,EACK,KAGFzrC,OAAOC,OAAO,IAAIimL,EAAgBz6I,EAC3C,E,gDCjCK,MAAM06I,EAIXpnL,YAAY6H,GAHZ,KAAA2oB,KAAe,KAIR3oB,IAILlI,KAAKu0D,OAASrsD,EAAEqsD,OAClB,CAEI4kG,iBACF,OAAoB,MAAbn5J,KAAK6wB,KAAe,WAAa,IAC1C,CAEAzvB,gBAAgB2rC,GACd,OAAY,MAARA,EACK,KAGFzrC,OAAOC,OAAO,IAAIkmL,EAAgB16I,EAC3C,E,gGChBK,MAAM26I,EAmBXrnL,YAAYof,GAlBZ,KAAAjf,GAAa,KACb,KAAAi0D,SAAmB,KACnB,KAAA9zD,KAAe,KACf,KAAA+zD,MAAgB,KAGhB,KAAAvwD,KAAiB,KACjB,KAAA0sB,KAAO,IAAI,IACX,KAAAqkC,KAAO,IAAI,IACX,KAAAP,eAA0B,KAC1B,KAAAC,YAAc,EACd,KAAA14B,aAAqB,KACrB,KAAA44B,aAAqB,KACrB,KAAAD,eAAuB,KACvB,KAAA5rB,SAAmB,KACnB,KAAAj1B,UAAW,EACX,KAAA+gD,WAAY,EAGLt1C,IAILzf,KAAKQ,GAAKif,EAAEjf,GACZR,KAAKy0D,SAAWh1C,EAAEg1C,SAClBz0D,KAAKmE,KAAOsb,EAAEtb,KACdnE,KAAK20D,eAAiBl1C,EAAEk1C,eACxB30D,KAAK40D,YAAcn1C,EAAEm1C,YACrB50D,KAAKk8B,aAAezc,EAAEyc,aACtBl8B,KAAK80D,aAAer1C,EAAEq1C,aACtB90D,KAAK60D,eAAiBp1C,EAAEo1C,eACxB70D,KAAKgU,SAAWyL,EAAEzL,SAClBhU,KAAKipC,SAAWxpB,EAAEwpB,SAClBjpC,KAAK+0D,UAAYt1C,EAAEs1C,UACrB,CAEIslG,gBACF,OAAO,IAAMxc,mBAAmB79I,KAAKuU,IACvC,CAEIozK,4BACF,OAA2B,MAAvB3nL,KAAK20D,gBAGF30D,KAAK40D,aAAe50D,KAAK20D,cAClC,CAEI41B,cACF,OAA2B,MAAvBvqF,KAAK60D,gBAGF70D,KAAK60D,gBAAkB,IAAIv1C,IACpC,CAEIsoK,oBACF,OAAO5nL,KAAK80D,cAAgB,IAAIx1C,IAClC,CAEAsrB,SACE,OAAO,IAAMkB,MAAM,OAAD,UACX9rC,MACL,CACEuU,IAAK,IAAM6tC,gBAAgBpiD,KAAKuU,MAGtC,CAEAnT,gBAAgB2rC,G,MACd,OAAY,MAARA,EACK,KAGFzrC,OAAOC,OAAO,IAAImmL,EAAY36I,EAAM,CACzCx4B,IAAmC,QAA9B,MAAM2oC,eAAenQ,EAAKx4B,YAAI,eAAE43B,OACrCosC,UAAW,IAAmBhuC,SAASwC,EAAKwrC,WAC5C1nD,KAAM,IAAa0Z,SAASwC,EAAKlc,MACjCqkC,KAAM,IAAa3qB,SAASwC,EAAKmoB,MACjCh5B,aAAmC,MAArB6Q,EAAK7Q,aAAuB,KAAO,IAAI5c,KAAKytB,EAAK7Q,cAC/D44B,aAAmC,MAArB/nB,EAAK+nB,aAAuB,KAAO,IAAIx1C,KAAKytB,EAAK+nB,cAC/DD,eAAuC,MAAvB9nB,EAAK8nB,eAAyB,KAAO,IAAIv1C,KAAKytB,EAAK8nB,iBAEvE,E,gDCjFK,MAAegzH,G,gDCHf,MAAeC,G,gDCCf,MAAe3tG,G,gDCJf,MAAe4tG,G,gDCFf,MAAMC,G,wDCIN,MAAeC,GAkBf,MAAeC,UAA8BD,G,gDCzB7C,MAAejwE,G,+CCMf,MAAe9yB,G,+BCNtB,IAAYijG,E,iBAAZ,SAAYA,GACV,mBACA,0BACD,CAHD,CAAYA,IAAAA,EAAkB,I,+BCA9B,IAAY7uD,E,iBAAZ,SAAYA,GACV,qBACA,+BACA,mBACA,0BACD,CALD,CAAYA,IAAAA,EAAU,I,gDCEf,MAAM8uD,EAQX/nL,YAAYC,GACM,MAAZA,IAGJN,KAAKQ,GAAKF,EAASE,GACnBR,KAAKu/B,IAAMj/B,EAASi/B,IACpBv/B,KAAKo0D,SAAW9zD,EAAS8zD,SACzBp0D,KAAKuU,IAAMjU,EAASiU,IACpBvU,KAAKwe,KAAOle,EAASke,KACrBxe,KAAKq0D,SAAW/zD,EAAS+zD,SAC3B,E,gDClBK,MAAMg0H,EAQXhoL,YAAYmC,GACE,MAARA,IAIJxC,KAAK6jF,eAAiBrhF,EAAKqhF,eAC3B7jF,KAAK8jF,MAAQthF,EAAKshF,MAClB9jF,KAAKy/B,OAASj9B,EAAKi9B,OACnBz/B,KAAK+jF,SAAWvhF,EAAKuhF,SACrB/jF,KAAKgkF,QAAUxhF,EAAKwhF,QACpBhkF,KAAKqf,KAAO7c,EAAK6c,KACnB,E,0ICTK,MAAMipK,EAwBXjoL,YAAYC,EAA2B0pE,GACrC,GAAgB,MAAZ1pE,EAAJ,CAoBA,OAhBAN,KAAKQ,GAAKF,EAASE,GACnBR,KAAKU,eAAiBJ,EAASI,eAC/BV,KAAK65E,SAAWv5E,EAASu5E,SACzB75E,KAAKyM,KAAOnM,EAASmM,KACrBzM,KAAKwlK,aAAellK,EAASklK,aAC7BxlK,KAAKw5H,oBAAsBl5H,EAASk5H,oBACpCx5H,KAAKi6E,SAAW35E,EAAS25E,SACzBj6E,KAAKk8B,aAAe57B,EAAS47B,aAC7Bl8B,KAAKmE,KAAO7D,EAAS6D,KACrBnE,KAAKW,KAAOL,EAASK,KACrBX,KAAK00D,MAAQp0D,EAASo0D,MACtB10D,KAAKgqE,cAAiC,MAAjBA,EAAwBA,EAAgB1pE,EAAS0pE,cACtEhqE,KAAK4qE,aAAetqE,EAASsqE,aAC7B5qE,KAAK4Q,YAActQ,EAASsQ,YAC5B5Q,KAAKu7E,SAAWj7E,EAASi7E,SAEjBv7E,KAAKmE,MACX,KAAK,IAAWuwE,MACd10E,KAAK20E,MAAQ,IAAI,IAAUr0E,EAASq0E,OACpC,MACF,KAAK,IAAW+O,WACd1jF,KAAK2jF,WAAa,IAAI,IAAerjF,EAASqjF,YAC9C,MACF,KAAK,IAAW57D,KACd/nB,KAAK4jF,KAAO,IAAI,IAAStjF,EAASsjF,MAClC,MACF,KAAK,IAAWK,SACdjkF,KAAKspC,SAAW,IAAI,IAAahpC,EAASgpC,UAMvB,MAAnBhpC,EAAS21E,SACXj2E,KAAKi2E,OAAS31E,EAAS21E,OAAOj1E,KAAKqvE,GAAM,IAAI,IAAUA,MAE7B,MAAxB/vE,EAAS22E,cACXj3E,KAAKi3E,YAAc32E,EAAS22E,YAAYj2E,KAAKkZ,GAAM,IAAI,IAAeA,MAExC,MAA5B5Z,EAASy6E,kBACX/6E,KAAK+6E,gBAAkBz6E,EAASy6E,gBAAgB/5E,KAAKg6E,GAAO,IAAI,IAAoBA,K,CAExF,E,gDCjFK,MAAMutG,EAOXloL,YAAYC,GACVN,KAAKQ,GAAKF,EAASE,GACnBR,KAAKU,eAAiBJ,EAASI,eAC/BV,KAAKW,KAAOL,EAASK,KACrBX,KAAKa,WAAaP,EAASO,WAC3Bb,KAAKiD,SAAW3C,EAAS2C,QAC3B,E,gDCZK,MAAMulL,EAMXnoL,YAAYC,GACM,MAAZA,IAGJN,KAAKmE,KAAO7D,EAAS6D,KACrBnE,KAAKW,KAAOL,EAASK,KACrBX,KAAKsG,MAAQhG,EAASgG,MACtBtG,KAAKu8E,SAAWj8E,EAASi8E,SAC3B,E,gDCfK,MAAMksG,EAoBXpoL,YAAYmC,GACE,MAARA,IAIJxC,KAAK+b,MAAQvZ,EAAKuZ,MAClB/b,KAAKkkF,UAAY1hF,EAAK0hF,UACtBlkF,KAAKmkF,WAAa3hF,EAAK2hF,WACvBnkF,KAAKokF,SAAW5hF,EAAK4hF,SACrBpkF,KAAKqkF,SAAW7hF,EAAK6hF,SACrBrkF,KAAKskF,SAAW9hF,EAAK8hF,SACrBtkF,KAAKukF,SAAW/hF,EAAK+hF,SACrBvkF,KAAK+vB,KAAOvtB,EAAKutB,KACjB/vB,KAAKiwB,MAAQztB,EAAKytB,MAClBjwB,KAAK0uB,WAAalsB,EAAKksB,WACvB1uB,KAAKmtB,QAAU3qB,EAAK2qB,QACpBntB,KAAKwkF,QAAUhiF,EAAKgiF,QACpBxkF,KAAKge,MAAQxb,EAAKwb,MAClBhe,KAAKykF,MAAQjiF,EAAKiiF,MAClBzkF,KAAK0kF,IAAMliF,EAAKkiF,IAChB1kF,KAAKgpC,SAAWxmC,EAAKwmC,SACrBhpC,KAAK2kF,eAAiBniF,EAAKmiF,eAC3B3kF,KAAK4kF,cAAgBpiF,EAAKoiF,cAC5B,E,gDC1CK,MAAM8jG,EAIXroL,YAAYmC,GAFZ,KAAAsuE,MAAsB,KAGR,MAARtuE,IAGJxC,KAAKw2E,IAAMh0E,EAAKg0E,IAChBx2E,KAAK8wE,MAAQtuE,EAAKsuE,MACpB,E,+DCTK,MAAM63G,EAQXtoL,YAAYmC,GACE,MAARA,IAIJxC,KAAKgpC,SAAWxmC,EAAKwmC,SACrBhpC,KAAKipC,SAAWzmC,EAAKymC,SACrBjpC,KAAKk7E,qBAAuB14E,EAAK04E,qBACjCl7E,KAAKyjF,KAAOjhF,EAAKihF,KACjBzjF,KAAKi+E,mBAAqBz7E,EAAKy7E,mBAE3Bz7E,EAAK6zE,OACPr2E,KAAKq2E,KAAO7zE,EAAK6zE,KAAKr1E,KAAKyD,GAAM,IAAI,IAAaA,MAEtD,E,gDCxBK,MAAMmkL,EAIXvoL,YAAYC,GACM,MAAZA,IAIJN,KAAKipC,SAAW3oC,EAAS2oC,SACzBjpC,KAAKi7E,aAAe36E,EAAS26E,aAC/B,E,8CCVK,MAAM4tG,EAGXxoL,YAAYmC,GACE,MAARA,IAIJxC,KAAKmE,KAAO3B,EAAK2B,KACnB,E,4ZCHK,MAAM2kL,UAAmB,IAQ9BzoL,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKwe,KAAOpJ,EAAIoJ,KAChBxe,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE5U,GAAI,KACJ++B,IAAK,KACL80B,SAAU,KACVD,SAAU,KACV7/C,IAAK,MAEP,CAAC,KAAM,MAAO,aAElB,CAEM6lC,QAAQp4C,EAAe45C,G,yCAC3B,MAAMv6C,QAAarB,KAAKw4E,WACtB,IAAI,IAAex4E,MACnB,CACEo0D,SAAU,MAEZpyD,EACA45C,GAOF,OAJgB,MAAZ57C,KAAKuU,MACPlT,EAAKkT,UAAYvU,KAAK+oL,qBAAqB/mL,EAAO45C,IAG7Cv6C,CACT,G,CAEc0nL,qBAAqB/mL,EAAe45C,G,yCAChD,IACgB,MAAVA,IACFA,QAAe57C,KAAK8/K,oBAAoB99K,IAG1C,MAAMu5C,EAAiB,IAAM88B,sBAAsBynC,oBAC7CzlE,QAAiBkB,EAAef,eAAex6C,KAAKuU,IAAKqnC,GAC/D,OAAO,IAAI,IAAmBvB,E,CAC9B,MAAOtuC,G,CAGX,G,CAEc+zK,oBAAoB99K,G,yCAChC,MAAMknB,EAAgB,IAAMmvD,sBAAsBC,mBAClD,OAAgB,MAATt2E,QACGknB,EAAc2F,UAAU7sB,SACxBknB,EAAc25B,yBAC1B,G,CAEAmmI,mBACE,MAAM9uK,EAAI,IAAI,IAcd,OAbAA,EAAEsE,KAAOxe,KAAKwe,KACdxe,KAAK++K,eACH/+K,KACAka,EACA,CACE1Z,GAAI,KACJ++B,IAAK,KACL80B,SAAU,KACVD,SAAU,KACV7/C,IAAK,MAEP,CAAC,KAAM,MAAO,aAET2F,CACT,CAEA9Y,gBAAgBgU,GACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAMb,EAAM,IAAUg2B,SAASn1B,EAAIb,KAC7B6/C,EAAW,IAAU7pB,SAASn1B,EAAIg/C,UAExC,OAAO9yD,OAAOC,OAAO,IAAIunL,EAAc1zK,EAAK,CAC1Cb,MACA6/C,YAEJ,E,gGClGK,MAAMrsC,UAAa,IAQxB1nB,YAAY+U,GACV7U,QACW,MAAP6U,GAIJpV,KAAKm4E,iBACHn4E,KACAoV,EACA,CACEyuE,eAAgB,KAChBC,MAAO,KACPrkD,OAAQ,KACRskD,SAAU,KACVC,QAAS,KACT3kE,KAAM,MAER,GAEJ,CAEA+6B,QAAQp4C,EAAe45C,GACrB,OAAO57C,KAAKw4E,WACV,IAAI,IACJ,CACEqL,eAAgB,KAChBC,MAAO,KACPrkD,OAAQ,KACRskD,SAAU,KACVC,QAAS,KACT3kE,KAAM,MAERrd,EACA45C,EAEJ,CAEAqtI,aACE,MAAMhoL,EAAI,IAAI,IASd,OARAjB,KAAK++K,eAAe/+K,KAAMiB,EAAG,CAC3B4iF,eAAgB,KAChBC,MAAO,KACPrkD,OAAQ,KACRskD,SAAU,KACVC,QAAS,KACT3kE,KAAM,OAEDpe,CACT,CAEAG,gBAAgBgU,GACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAMyuE,EAAiB,IAAUt5C,SAASn1B,EAAIyuE,gBACxCC,EAAQ,IAAUv5C,SAASn1B,EAAI0uE,OAC/BrkD,EAAS,IAAU8K,SAASn1B,EAAIqqB,QAChCskD,EAAW,IAAUx5C,SAASn1B,EAAI2uE,UAClCC,EAAU,IAAUz5C,SAASn1B,EAAI4uE,SACjC3kE,EAAO,IAAUkrB,SAASn1B,EAAIiK,MACpC,OAAO/d,OAAOC,OAAO,IAAIwmB,EAAQ3S,EAAK,CACpCyuE,iBACAC,QACArkD,SACAskD,WACAC,UACA3kE,QAEJ,E,yeChEK,MAAMgpC,UAAe,IA2B1BhoD,YAAY+U,EAAkBo6C,EAAuB,MAEnD,GADAjvD,QA3BO,KAAA8oD,eAAiB,IAAehB,OA4B5B,MAAPjzC,EAAJ,CAiCA,OA7BApV,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE5U,GAAI,KACJE,eAAgB,KAChBm5E,SAAU,KACVl5E,KAAM,KACN+zD,MAAO,MAET,CAAC,KAAM,iBAAkB,aAG3B10D,KAAKmE,KAAOiR,EAAIjR,KAChBnE,KAAKi6E,SAAW7kE,EAAI6kE,SACpBj6E,KAAKw5H,oBAAsBpkH,EAAIokH,oBAC/Bx5H,KAAKyM,KAAO2I,EAAI3I,KACQ,MAApB2I,EAAIowJ,aACNxlK,KAAKwlK,aAAepwJ,EAAIowJ,aAExBxlK,KAAKwlK,cAAe,EAEtBxlK,KAAKk8B,aAAmC,MAApB9mB,EAAI8mB,aAAuB,IAAI5c,KAAKlK,EAAI8mB,cAAgB,KAC5El8B,KAAKgqE,cAAgB50D,EAAI40D,cACzBhqE,KAAKwvD,UAAYA,EACjBxvD,KAAK4qE,aAAmC,MAApBx1D,EAAIw1D,aAAuB,IAAItrD,KAAKlK,EAAIw1D,cAAgB,KAC5E5qE,KAAK4Q,YAAiC,MAAnBwE,EAAIxE,YAAsB,IAAI0O,KAAKlK,EAAIxE,aAAe,KACzE5Q,KAAKu7E,SAAWnmE,EAAImmE,SAEZv7E,KAAKmE,MACX,KAAK,IAAWuwE,MACd10E,KAAK20E,MAAQ,IAAI,IAAMv/D,EAAIu/D,OAC3B,MACF,KAAK,IAAW+O,WACd1jF,KAAK2jF,WAAa,IAAI,IAAWvuE,EAAIuuE,YACrC,MACF,KAAK,IAAW57D,KACd/nB,KAAK4jF,KAAO,IAAI,IAAKxuE,EAAIwuE,MACzB,MACF,KAAK,IAAWK,SACdjkF,KAAKspC,SAAW,IAAI,IAASl0B,EAAIk0B,UAMd,MAAnBl0B,EAAI6hE,YACNj3E,KAAKi3E,YAAc7hE,EAAI6hE,YAAYj2E,KAAKkZ,GAAM,IAAI,IAAWA,KAE7Dla,KAAKi3E,YAAc,KAGH,MAAd7hE,EAAI6gE,OACNj2E,KAAKi2E,OAAS7gE,EAAI6gE,OAAOj1E,KAAKqvE,GAAM,IAAI,IAAMA,KAE9CrwE,KAAKi2E,OAAS,KAGW,MAAvB7gE,EAAI2lE,gBACN/6E,KAAK+6E,gBAAkB3lE,EAAI2lE,gBAAgB/5E,KAAKg6E,GAAO,IAAI,IAASA,KAEpEh7E,KAAK+6E,gBAAkB,I,CAE3B,CAEM3gC,QAAQwB,G,yCACZ,MAAMw8B,EAAQ,IAAI,IAAWp4E,MAY7B,aAVMA,KAAKw4E,WACTJ,EACA,CACEz3E,KAAM,KACN+zD,MAAO,MAET10D,KAAKU,eACLk7C,GAGM57C,KAAKmE,MACX,KAAK,IAAWuwE,MACd0D,EAAMzD,YAAc30E,KAAK20E,MAAMv6B,QAAQp6C,KAAKU,eAAgBk7C,GAC5D,MACF,KAAK,IAAW8nC,WACdtL,EAAMuL,iBAAmB3jF,KAAK2jF,WAAWvpC,QAAQp6C,KAAKU,eAAgBk7C,GACtE,MACF,KAAK,IAAW7zB,KACdqwD,EAAMwL,WAAa5jF,KAAK4jF,KAAKxpC,QAAQp6C,KAAKU,eAAgBk7C,GAC1D,MACF,KAAK,IAAWqoC,SACd7L,EAAM9uC,eAAiBtpC,KAAKspC,SAAS8Q,QAAQp6C,KAAKU,eAAgBk7C,GAMtE,MAAM55C,EAAQhC,KAAKU,eAEnB,GAAwB,MAApBV,KAAKi3E,aAAuBj3E,KAAKi3E,YAAYtpE,OAAS,EAAG,CAC3D,MAAMspE,EAAqB,SACrBj3E,KAAKi3E,YAAYkF,QAAO,CAACtgE,EAASkgE,IAC/BlgE,EACJjM,MAAK,IACGmsE,EAAW3hC,QAAQp4C,EAAO45C,KAElChsC,MAAMs5K,IACLjyG,EAAYh3E,KAAKipL,EAAc,KAElCpkL,QAAQ4B,WACX0xE,EAAMnB,YAAcA,C,CAGtB,GAAmB,MAAfj3E,KAAKi2E,QAAkBj2E,KAAKi2E,OAAOtoE,OAAS,EAAG,CACjD,MAAMsoE,EAAgB,SAChBj2E,KAAKi2E,OAAOkG,QAAO,CAACtgE,EAASy4D,IAC1Bz4D,EACJjM,MAAK,IACG0kE,EAAMl6B,QAAQp4C,EAAO45C,KAE7BhsC,MAAMu5K,IACLlzG,EAAOh2E,KAAKkpL,EAAS,KAExBrkL,QAAQ4B,WACX0xE,EAAMnC,OAASA,C,CAGjB,GAA4B,MAAxBj2E,KAAK+6E,iBAA2B/6E,KAAK+6E,gBAAgBptE,OAAS,EAAG,CACnE,MAAMotE,EAAyB,SACzB/6E,KAAK+6E,gBAAgBoB,QAAO,CAACtgE,EAASm/D,IACnCn/D,EACJjM,MAAK,IACGorE,EAAG5gC,QAAQp4C,EAAO45C,KAE1BhsC,MAAMw5K,IACLruG,EAAgB96E,KAAKmpL,EAAM,KAE9BtkL,QAAQ4B,WACX0xE,EAAM2C,gBAAkBA,C,CAG1B,OAAO3C,CACT,G,CAEAuH,eACE,MAAM1+E,EAAI,IAAI,IAoBd,OAnBAA,EAAET,GAAKR,KAAKQ,GACZS,EAAEP,eAAiBV,KAAKU,eACxBO,EAAE44E,SAAW75E,KAAK65E,SAClB54E,EAAEwL,KAAOzM,KAAKyM,KACdxL,EAAEukK,aAAexlK,KAAKwlK,aACtBvkK,EAAEu4H,oBAAsBx5H,KAAKw5H,oBAC7Bv4H,EAAEg5E,SAAWj6E,KAAKi6E,SAClBh5E,EAAEi7B,aAAoC,MAArBl8B,KAAKk8B,aAAuBl8B,KAAKk8B,aAAakO,cAAgB,KAC/EnpC,EAAEkD,KAAOnE,KAAKmE,KACdlD,EAAE+oE,cAAgBhqE,KAAKgqE,cACvB/oE,EAAE2pE,aAAoC,MAArB5qE,KAAK4qE,aAAuB5qE,KAAK4qE,aAAaxgC,cAAgB,KAC/EnpC,EAAE2P,YAAkC,MAApB5Q,KAAK4Q,YAAsB5Q,KAAK4Q,YAAYw5B,cAAgB,KAC5EnpC,EAAEs6E,SAAWv7E,KAAKu7E,SAElBv7E,KAAK++K,eAAe/+K,KAAMiB,EAAG,CAC3BN,KAAM,KACN+zD,MAAO,OAGDzzD,EAAEkD,MACR,KAAK,IAAWuwE,MACdzzE,EAAE0zE,MAAQ30E,KAAK20E,MAAM00G,cACrB,MACF,KAAK,IAAW3lG,WACdziF,EAAE0iF,WAAa3jF,KAAK2jF,WAAW2lG,mBAC/B,MACF,KAAK,IAAWvhK,KACd9mB,EAAE2iF,KAAO5jF,KAAK4jF,KAAKqlG,aACnB,MACF,KAAK,IAAWhlG,SACdhjF,EAAEqoC,SAAWtpC,KAAKspC,SAASigJ,iBAe/B,OATmB,MAAfvpL,KAAKi2E,SACPh1E,EAAEg1E,OAASj2E,KAAKi2E,OAAOj1E,KAAKqvE,GAAMA,EAAEm5G,iBAEd,MAApBxpL,KAAKi3E,cACPh2E,EAAEg2E,YAAcj3E,KAAKi3E,YAAYj2E,KAAKkZ,GAAMA,EAAE8uK,sBAEpB,MAAxBhpL,KAAK+6E,kBACP95E,EAAE85E,gBAAkB/6E,KAAK+6E,gBAAgB/5E,KAAKg6E,GAAOA,EAAGyuG,2BAEnDxoL,CACT,CAEAG,gBAAgBgU,G,UACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAMi5D,EAAS,IAAIhmB,EACb1nD,EAAO,IAAU4pC,SAASn1B,EAAIzU,MAC9B+zD,EAAQ,IAAUnqB,SAASn1B,EAAIs/C,OAC/Bx4B,EAAmC,MAApB9mB,EAAI8mB,aAAuB,KAAO,IAAI5c,KAAKlK,EAAI8mB,cAC9DtrB,EAAiC,MAAnBwE,EAAIxE,YAAsB,KAAO,IAAI0O,KAAKlK,EAAIxE,aAC5DqmE,EAA6B,QAAf,EAAA7hE,EAAI6hE,mBAAW,eAAEj2E,KAAKkZ,GAAW,IAAWqwB,SAASrwB,KACnE+7D,EAAmB,QAAV,EAAA7gE,EAAI6gE,cAAM,eAAEj1E,KAAKqvE,GAAW,IAAM9lC,SAAS8lC,KACpD0K,EAAqC,QAAnB,EAAA3lE,EAAI2lE,uBAAe,eAAE/5E,KAAKg6E,GAAY,IAASzwC,SAASywC,KAYhF,OAVA15E,OAAOC,OAAO8sE,EAAQj5D,EAAK,CACzBzU,OACA+zD,QACAx4B,eACAtrB,cACAqmE,cACAhB,SACA8E,oBAGM3lE,EAAIjR,MACV,KAAK,IAAW4jB,KACdsmD,EAAOuV,KAAO,IAAKr5C,SAASn1B,EAAIwuE,MAChC,MACF,KAAK,IAAWK,SACd5V,EAAO/kC,SAAW,IAASiB,SAASn1B,EAAIk0B,UACxC,MACF,KAAK,IAAWorC,MACdrG,EAAOsG,MAAQ,IAAMpqC,SAASn1B,EAAIu/D,OAClC,MACF,KAAK,IAAW+O,WACdrV,EAAOsV,WAAa,IAAWp5C,SAASn1B,EAAIuuE,YAMhD,OAAOtV,CACT,E,0EC3RK,MAAM10D,UAAmB,IAQ9BtZ,YAAY+U,GACV7U,QACW,MAAP6U,GAIJpV,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE5U,GAAI,KACJE,eAAgB,KAChBC,KAAM,KACNE,WAAY,KACZoC,SAAU,KACVC,cAAe,MAEjB,CAAC,KAAM,iBAAkB,aAAc,WAAY,iBAEvD,CAEAk3C,UACE,OAAOp6C,KAAKw4E,WACV,IAAI,IAAex4E,MACnB,CACEW,KAAM,MAERX,KAAKU,eAET,E,gGCjCK,MAAMgpL,UAAc,IAMzBrpL,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKmE,KAAOiR,EAAIjR,KAChBnE,KAAKu8E,SAAWnnE,EAAImnE,SACpBv8E,KAAKm4E,iBACHn4E,KACAoV,EACA,CACEzU,KAAM,KACN2F,MAAO,MAET,IAEJ,CAEA8zC,QAAQp4C,EAAe45C,GACrB,OAAO57C,KAAKw4E,WACV,IAAI,IAAUx4E,MACd,CACEW,KAAM,KACN2F,MAAO,MAETtE,EACA45C,EAEJ,CAEA4tI,cACE,MAAMn5G,EAAI,IAAI,IAYd,OAXArwE,KAAK++K,eACH/+K,KACAqwE,EACA,CACE1vE,KAAM,KACN2F,MAAO,KACPnC,KAAM,KACNo4E,SAAU,MAEZ,CAAC,OAAQ,aAEJlM,CACT,CAEAjvE,gBAAgBgU,GACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAMzU,EAAO,IAAU4pC,SAASn1B,EAAIzU,MAC9B2F,EAAQ,IAAUikC,SAASn1B,EAAI9O,OAErC,OAAOhF,OAAOC,OAAO,IAAImoL,EAASt0K,EAAK,CACrCzU,OACA2F,SAEJ,E,qFCnEK,MAAMqjL,UAAe,IAK1BtpL,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE5U,GAAI,KACJG,KAAM,MAER,CAAC,OAGHX,KAAKk8B,aAAmC,MAApB9mB,EAAI8mB,aAAuB,IAAI5c,KAAKlK,EAAI8mB,cAAgB,KAC9E,CAEAke,UACE,OAAOp6C,KAAKw4E,WACV,IAAI,IAAWx4E,MACf,CACEW,KAAM,MAER,KAEJ,CAEAS,gBAAgBgU,GACd,MAAM8mB,EAAmC,MAApB9mB,EAAI8mB,aAAuB,KAAO,IAAI5c,KAAKlK,EAAI8mB,cACpE,OAAO56B,OAAOC,OAAO,IAAIooL,EAAUv0K,EAAK,CAAEzU,KAAM,IAAU4pC,SAASn1B,EAAIzU,MAAOu7B,gBAChF,E,gGCpCK,MAAM+nD,UAAiB,IAoB5B5jF,YAAY+U,GACV7U,QACW,MAAP6U,GAIJpV,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE2G,MAAO,KACPmoE,UAAW,KACXC,WAAY,KACZC,SAAU,KACVC,SAAU,KACVC,SAAU,KACVC,SAAU,KACVx0D,KAAM,KACNE,MAAO,KACPvB,WAAY,KACZvB,QAAS,KACTq3D,QAAS,KACTxmE,MAAO,KACPymE,MAAO,KACPC,IAAK,KACL17C,SAAU,KACV27C,eAAgB,KAChBC,cAAe,MAEjB,GAEJ,CAEAxqC,QAAQp4C,EAAe45C,GACrB,OAAO57C,KAAKw4E,WACV,IAAI,IACJ,CACEz8D,MAAO,KACPmoE,UAAW,KACXC,WAAY,KACZC,SAAU,KACVC,SAAU,KACVC,SAAU,KACVC,SAAU,KACVx0D,KAAM,KACNE,MAAO,KACPvB,WAAY,KACZvB,QAAS,KACTq3D,QAAS,KACTxmE,MAAO,KACPymE,MAAO,KACPC,IAAK,KACL17C,SAAU,KACV27C,eAAgB,KAChBC,cAAe,MAEjB5iF,EACA45C,EAEJ,CAEA2tI,iBACE,MAAM77K,EAAI,IAAI,IAqBd,OApBA1N,KAAK++K,eAAe/+K,KAAM0N,EAAG,CAC3BqO,MAAO,KACPmoE,UAAW,KACXC,WAAY,KACZC,SAAU,KACVC,SAAU,KACVC,SAAU,KACVC,SAAU,KACVx0D,KAAM,KACNE,MAAO,KACPvB,WAAY,KACZvB,QAAS,KACTq3D,QAAS,KACTxmE,MAAO,KACPymE,MAAO,KACPC,IAAK,KACL17C,SAAU,KACV27C,eAAgB,KAChBC,cAAe,OAEVl3E,CACT,CAEAtM,gBAAgBgU,GACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAM2G,EAAQ,IAAUwuB,SAASn1B,EAAI2G,OAC/BmoE,EAAY,IAAU35C,SAASn1B,EAAI8uE,WACnCC,EAAa,IAAU55C,SAASn1B,EAAI+uE,YACpCC,EAAW,IAAU75C,SAASn1B,EAAIgvE,UAClCC,EAAW,IAAU95C,SAASn1B,EAAIivE,UAClCC,EAAW,IAAU/5C,SAASn1B,EAAIkvE,UAClCC,EAAW,IAAUh6C,SAASn1B,EAAImvE,UAClCx0D,EAAO,IAAUwa,SAASn1B,EAAI2a,MAC9BE,EAAQ,IAAUsa,SAASn1B,EAAI6a,OAC/BvB,EAAa,IAAU6b,SAASn1B,EAAIsZ,YACpCvB,EAAU,IAAUod,SAASn1B,EAAI+X,SACjCq3D,EAAU,IAAUj6C,SAASn1B,EAAIovE,SACjCxmE,EAAQ,IAAUusB,SAASn1B,EAAI4I,OAC/BymE,EAAQ,IAAUl6C,SAASn1B,EAAIqvE,OAC/BC,EAAM,IAAUn6C,SAASn1B,EAAIsvE,KAC7B17C,EAAW,IAAUuB,SAASn1B,EAAI4zB,UAClC27C,EAAiB,IAAUp6C,SAASn1B,EAAIuvE,gBACxCC,EAAgB,IAAUr6C,SAASn1B,EAAIwvE,eAE7C,OAAOtjF,OAAOC,OAAO,IAAI0iF,EAAY7uE,EAAK,CACxC2G,QACAmoE,YACAC,aACAC,WACAC,WACAC,WACAC,WACAx0D,OACAE,QACAvB,aACAvB,UACAq3D,UACAxmE,QACAymE,QACAC,MACA17C,WACA27C,iBACAC,iBAEJ,E,gGCrJK,MAAMglG,UAAiB,IAI5BvpL,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAK8wE,MAAQ17D,EAAI07D,MACjB9wE,KAAKm4E,iBACHn4E,KACAoV,EACA,CACEohE,IAAK,MAEP,IAEJ,CAEAp8B,QAAQp4C,EAAe45C,GACrB,OAAO57C,KAAKw4E,WACV,IAAI,IAAax4E,MACjB,CACEw2E,IAAK,MAEPx0E,EACA45C,EAEJ,CAEAiuI,iBACE,MAAMplL,EAAI,IAAI,IAUd,OATAzE,KAAK++K,eACH/+K,KACAyE,EACA,CACE+xE,IAAK,KACL1F,MAAO,MAET,CAAC,UAEIrsE,CACT,CAEArD,gBAAgBgU,GACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAMohE,EAAM,IAAUjsC,SAASn1B,EAAIohE,KACnC,OAAOl1E,OAAOC,OAAO,IAAIqoL,EAAYx0K,EAAK,CACxCohE,OAEJ,E,iZCtDK,MAAM9B,UAAc,IAQzBr0E,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKk7E,qBACyB,MAA5B9lE,EAAI8lE,qBAA+B,IAAI57D,KAAKlK,EAAI8lE,sBAAwB,KAC1El7E,KAAKi+E,mBAAqB7oE,EAAI6oE,mBAC9Bj+E,KAAKm4E,iBACHn4E,KACAoV,EACA,CACE4zB,SAAU,KACVC,SAAU,KACVw6C,KAAM,MAER,IAGEruE,EAAIihE,OACNr2E,KAAKq2E,KAAO,GACZjhE,EAAIihE,KAAKzoE,SAASnJ,IAChBzE,KAAKq2E,KAAKp2E,KAAK,IAAI,IAASwE,GAAG,KAGrC,CAEM21C,QAAQp4C,EAAe45C,G,yCAC3B,MAAMv6C,QAAarB,KAAKw4E,WACtB,IAAI,IAAUx4E,MACd,CACEgpC,SAAU,KACVC,SAAU,KACVw6C,KAAM,MAERzhF,EACA45C,GAGF,GAAiB,MAAb57C,KAAKq2E,KAAc,CACrBh1E,EAAKg1E,KAAO,GACZ,IAAK,IAAI3oE,EAAI,EAAGA,EAAI1N,KAAKq2E,KAAK1oE,OAAQD,IAAK,CACzC,MAAM8oE,QAAYx2E,KAAKq2E,KAAK3oE,GAAG0sC,QAAQp4C,EAAO45C,GAC9Cv6C,EAAKg1E,KAAKp2E,KAAKu2E,E,EAInB,OAAOn1E,CACT,G,CAEAgoL,cACE,MAAMv0F,EAAI,IAAI,IAiBd,OAhBAA,EAAE5Z,qBAC6B,MAA7Bl7E,KAAKk7E,qBAA+Bl7E,KAAKk7E,qBAAqB9wC,cAAgB,KAChF0qD,EAAE7W,mBAAqBj+E,KAAKi+E,mBAC5Bj+E,KAAK++K,eAAe/+K,KAAM80F,EAAG,CAC3B9rD,SAAU,KACVC,SAAU,KACVw6C,KAAM,OAGS,MAAbzjF,KAAKq2E,MAAgBr2E,KAAKq2E,KAAK1oE,OAAS,IAC1CmnF,EAAEze,KAAO,GACTr2E,KAAKq2E,KAAKzoE,SAASnJ,IACjBqwF,EAAEze,KAAKp2E,KAAKwE,EAAEolL,iBAAiB,KAI5B/0F,CACT,CAEA1zF,gBAAgBgU,G,MACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAM4zB,EAAW,IAAUuB,SAASn1B,EAAI4zB,UAClCC,EAAW,IAAUsB,SAASn1B,EAAI6zB,UAClCw6C,EAAO,IAAUl5C,SAASn1B,EAAIquE,MAC9BvI,EACwB,MAA5B9lE,EAAI8lE,qBAA+B,KAAO,IAAI57D,KAAKlK,EAAI8lE,sBACnD7E,EAAe,QAAR,EAAAjhE,EAAIihE,YAAI,eAAEr1E,KAAKw1E,GAAa,IAASjsC,SAASisC,KAE3D,OAAOl1E,OAAOC,OAAO,IAAImzE,EAASt/D,EAAK,CACrC4zB,WACAC,WACAw6C,OACAvI,qBAAsBA,EACtB7E,KAAMA,GAEV,E,gGCrGK,MAAM4U,UAAiB,IAI5B5qF,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKm4E,iBAAiBn4E,KAAMoV,EAAK,CAC/B6zB,SAAU,OAEZjpC,KAAKi7E,aAAe,IAAI37D,KAAKlK,EAAI6lE,cACnC,CAEA7gC,QAAQp4C,EAAe45C,GACrB,OAAO57C,KAAKw4E,WACV,IAAI,IAAoBx4E,MACxB,CACEipC,SAAU,MAEZjnC,EACA45C,EAEJ,CAEA6tI,wBACE,MAAMzuG,EAAK,IAAI,IAKf,OAJAA,EAAGC,aAAej7E,KAAKi7E,aAAa7wC,cACpCpqC,KAAK++K,eAAe/+K,KAAMg7E,EAAI,CAC5B/xC,SAAU,OAEL+xC,CACT,CAEA55E,gBAAgBgU,GACd,GAAW,MAAPA,EACF,OAAO,KAGT,MAAM6zB,EAAW,IAAUsB,SAASn1B,EAAI6zB,UAClCgyC,EAAmC,MAApB7lE,EAAI6lE,aAAuB,KAAO,IAAI37D,KAAKlK,EAAI6lE,cAEpE,OAAO35E,OAAOC,OAAO,IAAI0pF,EAAY71E,EAAK,CACxC6zB,WACAgyC,gBAEJ,E,mFChDK,MAAMyI,UAAmB,IAG9BrjF,YAAY+U,GACV7U,QACW,MAAP6U,IAIJpV,KAAKmE,KAAOiR,EAAIjR,KAClB,CAEAi2C,QAAQp4C,EAAe45C,GACrB,OAAO92C,QAAQ4B,QAAQ,IAAI,IAAe1G,MAC5C,CAEAspL,mBACE,MAAMnhF,EAAI,IAAI,IAEd,OADAA,EAAEhkG,KAAOnE,KAAKmE,KACPgkG,CACT,CAEA/mG,gBAAgBgU,GACd,OAAW,MAAPA,EACK,KAGF9T,OAAOC,OAAO,IAAImiF,EAActuE,EACzC,E,gDCpCK,MAAM00K,EAIXzpL,YAAYuB,EAAelB,GACzBV,KAAK4B,IAAa,MAAPA,EAAc,GAAKA,EAC9B5B,KAAKU,eAAiBA,CACxB,E,gDCPK,MAAMqpL,EAGX1pL,YAAY2pE,GACVhqE,KAAKgqE,cAAiC,MAAjBA,EAAwB,GAAKA,CACpD,E,+DCDK,MAAMggH,EAIX3pL,YAAYm5E,GACVx5E,KAAKw5E,OAAS,IAAI,IAAcA,GAChCx5E,KAAKgqE,cAAgBwP,EAAOxP,aAC9B,E,+DCPK,MAAMigH,UAA4B,IAGvC5pL,YAAYm5E,GACVj5E,MAAMi5E,GACNx5E,KAAKQ,GAAKg5E,EAAOh5E,EACnB,E,iICVK,MAAM0pL,GCaN,MAAMC,EAmBX9pL,YAAYm5E,GAUV,OATAx5E,KAAKmE,KAAOq1E,EAAOr1E,KACnBnE,KAAK65E,SAAWL,EAAOK,SACvB75E,KAAKU,eAAiB84E,EAAO94E,eAC7BV,KAAKW,KAAO64E,EAAO74E,KAAO64E,EAAO74E,KAAK8sB,gBAAkB,KACxDztB,KAAK00D,MAAQ8kB,EAAO9kB,MAAQ8kB,EAAO9kB,MAAMjnC,gBAAkB,KAC3DztB,KAAKi6E,SAAWT,EAAOS,SACvBj6E,KAAKoqL,sBAAwB5wG,EAAOt9C,aACpCl8B,KAAKu7E,SAAW/B,EAAO+B,SAEfv7E,KAAKmE,MACX,KAAK,IAAWuwE,MACd10E,KAAK20E,MAAQ,IAAI,IACjB30E,KAAK20E,MAAM0B,KAAO,KAClBr2E,KAAK20E,MAAM3rC,SAAWwwC,EAAO7E,MAAM3rC,SAAWwwC,EAAO7E,MAAM3rC,SAASvb,gBAAkB,KACtFztB,KAAK20E,MAAM1rC,SAAWuwC,EAAO7E,MAAM1rC,SAAWuwC,EAAO7E,MAAM1rC,SAASxb,gBAAkB,KACtFztB,KAAK20E,MAAMuG,qBAC4B,MAArC1B,EAAO7E,MAAMuG,qBACT1B,EAAO7E,MAAMuG,qBAAqB9wC,cAClC,KACNpqC,KAAK20E,MAAM8O,KAAOjK,EAAO7E,MAAM8O,KAAOjK,EAAO7E,MAAM8O,KAAKh2D,gBAAkB,KAC1EztB,KAAK20E,MAAMsJ,mBAAqBzE,EAAO7E,MAAMsJ,mBAEpB,MAArBzE,EAAO7E,MAAM0B,OACfr2E,KAAK20E,MAAM0B,KAAOmD,EAAO7E,MAAM0B,KAAKr1E,KAAKyD,IACvC,MAAM+xE,EAAM,IAAI,IAGhB,OAFAA,EAAIA,IAAe,MAAT/xE,EAAE+xE,IAAc/xE,EAAE+xE,IAAI/oD,gBAAkB,KAClD+oD,EAAI1F,MAAmB,MAAXrsE,EAAEqsE,MAAgBrsE,EAAEqsE,MAAQ,KACjC0F,CAAG,KAGd,MACF,KAAK,IAAWkN,WACd1jF,KAAK2jF,WAAa,IAAI,IACtB3jF,KAAK2jF,WAAWx/E,KAAOq1E,EAAOmK,WAAWx/E,KACzC,MACF,KAAK,IAAW4jB,KACd/nB,KAAK4jF,KAAO,IAAI,IAChB5jF,KAAK4jF,KAAKC,eACsB,MAA9BrK,EAAOoK,KAAKC,eAAyBrK,EAAOoK,KAAKC,eAAep2D,gBAAkB,KACpFztB,KAAK4jF,KAAKE,MAA6B,MAArBtK,EAAOoK,KAAKE,MAAgBtK,EAAOoK,KAAKE,MAAMr2D,gBAAkB,KAClFztB,KAAK4jF,KAAKnkD,OAA+B,MAAtB+5C,EAAOoK,KAAKnkD,OAAiB+5C,EAAOoK,KAAKnkD,OAAOhS,gBAAkB,KACrFztB,KAAK4jF,KAAKG,SACgB,MAAxBvK,EAAOoK,KAAKG,SAAmBvK,EAAOoK,KAAKG,SAASt2D,gBAAkB,KACxEztB,KAAK4jF,KAAKI,QACe,MAAvBxK,EAAOoK,KAAKI,QAAkBxK,EAAOoK,KAAKI,QAAQv2D,gBAAkB,KACtEztB,KAAK4jF,KAAKvkE,KAA2B,MAApBm6D,EAAOoK,KAAKvkE,KAAem6D,EAAOoK,KAAKvkE,KAAKoO,gBAAkB,KAC/E,MACF,KAAK,IAAWw2D,SACdjkF,KAAKspC,SAAW,IAAI,IACpBtpC,KAAKspC,SAASvtB,MACa,MAAzBy9D,EAAOlwC,SAASvtB,MAAgBy9D,EAAOlwC,SAASvtB,MAAM0R,gBAAkB,KAC1EztB,KAAKspC,SAAS46C,UACiB,MAA7B1K,EAAOlwC,SAAS46C,UAAoB1K,EAAOlwC,SAAS46C,UAAUz2D,gBAAkB,KAClFztB,KAAKspC,SAAS66C,WACkB,MAA9B3K,EAAOlwC,SAAS66C,WAAqB3K,EAAOlwC,SAAS66C,WAAW12D,gBAAkB,KACpFztB,KAAKspC,SAAS86C,SACgB,MAA5B5K,EAAOlwC,SAAS86C,SAAmB5K,EAAOlwC,SAAS86C,SAAS32D,gBAAkB,KAChFztB,KAAKspC,SAAS+6C,SACgB,MAA5B7K,EAAOlwC,SAAS+6C,SAAmB7K,EAAOlwC,SAAS+6C,SAAS52D,gBAAkB,KAChFztB,KAAKspC,SAASg7C,SACgB,MAA5B9K,EAAOlwC,SAASg7C,SAAmB9K,EAAOlwC,SAASg7C,SAAS72D,gBAAkB,KAChFztB,KAAKspC,SAASi7C,SACgB,MAA5B/K,EAAOlwC,SAASi7C,SAAmB/K,EAAOlwC,SAASi7C,SAAS92D,gBAAkB,KAChFztB,KAAKspC,SAASvZ,KACY,MAAxBypD,EAAOlwC,SAASvZ,KAAeypD,EAAOlwC,SAASvZ,KAAKtC,gBAAkB,KACxEztB,KAAKspC,SAASrZ,MACa,MAAzBupD,EAAOlwC,SAASrZ,MAAgBupD,EAAOlwC,SAASrZ,MAAMxC,gBAAkB,KAC1EztB,KAAKspC,SAAS5a,WACkB,MAA9B8qD,EAAOlwC,SAAS5a,WAAqB8qD,EAAOlwC,SAAS5a,WAAWjB,gBAAkB,KACpFztB,KAAKspC,SAASnc,QACe,MAA3BqsD,EAAOlwC,SAASnc,QAAkBqsD,EAAOlwC,SAASnc,QAAQM,gBAAkB,KAC9EztB,KAAKspC,SAASk7C,QACe,MAA3BhL,EAAOlwC,SAASk7C,QAAkBhL,EAAOlwC,SAASk7C,QAAQ/2D,gBAAkB,KAC9EztB,KAAKspC,SAAStrB,MACa,MAAzBw7D,EAAOlwC,SAAStrB,MAAgBw7D,EAAOlwC,SAAStrB,MAAMyP,gBAAkB,KAC1EztB,KAAKspC,SAASm7C,MACa,MAAzBjL,EAAOlwC,SAASm7C,MAAgBjL,EAAOlwC,SAASm7C,MAAMh3D,gBAAkB,KAC1EztB,KAAKspC,SAASo7C,IACW,MAAvBlL,EAAOlwC,SAASo7C,IAAclL,EAAOlwC,SAASo7C,IAAIj3D,gBAAkB,KACtEztB,KAAKspC,SAASN,SACgB,MAA5BwwC,EAAOlwC,SAASN,SAAmBwwC,EAAOlwC,SAASN,SAASvb,gBAAkB,KAChFztB,KAAKspC,SAASq7C,eACsB,MAAlCnL,EAAOlwC,SAASq7C,eACZnL,EAAOlwC,SAASq7C,eAAel3D,gBAC/B,KACNztB,KAAKspC,SAASs7C,cACqB,MAAjCpL,EAAOlwC,SAASs7C,cACZpL,EAAOlwC,SAASs7C,cAAcn3D,gBAC9B,KAMW,MAAjB+rD,EAAOvD,SACTj2E,KAAKi2E,OAASuD,EAAOvD,OAAOj1E,KAAKqvE,IAC/B,MAAMiE,EAAQ,IAAI,IAKlB,OAJAA,EAAMnwE,KAAOksE,EAAElsE,KACfmwE,EAAM3zE,KAAO0vE,EAAE1vE,KAAO0vE,EAAE1vE,KAAK8sB,gBAAkB,KAC/C6mD,EAAMhuE,MAAQ+pE,EAAE/pE,MAAQ+pE,EAAE/pE,MAAMmnB,gBAAkB,KAClD6mD,EAAMiI,SAAWlM,EAAEkM,SACZjI,CAAK,KAIc,MAA1BkF,EAAOuB,kBACT/6E,KAAK+6E,gBAAkB,GACvBvB,EAAOuB,gBAAgBntE,SAASotE,IAC9Bh7E,KAAK+6E,gBAAgB96E,KAAK,CACxBg7E,aAAcD,EAAGC,aACjBhyC,SAAU+xC,EAAG/xC,SAAW+xC,EAAG/xC,SAASxb,gBAAkB,MACtD,KAIoB,MAAtB+rD,EAAOvC,cACTj3E,KAAKi3E,YAAc,CAAC,EACpBj3E,KAAKqqL,aAAe,CAAC,EACrB7wG,EAAOvC,YAAYrpE,SAASmuE,IAC1B,MAAM3nB,EAAW2nB,EAAW3nB,SAAW2nB,EAAW3nB,SAAS3mC,gBAAkB,KAC7EztB,KAAKi3E,YAAY8E,EAAWv7E,IAAM4zD,EAClC,MAAMk2H,EAAoB,IAAIJ,EAC9BI,EAAkBl2H,SAAWA,EACP,MAAlB2nB,EAAWxnE,MACb+1K,EAAkB/1K,IAAMwnE,EAAWxnE,IAAIkZ,iBAEzCztB,KAAKqqL,aAAatuG,EAAWv7E,IAAM8pL,CAAiB,IAG1D,E,gDC/JK,MAAMC,EAMXlqL,YAAYiwF,GAHZ,KAAAhtF,OAAqC,GACrC,KAAA5B,MAAoC,GAGhB,MAAd4uF,IAGJtwF,KAAKW,KAAO2vF,EAAW3vF,KAAO2vF,EAAW3vF,KAAK8sB,gBAAkB,KAChEztB,KAAKa,WAAayvF,EAAWzvF,WAC/B,E,+DCXK,MAAM2pL,UAA4B,IAGvCnqL,YAAYo9E,GACVl9E,MAAMk9E,GACNz9E,KAAKQ,GAAKi9E,EAAOj9E,EACnB,E,gDCRK,MAAMiqL,EAGXpqL,YAAYo9E,GACVz9E,KAAKW,KAAO88E,EAAO98E,KAAO88E,EAAO98E,KAAK8sB,gBAAkB,IAC1D,E,+DCLK,MAAMi9J,UAA2B,IAQtCrqL,YAAYC,GACVC,MAAMD,GACNN,KAAKQ,GAAKR,KAAKS,oBAAoB,MACnCT,KAAKu/B,IAAMv/B,KAAKS,oBAAoB,OACpCT,KAAKo0D,SAAWp0D,KAAKS,oBAAoB,YACzCT,KAAKuU,IAAMvU,KAAKS,oBAAoB,OACpCT,KAAKwe,KAAOxe,KAAKS,oBAAoB,QACrCT,KAAKq0D,SAAWr0D,KAAKS,oBAAoB,WAC3C,E,2IChBK,MAAMkqL,UAAgC,IAI3CtqL,YAAYC,GACVC,MAAMD,GACNN,KAAKipC,SAAWjpC,KAAKS,oBAAoB,YACzCT,KAAKi7E,aAAej7E,KAAKS,oBAAoB,eAC/C,ECCK,MAAMmqL,UAAuB,IAwBlCvqL,YAAYC,GACVC,MAAMD,GACNN,KAAKQ,GAAKR,KAAKS,oBAAoB,MACnCT,KAAKU,eAAiBV,KAAKS,oBAAoB,kBAC/CT,KAAK65E,SAAW75E,KAAKS,oBAAoB,aAAe,KACxDT,KAAKmE,KAAOnE,KAAKS,oBAAoB,QACrCT,KAAKW,KAAOX,KAAKS,oBAAoB,QACrCT,KAAK00D,MAAQ10D,KAAKS,oBAAoB,SACtCT,KAAKi6E,SAAWj6E,KAAKS,oBAAoB,cAAe,EACxDT,KAAKyM,OAASzM,KAAKS,oBAAoB,QACS,MAA5CT,KAAKS,oBAAoB,gBAC3BT,KAAKwlK,cAAe,EAEpBxlK,KAAKwlK,aAAexlK,KAAKS,oBAAoB,gBAE/CT,KAAKw5H,oBAAsBx5H,KAAKS,oBAAoB,uBACpDT,KAAKk8B,aAAel8B,KAAKS,oBAAoB,gBAC7CT,KAAKgqE,cAAgBhqE,KAAKS,oBAAoB,iBAC9CT,KAAK4qE,aAAe5qE,KAAKS,oBAAoB,gBAC7CT,KAAK4Q,YAAc5Q,KAAKS,oBAAoB,eAE5C,MAAMk0E,EAAQ30E,KAAKS,oBAAoB,SAC1B,MAATk0E,IACF30E,KAAK20E,MAAQ,IAAI,IAASA,IAG5B,MAAMiP,EAAO5jF,KAAKS,oBAAoB,QAC1B,MAARmjF,IACF5jF,KAAK4jF,KAAO,IAAI,IAAQA,IAG1B,MAAMt6C,EAAWtpC,KAAKS,oBAAoB,YAC1B,MAAZ6oC,IACFtpC,KAAKspC,SAAW,IAAI,IAAYA,IAGlC,MAAMq6C,EAAa3jF,KAAKS,oBAAoB,cAC1B,MAAdkjF,IACF3jF,KAAK2jF,WAAa,IAAI,IAAcA,IAGtC,MAAM1N,EAASj2E,KAAKS,oBAAoB,UAC1B,MAAVw1E,IACFj2E,KAAKi2E,OAASA,EAAOj1E,KAAKqvE,GAAW,IAAI,IAASA,MAGpD,MAAM4G,EAAcj3E,KAAKS,oBAAoB,eAC1B,MAAfw2E,IACFj3E,KAAKi3E,YAAcA,EAAYj2E,KAAKkZ,GAAW,IAAI,IAAmBA,MAGxE,MAAM6gE,EAAkB/6E,KAAKS,oBAAoB,mBAC1B,MAAnBs6E,IACF/6E,KAAK+6E,gBAAkBA,EAAgB/5E,KAAKy9J,GAAW,IAAIksB,EAAwBlsB,MAGrFz+J,KAAKu7E,SAAWv7E,KAAKS,oBAAoB,aAAe,IAAmB0sC,IAC7E,E,+DCtFK,MAAM09I,EAQXxqL,YAAY6Z,GAPZ,KAAA1Z,GAAa,KACb,KAAA++B,IAAc,KACd,KAAA/gB,KAAe,KACf,KAAA61C,SAAmB,KACnB,KAAAD,SAAmB,KACnB,KAAA7/C,IAA0B,KAGnB2F,IAILla,KAAKQ,GAAK0Z,EAAE1Z,GACZR,KAAKu/B,IAAMrlB,EAAEqlB,IACbv/B,KAAKwe,KAAOtE,EAAEsE,KACdxe,KAAKq0D,SAAWn6C,EAAEm6C,SACpB,CAEIk5B,eACF,IACE,GAAiB,MAAbvtF,KAAKwe,KACP,OAAOwwB,SAAShvC,KAAKwe,KAAM,K,CAE7B,S,CAGF,OAAO,CACT,CAEApd,gBAAgBgU,GACd,MAAMb,EAAiB,MAAXa,EAAIb,IAAc,KAAO,IAAmBg2B,SAASn1B,EAAIb,KACrE,OAAOjT,OAAOC,OAAO,IAAIspL,EAAkBz1K,EAAK,CAAEb,IAAKA,GACzD,E,0gBChCK,MAAMu2K,UAAiB,IAA9B,c,oBAEE,KAAAjnG,eAAyB,KAEzB,KAAAE,SAAmB,KAEnB,KAAAC,QAAkB,KAElB,KAAA3kE,KAAe,KAEP,KAAA0rK,OAAiB,KACjB,KAAAC,QAAkB,KAClB,KAAAC,UAAoB,IA+H9B,CA7HMC,iBACF,OAAoB,MAAblrL,KAAKqf,KAAe,IAAI8rK,OAAOnrL,KAAKqf,KAAK1R,QAAU,IAC5D,CAEIy9K,mBACF,OAAsB,MAAfprL,KAAKy/B,OAAiB,IAAI0rJ,OAAOnrL,KAAKy/B,OAAO9xB,QAAU,IAChE,CAGIm2E,YACF,OAAO9jF,KAAK+qL,MACd,CACIjnG,UAAMx9E,GACRtG,KAAK+qL,OAASzkL,EACdtG,KAAKirL,UAAY,IACnB,CAGIxrJ,aACF,OAAOz/B,KAAKgrL,OACd,CACIvrJ,WAAOn5B,GACTtG,KAAKgrL,QAAU1kL,EACftG,KAAKirL,UAAY,IACnB,CAEIx2G,eACF,GAAsB,MAAlBz0E,KAAKirL,YACPjrL,KAAKirL,UAAYjrL,KAAK8jF,MACH,MAAf9jF,KAAKy/B,QAAkBz/B,KAAKy/B,OAAO9xB,QAAU,GAAG,CAC5B,MAAlB3N,KAAKirL,WAAwC,KAAnBjrL,KAAKirL,UACjCjrL,KAAKirL,WAAa,KAElBjrL,KAAKirL,UAAY,GAInB,MAAM18K,EACJvO,KAAKy/B,OAAO9xB,QAAU,GAAgD,MAA3C3N,KAAKy/B,OAAOqxC,MAAM,IAAI4mC,OAAO,WAAqB,EAAI,EACnF13G,KAAKirL,WAAa,IAAMjrL,KAAKy/B,OAAOkxC,OAAO3wE,KAAKy/B,OAAO9xB,OAASY,E,CAGpE,OAAOvO,KAAKirL,SACd,CAEInoJ,iBACF,IAAK9iC,KAAK+jF,WAAa/jF,KAAKgkF,QAC1B,OAAO,KAGT,IAAI/sC,EAAuB,MAAjBj3C,KAAK+jF,UAAoB,IAAM/jF,KAAK+jF,UAAU/wE,OAAO,GAAK,KAEpE,OADAikC,GAAO,OAAyB,MAAhBj3C,KAAKgkF,QAAkBhkF,KAAKqrL,WAAWrrL,KAAKgkF,SAAW,QAChE/sC,CACT,CAEQo0I,WAAWp/H,GACjB,OAAuB,IAAhBA,EAAKt+C,OAAe,KAAOs+C,EAAOA,CAC3C,CAEA7qD,gBAAgBgU,GACd,OAAO9T,OAAOC,OAAO,IAAIupL,EAAY11K,EACvC,CAGAhU,8BAA8BkqL,GAC5B,GAAe,MAAXA,GAAsC,iBAAZA,GAA2C,KAAnBA,EAAQ3rK,OAC5D,OAAO,KAIT,IAAI4rK,EAAK,IAAI7zE,OAAO,MACpB,OAAyB,MAArB4zE,EAAQx6G,MAAMy6G,GACT,OAMP,sGAAsGv+E,KACpGs+E,GAGK,cAITC,EAAK,IAAI7zE,OAAO,UACS,MAArB4zE,EAAQx6G,MAAMy6G,GACT,QAITA,EAAK,IAAI7zE,OACP,iFAEuB,MAArB4zE,EAAQx6G,MAAMy6G,GACT,YAITA,EAAK,IAAI7zE,OAAO,OACS,MAArB4zE,EAAQx6G,MAAMy6G,GACT,eAITA,EAAK,IAAI7zE,OAAO,YACS,MAArB4zE,EAAQx6G,MAAMy6G,GACT,eAITA,EAAK,IAAI7zE,OAAO,yBACS,MAArB4zE,EAAQx6G,MAAMy6G,GACT,OAITA,EAAK,IAAI7zE,OAAO,qCACS,MAArB4zE,EAAQx6G,MAAMy6G,GACT,OAGF,UACT,EAzIA,IAAC,OAAkB,KAASC,gB,8DAE5B,IAAC,OAAkB,KAASC,SAAU,mB,wDAEtC,IAAC,OAAkB,KAASC,QAAS,kB,uDAErC,IAAC,OAAkB,KAASC,KAAM,gB,oDAelC,IAAC,OAAkB,KAASC,O,mFAS5B,IAAC,OAAkB,KAASpxK,Q,qPCnBvB,MAAM8tC,EA2BXjoD,YAAYY,G,MA1BH,KAAAooD,eAAiB,IAAef,WAEzC,KAAA9nD,GAAa,KACb,KAAAE,eAAyB,KACzB,KAAAm5E,SAAmB,KACnB,KAAAl5E,KAAe,KACf,KAAA+zD,MAAgB,KAChB,KAAAvwD,KAAmB,KACnB,KAAA81E,UAAW,EACX,KAAAu/C,qBAAsB,EACtB,KAAA/sH,MAAO,EACP,KAAA+4J,cAAe,EAEf,KAAA7wF,MAAQ,IAAI,IACZ,KAAArrC,SAAW,IAAI,IACf,KAAAs6C,KAAO,IAAI,IACX,KAAAD,WAAa,IAAI,IACjB,KAAA1M,YAAgC,KAChC,KAAAhB,OAAsB,KACtB,KAAA8E,gBAAyC,KACzC,KAAA/Q,cAA0B,KAC1B,KAAA9tC,aAAqB,KACrB,KAAA0uC,aAAqB,KACrB,KAAAh6D,YAAoB,KACpB,KAAA2qE,SAA+B,IAAmBpuC,KAG3ClsC,IAILjB,KAAKQ,GAAKS,EAAET,GACZR,KAAKU,eAAiBO,EAAEP,eACxBV,KAAK65E,SAAW54E,EAAE44E,SAClB75E,KAAKi6E,SAAWh5E,EAAEg5E,SAClBj6E,KAAKw5H,oBAAsBv4H,EAAEu4H,oBAC7Bx5H,KAAKyM,KAAOxL,EAAEwL,KACdzM,KAAKwlK,aAAevkK,EAAEukK,aACtBxlK,KAAKmE,KAAOlD,EAAEkD,KACdnE,KAAKwvD,UAAYvuD,EAAEuuD,UACnBxvD,KAAKgqE,cAAgB/oE,EAAE+oE,cACvBhqE,KAAKk8B,aAAej7B,EAAEi7B,aACtBl8B,KAAK4qE,aAAe3pE,EAAE2pE,aACtB5qE,KAAK4Q,YAAc3P,EAAE2P,YAErB5Q,KAAKu7E,SAAqB,QAAV,EAAAt6E,EAAEs6E,gBAAQ,QAAI,IAAmBpuC,KACnD,CAEYx8B,WACV,OAAQ3Q,KAAKmE,MACX,KAAK,IAAWuwE,MACd,OAAO10E,KAAK20E,MACd,KAAK,IAAW+O,WACd,OAAO1jF,KAAK2jF,WACd,KAAK,IAAW57D,KACd,OAAO/nB,KAAK4jF,KACd,KAAK,IAAWK,SACd,OAAOjkF,KAAKspC,SAKhB,OAAO,IACT,CAEImrC,eACF,OAAOz0E,KAAK2Q,KAAK8jE,QACnB,CAEImsD,yBACF,OAAO5gI,KAAK+6E,iBAAmB/6E,KAAK+6E,gBAAgBptE,OAAS,CAC/D,CAEIqpE,qBACF,OAAOh3E,KAAKi3E,aAAej3E,KAAKi3E,YAAYtpE,OAAS,CACvD,CAEIgsH,wBACF,GAAI35H,KAAKg3E,eACP,IAAK,IAAItpE,EAAI,EAAGA,EAAI1N,KAAKi3E,YAAYtpE,OAAQD,IAC3C,GAA+B,MAA3B1N,KAAKi3E,YAAYvpE,GAAG6G,IACtB,OAAO,EAIb,OAAO,CACT,CAEIuiE,gBACF,OAAO92E,KAAKi2E,QAAUj2E,KAAKi2E,OAAOtoE,OAAS,CAC7C,CAEIqzH,kCACF,OAAIhhI,KAAKmE,OAAS,IAAWuwE,OAAuB,MAAd10E,KAAK20E,OAET,MAAvB30E,KAAK20E,MAAM1rC,UAA4C,KAAxBjpC,KAAK20E,MAAM1rC,SAD5C,KAIFjpC,KAAK20E,MAAMuG,oBACpB,CAEI/E,gBACF,OAA2B,MAApBn2E,KAAK4Q,WACd,CAEI+pH,yBACF,OAAO36H,KAAK2Q,KAAKgqH,kBACnB,CAEAkxD,iBAAiBrrL,G,MACf,MAAMs7H,EAA2C,QAAvB,EAAA97H,KAAK26H,0BAAkB,eAAE54H,IAAIvB,GACvD,GAAyB,MAArBs7H,EACF,OAAO,KAGI97H,KAAK2Q,KAClB,OAAO3Q,KAAK2Q,KAAKmrH,EAAkBlhF,YACrC,CAEAkxI,mBAAmBtrL,G,MACjB,OAAsC,QAA/B,EAAAR,KAAK26H,mBAAmB54H,IAAIvB,UAAG,eAAEu7H,OAC1C,CAEA36H,gBAAgBgU,G,UACd,MAAM/T,EAAO,IAAIinD,EACXpsB,EAAmC,MAApB9mB,EAAI8mB,aAAuB,KAAO,IAAI5c,KAAKlK,EAAI8mB,cAC9DtrB,EAAiC,MAAnBwE,EAAIxE,YAAsB,KAAO,IAAI0O,KAAKlK,EAAIxE,aAC5DqmE,EAA6B,QAAf,EAAA7hE,EAAI6hE,mBAAW,eAAEj2E,KAAKkZ,GAAW,IAAeqwB,SAASrwB,KACvE+7D,EAAmB,QAAV,EAAA7gE,EAAI6gE,cAAM,eAAEj1E,KAAKqvE,GAAW,IAAU9lC,SAAS8lC,KACxD0K,EAAqC,QAAnB,EAAA3lE,EAAI2lE,uBAAe,eAAE/5E,KAAKg6E,GAAY,IAAoBzwC,SAASywC,KAU3F,OARA15E,OAAOC,OAAOF,EAAM+T,EAAK,CACvB8mB,aAAcA,EACdtrB,YAAaA,EACbqmE,YAAaA,EACbhB,OAAQA,EACR8E,gBAAiBA,IAGX3lE,EAAIjR,MACV,KAAK,IAAW4jB,KACd1mB,EAAKuiF,KAAO,IAASr5C,SAASn1B,EAAIwuE,MAClC,MACF,KAAK,IAAWK,SACd5iF,EAAKioC,SAAW,IAAaiB,SAASn1B,EAAIk0B,UAC1C,MACF,KAAK,IAAWorC,MACdrzE,EAAKszE,MAAQ,IAAUpqC,SAASn1B,EAAIu/D,OACpC,MACF,KAAK,IAAW+O,WACdriF,EAAKsiF,WAAa,IAAep5C,SAASn1B,EAAIuuE,YAMlD,OAAOtiF,CACT,E,uEC5KK,MAAMupI,EAAmB,IAEzB,MAAMmhD,EAQX1rL,YAAYY,GAPZ,KAAAT,GAAa,KACb,KAAAE,eAAyB,KACzB,KAAAC,KAAe,KACf,KAAAE,WAAqB,KACrB,KAAAoC,SAAoB,KACpB,KAAAC,cAAyB,KAGlBjC,IAILjB,KAAKQ,GAAKS,EAAET,GACZR,KAAKU,eAAiBO,EAAEP,eACxBV,KAAKa,WAAaI,EAAEJ,WAChBI,aAAa,MACfjB,KAAKiD,SAAWhC,EAAEgC,SAClBjD,KAAKkD,cAAgBjC,EAAEiC,eAE3B,E,gDCrBK,MAAM8oL,EASX3rL,YAAYgwE,GARZ,KAAA1vE,KAAe,KACf,KAAA2F,MAAgB,KAChB,KAAAnC,KAAkB,KAClB,KAAAm3H,UAAW,EACX,KAAAG,WAAY,EACZ,KAAAwwD,WAAY,EACZ,KAAA1vG,SAAyB,KAGlBlM,IAILrwE,KAAKmE,KAAOksE,EAAElsE,KACdnE,KAAKu8E,SAAWlM,EAAEkM,SACpB,CAEI2vG,kBACF,OAAqB,MAAdlsL,KAAKsG,MAAgB,WAAa,IAC3C,CAEAlF,gBAAgBgU,GACd,OAAO9T,OAAOC,OAAO,IAAIyqL,EAAa52K,EACxC,E,gDCxBK,MAAM+2K,EAKX9rL,YAAYgwE,GAJZ,KAAA7vE,GAAa,KACb,KAAAG,KAAe,KACf,KAAAu7B,aAAqB,KAGdm0C,IAILrwE,KAAKQ,GAAK6vE,EAAE7vE,GACZR,KAAKk8B,aAAem0C,EAAEn0C,aACxB,CAEA96B,gBAAgBgU,GACd,MAAM8mB,EAAmC,MAApB9mB,EAAI8mB,aAAuB,KAAO,IAAI5c,KAAKlK,EAAI8mB,cACpE,OAAO56B,OAAOC,OAAO,IAAI4qL,EAAc/2K,EAAK,CAAE8mB,gBAChD,E,qhBCfK,MAAMkwJ,UAAqB,IAsChC/rL,cACEE,QArCF,KAAAwb,MAAgB,KAEhB,KAAAooE,WAAqB,KAErB,KAAAE,SAAmB,KAEnB,KAAAC,SAAmB,KAEnB,KAAAC,SAAmB,KAEnB,KAAAx0D,KAAe,KAEf,KAAAE,MAAgB,KAEhB,KAAAvB,WAAqB,KAErB,KAAAvB,QAAkB,KAElB,KAAAq3D,QAAkB,KAElB,KAAAxmE,MAAgB,KAEhB,KAAAymE,MAAgB,KAEhB,KAAAC,IAAc,KAEd,KAAA17C,SAAmB,KAEnB,KAAA27C,eAAyB,KAEzB,KAAAC,cAAwB,KAEhB,KAAAynG,WAAqB,KACrB,KAAAC,UAAoB,KACpB,KAAArB,UAAoB,IAI5B,CAGI/mG,gBACF,OAAOlkF,KAAKqsL,UACd,CACInoG,cAAU59E,GACZtG,KAAKqsL,WAAa/lL,EAClBtG,KAAKirL,UAAY,IACnB,CAGI7mG,eACF,OAAOpkF,KAAKssL,SACd,CACIloG,aAAS99E,GACXtG,KAAKssL,UAAYhmL,EACjBtG,KAAKirL,UAAY,IACnB,CAEIx2G,eAcF,OAbsB,MAAlBz0E,KAAKirL,WAAwC,MAAlBjrL,KAAKkkF,WAAsC,MAAjBlkF,KAAKokF,WAC5DpkF,KAAKirL,UAAY,GACK,MAAlBjrL,KAAKkkF,YACPlkF,KAAKirL,UAAYjrL,KAAKkkF,WAEH,MAAjBlkF,KAAKokF,WACgB,KAAnBpkF,KAAKirL,YACPjrL,KAAKirL,WAAa,KAEpBjrL,KAAKirL,WAAajrL,KAAKokF,WAIpBpkF,KAAKirL,SACd,CAGIsB,eACF,GACgB,MAAdvsL,KAAK+b,OACa,MAAlB/b,KAAKkkF,WACc,MAAnBlkF,KAAKmkF,YACY,MAAjBnkF,KAAKokF,SACL,CACA,IAAIzjF,EAAO,GAaX,OAZkB,MAAdX,KAAK+b,QACPpb,GAAQX,KAAK+b,MAAQ,KAED,MAAlB/b,KAAKkkF,YACPvjF,GAAQX,KAAKkkF,UAAY,KAEJ,MAAnBlkF,KAAKmkF,aACPxjF,GAAQX,KAAKmkF,WAAa,KAEP,MAAjBnkF,KAAKokF,WACPzjF,GAAQX,KAAKokF,UAERzjF,EAAKgf,M,CAGd,OAAO,IACT,CAEI6sK,kBACF,IAAIjJ,EAAUvjL,KAAKqkF,SAanB,OAZK,IAAMh9D,mBAAmBrnB,KAAKskF,YAC5B,IAAMj9D,mBAAmBk8J,KAC5BA,GAAW,MAEbA,GAAWvjL,KAAKskF,UAEb,IAAMj9D,mBAAmBrnB,KAAKukF,YAC5B,IAAMl9D,mBAAmBk8J,KAC5BA,GAAW,MAEbA,GAAWvjL,KAAKukF,UAEXg/F,CACT,CAEIkJ,uBACF,GAAiB,MAAbzsL,KAAK+vB,MAA8B,MAAd/vB,KAAKiwB,OAAoC,MAAnBjwB,KAAK0uB,WAClD,OAAO,KAET,MAAMqB,EAAO/vB,KAAK+vB,MAAQ,IACpBE,EAAQjwB,KAAKiwB,MACbvB,EAAa1uB,KAAK0uB,YAAc,IACtC,IAAIg+J,EAAe38J,EAKnB,OAJK,IAAM1I,mBAAmB4I,KAC5By8J,GAAgB,KAAOz8J,GAEzBy8J,GAAgB,KAAOh+J,EAChBg+J,CACT,CAEAtrL,gBAAgBgU,GACd,OAAO9T,OAAOC,OAAO,IAAI6qL,EAAgBh3K,EAC3C,EAzIA,IAAC,OAAkB,KAASu3K,O,qDAE5B,IAAC,OAAkB,KAASC,Y,0DAE5B,IAAC,OAAkB,KAASC,U,wDAE5B,IAAC,OAAkB,KAASC,U,wDAE5B,IAAC,OAAkB,KAASC,U,wDAE5B,IAAC,OAAkB,KAASC,KAAM,Y,oDAElC,IAAC,OAAkB,KAAS53H,MAAO,iB,qDAEnC,IAAC,OAAkB,KAAS63H,WAAY,iB,0DAExC,IAAC,OAAkB,KAASC,S,uDAE5B,IAAC,OAAkB,KAASC,S,uDAE5B,IAAC,OAAkB,KAASvuK,O,qDAE5B,IAAC,OAAkB,KAASwuK,O,qDAE5B,IAAC,OAAkB,KAASC,K,mDAE5B,IAAC,OAAkB,KAASC,U,wDAE5B,IAAC,OAAkB,KAASC,gB,8DAE5B,IAAC,OAAkB,KAASC,e,6DAW5B,IAAC,OAAkB,KAASC,W,uFAS5B,IAAC,OAAkB,KAASC,U,sFA0B5B,IAAC,OAAkB,KAASC,U,+HClFvB,MAAeC,G,0ECItB,MAAMC,EAAqB,CACzB,WACA,UACA,SACA,SACA,UACA,SACA,SAEA,SACA,SACA,YACA,YACA,iBAGK,MAAMC,EASXztL,YAAYoE,GARZ,KAAAqsE,MAAsB,KAEd,KAAAi9G,KAAe,KACf,KAAAC,QAAkB,KAClB,KAAAC,UAAoB,KACpB,KAAAC,MAAgB,KAChB,KAAAC,WAAsB,KAGvB1pL,IAILzE,KAAK8wE,MAAQrsE,EAAEqsE,MACjB,CAEI0F,UACF,OAAOx2E,KAAK+tL,IACd,CACIv3G,QAAIlwE,GACNtG,KAAK+tL,KAAOznL,EACZtG,KAAKguL,QAAU,KACfhuL,KAAKmuL,WAAa,IACpB,CAEI9/G,aAQF,OAPoB,MAAhBruE,KAAKguL,SAA+B,MAAZhuL,KAAKw2E,MAC/Bx2E,KAAKguL,QAAU,IAAM/qF,UAAUjjG,KAAKw2E,KACf,KAAjBx2E,KAAKguL,UACPhuL,KAAKguL,QAAU,OAIZhuL,KAAKguL,OACd,CAEI72G,eACF,OAAIn3E,KAAK8wE,QAAU,KAAasG,kBACvB,MAEa,MAAlBp3E,KAAKiuL,WAAiC,MAAZjuL,KAAKw2E,MACjCx2E,KAAKiuL,UAAY,IAAMh1C,YAAYj5I,KAAKw2E,KACjB,KAAnBx2E,KAAKiuL,YACPjuL,KAAKiuL,UAAY,OAIdjuL,KAAKiuL,UACd,CAEInxK,WACF,OAAI9c,KAAK8wE,QAAU,KAAasG,kBACvB,MAES,MAAdp3E,KAAKkuL,OAA6B,MAAZluL,KAAKw2E,MAC7Bx2E,KAAKkuL,MAAQ,IAAME,QAAQpuL,KAAKw2E,KACb,KAAfx2E,KAAKkuL,QACPluL,KAAKkuL,MAAQ,OAIVluL,KAAKkuL,MACd,CAEIG,oBACF,OAAwB,MAAjBruL,KAAKm3E,SAAmBn3E,KAAKm3E,SAAWn3E,KAAKw2E,GACtD,CAEI83G,gBACF,OAAoB,MAAbtuL,KAAK8c,KAAe9c,KAAK8c,KAAO9c,KAAKw2E,GAC9C,CAEIu4F,gBACF,OACc,MAAZ/uK,KAAKw2E,MAC4B,IAAhCx2E,KAAKw2E,IAAI1+C,QAAQ,YACiB,IAAjC93B,KAAKw2E,IAAI1+C,QAAQ,aAChB93B,KAAKw2E,IAAI1+C,QAAQ,OAAS,IAAM,IAAMzQ,mBAAmB,IAAM47E,UAAUjjG,KAAKw2E,MAErF,CAEI8qD,gBACF,GAAuB,MAAnBthI,KAAKmuL,WACP,OAAOnuL,KAAKmuL,WAEd,GAAgB,MAAZnuL,KAAKw2E,KAAex2E,KAAK8wE,QAAU,KAAasG,kBAAmB,CACrE,MAAMZ,EAAMx2E,KAAKyyB,UACjB,IAAK,IAAI/kB,EAAI,EAAGA,EAAImgL,EAAmBlgL,OAAQD,IAC7C,GAA2C,IAAvC8oE,EAAI1+C,QAAQ+1J,EAAmBngL,IAEjC,OADA1N,KAAKmuL,YAAa,EACXnuL,KAAKmuL,U,CAKlB,OADAnuL,KAAKmuL,YAAa,EACXnuL,KAAKmuL,UACd,CAEI17J,gBACF,OAAOzyB,KAAKw2E,IAAI1+C,QAAQ,OAAS,IAAM,IAAMzQ,mBAAmB,IAAM47E,UAAUjjG,KAAKw2E,MACjF,UAAYx2E,KAAKw2E,IACjBx2E,KAAKw2E,GACX,CAEAp1E,gBAAgBgU,GACd,OAAO9T,OAAOC,OAAO,IAAIusL,EAAgB14K,EAC3C,CAEAyoE,WACE0wG,EACAp/H,EACAzB,EAAgC,M,MAEhC,IAAK1tD,KAAKw2E,MAAQ+3G,EAChB,OAAO,EAGT,IAAIC,EAAsB,QAAV,EAAAxuL,KAAK8wE,aAAK,QAAIpjB,EAC9B8gI,UAAAA,EAAc,KAAa3wD,QAE3B,MAAM4wD,EAAe,IAAMxrF,UAAUsrF,GAC/BG,EAAev/H,EAAkBklB,IAAIo6G,GAE3C,OAAQD,GACN,KAAK,KAAa3wD,OAChB,OAAO79H,KAAK2uL,cAAcJ,EAAWG,GACvC,KAAK,KAAa5wD,KAAM,CACtB,MAAM8wD,EAAU,IAAMR,QAAQG,GAC9B,OAAkB,MAAXK,GAAmBA,IAAY,IAAMR,QAAQpuL,KAAKw2E,I,CAE3D,KAAK,KAAawnD,MAChB,OAAOuwD,IAAcvuL,KAAKw2E,IAC5B,KAAK,KAAaunD,WAChB,OAAOwwD,EAAUv6I,WAAWh0C,KAAKw2E,KACnC,KAAK,KAAaY,kBAChB,IAEE,OADc,IAAIsgC,OAAO13G,KAAKw2E,IAAK,KACtBw2B,KAAKuhF,E,CAClB,MAAOxiL,GAEP,OAAO,C,CAEX,KAAK,KAAakyH,MAChB,OAAO,EAKX,OAAO,CACT,CAEQ0wD,cAAcJ,EAAmBG,GACvC,GAAiB,MAAbH,GAAoC,MAAfvuL,KAAKquE,SAAmBqgH,EAAazvI,IAAIj/C,KAAKquE,QACrE,OAAO,EAGT,GAAI,IAAMqwG,qBAAqBz/H,IAAIj/C,KAAKquE,QAAS,CAC/C,MAAMwgH,EAAgB,IAAMT,QAAQG,GACpC,OAAQ,IAAM7P,qBAAqB38K,IAAI/B,KAAKquE,QAAQpvB,IAAI4vI,E,CAG1D,OAAO,CACT,E,giBChLK,MAAMC,UAAkB,IAW7BzuL,YAAYy0F,GACVv0F,QAVF,KAAAyoC,SAAmB,KAEnB,KAAAC,SAAmB,KAEnB,KAAAiyC,qBAA8B,KAC9B,KAAAuI,KAAe,KACf,KAAApN,KAAuB,KACvB,KAAA4H,mBAA8B,KAIvB6W,IAIL90F,KAAKk7E,qBAAuB4Z,EAAE5Z,qBAC9Bl7E,KAAKi+E,mBAAqB6W,EAAE7W,mBAC9B,CAEIzH,UACF,OAAOx2E,KAAKo2E,QAAUp2E,KAAKq2E,KAAK,GAAGG,IAAM,IAC3C,CAEIu4G,qBACF,OAAwB,MAAjB/uL,KAAKipC,SAAmB,WAAa,IAC9C,CAEIwrC,eACF,OAAOz0E,KAAKgpC,QACd,CAEIs4F,gBACF,OAAOthI,KAAKo2E,SAAWp2E,KAAKq2E,KAAKC,MAAM7xE,GAAMA,EAAE68H,WACjD,CAEIxgG,cACF,OAAQ,IAAMzZ,mBAAmBrnB,KAAKyjF,KACxC,CAEIhxD,gBACF,GAAIzyB,KAAKo2E,QAAS,CAChB,MAAMI,EAAMx2E,KAAKq2E,KAAKvhE,MAAMrQ,GAAMA,EAAE68H,YACpC,GAAW,MAAP9qD,EACF,OAAOA,EAAI/jD,S,CAGf,OAAO,IACT,CAEI2jD,cACF,OAAoB,MAAbp2E,KAAKq2E,MAAgBr2E,KAAKq2E,KAAK1oE,OAAS,CACjD,CAEAkwE,WACE0wG,EACAp/H,EACAzB,EAAgC,MAEhC,OAAiB,MAAb1tD,KAAKq2E,MAIFr2E,KAAKq2E,KAAKC,MAAME,GAAQA,EAAIqH,WAAW0wG,EAAWp/H,EAAmBzB,IAC9E,CAEAtsD,gBAAgBgU,G,MACd,MAAM8lE,EACwB,MAA5B9lE,EAAI8lE,qBAA+B,KAAO,IAAI57D,KAAKlK,EAAI8lE,sBACnD7E,EAAe,QAAR,EAAAjhE,EAAIihE,YAAI,eAAEr1E,KAAKw1E,GAAa,IAAajsC,SAASisC,KAE/D,OAAOl1E,OAAOC,OAAO,IAAIutL,EAAa15K,EAAK,CACzC8lE,qBAAsBA,EACtB7E,KAAMA,GAEV,EA3EA,IAAC,OAAkB,KAASi3G,U,wDAE5B,IAAC,OAAkB,KAASriG,U,uGCRvB,MAAM+jG,EAIX3uL,YAAY26E,GAHZ,KAAA/xC,SAAmB,KACnB,KAAAgyC,aAAqB,KAGdD,IAILh7E,KAAKi7E,aAAeD,EAAGC,aACzB,CAEA75E,gBAAgBgU,GACd,MAAM6lE,EAAmC,MAApB7lE,EAAI6lE,aAAuB,KAAO,IAAI37D,KAAKlK,EAAI6lE,cAEpE,OAAO35E,OAAOC,OAAO,IAAIytL,EAAuB55K,EAAK,CACnD6lE,aAAcA,GAElB,E,+DChBK,MAAMg0G,UAAuB,IAGlC5uL,YAAY8nG,GACV5nG,QAHF,KAAA4D,KAAuB,KAIhBgkG,IAILnoG,KAAKmE,KAAOgkG,EAAEhkG,KAChB,CAEIswE,eACF,OAAO,IACT,CAEArzE,gBAAgBgU,GACd,OAAO9T,OAAOC,OAAO,IAAI0tL,EAAkB75K,EAC7C,E,wcCTK,MAAM85K,EAUX7uL,YACU8uL,EACYn8C,EACAhoI,GAFZ,KAAAmkL,gBAAAA,EACY,KAAAn8C,kBAAAA,EACA,KAAAhoI,WAAAA,EAZd,KAAAqE,SAAW,IAAI,IACf,KAAA+/K,UAAY,IAAI,KAAyB,GAEjD,KAAAp7K,UAAW,EAIF,KAAAq7K,SAAWrvL,KAAKovL,UAAUp5H,cAMhC,CAEC5qD,cACF,OAAOpL,KAAKovL,UAAU9oL,KACxB,CAEI8E,YAAQ9E,GACVtG,KAAKovL,UAAUr/K,KAAKzJ,GACpBtG,KAAKmvL,gBAAgB/jL,QAAU9E,CACjC,CAGgBujK,U,0CACT7pK,KAAKsvL,SAAWtvL,KAAKoL,SAAWpL,KAAKgU,UAAYhU,KAAKmvL,gBAAgBn7K,WAI3EhU,KAAKoL,SAAU,GACf,OAAqBpL,KAAKsvL,SACvBniL,MACC,OAAI,CACFX,MAAQmV,I,QACS,QAAf,EAAA3hB,KAAKgL,kBAAU,SAAEwB,MAAM,2BAA2BmV,KAC5B,QAAtB,EAAA3hB,KAAKgzI,yBAAiB,SAAE3/B,UAAU1xF,EAAI,KAG1C,QAAS,IAAO3hB,KAAKoL,SAAU,KAC/B,OAAUpL,KAAKqP,WAEhBpC,YACL,G,CAEA6C,cACE9P,KAAKqP,SAASU,OACd/P,KAAKqP,SAASW,UAChB,E,iCAjDWk/K,GAAkB,uC,mBAAlBA,EAAkB,gE,iCAAlB,WAAS,G,oOCDf,MAAMK,EAYXlvL,YACUmvL,EACIx8C,EACAhoI,GAFJ,KAAAwkL,mBAAAA,EAZF,KAAAngL,SAAW,IAAI,IACf,KAAA+/K,UAAY,IAAI,KAAyB,GACzC,KAAAK,WAAa,IAAI,KAAyB,GAIzC,KAAAC,yBAAoC,EAEpC,KAAAL,SAAWrvL,KAAKovL,UAAUp5H,eAC1B,KAAA25H,UAAY3vL,KAAKyvL,WAAWz5H,eAOnCw5H,EAAmBI,SAChBziL,MACC,QAAO,KAAOnN,KAAKgU,YACnB,QAAU,KAGR,MAAM67K,GAAY,OAAqB7vL,KAAKsvL,SAK5C,OAFAtvL,KAAKoL,SAAU,EAERykL,EAAU1iL,MACf,QAAYwU,IACV3W,SAAAA,EAAYwB,MAAM,2BAA2BmV,KAC7CqxH,SAAAA,EAAmB3/B,UAAU1xF,IACtB,IAAA4pF,SAAG/pG,MAEb,KAEH,OAAUxB,KAAKqP,WAEhBpC,UAAU,CACT8C,KAAM,IAAO/P,KAAKoL,SAAU,EAC5B4E,SAAU,IAAOhQ,KAAKoL,SAAU,GAEtC,CAEApF,WACEhG,KAAKwvL,mBAAmBM,cAAc3iL,MAAK,OAAUnN,KAAKqP,WAAWpC,WAAWhM,IAC1EjB,KAAK0vL,wBACP1vL,KAAKyvL,WAAW1/K,MAAK,GAErB/P,KAAKyvL,WAAW1/K,KAAW,aAAN9O,E,GAG3B,CAEI+S,eACF,OAAOhU,KAAKyvL,WAAWnpL,KACzB,CAEI0N,aAAS1N,GACXtG,KAAKyvL,WAAW1/K,KAAKzJ,EACvB,CAEI8E,cACF,OAAOpL,KAAKovL,UAAU9oL,KACxB,CAEI8E,YAAQ9E,GACVtG,KAAKgU,SAAW1N,EAChBtG,KAAKovL,UAAUr/K,KAAKzJ,EACtB,CAEAwJ,cACE9P,KAAKqP,SAASU,OACd/P,KAAKqP,SAASW,UAChB,E,iCA1EWu/K,GAAkB,wC,mBAAlBA,EAAkB,2I,sHCWxB,MAAMQ,EAMX1vL,YACE8uL,EACYa,EACAC,GARN,KAAA5gL,SAAW,IAAI,IAUjB2gL,GAAmBb,IACrBa,EAAgBX,SAASliL,MAAK,OAAUnN,KAAKqP,WAAWpC,WAAW7B,IAC/C,WAAdpL,KAAKmE,KACPgrL,EAAgB/jL,QAAUA,EAE1B+jL,EAAgBn7K,SAAW5I,C,IAI/B4kL,EAAgBL,UAAUxiL,MAAK,OAAUnN,KAAKqP,WAAWpC,WAAW+G,KAC5C,IAAlBhU,KAAKgU,WACPm7K,EAAgBn7K,SAAWA,E,KAK7Bg8K,GAAmBC,IACrBA,EAAgBZ,SAASliL,MAAK,OAAUnN,KAAKqP,WAAWpC,WAAW+G,IACjEg8K,EAAgBh8K,SAAWA,CAAQ,IAGrCg8K,EAAgBL,UAAUxiL,MAAK,OAAUnN,KAAKqP,WAAWpC,WAAW+G,IAClEi8K,EAAgBj8K,SAAWA,CAAQ,IAGzC,CAEAlE,cACE9P,KAAKqP,SAASU,OACd/P,KAAKqP,SAASW,UAChB,E,iCAzCW+/K,GAAsB,uC,mBAAtBA,EAAsB,oF,uHCTtB,iB,qBAA6B,gBAAAh0K,OAAA,QAAZ,yBAAW,sB,EAVzC,MAAMm0K,EAA2C,CAC/CC,OAAQ,CAAC,UAAW,WACpBC,MAAO,CAAC,UAAW,WACnBjhE,QAAS,CAAC,UAAW,WACrBkhE,MAAO,CAAC,SAAU,UAClBC,OAAQ,CAAC,SAAU,WAOd,MAAMC,EAcXlwL,YAAmB8uI,GAAA,KAAAA,UAAAA,EAbV,KAAA5jB,QAAS,EAKT,KAAA/sG,KAAkB,UAEnB,KAAAgyK,aAAe,EACf,KAAAC,YAAc,GACd,KAAAC,cAAgB,IAChB,KAAAC,QAAU,EAG2B,CAE7Cr4D,cACEt4H,KAAKojL,UACP,CAEI15F,gB,MACF,MAAO,CAAC,mBACLjyE,OAA6B,QAAtB,EAAAy4K,EAAYlwL,KAAKwe,aAAK,QAAI,IACjC/G,OAAOzX,KAAKurH,OAAS,CAAC,YAAa,kBAAmB,2BAA6B,GACxF,CAEQ63D,W,QACN,IAAIwN,EAAgB,KACpB,MAAMC,EAAwC,QAAxB,EAAS,QAAT,EAAA7wL,KAAK6wB,YAAI,eAAEjR,qBAAa,QAAI,GAalD,IAAIkxK,EAXJF,EAAQ5wL,KAAK+wL,gBAAgBF,EAAe7wL,KAAKwwL,cAEpC,MAATI,IACFA,EAAQ5wL,KAAKgxL,qBAAqBH,EAAe7wL,KAAKwwL,eAIpDI,EAAM9/G,MAAM,IAAM2tG,2BACpBmS,EAAQA,EAAM9/G,MAAM,IAAM2tG,yBAAyB,IAIrD,IAAIwS,EAAWjxL,KAAKi3B,MAEf,IAAM5P,mBAAmBrnB,KAAKi3B,OAEvB,IAAM5P,mBAAmBrnB,KAAKQ,KAIxCywL,EAAW,IAAMzkE,cAAcqkE,GAC/BC,EAAM9wL,KAAKkxL,iBAAiBlxL,KAAK2wL,QAASM,KAJ1CA,EAAW,IAAMzkE,cAAcxsH,KAAKQ,GAAGsyB,YACvCg+J,EAAM9wL,KAAKkxL,iBAAiBlxL,KAAK2wL,QAASM,IAH1CH,EAAM9wL,KAAKkxL,iBAAiBlxL,KAAK2wL,QAASM,GAS5C,MAAME,EAAUnxL,KAAKoxL,kBAAkBR,EAAOK,GAC9CH,EAAIlzK,YAAYuzK,GAChB,MAAME,EAAO/zK,OAAOC,SAASC,cAAc,OAAOI,YAAYkzK,GAAKzxE,UAC7DiyE,EAAUh0K,OAAO29E,KAAK4hF,SAASt+J,mBAAmB8yK,KACxDrxL,KAAKyd,IAAMzd,KAAKmvI,UAAUoiD,+BACxB,6BAA+BD,EAEnC,CAEQP,gBAAgBvuL,EAAc+L,GACpC,MAAMmnC,EAAQlzC,EAAKmzC,MAAM,KACzB,GAAID,EAAM/nC,OAAS,EAAG,CACpB,IAAIkjB,EAAO,GACX,IAAK,IAAInjB,EAAI,EAAGA,EAAIa,EAAOb,IACzBmjB,GAAQ7wB,KAAKgxL,qBAAqBt7I,EAAMhoC,GAAI,GAE9C,OAAOmjB,C,CAET,OAAO,IACT,CAEQqgK,iBAAiB1yK,EAAcyY,GACrC,MAAMu6J,EAASl0K,OAAOC,SAASC,cAAc,OAQ7C,OAPAg0K,EAAOv7K,aAAa,QAAS,8BAC7Bu7K,EAAOv7K,aAAa,iBAAkB,QACtCu7K,EAAOv7K,aAAa,QAASuI,EAAKsU,YAClC0+J,EAAOv7K,aAAa,SAAUuI,EAAKsU,YACnC0+J,EAAO/3J,MAAMg4J,gBAAkBx6J,EAC/Bu6J,EAAO/3J,MAAMkhH,MAAQn8H,EAAO,KAC5BgzK,EAAO/3J,MAAMihH,OAASl8H,EAAO,KACtBgzK,CACT,CAEQJ,kBAAkBruK,EAAmBkU,GAC3C,MAAMy6J,EAAUp0K,OAAOC,SAASC,cAAc,QAe9C,OAdAk0K,EAAQz7K,aAAa,cAAe,UACpCy7K,EAAQz7K,aAAa,IAAK,OAC1By7K,EAAQz7K,aAAa,IAAK,OAC1By7K,EAAQz7K,aAAa,KAAM,UAC3By7K,EAAQz7K,aAAa,iBAAkB,QACvCy7K,EAAQz7K,aAAa,OAAQ,IAAMk2G,4BAA4Bl1F,EAAO,KAAK,IAC3Ey6J,EAAQz7K,aACN,cACA,kHAGFy7K,EAAQ9sE,YAAc7hG,EACtB2uK,EAAQj4J,MAAMk4J,WAAa3xL,KAAK0wL,cAAc59J,WAC9C4+J,EAAQj4J,MAAMtC,SAAWn3B,KAAKywL,YAAc,KACrCiB,CACT,CAEQV,qBAAqBluK,EAAavU,GACxC,MAAMmlH,EAAa5wG,EAAIguD,MAAM,OAC7B,OAAqB,MAAd4iD,EAAqBA,EAAW1gH,MAAM,EAAGzE,GAAOwoE,KAAK,IAAM,EACpE,E,iCA7GWw5G,GAAe,c,mBAAfA,EAAe,sPAFf,uB,KAAM,mB,iKCZf,kBAAqD,cAAE,Q,0BAJzD,SACE,oCACE,SACF,QACA,0CACF,yB,4CAJiB,wCAAuB,uBACpC,sCAEwB,uC,2BAE5B,kBACE,S,gBACF,S,qBAFkC,+BAChC,yG,ECAG,MAAMqB,EAJb,cAOY,KAAAC,cAA0B,GAC1B,KAAAC,YAAa,EAEd,KAAAC,UAAwB,UACxB,KAAA9gL,MAAkB,GAClB,KAAA+gL,UAAW,C,CAGhBC,eACF,OAAOjyL,KAAKkyL,SACd,CAEID,aAAS3rL,GACXtG,KAAKkyL,UAAqB1wL,MAAT8E,OAAqB9E,EAAYqQ,KAAKmR,IAAI,EAAG1c,EAChE,CAEAgyH,cACuB92H,MAAjBxB,KAAKiyL,UAAyBjyL,KAAKiR,MAAMtD,QAAU3N,KAAKiyL,SAC1DjyL,KAAK6xL,cAAgB7xL,KAAKiR,MAE1BjR,KAAK6xL,cAAgB7xL,KAAKiR,MAAM+B,MAAM,EAAGhT,KAAKiyL,SAAW,GAE3DjyL,KAAK8xL,WAAa9xL,KAAKiR,MAAMtD,OAAS3N,KAAK6xL,cAAclkL,MAC3D,E,iCA1BWikL,EAAkB,E,mBAAlBA,EAAkB,+YDR/B,iBACE,gDAMA,wCAGF,sBACA,e,MAViC,0CAMxB,oC,mHEHT,MAAMO,EAAuC,CAC3CC,QAAS,CAAC,qBACVC,UAAW,CAAC,oBACZhsK,QAAS,CAAC,qBACVisK,OAAQ,CAAC,oBACTl1I,QAAS,CAAC,qBACVqL,KAAM,CAAC,mBAGH8pI,EAA4C,CAChDH,QAAS,CAAC,2BACVC,UAAW,CAAC,6BACZhsK,QAAS,CAAC,2BACVisK,OAAQ,CAAC,0BACTl1I,QAAS,CAAC,2BACVqL,KAAM,CAAC,yBAMF,MAAM+pI,EACe9oG,gBACxB,MAAO,CACL,kBACA,YACA,YACA,eACA,iBACA,oBACA,oBACA,aACA,iBACA,gBACA,uBACA,aACA,wBACA,wBACA,gBACA,yBACA,6BAECjyE,OAAO06K,EAAOnyL,KAAK+xL,YACnBt6K,OAAOzX,KAAKyyL,gBAAkBF,EAAYvyL,KAAK+xL,WAAa,IAC5Dt6K,OAAOzX,KAAKgyL,SAAW,CAAC,cAAe,eAAiB,GAC7D,CAC+Bj2K,YAC7B,OAAO/b,KAAKgyL,SAAWhyL,KAAK63B,GAAG7hB,cAAc4uG,YAAYjlG,OAAS,IACpE,CAOAtf,YAAoBw3B,G,MAAA,KAAAA,GAAAA,EALX,KAAAk6J,UAAwB,UACxB,KAAAC,UAAW,EAEZ,KAAAS,iBAAkB,EAGxBzyL,KAAKyyL,gBAAiD,SAAd,QAAjB,EAAA56J,aAAE,EAAFA,EAAI7hB,qBAAa,eAAE08K,SAC5C,E,iCApCWF,GAAc,e,mBAAdA,EAAc,4H,0KCfpB,MAAMG,G,iCAAAA,EAAW,E,mBAAXA,I,uBAJD,O,kGCLV,e,sBAAgB,gC,2BAAhB,qCAAuE,SACzE,e,qBADM,6B,ECMC,MAAMC,EAJb,cASE,KAAAjmL,WAAyBnL,EAGzB,KAAA0L,YAAuC,CAAC,EAMxC,KAAA60G,MAAQ,IAAI,K,CAIZ8nD,QAAQlxH,GACN34C,KAAK+hH,MAAMhyG,KAAK4oC,EAClB,E,iCApBWi6I,EAAmB,E,mBAAnBA,EAAmB,uD,GAAA,K,KAgBnB,MAAa,G,yUDvB1B,6BAGA,c,sNEFE,SACE,iCAQE,+BACF,0BACF,yB,+BANI,qCAA+B,4BAA/B,CAA+B,6CAIjB,4C,0CAGlB,SACE,sCAKE,qEAAS,mBAA0B,IAEnC,+BACF,0BACF,uB,mCAFkB,4C,uBAGlB,c,0BAxBF,SACE,gDAYA,gDAWA,qCACF,uB,kCAxBiB,+BAYA,gCAWX,yB,uBAIJ,c,0BAYI,SACE,qCAOE,mCACF,8BACF,6B,+BANI,qCAA+B,4BAA/B,CAA+B,6CAIjB,4C,0CAGlB,SACE,2CAAqD,qEAAS,mBAA0B,IACtF,mCACF,8BACF,2B,mCAFkB,4C,2BAdpB,SACE,oDAWA,oDAKF,2B,yBAhBiB,+BAWA,+B,2BAUjB,SACE,mCAQE,iCACF,4BACF,2B,+BANI,qCAA+B,4BAA/B,CAA+B,6CAIjB,4C,0CAGlB,SACE,wCAKE,qEAAS,mBAA0B,IAEnC,iCACF,4BACF,yB,mCAFkB,4C,uBAGlB,c,0BAxBF,SACE,kDAYA,kDAWA,uCACF,yB,kCAxBiB,+BAYA,gCAWX,yB,2BAzDR,SACE,qCAEA,sCAQA,6CACE,kDAkBF,yBACA,iCAEA,oDA0BF,wB,gCA1DM,iDAKF,sCAMqC,qCAqBF,yC,ECpDhC,MAAMC,EAJb,cAME,KAAAnyE,KAAO,EAEC,KAAAoyE,YAAqC,E,CAG/BC,mBAAezsL,GAC3BtG,KAAK8yL,YAAcxsL,EAAM0sL,SAC3B,CAEcC,qBACZ,OAAIjzL,KAAKkzL,YACAlzL,KAAK8yL,YAAY9/K,MAAM,EAAGhT,KAAK0gH,KAAO,GAGxC1gH,KAAK8yL,WACd,CAEcK,eACZ,OAAOnzL,KAAK8yL,YAAY9/K,MAAMhT,KAAK0gH,KAAO,GAAI,EAChD,CAEc0yE,oBACZ,OAAOpzL,KAAK8yL,YAAY9/K,OAAO,EACjC,CAEckgL,kBACZ,OAAOlzL,KAAK8yL,YAAYnlL,OAAS3N,KAAK0gH,IACxC,E,iCA7BWmyE,EAAoB,E,mBAApBA,EAAoB,+D,GAAA,K,QAMd,IAAmB,G,0xBDdtC,gCA2BA,iDA4DA,e,MAvFqC,kCA2BtB,qC,oMEXR,MAAMQ,G,iCAAAA,EAAiB,E,mBAAjBA,I,uBAJD,KAAc,EAAA9wL,EAAY,IAAkB,IAAY,O,8ICP9D+wL,EAAY,CAChB,wBACA,iCACA,oCACA,yBAGIC,EAA6C,CACjDnB,QAAS,CACP,wBACA,oBACA,oBACA,0BACA,8BACA,gCACA,oCACA,gCACA,8BACA,oCACGkB,GAELjB,UAAW,CACT,oBACA,uBACA,iBACA,yBACA,6BACA,0BACA,6BACA,mCACA,6BACA,oCACGiB,GAELhB,OAAQ,CACN,oBACA,uBACA,kBACA,yBACA,6BACA,0BACA,6BACA,mCACA,8BACA,oCACGgB,GAELE,SAAU,IAQL,MAAMC,EALb,cA+BU,KAAAC,QAAS,EAWR,KAAAtoL,SAAU,EAEV,KAAA4I,UAAW,C,CAtCM01E,gB,MACxB,MAAO,CACL,mBACA,YACA,UACA,aACA,gBACA,YACA,kBACA,iBACA,wBACA,yBAECjyE,OAAOzX,KAAK2zL,MAAQ,CAAC,YAAa,YAAc,CAAC,oBACjDl8K,OAAO87K,EAA4B,QAAf,EAAAvzL,KAAK0uH,kBAAU,QAAI,aAC5C,CAGIklE,mBAEF,UADkC,MAAjB5zL,KAAKgU,WAAsC,IAAlBhU,KAAKgU,YAC5BhU,KAAKoL,UAAiB,IAC3C,CAOIuoL,YACF,OAAO3zL,KAAK0zL,MACd,CAEIC,UAAMrtL,GACRtG,KAAK0zL,QAAS,QAAsBptL,EACtC,CAMAutL,cAAcvtL,GACZtG,KAAK0uH,WAAapoH,CACpB,E,iCA3CWmtL,EAAe,E,mBAAfA,EAAe,uG,2JAFf,CAAC,CAAE/8K,QAAS,IAAuBC,YAAa88K,MAAkB,M,iBAAA,mB,MAAA,kP,QC1D/E,kBACE,kCACE,2BACF,wBACA,kCAIE,iCACF,yBACF,uBACA,gB,MAVQ,+CAKJ,gD,oJCGA,e,sBAAG,uB,2BALL,gBAKE,uCACA,SACF,S,qBALE,+BAG2B,8BAC3B,uC,QCJEK,EAA4C,CAChDztK,QAAS,YACToiC,KAAM,kBACNrL,QAAS,2BACTk1I,OAAQ,aAGJyB,EAAqD,CACzD32I,QAAS,UACTk1I,OAAQ,SAOH,MAAMtqB,EAMX3nK,YAAoB+G,GAAA,KAAAA,YAAAA,EALX,KAAAjD,KAAqB,OAGrB,KAAA8jK,cAAe,CAEuB,CAE/CjiK,W,MACW,QAAT,EAAAhG,KAAK4X,YAAI,QAAT5X,KAAK4X,KAASk8K,EAAY9zL,KAAKmE,OACb,MAAdnE,KAAK+b,OAA2C,MAA1Bg4K,EAAY/zL,KAAKmE,QACzCnE,KAAK+b,MAAQ/b,KAAKoH,YAAYc,EAAE6rL,EAAY/zL,KAAKmE,OAErD,CAEI6vL,mBACF,OAAQh0L,KAAKmE,MACX,IAAK,SACH,MAAO,yBACT,IAAK,OACH,MAAO,uBACT,IAAK,UACH,MAAO,0BACT,IAAK,UACH,MAAO,0BAEb,CAEI+wB,kBACF,OAAQl1B,KAAKmE,MACX,IAAK,SACH,MAAO,kBACT,IAAK,OACH,MAAO,gBACT,IAAK,UACH,MAAO,mBACT,IAAK,UACH,MAAO,mBAEb,E,iCAvCW6jK,GAAgB,a,mBAAhBA,EAAgB,0H,MAAA,ue,QDtB7B,iBAIE,sCAQA,yBACF,sBACA,e,MAZE,gCAKG,+B,gIEGE,MAAMisB,EAqDX5zL,YAAwCyT,GAAA,KAAAA,UAAAA,EAnD9B,KAAAogL,aAAe,CACvB,qBACA,kBACA,cACA,gBACA,oBACA,kBACA,aACA,YACA,kBACA,0BACA,WACA,WACA,YACA,mBAEA,yBACA,kBACA,qBACA,oBAEA,oBACA,wBAEA,0BACA,iCACA,oCAEA,0BACA,qBACA,+BAEA,4BACA,gCAEA,kCACA,sCACA,4CACA,gDAEA,qCACA,mDACA,2CACA,4CAEA,2CACA,uCAEA,4CAMQ,KAAAC,UAAY,kRAH0C,CAO5DngL,e,UACF,OAAiD,QAA1C,EAAc,QAAd,EAAAhU,KAAKo0L,iBAAS,QAAkB,QAAd,EAAAp0L,KAAK8T,iBAAS,eAAEE,gBAAQ,QACnD,CACIA,aAAS1N,GACXtG,KAAKo0L,UAAqB,MAAT9tL,IAA2B,IAAVA,CACpC,CAIIqJ,e,YACF,OACkF,QAAhF,EAAc,QAAd,EAAA3P,KAAKmW,iBAAS,QAA2B,QAAvB,EAAc,QAAd,EAAAnW,KAAK8T,iBAAS,eAAEsC,eAAO,eAAEC,aAAa,KAAWg+K,qBAAa,QAEpF,CACI1kL,aAASrJ,GACXtG,KAAKmW,UAAqB,MAAT7P,IAA2B,IAAVA,CACpC,CAGIgQ,e,QACF,MAAkC,aAAb,QAAd,EAAAtW,KAAK8T,iBAAS,eAAEnP,UAAsC,QAAd,EAAA3E,KAAK8T,iBAAS,eAAEyC,QACjE,CAEI/J,YACF,MAAM+H,EAAMjT,OAAOkV,KAAKxW,KAAK8T,UAAU2C,QAAQ,GAC/C,MAAO,CAAClC,EAAKvU,KAAK8T,UAAU2C,OAAOlC,GACrC,E,iCAtFW0/K,GAAiB,iB,mBAAjBA,EAAiB,qG,wJAFjB,CAAC,CAAEv9K,QAAS,IAA2BC,YAAas9K,MAAoB,M,qCAAA,yD,gGCK9E,MAAMK,G,iCAAAA,EAAc,E,mBAAdA,I,uBAJD,IAAc,KAAc,M,oDCLnCC,E,0DAcD,kBAA0F,SAExF,S,2BAFwF,mB,2BALjF,gBAGV,UACO,SAAe,QACrB,wBAGF,S,mCANE,8BAEM,kBACC,kC,GAdX,SAAKA,GACH,uBACA,qBACA,yBACA,sBACD,CALD,CAAKA,IAAAA,EAAa,KAoBX,MAAMC,EAbb,cAcW,KAAAvrJ,SAAmB,KACnB,KAAAgjJ,WAAY,EAErB,KAAAwI,gBAAmD,CACjD,CAACF,EAAcG,OAAQ,GACvB,CAACH,EAAcI,QAAS,CAAC,gBACzB,CAACJ,EAAcK,SAAU,CAAC,kBAC1B,CAACL,EAAc/5K,QAAS,CAAC,uB,CAIvBkvE,gBACF,MAAO,CAAC,aAAc,yBAA0B,eAClD,CAEImrG,oBAEF,OAAOt7K,MAAMoe,KAAK33B,KAAKipC,SACzB,CAEA6rJ,kBAAkB/xK,GAChB,MAAMgyK,EAAW/0L,KAAKg1L,iBAAiBjyK,GACjCkyK,EAAYj1L,KAAKy0L,gBAAgBM,GAEvC,OAAI/0L,KAAKisL,UACAgJ,EAAUx9K,OAAO,CACtB,iBACA,cACA,kBACA,SACA,UACA,0BACA,0BAIGw9K,CACT,CAEQD,iBAAiBjyK,GACvB,GAAIA,EAAU+tD,MAAM,IAAM2tG,yBACxB,OAAO8V,EAAcG,MAGvB,GAAI3xK,EAAU+tD,MAAM,MAClB,OAAOyjH,EAAc/5K,OAIvB,MADiB,CAAC,IAAK,IAAK,IAAK,KACpBO,SAASgI,IAAcA,EAAU+tD,MAAM,UAC3CyjH,EAAcK,QAGhBL,EAAcI,MACvB,E,iCAvDWH,EAAsB,E,mBAAtBA,EAAsB,8E,gTAXtB,wB,KACa,gC,2GCZnB,MAAMU,GAAS,QAAQ,SAAU,EACtC,QAAW,SAAU,EACnB,QAAM,CAAE3tK,QAAS,EAAG1Q,UAAW,uBAC/B,QAAM,EACJ,QAAQ,gBAAgB,QAAM,CAAE0Q,QAAS,MACzC,QAAQ,iBAAiB,QAAM,CAAE1Q,UAAW,e,kKCgB9C,iBAIE,mCACF,0B,kMClBG,MAAMs+K,EALb,cASW,KAAAC,WAA4C,UAE7C,KAAAC,iBAAkB,EAcjB,KAAAjqL,SAAU,C,CAVNkqL,mBAAehvL,GAC1BtG,KAAKq1L,iBAAkB,QAAsB/uL,EAC/C,CACIgvL,qBACF,OAAOt1L,KAAKq1L,eACd,CAO0B37J,cACxB,MAAO,CAAC,UAAW,cAAe,kBAAmB,cAAe,UAAUjiB,OAC5EzX,KAAK26I,MAET,CAEIA,YACF,OAAQ36I,KAAKo1L,YACX,IAAK,QACH,MAAO,cAET,IAAK,QACH,MAAO,eAET,QACE,MAAO,cAGb,E,iCAxCWD,EAAe,E,mBAAfA,EAAe,sE,wtCDV5B,iBAKE,iCAGE,kCACE,6BACF,0BACA,sC,kCASF,yBAEA,qCACE,2CAMA,qCAQE,iCACF,2BACF,yBAEA,qCAGE,+BACF,yBACF,uBACA,gB,MA7CE,yBAAiB,kBAeb,4CAA6B,kCAO5B,iCAOD,6E,2ECvBQ,CAAC,O,0ECFR,MAAMI,EAGXl1L,YAA+B4O,GAAA,KAAAA,UAAAA,CAA4B,CAEpCd,QACrBnO,KAAKiP,UAAUd,MAAMnO,KAAKw1L,aAC5B,E,iCAPWD,GAAoB,gB,mBAApBA,EAAoB,qE,iCAApB,SAAO,G,uICFpB,IAAI3hL,EAAS,EAKN,MAAM6hL,EAKXp1L,YAAgC4O,GAAA,KAAAA,UAAAA,EAJb,KAAAzO,GAAK,oBAAoBoT,IAEnC,KAAA8hL,QAAS,CAE0C,CAE5D1vL,WAGMhG,KAAKiP,WACPnK,QAAQ4B,UAAUkJ,MAAK,KACrB,MAAMwoB,EAAYp4B,KAAKiP,UAAU0mL,kBAE7Bv9J,IAAcA,EAAUw9J,kBAC1Bx9J,EAAUw9J,gBAAkB51L,KAAKQ,G,GAIzC,E,iCAnBWi1L,GAA6B,gB,mBAA7BA,EAA6B,yF,0KCJtC,SACE,+BACF,0B,uBAEE,mCACF,kB,yHCLG,MAAMI,G,iCAAAA,EAAa,E,mBAAbA,EAAa,sCAOnB,MAAMC,EAGPC,cACF,OAAoB,MAAb/1L,KAAK4X,IACd,E,iCALWk+K,EAAqB,E,mBAArBA,EAAqB,iE,GAAA,K,QAClBD,EAAa,G,i6BDb7B,iBAIE,iCACE,kDAGA,4DAGA,kCACE,+BACF,2BACF,yBACA,mCACE,+BACF,yBACA,mCAGE,+BACF,yBACF,uBACA,gB,sBAtBE,wBAGiB,iCAAe,a,2DCKpB,CAAC,O,gDCVR,MAAeG,G,4ICIlB,kBAA0D,S,gBAAyB,S,MAAzB,+C,sBAI5D,gC,0BAEF,iBACE,+BAA8B,SAChC,S,qBADgC,uC,+CCAzB,MAAMC,EAIEC,aACX,OAAOl2L,KAAKm2L,OACd,CACID,WAAO5vL,GACTtG,KAAKm2L,SAAU,QAAsB7vL,EACvC,CAI0BozB,cACxB,MAAO,CAAC,WAAWjiB,OAAOzX,KAAKk2L,OAAS,CAAC,kBAAmB,WAAa,CAAC,YAC5E,CAEA71L,YAAoB+G,GAAA,KAAAA,YAAAA,EAdZ,KAAA+uL,SAAU,CAc6B,CAEjCC,mBACZ,MAAO,CAAC,gBAAiB,iBAAkB,WAAW3+K,OACpDzX,KAAKq2L,YAAYriL,SAAW,iBAAmB,oBAEnD,CAEcsiL,0BACZ,MAAO,CAAC,oBAAoB7+K,OAC1BzX,KAAKq2L,YAAYriL,SAAW,gBAAkB,eAElD,CAEIrE,eACF,OAAO3P,KAAKq2L,YAAY1mL,QAC1B,CAEI2G,eACF,OAAOtW,KAAKq2L,YAAY//K,QAC1B,CAEI9J,YACF,OAAOxM,KAAKq2L,YAAY7pL,KAC1B,CAEI+pL,mB,QACF,MACO,aADCv2L,KAAKwM,MAAM,GAERxM,KAAKoH,YAAYc,EAAE,kBAGT,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAEJ,SACG,QAAb,EAAApM,KAAKwM,MAAM,UAAE,eAAEJ,QAGjBpM,KAAKwM,KAElB,E,iCAvDWypL,GAAoB,a,mBAApBA,EAAoB,gE,GAAA,K,QAWjB,IAAyB,G,ucDtBzC,iBACE,yBACA,gCACE,6BACA,0CACF,wBACF,uBACA,+BACE,gDACF,uBACA,uCAGA,gB,MAbO,sBAEC,sCAEG,kCAIsB,mCAE3B,kC,qHEGC,MAAMO,G,iCAAAA,EAAiB,E,mBAAjBA,I,uBAJD,M,+DCNZ,IAAI5iL,EAAS,EAQN,MAAM6iL,EANb,cAOiB,KAAAj2L,GAAK,YAAYoT,G,mCADrB6iL,EAAgB,E,mBAAhBA,EAAgB,8H,kFCNtB,MAAMC,G,iCAAAA,EAAQ,E,mBAARA,EAAQ,2B,gDCKd,MAAeC,G,gGCLtB,IAAI/iL,EAAS,EAUN,MAAMgjL,EAKXv2L,YAAoB+G,GAAA,KAAAA,YAAAA,EAJL,KAAA5G,GAAK,aAAaoT,GAIc,CAE3C2iL,mB,kBACF,OAAQv2L,KAAKwM,MAAM,IACjB,IAAK,WACH,OAAOxM,KAAKoH,YAAYc,EAAE,iBAC5B,IAAK,QACH,OAAOlI,KAAKoH,YAAYc,EAAE,cAC5B,IAAK,YACH,OAAOlI,KAAKoH,YAAYc,EAAE,iBAA+B,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAEqqL,gBAC7D,IAAK,YACH,OAAO72L,KAAKoH,YAAYc,EAAE,iBAA+B,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAEqqL,gBAC7D,IAAK,MACH,OAAO72L,KAAKoH,YAAYc,EAAE,gBAA8B,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAE9E,KAC5D,IAAK,MACH,OAAO1H,KAAKoH,YAAYc,EAAE,gBAA8B,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAEwW,KAC5D,IAAK,sBACH,OAAOhjB,KAAKoH,YAAYc,EAAE,2BAAyC,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAEknH,WAAW38C,KAAK,OACvF,IAAK,iBACH,OAAO/2E,KAAKoH,YAAYc,EAAE,uBAC5B,IAAK,OACH,OAAOlI,KAAKoH,YAAYc,EAAE,sBAC5B,QAEE,OAAiB,QAAb,EAAAlI,KAAKwM,MAAM,UAAE,eAAEJ,SACG,QAAb,EAAApM,KAAKwM,MAAM,UAAE,eAAEJ,QAGjBpM,KAAKwM,MAElB,E,iCAnCWoqL,GAAiB,a,mBAAjBA,EAAiB,iJ,oHANjB,eAA8B,U,MAAA,sC,mGCPzC,kBAAgE,S,gBAAyB,S,MAAzB,+C,uBAGhE,iBACE,6BACF,wB,uBAEA,iBACE,6BACF,wB,sBAGA,oC,yBACA,uB,qBAAW,4B,2FCQN,MAAME,EAJb,cAaU,KAAAC,gBAAiB,C,CACZC,kBAAc1wL,GACzBtG,KAAK+2L,gBAAiB,QAAsBzwL,EAC9C,CACI0wL,oBACF,OAAOh3L,KAAK+2L,cACd,CAGIrtG,gBACF,MAAO,CAAC,YAAYjyE,OAAOzX,KAAKg3L,cAAgB,GAAK,CAAC,WACxD,CAEAC,wBACMj3L,KAAKwM,MACPxM,KAAKm4I,MAAMtiI,gBAAkB7V,KAAKwM,MAAMhM,GAC/BR,KAAKsgJ,KACdtgJ,KAAKm4I,MAAMtiI,gBAAkB7V,KAAKsgJ,KAAK9/I,GAEvCR,KAAKm4I,MAAMtiI,qBAAkBrU,CAEjC,E,iCA9BWs1L,EAAqB,E,mBAArBA,EAAqB,8D,GAAA,M,QAClB,IAAmB,G,QACnB,IAAgB,G,QAIb,KAAkB,G,QAClB,IAAkB,I,uMAHxBF,EAAiB,G,oiBD3B9B,mBACE,yBACA,wCACF,sBACA,+BACE,uCAGA,6BACA,yCAGF,uBACA,2BACE,gDACA,+CACF,uBACA,gB,MAjB8D,gCAErD,wCAGD,+CAIA,+CAIM,4CACmB,kCACG,kC,kKEuB7B,MAAMM,G,iCAAAA,EAAe,E,mBAAfA,I,uBArBD,IAAc,IAAmB,IAAa,IAkBtD,M,gGCdG,MAAMC,EAaYttB,U,MACrB7pK,KAAKo3L,SAAWp3L,KAAKo3L,QACrBp3L,KAAKq3L,cAAc9qL,KAAKvM,KAAKo3L,SAE7Bp3L,KAAK0oG,SAEe,QAApB,EAAA1oG,KAAKs3L,UAAUn/C,aAAK,SAAE7gH,OACxB,CAEAj3B,YACkBk3L,EACRD,EACAlwL,GAFQ,KAAAmwL,OAAAA,EACR,KAAAD,UAAAA,EACA,KAAAlwL,YAAAA,EArBiC,KAAAgwL,SAAU,EAC3C,KAAAC,cAAgB,IAAI,MAEH,KAAAt7K,MAAQ/b,KAAKoH,YAAYc,EAAE,oBACtB,KAAAuwB,MAAQz4B,KAAKoH,YAAYc,EAAE,mBAkBxD,CAEC0P,WACF,OAAO5X,KAAKo3L,QAAU,gBAAkB,SAC1C,CAEA9+D,cACEt4H,KAAK0oG,QACP,CAEAg8B,qBACE1kI,KAAKo3L,QAAwC,aAA9Bp3L,KAAKs3L,UAAUn/C,MAAMh0I,KACpCnE,KAAKu3L,OAAO3/K,KAAO5X,KAAK4X,IAC1B,CAEQ8wF,S,MACN1oG,KAAKu3L,OAAO3/K,KAAO5X,KAAK4X,KACU,OAAV,QAApB,EAAA5X,KAAKs3L,UAAUn/C,aAAK,eAAEh0I,QACxBnE,KAAKs3L,UAAUn/C,MAAMh0I,KAAOnE,KAAKo3L,QAAU,OAAS,WACpDp3L,KAAKs3L,UAAUn/C,MAAMq/C,YAAax3L,KAAKo3L,cAAkB51L,EAE7D,E,iCA/CW21L,GAA+B,qC,mBAA/BA,EAA+B,wF,iCAA/B,WAAS,I,wQCjBf,MAAMM,EAAgB,CAC3B,uBACA,YACA,kBACA,0BACA,gBACA,mBAGWC,EAAsB,CACjC,yBACA,yBACA,0BACA,+BACA,qCACA,+BACA,oCAEA,sCACA,0BACA,8BACA,oCACA,yBAGWC,EAA6B,CAAC,WAAY,UAAW,aAK3D,MAAMC,EACXv3L,YAAgC8uL,GAAA,KAAAA,gBAAAA,CAAyC,CAEtCzlG,gBACjC,OAAO+tG,EAAchgL,OAAO,CAC1B,gBACA,qBAEA,4BACA,+BACCA,OAA+BjW,MAAxBxB,KAAKmvL,gBAA+BuI,EAAsBC,EACtE,CAEA3xL,W,MACsB,QAApB,EAAAhG,KAAKmvL,uBAAe,SAAE0E,cAAc,WACtC,E,iCAfW+D,GAAkB,e,mBAAlBA,EAAkB,2E,uICzBxB,MAAMC,EACXx3L,YAAgC8uL,GAAA,KAAAA,gBAAAA,CAAyC,CAEtCzlG,gBACjC,OAAO,KAAcjyE,OAAO,CAC1B,gBACA,oBAEA,4BACA,+BACCA,OAA+BjW,MAAxBxB,KAAKmvL,gBAA+B,KAAsB,KACtE,CAEAnpL,W,MACsB,QAApB,EAAAhG,KAAKmvL,uBAAe,SAAE0E,cAAc,WACtC,E,iCAfWgE,GAAkB,e,mBAAlBA,EAAkB,2E,yNCHzBvE,EAAY,CAMhB,cACA,yBACA,kBACA,qBACA,yBACA,uBACA,uBACA,iBACA,6BACA,yBAGInB,EAA2C,CAC/C2F,SAAU,CACR,oBACA,oBACA,wBACA,gCACA,gCACA,6CACA,yBACA,uCACA,sCACGxE,GAELyE,KAAM,CACJ,oBACA,gBACA,wBACA,gCACA,4BACA,yCACA,yBACA,uCACA,sCACGzE,GAEL0E,MAAO,CACL,oBACA,iBACA,wBACA,gCACA,8BACA,2CACA,yBACA,uCACA,sCACG1E,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,GAEL2E,MAAO,CACL,oBACA,gBACA,wBACA,gCACA,4BACA,yCACA,uCACA,sCACG3E,GAELE,SAAU,IAKN0E,EAA0C,CAC9C/oE,QAAS,CAAC,YAAa,aACvBkhE,MAAO,CAAC,kBAAmB,eAAgB,WAQtC,MAAM8H,EALb,cAUW,KAAA35K,KAAuB,UA0BvB,KAAApT,SAAU,EACV,KAAA4I,UAAW,C,CAzBM01E,gB,MACxB,MAAO,CACL,mBACA,YACA,kBACA,aACA,gBACA,wBACA,yBAECjyE,OAAO06K,EAAsB,QAAf,EAAAnyL,KAAK0uH,kBAAU,QAAI,SACjCj3G,OAAOygL,EAAMl4L,KAAKwe,MACvB,CAEI45K,gBACF,MAAO,CAACp4L,KAAK4X,KAAM,UACrB,CAGIg8K,mBAEF,UADkC,MAAjB5zL,KAAKgU,WAAsC,IAAlBhU,KAAKgU,YAC5BhU,KAAKoL,UAAiB,IAC3C,CAKAyoL,cAAcvtL,GACZtG,KAAK0uH,WAAapoH,CACpB,E,iCApCW6xL,EAAsB,E,mBAAtBA,EAAsB,gH,uLAFtB,CAAC,CAAEzhL,QAAS,IAAuBC,YAAawhL,MAAyB,M,qBAAA,iSC7HtF,kBACE,kCACE,iCACF,wBACA,kCAIE,iCAKF,yBACF,uBACA,gB,MAdQ,+CACW,sCAIf,gDAKE,wD,iHCDC,MAAME,G,iCAAAA,EAAgB,E,mBAAhBA,I,uBAJD,O,oFCGL,MAAMC,EACE1gL,SAAKA,GAChB,KAAK,QAAOA,GAEV,YADA5X,KAAKu4L,UAAY,IAInB,MAAMzH,EAAMl5K,EAAKk5K,IACjB9wL,KAAKu4L,UAAYv4L,KAAKw4L,aAAaC,wBAAwB3H,EAC7D,CAIAzwL,YAAoBm4L,GAAA,KAAAA,aAAAA,CAA6B,E,iCAbtCF,GAAgB,c,mBAAhBA,EAAgB,oE,8KCT7B,MAAMI,EACJr4L,YAAqBywL,GAAA,KAAAA,IAAAA,CAAc,EAO9B,SAAS6H,EAAO/gL,GACrB,OAAOA,aAAgB8gL,CACzB,CAEO,MAAME,UAAsCjvL,MACjDtJ,cACEE,MAAM,4EACR,EAGK,SAASs4L,EAAQC,KAAkC7pG,GACxD,GAAIA,EAAOthF,OAAS,EAClB,MAAM,IAAIirL,EAGZ,OAAO,IAAIF,EAAKI,EAAQ,GAC1B,C,gDCtBO,MAAMC,E,SAAS,EAAO;;;;;;;;;;;;;;;sFCa7B,IAAInlL,EAAS,EAMN,MAAMolL,EACwBtvG,gBACjC,MAAO,CACL,WACA,YACA,UACA,YACA,uBACA,YACA,kBACA1pF,KAAKsW,SAAW,uBAAyB,0BACzC,eACA,4BAEA,kBACA,qBACA,oBAEA,wBACA,8BACA,kBACA,sBACA,4BACA,gBACA,gCACA5F,QAAQ+O,GAAW,IAALA,GAClB,CAMsCw5K,kBACpC,QAAOj5L,KAAKsW,eAAkB9U,CAChC,CAQImO,e,YACF,OAAmF,QAA5E,EAAc,QAAd,EAAA3P,KAAKmW,iBAAS,QAA2B,QAAvB,EAAc,QAAd,EAAAnW,KAAK8T,iBAAS,eAAEsC,eAAO,eAAEC,aAAa,KAAW1G,iBAAS,QACrF,CACIA,aAASrJ,GACXtG,KAAKmW,UAAqB,MAAT7P,IAA2B,IAAVA,CACpC,CAQI4P,iBACF,OAAOlW,KAAKQ,EACd,CAGA04L,U,QACyB,QAAvB,EAAc,QAAd,EAAAl5L,KAAK8T,iBAAS,eAAEsC,eAAO,SAAE8nI,iBAC3B,CAEI5nI,e,gBACF,OAAItW,KAAKm5L,wBAEuB,aAAb,QAAd,EAAAn5L,KAAK8T,iBAAS,eAAEnP,SAAmD,cAAb,QAAd,EAAA3E,KAAK8T,iBAAS,eAAEnP,WAC3C,QAAd,EAAA3E,KAAK8T,iBAAS,eAAEyC,UACU,OAAZ,QAAd,EAAAvW,KAAK8T,iBAAS,eAAE2C,QAGgB,aAAb,QAAd,EAAAzW,KAAK8T,iBAAS,eAAEnP,UAAsC,QAAd,EAAA3E,KAAK8T,iBAAS,eAAEyC,QAEnE,CAEI/J,YACF,MAAM+H,EAAMjT,OAAOkV,KAAKxW,KAAK8T,UAAU2C,QAAQ,GAC/C,MAAO,CAAClC,EAAKvU,KAAK8T,UAAU2C,OAAOlC,GACrC,CAEAlU,YAC8ByT,EACpBoM,EACA+7G,GAFoB,KAAAnoH,UAAAA,EACpB,KAAAoM,OAAAA,EACA,KAAA+7G,WAAAA,EAxDc,KAAAz7H,GAAK,aAAaoT,IAsBjC,KAAAwlL,WAAY,EACZ,KAAAC,WAAY,EAEZ,KAAAF,wBAA0B,CAgChC,CAEH7hK,QACEt3B,KAAKkgB,OAAOuvH,mBAAkB,KAC5B,MAAMrxC,EAAMp+F,KAAKi8H,WAAWjmH,cAAc1P,MAAMqH,OAChD3N,KAAKi8H,WAAWjmH,cAAcsjL,kBAAkBl7F,EAAKA,GACrDp+F,KAAKi8H,WAAWjmH,cAAcshB,OAAO,GAEzC,E,iCA7FW0hK,GAAiB,2C,mBAAjBA,EAAiB,mI,iCAAjB,WAAS,I,kYAFT,CAAC,CAAEtiL,QAAS,IAAqBC,YAAaqiL,O,0ECTpD,MAAMO,G,iCAAAA,EAAW,E,mBAAXA,I,uBAJD,O,uECFZ,MAAMC,EAAyC,CAC7CpH,QAAS,CACP,uBACA,6BACA,2CACA,oCAEFC,UAAW,CACT,gBACA,sBACA,2CACA,8BAEFyF,SAAU,CACR,oBACA,0BACA,6CACA,kCAIE2B,EAAe,CACnB,gBACA,kBACA,SACA,mBACA,oBACA,cACA,iBACA,aACA,gBACA,qBACA,wBACA,2BACA,iCACA,gCACA,6BACA,gCAWA,cACA,yBACA,kBACA,qBACA,6BACA,uBACA,uBACA,iCACA,6CACA,yBAGF,MACeC,EADf,cAGE,KAAAC,SAAqB,S,mCAFRD,EAAa,E,mBAAbA,EAAa,+BAQrB,MAAME,UAA4BF,EACbhwG,gB,MACxB,MAAO,CAAC,iCACLjyE,OAAOgiL,GACPhiL,OAAgC,QAAzB,EAAA+hL,EAAWx5L,KAAK25L,iBAAS,QAAI,GACzC,E,8DALWC,KAAmB,GAAnBA,EAAmB,E,sBAAnBA,EAAmB,0E,uCAWzB,MAAMC,UAA4BH,EACbhwG,gB,MACxB,MAAO,CAAC,gCACLjyE,OAAOgiL,GACPhiL,OAAgC,QAAzB,EAAA+hL,EAAWx5L,KAAK25L,iBAAS,QAAI,GACzC,E,8DALWE,KAAmB,GAAnBA,EAAmB,E,sBAAnBA,EAAmB,+E,gHC1EzB,MAAMC,G,iCAAAA,EAAU,E,mBAAVA,I,uBAJD,O,+DCAL,MAAMC,G,iCAAAA,EAAoB,E,mBAApBA,EAAoB,iMCNjC,iBAIA,c,kFCEO,MAAMC,EAwBX35L,YAAoB47H,GAAA,KAAAA,WAAAA,EAvBE,KAAAvyC,UAAY,CAChC,WACA,UACA,UACA,gBACA,mBACA,oBACA,iBACA,mBACA,eACA,4BACA,4BACA,gBACA,wBACA,gBACA,yBACA,4BACA,oBACA,4BAEwB,KAAAksC,KAAO,WACR,KAAA1B,SAAW,IAES,CAE7C58F,QACEt3B,KAAKi8H,WAAWjmH,cAAcshB,OAChC,E,iCA5BW0iK,GAAiB,e,mBAAjBA,EAAiB,8E,mLCavB,MAAMC,EAE4BC,e,MACrC,OAAgB,QAAT,EAAAl6L,KAAKm6L,YAAI,eAAEC,WAAY,MAChC,CAmCA/5L,YACU47H,EACAgwC,EACAouB,GAFA,KAAAp+D,WAAAA,EACA,KAAAgwC,iBAAAA,EACA,KAAAouB,QAAAA,EAzCyB,KAAA/lL,QAAS,EAIlB,KAAAshH,KAAO,SAKzB,KAAA0kE,kBAAmC,CACzCC,WAAY,iBACZC,aAAa,EACb7nE,cAAe,mCACfN,eAAgBryH,KAAKq6L,QAAQI,iBAAiBC,aAC9CC,iBAAkB36L,KAAKq6L,QACpBv4E,WACA84E,oBAAoB56L,KAAKi8H,YACzB4+D,cAAc,CACb,CACEC,QAAS,QACTC,QAAS,SACTC,SAAU,QACVC,SAAU,OAEZ,CACEH,QAAS,MACTC,QAAS,SACTC,SAAU,MACVC,SAAU,SAGbC,oBAAmB,GACnBC,wBAAuB,GACvBC,UAAS,GASX,CAEoBC,aACrBr7L,KAAKsU,OAAStU,KAAKs7L,cAAgBt7L,KAAKu7L,UAC1C,CAEAzrL,cACE9P,KAAKw7L,YACP,CAEQD,WACN,GAAiB,MAAbv7L,KAAKm6L,KACP,MAAM,IAAIxwL,MAAM,gCAGlB3J,KAAKsU,QAAS,EACdtU,KAAKy7L,WAAaz7L,KAAKq6L,QAAQ/4K,OAAOthB,KAAKs6L,mBAE3C,MAAMoB,EAAiB,IAAI,KAAe17L,KAAKm6L,KAAKnkE,YAAah2H,KAAKisK,kBACtEjsK,KAAKy7L,WAAWE,OAAOD,GAEvB17L,KAAK47L,gBAAkB57L,KAAK67L,kBAAkB5uL,WAAWmH,IACnD,CAAC,MAAO,UAAU2G,SAAS3G,aAAK,EAALA,EAAOG,MAEpCvU,KAAKi8H,WAAWjmH,cAAcshB,QAEhCt3B,KAAKs7L,aAAa,IAEpBt7L,KAAK87L,iBACH97L,KAAKm6L,KAAK4B,YACV/7L,KAAKy7L,WACFO,gBACA/uL,WAAWmH,GAAyBpU,KAAKm6L,KAAK4B,WAAWE,UAAU7nL,IAC1E,CAEQknL,cACiB,MAAnBt7L,KAAKy7L,YAAuBz7L,KAAKsU,SAIrCtU,KAAKsU,QAAS,EACdtU,KAAKw7L,aACP,CAEQK,kBACN,MAAMK,EAAcl8L,KAAKy7L,WAAWS,cAC9BC,EAASn8L,KAAKy7L,WAAWO,gBAAgB7uL,MAC7C,QAAQiH,IAC8B,SAAvBpU,KAAKm6L,KAAKC,SAAsB,CAAC,SAAU,OAAS,CAAC,WACtDr/K,SAAS3G,EAAMG,QAGzBs4J,EAAW7sK,KAAKy7L,WAAWW,gBAC3BC,EAAar8L,KAAKm6L,KAAKt5E,OAE7B,OAAOq7E,EAAY/uL,MAAK,OAAUgvL,EAAQtvB,EAAUwvB,GACtD,CAEQb,a,UACc,QAApB,EAAAx7L,KAAK47L,uBAAe,SAAEtzG,cACP,QAAf,EAAAtoF,KAAKy7L,kBAAU,SAAEa,UACI,QAArB,EAAAt8L,KAAK87L,wBAAgB,SAAExzG,aACzB,E,iCAzGW2xG,GAAuB,wC,mBAAvBA,EAAuB,mF,iCAAvB,cAAY,I,yPClBvB,iCACE,0DAAS,QAAAp5E,OAAA,OAAa,IAOtB,2BACF,wBACF,a,yBAJI,gEAHA,yBAAsB,yB,ECgBnB,MAAM07E,EALb,cAOY,KAAA17E,OAAS,IAAI,MAKd,KAAAu5E,SAA8B,M,CAIvC11D,qBACwB,SAAlB1kI,KAAKo6L,WACPp6L,KAAK+7L,WAAa,IAAI,KAAgB/7L,KAAKw8L,WAAWC,WAE1D,E,iCAfWF,EAAa,E,mBAAbA,EAAa,wD,GAAA,K,QAGP,IAAmB,G,oFAFzB,MAAW,G,ieDrBxB,6BAYA,c,sIEGO,MAAMG,G,iCAAAA,EAAU,E,mBAAVA,I,uBAJD,KAAY,KAAc,O,sHCI/B,MAAMC,G,iCAAAA,EAAiB,E,mBAAjBA,I,uBAJD,KAAc,KAAa,KAAgB,IAAa,M,qFCG7D,MAAMC,G,iCAAAA,EAAiB,E,mBAAjBA,I,uBAJD,KAAc,IAEd,M,+FCLc,Q,CAEnB,MAAMC,EAJb,cASE,KAAAv2L,WAAY9E,EAKJ,KAAA4yL,WAAY,C,CAEhBpgL,eACF,OAAOhU,KAAKo0L,SACd,CACIpgL,aAAS1N,GACXtG,KAAKo0L,WAAY,QAAsB9tL,EACzC,E,iCAjBWu2L,EAAe,E,mBAAfA,EAAe,mH,MAAA,4C,QAFf,6B,4KCOL,e,0BAA6B,8B,2BAFjC,mCACE,qCACE,2CACF,4BACA,qCACE,SACF,QACF,2BACF,kB,oBANU,oCAGJ,+C,ECGR,IAAIjpL,EAAS,EAON,MAAMkpL,EAcXz8L,YAAoB+G,EAAsD0M,GAAtD,KAAA1M,YAAAA,EAAsD,KAAA0M,UAAAA,EAVjE,KAAA7C,MAAqB,GACrB,KAAA0D,YAAc3U,KAAKoH,YAAYc,EAAE,qBAIhC,KAAA+L,cAAgB,2BAA2BL,IAiBrB,KAAA8lB,QAAU,CAAC,WAAY,aAoE/B,KAAAl5B,GAAK,oBAAoBoT,IA/E9B,MAAbE,IACFA,EAAUY,cAAgB1U,KAE9B,CAGc2yC,YAAQrsC,GACpBtG,KAAKiR,MAAQ3K,EAAM0sL,UACnBhzL,KAAK+S,eAAiB/S,KAAK+8L,mBAAmB/8L,KAAKiR,MAAOjR,KAAKg9L,cACjE,CAMIhpL,e,UACF,OAAiD,QAA1C,EAAc,QAAd,EAAAhU,KAAKo0L,iBAAS,QAAkB,QAAd,EAAAp0L,KAAK8T,iBAAS,eAAEE,gBAAQ,QACnD,CACIA,aAAS1N,GACXtG,KAAKo0L,UAAqB,MAAT9tL,IAA2B,IAAVA,CACpC,CAIA6O,WAAWC,GACTpV,KAAKg9L,cAAgB5nL,EACrBpV,KAAK+S,eAAiB/S,KAAK+8L,mBAAmB/8L,KAAKiR,MAAOjR,KAAKg9L,cACjE,CAGA3nL,iBAAiB3B,GACf1T,KAAKsV,eAAiB5B,CACxB,CAGA6B,kBAAkB7B,GAChB1T,KAAKwV,gBAAkB9B,CACzB,CAGA+B,iBAAiBC,GACf1V,KAAKgU,SAAW0B,CAClB,CAGUC,SAASsnL,GACZj9L,KAAKsV,gBAIVtV,KAAKsV,eAAe2nL,aAAM,EAANA,EAAQ32L,MAC9B,CAGUsP,SACH5V,KAAKwV,iBAIVxV,KAAKwV,iBACP,CAIIK,sBACF,OAAO7V,KAAK8V,gBACd,CACID,oBAAgBvP,G,MAClBtG,KAAK8V,iBAAmBxP,EACb,QAAX,EAAAtG,KAAKqU,cAAM,SAAE0B,YAAYC,cAAcC,aAAa,mBAAoB3P,EAC1E,CAII4P,iBACF,OAAOlW,KAAKiU,aACd,CAQItE,e,YACF,OAAmF,QAA5E,EAAc,QAAd,EAAA3P,KAAKmW,iBAAS,QAA2B,QAAvB,EAAc,QAAd,EAAAnW,KAAK8T,iBAAS,eAAEsC,eAAO,eAAEC,aAAa,KAAW1G,iBAAS,QACrF,CACIA,aAASrJ,GACXtG,KAAKmW,UAAqB,MAAT7P,IAA2B,IAAVA,CACpC,CAIIgQ,e,QACF,MAAkC,aAAb,QAAd,EAAAtW,KAAK8T,iBAAS,eAAEnP,UAAsC,QAAd,EAAA3E,KAAK8T,iBAAS,eAAEyC,QACjE,CAGI/J,Y,QACF,MAAM+H,EAAMjT,OAAOkV,KAAmB,QAAd,EAAAxW,KAAK8T,iBAAS,eAAE2C,QAAQ,GAChD,MAAO,CAAClC,EAAmB,QAAd,EAAAvU,KAAK8T,iBAAS,eAAE2C,OAAOlC,GACtC,CAEQwoL,mBAAmB9rL,EAAoB3K,GAC7C,OAAO2K,EAAM6D,MAAMnE,GAASA,EAAKrK,QAAUA,GAC7C,E,iCAxHWw2L,GAAe,4B,mBAAfA,EAAe,0D,GAAA,K,QAoBT,IAAe,G,kFAnBrB,KAAiB,G,6UAHjB,CAAC,CAAEpmL,QAAS,IAAqBC,YAAammL,MAAkB,0TDzB7E,uBACE,gEAA4B,oCACX,EAAAnnL,SAAA,EAAgB,GADjC,CAA4B,0BAKpB,EAAAC,QAAQ,IAKhB,gDAUF,sBACA,e,KArBE,kCAA4B,sBAA5B,CAA4B,4BAA5B,CAA4B,gBAA5B,CAA4B,0BAA5B,CAA4B,e,2JEYvB,MAAMsnL,G,iCAAAA,EAAY,E,mBAAZA,I,uBAJD,KAAc,KAAgB,O,gDCPnC,MAAeC,G,0ECQf,MAAM7yB,EACXjqK,YAAoB+G,GAAA,KAAAA,YAAAA,CAA2B,CAE/CyP,UAAUrW,EAAYw2G,EAAa9yF,EAAa+yF,GAC9C,OAAOj3G,KAAKoH,YAAYc,EAAE1H,EAAIw2G,EAAI9yF,EAAI+yF,EACxC,E,iCALWqzD,GAAQ,gB,gCAARA,EAAQ,S,0ECAd,MAAMj3C,G,iCAAAA,EAAY,E,mBAAZA,I,uBAJD,KAEA,O,+DCHL,MAAM+pE,EACe1zG,gBACxB,MAAO,CAAC,SACV,E,iCAHW0zG,EAAa,E,mBAAbA,EAAa,+F,oFCAnB,MAAMC,EAHb,cAIW,KAAAC,aAAyD,Q,CAE9DC,qBACF,OAAQv9L,KAAKs9L,cACX,IAAK,MACH,MAAO,eACT,IAAK,SACH,MAAO,kBACT,IAAK,SACH,MAAO,kBACT,QACE,MAAO,oBAEb,CAE0B5zG,gBACxB,MAAO,CACL,cACA,cACA,0BACA,kBACA,6BACA,mBACA1pF,KAAKu9L,eAET,E,iCA1BWF,EAAY,E,mBAAZA,EAAY,0E,oKCSlB,MAAMG,UAA2B,KAQtCn9L,cACEE,QANe,KAAAk9L,QAAU,IAAI,IAAwB,IACtC,KAAAC,YAAc,IAAI,IAAqB,IAEhD,KAAAC,2BAAkD,KAIxD39L,KAAK49L,MAAQ,IAAI,IAAgB,IACjC59L,KAAK69L,MAAQ,IAAI,IAAgB,CAAEC,UAAW,OAChD,CAEIt7L,WACF,OAAOxC,KAAK49L,MAAMt3L,KACpB,CAEI9D,SAAKA,GACPxC,KAAK49L,MAAM7tL,KAAKvN,EAAO,IAAIA,GAAQ,GACrC,CAEI+Q,SAAKA,GACPvT,KAAK69L,MAAM9tL,KAAKwD,EAClB,CAEIA,WACF,OAAOvT,KAAK69L,MAAMv3L,KACpB,CAEIoK,aACF,OAAO1Q,KAAKy9L,QAAQn3L,KACtB,CAEIoK,WAAOA,GACT1Q,KAAKy9L,QAAQ1tL,KAAKW,EACpB,CAEAqtL,UAKE,OAJK/9L,KAAK29L,4BACR39L,KAAKg+L,2BAGAh+L,KAAK09L,WACd,CAEAO,a,MACiC,QAA/B,EAAAj+L,KAAK29L,kCAA0B,SAAEr1G,cACjCtoF,KAAK29L,2BAA6B,IACpC,CAEQK,2B,MACN,MAAME,GAAe,OAAc,CAACl+L,KAAK49L,MAAO59L,KAAKy9L,UAAUtwL,MAC7D,QAAI,EAAE3K,EAAMkO,KAAY1Q,KAAKm+L,WAAW37L,EAAMkO,MAG1C0tL,GAAc,OAAc,CAACF,EAAcl+L,KAAK69L,QAAQ1wL,MAC5D,QAAI,EAAE3K,EAAM+Q,KAAUvT,KAAKq+L,UAAU77L,EAAM+Q,MAGd,QAA/B,EAAAvT,KAAK29L,kCAA0B,SAAEr1G,cACjCtoF,KAAK29L,2BAA6BS,EAAYnxL,WAAWzK,GAASxC,KAAK09L,YAAY3tL,KAAKvN,IAC1F,CAEQ27L,WAAW37L,EAAWkO,GAC5B,OAAc,MAAVA,GAA4B,IAAVA,EACblO,EAGFA,EAAKkO,QAAQ0E,GAAQpV,KAAKs+L,gBAAgBlpL,EAAK1E,IACxD,CAEQ2tL,UAAU77L,EAAW+Q,GAC3B,OAAKA,EAIEvT,KAAKu+L,SAAS/7L,EAAM+Q,GAHlB/Q,CAIX,CAeUg8L,oBAAoBh8L,EAASi8L,GACrC,MAAMn4L,EAAS9D,EAAwCi8L,GAEvD,IAAI,QAAen4L,GAAQ,CACzB,MAAMo4L,EAAclkL,OAAOlU,GAE3B,OAAOo4L,EAAclkL,OAAOmkL,iBAAmBD,EAAcp4L,C,CAG/D,OAAOA,CACT,CAeUi4L,SAAS/7L,EAAW+Q,GAC5B,MAAMqrL,EAASrrL,EAAKqrL,OACdC,EAAuC,QAAnBtrL,EAAKuqL,UAAsB,GAAK,EAC1D,OAAKc,EAIEp8L,EAAK+Q,MAAK,CAAC2G,EAAGC,KAEnB,GAAI5G,EAAKG,GACP,OAAOH,EAAKG,GAAGwG,EAAGC,GAAK0kL,EAGzB,IAAIC,EAAS9+L,KAAKw+L,oBAAoBtkL,EAAG0kL,GACrCG,EAAS/+L,KAAKw+L,oBAAoBrkL,EAAGykL,GAKzC,MAAMI,SAAoBF,EACpBG,SAAoBF,EAW1B,GATIC,IAAeC,IACE,WAAfD,IACFF,GAAU,IAEO,WAAfG,IACFF,GAAU,KAIQ,iBAAXD,GAAyC,iBAAXC,EACvC,OAAOD,EAAO98G,cAAc+8G,GAAUF,EAOxC,IAAIK,EAAmB,EAcvB,OAbc,MAAVJ,GAA4B,MAAVC,EAEhBD,EAASC,EACXG,EAAmB,EACVJ,EAASC,IAClBG,GAAoB,GAEH,MAAVJ,EACTI,EAAmB,EACA,MAAVH,IACTG,GAAoB,GAGfA,EAAmBL,CAAiB,IAjDpCr8L,CAmDX,CAgBU87L,gBAAgB97L,EAASkO,GAEjC,MAAMyuL,EAAU79L,OAAOkV,KAAKhU,GACzB25E,QAAO,CAACijH,EAAqB7qL,IAOrB6qL,EAAe58L,EAAwC+R,GAAO,KACpE,IACF2gE,cAGGmqH,EAAoB3uL,EAAOiP,OAAOu1D,cAExC,OAA8C,GAAvCiqH,EAAQrnK,QAAQunK,EACzB,E,kHCtNE,Q,iECUG,MAAMC,EAEXj/L,YAA4Bk/L,GAAA,KAAAA,SAAAA,CAA6B,E,iCAF9CD,GAAkB,e,mBAAlBA,EAAkB,wCASxB,MAAME,EAJb,cAMW,KAAAr0C,OAA2B,OAM5B,KAAAs0C,cAAe,C,CAEnBC,iBACF,MAAO,CACL,YACA,oBACA,eACgB,SAAhB1/L,KAAKmrJ,OAAoB,gBAAkB,iBAE/C,CAEA8rC,wBACE,IAAKj3L,KAAKy/L,eAAgB,QAAaz/L,KAAKi3H,YAAa,CACvDj3H,KAAKy/L,cAAe,EAEpB,MAAME,EAAa3/L,KAAKi3H,WAAW8mE,UACnC/9L,KAAK4/L,KAAOD,C,CAEhB,CAEA7vL,eACM,QAAa9P,KAAKi3H,aACpBj3H,KAAKi3H,WAAWgnE,YAEpB,E,iCAhCWuB,EAAc,E,mBAAdA,EAAc,yD,GAAA,K,QAIXF,EAAkB,G,wXD9BlC,mBACE,mCAGE,2BACF,wBACA,iCACE,kDAGF,yBACF,uBACA,gB,MAZO,8BAQA,+DAA6C,6C,sHEW7C,MAAMO,G,iCAAAA,EAAW,E,mBAAXA,I,uBAVD,O,+DCIL,MAAMC,G,iCAAAA,EAAkB,E,mBAAlBA,EAAkB,4M,MAAA,4C,QAFlB,S,kFCAN,MAAMC,G,iCAAAA,EAAyB,E,mBAAzBA,EAAyB,wG,+DCH/B,MAAMC,EAKPpM,mBACF,OAAO5zL,KAAKgU,UAAY,IAC1B,CAEA3T,YAAoB47H,GAAA,KAAAA,WAAAA,CAAyB,CAE7C3kG,QACEt3B,KAAKi8H,WAAWjmH,cAAcshB,OAChC,CAEAyqF,QACE/hH,KAAKi8H,WAAWjmH,cAAc+rG,OAChC,CAGIr4B,gBACF,OAAO1pF,KAAKigM,cACTxoL,OAAOzX,KAAKkgM,OAASlgM,KAAKmgM,gBAAkB,IAC5C1oL,OAAOzX,KAAKgU,SAAWhU,KAAKogM,kBAAoB,IAChD3oL,OAAOzX,KAAKqgM,mBACjB,CAMIA,yBACF,OAAIrgM,KAAKgU,SACA,CAAC,iBAAkB,wBAExBhU,KAAKkgM,OACA,CAAC,uBAAwB,8BAE3B,CAAC,gBAAiB,sBAC3B,CAEID,oBACF,MAAO,CACL,WACA,cACA,UACA,UACA,mBACA,gBACA,eACA,cACA,cACA,gBACA,wBACA,kBACA,oBACA,qBACA,wBACA,gCACA,0BACA,oCAEJ,CAEIG,wBACF,MAAO,CAAC,uBAAwB,mBAAoB,wBACtD,CAEID,sBACF,MAAO,CACL,YACA,4BACA,0BACA,cACA,yBACA,oBACA,gCACA,wCACA,qCAEJ,E,iCAhFWH,GAAoB,e,mBAApBA,EAAoB,iF,iSCD1B,MAAMM,EAJb,cAQW,KAAAC,iBAAkB,C,CAEKhsI,aAC9B,OAAQv0D,KAAKkgM,QAAU,IACzB,CAGIA,aACF,OAAOlgM,KAAKwgM,OACd,CACIN,WAAO55L,GACTtG,KAAKwgM,QAAUl6L,EACXtG,KAAKwgM,UACPxgM,KAAKygM,cAAe,EAExB,CASIC,iBACF,OAAI1gM,KAAKkgM,QAGLlgM,KAAKugM,iBAAmBvgM,KAAKygM,aAFxBzgM,KAAKgc,QAKP,IACT,E,yBCpBQ,mCACF,uB,gCADgB,8D,0BAGW,S,gCAAA,kB,2BAJ3B,qDAIA,kEACF,qB,0CALe,uCAA0B,a,0CAf3C,oBAUE,kEAAS,QAAA2kL,UAAA,GAAY,IAErB,+BAEA,gEAOF,yB,4DAhBE,+BAAuB,oBAAvB,CAAuB,uBAGvB,2CAA0C,qCAI5B,oC,2BAalB,0BAUA,yB,6CAPE,iCAAyB,oBAAzB,CAAyB,oBAAzB,CAAyB,qCACzB,oCAAqC,+B,mCD7B5BL,EAAgB,E,mBAAhBA,EAAgB,wE,kLEP7B,+BACA,e,KADa,qC,wCCsBb,IAAI1sL,EAAS,EAMN,MAAMgtL,EAwBPl7C,oBACF,OAAO1lJ,KAAK6gM,cACd,CACIn7C,kBAAcp/I,GAChBtG,KAAK8gM,gBAAiB,QAAqBx6L,EAAO,KACpD,CAgBAjG,cAzCiB,KAAAgP,SAAW,IAAIC,EAAA,EACxB,KAAAwxL,eAAgC,EAK/B,KAAAroK,MAAQ,GAOR,KAAA8nK,iBAAkB,EAanB,KAAAM,eAAgC,KAGrB,KAAAE,oBAA4C,IAAI,MAGhD,KAAAC,kBACjB,IAAI,MASJhhM,KAAKihM,SAAWrtL,GAClB,CAEUstL,gBAAgB1gM,GACxB,MAAO,mBAAmBR,KAAKihM,YAAYzgM,GAC7C,CAEU2gM,cAAc3gM,GACtB,MAAO,iBAAiBR,KAAKihM,YAAYzgM,GAC3C,CAEAmgM,UAAU/tL,GACR5S,KAAK0lJ,cAAgB9yI,CACvB,CAMAqkL,wBACE,MAAMmK,EAAiBphM,KAAK8gM,eAAiB9gM,KAAKqhM,eAAerhM,KAAK8gM,gBAEtE,GAAI9gM,KAAK6gM,gBAAkBO,EAAe,CACxC,MAAME,EAAoC,MAAvBthM,KAAK6gM,eAEnBS,GACHthM,KAAKghM,kBAAkBz0L,KAAK,CAC1BqG,MAAOwuL,EACPG,IAAKvhM,KAAKwhM,KAAKxO,UAAUoO,KAM7Bt8L,QAAQ4B,UAAUkJ,MAAK,KACrB5P,KAAKwhM,KAAK5zL,SAAQ,CAAC2zL,EAAK3uL,IAAW2uL,EAAIjzH,SAAW17D,IAAUwuL,IAEvDE,GACHthM,KAAK+gM,oBAAoBx0L,KAAK60L,E,IAKlCphM,KAAK6gM,eAAiBO,EAClBphM,KAAK+7L,YACP/7L,KAAK+7L,WAAW0F,cAAcL,E,CAGpC,CAEA/1L,kBACErL,KAAK+7L,WAAa,IAAI,KAAgB/7L,KAAK0hM,WACxCC,0BAA0B,OAC1BlF,WACAmF,gBACL,CAEAl9D,qBAGE1kI,KAAKwhM,KAAKxmE,QAAQ7tH,MAAK,EAAAkD,EAAA,GAAUrQ,KAAKqP,WAAWpC,WAAU,KACzD,MAAMm0L,EAAgBphM,KAAKqhM,eAAerhM,KAAK8gM,gBAI/C,GAAIM,IAAkBphM,KAAK6gM,eAAgB,CACzC,MAAMW,EAAOxhM,KAAKwhM,KAAKxO,UACvB,IAAI6O,EAEJ,IAAK,IAAIn0L,EAAI,EAAGA,EAAI8zL,EAAK7zL,OAAQD,IAC/B,GAAI8zL,EAAK9zL,GAAG4gE,SAAU,CAIpBtuE,KAAK8gM,eAAiB9gM,KAAK6gM,eAAiBnzL,EAC5Cm0L,EAAcL,EAAK9zL,GACnB,K,EAMCm0L,GAAeL,EAAKJ,KACvBI,EAAKJ,GAAe9yH,UAAW,EAC/BtuE,KAAKghM,kBAAkBz0L,KAAK,CAC1BqG,MAAOwuL,EACPG,IAAKC,EAAKJ,K,IAKpB,CAEAtxL,cACE9P,KAAKqP,SAASU,OACd/P,KAAKqP,SAASW,UAChB,CAEQqxL,eAAezuL,GACrB,OAAOf,KAAKnK,IAAI1H,KAAKwhM,KAAK7zL,OAAS,EAAGkE,KAAKmR,IAAIpQ,GAAS,EAAG,GAC7D,E,iCAlJWguL,EAAiB,E,mBAAjBA,EAAiB,6D,GAAA,K,QAmBX,IAAY,G,+EACf,IAAoB,G,0wBFhDpC,0BACE,iCAIE,oCAAW,EAAA7E,WAAA,YAA4B,IAEvC,4CAsBF,wBACF,sBACA,+BACE,iDAWF,uBACA,gB,MAxCI,qCAKkB,iCAyBF,iC,yIGfb,MAAM+F,EACXzhM,YAAmB21H,GAAA,KAAAA,YAAAA,CAAoC,E,qBCpB5C,Q,kCDmBA8rE,GAAiB,e,mBAAjBA,EAAiB,oCECvB,MAAMC,EAmBP/lL,cACF,OAAOhc,KAAKgiM,cACd,CAIA3hM,YAAoB4hM,GAAA,KAAAA,kBAAAA,EAxBX,KAAAjuL,UAAW,EACJ,KAAAkuL,UAAY,GAepB,KAAAF,eAAwC,IAQU,CAE1Dh8L,WACEhG,KAAKgiM,eAAiB,IAAI,KAAehiM,KAAKmiM,gBAAiBniM,KAAKiiM,kBACtE,E,iCA7BWF,GAAY,e,mBAAZA,EAAY,uD,GAAA,K,QAeTD,EAAiB,G,8FADpB,MAAa,G,qQDlC1B,6BACA,c,6FEIA,MAAM3P,EAA2C,CAC/CiQ,GAAI,CAAC,cAAe,oBACpBC,GAAI,CAAC,cAAe,oBACpBC,GAAI,CAAC,aAAc,oBACnBC,GAAI,CAAC,aAAc,oBACnBC,GAAI,CAAC,eAAgB,oBACrBC,GAAI,CAAC,aAAc,oBACnBC,MAAO,CAAC,gBACRC,MAAO,CAAC,cACRC,OAAQ,CAAC,eAGLC,EAA4C,CAChDT,GAAI,CAAC,WACLC,GAAI,CAAC,WACLC,GAAI,CAAC,WACLC,GAAI,CAAC,WACLC,GAAI,CAAC,WACLC,GAAI,CAAC,WACLC,MAAO,GACPC,MAAO,GACPC,OAAQ,IAMH,MAAME,EAHb,cAMU,KAAAC,SAAU,C,CAEdC,aAAS18L,GACXtG,KAAK+iM,UAAW,QAAsBz8L,EACxC,CAE0BojF,gBACxB,OAAOyoG,EAAOnyL,KAAKijM,eAAexrL,OAAOzX,KAAK+iM,QAAUF,EAAQ7iM,KAAKijM,eAAiB,GACxF,E,iCAXWH,EAAmB,E,mBAAnBA,EAAmB,+E,2LCvBzB,SAASI,EAAqBC,GACnC,IAAItT,EACJ,IACEA,EAAYsT,G,CACZ,MAAO32L,GACP,OAAO,QAAW,IAAMA,G,CAG1B,OAAI,IAAMw7D,UAAU6nH,IACX,OAAKA,GAGVA,aAAqB,IAChBA,GAGF,IAAAtkF,IAAGskF,EACZ,C,gDC1BO,MAAMuT,EACXhiM,mBAAmB25K,EAAiB,KAAMsoB,EAAY,OACpD,MAAM13I,EAAM,IAAIrsC,KAYhB,MAAO,aAAey7J,EAAS,IAAMA,EAAS,IAAM,YAVlDpvH,EAAI6sD,cACJ,GACAx4G,KAAKsjM,UAAU33I,EAAI8sD,WAAa,EAAG,GAEnCz4G,KAAKsjM,UAAU33I,EAAImgB,UAAW,GAC9B9rE,KAAKsjM,UAAU33I,EAAI6zD,WAAY,GAE/Bx/G,KAAKsjM,UAAU33I,EAAI8zD,aAAc,GACjCz/G,KAAKsjM,UAAU33I,EAAI43I,aAAc,IAE2C,IAAMF,CACtF,CAEQjiM,iBAAiBs+G,EAAai7B,EAAe6oD,EAAe,KAClE,MAAMC,EAAY/jF,EAAI5sF,WACtB,OAAO2wK,EAAU91L,QAAUgtI,EACvB8oD,EACA,IAAIlqL,MAAMohI,EAAQ8oD,EAAU91L,OAAS,GAAGopE,KAAKysH,GAAgBC,CACnE,E,0DCnBK,MAAeC,G,6YC6Bf,MAAMC,EACXtjM,YACU8kF,EACAh2E,EACArN,EACAonB,EACAoyB,EACAn+B,GALA,KAAAgoE,cAAAA,EACA,KAAAh2E,cAAAA,EACA,KAAArN,WAAAA,EACA,KAAAonB,cAAAA,EACA,KAAAoyB,sBAAAA,EACA,KAAAn+B,aAAAA,CACP,CAEGymL,UAAUC,EAAuB,MAAOnjM,G,yCAC5C,OAAIA,QACWV,KAAKo/F,sBAAsB1+F,EAAgBmjM,GAG3C,mBAAXA,EACK7jM,KAAK8jM,qBAEL9jM,KAAK+jM,mBAAmBF,EAEnC,G,CAEMG,2BAA2B/6J,EAAkBvoC,G,yCACjD,MAAMujM,EAAYvjM,QACRV,KAAKo/F,sBAAsB1+F,EAAgB,cAC3CV,KAAK4jM,UAAU,QAEnB9yJ,QAAyB9wC,KAAKmd,aAAa0jD,aAC3ClsB,QAA6B30C,KAAKmd,aAAawjD,eAE/Cxf,EAAO,IAAMiB,sBAAsBpiD,KAAKs7C,sBAAsB0G,YAAY,KAC1EztC,QAAYvU,KAAKkpB,cAAc64B,WAAW9Y,EAAUkY,EAAMrQ,EAAS6D,GAEnEuvJ,QAAyBlkM,KAAKkpB,cAAcyE,QAAQ,IAAMm7B,UAAWv0C,GACrE4vL,QAAgBnkM,KAAKkpB,cAAcyE,QAAQs2K,EAAW1vL,GAEtD6vL,EAAgD,CACpDv5J,WAAW,EACXw5J,mBAAmB,EACnBljJ,KAAMA,EACNrQ,QAASA,EACTvC,cAAeoG,EAAUE,WACzBrG,UAAWmG,EAAUG,OACrBrG,eAAgBkG,EAAUI,YAC1BuvJ,6BAA8BJ,EAAiBz2K,gBAC/CjrB,KAAM2hM,EAAQ12K,iBAGhB,OAAOqoB,KAAKkT,UAAUo7I,EAAS,KAAM,KACvC,G,CAEMhlG,sBACJ1+F,EACAmjM,EAAuB,O,yCAEvB,MAAe,mBAAXA,EACK7jM,KAAKukM,+BAA+B7jM,GAEpCV,KAAKwkM,+BAA+B9jM,EAAgBmjM,EAE/D,G,CAEAY,YAAY1pB,EAAiB,KAAMsoB,EAAY,OAC7C,OAAO,IAAaoB,YAAY1pB,EAAQsoB,EAC1C,CAEcU,mBAAmBF,G,yCAC/B,IAAIa,EAA2B,GAC3BvnH,EAA2B,GAC/B,MAAM34E,EAAW,GAgBjB,GAdAA,EAASvE,KACPD,KAAKmlF,cAAc6J,2BAA2Bp/E,MAAM27B,IAClDm5J,EAAan5J,CAAO,KAIxB/mC,EAASvE,KACPD,KAAKmP,cAAc2tE,kBAAkBltE,MAAMU,IACzC6sE,EAAa7sE,EAAQI,QAAQ2/D,GAAuB,MAAjBA,EAAEz/D,aAAoB,WAIvD9L,QAAQC,IAAIP,GAEH,QAAXq/L,EAAkB,CACpB,MAAMx0G,EAAa,IAAIpkF,IACvBy5L,EAAW92L,SAASyiE,IACN,MAARA,EAAE7vE,IACJ6uF,EAAWvhF,IAAIuiE,EAAE7vE,GAAI6vE,E,IAIzB,MAAMs0H,EAAuB,GAkB7B,OAjBAxnH,EAAWvvE,SAAS3M,IAElB,GAAIA,EAAEkD,OAAS,IAAWuwE,OAASzzE,EAAEkD,OAAS,IAAWu/E,WACvD,OAEF,GAAwB,MAApBziF,EAAEP,eACJ,OAGF,MAAM84E,EAAc,CAAC,EACrBA,EAAOiE,OACS,MAAdx8E,EAAE44E,UAAoBwV,EAAWpwC,IAAIh+C,EAAE44E,UAAYwV,EAAWttF,IAAId,EAAE44E,UAAUl5E,KAAO,KACvF64E,EAAOS,SAAWh5E,EAAEg5E,SAAW,EAAI,KACnCj6E,KAAK4kM,kBAAkBprH,EAAQv4E,GAC/B0jM,EAAc1kM,KAAKu5E,EAAO,IAGrB,UAAamrH,E,CACf,CACL,MAAMP,EAAe,CACnBv5J,WAAW,EACXU,QAAS,GACTt6B,MAAO,IAsBT,OAnBAyzL,EAAW92L,SAASyiE,IAClB,GAAY,MAARA,EAAE7vE,GACJ,OAEF,MAAMi9E,EAAS,IAAI,KACnBA,EAAO1I,MAAM1E,GACb+zH,EAAQ74J,QAAQtrC,KAAKw9E,EAAO,IAG9BN,EAAWvvE,SAAS3M,IAClB,GAAwB,MAApBA,EAAEP,eACJ,OAEF,MAAM84E,EAAS,IAAI,KACnBA,EAAOzE,MAAM9zE,GACbu4E,EAAOxP,cAAgB,KACvBo6H,EAAQnzL,MAAMhR,KAAKu5E,EAAO,IAGrB1jC,KAAKkT,UAAUo7I,EAAS,KAAM,K,CAEzC,G,CAEcN,qB,yCACZ,IAAIv4J,EAAoB,GACpBj7B,EAAoB,GACxB,MAAM9L,EAAW,GAEjBA,EAASvE,KACPD,KAAKmlF,cAAc2J,kBAAkBl/E,MAAMygE,IACzC9kC,EAAU8kC,CAAC,KAIf7rE,EAASvE,KACPD,KAAKmP,cAAc9M,SAASuN,MAAM3O,IAChCqP,EAAUrP,EAAEyP,QAAQ2/D,GAAuB,MAAjBA,EAAEz/D,aAAoB,WAI9C9L,QAAQC,IAAIP,GAElB,MAEM4/L,EAAe,CACnBv5J,WAAW,EACXy5J,oCAJ6BtkM,KAAKkpB,cAAcyE,QAAQ,IAAMm7B,YAIfr7B,gBAC/C8d,QAAS,GACTt6B,MAAO,IAsBT,OAnBAs6B,EAAQ39B,SAASyiE,IACf,GAAY,MAARA,EAAE7vE,GACJ,OAEF,MAAMi9E,EAAS,IAAI,KACnBA,EAAO1I,MAAM1E,GACb+zH,EAAQ74J,QAAQtrC,KAAKw9E,EAAO,IAG9BntE,EAAQ1C,SAAS3M,IACf,GAAwB,MAApBA,EAAEP,eACJ,OAEF,MAAM84E,EAAS,IAAI,KACnBA,EAAOzE,MAAM9zE,GACbu4E,EAAOxP,cAAgB,KACvBo6H,EAAQnzL,MAAMhR,KAAKu5E,EAAO,IAGrB1jC,KAAKkT,UAAUo7I,EAAS,KAAM,KACvC,G,CAEcI,+BACZ9jM,EACAmjM,G,yCAEA,MAAMtzG,EAAmC,GACnCpT,EAA2B,GAC3B34E,EAAW,GAmCjB,GAjCAA,EAASvE,KACPD,KAAK8B,WAAWs9F,sBAAsB1+F,GAAgBkP,MAAMi1L,IAC1D,MAAMC,EAAsB,GAyB5B,OAxBkB,MAAdD,IAC4B,MAA1BA,EAAW9jM,aAAuB8jM,EAAW9jM,YAAY4M,OAAS,GACpEk3L,EAAW9jM,YAAY6M,SAAS3M,IAC9B,MAAMqvF,EAAa,IAAI,IAAW,IAAI,IAAervF,IACrD6jM,EAAe7kM,KACbqwF,EAAWl2C,UAAUxqC,MAAMm1L,IACzBx0G,EAAetwF,KAAK8kM,EAAO,IAE9B,IAGqB,MAAtBF,EAAWv0L,SAAmBu0L,EAAWv0L,QAAQ3C,OAAS,GAC5Dk3L,EAAWv0L,QACRI,QAAQzP,GAAwB,OAAlBA,EAAE2P,cAChBhD,SAAS3M,IACR,MAAMu4E,EAAS,IAAI,IAAO,IAAI,IAAWv4E,IACzC6jM,EAAe7kM,KACbu5E,EAAOp/B,UAAUxqC,MAAMo1L,IACrB7nH,EAAWl9E,KAAK+kM,EAAU,IAE7B,KAIFlgM,QAAQC,IAAI+/L,EAAe,WAIhChgM,QAAQC,IAAIP,GAEH,QAAXq/L,EAAkB,CACpB,MAAMoB,EAAiB,IAAIh6L,IAC3BslF,EAAe3iF,SAAS3M,IACtBgkM,EAAen3L,IAAI7M,EAAET,GAAIS,EAAE,IAG7B,MAAM0jM,EAAuB,GAkB7B,OAjBAxnH,EAAWvvE,SAAS3M,IAElB,GAAIA,EAAEkD,OAAS,IAAWuwE,OAASzzE,EAAEkD,OAAS,IAAWu/E,WACvD,OAGF,MAAMlK,EAAc,CACpBA,YAAqB,IACE,MAAnBv4E,EAAE+oE,gBACJwP,EAAOz4E,YAAcE,EAAE+oE,cACpBt5D,QAAQlQ,GAAOykM,EAAehmJ,IAAIz+C,KAClCQ,KAAKR,GAAOykM,EAAeljM,IAAIvB,GAAIG,QAExCX,KAAK4kM,kBAAkBprH,EAAQv4E,GAC/B0jM,EAAc1kM,KAAKu5E,EAAO,IAGrB,UAAamrH,E,CACf,CACL,MAAMP,EAAe,CACnBv5J,WAAW,EACX9pC,YAAa,GACbkQ,MAAO,IAcT,OAXAs/E,EAAe3iF,SAAS3M,IACtB,MAAMqvF,EAAa,IAAI,KACvBA,EAAWvb,MAAM9zE,GACjBmjM,EAAQrjM,YAAYd,KAAKqwF,EAAW,IAGtCnT,EAAWvvE,SAAS3M,IAClB,MAAMu4E,EAAS,IAAI,KACnBA,EAAOzE,MAAM9zE,GACbmjM,EAAQnzL,MAAMhR,KAAKu5E,EAAO,IAErB1jC,KAAKkT,UAAUo7I,EAAS,KAAM,K,CAEzC,G,CAEcG,+BAA+B7jM,G,yCAC3C,MAAMK,EAA4B,GAC5BuP,EAAoB,GACpB9L,EAAW,GAEjBA,EAASvE,KACPD,KAAK8B,WAAWi4F,eAAer5F,GAAgBkP,MAAM3O,IAE1C,MAALA,GAAuB,MAAVA,EAAEuB,MAAgBvB,EAAEuB,KAAKmL,OAAS,GACjD1M,EAAEuB,KAAKoL,SAAS1L,IACd,MAAMouF,EAAa,IAAI,IAAW,IAAI,IAAepuF,IACrDnB,EAAYd,KAAKqwF,EAAW,IAGzBxrF,QAAQC,IAPiB,QAWpCP,EAASvE,KACPD,KAAK8B,WAAWg8E,uBAAuBp9E,GAAgBkP,MAAM3O,IAElD,MAALA,GAAuB,MAAVA,EAAEuB,MAAgBvB,EAAEuB,KAAKmL,OAAS,GACjD1M,EAAEuB,KACCkO,QAAQC,GAA8B,OAArBA,EAAKC,cACtBhD,SAAS+C,IACR,MAAM6oE,EAAS,IAAI,IAAO,IAAI,IAAW7oE,IACzCL,EAAQrQ,KAAKu5E,EAAO,IAGnB10E,QAAQC,IATa,cAa1BD,QAAQC,IAAIP,GAElB,MAAM0qB,QAAelvB,KAAKkpB,cAAc2F,UAAUnuB,GAG5C0jM,EAAe,CACnBv5J,WAAW,EACXy5J,oCAJ6BtkM,KAAKkpB,cAAcyE,QAAQ,IAAMm7B,UAAW55B,IAI1BzB,gBAC/C1sB,YAAa,GACbkQ,MAAO,IAcT,OAXAlQ,EAAY6M,SAAS3M,IACnB,MAAMqvF,EAAa,IAAI,KACvBA,EAAWvb,MAAM9zE,GACjBmjM,EAAQrjM,YAAYd,KAAKqwF,EAAW,IAGtChgF,EAAQ1C,SAAS3M,IACf,MAAMu4E,EAAS,IAAI,KACnBA,EAAOzE,MAAM9zE,GACbmjM,EAAQnzL,MAAMhR,KAAKu5E,EAAO,IAErB1jC,KAAKkT,UAAUo7I,EAAS,KAAM,KACvC,G,CAEQQ,kBAAkBprH,EAAav4E,GAwBrC,OAvBAu4E,EAAOr1E,KAAO,KACdq1E,EAAO74E,KAAOM,EAAEN,KAChB64E,EAAO9kB,MAAQzzD,EAAEyzD,MACjB8kB,EAAOvD,OAAS,KAChBuD,EAAO+B,SAAWt6E,EAAEs6E,SAEpB/B,EAAO0rH,UAAY,KACnB1rH,EAAO2rH,eAAiB,KACxB3rH,EAAO4rH,eAAiB,KACxB5rH,EAAO6rH,WAAa,KAEhBpkM,EAAEg1E,QACJh1E,EAAEg1E,OAAOroE,SAASyiE,IACXmJ,EAAOvD,OAGVuD,EAAOvD,QAAU,KAFjBuD,EAAOvD,OAAS,GAKlBuD,EAAOvD,SAAW5F,EAAE1vE,MAAQ,IAAM,KAAO0vE,EAAE/pE,KAAK,IAI5CrF,EAAEkD,MACR,KAAK,IAAWuwE,MACd8E,EAAOr1E,KAAO,QACdq1E,EAAO2rH,eAAiBlkM,EAAE0zE,MAAM3rC,SAChCwwC,EAAO4rH,eAAiBnkM,EAAE0zE,MAAM1rC,SAChCuwC,EAAO6rH,WAAapkM,EAAE0zE,MAAM8O,KAExBxiF,EAAE0zE,MAAM0B,OACVmD,EAAO0rH,UAAY,GACnBjkM,EAAE0zE,MAAM0B,KAAKzoE,SAASnJ,IACpB+0E,EAAO0rH,UAAUjlM,KAAKwE,EAAE+xE,IAAI,KAGhC,MACF,KAAK,IAAWkN,WACdlK,EAAOr1E,KAAO,OACd,MACF,QACE,OAGJ,OAAOq1E,CACT,E,uGChaE8rH,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBhkM,IAAjBikM,EACH,OAAOA,EAAaC,QAGrB,IAAIr6F,EAASi6F,EAAyBE,GAAY,CACjDhlM,GAAIglM,EACJh1L,QAAQ,EACRk1L,QAAS,CAAC,GAUX,OANAC,EAAoBH,GAAUj5F,KAAKlB,EAAOq6F,QAASr6F,EAAQA,EAAOq6F,QAASH,GAG3El6F,EAAO76F,QAAS,EAGT66F,EAAOq6F,OACf,CAGAH,EAAoB7tL,EAAIiuL,EAGxBJ,EAAoBtkM,EAAIqkM,EtiC/BpB9lM,EAAW,GACf+lM,EAAoBK,EAAI,CAAC92K,EAAQ+2K,EAAUnyL,EAAI+hK,KAC9C,IAAGowB,EAAH,CAMA,IAAIC,EAAeC,IACnB,IAASr4L,EAAI,EAAGA,EAAIlO,EAASmO,OAAQD,IAAK,CAGzC,IAFA,IAAKm4L,EAAUnyL,EAAI+hK,GAAYj2K,EAASkO,GACpCs4L,GAAY,EACPpjB,EAAI,EAAGA,EAAIijB,EAASl4L,OAAQi1K,MACpB,EAAXnN,GAAsBqwB,GAAgBrwB,IAAan0K,OAAOkV,KAAK+uL,EAAoBK,GAAGzwH,OAAO5gE,GAASgxL,EAAoBK,EAAErxL,GAAKsxL,EAASjjB,MAC9IijB,EAASp0H,OAAOmxG,IAAK,IAErBojB,GAAY,EACTvwB,EAAWqwB,IAAcA,EAAerwB,IAG7C,GAAGuwB,EAAW,CACbxmM,EAASiyE,OAAO/jE,IAAK,GACrB,IAAIxL,EAAIwR,SACElS,IAANU,IAAiB4sB,EAAS5sB,EAC/B,CACD,CACA,OAAO4sB,CAnBP,CAJC2mJ,EAAWA,GAAY,EACvB,IAAI,IAAI/nK,EAAIlO,EAASmO,OAAQD,EAAI,GAAKlO,EAASkO,EAAI,GAAG,GAAK+nK,EAAU/nK,IAAKlO,EAASkO,GAAKlO,EAASkO,EAAI,GACrGlO,EAASkO,GAAK,CAACm4L,EAAUnyL,EAAI+hK,EAqBjB,EuiCzBd8vB,EAAoBp9F,EAAKkD,IACxB,IAAI46F,EAAS56F,GAAUA,EAAO66F,WAC7B,IAAO76F,EAAiB,QACxB,IAAM,EAEP,OADAk6F,EAAoBruJ,EAAE+uJ,EAAQ,CAAE/rL,EAAG+rL,IAC5BA,CAAM,EtiCNVvmM,EAAW4B,OAAO6kM,eAAkB/wL,GAAS9T,OAAO6kM,eAAe/wL,GAASA,GAASA,EAAa,UAQtGmwL,EAAoBr9L,EAAI,SAAS5B,EAAO8/L,GAEvC,GADU,EAAPA,IAAU9/L,EAAQtG,KAAKsG,IAChB,EAAP8/L,EAAU,OAAO9/L,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAP8/L,GAAa9/L,EAAM4/L,WAAY,OAAO5/L,EAC1C,GAAW,GAAP8/L,GAAoC,mBAAf9/L,EAAMsJ,KAAqB,OAAOtJ,CAC5D,CACA,IAAI+/L,EAAK/kM,OAAOggB,OAAO,MACvBikL,EAAoBrjM,EAAEmkM,GACtB,IAAIC,EAAM,CAAC,EACX7mM,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAI8xJ,EAAiB,EAAP40C,GAAY9/L,EAAyB,iBAAXkrJ,KAAyB/xJ,EAAeq4B,QAAQ05H,GAAUA,EAAU9xJ,EAAS8xJ,GACxHlwJ,OAAOilM,oBAAoB/0C,GAAS5jJ,SAAS2G,GAAS+xL,EAAI/xL,GAAO,IAAOjO,EAAMiO,KAI/E,OAFA+xL,EAAa,QAAI,IAAM,EACvBf,EAAoBruJ,EAAEmvJ,EAAIC,GACnBD,CACR,EuiCxBAd,EAAoBruJ,EAAI,CAACwuJ,EAASc,KACjC,IAAI,IAAIjyL,KAAOiyL,EACXjB,EAAoBzyL,EAAE0zL,EAAYjyL,KAASgxL,EAAoBzyL,EAAE4yL,EAASnxL,IAC5EjT,OAAOmlM,eAAef,EAASnxL,EAAK,CAAEmyL,YAAY,EAAM3kM,IAAKykM,EAAWjyL,IAE1E,ECNDgxL,EAAoBl1H,EAAI,CAAC,EAGzBk1H,EAAoBx5L,EAAK46L,GACjB7hM,QAAQC,IAAIzD,OAAOkV,KAAK+uL,EAAoBl1H,GAAG8L,QAAO,CAAC33E,EAAU+P,KACvEgxL,EAAoBl1H,EAAE97D,GAAKoyL,EAASniM,GAC7BA,IACL,KCNJ+gM,EAAoB9gM,EAAKkiM,IAEC,MAAZA,EAAkB,iBAAmBA,GAAW,IAAM,CAAC,EAAI,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,MCFjXpB,EAAoBqB,SAAYD,IAEf,ECHjBpB,EAAoBh7H,EAAI,WACvB,GAA0B,iBAAfs8H,WAAyB,OAAOA,WAC3C,IACC,OAAO7mM,MAAQ,IAAI8mM,SAAS,cAAb,EAChB,CAAE,MAAO/6L,GACR,GAAsB,iBAAXuR,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBioL,EAAoBzyL,EAAI,CAACsC,EAAK25B,IAAUztC,OAAO4mE,UAAUvkD,eAAe4oF,KAAKn3F,EAAK25B,G3iCA9EpvC,EAAa,CAAC,EACdC,EAAoB,wBAExB2lM,EAAoBzwG,EAAI,CAACv1D,EAAKwnK,EAAMxyL,EAAKoyL,KACxC,GAAGhnM,EAAW4/B,GAAQ5/B,EAAW4/B,GAAKt/B,KAAK8mM,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAWzlM,IAAR+S,EAEF,IADA,IAAI2yL,EAAU3pL,SAAS4pL,qBAAqB,UACpCz5L,EAAI,EAAGA,EAAIw5L,EAAQv5L,OAAQD,IAAK,CACvC,IAAI+R,EAAIynL,EAAQx5L,GAChB,GAAG+R,EAAE2nL,aAAa,QAAU7nK,GAAO9f,EAAE2nL,aAAa,iBAAmBxnM,EAAoB2U,EAAK,CAAEyyL,EAASvnL,EAAG,KAAO,CACpH,CAEGunL,IACHC,GAAa,GACbD,EAASzpL,SAASC,cAAc,WAEzB6pL,QAAU,QACjBL,EAAOv9I,QAAU,IACb87I,EAAoB+B,IACvBN,EAAO/wL,aAAa,QAASsvL,EAAoB+B,IAElDN,EAAO/wL,aAAa,eAAgBrW,EAAoB2U,GACxDyyL,EAAOvpL,IAAM8hB,GAEd5/B,EAAW4/B,GAAO,CAACwnK,GACnB,IAAIQ,EAAmB,CAACC,EAAMpzL,KAE7B4yL,EAAO3mH,QAAU2mH,EAAOtwK,OAAS,KACjC8yB,aAAaC,GACb,IAAIg+I,EAAU9nM,EAAW4/B,GAIzB,UAHO5/B,EAAW4/B,GAClBynK,EAAOU,YAAcV,EAAOU,WAAW7pL,YAAYmpL,GACnDS,GAAWA,EAAQ75L,SAAS8F,GAAQA,EAAGU,KACpCozL,EAAM,OAAOA,EAAKpzL,EAAM,EAExBq1C,EAAUvrC,WAAWqpL,EAAiB1uL,KAAK,UAAMrX,EAAW,CAAE2C,KAAM,UAAWw2C,OAAQqsJ,IAAW,MACtGA,EAAO3mH,QAAUknH,EAAiB1uL,KAAK,KAAMmuL,EAAO3mH,SACpD2mH,EAAOtwK,OAAS6wK,EAAiB1uL,KAAK,KAAMmuL,EAAOtwK,QACnDuwK,GAAc1pL,SAASma,KAAK9Z,YAAYopL,EAnCkB,CAmCX,E4iCtChDzB,EAAoBrjM,EAAKwjM,IACH,oBAAXiC,QAA0BA,OAAOC,aAC1CtmM,OAAOmlM,eAAef,EAASiC,OAAOC,YAAa,CAAEthM,MAAO,WAE7DhF,OAAOmlM,eAAef,EAAS,aAAc,CAAEp/L,OAAO,GAAO,ECL9Di/L,EAAoBsC,IAAOx8F,IAC1BA,EAAOy8F,MAAQ,GACVz8F,EAAOic,WAAUjc,EAAOic,SAAW,IACjCjc,G,MCHR,IAAI08F,EACAxC,EAAoBh7H,EAAEy9H,gBAAeD,EAAYxC,EAAoBh7H,EAAEv4C,SAAW,IACtF,IAAIzU,EAAWgoL,EAAoBh7H,EAAEhtD,SACrC,IAAKwqL,GAAaxqL,IACbA,EAAS0qL,gBACZF,EAAYxqL,EAAS0qL,cAAcxqL,MAC/BsqL,GAAW,CACf,IAAIb,EAAU3pL,EAAS4pL,qBAAqB,UAC5C,GAAGD,EAAQv5L,OAEV,IADA,IAAID,EAAIw5L,EAAQv5L,OAAS,EAClBD,GAAK,IAAMq6L,GAAWA,EAAYb,EAAQx5L,KAAK+P,GAExD,CAID,IAAKsqL,EAAW,MAAM,IAAIp+L,MAAM,yDAChCo+L,EAAYA,EAAUroL,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpF6lL,EAAoBxrL,EAAIguL,EAAY,K,WClBpCxC,EAAoBprL,EAAIoD,SAAS2qL,SAAWjsH,KAAKjqD,SAASC,KAK1D,IAAIk2K,EAAkB,CACrB,IAAK,GAGN5C,EAAoBl1H,EAAEuyG,EAAI,CAAC+jB,EAASniM,KAElC,IAAI4jM,EAAqB7C,EAAoBzyL,EAAEq1L,EAAiBxB,GAAWwB,EAAgBxB,QAAWnlM,EACtG,GAA0B,IAAvB4mM,EAGF,GAAGA,EACF5jM,EAASvE,KAAKmoM,EAAmB,QAC3B,CAGL,IAAIvsL,EAAU,IAAI/W,SAAQ,CAAC4B,EAAS6Z,IAAY6nL,EAAqBD,EAAgBxB,GAAW,CAACjgM,EAAS6Z,KAC1G/b,EAASvE,KAAKmoM,EAAmB,GAAKvsL,GAGtC,IAAI0jB,EAAMgmK,EAAoBxrL,EAAIwrL,EAAoB9gM,EAAEkiM,GAEpDn6L,EAAQ,IAAI7C,MAgBhB47L,EAAoBzwG,EAAEv1D,GAfFnrB,IACnB,GAAGmxL,EAAoBzyL,EAAEq1L,EAAiBxB,KAEf,KAD1ByB,EAAqBD,EAAgBxB,MACRwB,EAAgBxB,QAAWnlM,GACrD4mM,GAAoB,CACtB,IAAIC,EAAYj0L,IAAyB,SAAfA,EAAMjQ,KAAkB,UAAYiQ,EAAMjQ,MAChEmkM,EAAUl0L,GAASA,EAAMumC,QAAUvmC,EAAMumC,OAAOl9B,IACpDjR,EAAMJ,QAAU,iBAAmBu6L,EAAU,cAAgB0B,EAAY,KAAOC,EAAU,IAC1F97L,EAAM7L,KAAO,iBACb6L,EAAMrI,KAAOkkM,EACb77L,EAAMxJ,QAAUslM,EAChBF,EAAmB,GAAG57L,EACvB,CACD,GAEwC,SAAWm6L,EAASA,EAE/D,CACD,EAWFpB,EAAoBK,EAAEhjB,EAAK+jB,GAA0C,IAA7BwB,EAAgBxB,GAGxD,IAAI4B,EAAuB,CAACC,EAA4BhmM,KACvD,IAGIgjM,EAAUmB,GAHTd,EAAU4C,EAAaC,GAAWlmM,EAGhBkL,EAAI,EAC3B,GAAGm4L,EAASvvH,MAAM91E,GAAgC,IAAxB2nM,EAAgB3nM,KAAa,CACtD,IAAIglM,KAAYiD,EACZlD,EAAoBzyL,EAAE21L,EAAajD,KACrCD,EAAoB7tL,EAAE8tL,GAAYiD,EAAYjD,IAGhD,GAAGkD,EAAS,IAAI55K,EAAS45K,EAAQnD,EAClC,CAEA,IADGiD,GAA4BA,EAA2BhmM,GACrDkL,EAAIm4L,EAASl4L,OAAQD,IACzBi5L,EAAUd,EAASn4L,GAChB63L,EAAoBzyL,EAAEq1L,EAAiBxB,IAAYwB,EAAgBxB,IACrEwB,EAAgBxB,GAAS,KAE1BwB,EAAgBxB,GAAW,EAE5B,OAAOpB,EAAoBK,EAAE92K,EAAO,EAGjC65K,EAAqB1sH,KAAuC,iCAAIA,KAAuC,kCAAK,GAChH0sH,EAAmB/6L,QAAQ26L,EAAqB1vL,KAAK,KAAM,IAC3D8vL,EAAmB1oM,KAAOsoM,EAAqB1vL,KAAK,KAAM8vL,EAAmB1oM,KAAK4Y,KAAK8vL,G,KClFvF,IAAIC,EAAsBrD,EAAoBK,OAAEpkM,EAAW,CAAC,MAAM,IAAO+jM,EAAoB,SAC7FqD,EAAsBrD,EAAoBK,EAAEgD,E","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/../../libs/common/src/models/view/view.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/policies/policies.module.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/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/utils/form-selection-list.ts","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/multi-select/multi-select.component.ts","webpack://@bitwarden/web-vault/./src/app/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/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/./src/app/billing/settings/billing-history.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/billing-history.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/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/organization-plans.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verify-bank.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/request/bit-pay-invoice.request.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/add-credit.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/billing/models/request/payment.request.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/adjust-payment.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/adjust-payment.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/payment-method.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/payment.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/payment.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/tax-info.component.ts","webpack://@bitwarden/web-vault/./src/app/components/environment-selector/environment-selector.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/injection-tokens.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization-domain/org-domain.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/enums/sso.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/response/api-key.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/auth/models/api/sso-config.api.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/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/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/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/encrypt.service.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/state-migration.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/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/platform/services/state-migration.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/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-web-authn.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/event.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/abstractions/devices/responses/device.response.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/devices/requests/trusted-device-keys.request.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/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/abstractions/sync/sync-notifier.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/sorted-ciphers-cache.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-move.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-restore.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-partial.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-share.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/services/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/admin-console/models/data/organization.data.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/vault/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/vault/services/password-reprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/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/vaultTimeout/vaultTimeoutSettings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout/vaultTimeout.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/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/services/sync/sync-notifier.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/platform/services/config/config.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/services/devices/devices-api.service.implementation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/device-crypto.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/device-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/vault/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/components/password-reprompt.component.html","webpack://@bitwarden/web-vault/./src/app/vault/core/password-reprompt.service.ts","webpack://@bitwarden/web-vault/./src/app/core/broadcaster-messaging.service.ts","webpack://@bitwarden/web-vault/./src/app/core/event.service.ts","webpack://@bitwarden/web-vault/../../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/state-migration.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/navbar.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.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/../../libs/common/src/models/request/storage.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/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/settings/update-license.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.ts","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/components/dynamic-avatar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/product-switcher/product-switcher.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf/change-kdf.module.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/shared/loose-components.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/toastr.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/credit-card-number.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/platform/pipes/fingerprint.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/jslib.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/async-actions.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge-list/badge-list.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/color-password/color-password.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-configurable-dialog/simple-configurable-dialog.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/simple-configurable-dialog/simple-configurable-dialog.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog.service.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/dialog.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/icon/icon.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/tabs/tabs.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/toggle-group/toggle-group.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/typography/typography.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/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/../../libs/angular/src/platform/pipes/ellipsis.pipe.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.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/attachments.component.html","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/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-restore-dialog/bulk-restore-dialog.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/bulk-action-dialogs/bulk-restore-dialog/bulk-restore-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/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/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/billing-history-view.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/billing-history-view.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/user-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/user-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.html","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/subscription.component.html","webpack://@bitwarden/web-vault/./src/app/billing/settings/subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/billing/settings/subscription-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.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/../../libs/common/src/auth/enums/auth-request-type.ts","webpack://@bitwarden/web-vault/./src/app/auth/lock.component.html","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/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/auth/settings/emergency-access/emergency-access-attachments.component.ts","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-status-type.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/../../libs/common/src/auth/models/request/emergency-access-update.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/components/register.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error-summary.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/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/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/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/guards/home.guard.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/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/../../libs/common/src/models/request/update-key.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/tools/send/models/request/send-with-id.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kdf.request.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf/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/select-copy.directive.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.html","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.html","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.ts","webpack://@bitwarden/web-vault/../../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/efflux-dates.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/tools/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/send/efflux-dates.component.html","webpack://@bitwarden/web-vault/./src/app/tools/send/efflux-dates.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/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/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.html","webpack://@bitwarden/web-vault/./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.html","webpack://@bitwarden/web-vault/./src/app/vault/individual-vault/folder-add-edit.component.ts","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/admin-console/organizations/manage/organization-manage.module.ts","webpack://@bitwarden/web-vault/./src/app/admin-console/organizations/users/organization-user.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/./src/app/app.module.ts","webpack://@bitwarden/web-vault/./src/main.ts","webpack://@bitwarden/web-vault/./src/utils/flags.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/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/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/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/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/dialog/simple-dialog-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/dialog/simple-dialog-close-type.enum.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/dialog/dialog.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/dialog/dialog.service.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/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/devices/devices-api.service.abstraction.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-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/vaultTimeout/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout/vaultTimeoutSettings.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/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-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.service.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/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/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/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/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/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/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/state-version.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/login-uri.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/login.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/secure-note.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipher.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipher-with-ids.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collection.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collection-with-id.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folder.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folder-with-id.export.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keys.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/list.response.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/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.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/password-reprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/abstractions/sync/sync.service.abstraction.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/enums/cipher-reprompt-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/enums/cipher-type.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/attachment.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/card.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/cipher.data.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/data/collection.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/field.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/folder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/identity.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/login-uri.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/login.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/password.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/domain/secure-note.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-bulk-delete.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-collections.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-create.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher-with-id.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/attachment.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/cipher.request.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/request/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/field.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/folder.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/identity.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/item.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/login-uri.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/login.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/password-history.view.ts","webpack://@bitwarden/web-vault/../../libs/common/src/vault/models/view/secure-note.view.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/bit-action.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/bit-submit.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/async-actions/form-button.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/avatar/avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge-list/badge-list.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/badge-list/badge-list.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumb.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumb.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumbs.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumbs.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/breadcrumbs/breadcrumbs.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/checkbox/checkbox.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/checkbox/checkbox.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/color-password/color-password.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/animations.ts","webpack://@bitwarden/web-vault/../../libs/components/src/dialog/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/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.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.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/radio-button/radio-button.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/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/typography/typography.directive.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/webpack/bootstrap","webpack://@bitwarden/web-vault/webpack/runtime/compat get default export","webpack://@bitwarden/web-vault/webpack/runtime/define property getters","webpack://@bitwarden/web-vault/webpack/runtime/ensure chunk","webpack://@bitwarden/web-vault/webpack/runtime/get javascript chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/get mini-css chunk filename","webpack://@bitwarden/web-vault/webpack/runtime/global","webpack://@bitwarden/web-vault/webpack/runtime/hasOwnProperty shorthand","webpack://@bitwarden/web-vault/webpack/runtime/make namespace object","webpack://@bitwarden/web-vault/webpack/runtime/node module decorator","webpack://@bitwarden/web-vault/webpack/runtime/publicPath","webpack://@bitwarden/web-vault/webpack/runtime/jsonp chunk loading","webpack://@bitwarden/web-vault/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"@bitwarden/web-vault:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\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","export class View {}\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 {{ \"email\" | i18n }}\n \n \n \n {{ \"clientOwnerEmail\" | i18n }}\n \n \n
\n
\n \n {{ \"accountOwnedBusiness\" | i18n }}\n
\n \n {{ \"businessName\" | i18n }}\n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"app-org-info\",\n templateUrl: \"organization-information.component.html\",\n})\nexport class OrganizationInformationComponent {\n @Input() nameOnly = false;\n @Input() createOrganization = true;\n @Input() isProvider = false;\n @Input() acceptingSponsorship = false;\n @Input() formGroup: UntypedFormGroup;\n @Output() changedBusinessOwned = new EventEmitter();\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule, SharedModule } from \"../../../shared\";\n\nimport { DisableSendPolicyComponent } from \"./disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"./master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"./password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"./personal-ownership.component\";\nimport { PoliciesComponent } from \"./policies.component\";\nimport { PolicyEditComponent } from \"./policy-edit.component\";\nimport { RequireSsoPolicyComponent } from \"./require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"./reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"./send-options.component\";\nimport { SingleOrgPolicyComponent } from \"./single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"./two-factor-authentication.component\";\n\n@NgModule({\n imports: [SharedModule, LooseComponentsModule],\n declarations: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n exports: [\n DisableSendPolicyComponent,\n MasterPasswordPolicyComponent,\n PasswordGeneratorPolicyComponent,\n PersonalOwnershipPolicyComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n SendOptionsPolicyComponent,\n SingleOrgPolicyComponent,\n TwoFactorAuthenticationPolicyComponent,\n PoliciesComponent,\n PolicyEditComponent,\n ],\n})\nexport class PoliciesModule {}\n","import { PolicyType } from \"../../enums\";\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 { 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 {{ \"resetPasswordPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"resetPasswordPolicyAutoEnroll\" | i18n }}

\n

{{ \"resetPasswordPolicyAutoEnrollDescription\" | i18n }}

\n \n {{ \"resetPasswordPolicyAutoEnrollWarning\" | i18n }}\n \n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { OrganizationService } from \"@bitwarden/common/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 = \"accountRecoveryPolicyDescription\";\n type = PolicyType.ResetPassword;\n component = ResetPasswordPolicyComponent;\n\n display(organization: Organization) {\n return organization.useResetPassword;\n }\n}\n\n@Component({\n selector: \"policy-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n autoEnrollEnabled: false,\n });\n\n defaultTypes: { name: string; value: string }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private organizationService: OrganizationService\n ) {\n super();\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","import { Component } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\n\nimport { PolicyType } from \"@bitwarden/common/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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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 { 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 { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\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 get localizationKey(): string {\n return this.localizationKeyOptions.getKey(this.count);\n }\n private localizationKeyOptions: CountBasedLocalizationKey;\n constructor(count: number, localizationKeyOptions: CountBasedLocalizationKey) {\n this.count = count;\n this.localizationKeyOptions = localizationKeyOptions;\n }\n}\n\nclass OrganizationContentSummary {\n totalItemCount = 0;\n itemCountByType: OrganizationContentSummaryItem[] = [];\n}\n\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 logService: LogService,\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 try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.formGroup.value.secret)\n .then((request) => this.organizationApiService.delete(this.organization.id, request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationDeleted\"),\n this.i18nService.t(\"organizationDeletedDesc\")\n );\n this.dialogRef.close(DeleteOrganizationDialogResult.Deleted);\n } catch (e) {\n this.logService.error(e);\n }\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: DialogServiceAbstraction,\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 { 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","\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 === \"Enter\" && !hasModifierKey(event)) {\n this.select.close();\n event.preventDefault();\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 { 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 { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared\";\n\nimport { RegisterFormComponent } from \"./register-form.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [RegisterFormComponent],\n exports: [RegisterFormComponent],\n})\nexport class RegisterFormModule {}\n","import { 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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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: SimpleDialogType.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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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/Vaultwarden:\" +\n Utils.encodeRFC3986URIComponent(email) +\n \"?secret=\" +\n encodeURIComponent(this.key) +\n \"&issuer=Vaultwarden\",\n size: 160,\n });\n }, 100);\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class UpdateTwoFactorEmailRequest extends SecretVerificationRequest {\n token: string;\n email: string;\n}\n","
\n
\n
\n
\n

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

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

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

\n
\n \n \n
\n
\n \n \n {{ \"sendEmail\" | i18n }}\n \n \n {{ \"verificationCodeEmailSent\" | i18n : sentEmail }}\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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: SimpleDialogType.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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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 {{ \"twoStepLoginOrganizationDescStart\" | i18n }}\n {{ \"twoStepLoginPolicy\" | i18n }}.\n
\n {{ \"twoStepLoginOrganizationDuoDesc\" | i18n }}\n

\n

{{ \"twoStepLoginOrganizationSsoDesc\" | i18n }}

\n
\n\n

{{ \"twoStepLoginRecoveryWarning\" | i18n }}

\n \n
\n

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

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

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

    \n {{ p.description }}\n
    \n
    \n \n {{ \"manage\" | i18n }}\n \n
    \n
  • \n
\n\n\n\n\n\n\n\n","import { Component, 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 { TwoFactorProviderType } from \"@bitwarden/common/auth/enums/two-factor-provider-type\";\nimport { TwoFactorProviders } from \"@bitwarden/common/auth/services/two-factor.service\";\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 providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n modal: ModalRef;\n formPromise: Promise;\n\n tabbedHeader = true;\n\n private destroy$ = new Subject();\n private twoFactorAuthPolicyAppliesToActiveUser: boolean;\n\n constructor(\n protected apiService: ApiService,\n protected modalService: ModalService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n\n for (const key in TwoFactorProviders) {\n // eslint-disable-next-line\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.TwoFactorAuthentication)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.twoFactorAuthPolicyAppliesToActiveUser = policyAppliesToActiveUser;\n });\n\n await this.load();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach((p) => {\n this.providers.forEach((p2) => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator: {\n const authComp = await this.openModal(\n this.authenticatorModalRef,\n TwoFactorAuthenticatorComponent\n );\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n authComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n });\n break;\n }\n case TwoFactorProviderType.Yubikey: {\n const yubiComp = await this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n yubiComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n });\n break;\n }\n case TwoFactorProviderType.Duo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Duo);\n });\n break;\n }\n case TwoFactorProviderType.Email: {\n const emailComp = await this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n emailComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Email);\n });\n break;\n }\n case TwoFactorProviderType.WebAuthn: {\n const webAuthnComp = await this.openModal(\n this.webAuthnModalRef,\n TwoFactorWebAuthnComponent\n );\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n });\n break;\n }\n default:\n break;\n }\n }\n\n recoveryCode() {\n this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorProviders();\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type === TwoFactorProviderType.OrganizationDuo;\n }\n\n protected async openModal(ref: ViewContainerRef, type: Type): Promise {\n const [modal, childComponent] = await this.modalService.openViewRef(type, ref);\n this.modal = modal;\n\n return childComponent;\n }\n\n protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n if (!enabled && this.modal != null) {\n this.modal.close();\n }\n this.providers.forEach((p) => {\n if (p.type === type) {\n p.enabled = enabled;\n }\n });\n this.evaluatePolicies();\n }\n\n private async evaluatePolicies() {\n if (this.organizationId == null && this.providers.filter((p) => p.enabled).length === 1) {\n this.showPolicyWarning = this.twoFactorAuthPolicyAppliesToActiveUser;\n } else {\n this.showPolicyWarning = false;\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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

{{ \"twoStepLoginAuthDesc\" | i18n }}

\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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction,\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 { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { UserVerificationService } from \"@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction\";\nimport { VerificationType } from \"@bitwarden/common/auth/enums/verification-type\";\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 using Key Connector, prompts for an OTP via email.\n * This is exposed to the parent component via the ControlValueAccessor interface (e.g. bind it to a FormControl).\n * Use UserVerificationService to verify the user's input.\n */\n@Directive({\n selector: \"app-user-verification\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class UserVerificationComponent implements ControlValueAccessor, OnInit, 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 usesKeyConnector = 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.usesKeyConnector\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 keyConnectorService: KeyConnectorService,\n private userVerificationService: UserVerificationService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\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.usesKeyConnector) {\n this.disableRequestOTP = true;\n try {\n await this.userVerificationService.requestOTP();\n this.sentCode = true;\n } finally {\n this.disableRequestOTP = false;\n }\n }\n };\n\n writeValue(obj: any): void {\n this.secret.setValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n // Not implemented\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disableRequestOTP = isDisabled;\n if (isDisabled) {\n this.secret.disable();\n } else {\n this.secret.enable();\n }\n }\n\n 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.usesKeyConnector ? VerificationType.OTP : VerificationType.MasterPassword,\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","

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

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

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n\n \n \n \n \n \n \n {{ t.amount | currency : \"$\" }}\n \n \n \n
{{ t.createdDate | date : \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n* {{ \"chargesStatement\" | i18n : \"BITWARDEN\" }}\n","import { Component, Input } from \"@angular/core\";\n\nimport { PaymentMethodType, TransactionType } from \"@bitwarden/common/billing/enums\";\nimport { BillingHistoryResponse } from \"@bitwarden/common/billing/models/response/billing-history.response\";\n\n@Component({\n selector: \"app-billing-history\",\n templateUrl: \"billing-history.component.html\",\n})\nexport class BillingHistoryComponent {\n @Input()\n billing: BillingHistoryResponse;\n\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n\n paymentMethodClasses(type: PaymentMethodType) {\n switch (type) {\n case PaymentMethodType.Card:\n return [\"bwi-credit-card\"];\n case PaymentMethodType.BankAccount:\n case PaymentMethodType.WireTransfer:\n return [\"bwi-bank\"];\n case PaymentMethodType.BitPay:\n return [\"bwi-bitcoin text-warning\"];\n case PaymentMethodType.PayPal:\n return [\"bwi-paypal text-primary\"];\n default:\n return [];\n }\n }\n}\n","import { PaymentMethodType, 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","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","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 : selectedPlan.baseSeats : (seatPriceMonthly(selectedPlan) | currency : \"$\")\n }}\n
\n
\n
\n
\n \n \n {{\n \"additionalStorageIntervalDesc\"\n | i18n\n : \"1 GB\"\n : (additionalStoragePriceMonthly(selectedPlan) | currency : \"$\")\n : (\"month\" | i18n)\n }}\n
\n
\n
\n
\n
\n \n \n
\n {{\n \"premiumAccessDesc\" | i18n : (3.33 | currency : \"$\") : (\"month\" | i18n)\n }}\n
\n
\n

{{ \"summary\" | i18n }}

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

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

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

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

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

{{ \"addCredit\" | i18n }}

\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
$USD
\n \n
\n
\n
\n {{ \"creditDelayed\" | i18n }}\n
\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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 this.configService.getCloudRegion();\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 \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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport { OrganizationResponse } from \"@bitwarden/common/admin-console/models/response/organization.response\";\nimport { PaymentMethodType } from \"@bitwarden/common/billing/enums\";\nimport { BillingPaymentResponse } from \"@bitwarden/common/billing/models/response/billing-payment.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\";\n\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-payment-method\",\n templateUrl: \"payment-method.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class PaymentMethodComponent implements OnInit {\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingPaymentResponse;\n org: OrganizationResponse;\n paymentMethodType = PaymentMethodType;\n organizationId: string;\n\n verifyBankPromise: Promise;\n taxFormPromise: Promise;\n\n verifyBankForm = this.formBuilder.group({\n amount1: new FormControl(null, [\n Validators.required,\n Validators.max(99),\n Validators.min(0),\n ]),\n amount2: new FormControl(null, [\n Validators.required,\n Validators.max(99),\n Validators.min(0),\n ]),\n });\n\n constructor(\n protected apiService: ApiService,\n protected organizationApiService: OrganizationApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router,\n private logService: LogService,\n private route: ActivatedRoute,\n private formBuilder: FormBuilder,\n private dialogService: DialogServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.params.subscribe(async (params) => {\n if (params.organizationId) {\n this.organizationId = params.organizationId;\n } else if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n return;\n }\n\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n\n if (this.forOrganization) {\n const billingPromise = this.organizationApiService.getBilling(this.organizationId);\n const orgPromise = this.organizationApiService.get(this.organizationId);\n\n [this.billing, this.org] = await Promise.all([billingPromise, orgPromise]);\n } else {\n this.billing = await this.apiService.getUserBillingPayment();\n }\n\n this.loading = false;\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.dialogService.openSimpleDialog({\n title: { key: \"addCredit\" },\n content: { key: \"cannotPerformInAppPurchase\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: SimpleDialogType.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: SimpleDialogType.WARNING,\n });\n\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n async verifyBank() {\n if (this.loading || !this.forOrganization) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyBankForm.value.amount1;\n request.amount2 = this.verifyBankForm.value.amount2;\n this.verifyBankPromise = this.organizationApiService.verifyBank(this.organizationId, request);\n await this.verifyBankPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verifiedBankAccount\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"taxInfoUpdated\"));\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get forOrganization() {\n return this.organizationId != null;\n }\n\n get headerClass() {\n return this.forOrganization ? [\"page-header\"] : [\"tabbed-header\"];\n }\n\n get paymentSourceClasses() {\n if (this.paymentSource == null) {\n return [];\n }\n switch (this.paymentSource.type) {\n case PaymentMethodType.Card:\n return [\"bwi-credit-card\"];\n case PaymentMethodType.BankAccount:\n return [\"bwi-bank\"];\n case PaymentMethodType.Check:\n return [\"bwi-money\"];\n case PaymentMethodType.AppleInApp:\n return [\"bwi-apple text-muted\"];\n case PaymentMethodType.GoogleInApp:\n return [\"bwi-google text-muted\"];\n case PaymentMethodType.PayPal:\n return [\"bwi-paypal text-primary\"];\n default:\n return [];\n }\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n\n \n {{ \"verifyBankAccountInitialDesc\" | i18n }} {{ \"verifyBankAccountFailureWarning\" | i18n }}\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n\n
\n
\n {{ \"paypalClickSubmit\" | i18n }}\n
\n
\n\n \n {{ \"makeSureEnoughCredit\" | i18n }}\n \n\n","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { PaymentMethodType } from \"@bitwarden/common/billing/enums\";\nimport { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n})\nexport class PaymentComponent implements OnInit, OnDestroy {\n @Input() showMethods = true;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.Card;\n @Input() hideBank = false;\n @Input() hidePaypal = false;\n @Input() hideCredit = false;\n @Input() trialFlow = false;\n\n private destroy$ = new Subject();\n\n bank: any = {\n routing_number: null,\n account_number: null,\n account_holder_name: null,\n account_holder_type: \"\",\n currency: \"USD\",\n country: \"US\",\n };\n\n paymentMethodType = PaymentMethodType;\n\n private btScript: HTMLScriptElement;\n private btInstance: any = null;\n private stripeScript: HTMLScriptElement;\n private stripe: any = null;\n private stripeElements: any = null;\n private stripeCardNumberElement: any = null;\n private stripeCardExpiryElement: any = null;\n private stripeCardCvcElement: any = null;\n private StripeElementStyle: any;\n private StripeElementClasses: any;\n\n constructor(\n private apiService: ApiService,\n private logService: LogService,\n private themingService: AbstractThemingService\n ) {\n this.stripeScript = window.document.createElement(\"script\");\n this.stripeScript.src = \"https://js.stripe.com/v3/?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
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\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\ntype TaxInfoView = Omit & {\n includeTaxId: boolean;\n [key: string]: unknown;\n};\n\n@Component({\n selector: \"app-tax-info\",\n templateUrl: \"tax-info.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TaxInfoComponent {\n @Input() trialFlow = false;\n @Output() onCountryChanged = new EventEmitter();\n\n loading = true;\n organizationId: string;\n taxInfo: TaxInfoView = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n taxRates: TaxRateResponse[];\n\n private pristine: TaxInfoView = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n if (this.organizationId) {\n try {\n const taxInfo = await this.organizationApiService.getTaxInfo(this.organizationId);\n if (taxInfo) {\n this.taxInfo.taxId = taxInfo.taxId;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.line1 = taxInfo.line1;\n this.taxInfo.line2 = taxInfo.line2;\n this.taxInfo.city = taxInfo.city;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n this.taxInfo.includeTaxId =\n this.taxInfo.country !== \"US\" &&\n (!!taxInfo.taxId ||\n !!taxInfo.line1 ||\n !!taxInfo.line2 ||\n !!taxInfo.city ||\n !!taxInfo.state);\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n try {\n const taxInfo = await this.apiService.getTaxInfo();\n if (taxInfo) {\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n this.pristine = Object.assign({}, this.taxInfo);\n // If not the default (US) then trigger onCountryChanged\n if (this.taxInfo.country !== \"US\") {\n this.onCountryChanged.emit();\n }\n });\n\n try {\n const taxRates = await this.apiService.getTaxRates();\n if (taxRates) {\n this.taxRates = taxRates.data;\n }\n } catch (e) {\n this.logService.error(e);\n } finally {\n this.loading = false;\n }\n }\n\n get taxRate() {\n if (this.taxRates != null) {\n const localTaxRate = this.taxRates.find(\n (x) => x.country === this.taxInfo.country && x.postalCode === this.taxInfo.postalCode\n );\n return localTaxRate?.rate ?? null;\n }\n }\n\n getTaxInfoRequest(): TaxInfoUpdateRequest {\n if (this.organizationId) {\n const request = new OrganizationTaxInfoUpdateRequest();\n request.taxId = this.taxInfo.taxId;\n request.state = this.taxInfo.state;\n request.line1 = this.taxInfo.line1;\n request.line2 = this.taxInfo.line2;\n request.city = this.taxInfo.city;\n request.state = this.taxInfo.state;\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n } else {\n const request = new TaxInfoUpdateRequest();\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n }\n }\n\n submitTaxInfo(): Promise {\n if (!this.hasChanged()) {\n return new Promise((resolve) => {\n resolve();\n });\n }\n const request = this.getTaxInfoRequest();\n return this.organizationId\n ? this.organizationApiService.updateTaxInfo(\n this.organizationId,\n request as OrganizationTaxInfoUpdateRequest\n )\n : this.apiService.putTaxInfo(request);\n }\n\n changeCountry() {\n if (this.taxInfo.country === \"US\") {\n this.taxInfo.includeTaxId = false;\n this.taxInfo.taxId = null;\n this.taxInfo.line1 = null;\n this.taxInfo.line2 = null;\n this.taxInfo.city = null;\n this.taxInfo.state = null;\n }\n this.onCountryChanged.emit();\n }\n\n private hasChanged(): boolean {\n for (const key in this.taxInfo) {\n // eslint-disable-next-line\n if (this.pristine.hasOwnProperty(key) && this.pristine[key] !== this.taxInfo[key]) {\n return true;\n }\n }\n return false;\n }\n}\n","import { 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 { 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<(expired: boolean, userId?: string) => void>(\n \"LOGOUT_CALLBACK\"\n);\nexport const LOCKED_CALLBACK = new InjectionToken<() => void>(\"LOCKED_CALLBACK\");\nexport const CLIENT_TYPE = new InjectionToken(\"CLIENT_TYPE\");\nexport const LOCALES_DIRECTORY = new InjectionToken(\"LOCALES_DIRECTORY\");\nexport const SYSTEM_LANGUAGE = new InjectionToken(\"SYSTEM_LANGUAGE\");\nexport const LOG_MAC_FAILURES = new InjectionToken(\"LOG_MAC_FAILURES\");\n","import { 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","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","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 {\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 { 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 baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.product = this.getResponseProperty(\"Product\");\n this.name = this.getResponseProperty(\"Name\");\n this.isAnnual = this.getResponseProperty(\"IsAnnual\");\n this.nameLocalizationKey = this.getResponseProperty(\"NameLocalizationKey\");\n this.descriptionLocalizationKey = this.getResponseProperty(\"DescriptionLocalizationKey\");\n this.canBeUsedByBusiness = this.getResponseProperty(\"CanBeUsedByBusiness\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxUsers = this.getResponseProperty(\"MaxUsers\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n this.trialPeriodDays = this.getResponseProperty(\"TrialPeriodDays\");\n this.hasSelfHost = this.getResponseProperty(\"HasSelfHost\");\n this.hasPolicies = this.getResponseProperty(\"HasPolicies\");\n this.hasGroups = this.getResponseProperty(\"HasGroups\");\n this.hasDirectory = this.getResponseProperty(\"HasDirectory\");\n this.hasEvents = this.getResponseProperty(\"HasEvents\");\n this.hasTotp = this.getResponseProperty(\"HasTotp\");\n this.has2fa = this.getResponseProperty(\"Has2fa\");\n this.hasApi = this.getResponseProperty(\"HasApi\");\n this.hasSso = this.getResponseProperty(\"HasSso\");\n this.hasResetPassword = this.getResponseProperty(\"HasResetPassword\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.upgradeSortOrder = this.getResponseProperty(\"UpgradeSortOrder\");\n this.displaySortOrder = this.getResponseProperty(\"SortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n this.stripePlanId = this.getResponseProperty(\"StripePlanId\");\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.stripeStoragePlanId = this.getResponseProperty(\"StripeStoragePlanId\");\n this.stripePremiumAccessPlanId = this.getResponseProperty(\"StripePremiumAccessPlanId\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n }\n}\n","import { 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\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 const plan = this.getResponseProperty(\"Plan\");\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty(\"PlanType\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxAutoscaleSeats = this.getResponseProperty(\"MaxAutoscaleSeats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.useSecretsManager = this.getResponseProperty(\"UseSecretsManager\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\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\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.quantity = this.getResponseProperty(\"Quantity\");\n this.interval = this.getResponseProperty(\"Interval\");\n this.sponsoredSubscriptionItem = this.getResponseProperty(\"SponsoredSubscriptionItem\");\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount?: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n","import { OrganizationResponse } from \"../../../admin-console/models/response/organization.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 expiration: string;\n expirationWithoutGracePeriod: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n const subscription = this.getResponseProperty(\"Subscription\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.expirationWithoutGracePeriod = this.getResponseProperty(\"ExpirationWithoutGracePeriod\");\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 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.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","export abstract class AccountService {}\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","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 { EnvironmentUrls } from \"../../../auth/models/domain/environment-urls\";\nimport { ForceResetPasswordReason } from \"../../../auth/models/domain/force-reset-password-reason\";\nimport { KdfType, UriMatchType } from \"../../../enums\";\nimport { EventData } from \"../../../models/data/event.data\";\nimport { GeneratedPasswordHistory } from \"../../../tools/generator/password\";\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 { EncString } from \"./enc-string\";\nimport { DeviceKey, SymmetricCryptoKey } from \"./symmetric-crypto-key\";\n\nexport class EncryptionPair {\n encrypted?: TEncrypted;\n decrypted?: TDecrypted;\n\n toJSON() {\n return {\n encrypted: this.encrypted,\n decrypted:\n this.decrypted instanceof ArrayBuffer\n ? Utils.fromBufferToByteString(this.decrypted)\n : this.decrypted,\n };\n }\n\n static fromJSON(\n obj: { encrypted?: Jsonify; decrypted?: string | Jsonify },\n decryptedFromJson?: (decObj: Jsonify | string) => TDecrypted,\n encryptedFromJson?: (encObj: Jsonify) => TEncrypted\n ) {\n if (obj == null) {\n return null;\n }\n\n const pair = new EncryptionPair();\n if (obj?.encrypted != null) {\n pair.encrypted = encryptedFromJson\n ? encryptedFromJson(obj.encrypted)\n : (obj.encrypted as TEncrypted);\n }\n if (obj?.decrypted != null) {\n pair.decrypted = decryptedFromJson\n ? decryptedFromJson(obj.decrypted)\n : (obj.decrypted as TDecrypted);\n }\n return pair;\n }\n}\n\nexport class DataEncryptionPair {\n encrypted?: { [id: string]: TEncrypted };\n decrypted?: TDecrypted[];\n}\n\n// This is a temporary structure to handle migrated `DataEncryptionPair` to\n// avoid needing a data migration at this stage. It should be replaced with\n// proper data migrations when `DataEncryptionPair` is deprecated.\nexport class TemporaryDataEncryption {\n encrypted?: { [id: string]: TEncrypted };\n}\n\nexport class AccountData {\n ciphers?: DataEncryptionPair = new DataEncryptionPair<\n CipherData,\n CipherView\n >();\n folders? = new TemporaryDataEncryption();\n localData?: any;\n sends?: DataEncryptionPair = new DataEncryptionPair();\n collections?: DataEncryptionPair = new DataEncryptionPair<\n CollectionData,\n CollectionView\n >();\n policies?: DataEncryptionPair = new DataEncryptionPair();\n passwordGenerationHistory?: EncryptionPair<\n GeneratedPasswordHistory[],\n GeneratedPasswordHistory[]\n > = new EncryptionPair();\n addEditCipherInfo?: any;\n eventCollection?: EventData[];\n organizations?: { [id: string]: OrganizationData };\n providers?: { [id: string]: ProviderData };\n}\n\nexport class AccountKeys {\n cryptoMasterKey?: SymmetricCryptoKey;\n cryptoMasterKeyAuto?: string;\n cryptoMasterKeyB64?: string;\n cryptoMasterKeyBiometric?: string;\n cryptoSymmetricKey?: EncryptionPair = new EncryptionPair<\n string,\n SymmetricCryptoKey\n >();\n deviceKey?: DeviceKey;\n organizationKeys?: EncryptionPair<\n { [orgId: string]: EncryptedOrganizationKeyData },\n Record\n > = new EncryptionPair<\n { [orgId: string]: EncryptedOrganizationKeyData },\n Record\n >();\n providerKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Record\n >();\n privateKey?: EncryptionPair = new EncryptionPair();\n publicKey?: ArrayBuffer;\n apiKeyClientSecret?: string;\n\n toJSON() {\n return Utils.merge(this, {\n publicKey: Utils.fromBufferToByteString(this.publicKey),\n });\n }\n\n static fromJSON(obj: DeepJsonify): AccountKeys {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountKeys(), {\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(\n obj?.privateKey,\n (decObj: string) => Utils.fromByteStringToArray(decObj).buffer\n ),\n publicKey: Utils.fromByteStringToArray(obj?.publicKey)?.buffer,\n });\n }\n\n static initRecordEncryptionPairsFromJSON(obj: any) {\n return EncryptionPair.fromJSON(obj, (decObj: any) => {\n if (obj == null) {\n return null;\n }\n\n const record: Record = {};\n for (const id in decObj) {\n record[id] = SymmetricCryptoKey.fromJSON(decObj[id]);\n }\n return record;\n });\n }\n}\n\nexport class AccountProfile {\n apiKeyClientId?: string;\n authenticationStatus?: AuthenticationStatus;\n convertAccountToKeyConnector?: boolean;\n name?: string;\n email?: string;\n emailVerified?: boolean;\n entityId?: string;\n entityType?: string;\n everBeenUnlocked?: boolean;\n 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?: any;\n usernameGenerationOptions?: any;\n generatorOptions?: any;\n pinProtected?: EncryptionPair = new EncryptionPair();\n protectedPin?: string;\n settings?: AccountSettingsSettings; // TODO: Merge whatever is going on here into the AccountSettings model properly\n vaultTimeout?: number;\n vaultTimeoutAction?: string = \"lock\";\n serverConfig?: ServerConfigData;\n approveLoginRequests?: boolean;\n avatarColor?: string;\n activateAutoFillOnPageLoadFromPolicy?: boolean;\n region?: string;\n smOnboardingTasks?: Record>;\n\n static fromJSON(obj: Jsonify): AccountSettings {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountSettings(), obj, {\n environmentUrls: EnvironmentUrls.fromJSON(obj?.environmentUrls),\n pinProtected: EncryptionPair.fromJSON(\n obj?.pinProtected,\n EncString.fromJSON\n ),\n serverConfig: ServerConfigData.fromJSON(obj?.serverConfig),\n });\n }\n}\n\nexport type AccountSettingsSettings = {\n equivalentDomains?: string[][];\n};\n\nexport class AccountTokens {\n accessToken?: string;\n refreshToken?: string;\n securityStamp?: string;\n\n static fromJSON(obj: Jsonify): AccountTokens {\n if (obj == null) {\n return null;\n }\n\n return Object.assign(new AccountTokens(), obj);\n }\n}\n\nexport class Account {\n data?: AccountData = new AccountData();\n keys?: AccountKeys = new AccountKeys();\n profile?: AccountProfile = new AccountProfile();\n settings?: AccountSettings = new AccountSettings();\n tokens?: AccountTokens = new AccountTokens();\n\n constructor(init: Partial) {\n Object.assign(this, {\n data: {\n ...new AccountData(),\n ...init?.data,\n },\n keys: {\n ...new AccountKeys(),\n ...init?.keys,\n },\n profile: {\n ...new AccountProfile(),\n ...init?.profile,\n },\n settings: {\n ...new AccountSettings(),\n ...init?.settings,\n },\n tokens: {\n ...new AccountTokens(),\n ...init?.tokens,\n },\n });\n }\n\n static fromJSON(json: Jsonify): Account {\n if (json == null) {\n return null;\n }\n\n return Object.assign(new Account({}), json, {\n keys: AccountKeys.fromJSON(json?.keys),\n profile: AccountProfile.fromJSON(json?.profile),\n settings: AccountSettings.fromJSON(json?.settings),\n tokens: AccountTokens.fromJSON(json?.tokens),\n });\n }\n}\n","import { 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 resetMasterPassword = false;\n forcePasswordReset: ForceResetPasswordReason = ForceResetPasswordReason.None;\n twoFactorProviders: Map = null;\n ssoEmail2FaSessionToken?: string;\n email: string;\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 { KdfType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\n\nimport { MasterPasswordPolicyResponse } from \"./master-password-policy.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 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}\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 { 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 { Account, AccountProfile, AccountTokens } 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 // The user key comes from different sources depending on the login strategy\n protected abstract setUserKey(response: IdentityTokenResponse): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n 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 await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId: accountInformation.sub,\n name: accountInformation.name,\n email: accountInformation.email,\n hasPremiumPersonally: accountInformation.premium,\n kdfIterations: tokenResponse.kdfIterations,\n kdfMemory: tokenResponse.kdfMemory,\n kdfParallelism: tokenResponse.kdfParallelism,\n kdfType: tokenResponse.kdf,\n },\n },\n tokens: {\n ...new AccountTokens(),\n ...{\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n },\n },\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n result.resetMasterPassword = response.resetMasterPassword;\n\n if (response.forcePasswordReset) {\n result.forcePasswordReset = ForceResetPasswordReason.AdminForcePasswordReset;\n }\n\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n await this.setUserKey(response);\n\n // Must come after the user Key is set, otherwise createKeyPairForOldAccount will fail\n const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n this.messagingService.send(\"loggedIn\");\n\n return result;\n }\n\n private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise {\n const result = new AuthResult();\n result.twoFactorProviders = response.twoFactorProviders2;\n\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 private async createKeyPairForOldAccount() {\n try {\n const [publicKey, privateKey] = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(publicKey, privateKey.encryptedString));\n return privateKey.encryptedString;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { 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 { SymmetricCryptoKey } 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 localHashedPassword: string;\n private key: SymmetricCryptoKey;\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 async setUserKey() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n 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 async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.key = await this.authService.makePreloginKey(masterPassword, email);\n\n // Hash the password early (before authentication) so we don't persist it in memory in plaintext\n this.localHashedPassword = await this.cryptoService.hashPassword(\n masterPassword,\n this.key,\n HashPurpose.LocalAuthorization\n );\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n hashedPassword,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n const [authResult, identityResponse] = await this.startLogIn();\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 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 { 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 { PasswordlessLogInCredentials } from \"../models/domain/log-in-credentials\";\nimport { PasswordTokenRequest } from \"../models/request/identity-token/password-token.request\";\nimport { TokenTwoFactorRequest } from \"../models/request/identity-token/token-two-factor.request\";\n\nimport { LogInStrategy } from \"./login.strategy\";\n\nexport class PasswordlessLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get accessCode() {\n return this.passwordlessCredentials.accessCode;\n }\n\n get authRequestId() {\n return this.passwordlessCredentials.authRequestId;\n }\n\n tokenRequest: PasswordTokenRequest;\n private passwordlessCredentials: PasswordlessLogInCredentials;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async setUserKey() {\n await this.cryptoService.setKey(this.passwordlessCredentials.decKey);\n await this.cryptoService.setKeyHash(this.passwordlessCredentials.localPasswordHash);\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordlessLogInCredentials) {\n this.passwordlessCredentials = credentials;\n\n this.tokenRequest = new PasswordTokenRequest(\n credentials.email,\n credentials.accessCode,\n null,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n this.tokenRequest.setPasswordlessAccessCode(credentials.authRequestId);\n const [authResult] = await this.startLogIn();\n return authResult;\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 { 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 { KeyConnectorService } from \"../abstractions/key-connector.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/two-factor.service\";\nimport { SsoLogInCredentials } from \"../models/domain/log-in-credentials\";\nimport { SsoTokenRequest } from \"../models/request/identity-token/sso-token.request\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nimport { LogInStrategy } from \"./login.strategy\";\n\nexport class SsoLogInStrategy extends LogInStrategy {\n tokenRequest: SsoTokenRequest;\n orgId: string;\n\n // 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 ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async setUserKey(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n const [ssoAuthResult] = await this.startLogIn();\n\n this.email = ssoAuthResult.email;\n this.ssoEmail2FaSessionToken = ssoAuthResult.ssoEmail2FaSessionToken;\n\n return ssoAuthResult;\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 async setUserKey(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: UserApiLogInCredentials) {\n this.tokenRequest = new UserApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n const [authResult] = await this.startLogIn();\n return authResult;\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","export class PasswordlessAuthRequest {\n constructor(\n readonly key: string,\n readonly masterPasswordHash: string,\n readonly deviceIdentifier: string,\n readonly requestApproved: boolean\n ) {}\n}\n","export class 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 { 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 | ArrayBuffer, key: SymmetricCryptoKey): Promise;\n abstract encryptToBytes: (\n plainValue: ArrayBuffer,\n key?: SymmetricCryptoKey\n ) => Promise;\n abstract decryptToUtf8: (encString: EncString, key: SymmetricCryptoKey) => Promise;\n abstract decryptToBytes: (encThing: 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 { 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","export abstract class StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { MemoryStorageOptions, StorageOptions } from \"../models/domain/storage-options\";\n\nexport abstract class AbstractStorageService {\n abstract get(key: string, options?: StorageOptions): Promise;\n abstract has(key: string, options?: StorageOptions): Promise;\n abstract save(key: string, obj: T, options?: StorageOptions): Promise;\n abstract remove(key: string, options?: StorageOptions): Promise;\n}\n\nexport abstract class AbstractMemoryStorageService extends AbstractStorageService {\n // Used to identify the service in the session sync decorator framework\n static readonly TYPE = \"MemoryStorageService\";\n readonly type = AbstractMemoryStorageService.TYPE;\n\n abstract get(key: string, options?: MemoryStorageOptions): Promise;\n abstract getBypassCache(key: string, options?: MemoryStorageOptions): Promise;\n}\n","import { 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 { StateVersion, 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 stateVersion: StateVersion = StateVersion.One;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n enableTray?: boolean;\n enableMinimizeToTray?: boolean;\n enableCloseToTray?: boolean;\n enableStartToTray?: boolean;\n openAtLogin?: boolean;\n alwaysShowDock?: boolean;\n enableBrowserIntegration?: boolean;\n enableBrowserIntegrationFingerprint?: boolean;\n enableDuckDuckGoBrowserIntegration?: boolean;\n 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 { 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 { SymmetricCryptoKey } 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 setKey(key: SymmetricCryptoKey, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(key, { userId: userId });\n await this.storeKey(key, userId);\n }\n\n async setKeyHash(keyHash: string): Promise {\n await this.stateService.setKeyHash(keyHash);\n }\n\n async setEncKey(encKey: string): Promise {\n if (encKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedCryptoSymmetricKey(null);\n await this.stateService.setEncryptedCryptoSymmetricKey(encKey);\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedPrivateKey(null);\n await this.stateService.setEncryptedPrivateKey(encPrivateKey);\n }\n\n async setOrgKeys(\n orgs: ProfileOrganizationResponse[] = [],\n providerOrgs: ProfileProviderOrganizationResponse[] = []\n ): Promise {\n const encOrgKeyData: { [orgId: string]: EncryptedOrganizationKeyData } = {};\n\n orgs.forEach((org) => {\n encOrgKeyData[org.id] = {\n type: \"organization\",\n key: org.key,\n };\n });\n\n providerOrgs.forEach((org) => {\n encOrgKeyData[org.id] = {\n type: \"provider\",\n providerId: org.providerId,\n key: org.key,\n };\n });\n\n await this.stateService.setDecryptedOrganizationKeys(null);\n return await this.stateService.setEncryptedOrganizationKeys(encOrgKeyData);\n }\n\n async setProviderKeys(providers: ProfileProviderResponse[]): Promise {\n const providerKeys: any = {};\n providers.forEach((provider) => {\n providerKeys[provider.id] = provider.key;\n });\n\n await this.stateService.setDecryptedProviderKeys(null);\n return await this.stateService.setEncryptedProviderKeys(providerKeys);\n }\n\n async getKey(keySuffix?: KeySuffixOptions, userId?: string): Promise {\n const inMemoryKey = await this.stateService.getCryptoMasterKey({ userId: userId });\n\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n keySuffix ||= KeySuffixOptions.Auto;\n const symmetricKey = await this.getKeyFromStorage(keySuffix, userId);\n\n if (symmetricKey != null) {\n // TODO: Refactor here so get key doesn't also set key\n this.setKey(symmetricKey, userId);\n }\n\n return symmetricKey;\n }\n\n async getKeyFromStorage(\n keySuffix: KeySuffixOptions,\n userId?: string\n ): Promise {\n const key = await this.retrieveKeyFromStorage(keySuffix, userId);\n if (key != null) {\n const symmetricKey = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n\n if (!(await this.validateKey(symmetricKey))) {\n this.logService.warning(\"Wrong key, throwing away stored key\");\n await this.clearSecretKeyStore(userId);\n return null;\n }\n\n return symmetricKey;\n }\n return null;\n }\n\n async getKeyHash(): Promise {\n return await this.stateService.getKeyHash();\n }\n\n async compareAndUpdateKeyHash(masterPassword: string, key: SymmetricCryptoKey): Promise {\n const storedKeyHash = await this.getKeyHash();\n if (masterPassword != null && storedKeyHash != null) {\n const localKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n if (localKeyHash != null && storedKeyHash === localKeyHash) {\n return true;\n }\n\n // TODO: remove serverKeyHash check in 1-2 releases after everyone's keyHash has been updated\n const serverKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n if (serverKeyHash != null && storedKeyHash === serverKeyHash) {\n await this.setKeyHash(localKeyHash);\n return true;\n }\n }\n\n return false;\n }\n\n @sequentialize(() => \"getEncKey\")\n getEncKey(key: SymmetricCryptoKey = null): Promise {\n return this.getEncKeyHelper(key);\n }\n\n async getPublicKey(): Promise {\n const inMemoryPublicKey = await this.stateService.getPublicKey();\n if (inMemoryPublicKey != null) {\n return inMemoryPublicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n const publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n await this.stateService.setPublicKey(publicKey);\n return publicKey;\n }\n\n async getPrivateKey(): Promise {\n const decryptedPrivateKey = await this.stateService.getDecryptedPrivateKey();\n if (decryptedPrivateKey != null) {\n return decryptedPrivateKey;\n }\n\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n if (encPrivateKey == null) {\n return null;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n await this.stateService.setDecryptedPrivateKey(privateKey);\n return privateKey;\n }\n\n async getFingerprint(fingerprintMaterial: string, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error(\"No public key available.\");\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, \"sha256\");\n const userFingerprint = await this.cryptoFunctionService.hkdfExpand(\n keyFingerprint,\n fingerprintMaterial,\n 32,\n \"sha256\"\n );\n return this.hashPhrase(userFingerprint);\n }\n\n @sequentialize(() => \"getOrgKeys\")\n async getOrgKeys(): Promise> {\n const result: Map = new Map();\n const decryptedOrganizationKeys = await this.stateService.getDecryptedOrganizationKeys();\n if (decryptedOrganizationKeys != null && decryptedOrganizationKeys.size > 0) {\n return decryptedOrganizationKeys;\n }\n\n const encOrgKeyData = await this.stateService.getEncryptedOrganizationKeys();\n if (encOrgKeyData == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId of Object.keys(encOrgKeyData)) {\n if (result.has(orgId)) {\n continue;\n }\n\n const encOrgKey = BaseEncryptedOrganizationKey.fromData(encOrgKeyData[orgId]);\n const decOrgKey = await encOrgKey.decrypt(this);\n result.set(orgId, decOrgKey);\n\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedOrganizationKeys(result);\n }\n\n return result;\n }\n\n async getOrgKey(orgId: string): Promise {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n @sequentialize(() => \"getProviderKeys\")\n async getProviderKeys(): Promise> {\n const providerKeys: Map = new Map();\n const decryptedProviderKeys = await this.stateService.getDecryptedProviderKeys();\n if (decryptedProviderKeys != null && decryptedProviderKeys.size > 0) {\n return decryptedProviderKeys;\n }\n\n const encProviderKeys = await this.stateService.getEncryptedProviderKeys();\n if (encProviderKeys == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId in encProviderKeys) {\n // eslint-disable-next-line\n if (!encProviderKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encProviderKeys[orgId]);\n providerKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedProviderKeys(providerKeys);\n }\n\n return providerKeys;\n }\n\n async getProviderKey(providerId: string): Promise {\n if (providerId == null) {\n return null;\n }\n\n const providerKeys = await this.getProviderKeys();\n if (providerKeys == null || !providerKeys.has(providerId)) {\n return null;\n }\n\n return providerKeys.get(providerId);\n }\n\n async hasKey(): Promise {\n return (\n (await this.hasKeyInMemory()) ||\n (await this.hasKeyStored(KeySuffixOptions.Auto)) ||\n (await this.hasKeyStored(KeySuffixOptions.Biometric))\n );\n }\n\n async hasKeyInMemory(userId?: string): Promise {\n return (await this.stateService.getCryptoMasterKey({ userId: userId })) != null;\n }\n\n async hasKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise {\n switch (keySuffix) {\n case KeySuffixOptions.Auto:\n return (await this.stateService.getCryptoMasterKeyAuto({ userId: userId })) != null;\n case KeySuffixOptions.Biometric:\n return (await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId })) === true;\n default:\n return false;\n }\n }\n\n async hasEncKey(): Promise {\n return (await this.stateService.getEncryptedCryptoSymmetricKey()) != null;\n }\n\n async clearKey(clearSecretStorage = true, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(null, { userId: userId });\n if (clearSecretStorage) {\n await this.clearSecretKeyStore(userId);\n }\n }\n\n async clearStoredKey(keySuffix: KeySuffixOptions) {\n keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.setCryptoMasterKeyAuto(null)\n : await this.stateService.setCryptoMasterKeyBiometric(null);\n }\n\n async clearKeyHash(userId?: string): Promise {\n return await this.stateService.setKeyHash(null, { userId: userId });\n }\n\n async clearEncKey(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedCryptoSymmetricKey(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedCryptoSymmetricKey(null, { userId: userId });\n }\n }\n\n async clearKeyPair(memoryOnly?: boolean, userId?: string): Promise {\n const keysToClear: Promise[] = [\n this.stateService.setDecryptedPrivateKey(null, { userId: userId }),\n this.stateService.setPublicKey(null, { userId: userId }),\n ];\n if (!memoryOnly) {\n keysToClear.push(this.stateService.setEncryptedPrivateKey(null, { userId: userId }));\n }\n return Promise.all(keysToClear);\n }\n\n async clearOrgKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedOrganizationKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedOrganizationKeys(null, { userId: userId });\n }\n }\n\n async clearProviderKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedProviderKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedProviderKeys(null, { userId: userId });\n }\n }\n\n async clearPinProtectedKey(userId?: string): Promise {\n return await this.stateService.setEncryptedPinProtected(null, { userId: userId });\n }\n\n async clearKeys(userId?: string): Promise {\n await this.clearKey(true, userId);\n await this.clearKeyHash(userId);\n await this.clearOrgKeys(false, userId);\n await this.clearProviderKeys(false, userId);\n await this.clearEncKey(false, userId);\n await this.clearKeyPair(false, userId);\n await this.clearPinProtectedKey(userId);\n }\n\n async toggleKey(): Promise {\n const key = await this.getKey();\n\n await this.setKey(key);\n }\n\n async makeKey(\n password: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig\n ): Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfConfig.iterations == null) {\n kdfConfig.iterations = 5000;\n } else if (kdfConfig.iterations < 5000) {\n throw new Error(\"PBKDF2 iteration minimum is 5000.\");\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, \"sha256\", kdfConfig.iterations);\n } else if (kdf == KdfType.Argon2id) {\n if (kdfConfig.iterations == null) {\n kdfConfig.iterations = DEFAULT_ARGON2_ITERATIONS;\n } else if (kdfConfig.iterations < 2) {\n throw new Error(\"Argon2 iteration minimum is 2.\");\n }\n\n if (kdfConfig.memory == null) {\n kdfConfig.memory = DEFAULT_ARGON2_MEMORY;\n } else if (kdfConfig.memory < 16) {\n throw new Error(\"Argon2 memory minimum is 16 MB\");\n } else if (kdfConfig.memory > 1024) {\n throw new Error(\"Argon2 memory maximum is 1024 MB\");\n }\n\n if (kdfConfig.parallelism == null) {\n kdfConfig.parallelism = DEFAULT_ARGON2_PARALLELISM;\n } else if (kdfConfig.parallelism < 1) {\n throw new Error(\"Argon2 parallelism minimum is 1.\");\n }\n\n const saltHash = await this.cryptoFunctionService.hash(salt, \"sha256\");\n key = await this.cryptoFunctionService.argon2(\n password,\n saltHash,\n kdfConfig.iterations,\n kdfConfig.memory * 1024, // convert to KiB from MiB\n kdfConfig.parallelism\n );\n } else {\n throw new Error(\"Unknown Kdf.\");\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n protectedKeyCs: EncString = null\n ): Promise {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n if (pinProtectedKey == null) {\n throw new Error(\"No PIN protected key found.\");\n }\n protectedKeyCs = new EncString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfConfig);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig\n ): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfConfig);\n return await this.stretchKey(pinKey);\n }\n\n async makeSendKey(keyMaterial: ArrayBuffer): Promise {\n const sendKey = await this.cryptoFunctionService.hkdf(\n keyMaterial,\n \"bitwarden-send\",\n \"send\",\n 64,\n \"sha256\"\n );\n return new SymmetricCryptoKey(sendKey);\n }\n\n async hashPassword(\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ): Promise {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error(\"Invalid parameters.\");\n }\n\n const iterations = hashPurpose === HashPurpose.LocalAuthorization ? 2 : 1;\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, \"sha256\", iterations);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n const theKey = await this.getKeyForUserEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ): Promise<[SymmetricCryptoKey, EncString]> {\n if (encKey == null) {\n encKey = await this.getEncKey();\n }\n return this.buildEncKey(key, encKey.key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encrypt\n */\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return await this.encryptService.encrypt(plainValue, key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.encryptToBytes\n */\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return this.encryptService.encryptToBytes(plainValue, key);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error(\"Public key unavailable.\");\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, \"sha1\");\n return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise {\n const headerPieces = encValue.split(\".\");\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64: // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error(\"encPieces unavailable.\");\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = privateKeyValue ?? (await this.getPrivateKey());\n if (privateKey == null) {\n throw new Error(\"No private key.\");\n }\n\n let alg: \"sha1\" | \"sha256\" = \"sha1\";\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = \"sha256\";\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const keyForEnc = await this.getKeyForUserEncryption(key);\n return this.encryptService.decryptToBytes(encString, keyForEnc);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToUtf8\n */\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n key = await this.getKeyForUserEncryption(key);\n return await this.encryptService.decryptToUtf8(encString, key);\n }\n\n /**\n * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey)\n * and then call encryptService.decryptToBytes\n */\n async decryptFromBytes(encBuffer: EncArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuffer == null) {\n throw new Error(\"No buffer provided for decryption.\");\n }\n\n key = await this.getKeyForUserEncryption(key);\n\n return this.encryptService.decryptToBytes(encBuffer, key);\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error(\"We cannot generate numbers larger than 53 bits.\");\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n async validateKey(key: SymmetricCryptoKey) {\n try {\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n const encKey = await this.getEncKeyHelper(key);\n if (encPrivateKey == null || encKey == null) {\n return false;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), encKey);\n await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n } catch (e) {\n return false;\n }\n\n return true;\n }\n\n // ---HELPERS---\n\n protected async storeKey(key: SymmetricCryptoKey, userId?: string) {\n const storeAuto = await this.shouldStoreKey(KeySuffixOptions.Auto, userId);\n\n if (storeAuto) {\n await this.storeAutoKey(key, userId);\n } else {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n }\n }\n\n protected async storeAutoKey(key: SymmetricCryptoKey, userId?: string) {\n await this.stateService.setCryptoMasterKeyAuto(key.keyB64, { userId: userId });\n }\n\n protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId?: string) {\n let shouldStoreKey = false;\n if (keySuffix === KeySuffixOptions.Auto) {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n shouldStoreKey = vaultTimeout == null;\n } else if (keySuffix === KeySuffixOptions.Biometric) {\n const biometricUnlock = await this.stateService.getBiometricUnlock({ userId: userId });\n shouldStoreKey = biometricUnlock && this.platformUtilService.supportsSecureStorage();\n }\n return shouldStoreKey;\n }\n\n protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions, userId?: string) {\n return keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.getCryptoMasterKeyAuto({ userId: userId })\n : await this.stateService.getCryptoMasterKeyBiometric({ userId: userId });\n }\n\n async getKeyForUserEncryption(key?: SymmetricCryptoKey): Promise {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n // Legacy support: encryption used to be done with the user key (derived from master password).\n // Users who have not migrated will have a null encKey and must use the user key instead.\n return await this.getKey();\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise {\n const newKey = new Uint8Array(64);\n const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"enc\", 32, \"sha256\");\n const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"mac\", 32, \"sha256\");\n newKey.set(new Uint8Array(encKey));\n newKey.set(new Uint8Array(macKey), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy = 64) {\n const entropyPerWord = Math.log(EFFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error(\"Output entropy of hash function is too small\");\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EFFLongWordList.length);\n hashNumber = hashNumber.divide(EFFLongWordList.length);\n phrase.push(EFFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(\n key: SymmetricCryptoKey,\n encKey: ArrayBuffer\n ): Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error(\"Invalid key size.\");\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n\n private async clearSecretKeyStore(userId?: string): Promise {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n\n private async getEncKeyHelper(key: SymmetricCryptoKey = null): Promise {\n const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey();\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n const encKey = await this.stateService.getEncryptedCryptoSymmetricKey();\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error(\"Unsupported encKey type.\");\n }\n if (decEncKey == null) {\n return null;\n }\n const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey);\n await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey);\n return symmetricCryptoKey;\n }\n}\n","import { SymmetricCryptoKey } from \"../../../platform/models/domain/symmetric-crypto-key\";\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\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 | ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof plainValue === \"string\") {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new EncString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No encryption key provided.\");\n }\n\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return new EncArrayBuffer(encBytes.buffer);\n }\n\n async decryptToUtf8(encString: EncString, key: SymmetricCryptoKey): Promise {\n if (key == null) {\n throw new Error(\"No key provided for decryption.\");\n }\n\n key = this.resolveLegacyKey(key, encString);\n\n if (key.macKey != null && encString?.mac == null) {\n this.logService.error(\"mac required.\");\n return null;\n }\n\n if (key.encType !== encString.encryptionType) {\n this.logService.error(\"encType unavailable.\");\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(\n encString.data,\n encString.iv,\n encString.mac,\n key\n );\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(\n fastParams.macData,\n fastParams.macKey,\n \"sha256\"\n );\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n this.logMacFailed(\"mac failed.\");\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n async decryptToBytes(encThing: 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(\n macData.buffer,\n key.macKey,\n \"sha256\"\n );\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(encThing.macBytes, computedMac);\n if (!macsMatch) {\n this.logMacFailed(\"mac failed.\");\n return null;\n }\n }\n\n const result = await this.cryptoFunctionService.aesDecrypt(\n encThing.dataBytes,\n encThing.ivBytes,\n key.encKey\n );\n\n return result ?? null;\n }\n\n async decryptItems(\n items: Decryptable[],\n key: SymmetricCryptoKey\n ): Promise {\n if (items == null || items.length < 1) {\n return [];\n }\n\n return await Promise.all(items.map((item) => item.decrypt(key)));\n }\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = key;\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, \"sha256\");\n }\n\n return obj;\n }\n\n private logMacFailed(msg: string) {\n if (this.logMacFailures) {\n this.logService.error(msg);\n }\n }\n\n /**\n * Transform into new key for the old encrypt-then-mac scheme if required, otherwise return the current key unchanged\n * @param encThing The encrypted object (e.g. encString or encArrayBuffer) that you want to decrypt\n */\n resolveLegacyKey(key: SymmetricCryptoKey, encThing: 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 { 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 { EnvironmentUrls } from \"../../auth/models/domain/environment-urls\";\nimport { TokenService } from \"../../auth/services/token.service\";\nimport { StateVersion, ThemeType, KdfType, HtmlStorageLocation } from \"../../enums\";\nimport { EventData } from \"../../models/data/event.data\";\nimport { GeneratedPasswordHistory } from \"../../tools/generator/password\";\nimport { SendData } from \"../../tools/send/models/data/send.data\";\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 { AbstractStorageService } from \"../abstractions/storage.service\";\nimport { StateFactory } from \"../factories/state-factory\";\nimport {\n Account,\n AccountSettings,\n EncryptionPair,\n AccountSettingsSettings,\n} from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { GlobalState } from \"../models/domain/global-state\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\n\n// Originally (before January 2022) storage was handled as a flat key/value pair store.\n// With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration.\nconst v1Keys: { [key: string]: string } = {\n accessToken: \"accessToken\",\n alwaysShowDock: \"alwaysShowDock\",\n autoConfirmFingerprints: \"autoConfirmFingerprints\",\n autoFillOnPageLoadDefault: \"autoFillOnPageLoadDefault\",\n biometricAwaitingAcceptance: \"biometricAwaitingAcceptance\",\n biometricFingerprintValidated: \"biometricFingerprintValidated\",\n biometricText: \"biometricText\",\n biometricUnlock: \"biometric\",\n clearClipboard: \"clearClipboardKey\",\n clientId: \"apikey_clientId\",\n clientSecret: \"apikey_clientSecret\",\n collapsedGroupings: \"collapsedGroupings\",\n convertAccountToKeyConnector: \"convertAccountToKeyConnector\",\n defaultUriMatch: \"defaultUriMatch\",\n disableAddLoginNotification: \"disableAddLoginNotification\",\n disableAutoBiometricsPrompt: \"noAutoPromptBiometrics\",\n disableAutoTotpCopy: \"disableAutoTotpCopy\",\n disableBadgeCounter: \"disableBadgeCounter\",\n disableChangedPasswordNotification: \"disableChangedPasswordNotification\",\n disableContextMenuItem: \"disableContextMenuItem\",\n disableFavicon: \"disableFavicon\",\n disableGa: \"disableGa\",\n dontShowCardsCurrentTab: \"dontShowCardsCurrentTab\",\n dontShowIdentitiesCurrentTab: \"dontShowIdentitiesCurrentTab\",\n emailVerified: \"emailVerified\",\n enableAlwaysOnTop: \"enableAlwaysOnTopKey\",\n enableAutoFillOnPageLoad: \"enableAutoFillOnPageLoad\",\n enableBiometric: \"enabledBiometric\",\n enableBrowserIntegration: \"enableBrowserIntegration\",\n enableBrowserIntegrationFingerprint: \"enableBrowserIntegrationFingerprint\",\n enableCloseToTray: \"enableCloseToTray\",\n enableFullWidth: \"enableFullWidth\",\n enableMinimizeToTray: \"enableMinimizeToTray\",\n enableStartToTray: \"enableStartToTrayKey\",\n enableTray: \"enableTray\",\n encKey: \"encKey\", // Generated Symmetric Key\n encOrgKeys: \"encOrgKeys\",\n encPrivate: \"encPrivateKey\",\n encProviderKeys: \"encProviderKeys\",\n entityId: \"entityId\",\n entityType: \"entityType\",\n environmentUrls: \"environmentUrls\",\n equivalentDomains: \"equivalentDomains\",\n eventCollection: \"eventCollection\",\n forcePasswordReset: \"forcePasswordReset\",\n history: \"generatedPasswordHistory\",\n installedVersion: \"installedVersion\",\n kdf: \"kdf\",\n kdfIterations: \"kdfIterations\",\n key: \"key\", // Master Key\n keyHash: \"keyHash\",\n lastActive: \"lastActive\",\n localData: \"sitesLocalData\",\n locale: \"locale\",\n mainWindowSize: \"mainWindowSize\",\n minimizeOnCopyToClipboard: \"minimizeOnCopyToClipboardKey\",\n neverDomains: \"neverDomains\",\n noAutoPromptBiometricsText: \"noAutoPromptBiometricsText\",\n openAtLogin: \"openAtLogin\",\n passwordGenerationOptions: \"passwordGenerationOptions\",\n pinProtected: \"pinProtectedKey\",\n protectedPin: \"protectedPin\",\n refreshToken: \"refreshToken\",\n ssoCodeVerifier: \"ssoCodeVerifier\",\n ssoIdentifier: \"ssoOrgIdentifier\",\n ssoState: \"ssoState\",\n stamp: \"securityStamp\",\n theme: \"theme\",\n userEmail: \"userEmail\",\n userId: \"userId\",\n usesConnector: \"usesKeyConnector\",\n vaultTimeoutAction: \"vaultTimeoutAction\",\n vaultTimeout: \"lockOption\",\n rememberedEmail: \"rememberedEmail\",\n};\n\nconst v1KeyPrefixes: { [key: string]: string } = {\n ciphers: \"ciphers_\",\n collections: \"collections_\",\n folders: \"folders_\",\n lastSync: \"lastSync_\",\n policies: \"policies_\",\n twoFactorToken: \"twoFactorToken_\",\n organizations: \"organizations_\",\n providers: \"providers_\",\n sends: \"sends_\",\n settings: \"settings_\",\n};\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateMigrationService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n constructor(\n protected storageService: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\n protected stateFactory: StateFactory\n ) {}\n\n async needsMigration(): Promise {\n const currentStateVersion = await this.getCurrentStateVersion();\n return currentStateVersion == null || currentStateVersion < StateVersion.Latest;\n }\n\n async migrate(): Promise {\n let currentStateVersion = await this.getCurrentStateVersion();\n while (currentStateVersion < StateVersion.Latest) {\n switch (currentStateVersion) {\n case StateVersion.One:\n await this.migrateStateFrom1To2();\n break;\n case StateVersion.Two:\n await this.migrateStateFrom2To3();\n break;\n case StateVersion.Three:\n await this.migrateStateFrom3To4();\n break;\n case StateVersion.Four: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom4To5(account);\n await this.set(account.profile.userId, migratedAccount);\n }\n await this.setCurrentStateVersion(StateVersion.Five);\n break;\n }\n case StateVersion.Five: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom5To6(account);\n await this.set(account.profile.userId, migratedAccount);\n }\n await this.setCurrentStateVersion(StateVersion.Six);\n break;\n }\n case StateVersion.Six: {\n const authenticatedAccounts = await this.getAuthenticatedAccounts();\n const globals = (await this.getGlobals()) as any;\n for (const account of authenticatedAccounts) {\n const migratedAccount = await this.migrateAccountFrom6To7(\n globals?.noAutoPromptBiometrics,\n account\n );\n await this.set(account.profile.userId, migratedAccount);\n }\n if (globals) {\n delete globals.noAutoPromptBiometrics;\n }\n await this.set(keys.global, globals);\n await this.setCurrentStateVersion(StateVersion.Seven);\n }\n }\n\n currentStateVersion += 1;\n }\n }\n\n protected async migrateStateFrom1To2(): Promise {\n const clearV1Keys = async (clearingUserId?: string) => {\n for (const key in v1Keys) {\n if (key == null) {\n continue;\n }\n await this.set(v1Keys[key], null);\n }\n if (clearingUserId != null) {\n for (const keyPrefix in v1KeyPrefixes) {\n if (keyPrefix == null) {\n continue;\n }\n await this.set(v1KeyPrefixes[keyPrefix] + userId, null);\n }\n }\n };\n\n // Some processes, like biometrics, may have already defined a value before migrations are run.\n // We don't want to null out those values if they don't exist in the old storage scheme (like for new installs)\n // So, the OOO for migration is that we:\n // 1. Check for an existing storage value from the old storage structure OR\n // 2. Check for a value already set by processes that run before migration OR\n // 3. Assign the default value\n const globals: any =\n (await this.get(keys.global)) ?? this.stateFactory.createGlobal(null);\n globals.stateVersion = StateVersion.Two;\n globals.environmentUrls =\n (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls;\n globals.locale = (await this.get(v1Keys.locale)) ?? globals.locale;\n globals.noAutoPromptBiometrics =\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n globals.noAutoPromptBiometrics;\n globals.noAutoPromptBiometricsText =\n (await this.get(v1Keys.noAutoPromptBiometricsText)) ??\n globals.noAutoPromptBiometricsText;\n globals.ssoCodeVerifier =\n (await this.get(v1Keys.ssoCodeVerifier)) ?? globals.ssoCodeVerifier;\n globals.ssoOrganizationIdentifier =\n (await this.get(v1Keys.ssoIdentifier)) ?? globals.ssoOrganizationIdentifier;\n globals.ssoState = (await this.get(v1Keys.ssoState)) ?? globals.ssoState;\n globals.rememberedEmail =\n (await this.get(v1Keys.rememberedEmail)) ?? globals.rememberedEmail;\n globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme;\n globals.vaultTimeout = (await this.get(v1Keys.vaultTimeout)) ?? globals.vaultTimeout;\n globals.vaultTimeoutAction =\n (await this.get(v1Keys.vaultTimeoutAction)) ?? globals.vaultTimeoutAction;\n globals.window = (await this.get(v1Keys.mainWindowSize)) ?? globals.window;\n globals.enableTray = (await this.get(v1Keys.enableTray)) ?? globals.enableTray;\n globals.enableMinimizeToTray =\n (await this.get(v1Keys.enableMinimizeToTray)) ?? globals.enableMinimizeToTray;\n globals.enableCloseToTray =\n (await this.get(v1Keys.enableCloseToTray)) ?? globals.enableCloseToTray;\n globals.enableStartToTray =\n (await this.get(v1Keys.enableStartToTray)) ?? globals.enableStartToTray;\n globals.openAtLogin = (await this.get(v1Keys.openAtLogin)) ?? globals.openAtLogin;\n globals.alwaysShowDock =\n (await this.get(v1Keys.alwaysShowDock)) ?? globals.alwaysShowDock;\n globals.enableBrowserIntegration =\n (await this.get(v1Keys.enableBrowserIntegration)) ??\n globals.enableBrowserIntegration;\n globals.enableBrowserIntegrationFingerprint =\n (await this.get(v1Keys.enableBrowserIntegrationFingerprint)) ??\n globals.enableBrowserIntegrationFingerprint;\n\n const userId =\n (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId));\n\n const defaultAccount = this.stateFactory.createAccount(null);\n const accountSettings: AccountSettings = {\n autoConfirmFingerPrints:\n (await this.get(v1Keys.autoConfirmFingerprints)) ??\n defaultAccount.settings.autoConfirmFingerPrints,\n autoFillOnPageLoadDefault:\n (await this.get(v1Keys.autoFillOnPageLoadDefault)) ??\n defaultAccount.settings.autoFillOnPageLoadDefault,\n biometricUnlock:\n (await this.get(v1Keys.biometricUnlock)) ??\n defaultAccount.settings.biometricUnlock,\n clearClipboard:\n (await this.get(v1Keys.clearClipboard)) ?? defaultAccount.settings.clearClipboard,\n defaultUriMatch:\n (await this.get(v1Keys.defaultUriMatch)) ?? defaultAccount.settings.defaultUriMatch,\n disableAddLoginNotification:\n (await this.get(v1Keys.disableAddLoginNotification)) ??\n defaultAccount.settings.disableAddLoginNotification,\n disableAutoBiometricsPrompt:\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n defaultAccount.settings.disableAutoBiometricsPrompt,\n disableAutoTotpCopy:\n (await this.get(v1Keys.disableAutoTotpCopy)) ??\n defaultAccount.settings.disableAutoTotpCopy,\n disableBadgeCounter:\n (await this.get(v1Keys.disableBadgeCounter)) ??\n defaultAccount.settings.disableBadgeCounter,\n disableChangedPasswordNotification:\n (await this.get(v1Keys.disableChangedPasswordNotification)) ??\n defaultAccount.settings.disableChangedPasswordNotification,\n disableContextMenuItem:\n (await this.get(v1Keys.disableContextMenuItem)) ??\n defaultAccount.settings.disableContextMenuItem,\n disableGa: (await this.get(v1Keys.disableGa)) ?? defaultAccount.settings.disableGa,\n dontShowCardsCurrentTab:\n (await this.get(v1Keys.dontShowCardsCurrentTab)) ??\n defaultAccount.settings.dontShowCardsCurrentTab,\n dontShowIdentitiesCurrentTab:\n (await this.get(v1Keys.dontShowIdentitiesCurrentTab)) ??\n defaultAccount.settings.dontShowIdentitiesCurrentTab,\n enableAlwaysOnTop:\n (await this.get(v1Keys.enableAlwaysOnTop)) ??\n defaultAccount.settings.enableAlwaysOnTop,\n enableAutoFillOnPageLoad:\n (await this.get(v1Keys.enableAutoFillOnPageLoad)) ??\n defaultAccount.settings.enableAutoFillOnPageLoad,\n enableBiometric:\n (await this.get(v1Keys.enableBiometric)) ??\n defaultAccount.settings.enableBiometric,\n enableFullWidth:\n (await this.get(v1Keys.enableFullWidth)) ??\n defaultAccount.settings.enableFullWidth,\n environmentUrls: globals.environmentUrls ?? defaultAccount.settings.environmentUrls,\n equivalentDomains:\n (await this.get(v1Keys.equivalentDomains)) ??\n defaultAccount.settings.equivalentDomains,\n minimizeOnCopyToClipboard:\n (await this.get(v1Keys.minimizeOnCopyToClipboard)) ??\n defaultAccount.settings.minimizeOnCopyToClipboard,\n neverDomains:\n (await this.get(v1Keys.neverDomains)) ?? defaultAccount.settings.neverDomains,\n passwordGenerationOptions:\n (await this.get(v1Keys.passwordGenerationOptions)) ??\n defaultAccount.settings.passwordGenerationOptions,\n pinProtected: Object.assign(new EncryptionPair(), {\n decrypted: null,\n encrypted: await this.get(v1Keys.pinProtected),\n }),\n protectedPin: await this.get(v1Keys.protectedPin),\n settings:\n userId == null\n ? null\n : await this.get(v1KeyPrefixes.settings + userId),\n vaultTimeout:\n (await this.get(v1Keys.vaultTimeout)) ?? defaultAccount.settings.vaultTimeout,\n vaultTimeoutAction:\n (await this.get(v1Keys.vaultTimeoutAction)) ??\n defaultAccount.settings.vaultTimeoutAction,\n };\n\n // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth\n // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings\n if (userId == null) {\n await this.set(keys.tempAccountSettings, accountSettings);\n await this.set(keys.global, globals);\n await this.set(keys.authenticatedAccounts, []);\n await this.set(keys.activeUserId, null);\n await clearV1Keys();\n return;\n }\n\n globals.twoFactorToken = await this.get(v1KeyPrefixes.twoFactorToken + userId);\n await this.set(keys.global, globals);\n await this.set(userId, {\n data: {\n addEditCipherInfo: null,\n ciphers: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CipherData }>(v1KeyPrefixes.ciphers + userId),\n },\n collapsedGroupings: null,\n collections: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CollectionData }>(\n v1KeyPrefixes.collections + userId\n ),\n },\n eventCollection: await this.get(v1Keys.eventCollection),\n folders: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: FolderData }>(v1KeyPrefixes.folders + userId),\n },\n localData: null,\n organizations: await this.get<{ [id: string]: OrganizationData }>(\n v1KeyPrefixes.organizations + userId\n ),\n passwordGenerationHistory: {\n decrypted: null,\n encrypted: await this.get(v1Keys.history),\n },\n policies: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: PolicyData }>(v1KeyPrefixes.policies + userId),\n },\n providers: await this.get<{ [id: string]: ProviderData }>(v1KeyPrefixes.providers + userId),\n sends: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: SendData }>(v1KeyPrefixes.sends + userId),\n },\n },\n keys: {\n apiKeyClientSecret: await this.get(v1Keys.clientSecret),\n cryptoMasterKey: null,\n cryptoMasterKeyAuto: null,\n cryptoMasterKeyB64: null,\n cryptoMasterKeyBiometric: null,\n cryptoSymmetricKey: {\n encrypted: await this.get(v1Keys.encKey),\n decrypted: null,\n },\n legacyEtmKey: null,\n organizationKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encOrgKeys),\n },\n privateKey: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encPrivate),\n },\n providerKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encProviderKeys),\n },\n publicKey: null,\n },\n profile: {\n apiKeyClientId: await this.get(v1Keys.clientId),\n authenticationStatus: null,\n convertAccountToKeyConnector: await this.get(v1Keys.convertAccountToKeyConnector),\n email: await this.get(v1Keys.userEmail),\n emailVerified: await this.get(v1Keys.emailVerified),\n entityId: null,\n entityType: null,\n everBeenUnlocked: null,\n forcePasswordReset: null,\n hasPremiumPersonally: null,\n kdfIterations: await this.get(v1Keys.kdfIterations),\n kdfType: await this.get(v1Keys.kdf),\n keyHash: await this.get(v1Keys.keyHash),\n lastSync: null,\n userId: userId,\n usesKeyConnector: null,\n },\n settings: accountSettings,\n tokens: {\n accessToken: await this.get(v1Keys.accessToken),\n decodedToken: null,\n refreshToken: await this.get(v1Keys.refreshToken),\n securityStamp: null,\n },\n });\n\n await this.set(keys.authenticatedAccounts, [userId]);\n await this.set(keys.activeUserId, userId);\n\n const accountActivity: { [userId: string]: number } = {\n [userId]: await this.get(v1Keys.lastActive),\n };\n accountActivity[userId] = await this.get(v1Keys.lastActive);\n await this.set(keys.accountActivity, accountActivity);\n\n await clearV1Keys(userId);\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"biometric\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.biometricKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"biometric\" }),\n { keySuffix: \"biometric\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"biometric\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"auto\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.autoKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"auto\" }),\n { keySuffix: \"auto\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"auto\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key)) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.masterKey}`,\n await this.secureStorageService.get(v1Keys.key)\n );\n await this.secureStorageService.remove(v1Keys.key);\n }\n }\n\n protected async migrateStateFrom2To3(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (\n account?.profile?.hasPremiumPersonally === null &&\n account.tokens?.accessToken != null\n ) {\n const decodedToken = await TokenService.decodeToken(account.tokens.accessToken);\n account.profile.hasPremiumPersonally = decodedToken.premium;\n await this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Three;\n await this.set(keys.global, globals);\n }\n\n protected async migrateStateFrom3To4(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (account?.profile?.everBeenUnlocked != null) {\n delete account.profile.everBeenUnlocked;\n return this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Four;\n await this.set(keys.global, globals);\n }\n\n protected async migrateAccountFrom4To5(account: TAccount): Promise {\n const encryptedOrgKeys = account.keys?.organizationKeys?.encrypted;\n if (encryptedOrgKeys != null) {\n for (const [orgId, encKey] of Object.entries(encryptedOrgKeys)) {\n encryptedOrgKeys[orgId] = {\n type: \"organization\",\n key: encKey as unknown as string, // Account v4 does not reflect the current account model so we have to cast\n };\n }\n }\n\n return account;\n }\n\n protected async migrateAccountFrom5To6(account: TAccount): Promise {\n delete (account as any).keys?.legacyEtmKey;\n return account;\n }\n\n protected async migrateAccountFrom6To7(\n globalSetting: boolean,\n account: TAccount\n ): Promise {\n if (globalSetting) {\n account.settings = Object.assign({}, account.settings, { disableAutoBiometricsPrompt: true });\n }\n return account;\n }\n\n protected get options(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Local };\n }\n\n protected get(key: string): Promise {\n return this.storageService.get(key, this.options);\n }\n\n protected set(key: string, value: any): Promise {\n if (value == null) {\n return this.storageService.remove(key, this.options);\n }\n return this.storageService.save(key, value, this.options);\n }\n\n protected async getGlobals(): Promise {\n return await this.get(keys.global);\n }\n\n protected async getCurrentStateVersion(): Promise {\n return (await this.getGlobals())?.stateVersion ?? StateVersion.One;\n }\n\n protected async setCurrentStateVersion(newVersion: StateVersion): Promise {\n const globals = await this.getGlobals();\n globals.stateVersion = newVersion;\n await this.set(keys.global, globals);\n }\n\n protected async getAuthenticatedAccounts(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n return Promise.all(authenticatedUserIds.map((id) => this.get(id)));\n }\n}\n","import { 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 { 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 { 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 { GeneratedPasswordHistory } from \"../../tools/generator/password\";\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 { LogService } from \"../abstractions/log.service\";\nimport { StateMigrationService } from \"../abstractions/state-migration.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 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 { DeviceKey, SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nconst keys = {\n state: \"state\",\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nconst DDG_SHARED_KEY = \"DuckDuckGoSharedKey\";\n\nexport class StateService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> implements StateServiceAbstraction\n{\n protected accountsSubject = new BehaviorSubject<{ [userId: string]: TAccount }>({});\n accounts$ = this.accountsSubject.asObservable();\n\n protected activeAccountSubject = new BehaviorSubject(null);\n activeAccount$ = this.activeAccountSubject.asObservable();\n\n protected activeAccountUnlockedSubject = new BehaviorSubject(false);\n activeAccountUnlocked$ = this.activeAccountUnlockedSubject.asObservable();\n\n private hasBeenInited = false;\n private isRecoveredSession = false;\n\n protected accountDiskCache = new BehaviorSubject>({});\n\n // default account serializer, must be overridden by child class\n protected accountDeserializer = Account.fromJSON as (json: Jsonify) => TAccount;\n\n constructor(\n protected storageService: AbstractStorageService,\n protected secureStorageService: AbstractStorageService,\n protected memoryStorageService: AbstractMemoryStorageService,\n protected logService: LogService,\n protected stateMigrationService: StateMigrationService,\n protected stateFactory: StateFactory,\n protected useAccountCache: boolean = true\n ) {\n // If the account gets changed, verify the new account is unlocked\n this.activeAccountSubject\n .pipe(\n concatMap(async (userId) => {\n if (userId == null && this.activeAccountUnlockedSubject.getValue() == false) {\n return;\n } else if (userId == null) {\n this.activeAccountUnlockedSubject.next(false);\n }\n // 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.getCryptoMasterKey()) != null);\n })\n )\n .subscribe();\n }\n\n async init(): Promise {\n if (this.hasBeenInited) {\n return;\n }\n\n if (await this.stateMigrationService.needsMigration()) {\n await this.stateMigrationService.migrate();\n }\n\n await this.state().then(async (state) => {\n if (state == null) {\n await this.setState(new State(this.createGlobals()));\n } else {\n this.isRecoveredSession = true;\n }\n });\n await this.initAccountState();\n\n this.hasBeenInited = true;\n }\n\n async initAccountState() {\n if (this.isRecoveredSession) {\n return;\n }\n\n await this.updateState(async (state) => {\n state.authenticatedAccounts =\n (await this.storageService.get(keys.authenticatedAccounts)) ?? [];\n for (const i in state.authenticatedAccounts) {\n if (i != null) {\n await this.syncAccountFromDisk(state.authenticatedAccounts[i]);\n }\n }\n const storedActiveUser = await this.storageService.get(keys.activeUserId);\n if (storedActiveUser != null) {\n state.activeUserId = storedActiveUser;\n }\n await this.pushAccounts();\n this.activeAccountSubject.next(state.activeUserId);\n\n return state;\n });\n }\n\n async syncAccountFromDisk(userId: string) {\n if (userId == null) {\n return;\n }\n await this.updateState(async (state) => {\n if (state.accounts == null) {\n state.accounts = {};\n }\n state.accounts[userId] = this.createAccount();\n const diskAccount = await this.getAccountFromDisk({ userId: userId });\n state.accounts[userId].profile = diskAccount.profile;\n return state;\n });\n }\n\n async addAccount(account: TAccount) {\n account = await this.setAccountEnvironmentUrls(account);\n await this.updateState(async (state) => {\n state.authenticatedAccounts.push(account.profile.userId);\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n state.accounts[account.profile.userId] = account;\n return state;\n });\n await this.scaffoldNewAccountStorage(account);\n await this.setLastActive(new Date().getTime(), { userId: account.profile.userId });\n await this.setActiveUser(account.profile.userId);\n this.activeAccountSubject.next(account.profile.userId);\n }\n\n async setActiveUser(userId: string): Promise {\n this.clearDecryptedDataForActiveUser();\n await this.updateState(async (state) => {\n state.activeUserId = userId;\n await this.storageService.save(keys.activeUserId, userId);\n this.activeAccountSubject.next(state.activeUserId);\n return state;\n });\n\n await this.pushAccounts();\n }\n\n async clean(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n await this.deAuthenticateAccount(options.userId);\n if (options.userId === (await this.state())?.activeUserId) {\n await this.dynamicallySetActiveUser();\n }\n\n await this.removeAccountFromDisk(options?.userId);\n this.removeAccountFromMemory(options?.userId);\n await this.pushAccounts();\n }\n\n async getAccessToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.accessToken;\n }\n\n async setAccessToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.accessToken = value;\n await this.saveAccount(account, options);\n }\n\n async getAddEditCipherInfo(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.addEditCipherInfo;\n }\n\n async setAddEditCipherInfo(value: 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 async getCryptoMasterKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.cryptoMasterKey;\n }\n\n async setCryptoMasterKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.cryptoMasterKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n\n if (options.userId == this.activeAccountSubject.getValue()) {\n const nextValue = value != null;\n\n // Avoid emitting if we are already unlocked\n if (this.activeAccountUnlockedSubject.getValue() != nextValue) {\n this.activeAccountUnlockedSubject.next(nextValue);\n }\n }\n }\n\n async getCryptoMasterKeyAuto(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options.userId}${partialKeys.autoKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyAuto(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.autoKey, value, options);\n }\n\n async getCryptoMasterKeyB64(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options?.userId}${partialKeys.masterKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyB64(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.masterKey, value, options);\n }\n\n async getCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async hasCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return false;\n }\n return await this.secureStorageService.has(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyBiometric(value: 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 async getDecryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return account?.keys?.cryptoSymmetricKey?.decrypted;\n }\n\n async setDecryptedCryptoSymmetricKey(\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.cryptoSymmetricKey.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise> {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return Utils.recordToMap(account?.keys?.organizationKeys?.decrypted);\n }\n\n async setDecryptedOrganizationKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.organizationKeys.decrypted = Utils.mapToRecord(value);\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(GeneratedPasswordHistory)\n async getDecryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.passwordGenerationHistory?.decrypted;\n }\n\n async setDecryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.passwordGenerationHistory.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.settings?.pinProtected?.decrypted;\n }\n\n async setDecryptedPinProtected(value: EncString, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.settings.pinProtected.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(Policy)\n async getDecryptedPolicies(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.policies?.decrypted;\n }\n\n async setDecryptedPolicies(value: Policy[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.policies.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedPrivateKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.keys?.privateKey.decrypted;\n }\n\n async setDecryptedPrivateKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.privateKey.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDecryptedProviderKeys(\n options?: StorageOptions\n ): Promise> {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n return Utils.recordToMap(account?.keys?.providerKeys?.decrypted);\n }\n\n async setDecryptedProviderKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.providerKeys.decrypted = Utils.mapToRecord(value);\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n @withPrototypeForArrayMembers(SendView)\n async getDecryptedSends(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.data?.sends?.decrypted;\n }\n\n async setDecryptedSends(value: SendView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.data.sends.decrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getDefaultUriMatch(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.defaultUriMatch;\n }\n\n async setDefaultUriMatch(value: UriMatchType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.defaultUriMatch = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAddLoginNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAddLoginNotification ?? false\n );\n }\n\n async setDisableAddLoginNotification(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAddLoginNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoBiometricsPrompt(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoBiometricsPrompt ?? false\n );\n }\n\n async setDisableAutoBiometricsPrompt(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoBiometricsPrompt = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoTotpCopy(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoTotpCopy ?? false\n );\n }\n\n async setDisableAutoTotpCopy(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoTotpCopy = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableBadgeCounter(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableBadgeCounter ?? false\n );\n }\n\n async setDisableBadgeCounter(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableBadgeCounter = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableChangedPasswordNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableChangedPasswordNotification ?? false\n );\n }\n\n async setDisableChangedPasswordNotification(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableChangedPasswordNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableContextMenuItem(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableContextMenuItem ?? false\n );\n }\n\n async setDisableContextMenuItem(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableContextMenuItem = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableFavicon(options?: StorageOptions): Promise {\n return (\n (\n await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.disableFavicon ?? false\n );\n }\n\n async setDisableFavicon(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.disableFavicon = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getDisableGa(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableGa ?? false\n );\n }\n\n async setDisableGa(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableGa = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async 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 return account?.keys?.deviceKey as DeviceKey;\n }\n\n async setDeviceKey(value: DeviceKey, 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;\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 async getEncryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys.cryptoSymmetricKey.encrypted;\n }\n\n async setEncryptedCryptoSymmetricKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.cryptoSymmetricKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(FolderData)\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.folders?.encrypted;\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.folders.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise<{ [orgId: string]: EncryptedOrganizationKeyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.organizationKeys.encrypted;\n }\n\n async setEncryptedOrganizationKeys(\n value: { [orgId: string]: EncryptedOrganizationKeyData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.organizationKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForArrayMembers(GeneratedPasswordHistory)\n async getEncryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.passwordGenerationHistory?.encrypted;\n }\n\n async setEncryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.passwordGenerationHistory.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.pinProtected?.encrypted;\n }\n\n async setEncryptedPinProtected(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.pinProtected.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(PolicyData)\n async getEncryptedPolicies(options?: StorageOptions): Promise<{ [id: string]: PolicyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.policies?.encrypted;\n }\n\n async setEncryptedPolicies(\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.policies.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPrivateKey(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n return account?.keys?.privateKey?.encrypted;\n }\n\n async setEncryptedPrivateKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.privateKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedProviderKeys(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.providerKeys?.encrypted;\n }\n\n async setEncryptedProviderKeys(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.providerKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(SendData)\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.sends.encrypted;\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.sends.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEntityId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityId;\n }\n\n async setEntityId(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityId = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEntityType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityType;\n }\n\n async setEntityType(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnvironmentUrls(options?: StorageOptions): Promise {\n if ((await this.state())?.activeUserId == null) {\n return await this.getGlobalEnvironmentUrls(options);\n }\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getAccount(options))?.settings?.environmentUrls ?? new EnvironmentUrls();\n }\n\n async setEnvironmentUrls(value: EnvironmentUrls, options?: StorageOptions): Promise {\n // Global values are set on each change and the current global settings are passed to any newly authed accounts.\n // This is to allow setting 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 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(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.passwordGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUsernameGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.usernameGenerationOptions;\n }\n\n async setUsernameGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.usernameGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getGeneratorOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.generatorOptions;\n }\n\n async setGeneratorOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.generatorOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getProtectedPin(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.protectedPin;\n }\n\n async setProtectedPin(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.protectedPin = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n @withPrototypeForObjectValues(ProviderData)\n async getProviders(options?: StorageOptions): Promise<{ [id: string]: ProviderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.providers;\n }\n\n async setProviders(\n value: { [id: string]: ProviderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.providers = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPublicKey(options?: StorageOptions): Promise {\n const keys = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.keys;\n return keys?.publicKey;\n }\n\n async setPublicKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.keys.publicKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getRefreshToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.refreshToken;\n }\n\n async setRefreshToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.refreshToken = value;\n await this.saveAccount(account, options);\n }\n\n async getRememberedEmail(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberedEmail;\n }\n\n async setRememberedEmail(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberedEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSecurityStamp(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))\n )?.tokens?.securityStamp;\n }\n\n async setSecurityStamp(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n account.tokens.securityStamp = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultInMemoryOptions())\n );\n }\n\n async getSettings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.settings?.settings;\n }\n\n async setSettings(value: AccountSettingsSettings, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.settings.settings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getSsoCodeVerifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoCodeVerifier;\n }\n\n async setSsoCodeVerifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoCodeVerifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getSsoOrgIdentifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.ssoOrganizationIdentifier;\n }\n\n async setSsoOrganizationIdentifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.ssoOrganizationIdentifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSsoState(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoState;\n }\n\n async setSsoState(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoState = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getTheme(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.theme;\n }\n\n async setTheme(value: ThemeType, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.theme = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getTwoFactorToken(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.twoFactorToken;\n }\n\n async setTwoFactorToken(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.twoFactorToken = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUserId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.userId;\n }\n\n async getUsesKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.usesKeyConnector;\n }\n\n async setUsesKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.usesKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getVaultTimeout(options?: StorageOptions): Promise {\n const accountVaultTimeout = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeout;\n return accountVaultTimeout;\n }\n\n async setVaultTimeout(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeout = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getVaultTimeoutAction(options?: StorageOptions): Promise {\n const accountVaultTimeoutAction = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeoutAction;\n const globalVaultTimeoutAction = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.vaultTimeoutAction;\n return accountVaultTimeoutAction ?? globalVaultTimeoutAction;\n }\n\n async setVaultTimeoutAction(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeoutAction = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getApproveLoginRequests(options?: StorageOptions): Promise {\n const approveLoginRequests = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.approveLoginRequests;\n return approveLoginRequests;\n }\n\n async setApproveLoginRequests(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.approveLoginRequests = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getStateVersion(): Promise {\n return (await this.getGlobals(await this.defaultOnDiskLocalOptions())).stateVersion ?? 1;\n }\n\n async setStateVersion(value: number): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n globals.stateVersion = value;\n await this.saveGlobals(globals, await this.defaultOnDiskOptions());\n }\n\n async getWindow(): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n return globals?.window != null && Object.keys(globals.window).length > 0\n ? globals.window\n : new WindowState();\n }\n\n async setWindow(value: WindowState, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.window = value;\n return await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async setServerConfig(value: ServerConfigData, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.serverConfig = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getServerConfig(options: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.serverConfig;\n }\n\n async getAvatarColor(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.avatarColor;\n }\n\n async setAvatarColor(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.avatarColor = value;\n return await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n 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 return globals ?? this.createGlobals();\n }\n\n protected async saveGlobals(globals: TGlobalState, options: StorageOptions) {\n return this.useMemory(options.storageLocation)\n ? this.saveGlobalsToMemory(globals)\n : await this.saveGlobalsToDisk(globals, options);\n }\n\n protected async getGlobalsFromMemory(): Promise {\n return (await this.state()).globals;\n }\n\n protected async getGlobalsFromDisk(options: StorageOptions): Promise {\n return await this.storageService.get(keys.global, options);\n }\n\n protected async saveGlobalsToMemory(globals: TGlobalState): Promise {\n await this.updateState(async (state) => {\n state.globals = globals;\n return state;\n });\n }\n\n protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise {\n if (options.useSecureStorage) {\n await this.secureStorageService.save(keys.global, globals, options);\n } else {\n await this.storageService.save(keys.global, globals, options);\n }\n }\n\n protected async getAccount(options: StorageOptions): Promise {\n try {\n let account: TAccount;\n if (this.useMemory(options.storageLocation)) {\n account = await this.getAccountFromMemory(options);\n }\n\n if (this.useDisk(options.storageLocation) && account == null) {\n account = await this.getAccountFromDisk(options);\n }\n\n return account;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async getAccountFromMemory(options: StorageOptions): Promise {\n return await this.state().then(async (state) => {\n if (state.accounts == null) {\n return null;\n }\n return state.accounts[await this.getUserIdFromMemory(options)];\n });\n }\n\n protected async getUserIdFromMemory(options: StorageOptions): Promise {\n return await this.state().then((state) => {\n return options?.userId != null\n ? state.accounts[options.userId]?.profile?.userId\n : state.activeUserId;\n });\n }\n\n protected async getAccountFromDisk(options: StorageOptions): Promise {\n if (options?.userId == null && (await this.state())?.activeUserId == null) {\n return null;\n }\n\n if (this.useAccountCache) {\n const cachedAccount = this.accountDiskCache.value[options.userId];\n if (cachedAccount != null) {\n return cachedAccount;\n }\n }\n\n const account = options?.useSecureStorage\n ? (await this.secureStorageService.get(options.userId, options)) ??\n (await this.storageService.get(\n options.userId,\n this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local })\n ))\n : await this.storageService.get(options.userId, options);\n\n this.setDiskCache(options.userId, account);\n return account;\n }\n\n protected useMemory(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both;\n }\n\n protected useDisk(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both;\n }\n\n protected async saveAccount(\n account: TAccount,\n options: StorageOptions = {\n storageLocation: StorageLocation.Both,\n useSecureStorage: false,\n }\n ) {\n return this.useMemory(options.storageLocation)\n ? await this.saveAccountToMemory(account)\n : await this.saveAccountToDisk(account, options);\n }\n\n protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise {\n const storageLocation = options.useSecureStorage\n ? this.secureStorageService\n : this.storageService;\n\n await storageLocation.save(`${options.userId}`, account, options);\n\n this.deleteDiskCache(options.userId);\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n await this.updateState((state) => {\n return new Promise((resolve) => {\n state.accounts[account.profile.userId] = account;\n resolve(state);\n });\n });\n }\n await this.pushAccounts();\n }\n\n protected async scaffoldNewAccountStorage(account: TAccount): Promise {\n // We don't want to manipulate the referenced in memory account\n const deepClone = JSON.parse(JSON.stringify(account));\n await this.scaffoldNewAccountLocalStorage(deepClone);\n await this.scaffoldNewAccountSessionStorage(deepClone);\n await this.scaffoldNewAccountMemoryStorage(deepClone);\n }\n\n // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService.\n // For now these methods exist with some redundancy to facilitate this special web requirement.\n protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session\n const environmentUrls = account.settings.environmentUrls;\n if (storedAccount?.settings != null) {\n account.settings = storedAccount.settings;\n } else if (await this.storageService.has(keys.tempAccountSettings)) {\n account.settings = await this.storageService.get(keys.tempAccountSettings);\n await this.storageService.remove(keys.tempAccountSettings);\n }\n account.settings.environmentUrls = environmentUrls;\n if (\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 account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n }\n //\n\n protected async pushAccounts(): Promise {\n await this.pruneInMemoryAccounts();\n await this.state().then((state) => {\n if (state.accounts == null || Object.keys(state.accounts).length < 1) {\n this.accountsSubject.next({});\n return;\n }\n\n this.accountsSubject.next(state.accounts);\n });\n }\n\n protected reconcileOptions(\n requestedOptions: StorageOptions,\n defaultOptions: StorageOptions\n ): StorageOptions {\n if (requestedOptions == null) {\n return defaultOptions;\n }\n requestedOptions.userId = requestedOptions?.userId ?? defaultOptions.userId;\n requestedOptions.storageLocation =\n requestedOptions?.storageLocation ?? defaultOptions.storageLocation;\n requestedOptions.useSecureStorage =\n requestedOptions?.useSecureStorage ?? defaultOptions.useSecureStorage;\n requestedOptions.htmlStorageLocation =\n requestedOptions?.htmlStorageLocation ?? defaultOptions.htmlStorageLocation;\n requestedOptions.keySuffix = requestedOptions?.keySuffix ?? defaultOptions.keySuffix;\n return requestedOptions;\n }\n\n protected async defaultInMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Memory,\n userId: (await this.state()).activeUserId,\n };\n }\n\n protected async defaultOnDiskOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Session,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskLocalOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Local,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Memory,\n userId: (await this.state())?.activeUserId ?? (await this.getUserId()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultSecureStorageOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n useSecureStorage: true,\n userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n };\n }\n\n protected async getActiveUserIdFromStorage(): Promise {\n return await this.storageService.get(keys.activeUserId);\n }\n\n protected async removeAccountFromLocalStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async removeAccountFromSessionStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n }\n\n protected async removeAccountFromSecureStorage(userId: string = null): Promise {\n userId = userId ?? (await this.state())?.activeUserId;\n await this.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.setCryptoMasterKeyBiometric(null, { userId: userId });\n await this.setCryptoMasterKeyB64(null, { userId: userId });\n }\n\n protected async removeAccountFromMemory(userId: string = null): Promise {\n await this.updateState(async (state) => {\n userId = userId ?? state.activeUserId;\n delete state.accounts[userId];\n\n this.deleteDiskCache(userId);\n\n return state;\n });\n }\n\n protected async pruneInMemoryAccounts() {\n // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state\n for (const userId in (await this.state())?.accounts) {\n if (!(await this.getIsAuthenticated({ userId: userId }))) {\n await this.removeAccountFromMemory(userId);\n }\n }\n }\n\n // settings persist even on reset, and are not effected by this method\n protected resetAccount(account: TAccount) {\n const persistentAccountInformation = {\n settings: account.settings,\n keys: { deviceKey: account.keys.deviceKey },\n };\n return Object.assign(this.createAccount(), persistentAccountInformation);\n }\n\n protected async setAccountEnvironmentUrls(account: TAccount): Promise {\n account.settings.environmentUrls = await this.getGlobalEnvironmentUrls();\n return account;\n }\n\n protected async getGlobalEnvironmentUrls(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls();\n }\n\n protected async clearDecryptedDataForActiveUser(): Promise {\n await this.updateState(async (state) => {\n const userId = state?.activeUserId;\n if (userId != null && state?.accounts[userId]?.data != null) {\n state.accounts[userId].data = new AccountData();\n }\n\n return state;\n });\n }\n\n protected createAccount(init: Partial = null): TAccount {\n return this.stateFactory.createAccount(init);\n }\n\n protected createGlobals(init: Partial = null): TGlobalState {\n return this.stateFactory.createGlobal(init);\n }\n\n protected async deAuthenticateAccount(userId: string): Promise {\n await this.setAccessToken(null, { userId: userId });\n await this.setLastActive(null, { userId: userId });\n await this.updateState(async (state) => {\n state.authenticatedAccounts = state.authenticatedAccounts.filter((id) => id !== userId);\n\n await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts);\n\n return state;\n });\n }\n\n protected async removeAccountFromDisk(userId: string) {\n await this.removeAccountFromSessionStorage(userId);\n await this.removeAccountFromLocalStorage(userId);\n await this.removeAccountFromSecureStorage(userId);\n }\n\n protected async dynamicallySetActiveUser() {\n const accounts = (await this.state())?.accounts;\n if (accounts == null || Object.keys(accounts).length < 1) {\n await this.setActiveUser(null);\n return;\n }\n for (const userId in accounts) {\n if (userId == null) {\n continue;\n }\n if (await this.getIsAuthenticated({ userId: userId })) {\n await this.setActiveUser(userId);\n break;\n }\n await this.setActiveUser(null);\n }\n }\n\n private async getTimeoutBasedStorageOptions(options?: StorageOptions): Promise {\n const timeoutAction = await this.getVaultTimeoutAction({ userId: options?.userId });\n const timeout = await this.getVaultTimeout({ userId: options?.userId });\n const defaultOptions =\n timeoutAction === 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 private deleteDiskCache(key: string) {\n if (this.useAccountCache) {\n delete this.accountDiskCache.value[key];\n this.accountDiskCache.next(this.accountDiskCache.value);\n }\n }\n}\n\nfunction withPrototypeForArrayMembers(\n memberConstructor: new (...args: any[]) => T,\n memberConverter: (input: any) => T = (i) => i\n): (\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n) => { value: (...args: any[]) => Promise } {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n return {\n value: function (...args: any[]) {\n const originalResult: Promise = originalMethod.apply(this, args);\n\n if (!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\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty(\"ReadOnly\") || false;\n }\n}\n\nexport class CollectionAccessDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n users: SelectionReadOnlyResponse[] = [];\n\n /**\n * Flag indicating the user has been explicitly assigned to this Collection\n */\n assigned: boolean;\n\n constructor(response: any) {\n super(response);\n this.assigned = this.getResponseProperty(\"Assigned\") || false;\n\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n\n const users = this.getResponseProperty(\"Users\");\n if (users != null) {\n this.users = users.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from \"../../../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\";\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 { 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 { 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 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 { DeviceType } from \"../../../enums\";\nimport { BaseResponse } from \"../../../models/response/base.response\";\n\nexport class DeviceResponse extends BaseResponse {\n id: string;\n name: number;\n identifier: string;\n type: DeviceType;\n creationDate: string;\n encryptedUserKey: string;\n encryptedPublicKey: string;\n encryptedPrivateKey: string;\n\n constructor(response: any) {\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 = this.getResponseProperty(\"CreationDate\");\n this.encryptedUserKey = this.getResponseProperty(\"EncryptedUserKey\");\n this.encryptedPublicKey = this.getResponseProperty(\"EncryptedPublicKey\");\n this.encryptedPrivateKey = this.getResponseProperty(\"EncryptedPrivateKey\");\n }\n}\n","export class TrustedDeviceKeysRequest {\n constructor(\n public encryptedUserKey: string,\n public encryptedPublicKey: string,\n public encryptedPrivateKey: string\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.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\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 { Observable } from \"rxjs\";\n\nimport { SyncEventArgs } from \"../../types/sync-event-args\";\n\nexport abstract class SyncNotifierService {\n sync$: Observable;\n next: (event: SyncEventArgs) => void;\n}\n","import { CipherView } from \"../view/cipher.view\";\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) {}\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(\n url,\n setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL)\n );\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) {}\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter((cipher) => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort(\n (x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf()\n );\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherWithIdRequest } from \"./cipher-with-id.request\";\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nexport class CipherPartialRequest {\n folderId: string;\n favorite: boolean;\n\n constructor(cipher: Cipher) {\n this.folderId = cipher.folderId;\n this.favorite = cipher.favorite;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { 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 { 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 { 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 { SymmetricCryptoKey } 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 { 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\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 ) {}\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 key?: SymmetricCryptoKey,\n originalCipher: Cipher = null\n ): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (\n existingCipher.login.password != null &&\n existingCipher.login.password !== \"\" &&\n existingCipher.login.password !== model.login.password\n ) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(\n (f) =>\n f.type === FieldType.Hidden &&\n f.name != null &&\n f.name !== \"\" &&\n f.value != null &&\n f.value !== \"\"\n );\n const hiddenFields =\n model.fields == null\n ? []\n : model.fields.filter(\n (f) => f.type === FieldType.Hidden && f.name != null && f.name !== \"\"\n );\n existingHiddenFields.forEach((ef) => {\n const matchedField = hiddenFields.find((f) => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + \": \" + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n cipher.reprompt = model.reprompt;\n cipher.edit = model.edit;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error(\"Cannot encrypt cipher for organization. No key.\");\n }\n }\n await Promise.all([\n this.encryptObjProperty(\n model,\n cipher,\n {\n name: null,\n notes: null,\n },\n key\n ),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then((fields) => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then((ph) => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then((attachments) => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(\n attachmentsModel: AttachmentView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async (model) => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(\n model,\n attachment,\n {\n fileName: null,\n },\n key\n ).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce(async (promise, field) => {\n await promise;\n const encField = await self.encryptField(field, key);\n encFields.push(encField);\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n field.linkedId = fieldModel.linkedId;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== \"true\") {\n fieldModel.value = \"false\";\n }\n\n await this.encryptObjProperty(\n fieldModel,\n field,\n {\n name: null,\n value: null,\n },\n key\n );\n\n return field;\n }\n\n async encryptPasswordHistories(\n phModels: PasswordHistoryView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce(async (promise, ph) => {\n await promise;\n const encPh = await self.encryptPasswordHistory(ph, key);\n encPhs.push(encPh);\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(\n phModel: PasswordHistoryView,\n key: SymmetricCryptoKey\n ): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(\n phModel,\n ph,\n {\n password: null,\n },\n key\n );\n\n return ph;\n }\n\n async get(id: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n const localData = await this.stateService.getLocalData();\n return new Cipher(ciphers[id], localData ? localData[id] : null);\n }\n\n async getAll(): Promise {\n const localData = await this.stateService.getLocalData();\n const ciphers = await this.stateService.getEncryptedCiphers();\n const response: Cipher[] = [];\n for (const id in ciphers) {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => \"getAllDecrypted\")\n async getAllDecrypted(): Promise {\n if ((await this.getDecryptedCipherCache()) != null) {\n await this.reindexCiphers();\n return await this.getDecryptedCipherCache();\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const ciphers = await this.getAll();\n const orgKeys = await this.cryptoService.getOrgKeys();\n const userKey = await this.cryptoService.getKeyForUserEncryption();\n\n // Group ciphers by orgId or under 'null' for the user's ciphers\n const grouped = ciphers.reduce((agg, c) => {\n agg[c.organizationId] ??= [];\n agg[c.organizationId].push(c);\n return agg;\n }, {} as Record);\n\n const decCiphers = (\n await Promise.all(\n Object.entries(grouped).map(([orgId, groupedCiphers]) =>\n this.encryptService.decryptItems(groupedCiphers, orgKeys.get(orgId) ?? userKey)\n )\n )\n )\n .flat()\n .sort(this.getLocaleSortingFunction());\n\n await this.setDecryptedCipherCache(decCiphers);\n return decCiphers;\n }\n\n private async reindexCiphers() {\n const userId = await this.stateService.getUserId();\n const reindexRequired =\n this.searchService != null && (this.searchService.indexedEntityId ?? userId) !== userId;\n if (reindexRequired) {\n 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 if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (cipher.type === CipherType.Login && cipher.login !== null) {\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): Promise {\n let response: CipherResponse;\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n\n const data = new CipherData(response, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async updateWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.edit) {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n } else {\n const request = new CipherPartialRequest(cipher);\n response = await this.apiService.putPartialCipher(cipher.id, request);\n }\n\n const data = new CipherData(response, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async shareWithServer(\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const attachmentPromises: Promise[] = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach((attachment) => {\n if (attachment.key == null) {\n attachmentPromises.push(\n this.shareAttachmentWithServer(attachment, cipher.id, organizationId)\n );\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const data = new CipherData(response, collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const promises: Promise[] = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(\n this.encrypt(cipher).then((c) => {\n encCiphers.push(c);\n })\n );\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n try {\n await this.apiService.putShareCiphers(request);\n } catch (e) {\n for (const cipher of ciphers) {\n cipher.organizationId = null;\n cipher.collectionIds = null;\n }\n throw e;\n }\n await this.upsert(encCiphers.map((c) => c.toCipherData()));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(\n cipher,\n unencryptedFile.name,\n evt.target.result,\n admin\n );\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n async saveAttachmentRawWithServer(\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin = false\n ): Promise {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const 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 if (asAdmin) {\n await this.apiService.deleteManyCiphersAdmin(new CipherBulkDeleteRequest(ids));\n } else {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\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 if (asAdmin) {\n await this.apiService.putDeleteManyCiphersAdmin(new CipherBulkDeleteRequest(ids));\n } else {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\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 const response = asAdmin\n ? await this.apiService.putRestoreCipherAdmin(id)\n : await this.apiService.putRestoreCipher(id);\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(ids: string[]): Promise {\n const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n const restores: { id: string; revisionDate: string }[] = [];\n for (const cipher of response.data) {\n restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n }\n await this.restore(restores);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(\n attachmentView: AttachmentView,\n cipherId: string,\n organizationId: string\n ): Promise {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: \"no-store\" })\n );\n if (attachmentResponse.status !== 200) {\n throw Error(\"Failed to download attachment: \" + attachmentResponse.status.toString());\n }\n\n const encBuf = await EncArrayBuffer.fromResponse(attachmentResponse);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(\n cipherId,\n attachmentView.id,\n fd,\n organizationId\n );\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty(\n model: V,\n obj: D,\n map: any,\n key: SymmetricCryptoKey\n ): Promise {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp, theObj) {\n const p = Promise.resolve()\n .then(() => {\n const modelProp = (model as any)[map[theProp] || theProp];\n if (modelProp && modelProp !== \"\") {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n })\n .then((val: EncString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n cipher.login.autofillOnPageLoad = model.login.autofillOnPageLoad;\n await this.encryptObjProperty(\n model.login,\n cipher.login,\n {\n username: null,\n password: null,\n totp: null,\n },\n key\n );\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(\n model.login.uris[i],\n loginUri,\n {\n uri: null,\n },\n key\n );\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(\n model.card,\n cipher.card,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n key\n );\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(\n model.identity,\n cipher.identity,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n key\n );\n return;\n default:\n throw new Error(\"Unknown cipher type.\");\n }\n }\n\n private async getCipherForUrl(\n url: string,\n lastUsed: boolean,\n lastLaunched: boolean,\n autofillOnPageLoad: boolean\n ): Promise {\n const cacheKey = autofillOnPageLoad ? \"autofillOnPageLoad-\" + url : url;\n\n if (!this.sortedCiphersCache.isCached(cacheKey)) {\n let ciphers = await this.getAllDecryptedForUrl(url);\n if (!ciphers) {\n return null;\n }\n\n if (autofillOnPageLoad) {\n const autofillOnPageLoadDefault = await this.stateService.getAutoFillOnPageLoadDefault();\n ciphers = ciphers.filter(\n (cipher) =>\n cipher.login.autofillOnPageLoad ||\n (cipher.login.autofillOnPageLoad == null && autofillOnPageLoadDefault !== false)\n );\n if (ciphers.length === 0) {\n return null;\n }\n }\n\n this.sortedCiphersCache.addCiphers(cacheKey, ciphers);\n }\n\n if (lastLaunched) {\n return this.sortedCiphersCache.getLastLaunched(cacheKey);\n } else if (lastUsed) {\n return this.sortedCiphersCache.getLastUsed(cacheKey);\n } else {\n return this.sortedCiphersCache.getNext(cacheKey);\n }\n }\n\n private async clearEncryptedCiphersState(userId?: string) {\n await this.stateService.setEncryptedCiphers(null, { userId: userId });\n }\n\n private async clearDecryptedCiphersState(userId?: string) {\n await this.stateService.setDecryptedCiphers(null, { userId: userId });\n this.clearSortedCiphers();\n }\n\n private clearSortedCiphers() {\n this.sortedCiphersCache.clear();\n }\n}\n","import { 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 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.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 { ApiService } from \"../../../abstractions/api.service\";\nimport { SettingsService } from \"../../../abstractions/settings.service\";\nimport { InternalOrganizationService } 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: InternalOrganizationService,\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.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setProviderKeys(response.providers);\n await this.cryptoService.setOrgKeys(response.organizations, response.providerOrganizations);\n await this.stateService.setAvatarColor(response.avatarColor);\n await this.stateService.setSecurityStamp(response.securityStamp);\n await this.stateService.setEmailVerified(response.emailVerified);\n await this.stateService.setHasPremiumPersonally(response.premiumPersonally);\n await this.stateService.setHasPremiumFromOrganization(response.premiumFromOrganization);\n await this.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 { Directive } from \"@angular/core\";\n\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\";\n\nimport { ModalRef } from \"../../components/modal/modal.ref\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationComponent for any other situation where you need to verify the user's identity.\n */\n@Directive()\nexport class PasswordRepromptComponent {\n showPassword = false;\n masterPassword = \"\";\n\n constructor(\n private modalRef: ModalRef,\n private cryptoService: CryptoService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n\n async submit() {\n if (!(await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, null))) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\n this.modalRef.close(true);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\n\nimport { ModalService } from \"../../services/modal.service\";\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationService for any other situation where you need to verify the user's identity.\n */\n@Injectable()\nexport class PasswordRepromptService implements PasswordRepromptServiceAbstraction {\n protected component = PasswordRepromptComponent;\n\n constructor(\n private modalService: ModalService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n protectedFields() {\n return [\"TOTP\", \"Password\", \"H_Field\", \"Card Number\", \"Security Code\"];\n }\n\n async showPasswordPrompt() {\n if (!(await this.enabled())) {\n return true;\n }\n\n const ref = this.modalService.open(this.component, { allowMultipleModals: true });\n\n if (ref == null) {\n return false;\n }\n\n const result = await ref.onClosedPromise();\n return result === true;\n }\n\n async enabled() {\n return !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { 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 { DeviceCryptoServiceAbstraction } from \"@bitwarden/common/abstractions/device-crypto.service.abstraction\";\nimport { DevicesApiServiceAbstraction } from \"@bitwarden/common/abstractions/devices/devices-api.service.abstraction\";\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 { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction\";\nimport {\n InternalOrganizationService,\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 { AuthService as AuthServiceAbstraction } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { LoginService as LoginServiceAbstraction } from \"@bitwarden/common/auth/abstractions/login.service\";\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 { AuthService } from \"@bitwarden/common/auth/services/auth.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/auth/services/key-connector.service\";\nimport { LoginService } from \"@bitwarden/common/auth/services/login.service\";\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 { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/platform/abstractions/state-migration.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 { StateMigrationService } from \"@bitwarden/common/platform/services/state-migration.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 { DeviceCryptoService } from \"@bitwarden/common/services/device-crypto.service.implementation\";\nimport { DevicesApiServiceImplementation } from \"@bitwarden/common/services/devices/devices-api.service.implementation\";\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 { VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeoutSettings.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 { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"@bitwarden/common/vault/abstractions/sync/sync-notifier.service.abstraction\";\nimport { SyncService as SyncServiceAbstraction } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { CipherService } from \"@bitwarden/common/vault/services/cipher.service\";\nimport { 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\";\n\nimport { AuthGuard } from \"../auth/guards/auth.guard\";\nimport { LockGuard } from \"../auth/guards/lock.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\";\nimport { PasswordRepromptService } from \"../vault/services/password-reprompt.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 LockGuard,\n ModalService,\n { provide: WINDOW, useValue: window },\n {\n provide: LOCALE_ID,\n useFactory: (i18nService: I18nServiceAbstraction) => i18nService.translationLocale,\n deps: [I18nServiceAbstraction],\n },\n {\n provide: LOCALES_DIRECTORY,\n useValue: \"./locales\",\n },\n {\n provide: SYSTEM_LANGUAGE,\n useFactory: (window: Window) => window.navigator.language,\n deps: [WINDOW],\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: true,\n },\n {\n provide: LOGOUT_CALLBACK,\n useFactory:\n (messagingService: MessagingServiceAbstraction) => (expired: boolean, userId?: string) =>\n messagingService.send(\"logout\", { expired: expired, userId: userId }),\n deps: [MessagingServiceAbstraction],\n },\n {\n provide: LOCKED_CALLBACK,\n useValue: null,\n },\n {\n provide: LOG_MAC_FAILURES,\n useValue: true,\n },\n {\n provide: AppIdServiceAbstraction,\n useClass: AppIdService,\n deps: [AbstractStorageService],\n },\n {\n provide: AuditServiceAbstraction,\n useClass: AuditService,\n deps: [CryptoFunctionServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AuthServiceAbstraction,\n useClass: AuthService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n AppIdServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n EnvironmentServiceAbstraction,\n StateServiceAbstraction,\n TwoFactorServiceAbstraction,\n I18nServiceAbstraction,\n EncryptService,\n PasswordStrengthServiceAbstraction,\n PolicyServiceAbstraction,\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 ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n i18nService,\n searchService,\n stateService,\n encryptService,\n fileUploadService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n I18nServiceAbstraction,\n SearchServiceAbstraction,\n StateServiceAbstraction,\n EncryptService,\n CipherFileUploadServiceAbstraction,\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 ],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useClass: VaultTimeoutService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n VaultTimeoutSettingsServiceAbstraction,\n LOCKED_CALLBACK,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n AbstractStorageService,\n SECURE_STORAGE,\n MEMORY_STORAGE,\n LogService,\n StateMigrationServiceAbstraction,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n {\n provide: 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 SyncNotifierServiceAbstraction,\n MessagingServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [\n CryptoServiceAbstraction,\n I18nServiceAbstraction,\n UserVerificationApiServiceAbstraction,\n ],\n },\n { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: InternalOrganizationService,\n useExisting: OrganizationServiceAbstraction,\n },\n {\n provide: OrganizationUserService,\n useClass: OrganizationUserServiceImplementation,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: ProviderServiceAbstraction,\n useClass: ProviderService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TwoFactorServiceAbstraction,\n useClass: TwoFactorService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n {\n provide: AbstractThemingService,\n useClass: ThemingService,\n },\n {\n provide: FormValidationErrorsServiceAbstraction,\n useClass: FormValidationErrorsService,\n },\n {\n provide: UserVerificationApiServiceAbstraction,\n useClass: UserVerificationApiService,\n deps: [ApiServiceAbstraction],\n },\n {\n provide: OrganizationApiServiceAbstraction,\n useClass: OrganizationApiService,\n // This is a slightly odd dependency tree for a specialized api service\n // it depends on SyncService so that new data can be retrieved through the sync\n // rather than updating the OrganizationService directly. Instead OrganizationService\n // subscribes to sync notifications and will update itself based on that.\n deps: [ApiServiceAbstraction, SyncServiceAbstraction],\n },\n {\n provide: SyncNotifierServiceAbstraction,\n useClass: SyncNotifierService,\n },\n {\n provide: ConfigServiceAbstraction,\n useClass: ConfigService,\n deps: [\n StateServiceAbstraction,\n ConfigApiServiceAbstraction,\n AuthServiceAbstraction,\n EnvironmentServiceAbstraction,\n ],\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: DeviceCryptoServiceAbstraction,\n useClass: DeviceCryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n CryptoServiceAbstraction,\n EncryptService,\n StateServiceAbstraction,\n AppIdServiceAbstraction,\n DevicesApiServiceAbstraction,\n ],\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 { SymmetricCryptoKey } from \"../../platform/models/domain/symmetric-crypto-key\";\nimport { PasswordStrengthServiceAbstraction } from \"../../tools/password-strength\";\nimport { AuthService as AuthServiceAbstraction } from \"../abstractions/auth.service\";\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 ) {}\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 );\n break;\n case AuthenticationType.UserApi:\n strategy = new UserApiLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.environmentService,\n this.keyConnectorService\n );\n break;\n case AuthenticationType.Passwordless:\n strategy = new PasswordlessLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n break;\n }\n\n const result = await strategy.logIn(credentials as any);\n\n if (result?.requiresTwoFactor) {\n this.saveState(strategy);\n }\n return result;\n }\n\n async logInTwoFactor(\n twoFactor: TokenTwoFactorRequest,\n captchaResponse: string\n ): Promise {\n if (this.logInStrategy == null) {\n throw new Error(this.i18nService.t(\"sessionTimeout\"));\n }\n\n try {\n const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse);\n\n // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again\n if (!result.requiresTwoFactor && !result.requiresCaptcha) {\n this.clearState();\n }\n return result;\n } catch (e) {\n // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe\n if (!(e instanceof ErrorResponse)) {\n this.clearState();\n }\n throw e;\n }\n }\n\n logOut(callback: () => void) {\n callback();\n this.messagingService.send(\"loggedOut\");\n }\n\n authingWithUserApiKey(): boolean {\n return this.logInStrategy instanceof UserApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n authingWithPasswordless(): boolean {\n return this.logInStrategy instanceof PasswordlessLogInStrategy;\n }\n\n async getAuthStatus(userId?: string): Promise {\n const isAuthenticated = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!isAuthenticated) {\n return AuthenticationStatus.LoggedOut;\n }\n\n // Keys aren't stored for a device that is locked or logged out\n // Make sure we're logged in before checking this, otherwise we could mix up those states\n const neverLock =\n (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) &&\n !(await this.stateService.getEverBeenUnlocked({ userId: userId }));\n if (neverLock) {\n // TODO: This also _sets_ the key so when we check memory in the next line it finds a key.\n // We should refactor here.\n await this.cryptoService.getKey(KeySuffixOptions.Auto, userId);\n }\n\n const hasKeyInMemory = await this.cryptoService.hasKeyInMemory(userId);\n if (!hasKeyInMemory) {\n return AuthenticationStatus.Locked;\n }\n\n return AuthenticationStatus.Unlocked;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfConfig: KdfConfig = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfConfig = new KdfConfig(\n preloginResponse.kdfIterations,\n preloginResponse.kdfMemory,\n preloginResponse.kdfParallelism\n );\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfConfig);\n }\n\n async 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 const encryptedKey = await this.cryptoService.rsaEncrypt(\n (\n await this.cryptoService.getKey()\n ).encKey,\n pubKey.buffer\n );\n let encryptedMasterPassword = null;\n if ((await this.stateService.getKeyHash()) != null) {\n encryptedMasterPassword = await this.cryptoService.rsaEncrypt(\n Utils.fromUtf8ToArray(await this.stateService.getKeyHash()),\n pubKey.buffer\n );\n }\n const request = new PasswordlessAuthRequest(\n encryptedKey.encryptedString,\n encryptedMasterPassword?.encryptedString,\n await this.appIdService.getAppId(),\n requestApproved\n );\n return await this.apiService.putAuthRequest(id, request);\n }\n\n private saveState(\n strategy:\n | UserApiLogInStrategy\n | PasswordLogInStrategy\n | SsoLogInStrategy\n | PasswordlessLogInStrategy\n ) {\n this.logInStrategy = strategy;\n this.startSessionTimeout();\n }\n\n private clearState() {\n this.logInStrategy = null;\n this.clearSessionTimeout();\n }\n\n private startSessionTimeout() {\n this.clearSessionTimeout();\n this.sessionTimeout = setTimeout(() => this.clearState(), sessionTimeoutLength);\n }\n\n private clearSessionTimeout() {\n if (this.sessionTimeout != null) {\n clearTimeout(this.sessionTimeout);\n }\n }\n}\n","import { 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.hasKey()) {\n this._folderViews.next(await this.decryptFolders(folders));\n }\n }\n\n private async decryptFolders(folders: Folder[]) {\n const decryptFolderPromises = folders.map((f) => f.decrypt());\n const decryptedFolders = await Promise.all(decryptFolderPromises);\n\n decryptedFolders.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t(\"noneFolder\");\n decryptedFolders.push(noneFolder);\n\n return decryptedFolders;\n }\n}\n","import { ApiService } from \"../../../abstractions/api.service\";\nimport { FolderApiServiceAbstraction } from \"../../../vault/abstractions/folder/folder-api.service.abstraction\";\nimport { InternalFolderService } from \"../../../vault/abstractions/folder/folder.service.abstraction\";\nimport { FolderData } from \"../../../vault/models/data/folder.data\";\nimport { Folder } from \"../../../vault/models/domain/folder\";\nimport { FolderRequest } from \"../../../vault/models/request/folder.request\";\nimport { FolderResponse } from \"../../../vault/models/response/folder.response\";\n\nexport class FolderApiService implements FolderApiServiceAbstraction {\n constructor(private folderService: InternalFolderService, private apiService: ApiService) {}\n\n async save(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.putFolder(folder.id, request);\n }\n\n const data = new FolderData(response);\n await this.folderService.upsert(data);\n }\n\n async delete(id: string): Promise {\n await this.deleteFolder(id);\n await this.folderService.delete(id);\n }\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/folders/\" + id, null, true, true);\n return new FolderResponse(r);\n }\n\n private async postFolder(request: FolderRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/folders\", request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.apiService.send(\"PUT\", \"/folders/\" + id, request, true, true);\n return new FolderResponse(r);\n }\n\n private deleteFolder(id: string): Promise {\n return this.apiService.send(\"DELETE\", \"/folders/\" + id, null, true, false);\n }\n}\n","import { 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 { InternalAccountService } from \"../../auth/abstractions/account.service\";\nimport { LogService } from \"../../platform/abstractions/log.service\";\nimport { MessagingService } from \"../../platform/abstractions/messaging.service\";\n\nexport class AccountServiceImplementation implements InternalAccountService {\n constructor(private messagingService: MessagingService, private logService: LogService) {}\n\n async delete(): Promise {\n try {\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n throw e;\n }\n }\n}\n","import { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { AvatarUpdateService as AvatarUpdateServiceAbstraction } from \"../../abstractions/account/avatar-update.service\";\nimport { ApiService } from \"../../abstractions/api.service\";\nimport { 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.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const collections = await this.getAll();\n decryptedCollections = await this.decryptMany(collections);\n\n await this.stateService.setDecryptedCollections(decryptedCollections);\n return decryptedCollections;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach((c) => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n /**\n * @deprecated August 30 2022: Moved to new Vault Filter Service\n * Remove when Desktop and Browser are updated\n */\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObjectFromList(collections, id) as TreeNode;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise {\n let collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach((c) => {\n collections[c.id] = c;\n });\n }\n\n await this.replace(collections);\n }\n\n async replace(collections: { [id: string]: CollectionData }): Promise {\n await this.clearCache();\n await this.stateService.setEncryptedCollections(collections);\n }\n\n async clear(userId?: string): Promise {\n await this.clearCache(userId);\n await this.stateService.setEncryptedCollections(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n delete collections[id];\n } else {\n (id as string[]).forEach((i) => {\n delete collections[i];\n });\n }\n\n await this.replace(collections);\n }\n}\n","import { concatMap, Observable, Subject } from \"rxjs\";\n\nimport { 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 Subject();\n urls: Observable = this.urlsSubject.asObservable();\n selectedRegion?: Region;\n initialized = true;\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 switch (region) {\n case Region.EU:\n this.setUrlsInternal(this.euUrls);\n break;\n case Region.US:\n this.setUrlsInternal(this.usUrls);\n break;\n case Region.SelfHosted:\n // if user saves with empty fields, default to US\n if (this.isEmpty()) {\n await this.setRegion(Region.US);\n }\n break;\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 isSelfHosted(): boolean {\n return ![\n \"http://vault.bitwarden.com\",\n \"https://vault.bitwarden.com\",\n \"http://vault.bitwarden.eu\",\n \"https://vault.bitwarden.eu\",\n \"http://vault.qa.bitwarden.pw\",\n \"https://vault.qa.bitwarden.pw\",\n ].includes(this.getWebVaultUrl());\n }\n}\n","import { ApiService as ApiServiceAbstraction } from \"../abstractions/api.service\";\nimport { 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 { 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 async postAuthRequest(request: PasswordlessCreateAuthRequest): Promise {\n const r = await this.send(\"POST\", \"/auth-requests/\", request, false, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthResponse(id: string, accessCode: string): Promise {\n const path = `/auth-requests/${id}/response?code=${accessCode}`;\n const r = await this.send(\"GET\", path, null, false, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthRequest(id: string): Promise {\n const path = `/auth-requests/${id}`;\n const r = await this.send(\"GET\", path, null, true, true);\n return new AuthRequestResponse(r);\n }\n\n async putAuthRequest(id: string, request: PasswordlessAuthRequest): Promise {\n const path = `/auth-requests/${id}`;\n const r = await this.send(\"PUT\", path, request, true, true);\n return new AuthRequestResponse(r);\n }\n\n async getAuthRequests(): Promise> {\n const path = `/auth-requests/`;\n const r = await this.send(\"GET\", path, null, true, true);\n return new ListResponse(r, AuthRequestResponse);\n }\n\n async getLastAuthRequest(): Promise {\n const requests = await this.getAuthRequests();\n const activeRequests = requests.data.filter((m) => !m.isAnswered && !m.isExpired);\n const lastRequest = activeRequests.sort((a: AuthRequestResponse, b: AuthRequestResponse) =>\n a.creationDate.localeCompare(b.creationDate)\n )[activeRequests.length - 1];\n return lastRequest;\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send(\"GET\", \"/accounts/profile\", null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send(\"GET\", \"/accounts/subscription\", null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send(\"GET\", \"/accounts/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/profile\", request, true, true);\n return new ProfileResponse(r);\n }\n\n async putAvatar(request: UpdateAvatarRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/avatar\", request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send(\"PUT\", \"/accounts/tax\", request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/prelogin\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send(\"POST\", \"/accounts/email-token\", request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/email\", request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/password\", request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-password\", request, true, false);\n }\n\n postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-key-connector-key\", request, true, false);\n }\n\n postSecurityStamp(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/security-stamp\", request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send(\"GET\", \"/accounts/revision-date\", null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send(\"POST\", \"/accounts/password-hint\", request, false, false);\n }\n\n async postRegister(request: RegisterRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/register\",\n request,\n false,\n true,\n this.environmentService.getIdentityUrl()\n );\n return new RegisterResponse(r);\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/accounts/premium\", data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send(\"POST\", \"/accounts/iap-check\", request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send(\"POST\", \"/accounts/reinstate-premium\", null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send(\"POST\", \"/accounts/cancel-premium\", null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/accounts/payment\", request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send(\"POST\", \"/accounts/license\", data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send(\"POST\", \"/accounts/keys\", request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/key\", request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send(\"POST\", \"/accounts/verify-email\", null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-email-token\", request, false, false);\n }\n\n postAccountVerifyPassword(\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: CipherBulkDeleteRequest\n ): Promise> {\n const r = await this.send(\"PUT\", \"/ciphers/restore\", request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n // Attachments APIs\n\n async getAttachmentData(\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ): Promise {\n const path =\n (emergencyAccessId != null ? \"/emergency-access/\" + emergencyAccessId + \"/\" : \"/ciphers/\") +\n cipherId +\n \"/attachment/\" +\n attachmentId;\n const r = await this.send(\"GET\", path, null, true, true);\n return new AttachmentResponse(r);\n }\n\n async postCipherAttachment(\n id: string,\n request: AttachmentRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/v2\", request, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment\", data, true, true);\n return new CipherResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment-admin\", data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/admin\",\n null,\n true,\n false\n );\n }\n\n postShareCipherAttachment(\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/share?organizationId=\" + organizationId,\n data,\n true,\n false\n );\n }\n\n async renewAttachmentUploadUrl(\n id: string,\n attachmentId: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/renew\",\n null,\n true,\n true\n );\n return new AttachmentUploadDataResponse(r);\n }\n\n postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionAccessDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new CollectionAccessDetailsResponse(r);\n }\n\n async getUserCollections(): Promise> {\n const r = await this.send(\"GET\", \"/collections\", null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections\",\n null,\n true,\n true\n );\n return new ListResponse(r, CollectionResponse);\n }\n\n async getManyCollectionsWithAccessDetails(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/details\",\n null,\n true,\n true\n );\n return new ListResponse(r, CollectionAccessDetailsResponse);\n }\n\n async getCollectionUsers(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(\n organizationId: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/collections\",\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollection(\n organizationId: string,\n id: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteCollection(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteManyCollections(request: CollectionBulkDeleteRequest): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + request.organizationId + \"/collections\",\n request,\n true,\n false\n );\n }\n\n deleteCollectionUser(\n organizationId: string,\n id: string,\n organizationUserId: string\n ): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Groups APIs\n\n async getGroupUsers(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r;\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, false, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postPublicImportDirectory(request: OrganizationImportRequest): Promise {\n return this.send(\"POST\", \"/public/organization/import\", request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send(\"GET\", \"/plans/sales-tax-rates/\", null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send(\"GET\", \"/settings/domains\", null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send(\"PUT\", \"/settings/domains\", request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? \"/sync?excludeDomains=true\" : \"/sync\";\n const r = await this.send(\"GET\", path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send(\"GET\", \"/two-factor\", null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/two-factor\",\n null,\n true,\n true\n );\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(\n organizationId: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/two-factor/get-duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn-challenge\", request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-recover\", request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(\n request: UpdateTwoFactorYubioOtpRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnRequest\n ): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send(\"PUT\", \"/two-factor/webauthn\", data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ): Promise {\n const r = await this.send(\"DELETE\", \"/two-factor/webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/disable\", request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(\n organizationId: string,\n request: TwoFactorProviderRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/disable\",\n request,\n true,\n true\n );\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send(\"POST\", \"/two-factor/recover\", request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email\", request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email-login\", request, false, false);\n }\n\n async getDeviceVerificationSettings(): Promise {\n const r = await this.send(\n \"GET\",\n \"/two-factor/get-device-verification-settings\",\n null,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async putDeviceVerificationSettings(\n request: DeviceVerificationRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/two-factor/device-verification-settings\",\n request,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/trusted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/granted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id + \"/policies\", null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send(\"PUT\", \"/emergency-access/\" + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send(\"DELETE\", \"/emergency-access/\" + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/invite\", request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reinvite\", null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/accept\", request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/confirm\", request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/initiate\", null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/approve\", null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reject\", null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/takeover\", null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(\n id: string,\n request: EmergencyAccessPasswordRequest\n ): Promise {\n await this.send(\"POST\", \"/emergency-access/\" + id + \"/password\", request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/view\", null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getCloudCommunicationsEnabled(): Promise {\n const r = await this.send(\"GET\", \"/organizations/connections/enabled\", null, true, true);\n return r as boolean;\n }\n\n async getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"GET\", `/organizations/connections/${id}/${type}`, null, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"POST\", \"/organizations/connections/\", request, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId?: string\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/connections/\" + organizationConnectionId,\n request,\n true,\n true\n );\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async deleteOrganizationConnection(id: string): Promise {\n return this.send(\"DELETE\", \"/organizations/connections/\" + id, null, true, false);\n }\n\n // Provider APIs\n\n async postProviderSetup(id: string, request: ProviderSetupRequest) {\n const r = await this.send(\"POST\", \"/providers/\" + id + \"/setup\", request, true, true);\n return new ProviderResponse(r);\n }\n\n async getProvider(id: string) {\n const r = await this.send(\"GET\", \"/providers/\" + id, null, true, true);\n return new ProviderResponse(r);\n }\n\n async putProvider(id: string, request: ProviderUpdateRequest) {\n const r = await this.send(\"PUT\", \"/providers/\" + id, request, true, true);\n return new ProviderResponse(r);\n }\n\n // Provider User APIs\n\n async getProviderUsers(\n providerId: string\n ): Promise> {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users\", null, true, true);\n return new ListResponse(r, ProviderUserUserDetailsResponse);\n }\n\n async getProviderUser(providerId: string, id: string): Promise {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users/\" + id, null, true, true);\n return new ProviderUserResponse(r);\n }\n\n postProviderUserInvite(providerId: string, request: ProviderUserInviteRequest): Promise {\n return this.send(\"POST\", \"/providers/\" + providerId + \"/users/invite\", request, true, false);\n }\n\n postProviderUserReinvite(providerId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyProviderUserReinvite(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async postProviderUserBulkConfirm(\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async deleteManyProviderUsers(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\"DELETE\", \"/providers/\" + providerId + \"/users\", request, true, true);\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n postProviderUserAccept(\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postProviderUserConfirm(\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postProviderUsersPublicKey(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkPublicKeyResponse);\n }\n\n putProviderUser(\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/providers/\" + providerId + \"/users/\" + id, request, true, false);\n }\n\n deleteProviderUser(providerId: string, id: string): Promise {\n return this.send(\"DELETE\", \"/providers/\" + providerId + \"/users/\" + id, null, true, false);\n }\n\n // Provider Organization APIs\n\n async getProviderClients(\n providerId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/providers/\" + providerId + \"/organizations\",\n null,\n true,\n true\n );\n return new ListResponse(r, ProviderOrganizationOrganizationDetailsResponse);\n }\n\n postProviderAddOrganization(\n providerId: string,\n request: ProviderAddOrganizationRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations/add\",\n request,\n true,\n false\n );\n }\n\n async postProviderCreateOrganization(\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations\",\n request,\n true,\n true\n );\n return new ProviderOrganizationResponse(r);\n }\n\n deleteProviderOrganization(providerId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/providers/\" + providerId + \"/organizations/\" + id,\n null,\n true,\n false\n );\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/ciphers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/organizations/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProvider(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/providers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProviderUser(\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/providers/\" + providerId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n const response = await this.fetch(\n new Request(this.environmentService.getEventsUrl() + \"/collect\", {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: \"POST\",\n body: JSON.stringify(request),\n headers: headers,\n })\n );\n if (response.status !== 200) {\n return Promise.reject(\"Event post failed.\");\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send(\"GET\", \"/users/\" + id + \"/public-key\", null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send(\"GET\", \"/hibp/breach?username=\" + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send(\"POST\", \"/bitpay-invoice\", request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send(\"POST\", \"/setup-payment\", null, true, true);\n return r as string;\n }\n\n // Key Connector\n\n async getUserKeyFromKeyConnector(keyConnectorUrl: string): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n\n return new KeyConnectorUserKeyResponse(await response.json());\n }\n\n async postUserKeyToKeyConnector(\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n body: JSON.stringify(request),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getKeyConnectorAlive(keyConnectorUrl: string) {\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/alive\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getOrganizationExport(organizationId: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/export\",\n null,\n true,\n true\n );\n return new OrganizationExportResponse(r);\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (await this.tokenService.tokenNeedsRefresh()) {\n await this.doAuthRefresh();\n accessToken = await this.tokenService.getToken();\n }\n return accessToken;\n }\n\n async fetch(request: Request): Promise {\n if (request.method === \"GET\") {\n request.headers.set(\"Cache-Control\", \"no-store\");\n request.headers.set(\"Pragma\", \"no-cache\");\n }\n request.headers.set(\"Bitwarden-Client-Name\", this.platformUtilsService.getClientType());\n request.headers.set(\n \"Bitwarden-Client-Version\",\n await this.platformUtilsService.getApplicationVersionNumber()\n );\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === \"\") {\n throw new Error(\"Organization Identifier was not provided.\");\n }\n const headers = new Headers({\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + path, {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"GET\",\n })\n );\n\n if (response.status === 200) {\n const body = await response.json();\n return new SsoPreValidateResponse(body);\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async postCreateSponsorship(\n sponsoredOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoredOrgId +\n \"/families-for-enterprise\",\n request,\n true,\n false\n );\n }\n\n async getSponsorshipSyncStatus(\n sponsoredOrgId: string\n ): Promise {\n const response = await this.send(\n \"GET\",\n \"/organization/sponsorship/\" + sponsoredOrgId + \"/sync-status\",\n null,\n true,\n true\n );\n return new OrganizationSponsorshipSyncStatusResponse(response);\n }\n\n async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoringOrganizationId,\n null,\n true,\n false\n );\n }\n\n async deleteRemoveSponsorship(sponsoringOrgId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/sponsored/\" + sponsoringOrgId,\n null,\n true,\n false\n );\n }\n\n async postPreValidateSponsorshipToken(sponsorshipToken: string): Promise {\n const r = await this.send(\n \"POST\",\n \"/organization/sponsorship/validate-token?sponsorshipToken=\" +\n encodeURIComponent(sponsorshipToken),\n null,\n true,\n true\n );\n return r as boolean;\n }\n\n async postRedeemSponsorship(\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/redeem?sponsorshipToken=\" + encodeURIComponent(sponsorshipToken),\n request,\n true,\n false\n );\n }\n\n async postResendSponsorshipOffer(sponsoringOrgId: string): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" + sponsoringOrgId + \"/families-for-enterprise/resend\",\n null,\n true,\n false\n );\n }\n\n protected async doAuthRefresh(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken != null && refreshToken !== \"\") {\n return this.doRefreshToken();\n }\n\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n if (!Utils.isNullOrWhitespace(clientId) && !Utils.isNullOrWhitespace(clientSecret)) {\n return this.doApiTokenRefresh();\n }\n\n throw new Error(\"Cannot refresh token, no refresh token or api keys are stored\");\n }\n\n protected async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === \"\") {\n throw new Error();\n }\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const decodedToken = await this.tokenService.decodeToken();\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify({\n grant_type: \"refresh_token\",\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"POST\",\n })\n );\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(\n tokenResponse.accessToken,\n tokenResponse.refreshToken,\n null\n );\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n protected async doApiTokenRefresh(): Promise {\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n const tokenRequest = new UserApiTokenRequest(\n clientId,\n clientSecret,\n new TokenTwoFactorRequest(),\n deviceRequest\n );\n\n const response = await this.postIdentityToken(tokenRequest);\n if (!(response instanceof IdentityTokenResponse)) {\n throw new Error(\"Invalid response received when refreshing api token\");\n }\n\n await this.tokenService.setToken(response.accessToken);\n }\n\n async send(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;\n\n // Prevent directory traversal from malicious paths\n const pathParts = path.split(\"?\");\n const requestUrl =\n apiUrl + Utils.normalizePath(pathParts[0]) + (pathParts.length > 1 ? `?${pathParts[1]}` : \"\");\n\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set(\"Authorization\", \"Bearer \" + authHeader);\n }\n if (body != null) {\n if (typeof body === \"string\") {\n requestInit.body = body;\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\");\n } else if (typeof body === \"object\") {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set(\"Accept\", \"application/json\");\n }\n if (alterHeaders != null) {\n alterHeaders(headers);\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(requestUrl, requestInit));\n\n const responseType = response.headers.get(\"content-type\");\n const responseIsJson = responseType != null && responseType.indexOf(\"application/json\") !== -1;\n if (hasResponse && response.status === 200 && responseIsJson) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false, authed);\n return Promise.reject(error);\n }\n }\n\n private async handleError(\n response: Response,\n tokenError: boolean,\n authed: boolean\n ): Promise {\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n if (authed) {\n if (\n response.status === 401 ||\n response.status === 403 ||\n (tokenError &&\n response.status === 400 &&\n responseJson != null &&\n responseJson.error === \"invalid_grant\")\n ) {\n await this.logoutCallback(true);\n return null;\n }\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params)\n .map((key) => {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\");\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.environmentService.hasBaseUrl()) {\n return \"include\";\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += \"?start=\" + start;\n }\n if (end != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"end=\" + end;\n }\n if (token != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"continuationToken=\" + token;\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"application/json\") > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"text\") > -1;\n }\n}\n","import { 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.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n password,\n model.key,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(\n model.file.fileName,\n file,\n model.cryptoKey\n );\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n 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.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach((send) => {\n promises.push(send.decrypt().then((f) => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n await this.stateService.setDecryptedSends(decSends);\n return decSends;\n }\n\n async 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(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.hasKey()) {\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 { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.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 { VaultTimeoutAction } from \"../../enums/vault-timeout-action.enum\";\nimport { CryptoService } from \"../../platform/abstractions/crypto.service\";\nimport { StateService } from \"../../platform/abstractions/state.service\";\n\nexport class VaultTimeoutSettingsService implements VaultTimeoutSettingsServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private tokenService: TokenService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async setVaultTimeoutOptions(timeout: number, action: 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.toggleKey();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.stateService.getProtectedPin();\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.stateService.getBiometricUnlock();\n }\n\n async getVaultTimeout(userId?: string): Promise {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n\n if (\n await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout, null, userId)\n ) {\n const policy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout, userId);\n // Remove negative values, and ensure it's smaller than maximum allowed value according to policy\n let timeout = Math.min(vaultTimeout, policy[0].data.minutes);\n\n if (vaultTimeout == null || timeout < 0) {\n timeout = policy[0].data.minutes;\n }\n\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n if (vaultTimeout !== timeout) {\n await this.stateService.setVaultTimeout(timeout, { userId: userId });\n }\n\n return timeout;\n }\n\n return vaultTimeout;\n }\n\n async getVaultTimeoutAction(userId?: string): Promise {\n let 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\n if (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 vaultTimeoutAction = action;\n }\n }\n\n return vaultTimeoutAction === VaultTimeoutAction.LogOut\n ? VaultTimeoutAction.LogOut\n : VaultTimeoutAction.Lock;\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEverBeenUnlocked(false, { userId: userId });\n await this.stateService.setDecryptedPinProtected(null, { userId: userId });\n await this.stateService.setProtectedPin(null, { userId: userId });\n }\n}\n","import { firstValueFrom } from \"rxjs\";\n\nimport { SearchService } from \"../../abstractions/search.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"../../abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"../../abstractions/vaultTimeout/vaultTimeoutSettings.service\";\nimport { AuthService } from \"../../auth/abstractions/auth.service\";\nimport { KeyConnectorService } from \"../../auth/abstractions/key-connector.service\";\nimport { AuthenticationStatus } from \"../../auth/enums/authentication-status\";\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 keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private authService: AuthService,\n private vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n private lockedCallback: (userId?: string) => Promise = null,\n private loggedOutCallback: (expired: boolean, userId?: string) => Promise = null\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n return;\n }\n\n const accounts = await firstValueFrom(this.stateService.accounts$);\n for (const userId in accounts) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n const pinSet = await this.vaultTimeoutSettingsService.isPinLockSet();\n const pinLock =\n (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1];\n\n if (!pinLock && !(await this.vaultTimeoutSettingsService.isBiometricLockSet())) {\n await this.logOut(userId);\n }\n }\n\n if (userId == null || userId === (await this.stateService.getUserId())) {\n this.searchService.clearIndex();\n await this.folderService.clearCache();\n }\n\n await this.stateService.setEverBeenUnlocked(true, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n\n await this.cryptoService.clearKey(false, userId);\n await this.cryptoService.clearOrgKeys(true, userId);\n await this.cryptoService.clearKeyPair(true, userId);\n await this.cryptoService.clearEncKey(true, userId);\n\n await this.cipherService.clearCache(userId);\n await this.collectionService.clearCache(userId);\n\n this.messagingService.send(\"locked\", { userId: userId });\n\n if (this.lockedCallback != null) {\n await this.lockedCallback(userId);\n }\n }\n\n async logOut(userId?: string): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback(false, userId);\n }\n }\n\n private async shouldLock(userId: string): Promise {\n const authStatus = await this.authService.getAuthStatus(userId);\n if (\n authStatus === AuthenticationStatus.Locked ||\n authStatus === AuthenticationStatus.LoggedOut\n ) {\n return false;\n }\n\n const vaultTimeout = await this.vaultTimeoutSettingsService.getVaultTimeout(userId);\n if (vaultTimeout == null || vaultTimeout < 0) {\n return false;\n }\n\n const lastActive = await this.stateService.getLastActive({ userId: userId });\n if (lastActive == null) {\n return false;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = (new Date().getTime() - lastActive) / 1000;\n return diffSeconds >= vaultTimeoutSeconds;\n }\n\n private async executeTimeoutAction(userId: string): Promise {\n const timeoutAction = await this.vaultTimeoutSettingsService.getVaultTimeoutAction(userId);\n timeoutAction === VaultTimeoutAction.LogOut\n ? await this.logOut(userId)\n : await this.lock(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 | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ): Promise {\n const wcLen = algorithm === \"sha256\" ? 256 : 512;\n const passwordBuf = this.toBuf(password);\n const saltBuf = this.toBuf(salt);\n\n const pbkdf2Params: Pbkdf2Params = {\n name: \"PBKDF2\",\n salt: saltBuf,\n iterations: iterations,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\n \"raw\",\n passwordBuf,\n { name: \"PBKDF2\" } as any,\n false,\n [\"deriveBits\"]\n );\n return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n }\n\n async argon2(\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n iterations: number,\n memory: number,\n parallelism: number\n ): Promise {\n if (!this.wasmSupported) {\n throw \"Webassembly support is required for the Argon2 KDF feature.\";\n }\n\n const passwordArr = new Uint8Array(this.toBuf(password));\n const saltArr = new Uint8Array(this.toBuf(salt));\n\n const result = await argon2.hash({\n pass: passwordArr,\n salt: saltArr,\n time: iterations,\n mem: memory,\n parallelism: parallelism,\n hashLen: 32,\n type: argon2.ArgonType.Argon2id,\n });\n argon2.unloadRuntime();\n return result.hash;\n }\n\n async hkdf(\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const saltBuf = this.toBuf(salt);\n const infoBuf = this.toBuf(info);\n\n const hkdfParams: HkdfParams = {\n name: \"HKDF\",\n salt: saltBuf,\n info: infoBuf,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", ikm, { name: \"HKDF\" } as any, false, [\n \"deriveBits\",\n ]);\n return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const hashLen = algorithm === \"sha256\" ? 32 : 64;\n if (outputByteSize > 255 * hashLen) {\n throw new Error(\"outputByteSize is too large.\");\n }\n const prkArr = new Uint8Array(prk);\n if (prkArr.length < hashLen) {\n throw new Error(\"prk is too small.\");\n }\n const infoBuf = this.toBuf(info);\n const infoArr = new Uint8Array(infoBuf);\n let runningOkmLength = 0;\n let previousT = new Uint8Array(0);\n const n = Math.ceil(outputByteSize / hashLen);\n const okm = new Uint8Array(n * hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + infoArr.length + 1);\n t.set(previousT);\n t.set(infoArr, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n okm.set(previousT, runningOkmLength);\n runningOkmLength += previousT.length;\n if (runningOkmLength >= outputByteSize) {\n break;\n }\n }\n return okm.slice(0, outputByteSize).buffer;\n }\n\n async hash(\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ): Promise {\n if (algorithm === \"md5\") {\n const md = algorithm === \"md5\" ? forge.md.md5.create() : forge.md.sha1.create();\n const valueBytes = this.toByteString(value);\n md.update(valueBytes, \"raw\");\n return Utils.fromByteStringToArray(md.digest().data).buffer;\n }\n\n const valueBuf = this.toBuf(value);\n return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n }\n\n async hmac(\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ): Promise {\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", key, signingAlgorithm, false, [\"sign\"]);\n return await this.subtle.sign(signingAlgorithm, impKey, value);\n }\n\n // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise {\n const macKey = await this.randomBytes(32);\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: \"SHA-256\" },\n };\n const impKey = await this.subtle.importKey(\"raw\", macKey, signingAlgorithm, false, [\"sign\"]);\n const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: string, key: string, algorithm: \"sha1\" | \"sha256\" | \"sha512\"): Promise {\n const hmac = forge.hmac.create();\n hmac.start(algorithm, key);\n hmac.update(value);\n const bytes = hmac.digest().getBytes();\n return Promise.resolve(bytes);\n }\n\n async compareFast(a: string, b: string): Promise {\n const rand = await this.randomBytes(32);\n const bytes = new Uint32Array(rand);\n const buffer = forge.util.createBuffer();\n for (let i = 0; i < bytes.length; i++) {\n buffer.putInt32(bytes[i]);\n }\n const macKey = buffer.getBytes();\n\n const hmac = forge.hmac.create();\n hmac.start(\"sha256\", macKey);\n hmac.update(a);\n const mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(b);\n const mac2 = hmac.digest().getBytes();\n\n const equals = mac1 === mac2;\n return equals;\n }\n\n async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"encrypt\",\n ]);\n return await this.subtle.encrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n aesDecryptFastParameters(\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ): DecryptParameters {\n const p = new DecryptParameters();\n if (key.meta != null) {\n p.encKey = key.meta.encKeyByteString;\n p.macKey = key.meta.macKeyByteString;\n }\n\n if (p.encKey == null) {\n p.encKey = forge.util.decode64(key.encKeyB64);\n }\n p.data = forge.util.decode64(data);\n p.iv = forge.util.decode64(iv);\n p.macData = p.iv + p.data;\n if (p.macKey == null && key.macKeyB64 != null) {\n p.macKey = forge.util.decode64(key.macKeyB64);\n }\n if (mac != null) {\n p.mac = forge.util.decode64(mac);\n }\n\n // cache byte string keys for later\n if (key.meta == null) {\n key.meta = {};\n }\n if (key.meta.encKeyByteString == null) {\n key.meta.encKeyByteString = p.encKey;\n }\n if (p.macKey != null && key.meta.macKeyByteString == null) {\n key.meta.macKeyByteString = p.macKey;\n }\n\n return p;\n }\n\n aesDecryptFast(parameters: DecryptParameters): Promise {\n const dataBuffer = forge.util.createBuffer(parameters.data);\n const decipher = forge.cipher.createDecipher(\"AES-CBC\", parameters.encKey);\n decipher.start({ iv: parameters.iv });\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString();\n return Promise.resolve(val);\n }\n\n async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"decrypt\",\n ]);\n return await this.subtle.decrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n async rsaEncrypt(\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"spki\", publicKey, rsaParams, false, [\"encrypt\"]);\n return await this.subtle.encrypt(rsaParams, impKey, data);\n }\n\n async rsaDecrypt(\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, false, [\"decrypt\"]);\n return await this.subtle.decrypt(rsaParams, impKey, data);\n }\n\n async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise {\n const rsaParams = {\n name: \"RSA-OAEP\",\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const impPrivateKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, true, [\n \"decrypt\",\n ]);\n const jwkPrivateKey = await this.subtle.exportKey(\"jwk\", impPrivateKey);\n const jwkPublicKeyParams = {\n kty: \"RSA\",\n e: jwkPrivateKey.e,\n n: jwkPrivateKey.n,\n alg: \"RSA-OAEP\",\n ext: true,\n };\n const impPublicKey = await this.subtle.importKey(\"jwk\", jwkPublicKeyParams, rsaParams, true, [\n \"encrypt\",\n ]);\n return await this.subtle.exportKey(\"spki\", impPublicKey);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n const rsaParams = {\n name: \"RSA-OAEP\",\n modulusLength: length,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const keyPair = (await this.subtle.generateKey(rsaParams, true, [\n \"encrypt\",\n \"decrypt\",\n ])) as CryptoKeyPair;\n const publicKey = await this.subtle.exportKey(\"spki\", keyPair.publicKey);\n const privateKey = await this.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return [publicKey, privateKey];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr.buffer as CsprngArray);\n }\n\n private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n let buf: ArrayBuffer;\n if (typeof value === \"string\") {\n buf = Utils.fromUtf8ToArray(value).buffer;\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | ArrayBuffer): string {\n let bytes: string;\n if (typeof value === \"string\") {\n bytes = forge.util.encodeUtf8(value);\n } else {\n bytes = Utils.fromBufferToByteString(value);\n }\n return bytes;\n }\n\n private toWebCryptoAlgorithm(algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"): string {\n if (algorithm === \"md5\") {\n throw new Error(\"MD5 is not supported in WebCrypto.\");\n }\n return algorithm === \"sha1\" ? \"SHA-1\" : algorithm === \"sha256\" ? \"SHA-256\" : \"SHA-512\";\n }\n\n // ref: https://stackoverflow.com/a/47880734/1090359\n private checkIfWasmSupported(): boolean {\n try {\n if (typeof WebAssembly === \"object\" && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(\n Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00)\n );\n if (module instanceof WebAssembly.Module) {\n return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n }\n } catch {\n return false;\n }\n return false;\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { EventUploadService as EventUploadServiceAbstraction } from \"../../abstractions/event/event-upload.service\";\nimport { 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 { 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) => void\n ) {}\n\n setUsesKeyConnector(usesKeyConnector: boolean) {\n return this.stateService.setUsesKeyConnector(usesKeyConnector);\n }\n\n async getUsesKeyConnector(): Promise {\n return await this.stateService.getUsesKeyConnector();\n }\n\n async userNeedsMigration() {\n const loggedInUsingSso = await this.tokenService.getIsExternal();\n const requiredByOrganization = (await this.getManagingOrganization()) != null;\n const userIsNotUsingKeyConnector = !(await this.getUsesKeyConnector());\n\n return loggedInUsingSso && requiredByOrganization && userIsNotUsingKeyConnector;\n }\n\n async migrateUser() {\n const organization = await this.getManagingOrganization();\n const key = await this.cryptoService.getKey();\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64);\n\n try {\n await this.apiService.postUserKeyToKeyConnector(\n organization.keyConnectorUrl,\n keyConnectorRequest\n );\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n\n await this.apiService.postConvertToKeyConnector();\n }\n\n async getAndSetKey(url: string) {\n try {\n const userKeyResponse = await this.apiService.getUserKeyFromKeyConnector(url);\n const keyArr = Utils.fromB64ToArray(userKeyResponse.key);\n const k = new SymmetricCryptoKey(keyArr);\n await this.cryptoService.setKey(k);\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n }\n\n async getManagingOrganization() {\n const orgs = await this.organizationService.getAll();\n return orgs.find(\n (o) =>\n o.keyConnectorEnabled &&\n o.type !== OrganizationUserType.Admin &&\n o.type !== OrganizationUserType.Owner &&\n !o.isProviderUser\n );\n }\n\n async convertNewSsoUserToKeyConnector(tokenResponse: IdentityTokenResponse, orgId: string) {\n const { kdf, kdfIterations, kdfMemory, kdfParallelism, keyConnectorUrl } = tokenResponse;\n const password = await this.cryptoFunctionService.randomBytes(64);\n const kdfConfig = new KdfConfig(kdfIterations, kdfMemory, kdfParallelism);\n\n const k = await this.cryptoService.makeKey(\n Utils.fromBufferToB64(password),\n await this.tokenService.getEmail(),\n kdf,\n kdfConfig\n );\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64);\n await this.cryptoService.setKey(k);\n\n const encKey = await this.cryptoService.makeEncKey(k);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n\n const [pubKey, privKey] = await this.cryptoService.makeKeyPair();\n\n try {\n await this.apiService.postUserKeyToKeyConnector(keyConnectorUrl, keyConnectorRequest);\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n\n const keys = new KeysRequest(pubKey, privKey.encryptedString);\n const setPasswordRequest = new SetKeyConnectorKeyRequest(\n encKey[1].encryptedString,\n kdf,\n kdfConfig,\n orgId,\n keys\n );\n await this.apiService.postSetKeyConnectorKey(setPasswordRequest);\n }\n\n async setConvertAccountRequired(status: boolean) {\n await this.stateService.setConvertAccountToKeyConnector(status);\n }\n\n async getConvertAccountRequired(): Promise {\n return await this.stateService.getConvertAccountToKeyConnector();\n }\n\n async removeConvertAccountRequired() {\n await this.stateService.setConvertAccountToKeyConnector(null);\n }\n\n async clear() {\n await this.removeConvertAccountRequired();\n }\n\n private handleKeyConnectorError(e: any) {\n this.logService.error(e);\n if (this.logoutCallback != null) {\n this.logoutCallback(false);\n }\n throw new Error(\"Key Connector error\");\n }\n}\n","import { CryptoService } from \"../../../platform/abstractions/crypto.service\";\nimport { I18nService } from \"../../../platform/abstractions/i18n.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 cryptoService: CryptoService,\n private i18nService: I18nService,\n private userVerificationApiService: UserVerificationApiServiceAbstraction\n ) {}\n\n /**\n * Create a new request model to be used for server-side verification\n * @param verification User-supplied verification data (Master Password or OTP)\n * @param requestClass The request model to create\n * @param alreadyHashed Whether the master password is already hashed\n */\n async buildRequest(\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) {\n this.validateInput(verification);\n\n const request =\n requestClass != null ? new requestClass() : (new SecretVerificationRequest() as T);\n\n if (verification.type === VerificationType.OTP) {\n request.otp = verification.secret;\n } else {\n request.masterPasswordHash = alreadyHashed\n ? verification.secret\n : await this.cryptoService.hashPassword(verification.secret, null);\n }\n\n return request;\n }\n\n /**\n * Used to verify the Master Password client-side, or send the OTP to the server for verification (with no other data)\n * Generally used for client-side verification only.\n * @param verification User-supplied verification data (Master Password or OTP)\n */\n async verifyUser(verification: Verification): Promise {\n this.validateInput(verification);\n\n if (verification.type === VerificationType.OTP) {\n const request = new VerifyOTPRequest(verification.secret);\n try {\n await this.userVerificationApiService.postAccountVerifyOTP(request);\n } catch (e) {\n throw new Error(this.i18nService.t(\"invalidVerificationCode\"));\n }\n } else {\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n verification.secret,\n null\n );\n if (!passwordValid) {\n throw new Error(this.i18nService.t(\"invalidMasterPassword\"));\n }\n }\n return true;\n }\n\n async requestOTP() {\n await this.userVerificationApiService.postAccountRequestOTP();\n }\n\n private validateInput(verification: Verification) {\n if (verification?.secret == null || verification.secret === \"\") {\n if (verification.type === VerificationType.OTP) {\n throw new Error(this.i18nService.t(\"verificationCodeRequired\"));\n } else {\n throw new Error(this.i18nService.t(\"masterPasswordRequired\"));\n }\n }\n }\n}\n","import { BehaviorSubject, concatMap, map, Observable } from \"rxjs\";\n\nimport { StateService } from \"../../../platform/abstractions/state.service\";\nimport {\n InternalOrganizationService as 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 const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/enable-secrets-manager\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n request,\n true,\n false\n );\n }\n\n putOrganizationUserGroups(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + userId + \"/reset-password-enrollment\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password\",\n request,\n true,\n false\n );\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n revokeOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/revoke\",\n null,\n true,\n false\n );\n }\n\n async revokeManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/revoke\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n restoreOrganizationUser(organizationId: string, id: string): Promise {\n return this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/restore\",\n null,\n true,\n false\n );\n }\n\n async restoreManyOrganizationUsers(\n organizationId: string,\n ids: string[]\n ): Promise> {\n const r = await this.apiService.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/restore\",\n new OrganizationUserBulkRequest(ids),\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n}\n","import { 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 { 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 { 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 { OrganizationEnrollSecretsManagerRequest } from \"../../models/request/organization/organization-enroll-secrets-manager.request\";\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\";\n\nexport class OrganizationApiService implements OrganizationApiServiceAbstraction {\n constructor(private apiService: ApiService, private syncService: SyncService) {}\n\n async get(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getBilling(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/billing\",\n null,\n true,\n true\n );\n return new BillingResponse(r);\n }\n\n async getSubscription(id: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/subscription\",\n null,\n true,\n true\n );\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getLicense(id: string, installationId: string): Promise {\n return this.apiService.send(\n \"GET\",\n \"/organizations/\" + id + \"/license?installationId=\" + installationId,\n null,\n true,\n true\n );\n }\n\n async getAutoEnrollStatus(identifier: string): Promise {\n const r = await this.apiService.send(\n \"GET\",\n \"/organizations/\" + identifier + \"/auto-enroll-status\",\n null,\n true,\n true\n );\n return new OrganizationAutoEnrollStatusResponse(r);\n }\n\n async create(request: OrganizationCreateRequest): Promise {\n const r = await this.apiService.send(\"POST\", \"/organizations\", request, true, true);\n // Forcing a sync will notify organization service that they need to repull\n await this.syncService.fullSync(true);\n return new OrganizationResponse(r);\n }\n\n async createLicense(data: FormData): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/licenses/self-hosted\",\n data,\n true,\n true\n );\n return new OrganizationResponse(r);\n }\n\n async save(id: string, request: OrganizationUpdateRequest): Promise {\n const r = await this.apiService.send(\"PUT\", \"/organizations/\" + id, request, true, true);\n const data = new OrganizationResponse(r);\n await this.syncService.fullSync(true);\n return data;\n }\n\n async updatePayment(id: string, request: PaymentRequest): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/payment\", request, true, false);\n }\n\n async upgrade(id: string, request: OrganizationUpgradeRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/upgrade\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async updateSubscription(\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/subscription\",\n request,\n true,\n false\n );\n }\n\n async updateSeats(id: string, request: SeatRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/seat\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async updateStorage(id: string, request: StorageRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/storage\",\n request,\n true,\n true\n );\n return new PaymentResponse(r);\n }\n\n async verifyBank(id: string, request: VerifyBankRequest): Promise {\n await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/verify-bank\",\n request,\n true,\n false\n );\n }\n\n async cancel(id: string): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/cancel\", null, true, false);\n }\n\n async reinstate(id: string): Promise {\n return this.apiService.send(\"POST\", \"/organizations/\" + id + \"/reinstate\", null, true, false);\n }\n\n async leave(id: string): Promise {\n await this.apiService.send(\"POST\", \"/organizations/\" + id + \"/leave\", null, true, false);\n await this.syncService.fullSync(true);\n }\n\n async delete(id: string, request: SecretVerificationRequest): Promise {\n await this.apiService.send(\"DELETE\", \"/organizations/\" + id, request, true, false);\n await this.syncService.fullSync(true);\n }\n\n async updateLicense(id: string, data: FormData): Promise {\n await this.apiService.send(\n \"POST\",\n \"/organizations/licenses/self-hosted/\" + id,\n data,\n true,\n false\n );\n }\n\n async importDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.apiService.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/import\",\n request,\n true,\n false\n );\n }\n\n async getOrCreateApiKey(id: string, request: OrganizationApiKeyRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async getApiKeyInformation(\n id: string,\n organizationApiKeyType: OrganizationApiKeyType = null\n ): Promise> {\n const uri =\n organizationApiKeyType === null\n ? \"/organizations/\" + id + \"/api-key-information\"\n : \"/organizations/\" + id + \"/api-key-information/\" + organizationApiKeyType;\n const r = await this.apiService.send(\"GET\", uri, null, true, true);\n return new ListResponse(r, OrganizationApiKeyInformationResponse);\n }\n\n async rotateApiKey(id: string, request: OrganizationApiKeyRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/rotate-api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async getTaxInfo(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async updateTaxInfo(id: string, request: OrganizationTaxInfoUpdateRequest): Promise {\n // Can't broadcast anything because the response doesn't have content\n return this.apiService.send(\"PUT\", \"/organizations/\" + id + \"/tax\", request, true, false);\n }\n\n async getKeys(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/keys\", null, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n async updateKeys(\n id: string,\n request: OrganizationKeysRequest\n ): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/keys\",\n request,\n true,\n true\n );\n // Not broadcasting anything because data on this response doesn't correspond to `Organization`\n return new OrganizationKeysResponse(r);\n }\n\n async getSso(id: string): Promise {\n const r = await this.apiService.send(\"GET\", \"/organizations/\" + id + \"/sso\", null, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async updateSso(id: string, request: OrganizationSsoRequest): Promise {\n const r = await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/sso\",\n request,\n true,\n true\n );\n // Not broadcasting anything because data on this response doesn't correspond to `Organization`\n return new OrganizationSsoResponse(r);\n }\n\n async selfHostedSyncLicense(id: string) {\n await this.apiService.send(\n \"POST\",\n \"/organizations/licenses/self-hosted/\" + id + \"/sync/\",\n null,\n true,\n false\n );\n }\n\n async updateEnrollSecretsManager(id: string, request: OrganizationEnrollSecretsManagerRequest) {\n await this.apiService.send(\n \"POST\",\n \"/organizations/\" + id + \"/enroll-secrets-manager\",\n request,\n true,\n true\n );\n }\n}\n","import { Subject } from \"rxjs\";\n\nimport { SyncNotifierService as SyncNotifierServiceAbstraction } from \"../../abstractions/sync/sync-notifier.service.abstraction\";\nimport { SyncEventArgs } from \"../../types/sync-event-args\";\n\n/**\n * This class should most likely have 0 dependencies because it will hopefully\n * be rolled into SyncService once upon a time.\n */\nexport class SyncNotifierService implements SyncNotifierServiceAbstraction {\n private _sync = new Subject();\n\n sync$ = this._sync.asObservable();\n\n next(event: SyncEventArgs): void {\n this._sync.next(event);\n }\n}\n","import { BehaviorSubject, concatMap, from, timer } from \"rxjs\";\n\nimport { AuthService } from \"../../../auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"../../../auth/enums/authentication-status\";\nimport { FeatureFlag } 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 } from \"../../abstractions/environment.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { ServerConfigData } from \"../../models/data/server-config.data\";\n\nexport class ConfigService implements ConfigServiceAbstraction {\n protected _serverConfig = new BehaviorSubject(null);\n serverConfig$ = this._serverConfig.asObservable();\n\n constructor(\n private stateService: StateService,\n private configApiService: ConfigApiServiceAbstraction,\n private authService: AuthService,\n private environmentService: EnvironmentService\n ) {\n // Re-fetch the server config every hour\n timer(0, 1000 * 3600)\n .pipe(concatMap(() => from(this.fetchServerConfig())))\n .subscribe((serverConfig) => {\n this._serverConfig.next(serverConfig);\n });\n\n this.environmentService.urls.subscribe(() => {\n this.fetchServerConfig();\n });\n }\n\n async fetchServerConfig(): Promise {\n try {\n const response = await this.configApiService.get();\n\n if (response != null) {\n const data = new ServerConfigData(response);\n const serverConfig = new ServerConfig(data);\n this._serverConfig.next(serverConfig);\n if ((await this.authService.getAuthStatus()) === AuthenticationStatus.LoggedOut) {\n return serverConfig;\n }\n await this.stateService.setServerConfig(data);\n this.environmentService.setCloudWebVaultUrl(data.environment?.cloudRegion);\n }\n } catch {\n return null;\n }\n }\n\n async getFeatureFlagBool(key: FeatureFlag, defaultValue = false): Promise {\n return await this.getFeatureFlag(key, defaultValue);\n }\n\n async getFeatureFlagString(key: FeatureFlag, defaultValue = \"\"): Promise {\n return await this.getFeatureFlag(key, defaultValue);\n }\n\n async getFeatureFlagNumber(key: FeatureFlag, defaultValue = 0): Promise {\n return await this.getFeatureFlag(key, defaultValue);\n }\n\n async getCloudRegion(defaultValue = \"US\"): Promise {\n const serverConfig = await this.buildServerConfig();\n return serverConfig.environment?.cloudRegion ?? defaultValue;\n }\n\n private async getFeatureFlag(key: FeatureFlag, defaultValue: T): Promise {\n const serverConfig = await this.buildServerConfig();\n if (\n serverConfig == null ||\n serverConfig.featureStates == null ||\n serverConfig.featureStates[key] == null\n ) {\n return defaultValue;\n }\n return serverConfig.featureStates[key] as T;\n }\n\n private async buildServerConfig(): Promise {\n const data = await this.stateService.getServerConfig();\n const domain = data ? new ServerConfig(data) : this._serverConfig.getValue();\n\n if (domain == null || !domain.isValid() || domain.expiresSoon()) {\n const value = await this.fetchServerConfig();\n return value ?? domain;\n }\n\n return domain;\n }\n}\n","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 { DevicesApiServiceAbstraction } from \"../../abstractions/devices/devices-api.service.abstraction\";\nimport { DeviceResponse } from \"../../abstractions/devices/responses/device.response\";\nimport { Utils } from \"../../platform/misc/utils\";\nimport { ApiService } from \"../api.service\";\n\nimport { TrustedDeviceKeysRequest } from \"./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 updateTrustedDeviceKeys(\n deviceIdentifier: string,\n devicePublicKeyEncryptedUserSymKey: string,\n userSymKeyEncryptedDevicePublicKey: string,\n deviceKeyEncryptedDevicePrivateKey: string\n ): Promise {\n const request = new TrustedDeviceKeysRequest(\n devicePublicKeyEncryptedUserSymKey,\n userSymKeyEncryptedDevicePublicKey,\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","import { DeviceKey } from \"../platform/models/domain/symmetric-crypto-key\";\n\nimport { DeviceResponse } from \"./devices/responses/device.response\";\n\nexport abstract class DeviceCryptoServiceAbstraction {\n trustDevice: () => Promise;\n getDeviceKey: () => Promise;\n}\n","import { DeviceCryptoServiceAbstraction } from \"../abstractions/device-crypto.service.abstraction\";\nimport { DevicesApiServiceAbstraction } from \"../abstractions/devices/devices-api.service.abstraction\";\nimport { DeviceResponse } from \"../abstractions/devices/responses/device.response\";\nimport { 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 { StateService } from \"../platform/abstractions/state.service\";\nimport { SymmetricCryptoKey, DeviceKey } from \"../platform/models/domain/symmetric-crypto-key\";\nimport { CsprngArray } from \"../types/csprng\";\n\nexport class DeviceCryptoService implements DeviceCryptoServiceAbstraction {\n constructor(\n protected cryptoFunctionService: CryptoFunctionService,\n protected cryptoService: CryptoService,\n protected encryptService: EncryptService,\n protected stateService: StateService,\n protected appIdService: AppIdService,\n protected devicesApiService: DevicesApiServiceAbstraction\n ) {}\n\n async trustDevice(): Promise {\n // Attempt to get user symmetric key\n const userSymKey: SymmetricCryptoKey = await this.cryptoService.getEncKey();\n\n // If user symmetric key is not found, throw error\n if (!userSymKey) {\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 devicePublicKeyEncryptedUserSymKey,\n userSymKeyEncryptedDevicePublicKey,\n deviceKeyEncryptedDevicePrivateKey,\n ] = await Promise.all([\n // Encrypt user symmetric key with the DevicePublicKey\n this.cryptoService.rsaEncrypt(userSymKey.encKey, devicePublicKey),\n\n // Encrypt devicePublicKey with user symmetric key\n this.encryptService.encrypt(devicePublicKey, userSymKey),\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 return this.devicesApiService.updateTrustedDeviceKeys(\n deviceIdentifier,\n devicePublicKeyEncryptedUserSymKey.encryptedString,\n userSymKeyEncryptedDevicePublicKey.encryptedString,\n deviceKeyEncryptedDevicePrivateKey.encryptedString\n );\n }\n\n async getDeviceKey(): Promise {\n // Check if device key is already stored\n const existingDeviceKey = await this.stateService.getDeviceKey();\n\n if (existingDeviceKey != null) {\n return existingDeviceKey;\n } else {\n return this.makeDeviceKey();\n }\n }\n\n private async makeDeviceKey(): Promise {\n // Create 512-bit device key\n const randomBytes: CsprngArray = await this.cryptoFunctionService.randomBytes(64);\n const deviceKey = new SymmetricCryptoKey(randomBytes) as DeviceKey;\n\n // Save device key in secure storage\n await this.stateService.setDeviceKey(deviceKey);\n\n return deviceKey;\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 { Component } from \"@angular/core\";\n\nimport { PasswordRepromptComponent as BasePasswordRepromptComponent } from \"@bitwarden/angular/vault/components/password-reprompt.component\";\n\n@Component({\n templateUrl: \"password-reprompt.component.html\",\n})\nexport class PasswordRepromptComponent extends BasePasswordRepromptComponent {}\n","
\n
\n
\n
\n

\n {{ \"passwordConfirmation\" | i18n }}\n

\n \n
\n
\n {{ \"passwordConfirmationDesc\" | i18n }}\n\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Injectable } from \"@angular/core\";\n\nimport { PasswordRepromptService as BasePasswordRepromptService } from \"@bitwarden/angular/vault/services/password-reprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\n@Injectable()\nexport class PasswordRepromptService extends BasePasswordRepromptService {\n component = PasswordRepromptComponent;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService } from \"@bitwarden/common/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 // 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 // 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 { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.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 { ContainerService } from \"@bitwarden/common/platform/services/container.service\";\nimport { EventUploadService } from \"@bitwarden/common/services/event/event-upload.service\";\nimport { VaultTimeoutService as VaultTimeoutService } from \"@bitwarden/common/services/vaultTimeout/vaultTimeout.service\";\n\nimport { I18nService } from \"../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: VaultTimeoutServiceAbstraction,\n private i18nService: I18nServiceAbstraction,\n private eventUploadService: EventUploadServiceAbstraction,\n private twoFactorService: TwoFactorServiceAbstraction,\n private stateService: StateServiceAbstraction,\n private cryptoService: CryptoServiceAbstraction,\n private themingService: AbstractThemingService,\n private encryptService: EncryptService\n ) {}\n\n init() {\n function getBaseUrl() {\n // If the base URL is `https://vaultwarden.example.com/base/path/`,\n // `window.location.href` should have one of the following forms:\n //\n // - `https://vaultwarden.example.com/base/path/`\n // - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]`\n //\n // We want to get to just `https://vaultwarden.example.com/base/path`.\n let baseUrl = window.location.href;\n baseUrl = baseUrl.replace(/#.*/, ''); // Strip off `#` and everything after.\n baseUrl = baseUrl.replace(/\\/+$/, ''); // Trim any trailing `/` chars.\n return baseUrl;\n }\n return async () => {\n // Workaround to ignore stateService.activeAccount until process.env.URLS are set\n // TODO: Remove this when implementing ticket PM-2637\n this.environmentService.initialized = false;\n await this.stateService.init();\n\n const urls = { base: getBaseUrl() };\n this.environmentService.setUrls(urls);\n this.environmentService.initialized = true;\n\n setTimeout(() => this.notificationsService.init(), 3000);\n (this.vaultTimeoutService as VaultTimeoutService).init(true);\n const locale = await this.stateService.getLocale();\n await (this.i18nService as I18nService).init(locale);\n (this.eventUploadService as EventUploadService).init(true);\n this.twoFactorService.init();\n const htmlEl = this.win.document.documentElement;\n htmlEl.classList.add(\"locale_\" + this.i18nService.translationLocale);\n await this.themingService.monitorThemeChanges();\n const containerService = new ContainerService(this.cryptoService, this.encryptService);\n containerService.attachToGlobal(this.win);\n };\n }\n}\n","import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from \"@angular/core\";\nimport * as jq from \"jquery\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalService as BaseModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { MessagingService } from \"@bitwarden/common/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 { LogService } from \"@bitwarden/common/platform/abstractions/log.service\";\nimport { StateMigrationService } from \"@bitwarden/common/platform/abstractions/state-migration.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 stateMigrationService: StateMigrationService,\n @Inject(STATE_FACTORY) stateFactory: StateFactory,\n @Inject(STATE_SERVICE_USE_CACHE) useAccountCache = true\n ) {\n super(\n storageService,\n secureStorageService,\n memoryStorageService,\n logService,\n stateMigrationService,\n stateFactory,\n useAccountCache\n );\n }\n\n async addAccount(account: Account) {\n // Apply web overrides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCiphers(options);\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCiphers(value, options);\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedCollections(options);\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedCollections(value, options);\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedFolders(options);\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedFolders(value, options);\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getEncryptedSends(options);\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultInMemoryOptions());\n return await super.setLastSync(value, options);\n }\n}\n","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 { StateMigrationService as StateMigrationServiceAbstraction } from \"@bitwarden/common/platform/abstractions/state-migration.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\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"@bitwarden/common/vault/abstractions/password-reprompt.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 { StateMigrationService } from \"../core/state-migration.service\";\nimport { CollectionAdminService } from \"../vault/core/collection-admin.service\";\nimport { PasswordRepromptService } from \"../vault/core/password-reprompt.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 {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY],\n },\n StateService,\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateService,\n },\n {\n provide: PasswordRepromptServiceAbstraction,\n useClass: PasswordRepromptService,\n },\n {\n provide: FileDownloadService,\n useClass: WebFileDownloadService,\n },\n {\n provide: LoginServiceAbstraction,\n useClass: LoginService,\n deps: [StateService],\n },\n 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 { StateMigrationService as BaseStateMigrationService } from \"@bitwarden/common/platform/services/state-migration.service\";\n\nimport { Account } from \"./state/account\";\nimport { GlobalState } from \"./state/global-state\";\n\nexport class StateMigrationService extends BaseStateMigrationService {\n protected async migrationStateFrom1To2(): Promise {\n await super.migrateStateFrom1To2();\n const globals = (await this.get(\"global\")) ?? this.stateFactory.createGlobal(null);\n globals.rememberEmail = (await this.get(\"rememberEmail\")) ?? globals.rememberEmail;\n await this.set(\"global\", globals);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ActivatedRoute, NavigationEnd, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { I18nService } from \"@bitwarden/common/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(\"pageTitle\", \"Vaultwarden\");\n let child = this.activatedRoute.firstChild;\n while (child.firstChild) {\n child = child.firstChild;\n }\n\n const titleId: string = child?.snapshot?.data?.titleId;\n const rawTitle: string = child?.snapshot?.data?.title;\n const updateUrl = !child?.snapshot?.data?.doNotSaveUrl ?? true;\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== \"\") {\n title = newTitle + \" | \" + title;\n }\n }\n this.titleService.setTitle(title);\n if (updateUrl) {\n this.setPreviousUrl(this.currentUrl);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","import { 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 false;\n }\n\n isSelfHost(): boolean {\n return false;\n }\n\n static isSelfHost(): boolean {\n return false;\n }\n\n copyToClipboard(text: string, options?: any): void | boolean {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if (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
Vaultwarden (unofficial Bitwarden® server)
\n
\n
\n ({{ \"webVault\" | i18n }})\n {{ \"versionNumber\" | i18n : version }}\n
\n
\n
\n","\n","import { Component, OnInit } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\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 { 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\n constructor(\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private providerService: ProviderService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private i18nService: I18nService\n ) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n this.userId = await this.tokenService.getUserId();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure providers and organizations are loaded\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n this.providers = await this.providerService.getAll();\n\n this.organizations$ = this.organizationService.memberOrganizations$.pipe(\n canAccessAdmin(this.i18nService)\n );\n }\n\n lock() {\n this.messagingService.send(\"lockVault\");\n }\n\n logOut() {\n this.messagingService.send(\"logout\");\n }\n}\n","import { 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/auth.guard\";\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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { AddEditComponent } from \"../../vault/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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-exposed-passwords-report\",\n templateUrl: \"exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, passwordRepromptService);\n }\n\n 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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n private logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, passwordRepromptService);\n }\n\n async ngOnInit() {\n 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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, passwordRepromptService);\n }\n\n async ngOnInit() {\n 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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, passwordRepromptService);\n }\n\n async ngOnInit() {\n 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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { BadgeTypes } from \"@bitwarden/components\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected 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","export class StorageRequest {\n storageGbAdjustment: number;\n}\n","
\n
\n \n

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

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

{{ apiKeyTitle | i18n }}

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

{{ apiKeyDescription | i18n }}

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

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

\n

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

\n

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

\n

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

\n \n
\n
\n \n \n {{ (isRotation ? \"rotateApiKey\" : \"viewApiKey\") | i18n }}\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { 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 \n {{\n \"licenseFileDesc\"\n | i18n\n : (!organizationId\n ? \"bitwarden_premium_license.json\"\n : \"bitwarden_organization_license.json\")\n }}\n
\n \n \n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { OrganizationApiServiceAbstraction } from \"@bitwarden/common/admin-console/abstractions/organization/organization-api.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@Component({\n selector: \"app-update-license\",\n templateUrl: \"update-license.component.html\",\n})\nexport class UpdateLicenseComponent {\n @Input() organizationId: string;\n @Input() showCancel = true;\n @Output() onUpdated = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction\n ) {}\n\n async submit() {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n try {\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n\n let updatePromise: Promise = null;\n if (this.organizationId == null) {\n updatePromise = this.apiService.postAccountLicense(fd);\n } else {\n updatePromise = this.organizationApiService.updateLicense(this.organizationId, fd);\n }\n\n this.formPromise = updatePromise.then(() => {\n return this.apiService.refreshIdentityToken();\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"licenseUploadSuccess\")\n );\n this.onUpdated.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","\n
\n

\n {{ 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: ArrayBuffer;\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 { 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","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 { 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","\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 = routeOrg?.canAccessSecretsManager\n ? routeOrg\n : orgs.find((o) => o.canAccessSecretsManager);\n\n /**\n * We can update this to the \"satisfies\" type upon upgrading to TypeScript 4.9\n * https://devblogs.microsoft.com/typescript/announcing-typescript-4-9/#satisfies\n */\n const products: Record<\"pm\" | \"sm\" | \"orgs\", ProductSwitcherItem> = {\n pm: {\n name: \"Password Manager\",\n icon: \"bwi-lock\",\n appRoute: \"/vault\",\n marketingRoute: \"https://bitwarden.com/products/personal/\",\n isActive: !this.router.url.includes(\"/sm/\"),\n },\n sm: {\n name: \"Secrets Manager Beta\",\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 { NgModule } from \"@angular/core\";\n\nimport { OrganizationSwitcherComponent } from \"../admin-console/components/organization-switcher.component\";\nimport { OrganizationCreateModule } from \"../admin-console/organizations/create/organization-create.module\";\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 { FamiliesForEnterpriseSetupComponent } from \"../admin-console/organizations/sponsorships/families-for-enterprise-setup.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 { CreateOrganizationComponent } from \"../admin-console/settings/create-organization.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 { AddCreditComponent } from \"../billing/settings/add-credit.component\";\nimport { AdjustPaymentComponent } from \"../billing/settings/adjust-payment.component\";\nimport { BillingHistoryViewComponent } from \"../billing/settings/billing-history-view.component\";\nimport { BillingHistoryComponent } from \"../billing/settings/billing-history.component\";\nimport { BillingSyncKeyComponent } from \"../billing/settings/billing-sync-key.component\";\nimport { OrganizationPlansComponent } from \"../billing/settings/organization-plans.component\";\nimport { PaymentMethodComponent } from \"../billing/settings/payment-method.component\";\nimport { PaymentComponent } from \"../billing/settings/payment.component\";\nimport { SubscriptionComponent } from \"../billing/settings/subscription.component\";\nimport { TaxInfoComponent } from \"../billing/settings/tax-info.component\";\nimport { UserSubscriptionComponent } from \"../billing/settings/user-subscription.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 { AdjustStorageComponent } from \"../settings/adjust-storage.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 { ChangePasswordComponent } from \"../settings/change-password.component\";\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 { PremiumComponent } from \"../settings/premium.component\";\nimport { ProfileComponent } from \"../settings/profile.component\";\nimport { PurgeVaultComponent } from \"../settings/purge-vault.component\";\nimport { SecurityKeysComponent } from \"../settings/security-keys.component\";\nimport { SecurityComponent } from \"../settings/security.component\";\nimport { SettingsComponent } from \"../settings/settings.component\";\nimport { UpdateKeyComponent } from \"../settings/update-key.component\";\nimport { UpdateLicenseComponent } from \"../settings/update-license.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 { EffluxDatesComponent as SendEffluxDatesComponent } from \"../tools/send/efflux-dates.component\";\nimport { SendComponent } from \"../tools/send/send.component\";\nimport { ToolsComponent } from \"../tools/tools.component\";\nimport { PasswordRepromptComponent } from \"../vault/components/password-reprompt.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 OrganizationCreateModule,\n RegisterFormModule,\n ProductSwitcherModule,\n UserVerificationModule,\n ChangeKdfModule,\n DynamicAvatarComponent,\n EnvironmentSelectorModule,\n AccountFingerprintComponent,\n ],\n declarations: [\n AcceptEmergencyComponent,\n AcceptFamilySponsorshipComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n BillingSyncKeyComponent,\n ChangeEmailComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\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 PasswordRepromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n 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 AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n ApiKeyComponent,\n AttachmentsComponent,\n ChangeEmailComponent,\n ChangePasswordComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DomainRulesComponent,\n DynamicAvatarComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n LockComponent,\n NavbarComponent,\n OrganizationSwitcherComponent,\n OrgAddEditComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrgAttachmentsComponent,\n OrgCollectionsComponent,\n OrgEventsComponent,\n OrgExposedPasswordsReportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgReusedPasswordsReportComponent,\n OrgToolsComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserConfirmComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordRepromptComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ChangeAvatarComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RemovePasswordComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SelectableAvatarComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n BillingHistoryComponent,\n BillingHistoryViewComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n LowKdfComponent,\n ],\n})\nexport class LooseComponentsModule {}\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, ModuleWithProviders, NgModule } from \"@angular/core\";\nimport {\n DefaultNoComponentGlobalConfig,\n GlobalConfig,\n Toast as BaseToast,\n ToastPackage,\n ToastrService,\n TOAST_CONFIG,\n} from \"ngx-toastr\";\n\n@Component({\n selector: \"[toast-component2]\",\n template: `\n \n ×\n \n
\n \n
\n
\n
\n {{ title }} [{{ duplicatesCount + 1 }}]\n
\n
\n \n {{ message }}\n \n \n
\n
\n
\n `,\n animations: [\n trigger(\"flyInOut\", [\n state(\"inactive\", style({ opacity: 0 })),\n state(\"active\", style({ opacity: 1 })),\n state(\"removed\", style({ opacity: 0 })),\n transition(\"inactive => active\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n transition(\"active => removed\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n ]),\n ],\n preserveWhitespaces: false,\n})\nexport class BitwardenToast extends BaseToast {\n constructor(protected toastrService: ToastrService, public toastPackage: ToastPackage) {\n super(toastrService, toastPackage);\n }\n}\n\nexport const BitwardenToastGlobalConfig: GlobalConfig = {\n ...DefaultNoComponentGlobalConfig,\n toastComponent: BitwardenToast,\n};\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitwardenToast],\n exports: [BitwardenToast],\n})\nexport class BitwardenToastModule {\n static forRoot(config: Partial = {}): ModuleWithProviders {\n return {\n ngModule: BitwardenToastModule,\n providers: [\n {\n provide: TOAST_CONFIG,\n useValue: {\n default: BitwardenToastGlobalConfig,\n config: config,\n },\n },\n ],\n };\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface CardRuleEntry {\n cardLength: number;\n blocks: number[];\n}\n\n// See https://baymard.com/checkout-usability/credit-card-patterns for\n// all possible credit card spacing patterns. For now, we just handle\n// the below.\nconst numberFormats: Record = {\n Visa: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Mastercard: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Maestro: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 13, blocks: [4, 4, 5] },\n { cardLength: 15, blocks: [4, 6, 5] },\n { cardLength: 19, blocks: [4, 4, 4, 4, 3] },\n ],\n Discover: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n \"Diners Club\": [{ cardLength: 14, blocks: [4, 6, 4] }],\n JCB: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n UnionPay: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 19, blocks: [6, 13] },\n ],\n Amex: [{ cardLength: 15, blocks: [4, 6, 5] }],\n 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 { 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(\n fingerprintMaterial,\n publicKey.buffer\n );\n\n if (fingerprint != null) {\n return fingerprint.join(\"-\");\n }\n\n return \"\";\n } catch {\n return \"\";\n }\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 { 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 { SelectCopyDirective } from \"./directives/select-copy.directive\";\nimport { StopClickDirective } from \"./directives/stop-click.directive\";\nimport { StopPropDirective } from \"./directives/stop-prop.directive\";\nimport { TrueFalseValueDirective } from \"./directives/true-false-value.directive\";\nimport { CreditCardNumberPipe } from \"./pipes/credit-card-number.pipe\";\nimport { 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 CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n UserTypePipe,\n IfFeatureDirective,\n FingerprintPipe,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n BitwardenToastModule,\n BoxRowDirective,\n CalloutComponent,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n CopyClickDirective,\n LaunchClickDirective,\n UserNamePipe,\n PasswordStrengthComponent,\n UserTypePipe,\n 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 { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared\";\n\nimport { BitActionDirective } from \"./bit-action.directive\";\nimport { BitSubmitDirective } from \"./bit-submit.directive\";\nimport { BitFormButtonDirective } from \"./form-button.directive\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n exports: [BitActionDirective, BitFormButtonDirective, BitSubmitDirective],\n})\nexport class AsyncActionsModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AvatarComponent } from \"./avatar.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AvatarComponent],\n declarations: [AvatarComponent],\n})\nexport class AvatarModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { BadgeModule } from \"../badge\";\nimport { SharedModule } from \"../shared\";\n\nimport { BadgeListComponent } from \"./badge-list.component\";\n\n@NgModule({\n imports: [SharedModule, BadgeModule],\n exports: [BadgeListComponent],\n declarations: [BadgeListComponent],\n})\nexport class BadgeListModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ButtonComponent } from \"./button.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ButtonComponent],\n declarations: [ButtonComponent],\n})\nexport class ButtonModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CalloutComponent } from \"./callout.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [CalloutComponent],\n declarations: [CalloutComponent],\n})\nexport class CalloutModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ColorPasswordComponent } from \"./color-password.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ColorPasswordComponent],\n declarations: [ColorPasswordComponent],\n})\nexport class ColorPasswordModule {}\n","\n \n\n {{ title }}\n\n
{{ content }}
\n\n \n \n {{ acceptButtonText }}\n \n\n \n {{ cancelButtonText }}\n \n \n
\n","import { DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\n\nimport {\n SimpleDialogType,\n SimpleDialogCloseType,\n Translation,\n} from \"@bitwarden/angular/services/dialog\";\nimport { SimpleDialogOptions } from \"@bitwarden/angular/services/dialog/simple-dialog-options\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\nconst DEFAULT_ICON: Record = {\n [SimpleDialogType.PRIMARY]: \"bwi-business\",\n [SimpleDialogType.SUCCESS]: \"bwi-star\",\n [SimpleDialogType.INFO]: \"bwi-info-circle\",\n [SimpleDialogType.WARNING]: \"bwi-exclamation-triangle\",\n [SimpleDialogType.DANGER]: \"bwi-error\",\n};\n\nconst DEFAULT_COLOR: Record = {\n [SimpleDialogType.PRIMARY]: \"tw-text-primary-500\",\n [SimpleDialogType.SUCCESS]: \"tw-text-success\",\n [SimpleDialogType.INFO]: \"tw-text-info\",\n [SimpleDialogType.WARNING]: \"tw-text-warning\",\n [SimpleDialogType.DANGER]: \"tw-text-danger\",\n};\n\n@Component({\n templateUrl: \"./simple-configurable-dialog.component.html\",\n})\nexport class SimpleConfigurableDialogComponent {\n SimpleDialogType = SimpleDialogType;\n SimpleDialogCloseType = SimpleDialogCloseType;\n\n get iconClasses() {\n return [\n this.simpleDialogOpts.icon ?? DEFAULT_ICON[this.simpleDialogOpts.type],\n DEFAULT_COLOR[this.simpleDialogOpts.type],\n ];\n }\n\n title: string;\n content: string;\n acceptButtonText: string;\n cancelButtonText: string;\n\n showCancelButton = this.simpleDialogOpts.cancelButtonText !== null;\n\n constructor(\n public dialogRef: DialogRef,\n private i18nService: I18nService,\n @Inject(DIALOG_DATA) public simpleDialogOpts?: SimpleDialogOptions\n ) {\n this.localizeText();\n }\n\n private localizeText() {\n this.title = this.translate(this.simpleDialogOpts.title);\n this.content = this.translate(this.simpleDialogOpts.content);\n this.acceptButtonText = this.translate(this.simpleDialogOpts.acceptButtonText, \"yes\");\n\n if (this.showCancelButton) {\n // If accept text is overridden, use cancel, otherwise no\n this.cancelButtonText = this.translate(\n this.simpleDialogOpts.cancelButtonText,\n this.simpleDialogOpts.acceptButtonText !== undefined ? \"cancel\" : \"no\"\n );\n }\n }\n\n private translate(translation: string | Translation, defaultKey?: string): string {\n // Translation interface use implies we must localize.\n if (typeof translation === \"object\") {\n return this.i18nService.t(translation.key, ...(translation.placeholders ?? []));\n }\n\n // Use string that is already translated or use default key post translate\n return translation ?? this.i18nService.t(defaultKey);\n }\n}\n","import {\n DEFAULT_DIALOG_CONFIG,\n Dialog,\n DialogConfig,\n DialogRef,\n DIALOG_SCROLL_STRATEGY,\n} from \"@angular/cdk/dialog\";\nimport { ComponentType, Overlay, OverlayContainer } from \"@angular/cdk/overlay\";\nimport {\n Inject,\n Injectable,\n Injector,\n OnDestroy,\n Optional,\n SkipSelf,\n TemplateRef,\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { filter, firstValueFrom, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport {\n DialogServiceAbstraction,\n SimpleDialogCloseType,\n} from \"@bitwarden/angular/services/dialog\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"@bitwarden/common/auth/enums/authentication-status\";\n\nimport { SimpleDialogOptions } from \"../../../angular/src/services/dialog/simple-dialog-options\";\n\nimport { SimpleConfigurableDialogComponent } from \"./simple-configurable-dialog/simple-configurable-dialog.component\";\n\n@Injectable()\nexport class DialogService extends Dialog implements OnDestroy, DialogServiceAbstraction {\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 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 (await firstValueFrom(dialogRef.closed)) == SimpleDialogCloseType.ACCEPT;\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 (see `SimpleDialogCloseType`)\n */\n openSimpleDialogRef(simpleDialogOptions: SimpleDialogOptions): DialogRef {\n return this.open(SimpleConfigurableDialogComponent, {\n data: simpleDialogOptions,\n disableClose: simpleDialogOptions.disableClose,\n });\n }\n}\n","import { DialogModule as CdkDialogModule } from \"@angular/cdk/dialog\";\nimport { NgModule } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\n\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-configurable-dialog/simple-configurable-dialog.component\";\nimport { IconDirective, SimpleDialogComponent } from \"./simple-dialog/simple-dialog.component\";\n\n@NgModule({\n imports: [SharedModule, IconButtonModule, CdkDialogModule, ButtonModule],\n declarations: [\n DialogCloseDirective,\n DialogTitleContainerDirective,\n DialogComponent,\n SimpleDialogComponent,\n SimpleConfigurableDialogComponent,\n IconDirective,\n ],\n exports: [\n CdkDialogModule,\n DialogComponent,\n SimpleDialogComponent,\n DialogCloseDirective,\n IconDirective,\n ],\n providers: [\n {\n provide: DialogServiceAbstraction,\n useClass: DialogService,\n },\n ],\n})\nexport class DialogModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitIconComponent } from \"./icon.component\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitIconComponent],\n exports: [BitIconComponent],\n})\nexport class IconModule {}\n","import { 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 { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { TypographyDirective } from \"./typography.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [TypographyDirective],\n declarations: [TypographyDirective],\n})\nexport class TypographyModule {}\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 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 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 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 { 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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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 { 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;\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: DialogServiceAbstraction\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)\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: SimpleDialogType.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);\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private close(action: CollectionDialogAction, collection?: CollectionResponse) {\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: DialogServiceAbstraction,\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 { CollectionAdminView } from \"../../core/views/collection-admin.view\";\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() editableCollections: 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 protected canEditCollection(collection: CollectionView): boolean {\n // We currently don't support editing collections from individual vault\n if (!(collection instanceof CollectionAdminView)) {\n return false;\n }\n\n // Only allow allow deletion if collection editing is enabled and not deleting \"Unassigned\"\n if (!this.editableCollections || collection.id === Unassigned) {\n return false;\n }\n\n const organization = this.allOrganizations.find((o) => o.id === collection.organizationId);\n\n // Otherwise, check if we can edit the specified collection\n return (\n organization?.canEditAnyCollection ||\n (organization?.canEditAssignedCollections && collection.assigned)\n );\n }\n\n protected canDeleteCollection(collection: CollectionView): boolean {\n // We currently don't support editing collections from individual vault\n if (!(collection instanceof CollectionAdminView)) {\n return false;\n }\n\n // Only allow allow deletion if collection editing is enabled and not deleting \"Unassigned\"\n if (!this.editableCollections || collection.id === Unassigned) {\n return false;\n }\n\n const organization = this.allOrganizations.find((o) => o.id === collection.organizationId);\n\n // Otherwise, check if we can delete the specified collection\n return (\n organization?.canDeleteAnyCollection ||\n (organization?.canDeleteAssignedCollections && collection.assigned)\n );\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 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 { 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 { 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 {{ \"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: { cipherId: 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: \"edit\", item: this.collection });\n }\n\n protected access() {\n this.onEvent.next({ type: \"viewAccess\", 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 { 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","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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherRepromptType } from \"@bitwarden/common/vault/enums/cipher-reprompt-type\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CardView } from \"@bitwarden/common/vault/models/view/card.view\";\nimport { CipherView } from \"@bitwarden/common/vault/models/view/cipher.view\";\nimport { 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\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\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: DialogServiceAbstraction\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\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 this.folders$ = this.folderService.folderViews$;\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventCollectionService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n !this.allowPersonal &&\n this.cipher.organizationId == null\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"personalOwnershipSubmitError\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null &&\n this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === \"\")\n ) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds =\n this.collections == null\n ? []\n : this.collections.filter((c) => (c as any).checked).map((c) => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode && !this.cloneMode ? \"editedItem\" : \"addedItem\")\n );\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? \"editedCipher\" : \"addedCipher\");\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n 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: SimpleDialogType.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 const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"restoreItem\" },\n content: { key: \"restoreItemConfirmation\" },\n type: SimpleDialogType.WARNING,\n });\n\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"overwriteUsername\" },\n content: { key: \"overwriteUsernameConfirmation\" },\n type: SimpleDialogType.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: SimpleDialogType.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 } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipher.id == null\n ? this.cipherService.createWithServer(cipher)\n : this.cipherService.updateWithServer(cipher);\n }\n\n protected deleteCipher() {\n 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","
\n
\n \n
\n

{{ title }}

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

{{ \"ownership\" | i18n }}

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

{{ \"collections\" | i18n }}

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

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n \n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherType } from \"@bitwarden/common/vault/enums/cipher-type\";\nimport { LoginUriView } from \"@bitwarden/common/vault/models/view/login-uri.view\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent implements OnInit, OnDestroy {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n showPasswordCount = false;\n\n protected totpInterval: number;\n protected override componentName = \"app-vault-add-edit\";\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: 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: DialogServiceAbstraction\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: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventCollectionService.collect(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","
\n
\n \n
\n

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

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

{{ \"newAttachment\" | i18n }}

\n \n \n {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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 { CipherBulkDeleteRequest } from \"@bitwarden/common/vault/models/request/cipher-bulk-delete.request\";\n\nexport interface BulkDeleteDialogParams {\n cipherIds?: string[];\n collectionIds?: string[];\n permanent?: boolean;\n organization?: Organization;\n}\n\nexport enum BulkDeleteDialogResult {\n Deleted = \"deleted\",\n Canceled = \"canceled\",\n}\n\n/**\n * Strongly typed helper to open a BulkDeleteDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openBulkDeleteDialog = (\n dialogService: DialogServiceAbstraction,\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\n constructor(\n @Inject(DIALOG_DATA) params: BulkDeleteDialogParams,\n private dialogRef: DialogRef,\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {\n this.cipherIds = params.cipherIds ?? [];\n this.collectionIds = params.collectionIds ?? [];\n this.permanent = params.permanent;\n this.organization = params.organization;\n }\n\n protected async cancel() {\n this.close(BulkDeleteDialogResult.Canceled);\n }\n\n protected submit = async () => {\n const deletePromises: Promise[] = [];\n if (this.cipherIds.length) {\n if (!this.organization || !this.organization.canEditAnyCollection) {\n deletePromises.push(this.deleteCiphers());\n } else {\n deletePromises.push(this.deleteCiphersAdmin());\n }\n }\n\n if (this.collectionIds.length && this.organization) {\n deletePromises.push(this.deleteCollections());\n }\n\n await Promise.all(deletePromises);\n\n if (this.cipherIds.length) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.permanent ? \"permanentlyDeletedItems\" : \"deletedItems\")\n );\n }\n if (this.collectionIds.length) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollections\")\n );\n }\n this.close(BulkDeleteDialogResult.Deleted);\n };\n\n private async deleteCiphers(): Promise {\n 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 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(this.collectionIds, this.organization.id);\n return await this.apiService.deleteManyCollections(deleteRequest);\n }\n\n private close(result: BulkDeleteDialogResult) {\n this.dialogRef.close(result);\n }\n}\n","\n \n {{ (permanent ? \"permanentlyDeleteSelected\" : \"deleteSelected\") | i18n }}\n \n \n \n \n {{ \"deleteSelectedItemsDesc\" | i18n : cipherIds.length }}\n \n \n {{ \"deleteSelectedCollectionsDesc\" | i18n : collectionIds.length }}\n \n {{ \"deleteSelectedConfirmation\" | i18n }}\n \n \n {{ \"permanentlyDeleteSelectedItemsDesc\" | i18n : cipherIds.length }}\n \n \n \n \n \n \n\n","import { DialogConfig, DialogRef, DIALOG_DATA } from \"@angular/cdk/dialog\";\nimport { Component, Inject } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\n\nexport interface BulkRestoreDialogParams {\n cipherIds: string[];\n}\n\nexport enum BulkRestoreDialogResult {\n Restored = \"restored\",\n Canceled = \"canceled\",\n}\n\n/**\n * Strongly typed helper to open a BulkRestoreDialog\n * @param dialogService Instance of the dialog service that will be used to open the dialog\n * @param config Configuration for the dialog\n */\nexport const openBulkRestoreDialog = (\n dialogService: DialogServiceAbstraction,\n config: DialogConfig\n) => {\n return dialogService.open(\n BulkRestoreDialogComponent,\n config\n );\n};\n\n@Component({\n templateUrl: \"bulk-restore-dialog.component.html\",\n})\nexport class BulkRestoreDialogComponent {\n cipherIds: string[];\n\n constructor(\n @Inject(DIALOG_DATA) params: BulkRestoreDialogParams,\n private dialogRef: DialogRef,\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {\n this.cipherIds = params.cipherIds ?? [];\n }\n\n submit = async () => {\n await this.cipherService.restoreManyWithServer(this.cipherIds);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItems\"));\n this.close(BulkRestoreDialogResult.Restored);\n };\n\n protected cancel() {\n this.close(BulkRestoreDialogResult.Canceled);\n }\n\n private close(result: BulkRestoreDialogResult) {\n this.dialogRef.close(result);\n }\n}\n","\n \n {{ \"restoreSelected\" | i18n }}\n \n \n {{ \"restoreSelectedItemsDesc\" | i18n : cipherIds.length }}\n \n \n \n \n \n\n","import { 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 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 { Component } from \"@angular/core\";\n\nimport { ModalRef } from \"@bitwarden/angular/components/modal/modal.ref\";\nimport { ModalConfig } from \"@bitwarden/angular/services/modal.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 { 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\";\n\n@Component({\n selector: \"app-enroll-master-password-reset\",\n templateUrl: \"enroll-master-password-reset.component.html\",\n})\nexport class EnrollMasterPasswordReset {\n organization: Organization;\n\n verification: Verification;\n formPromise: Promise;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private cryptoService: CryptoService,\n private syncService: SyncService,\n private logService: LogService,\n private modalRef: ModalRef,\n config: ModalConfig,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService\n ) {\n this.organization = config.data.organization;\n }\n\n async submit() {\n let toastStringRef = \"withdrawPasswordResetSuccess\";\n\n this.formPromise = this.userVerificationService\n .buildRequest(this.verification, OrganizationUserResetPasswordEnrollmentRequest)\n .then(async (request) => {\n // Set variables\n let keyString: string = null;\n\n // Retrieve Public Key\n const orgKeys = await this.organizationApiService.getKeys(this.organization.id);\n if (orgKeys == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(orgKeys.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n keyString = encryptedKey.encryptedString;\n toastStringRef = \"enrollPasswordResetSuccess\";\n\n // Create request and execute enrollment\n request.resetPasswordKey = keyString;\n await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n\n await this.syncService.fullSync(true);\n });\n try {\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(toastStringRef));\n this.modalRef.close();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n
\n \n
\n

\n {{ \"enrollAccountRecovery\" | i18n }}\n

\n \n ×\n \n
\n
\n \n {{ \"resetPasswordEnrollmentWarning\" | i18n }}\n \n \n
\n
\n \n \n \n {{ \"cancel\" | i18n }}\n \n \n
\n \n
\n\n","import { AfterContentInit, Component, Input } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SsoComponent } from \"@bitwarden/angular/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 { 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 ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n\n this.returnUri = \"/settings/organizations\";\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n","\n \n {{ \"linkSso\" | i18n }}\n\n","\n \n {{ \"loading\" | i18n }}\n\n\n \n \n {{ \"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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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: SimpleDialogType.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: SimpleDialogType.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 this.modalService.open(EnrollMasterPasswordReset, {\n allowMultipleModals: true,\n data: {\n organization: org,\n },\n });\n } else {\n // Remove reset password\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = \"ignored\";\n request.resetPasswordKey = null;\n this.actionPromise = this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"withdrawPasswordResetSuccess\")\n );\n this.syncService.fullSync(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n}\n","
\n
\n \n
\n
\n
\n {{ \"filters\" | i18n }}\n \n \n \n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { firstValueFrom, Subject } 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 { Component } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { CipherData } from \"@bitwarden/common/vault/models/data/cipher.data\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\nimport { CipherCreateRequest } from \"@bitwarden/common/vault/models/request/cipher-create.request\";\nimport { CipherRequest } from \"@bitwarden/common/vault/models/request/cipher.request\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../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: DialogServiceAbstraction\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 );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n\n data.edit = true;\n const cipher = new Cipher(data);\n this.originalCipher = cipher;\n return cipher;\n }\n\n protected encryptCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted\n ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { 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 { DOCUMENT } from \"@angular/common\";\nimport { Component, Inject, NgZone, OnDestroy, OnInit, SecurityContext } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport * as jq from \"jquery\";\nimport { IndividualConfig, ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport Swal from \"sweetalert2\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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/vaultTimeout/vaultTimeout.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\";\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: DialogServiceAbstraction\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 await this.configService.fetchServerConfig();\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: SimpleDialogType.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: SimpleDialogType.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: SimpleDialogType.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 if (typeof message.text === \"string\" && typeof crypto.subtle === 'undefined') {\n message.title = \"This browser requires HTTPS to use the web vault\";\n message.text = \"Check the Vaultwarden wiki for details on how to enable it\";\n }\n this.showToast(message);\n break;\n case \"setFullWidth\":\n this.setFullWidth();\n break;\n case \"convertAccountToKeyConnector\":\n this.router.navigate([\"/remove-password\"]);\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.pipe(takeUntil(this.destroy$)).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n for (const modal of modals) {\n (jq(modal) as any).modal(\"hide\");\n }\n\n if (document.querySelector(\".swal-modal\") != null) {\n Swal.close(undefined);\n }\n }\n });\n\n this.policyListService.addPolicies([\n new TwoFactorAuthenticationPolicy(),\n new MasterPasswordPolicy(),\n new ResetPasswordPolicy(),\n new PasswordGeneratorPolicy(),\n new SingleOrgPolicy(),\n new RequireSsoPolicy(),\n new PersonalOwnershipPolicy(),\n new DisableSendPolicy(),\n new SendOptionsPolicy(),\n ]);\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async logOut(expired: boolean, redirect = true) {\n await this.eventUploadService.uploadEvents();\n const userId = await this.stateService.getUserId();\n await Promise.all([\n this.syncService.setLastSync(new Date(0)),\n this.cryptoService.clearKeys(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.keyConnectorService.clear(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.platformUtilsService.showToast(\n \"warning\",\n this.i18nService.t(\"loggedOut\"),\n this.i18nService.t(\"loginExpired\")\n );\n }\n\n await this.stateService.clean({ userId: userId });\n Swal.close();\n if (redirect) {\n this.router.navigate([\"/\"]);\n }\n });\n }\n\n private async recordActivity() {\n const now = new Date().getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.stateService.setLastActive(now);\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n let message = \"\";\n\n const options: Partial = {};\n\n if (typeof msg.text === \"string\") {\n message = msg.text;\n } else if (msg.text.length === 1) {\n message = msg.text[0];\n } else {\n msg.text.forEach(\n (t: string) =>\n (message += \"

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

    \")\n );\n options.enableHtml = true;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n options.enableHtml = true;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n options.timeOut = msg.options.timeout;\n }\n }\n\n this.toastrService.show(message, msg.title, options, \"toast-\" + msg.type);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.stateService.getEnableFullWidth();\n if (enableFullWidth) {\n document.body.classList.add(\"full-width\");\n } else {\n document.body.classList.remove(\"full-width\");\n }\n }\n}\n","\n","
    \n

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

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

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

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

    {{ \"subscriptionPendingCanceled\" | i18n }}

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

    {{ \"updateLicense\" | i18n }}

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

    {{ \"storage\" | i18n }}

    \n

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

    \n
    \n \n {{ storagePercentage / 100 | percent }}\n
    \n \n \n
    \n
    \n \n \n {{ \"removeStorage\" | i18n }}\n \n
    \n \n
    \n
    \n
    \n
    \n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { SubscriptionResponse } from \"@bitwarden/common/billing/models/response/subscription.response\";\nimport { EnvironmentService } from \"@bitwarden/common/platform/abstractions/environment.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\";\n\n@Component({\n selector: \"app-user-subscription\",\n templateUrl: \"user-subscription.component.html\",\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n cloudWebVaultUrl: string;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private router: Router,\n private logService: LogService,\n private fileDownloadService: FileDownloadService,\n private dialogService: DialogServiceAbstraction,\n private environmentService: EnvironmentService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n this.cloudWebVaultUrl = this.environmentService.getCloudWebVaultUrl();\n }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n if (this.stateService.getHasPremiumPersonally()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate([\"/settings/subscription/premium\"]);\n return;\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.dialogService.openSimpleDialog({\n title: { key: \"cancelSubscription\" },\n content: { key: \"manageSubscriptionFromStore\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: SimpleDialogType.WARNING,\n });\n\n return;\n }\n\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"reinstateSubscription\" },\n content: { key: \"reinstateConfirmation\" },\n type: SimpleDialogType.WARNING,\n });\n\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postReinstatePremium();\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.dialogService.openSimpleDialog({\n title: { key: \"cancelSubscription\" },\n content: { key: \"manageSubscriptionFromStore\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: SimpleDialogType.WARNING,\n });\n\n return;\n }\n\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"cancelSubscription\" },\n content: { key: \"cancelConfirmation\" },\n type: SimpleDialogType.WARNING,\n });\n\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postCancelPremium();\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n downloadLicense() {\n if (this.loading) {\n return;\n }\n\n const licenseString = JSON.stringify(this.sub.license, null, 2);\n this.fileDownloadService.download({\n fileName: \"bitwarden_premium_license.json\",\n blobData: licenseString,\n });\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(load: boolean) {\n this.showUpdateLicense = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n if (this.usingInAppPurchase) {\n this.dialogService.openSimpleDialog({\n title: { key: add ? \"addStorage\" : \"removeStorage\" },\n content: { key: \"cannotPerformInAppPurchase\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: SimpleDialogType.WARNING,\n });\n\n return;\n }\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get usingInAppPurchase() {\n return this.sub != null ? this.sub.usingInAppPurchase : false;\n }\n\n get title(): string {\n return this.i18nService.t(this.selfHosted ? \"subscription\" : \"premiumMembership\");\n }\n}\n","
    \n

    {{ \"subscription\" | i18n }}

    \n
    \n
    \n

    {{ \"goPremium\" | i18n }}

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

    {{ \"premiumUpgradeUnlockFeatures\" | i18n }}

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

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

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

    {{ \"uploadLicenseFilePremium\" | i18n }}

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

    {{ \"addons\" | i18n }}

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

    {{ \"summary\" | i18n }}

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

    {{ \"paymentInformation\" | i18n }}

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

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

    \n
    \n {{ \"paymentChargedAnnually\" | i18n }}\n \n
    \n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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 { 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 { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\n\nimport { PaymentComponent } from \"../billing/settings/payment.component\";\nimport { TaxInfoComponent } from \"../billing/settings/tax-info.component\";\n\n@Component({\n selector: \"app-premium\",\n templateUrl: \"premium.component.html\",\n})\nexport class PremiumComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n canAccessPremium = false;\n selfHosted = false;\n premiumPrice = 10;\n familyPlanMaxUserCount = 6;\n storageGbPrice = 4;\n additionalStorage = 0;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private router: Router,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const premiumPersonally = await this.stateService.getHasPremiumPersonally();\n if (premiumPersonally) {\n this.router.navigate([\"/settings/subscription/user-subscription\"]);\n return;\n }\n }\n\n async submit() {\n let files: FileList = null;\n if (this.selfHosted) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n }\n\n try {\n if (this.selfHosted) {\n if (!this.tokenService.getEmailVerified()) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verifyEmailFirst\")\n );\n return;\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n return this.finalizePremium();\n });\n } else {\n this.formPromise = this.paymentComponent\n .createPaymentToken()\n .then((result) => {\n const fd = new FormData();\n fd.append(\"paymentMethodType\", result[1].toString());\n if (result[0] != null) {\n fd.append(\"paymentToken\", result[0]);\n }\n fd.append(\"additionalStorageGb\", (this.additionalStorage || 0).toString());\n fd.append(\"country\", this.taxInfoComponent.taxInfo.country);\n fd.append(\"postalCode\", this.taxInfoComponent.taxInfo.postalCode);\n return this.apiService.postPremium(fd);\n })\n .then((paymentResponse) => {\n if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n return this.paymentComponent.handleStripeCardPayment(\n paymentResponse.paymentIntentClientSecret,\n () => this.finalizePremium()\n );\n } else {\n return this.finalizePremium();\n }\n });\n }\n await this.formPromise;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async finalizePremium() {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"premiumUpdated\"));\n this.messagingService.send(\"purchasedPremium\");\n this.router.navigate([\"/settings/subscription/user-subscription\"]);\n }\n\n get additionalStorageTotal(): number {\n return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n }\n\n get subtotal(): number {\n return this.premiumPrice + this.additionalStorageTotal;\n }\n\n get taxCharges(): number {\n return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null\n ? (this.taxInfoComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total(): number {\n return this.subtotal + this.taxCharges || 0;\n }\n}\n","\n\n","import { Component } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\n\n@Component({\n selector: \"app-subscription\",\n templateUrl: \"subscription.component.html\",\n})\nexport class SubscriptionComponent {\n hasPremium: boolean;\n selfHosted: boolean;\n\n constructor(\n private stateService: StateService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async ngOnInit() {\n this.hasPremium = await this.stateService.getHasPremiumPersonally();\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n get subscriptionRoute(): string {\n return this.hasPremium ? \"user-subscription\" : \"premium\";\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { BillingHistoryViewComponent } from \"../../billing/settings/billing-history-view.component\";\nimport { PaymentMethodComponent } from \"../../billing/settings/payment-method.component\";\nimport { UserSubscriptionComponent } from \"../../billing/settings/user-subscription.component\";\nimport { PremiumComponent } from \"../../settings/premium.component\";\n\nimport { SubscriptionComponent } from \"./subscription.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SubscriptionComponent,\n data: { titleId: \"subscription\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"premium\" },\n {\n path: \"user-subscription\",\n component: UserSubscriptionComponent,\n data: { titleId: \"premiumMembership\" },\n },\n {\n path: \"premium\",\n component: PremiumComponent,\n data: { titleId: \"goPremium\" },\n },\n {\n path: \"payment-method\",\n component: PaymentMethodComponent,\n data: { titleId: \"paymentMethod\" },\n },\n {\n path: \"billing-history\",\n component: BillingHistoryViewComponent,\n data: { titleId: \"billingHistory\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SubscriptionRoutingModule {}\n","import { Directive, 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","
    \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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\n\nimport { OrganizationPlansComponent } from \"../../../billing/settings/organization-plans.component\";\nimport {\n DeleteOrganizationDialogResult,\n openDeleteOrganizationDialog,\n} from \"../settings/components\";\n\n@Component({\n selector: \"families-for-enterprise-setup\",\n templateUrl: \"families-for-enterprise-setup.component.html\",\n})\nexport class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy {\n @ViewChild(OrganizationPlansComponent, { static: false })\n set organizationPlansComponent(value: OrganizationPlansComponent) {\n if (!value) {\n return;\n }\n\n value.plan = PlanType.FamiliesAnnually;\n value.product = ProductType.Families;\n value.acceptingSponsorship = true;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this));\n }\n\n 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: DialogServiceAbstraction\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/settings/organization-plans.component\";\n\n@Component({\n selector: \"app-create-organization\",\n templateUrl: \"create-organization.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true })\n orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.plan === \"families\") {\n this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n this.orgPlansComponent.product = ProductType.Families;\n } else if (qParams.plan === \"teams\") {\n this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n this.orgPlansComponent.product = ProductType.Teams;\n } else if (qParams.plan === \"enterprise\") {\n this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n this.orgPlansComponent.product = ProductType.Enterprise;\n }\n });\n }\n}\n","
    \n
    \n
    \n
    \n

    {{ \"newOrganization\" | i18n }}

    \n
    \n

    {{ \"newOrganizationDesc\" | i18n }}

    \n \n
    \n
    \n
    \n","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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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: SimpleDialogType.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 { 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\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-organization\",\n templateUrl: \"accept-organization.component.html\",\n})\nexport class AcceptOrganizationComponent extends BaseAcceptComponent {\n orgName: string;\n\n protected requiredParameters: string[] = [\"organizationId\", \"organizationUserId\", \"token\"];\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n stateService: StateService,\n private cryptoService: CryptoService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private logService: LogService,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService,\n private messagingService: MessagingService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n const 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.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 [encryptedOrgShareKey, orgShareKey] = await this.cryptoService.makeShareKey();\n const [orgPublicKey, encryptedOrgPrivateKey] = await this.cryptoService.makeKeyPair(\n orgShareKey\n );\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n orgShareKey\n );\n\n request.key = encryptedOrgShareKey.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 encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Add reset password key to accept request\n request.resetPasswordKey = encryptedKey.encryptedString;\n }\n return request;\n }\n\n private async performResetPasswordAutoEnroll(qParams: Params): Promise {\n let policyList: Policy[] = null;\n try {\n const policies = await this.policyApiService.getPoliciesByToken(\n qParams.organizationId,\n qParams.token,\n qParams.email,\n qParams.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const result = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n qParams.organizationId\n );\n // Return true if policy enabled and auto-enroll enabled\n return result[1] && result[0].autoEnrollEnabled;\n }\n\n return false;\n }\n\n private async prepareOrganizationInvitation(qParams: Params): Promise {\n this.orgName = qParams.organizationName;\n if (this.orgName != null) {\n // Fix URL encoding of space issue with Angular\n this.orgName = this.orgName.replace(/\\+/g, \" \");\n }\n await this.stateService.setOrganizationInvitation(qParams);\n }\n}\n","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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 { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.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 { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\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 { 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 { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordStrengthServiceAbstraction } from \"@bitwarden/common/tools/password-strength\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\n\n@Directive()\nexport class LockComponent implements OnInit, OnDestroy {\n masterPassword = \"\";\n pin = \"\";\n showPassword = false;\n email: string;\n pinLock = false;\n webVaultHostname = \"\";\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n hideInput: boolean;\n\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected onSuccessfulSubmit: () => Promise;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\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 private keyConnectorService: KeyConnectorService,\n protected ngZone: NgZone,\n protected policyApiService: PolicyApiServiceAbstraction,\n protected policyService: InternalPolicyService,\n protected passwordStrengthService: PasswordStrengthServiceAbstraction,\n protected dialogService: DialogServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.stateService.activeAccount$\n .pipe(\n concatMap(async () => {\n await this.load();\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async submit() {\n if (this.pinLock) {\n return await this.handlePinRequiredUnlock();\n }\n\n await this.handleMasterPasswordRequiredUnlock();\n }\n\n async logOut() {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"logOut\" },\n content: { key: \"logOutConfirmation\" },\n acceptButtonText: { key: \"logOut\" },\n type: SimpleDialogType.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 success = (await this.cryptoService.getKey(KeySuffixOptions.Biometric)) != null;\n\n if (success) {\n await this.doContinue(false);\n }\n\n return success;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n const input = document.getElementById(this.pinLock ? \"pin\" : \"masterPassword\");\n if (this.ngZone.isStable) {\n input.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus());\n }\n }\n\n private async handlePinRequiredUnlock() {\n if (this.pin == null || this.pin === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"pinRequired\")\n );\n return;\n }\n\n return await this.doUnlockWithPin();\n }\n\n private async doUnlockWithPin() {\n let failed = true;\n try {\n const kdf = await this.stateService.getKdfType();\n const kdfConfig = await this.stateService.getKdfConfig();\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfConfig,\n await this.stateService.getDecryptedPinProtected()\n );\n const encKey = await this.cryptoService.getEncKey(key);\n const protectedPin = await this.stateService.getProtectedPin();\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n failed = decPin !== this.pin;\n if (!failed) {\n await this.setKeyAndContinue(key);\n }\n } else {\n const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfConfig);\n failed = false;\n await this.setKeyAndContinue(key);\n }\n } catch {\n failed = true;\n }\n\n if (failed) {\n this.invalidPinAttempts++;\n if (this.invalidPinAttempts >= 5) {\n this.messagingService.send(\"logout\");\n return;\n }\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidPin\")\n );\n }\n }\n\n private async handleMasterPasswordRequiredUnlock() {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return;\n }\n await this.doUnlockWithMasterPassword();\n }\n\n private async doUnlockWithMasterPassword() {\n const kdf = await this.stateService.getKdfType();\n const kdfConfig = await this.stateService.getKdfConfig();\n\n const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfConfig);\n const storedKeyHash = await this.cryptoService.getKeyHash();\n\n let passwordValid = false;\n\n if (storedKeyHash != null) {\n passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, key);\n } else {\n const request = new SecretVerificationRequest();\n const serverKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n request.masterPasswordHash = serverKeyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n const response = await this.formPromise;\n this.enforcedMasterPasswordOptions = MasterPasswordPolicyOptions.fromResponse(response);\n passwordValid = true;\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (!passwordValid) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\n if (this.pinSet[0]) {\n const protectedPin = await this.stateService.getProtectedPin();\n const encKey = await this.cryptoService.getEncKey(key);\n const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n const pinKey = await this.cryptoService.makePinKey(decPin, this.email, kdf, kdfConfig);\n await this.stateService.setDecryptedPinProtected(\n await this.cryptoService.encrypt(key.key, pinKey)\n );\n }\n await this.setKeyAndContinue(key, true);\n }\n private async setKeyAndContinue(key: SymmetricCryptoKey, evaluatePasswordAfterUnlock = false) {\n await this.cryptoService.setKey(key);\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 this.pinSet = await this.vaultTimeoutSettingsService.isPinLockSet();\n this.pinLock =\n (this.pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) ||\n this.pinSet[1];\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock =\n (await this.vaultTimeoutSettingsService.isBiometricLockSet()) &&\n ((await this.cryptoService.hasKeyStored(KeySuffixOptions.Biometric)) ||\n !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.stateService.getBiometricText();\n this.email = await this.stateService.getEmail();\n const usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.hideInput = usesKeyConnector && !this.pinLock;\n\n // Users with key connector and without biometric or pin has no MP to unlock using\n if (usesKeyConnector && !(this.biometricLock || this.pinLock)) {\n await this.vaultTimeoutService.logOut();\n }\n\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n const vaultUrl =\n webVaultUrl === \"https://vault.bitwarden.com\" ? \"https://bitwarden.com\" : webVaultUrl;\n this.webVaultHostname = Utils.getHostname(vaultUrl);\n }\n\n /**\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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { VaultTimeoutService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.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 { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.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 { 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\";\n\nimport { RouterService } from \"../core\";\n\n@Component({\n selector: \"app-lock\",\n templateUrl: \"lock.component.html\",\n})\nexport class LockComponent extends BaseLockComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n cryptoService: CryptoService,\n vaultTimeoutService: VaultTimeoutService,\n vaultTimeoutSettingsService: VaultTimeoutSettingsService,\n environmentService: EnvironmentService,\n private routerService: RouterService,\n stateService: StateService,\n apiService: ApiService,\n logService: LogService,\n keyConnectorService: KeyConnectorService,\n ngZone: NgZone,\n policyApiService: PolicyApiServiceAbstraction,\n policyService: InternalPolicyService,\n passwordStrengthService: PasswordStrengthServiceAbstraction,\n dialogService: DialogServiceAbstraction\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n messagingService,\n cryptoService,\n vaultTimeoutService,\n vaultTimeoutSettingsService,\n environmentService,\n stateService,\n apiService,\n logService,\n keyConnectorService,\n ngZone,\n policyApiService,\n policyService,\n passwordStrengthService,\n dialogService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = async () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl && previousUrl !== \"/\" && previousUrl.indexOf(\"lock\") === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigateByUrl(this.successRoute);\n };\n }\n}\n","export enum AuthRequestType {\n AuthenticateAndUnlock = 0,\n Unlock = 1,\n}\n","
    \n
    \n
    \n

    \n \n

    \n

    {{ \"yourVaultIsLocked\" | i18n }}

    \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n \n {{ \"loggedInAsEmailOn\" | i18n : email : webVaultHostname }}\n \n
    \n
    \n
    \n \n {{ \"unlock\" | i18n }} \n \n \n \n {{ \"logOut\" | i18n }}\n \n
    \n
    \n
    \n
    \n
    \n
    \n","import { AuthRequestType } from \"../../enums/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 { 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 { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\nimport { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\nimport { AuthRequestType } from \"@bitwarden/common/auth/enums/auth-request-type\";\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 { 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 { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\n\nimport { CaptchaProtectedComponent } from \"./captcha-protected.component\";\n\n@Directive()\nexport class LoginWithDeviceComponent\n extends CaptchaProtectedComponent\n implements OnInit, OnDestroy\n{\n private destroy$ = new Subject();\n email: string;\n showResendNotification = false;\n passwordlessRequest: PasswordlessCreateAuthRequest;\n fingerprintPhrase: string;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n private resendTimeout = 12000;\n private authRequestKeyPair: [publicKey: ArrayBuffer, privateKey: ArrayBuffer];\n\n constructor(\n protected router: Router,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService,\n private appIdService: AppIdService,\n private passwordGenerationService: 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 ) {\n super(environmentService, i18nService, platformUtilsService);\n\n const navigation = this.router.getCurrentNavigation();\n if (navigation) {\n this.email = this.loginService.getEmail();\n }\n\n //gets signalR push notification\n this.authService\n .getPushNotificationObs$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((id) => {\n this.confirmResponse(id);\n });\n }\n\n async ngOnInit() {\n if (!this.email) {\n this.router.navigate([\"/login\"]);\n return;\n }\n\n this.startPasswordlessLogin();\n }\n\n async startPasswordlessLogin() {\n this.showResendNotification = false;\n\n try {\n await this.buildAuthRequest();\n const reqResponse = await this.apiService.postAuthRequest(this.passwordlessRequest);\n\n if (reqResponse.id) {\n this.anonymousHubService.createHubConnection(reqResponse.id);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n setTimeout(() => {\n this.showResendNotification = true;\n }, this.resendTimeout);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.anonymousHubService.stopHubConnection();\n }\n\n private async confirmResponse(requestId: string) {\n try {\n const response = await this.apiService.getAuthResponse(\n requestId,\n this.passwordlessRequest.accessCode\n );\n\n if (!response.requestApproved) {\n return;\n }\n\n const credentials = await this.buildLoginCredentials(requestId, response);\n const loginResponse = await this.authService.logIn(credentials);\n\n if (loginResponse.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (loginResponse.forcePasswordReset != ForceResetPasswordReason.None) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n await this.setRememberEmailValues();\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (error) {\n if (error instanceof ErrorResponse) {\n this.router.navigate([\"/login\"]);\n this.validationService.showError(error);\n return;\n }\n\n this.logService.error(error);\n }\n }\n\n async setRememberEmailValues() {\n const rememberEmail = this.loginService.getRememberEmail();\n const rememberedEmail = this.loginService.getEmail();\n await this.stateService.setRememberedEmail(rememberEmail ? rememberedEmail : null);\n this.loginService.clearValues();\n }\n\n private async buildAuthRequest() {\n this.authRequestKeyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const deviceIdentifier = await this.appIdService.getAppId();\n const publicKey = Utils.fromBufferToB64(this.authRequestKeyPair[0]);\n const accessCode = await this.passwordGenerationService.generatePassword({ length: 25 });\n\n this.fingerprintPhrase = (\n await this.cryptoService.getFingerprint(this.email, this.authRequestKeyPair[0])\n ).join(\"-\");\n\n this.passwordlessRequest = new PasswordlessCreateAuthRequest(\n this.email,\n deviceIdentifier,\n publicKey,\n AuthRequestType.AuthenticateAndUnlock,\n accessCode\n );\n }\n\n private async buildLoginCredentials(\n requestId: string,\n response: AuthRequestResponse\n ): Promise {\n const decKey = await this.cryptoService.rsaDecrypt(response.key, this.authRequestKeyPair[1]);\n const decMasterPasswordHash = await this.cryptoService.rsaDecrypt(\n response.masterPasswordHash,\n this.authRequestKeyPair[1]\n );\n const key = new SymmetricCryptoKey(decKey);\n const localHashedPassword = Utils.fromBufferToUtf8(decMasterPasswordHash);\n\n return new PasswordlessLogInCredentials(\n this.email,\n this.passwordlessRequest.accessCode,\n requestId,\n key,\n localHashedPassword\n );\n }\n}\n","\n\n\n
    \n \n

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

    \n\n \n

    {{ \"logInInitiated\" | i18n }}

    \n\n
    \n

    {{ \"notificationSentDevice\" | i18n }}

    \n\n

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

    \n
    \n\n
    \n

    {{ \"fingerprintPhraseHeader\" | i18n }}

    \n

    \n {{ fingerprintPhrase }}\n

    \n
    \n\n \n\n
    \n\n
    \n {{ \"loginWithDeviceEnabledInfo\" | i18n }}\n {{ \"viewAllLoginOptions\" | i18n }}\n
    \n
    \n \n\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { LoginWithDeviceComponent as BaseLoginWithDeviceComponent } from \"@bitwarden/angular/auth/components/login-with-device.component\";\nimport { AnonymousHubService } from \"@bitwarden/common/abstractions/anonymousHub.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 { 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 ) {\n super(\n router,\n cryptoService,\n cryptoFunctionService,\n appIdService,\n passwordGenerationService,\n apiService,\n authService,\n logService,\n environmentService,\n i18nService,\n platformUtilsService,\n anonymousHubService,\n validationService,\n stateService,\n loginService\n );\n }\n}\n","import { Directive, ElementRef, NgZone, OnInit, ViewChild } from \"@angular/core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\nimport { DevicesApiServiceAbstraction } from \"@bitwarden/common/abstractions/devices/devices-api.service.abstraction\";\nimport { AuthService } from \"@bitwarden/common/auth/abstractions/auth.service\";\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 {\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: [\"\", [Validators.required, Validators.minLength(8)]],\n rememberEmail: [false],\n });\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n\n get loggedEmail() {\n return this.formGroup.value.email;\n }\n\n constructor(\n protected 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.subscribe((params) => {\n if (params != null) {\n const queryParamsEmail = params[\"email\"];\n if (queryParamsEmail != null && queryParamsEmail.indexOf(\"@\") > -1) {\n this.formGroup.get(\"email\").setValue(queryParamsEmail);\n this.loginService.setEmail(queryParamsEmail);\n this.paramEmailSet = true;\n }\n }\n });\n let email = this.loginService.getEmail();\n\n if (email == null || email === \"\") {\n email = await this.stateService.getRememberedEmail();\n }\n\n if (!this.paramEmailSet) {\n this.formGroup.get(\"email\")?.setValue(email ?? \"\");\n }\n let rememberEmail = this.loginService.getRememberEmail();\n if (rememberEmail == null) {\n rememberEmail = (await this.stateService.getRememberedEmail()) != null;\n }\n this.formGroup.get(\"rememberEmail\")?.setValue(rememberEmail);\n }\n\n async submit(showToast = true) {\n const data = this.formGroup.value;\n\n await this.setupCaptcha();\n\n this.formGroup.markAllAsTouched();\n\n //web\n if (this.formGroup.invalid && !showToast) {\n return;\n }\n\n //desktop, browser; This should be removed once all clients use reactive forms\n if (this.formGroup.invalid && showToast) {\n const errorText = this.getErrorToastMessage();\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errorText);\n return;\n }\n\n try {\n const credentials = new PasswordLogInCredentials(\n data.email,\n data.masterPassword,\n this.captchaToken,\n null\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n this.setFormValues();\n await this.loginService.saveEmailSettings();\n if (this.handleCaptchaRequired(response)) {\n return;\n } else if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (response.forcePasswordReset != 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 private getErrorToastMessage() {\n const error: AllValidationErrors = this.formValidationErrorService\n .getFormValidationErrors(this.formGroup.controls)\n .shift();\n\n if (error) {\n switch (error.errorName) {\n case \"email\":\n return this.i18nService.t(\"invalidEmail\");\n default:\n return this.i18nService.t(this.errorTag(error));\n }\n }\n\n return;\n }\n\n private errorTag(error: AllValidationErrors): string {\n const name = error.errorName.charAt(0).toUpperCase() + error.errorName.slice(1);\n return `${error.controlName}${name}`;\n }\n\n async getLoginWithDevice(email: string) {\n try {\n const deviceIdentifier = await this.appIdService.getAppId();\n 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, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { LoginComponent as BaseLoginComponent } from \"@bitwarden/angular/auth/components/login.component\";\nimport { FormValidationErrorsService } from \"@bitwarden/angular/platform/abstractions/form-validation-errors.service\";\nimport { DevicesApiServiceAbstraction } from \"@bitwarden/common/abstractions/devices/devices-api.service.abstraction\";\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 { LoginService } from \"@bitwarden/common/auth/abstractions/login.service\";\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})\nexport class LoginComponent extends BaseLoginComponent implements OnInit, OnDestroy {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n showPasswordless = false;\n\n private destroy$ = new Subject();\n\n constructor(\n 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 ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async goAfterLogIn() {\n const masterPassword = this.formGroup.value.masterPassword;\n\n // Check master password against policy\n if (this.enforcedPasswordPolicyOptions != null) {\n const strengthResult = this.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","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.hashPassword(this.masterPassword, key);\n this.formPromise = this.apiService.postTwoFactorRecover(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"twoStepRecoverDisabled\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
    \n
    \n
    \n

    {{ \"recoverAccountTwoStep\" | i18n }}

    \n
    \n
    \n

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

    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
    \n
    \n
    \n
    \n
    \n
    \n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { 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\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\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: DialogServiceAbstraction\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: SimpleDialogType.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 { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\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: DialogServiceAbstraction\n ) {}\n\n async ngOnInit() {\n this.email = await this.stateService.getEmail();\n this.policyService\n .masterPasswordPolicyOptions$()\n .pipe(takeUntil(this.destroy$))\n .subscribe(\n (enforcedPasswordPolicyOptions) =>\n (this.enforcedPolicyOptions ??= enforcedPasswordPolicyOptions)\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n const email = await this.stateService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.stateService.getKdfType();\n }\n if (this.kdfConfig == null) {\n this.kdfConfig = await this.stateService.getKdfConfig();\n }\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n email.trim().toLowerCase(),\n this.kdf,\n this.kdfConfig\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return false;\n }\n if (this.masterPassword.length < 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: SimpleDialogType.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: SimpleDialogType.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: SimpleDialogType.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: SimpleDialogType.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 { SymmetricCryptoKey } 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\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"../auth/components/change-password.component\";\nimport { DialogServiceAbstraction } from \"../services/dialog\";\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: DialogServiceAbstraction\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 key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new SetPasswordRequest(\n masterPasswordHash,\n encKey[1].encryptedString,\n this.hint,\n this.identifier,\n new KeysRequest(keys[0], keys[1].encryptedString),\n this.kdf,\n this.kdfConfig.iterations,\n this.kdfConfig.memory,\n this.kdfConfig.parallelism\n );\n try {\n if (this.resetPasswordAutoEnroll) {\n this.formPromise = this.apiService\n .setPassword(request)\n .then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n return this.organizationApiService.getKeys(this.orgId);\n })\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n const userId = await this.stateService.getUserId();\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const userEncKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(\n userEncKey.key,\n publicKey.buffer\n );\n\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.masterPasswordHash = masterPasswordHash;\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n return this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n this.orgId,\n userId,\n resetRequest\n );\n });\n } else {\n this.formPromise = this.apiService.setPassword(request).then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n });\n }\n\n await this.formPromise;\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n private async onSetPasswordSuccess(\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString],\n keys: [string, EncString]\n ) {\n await this.stateService.setKdfType(this.kdf);\n await this.stateService.setKdfConfig(this.kdfConfig);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n }\n}\n","
    \n
    \n
    \n

    {{ \"setMasterPassword\" | i18n }}

    \n
    \n
    \n \n {{ \"loading\" | i18n }}\n
    \n
    \n {{ \"ssoCompleteRegistration\" | i18n }}\n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n {{ \"masterPassDesc\" | i18n }}\n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n
    \n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
    \n
    \n
    \n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
    \n
    \n
    \n
    \n
    \n
    \n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SetPasswordComponent as BaseSetPasswordComponent } from \"@bitwarden/angular/components/set-password.component\";\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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","import { Component } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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","import { Component } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.service\";\nimport { Cipher } from \"@bitwarden/common/vault/models/domain/cipher\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../../vault/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: DialogServiceAbstraction\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 );\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 { SymmetricCryptoKey } 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 oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n const promises: any[] = [];\n ciphers.forEach((cipherResponse) => {\n const cipherData = new CipherData(cipherResponse);\n const cipher = new Cipher(cipherData);\n promises.push(cipher.decrypt(oldEncKey).then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n return decCiphers;\n }\n}\n","export enum EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","export enum EmergencyAccessType {\n View = 0,\n Takeover = 1,\n}\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergency-access-type\";\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\n}\n","import { EmergencyAccessType } from \"../../enums/emergency-access-type\";\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","
    \n
    \n \n
    \n

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

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

    {{ \"inviteEmergencyContactDesc\" | i18n }}

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

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

    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n \n \n {{ \"waitTimeDesc\" | i18n }}\n
    \n
    \n
    \n \n {{ \"save\" | i18n }}\n \n \n
    \n \n \n \n \n
    \n
    \n \n
    \n
    \n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n try {\n this.onConfirmed.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","
    \n
    \n \n
    \n

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

    \n \n ×\n \n
    \n
    \n {{ \"loggedOutWarning\" | i18n }}\n \n \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { takeUntil } from \"rxjs\";\n\nimport { ChangePasswordComponent } from \"@bitwarden/angular/auth/components/change-password.component\";\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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 { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\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: DialogServiceAbstraction\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 oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unexpectedError\")\n );\n return;\n }\n\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n takeoverResponse.kdf,\n new KdfConfig(\n takeoverResponse.kdfIterations,\n takeoverResponse.kdfMemory,\n takeoverResponse.kdfParallelism\n )\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
    \n

    {{ \"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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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: SimpleDialogType.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: SimpleDialogType.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: SimpleDialogType.WARNING,\n });\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessApprove(details.id);\n details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyApproved\", this.userNamePipe.transform(details))\n );\n }\n\n async reject(details: EmergencyAccessGranteeDetailsResponse) {\n await this.apiService.postEmergencyAccessReject(details.id);\n details.status = EmergencyAccessStatusType.Confirmed;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyRejected\", this.userNamePipe.transform(details))\n );\n }\n\n async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessTakeoverComponent,\n this.takeoverModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.email = details.email;\n comp.emergencyAccessId = details != null ? details.id : null;\n\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onDone.subscribe(() => {\n modal.close();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"passwordResetFor\", this.userNamePipe.transform(details))\n );\n });\n }\n );\n }\n\n private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n const index = this.trustedContacts.indexOf(details);\n if (index > -1) {\n this.trustedContacts.splice(index, 1);\n }\n }\n\n private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n const index = this.grantedContacts.indexOf(details);\n if (index > -1) {\n this.grantedContacts.splice(index, 1);\n }\n }\n\n // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const encKey = await this.cryptoService.getEncKey();\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n try {\n this.logService.debug(\n \"User's fingerprint: \" +\n (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join(\"-\")\n );\n } catch {\n // Ignore errors since it's just a debug message\n }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\n }\n}\n","\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 { 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 ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngOnInit() {\n super.ngOnInit();\n\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 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\";\n\nimport { CaptchaProtectedComponent } from \"../auth/components/captcha-protected.component\";\nimport {\n AllValidationErrors,\n FormValidationErrorsService,\n} from \"../platform/abstractions/form-validation-errors.service\";\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../services/dialog\";\nimport { PasswordColorText } from \"../shared/components/password-strength/password-strength.component\";\nimport { InputsFieldMatch } from \"../validators/inputsFieldMatch.validator\";\n\n@Directive()\nexport class RegisterComponent extends CaptchaProtectedComponent implements OnInit {\n @Input() isInTrialFlow = false;\n @Output() createdAccount = new EventEmitter();\n\n showPassword = false;\n formPromise: Promise;\n referenceData: ReferenceEventRequest;\n showTerms = false;\n showErrorSummary = false;\n passwordStrengthResult: any;\n 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: DialogServiceAbstraction\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.showTerms = false;\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 if (typeof crypto.subtle === 'undefined') {\n this.platformUtilsService.showToast(\n \"error\",\n \"This browser requires HTTPS to use the web vault\",\n \"Check the Vaultwarden wiki for details on how to enable it\"\n );\n return;\n }\n 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: SimpleDialogType.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: SimpleDialogType.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: SimpleDialogType.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.makeKey(masterPassword, email, kdf, kdfConfig);\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(\n email,\n name,\n hashedPassword,\n hint,\n encKey[1].encryptedString,\n this.referenceData,\n this.captchaToken,\n kdf,\n kdfConfig.iterations,\n kdfConfig.memory,\n kdfConfig.parallelism\n );\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.getOrganizationInvitation();\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n return request;\n }\n\n private async registerAccount(\n request: RegisterRequest,\n showToast: boolean\n ): Promise<{ successful: boolean; captchaBypassToken?: string }> {\n if (!(await this.validateRegistration(showToast)).isValid) {\n return { successful: false };\n }\n this.formPromise = this.apiService.postRegister(request);\n try {\n const response = await this.formPromise;\n return { successful: true, captchaBypassToken: response.captchaBypassToken };\n } catch (e) {\n if (this.handleCaptchaRequired(e)) {\n return { successful: false };\n } else {\n throw e;\n }\n }\n }\n\n private async logIn(\n email: string,\n masterPassword: string,\n captchaBypassToken: string\n ): Promise<{ captchaRequired: boolean }> {\n const credentials = new PasswordLogInCredentials(\n email,\n masterPassword,\n captchaBypassToken,\n null\n );\n const loginResponse = await this.authService.logIn(credentials);\n if (this.handleCaptchaRequired(loginResponse)) {\n return { captchaRequired: true };\n }\n return { captchaRequired: false };\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { AbstractControl, UntypedFormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"bit-error-summary\",\n template: ` 0\">\n {{ \"fieldsNeedAttention\" | i18n : errorString }}\n `,\n host: {\n class: \"tw-block tw-text-danger tw-mt-2\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorSummary {\n @Input()\n formGroup: UntypedFormGroup;\n\n get errorCount(): number {\n return this.getErrorCount(this.formGroup);\n }\n\n get errorString() {\n return this.errorCount.toString();\n }\n\n private getErrorCount(form: UntypedFormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof UntypedFormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n\n if (!control.dirty && control.untouched) {\n return acc;\n }\n\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n}\n","\n\n\n
    \n
    \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 \n {{ \"createAccount\" | i18n }}\n \n \n \n {{ \"logIn\" | i18n }}\n \n \n \n \n {{ \"logIn\" | i18n }}\n \n \n
    \n \n
    \n\n","import { Component, Input } from \"@angular/core\";\nimport { UntypedFormBuilder } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\n\nimport { RegisterComponent as BaseRegisterComponent } from \"@bitwarden/angular/components/register.component\";\nimport { FormValidationErrorsService } from \"@bitwarden/angular/platform/abstractions/form-validation-errors.service\";\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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","
    \n \n \n \n \"{{\n {{ \"us\" | i18n }}\n \n \n \n \"{{\n {{ \"eu\" | i18n }}\n \n \n \n \n \n \n \n \n \n
    \n","import { Component, Input, OnInit } from \"@angular/core\";\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 ) {}\n @Input() hasFlags: boolean;\n isEuServer: boolean;\n isUsServer: boolean;\n showRegionSelector = false;\n euServerFlagEnabled: boolean;\n selectedRegionImageName: string;\n\n async ngOnInit() {\n this.euServerFlagEnabled = await this.configService.getFeatureFlagBool(\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.selectedRegionImageName = this.getRegionImage();\n this.showRegionSelector = false;\n }\n\n getRegionImage(): string {\n if (this.isEuServer) {\n return \"eu_flag\";\n } else {\n return \"us_flag\";\n }\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-forbes\",\n templateUrl: \"logo-forbes.component.html\",\n})\nexport class LogoForbesComponent {}\n","
    \n
    \n \n \n \n
    \n
    \n “Bitwarden boasts the backing of some of the world's best security experts and an attractive,\n easy-to-use interface”\n
    \n
    \n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-logo-us-news\",\n templateUrl: \"logo-us-news.component.html\",\n})\nexport class LogoUSNewsComponent {}\n","\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-enterprise-content\",\n templateUrl: \"enterprise-content.component.html\",\n})\nexport class EnterpriseContentComponent {}\n","

    The Bitwarden Password Manager

    \n
    \n

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

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

    The Bitwarden Password Manager

    \n
    \n

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

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

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

    \n
      \n
    • \n

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

      \n
    • \n
    • \n

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

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

    {{ \"billingPlanLabel\" | i18n }}

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

    {{ \"paymentType\" | i18n }}

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

    The Bitwarden Password Manager

    \n
    \n

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

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

    The Bitwarden Password Manager

    \n
    \n

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

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

    Start Your Enterprise Free Trial Now

    \n
    \n

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

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

    Start Your Teams Free Trial Now

    \n
    \n

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

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

    Start Your Free Trial Now

    \n
    \n

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

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

    Start Your Enterprise Free Trial Now

    \n
    \n

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

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

    Start Your Premium Account Now

    \n
    \n

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

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

    Start Your Teams Free Trial Now

    \n
    \n

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

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

    The Bitwarden Password Manager

    \n
    \n

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

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

    The Bitwarden Password Manager

    \n
    \n

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

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

    {{ \"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 {{ \"startYour7DayFreeTrialOfBitwardenFor\" | i18n : org }}\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 individual = \"individual\",\n premium = \"premium\",\n free = \"free\",\n}\n\nenum ValidLayoutParams {\n default = \"default\",\n teams = \"teams\",\n teams1 = \"teams1\",\n teams2 = \"teams2\",\n enterprise = \"enterprise\",\n enterprise1 = \"enterprise1\",\n enterprise2 = \"enterprise2\",\n cnetcmpgnent = \"cnetcmpgnent\",\n cnetcmpgnind = \"cnetcmpgnind\",\n cnetcmpgnteams = \"cnetcmpgnteams\",\n abmenterprise = \"abmenterprise\",\n abmteams = \"abmteams\",\n}\n\n@Component({\n selector: \"app-trial\",\n templateUrl: \"trial-initiation.component.html\",\n})\nexport class TrialInitiationComponent implements OnInit, OnDestroy {\n email = \"\";\n org = \"\";\n orgInfoSubLabel = \"\";\n orgId = \"\";\n orgLabel = \"\";\n billingSubLabel = \"\";\n layout = \"default\";\n plan: PlanType;\n product: ProductType;\n accountCreateOnly = true;\n useTrialStepper = false;\n policies: Policy[];\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n trialFlowOrgs: string[] = [\n ValidOrgParams.teams,\n ValidOrgParams.enterprise,\n ValidOrgParams.families,\n ];\n routeFlowOrgs: string[] = [\n ValidOrgParams.free,\n ValidOrgParams.premium,\n ValidOrgParams.individual,\n ];\n layouts = ValidLayoutParams;\n referenceData: ReferenceEventRequest;\n @ViewChild(\"stepper\", { static: false }) verticalStepper: VerticalStepperComponent;\n\n orgInfoFormGroup = this.formBuilder.group({\n name: [\"\", { validators: [Validators.required, Validators.maxLength(50)], updateOn: \"change\" }],\n email: [\"\"],\n });\n\n private set referenceDataId(referenceId: string) {\n if (referenceId != null) {\n this.referenceData.id = referenceId;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n }\n\n private destroy$ = new Subject();\n\n constructor(\n private route: ActivatedRoute,\n protected router: Router,\n private formBuilder: UntypedFormBuilder,\n private titleCasePipe: TitleCasePipe,\n private stateService: StateService,\n private logService: LogService,\n private policyApiService: PolicyApiServiceAbstraction,\n private policyService: PolicyService,\n private i18nService: I18nService,\n private routerService: RouterService\n ) {}\n\n async ngOnInit(): Promise {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n\n this.referenceDataId = qParams.reference;\n\n if (Object.values(ValidLayoutParams).includes(qParams.layout)) {\n this.layout = qParams.layout;\n this.accountCreateOnly = false;\n }\n\n if (this.trialFlowOrgs.includes(qParams.org)) {\n this.org = qParams.org;\n this.orgLabel = this.titleCasePipe.transform(this.org);\n this.useTrialStepper = true;\n this.referenceData.flow = qParams.org;\n\n if (this.org === ValidOrgParams.families) {\n this.plan = PlanType.FamiliesAnnually;\n this.product = ProductType.Families;\n } else if (this.org === ValidOrgParams.teams) {\n this.plan = PlanType.TeamsAnnually;\n this.product = ProductType.Teams;\n } else if (this.org === ValidOrgParams.enterprise) {\n this.plan = PlanType.EnterpriseAnnually;\n this.product = ProductType.Enterprise;\n }\n } else if (this.routeFlowOrgs.includes(qParams.org)) {\n this.referenceData.flow = qParams.org;\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n\n // Are they coming from an email for sponsoring a families organization\n // After logging in redirect them to setup the families sponsorship\n this.setupFamilySponsorship(qParams.sponsorshipToken);\n });\n\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.policyApiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n if (policies.data != null) {\n const policiesData = policies.data.map((p) => new PolicyData(p));\n this.policies = policiesData.map((p) => new Policy(p));\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (this.policies != null) {\n this.policyService\n .masterPasswordPolicyOptions$(this.policies)\n .pipe(takeUntil(this.destroy$))\n .subscribe((enforcedPasswordPolicyOptions) => {\n this.enforcedPolicyOptions = enforcedPasswordPolicyOptions;\n });\n }\n\n this.orgInfoFormGroup.controls.name.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.orgInfoFormGroup.controls.name.markAsTouched();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n stepSelectionChange(event: StepperSelectionEvent) {\n // Set org info sub label\n if (event.selectedIndex === 1 && this.orgInfoFormGroup.controls.name.value === \"\") {\n this.orgInfoSubLabel =\n \"Enter your \" + this.titleCasePipe.transform(this.org) + \" organization information\";\n } else if (event.previouslySelectedIndex === 1) {\n this.orgInfoSubLabel = this.orgInfoFormGroup.controls.name.value;\n }\n\n //set billing sub label\n if (event.selectedIndex === 2) {\n this.billingSubLabel = this.i18nService.t(\"billingTrialSubLabel\");\n }\n }\n\n createdAccount(email: string) {\n this.email = email;\n this.orgInfoFormGroup.get(\"email\")?.setValue(email);\n this.verticalStepper.next();\n }\n\n billingSuccess(event: any) {\n this.orgId = event?.orgId;\n this.billingSubLabel = event?.subLabelText;\n this.verticalStepper.next();\n }\n\n navigateToOrgVault() {\n this.router.navigate([\"organizations\", this.orgId, \"vault\"]);\n }\n\n navigateToOrgInvite() {\n this.router.navigate([\"organizations\", this.orgId, \"members\"]);\n }\n\n previousStep() {\n this.verticalStepper.previous();\n }\n\n private setupFamilySponsorship(sponsorshipToken: string) {\n if (sponsorshipToken != null) {\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { plan: sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n }\n}\n","import { I18nService } from \"../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, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport * as DuoWebSDK from \"duo_web_sdk\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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 { 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 { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.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\";\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 identifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n protected loginRoute = \"login\";\n protected successRoute = \"vault\";\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected route: ActivatedRoute,\n protected logService: LogService,\n protected twoFactorService: TwoFactorService,\n protected appIdService: AppIdService,\n protected loginService: LoginService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.twoFactorService.getProviders() == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n if (this.needsLock) {\n this.successRoute = \"lock\";\n }\n\n if (this.win != null && this.webAuthnSupported) {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n this.webAuthn = new WebAuthnIFrame(\n this.win,\n webVaultUrl,\n this.webAuthnNewTab,\n this.platformUtilsService,\n this.i18nService,\n (token: string) => {\n this.token = token;\n this.submit();\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n if (info === \"ready\") {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.twoFactorService.getDefaultProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t(\"loginUnavailable\");\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnNewTab) {\n setTimeout(() => {\n this.authWebAuthn();\n }, 500);\n }\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.twoFactorService.getProviders().size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.token == null || this.token === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verificationCodeRequired\")\n );\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (\n this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator\n ) {\n this.token = this.token.replace(\" \", \"\").trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(\n new TokenTwoFactorRequest(this.selectedProviderType, this.token, this.remember),\n this.captchaToken\n );\n const response: AuthResult = await this.formPromise;\n if (this.handleCaptchaRequired(response)) {\n return;\n }\n if (this.onSuccessfulLogin != null) {\n this.loginService.clearValues();\n // Note: awaiting this will currently cause a hang on desktop & browser as they will wait for a full sync to complete\n // before nagivating to the success route.\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = \"set-password\";\n }\n if (response.forcePasswordReset !== ForceResetPasswordReason.None) {\n this.successRoute = \"update-temp-password\";\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.loginService.clearValues();\n await this.onSuccessfulLoginNavigate();\n } else {\n this.loginService.clearValues();\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n 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://bitwarden.com/help/lost-two-step-device/\");\n this.onRecoverSelected.emit();\n }\n}\n","
    \n
    \n
    \n
    \n

    {{ \"twoStepOptions\" | i18n }}

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

    {{ p.name }}

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

    {{ \"recoveryCodeTitle\" | i18n }}

    \n {{ \"recoveryCodeDesc\" | i18n }}\n
    \n
    \n \n {{ \"select\" | i18n }}\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent } from \"@bitwarden/angular/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\n\n","import { Component, 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 { 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 { AppIdService } from \"@bitwarden/common/platform/abstractions/app-id.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\";\n\nimport { RouterService } from \"../core\";\n\nimport { TwoFactorOptionsComponent } from \"./two-factor-options.component\";\n\n@Component({\n selector: \"app-two-factor\",\n templateUrl: \"two-factor.component.html\",\n})\n// eslint-disable-next-line rxjs-angular/prefer-takeuntil\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n @ViewChild(\"twoFactorOptions\", { read: ViewContainerRef, static: true })\n twoFactorOptionsModal: ViewContainerRef;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n stateService: StateService,\n environmentService: EnvironmentService,\n private modalService: ModalService,\n route: ActivatedRoute,\n logService: LogService,\n twoFactorService: TwoFactorService,\n appIdService: AppIdService,\n private routerService: RouterService,\n loginService: LoginService\n ) {\n super(\n authService,\n router,\n i18nService,\n apiService,\n platformUtilsService,\n window,\n environmentService,\n stateService,\n route,\n logService,\n twoFactorService,\n appIdService,\n loginService\n );\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async anotherMethod() {\n const [modal] = await this.modalService.openViewRef(\n TwoFactorOptionsComponent,\n this.twoFactorOptionsModal,\n (comp) => {\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n comp.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async goAfterLogIn() {\n this.loginService.clearValues();\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n // 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.identifier,\n },\n });\n }\n }\n}\n","import { SecretVerificationRequest } from \"./secret-verification.request\";\n\nexport class PasswordRequest extends SecretVerificationRequest {\n newMasterPasswordHash: string;\n masterPasswordHint: string;\n key: string;\n}\n","import { Directive } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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 { SymmetricCryptoKey } from \"@bitwarden/common/platform/models/domain/symmetric-crypto-key\";\nimport { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { Verification } from \"@bitwarden/common/types/verification\";\n\nimport { DialogServiceAbstraction } from \"../../services/dialog\";\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: DialogServiceAbstraction\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 masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create Request\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n // Update user's password\n this.apiService.postPassword(request);\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
    \n
    \n
    \n

    {{ \"updateMasterPassword\" | i18n }}

    \n
    \n
    \n {{ \"masterPasswordInvalidWarning\" | i18n }} \n \n\n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { UpdatePasswordComponent as BaseUpdatePasswordComponent } from \"@bitwarden/angular/auth/components/update-password.component\";\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\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 { SymmetricCryptoKey } 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\";\n\nimport { DialogServiceAbstraction } from \"../../services/dialog\";\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: DialogServiceAbstraction\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 newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email.trim().toLowerCase(),\n this.kdf,\n this.kdfConfig\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n\n // Grab user's current enc key\n const userEncKey = await this.cryptoService.getEncKey();\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n await this.performSubmitActions(newPasswordHash, newKey, newEncKey);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n switch (this.reason) {\n case ForceResetPasswordReason.AdminForcePasswordReset:\n this.formPromise = this.updateTempPassword(masterPasswordHash, encKey);\n break;\n case ForceResetPasswordReason.WeakMasterPassword:\n this.formPromise = this.updatePassword(masterPasswordHash, encKey);\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(\n masterPasswordHash: string,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n const request = new UpdateTempPasswordRequest();\n request.key = encKey[1].encryptedString;\n request.newMasterPasswordHash = masterPasswordHash;\n request.masterPasswordHint = this.hint;\n\n return this.apiService.putUpdateTempPassword(request);\n }\n\n private async updatePassword(\n newMasterPasswordHash: string,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\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 = encKey[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 { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, 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({\n providedIn: \"root\",\n})\nexport class HomeGuard implements CanActivate {\n constructor(private router: Router, private authService: AuthService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return this.router.createUrlTree([\"/login\"], { queryParams: route.queryParams });\n }\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"/lock\"], { queryParams: route.queryParams });\n }\n return this.router.createUrlTree([\"/vault\"], { queryParams: route.queryParams });\n }\n}\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/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 Vaultwarden (unofficial Bitwarden® server)
    \n ({{ \"webVault\" | i18n }})\n {{ \"versionNumber\" | i18n : version }}\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 const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n this.newEmail = this.newEmail.trim().toLowerCase();\n if (!this.tokenSent) {\n const request = new EmailTokenRequest();\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postEmailToken(request);\n await this.formPromise;\n this.tokenSent = true;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const request = new EmailRequest();\n request.token = this.token;\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const kdf = await this.stateService.getKdfType();\n const kdfConfig = await this.stateService.getKdfConfig();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.newEmail,\n kdf,\n kdfConfig\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"emailChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","
    \n

    {{ \"myAccount\" | i18n }}

    \n
    \n\n\n
    \n

    {{ \"changeEmail\" | i18n }}

    \n
    \n \n
    \n
    \n

    {{ \"dangerZone\" | i18n }}

    \n
    \n
    \n
    \n

    {{ \"dangerZoneDesc\" | i18n }}

    \n \n \n \n
    \n
    \n\n\n\n\n\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\nimport { StateService } from \"@bitwarden/common/platform/abstractions/state.service\";\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 apiService: ApiService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.showChangeEmail = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async deauthorizeSessions() {\n await this.modalService.openViewRef(DeauthorizeSessionsComponent, this.deauthModalRef);\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef);\n }\n\n async deleteAccount() {\n await this.modalService.openViewRef(DeleteAccountComponent, this.deleteModalRef);\n }\n}\n","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, 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 { Policy } from \"@bitwarden/common/admin-console/models/domain/policy\";\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\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 private onChange: (vaultTimeout: number) => void;\n private validatorChange: () => void;\n private destroy$ = new Subject();\n\n constructor(\n private formBuilder: FormBuilder,\n private policyService: PolicyService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.policyService\n .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.pipe(takeUntil(this.destroy$)).subscribe((value) => {\n if (this.onChange) {\n this.onChange(this.getVaultTimeout(value));\n }\n });\n\n // Assign the previous value to 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((_) => {\n const current = Math.max(this.form.value.vaultTimeout, 0);\n this.form.patchValue({\n custom: {\n hours: Math.floor(current / 60),\n minutes: current % 60,\n },\n });\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges() {\n 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: any) {\n if (value.vaultTimeout !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return value.vaultTimeout;\n }\n\n return value.custom.hours * 60 + value.custom.minutes;\n }\n\n writeValue(value: number): void {\n if (value == null) {\n return;\n }\n\n if (this.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 {{ \"vaultTimeoutDesc\" | i18n }}\n
    \n
    \n \n
    \n
    \n \n {{ \"hours\" | i18n }}\n
    \n
    \n \n {{ \"minutes\" | i18n }}\n
    \n
    \n\n \n {{ \"vaultCustomTimeoutMinimum\" | i18n }}\n \n
    \n
    \n","import { Component } from \"@angular/core\";\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { VaultTimeoutInputComponent as VaultTimeoutInputComponentBase } from \"@bitwarden/angular/components/settings/vault-timeout-input.component\";\n\n@Component({\n selector: \"app-vault-timeout-input\",\n templateUrl: \"vault-timeout-input.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n ],\n})\nexport class VaultTimeoutInputComponent extends VaultTimeoutInputComponentBase {}\n","
    \n

    {{ \"preferences\" | i18n }}

    \n
    \n

    {{ \"preferencesDesc\" | i18n }}

    \n
    \n
    \n
    \n \n \n {{\n \"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 \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, map, Observable, Subject, takeUntil, tap } from \"rxjs\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\nimport { AbstractThemingService } from \"@bitwarden/angular/services/theming/theming.service.abstraction\";\nimport { SettingsService } from \"@bitwarden/common/abstractions/settings.service\";\nimport { VaultTimeoutSettingsService } from \"@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.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\";\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 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: DialogServiceAbstraction\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.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: SimpleDialogType.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 this.vaultTimeoutSettingsService.getVaultTimeoutAction(),\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 { 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","import { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./send.request\";\n\nexport class SendWithIdRequest extends SendRequest {\n id: string;\n\n constructor(send: Send) {\n super(send);\n this.id = send.id;\n }\n}\n","
    \n

    {{ \"changeMasterPassword\" | i18n }}

    \n
    \n\n{{ \"loggedOutWarning\" | i18n }}\n\n\n\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n {{ \"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","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"@bitwarden/angular/auth/components/change-password.component\";\nimport { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\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 { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\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 { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.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 { SymmetricCryptoKey } 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\";\n\n@Component({\n selector: \"app-change-password\",\n templateUrl: \"change-password.component.html\",\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n masterPasswordHint: string;\n checkForBreaches = true;\n characterMinimumMessage = \"\";\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 keyConnectorService: KeyConnectorService,\n private router: Router,\n private organizationApiService: OrganizationApiServiceAbstraction,\n private organizationUserService: OrganizationUserService,\n dialogService: DialogServiceAbstraction\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 if (await this.keyConnectorService.getUsesKeyConnector()) {\n this.router.navigate([\"/settings/security/two-factor\"]);\n }\n\n this.masterPasswordHint = (await this.apiService.getProfile()).masterPasswordHint;\n await super.ngOnInit();\n\n this.characterMinimumMessage = this.i18nService.t(\"characterMinimum\", this.minimumLength);\n }\n\n async rotateEncKeyClicked() {\n if (this.rotateEncKey) {\n const ciphers = await this.cipherService.getAllDecrypted();\n let hasOldAttachments = false;\n if (ciphers != null) {\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n hasOldAttachments = true;\n break;\n }\n }\n }\n\n if (hasOldAttachments) {\n const learnMore = await this.dialogService.openSimpleDialog({\n title: { key: \"warning\" },\n content: { key: \"oldAttachmentsNeedFixDesc\" },\n acceptButtonText: { key: \"learnMore\" },\n cancelButtonText: { key: \"close\" },\n type: SimpleDialogType.WARNING,\n });\n\n if (learnMore) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/attachments/#add-storage-space\"\n );\n }\n this.rotateEncKey = false;\n return;\n }\n\n const result = await this.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: SimpleDialogType.WARNING,\n });\n\n if (!result) {\n this.rotateEncKey = false;\n }\n }\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n 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.rotateEncKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(\n newMasterPasswordHash: string,\n newKey: SymmetricCryptoKey,\n newEncKey: [SymmetricCryptoKey, EncString]\n ) {\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.masterPasswordHint = this.masterPasswordHint;\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newEncKey[1].encryptedString;\n\n try {\n if (this.rotateEncKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newKey, request.newMasterPasswordHash);\n });\n } else {\n this.formPromise = this.apiService.postPassword(request);\n }\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = masterPasswordHash;\n\n const folders = await firstValueFrom(this.folderService.folderViews$);\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n const sends = await firstValueFrom(this.sendService.sends$);\n await Promise.all(\n sends.map(async (send) => {\n const cryptoKey = await this.cryptoService.decryptToBytes(send.key, null);\n send.key = (await this.cryptoService.encrypt(cryptoKey, encKey[0])) ?? send.key;\n request.sends.push(new SendWithIdRequest(send));\n })\n );\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(encKey[0]);\n\n await this.updateAllResetPasswordKeys(encKey[0], masterPasswordHash);\n }\n\n private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n const allowedStatuses = [\n EmergencyAccessStatusType.Confirmed,\n EmergencyAccessStatusType.RecoveryInitiated,\n EmergencyAccessStatusType.RecoveryApproved,\n ];\n\n const filteredAccesses = emergencyAccess.data.filter((d) => allowedStatuses.includes(d.status));\n\n for (const details of filteredAccesses) {\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n const updateRequest = new EmergencyAccessUpdateRequest();\n updateRequest.type = details.type;\n updateRequest.waitTimeDays = details.waitTimeDays;\n updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n await this.apiService.putEmergencyAccess(details.id, updateRequest);\n }\n }\n\n private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey, masterPasswordHash: string) {\n const orgs = await this.organizationService.getAll();\n\n for (const org of orgs) {\n // If not already enrolled, skip\n if (!org.resetPasswordEnrolled) {\n continue;\n }\n\n // Retrieve public key\n const response = await this.organizationApiService.getKeys(org.id);\n const publicKey = Utils.fromB64ToArray(response?.publicKey);\n\n // Re-enroll - encrypt user's encKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create/Execute request\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = masterPasswordHash;\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.organizationUserService.putOrganizationUserResetPasswordEnrollment(\n org.id,\n org.userId,\n request\n );\n }\n }\n}\n","import { 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 const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n try {\n this.formPromise = this.makeKeyAndSaveAsync();\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"encKeySettingsChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n } 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 request.masterPasswordHash = await this.cryptoService.hashPassword(masterPassword, null);\n const email = await this.stateService.getEmail();\n const newKey = await this.cryptoService.makeKey(\n masterPassword,\n email,\n this.kdf,\n this.kdfConfig\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(masterPassword, newKey);\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n\n await this.apiService.postAccountKdf(request);\n }\n}\n","\n \n {{ \"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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction) {\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 { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\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 keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private modalService: ModalService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.showChangeKdf = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async viewUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.viewUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"userApiKeyDesc\";\n });\n }\n\n async rotateUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.isRotation = true;\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","\n\n","import { Component } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"@bitwarden/common/auth/abstractions/key-connector.service\";\n\n@Component({\n selector: \"app-security\",\n templateUrl: \"security.component.html\",\n})\nexport class SecurityComponent {\n showChangePassword = true;\n\n constructor(private keyConnectorService: KeyConnectorService) {}\n\n async ngOnInit() {\n this.showChangePassword = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { TwoFactorSetupComponent } from \"../auth/settings/two-factor-setup.component\";\n\nimport { ChangePasswordComponent } from \"./change-password.component\";\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 this.hideSubscription = true;\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 { PasswordGenerationServiceAbstraction } from \"@bitwarden/common/tools/generator/password\";\nimport { UsernameGenerationServiceAbstraction } 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: any = {};\n passwordOptions: any = {};\n username = \"-\";\n password = \"-\";\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPasswordPolicyOptions: PasswordGeneratorPolicyOptions;\n usernameWebsite: string = null;\n\n constructor(\n protected passwordGenerationService: 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 });\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: \"AnonAddy\", 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 } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\n@Directive({\n selector: \"[appSelectCopy]\",\n})\nexport class SelectCopyDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) {}\n\n @HostListener(\"copy\") onCopy() {\n if (window == null) {\n return;\n }\n let copyText = \"\";\n const selection = window.getSelection();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n const text = range.toString();\n\n // The selection should only contain one line of text. In some cases however, the\n // selection contains newlines and space characters from the indentation of following\n // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n // that aren't part of the password, the selection has to be trimmed.\n let stringEndPos = text.length;\n const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n if (newLinePos > -1) {\n const otherPart = text.substr(newLinePos).trim();\n if (otherPart === \"\") {\n stringEndPos = newLinePos;\n }\n }\n copyText += text.substring(0, stringEndPos);\n }\n this.platformUtilsService.copyToClipboard(copyText, { window: window });\n }\n}\n","\n \n {{ \"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 {{ \"regenerateUsername\" | i18n }}\n \n \n
    \n
    \n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\n ) {\n super(\n passwordGenerationService,\n usernameGenerationService,\n platformUtilsService,\n stateService,\n i18nService,\n logService,\n route,\n window\n );\n if (true) {\n // Allow only valid email forwarders for self host\n this.forwardOptions = this.forwardOptions.filter((forwarder) => forwarder.validForSelfHosted);\n }\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
    \n
    \n \n {{ \"loading\" | i18n }}\n
    \n
    \n

    {{ \"sendProtectedPassword\" | i18n }}

    \n

    {{ \"sendProtectedPasswordDontKnow\" | i18n }}

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

    \n {{ send.name }}\n

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

    {{ send.file.fileName }}

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

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

    \n
    \n
    \n
    \n
    \n

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

    \n
    \n
    \n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { 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\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\n\n@Directive()\nexport class SendComponent implements OnInit, OnDestroy {\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n private destroy$ = new Subject();\n\n constructor(\n protected sendService: SendService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected ngZone: NgZone,\n protected searchService: SearchService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected sendApiService: SendApiService,\n protected dialogService: DialogServiceAbstraction\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: SimpleDialogType.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: SimpleDialogType.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, OnInit, Output } from \"@angular/core\";\nimport { UntypedFormControl, UntypedFormGroup } from \"@angular/forms\";\n\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"@bitwarden/common/platform/abstractions/platform-utils.service\";\n\n// Different BrowserPath = different controls.\nenum BrowserPath {\n // Native datetime-locale.\n // We are happy.\n Default = \"default\",\n\n // Native date and time inputs, but no datetime-locale.\n // We use individual date and time inputs and create a datetime programatically on submit.\n Firefox = \"firefox\",\n\n // No native date, time, or datetime-locale inputs.\n // We use a polyfill for dates and a dropdown for times.\n Safari = \"safari\",\n}\n\nenum DateField {\n DeletionDate = \"deletion\",\n ExpirationDate = \"expiration\",\n}\n\n// Value = hours\nenum DatePreset {\n OneHour = 1,\n OneDay = 24,\n TwoDays = 48,\n ThreeDays = 72,\n SevenDays = 168,\n ThirtyDays = 720,\n Custom = 0,\n Never = null,\n}\n\n// TimeOption is used for the dropdown implementation of custom times\n// twelveHour = displayed time; twentyFourHour = time used in logic\ninterface TimeOption {\n twelveHour: string;\n twentyFourHour: string;\n}\n\n@Directive()\nexport class EffluxDatesComponent implements OnInit {\n @Input() readonly initialDeletionDate: Date;\n @Input() readonly initialExpirationDate: Date;\n @Input() readonly editMode: boolean;\n @Input() readonly disabled: boolean;\n\n @Output() datesChanged = new EventEmitter<{ deletionDate: string; expirationDate: string }>();\n\n get browserPath(): BrowserPath {\n if (this.platformUtilsService.isFirefox()) {\n return BrowserPath.Firefox;\n } else if (this.platformUtilsService.isSafari()) {\n return BrowserPath.Safari;\n }\n return BrowserPath.Default;\n }\n\n datesForm = new UntypedFormGroup({\n selectedDeletionDatePreset: new UntypedFormControl(),\n selectedExpirationDatePreset: new UntypedFormControl(),\n defaultDeletionDateTime: new UntypedFormControl(),\n defaultExpirationDateTime: new UntypedFormControl(),\n fallbackDeletionDate: new UntypedFormControl(),\n fallbackDeletionTime: new UntypedFormControl(),\n fallbackExpirationDate: new UntypedFormControl(),\n fallbackExpirationTime: new UntypedFormControl(),\n });\n\n deletionDatePresets: any[] = [\n { name: this.i18nService.t(\"oneHour\"), value: DatePreset.OneHour },\n { name: this.i18nService.t(\"oneDay\"), value: DatePreset.OneDay },\n { name: this.i18nService.t(\"days\", \"2\"), value: DatePreset.TwoDays },\n { name: this.i18nService.t(\"days\", \"3\"), value: DatePreset.ThreeDays },\n { name: this.i18nService.t(\"days\", \"7\"), value: DatePreset.SevenDays },\n { name: this.i18nService.t(\"days\", \"30\"), value: DatePreset.ThirtyDays },\n { name: this.i18nService.t(\"custom\"), value: DatePreset.Custom },\n ];\n\n expirationDatePresets: any[] = [\n { name: this.i18nService.t(\"never\"), value: DatePreset.Never },\n ].concat([...this.deletionDatePresets]);\n\n get selectedDeletionDatePreset(): UntypedFormControl {\n return this.datesForm.get(\"selectedDeletionDatePreset\") as UntypedFormControl;\n }\n\n get selectedExpirationDatePreset(): UntypedFormControl {\n return this.datesForm.get(\"selectedExpirationDatePreset\") as UntypedFormControl;\n }\n\n get defaultDeletionDateTime(): UntypedFormControl {\n return this.datesForm.get(\"defaultDeletionDateTime\") as UntypedFormControl;\n }\n\n get defaultExpirationDateTime(): UntypedFormControl {\n return this.datesForm.get(\"defaultExpirationDateTime\") as UntypedFormControl;\n }\n\n get fallbackDeletionDate(): UntypedFormControl {\n return this.datesForm.get(\"fallbackDeletionDate\") as UntypedFormControl;\n }\n\n get fallbackDeletionTime(): UntypedFormControl {\n return this.datesForm.get(\"fallbackDeletionTime\") as UntypedFormControl;\n }\n\n get fallbackExpirationDate(): UntypedFormControl {\n return this.datesForm.get(\"fallbackExpirationDate\") as UntypedFormControl;\n }\n\n get fallbackExpirationTime(): UntypedFormControl {\n return this.datesForm.get(\"fallbackExpirationTime\") as UntypedFormControl;\n }\n\n // Should be able to call these at any time and compute a submitable value\n get formattedDeletionDate(): string {\n switch (this.selectedDeletionDatePreset.value as DatePreset) {\n case DatePreset.Never:\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n return this.formattedDeletionDate;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n return this.fallbackDeletionDate.value + \"T\" + this.fallbackDeletionTime.value;\n default:\n return this.defaultDeletionDateTime.value;\n }\n default: {\n const now = new Date();\n const milliseconds = now.setTime(\n now.getTime() + (this.selectedDeletionDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(milliseconds).toString();\n }\n }\n }\n\n get formattedExpirationDate(): string {\n switch (this.selectedExpirationDatePreset.value as DatePreset) {\n case DatePreset.Never:\n return null;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n if (\n (!this.fallbackExpirationDate.value || !this.fallbackExpirationTime.value) &&\n this.editMode\n ) {\n return null;\n }\n return this.fallbackExpirationDate.value + \"T\" + this.fallbackExpirationTime.value;\n default:\n if (!this.defaultExpirationDateTime.value) {\n return null;\n }\n return this.defaultExpirationDateTime.value;\n }\n default: {\n const now = new Date();\n const milliseconds = now.setTime(\n now.getTime() + (this.selectedExpirationDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(milliseconds).toString();\n }\n }\n }\n //\n\n get safariDeletionTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.DeletionDate);\n }\n\n get safariExpirationTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.ExpirationDate);\n }\n\n private get nextWeek(): Date {\n const nextWeek = new Date();\n nextWeek.setDate(nextWeek.getDate() + 7);\n return nextWeek;\n }\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {}\n\n ngOnInit(): void {\n this.setInitialFormValues();\n this.emitDates();\n this.datesForm.valueChanges.subscribe(() => {\n this.emitDates();\n });\n }\n\n onDeletionDatePresetSelect(value: DatePreset) {\n this.selectedDeletionDatePreset.setValue(value);\n }\n\n clearExpiration() {\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackExpirationDate.setValue(null);\n this.fallbackExpirationTime.setValue(null);\n break;\n case BrowserPath.Default:\n this.defaultExpirationDateTime.setValue(null);\n break;\n }\n }\n\n protected emitDates() {\n this.datesChanged.emit({\n deletionDate: this.formattedDeletionDate,\n expirationDate: this.formattedExpirationDate,\n });\n }\n\n protected setInitialFormValues() {\n if (this.editMode) {\n this.selectedDeletionDatePreset.setValue(DatePreset.Custom);\n this.selectedExpirationDatePreset.setValue(DatePreset.Custom);\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackDeletionDate.setValue(this.initialDeletionDate.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(this.initialDeletionDate.toTimeString().slice(0, 5));\n if (this.initialExpirationDate != null) {\n this.fallbackExpirationDate.setValue(\n this.initialExpirationDate.toISOString().slice(0, 10)\n );\n this.fallbackExpirationTime.setValue(\n this.initialExpirationDate.toTimeString().slice(0, 5)\n );\n }\n break;\n case BrowserPath.Default:\n if (this.initialExpirationDate) {\n this.defaultExpirationDateTime.setValue(\n this.datePipe.transform(new Date(this.initialExpirationDate), \"yyyy-MM-ddTHH:mm\")\n );\n }\n this.defaultDeletionDateTime.setValue(\n this.datePipe.transform(new Date(this.initialDeletionDate), \"yyyy-MM-ddTHH:mm\")\n );\n break;\n }\n } else {\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n this.selectedExpirationDatePreset.setValue(DatePreset.Never);\n\n switch (this.browserPath) {\n case BrowserPath.Safari:\n this.fallbackDeletionDate.setValue(this.nextWeek.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(\n this.safariTimePresetOptions(DateField.DeletionDate)[1].twentyFourHour\n );\n break;\n default:\n break;\n }\n }\n }\n\n protected safariTimePresetOptions(field: DateField): TimeOption[] {\n // init individual arrays for major sort groups\n const noon: TimeOption[] = [];\n const midnight: TimeOption[] = [];\n const ams: TimeOption[] = [];\n const pms: TimeOption[] = [];\n\n // determine minute skip (5 min, 10 min, 15 min, etc.)\n const minuteIncrementer = 15;\n\n // loop through each hour on a 12 hour system\n for (let h = 1; h <= 12; h++) {\n // loop through each minute in the hour using the skip to increment\n for (let m = 0; m < 60; m += minuteIncrementer) {\n // init the final strings that will be added to the lists\n let hour = h.toString();\n let minutes = m.toString();\n\n // add prepending 0s to single digit hours/minutes\n if (h < 10) {\n hour = \"0\" + hour;\n }\n if (m < 10) {\n minutes = \"0\" + minutes;\n }\n\n // build time strings and push to relevant sort groups\n if (h === 12) {\n const midnightOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `00:${minutes}`,\n };\n midnight.push(midnightOption);\n\n const noonOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n noon.push(noonOption);\n } else {\n const amOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n ams.push(amOption);\n\n const pmOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${h + 12}:${minutes}`,\n };\n pms.push(pmOption);\n }\n }\n }\n\n // bring all the arrays together in the right order\n const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n // determine if an unsupported value already exists on the send & add that to the top of the option list\n // example: if the Send was created with a different client\n if (field === DateField.ExpirationDate && this.initialExpirationDate != null && this.editMode) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialExpirationDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialExpirationDate, \"HH:mm\"),\n };\n return [previousValue, { twelveHour: null, twentyFourHour: null }, ...validTimes];\n } else if (\n field === DateField.DeletionDate &&\n this.initialDeletionDate != null &&\n this.editMode\n ) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialDeletionDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialDeletionDate, \"HH:mm\"),\n };\n return [previousValue, ...validTimes];\n } else {\n return [{ twelveHour: null, twentyFourHour: null }, ...validTimes];\n }\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { Subject, takeUntil } from \"rxjs\";\n\nimport { 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 { 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\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\n\n@Directive()\nexport class AddEditComponent implements OnInit, OnDestroy {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n expirationDate: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n protected componentName = \"\";\n private sendLinkBaseUrl: string;\n private destroy$ = new Subject();\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected datePipe: DatePipe,\n protected sendService: SendService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected stateService: StateService,\n protected sendApiService: SendApiService,\n protected dialogService: DialogServiceAbstraction\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"sendTypeFile\"), value: SendType.File },\n { name: i18nService.t(\"sendTypeText\"), value: SendType.Text },\n ];\n this.sendLinkBaseUrl = this.environmentService.getSendUrl();\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + \"/\" + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.DisableSend)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableSend = policyAppliesToActiveUser;\n });\n\n this.policyService\n .policyAppliesToActiveUser$(PolicyType.SendOptions, (p) => p.data.disableHideEmail)\n .pipe(takeUntil(this.destroy$))\n .subscribe((policyAppliesToActiveUser) => {\n this.disableHideEmail = policyAppliesToActiveUser;\n });\n\n await this.load();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(this.editMode ? \"editSend\" : \"createSend\");\n }\n\n setDates(event: { deletionDate: string; expirationDate: string }) {\n this.deletionDate = event.deletionDate;\n this.expirationDate = event.expirationDate;\n }\n\n async load() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n this.emailVerified = await this.stateService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== \"\";\n }\n\n async submit(): Promise {\n if (this.disableSend) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"sendDisabledWarning\")\n );\n return false;\n }\n\n if (this.send.name == null || this.send.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n }\n\n if (this.password != null && this.password.trim() === \"\") {\n this.password = null;\n }\n\n this.formPromise = this.encryptSend(file).then(async (encSend) => {\n const uploadPromise = this.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.copyLink && this.link != null) {\n await this.handleCopyLinkToClipboard();\n return;\n }\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\")\n );\n });\n try {\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n async copyLinkToClipboard(link: string): Promise {\n return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"deleteSend\" },\n content: { key: \"deleteSendConfirmation\" },\n type: SimpleDialogType.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.send.type === SendType.File && !this.alertShown) {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send(\"premiumRequired\");\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send(\"emailVerificationRequired\");\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n protected 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.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate =\n this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"password\").focus();\n }\n private async handleCopyLinkToClipboard() {\n const copySuccess = await this.copyLinkToClipboard(this.link);\n if (copySuccess ?? true) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\")\n );\n } else {\n await this.dialogService.openSimpleDialog({\n title: \"\",\n content: { key: this.editMode ? \"editedSend\" : \"createdSend\" },\n acceptButtonText: { key: \"ok\" },\n cancelButtonText: null,\n type: SimpleDialogType.SUCCESS,\n });\n\n await this.copyLinkToClipboard(this.link);\n }\n }\n}\n","
    \n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\nimport { ControlContainer, NgForm } from \"@angular/forms\";\n\nimport { EffluxDatesComponent as BaseEffluxDatesComponent } from \"@bitwarden/angular/tools/send/efflux-dates.component\";\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-send-efflux-dates\",\n templateUrl: \"efflux-dates.component.html\",\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n})\nexport class EffluxDatesComponent extends BaseEffluxDatesComponent {\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {\n super(i18nService, platformUtilsService, datePipe);\n }\n}\n","
    \n
    \n \n
    \n

    {{ title }}

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

    {{ \"share\" | i18n }}

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

    \n \n

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

    {{ \"types\" | i18n }}

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

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

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

    {{ \"noSendsInList\" | i18n }}

    \n \n {{ \"createSend\" | i18n }}\n \n
    \n
    \n
    \n
    \n
    \n\n","import { Component, NgZone, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.service\";\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 { Icons } from \"@bitwarden/components\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\n\nconst BroadcasterSubscriptionId = \"SendComponent\";\n\n@Component({\n selector: \"app-send\",\n templateUrl: \"send.component.html\",\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild(\"sendAddEdit\", { read: ViewContainerRef, static: true })\n sendAddEditModalRef: ViewContainerRef;\n noItemIcon = Icons.Search;\n\n constructor(\n sendService: SendService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n ngZone: NgZone,\n searchService: SearchService,\n policyService: PolicyService,\n private modalService: ModalService,\n private broadcasterService: BroadcasterService,\n logService: LogService,\n sendApiService: SendApiService,\n dialogService: DialogServiceAbstraction\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 const component = await this.editSend(null);\n component.type = this.type;\n }\n\n async editSend(send: SendView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.sendAddEditModalRef,\n (comp) => {\n comp.sendId = send == null ? null : send.id;\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onSavedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe\n comp.onDeletedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n}\n","import { Component, 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 { BulkRestoreDialogComponent } from \"./bulk-restore-dialog/bulk-restore-dialog.component\";\nimport { BulkShareDialogComponent } from \"./bulk-share-dialog/bulk-share-dialog.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [\n BulkDeleteDialogComponent,\n BulkMoveDialogComponent,\n BulkRestoreDialogComponent,\n BulkShareDialogComponent,\n ],\n exports: [\n BulkDeleteDialogComponent,\n BulkMoveDialogComponent,\n BulkRestoreDialogComponent,\n BulkShareDialogComponent,\n ],\n})\nexport class BulkDialogsModule {}\n","import { 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 { Component } from \"@angular/core\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { UpdateKeyRequest } from \"@bitwarden/common/models/request/update-key.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 { EncString } from \"@bitwarden/common/platform/models/domain/enc-string\";\nimport { CipherWithIdRequest } from \"@bitwarden/common/vault//models/request/cipher-with-id.request\";\nimport { CipherService } from \"@bitwarden/common/vault/abstractions/cipher.service\";\nimport { FolderService } from \"@bitwarden/common/vault/abstractions/folder/folder.service.abstraction\";\nimport { SyncService } from \"@bitwarden/common/vault/abstractions/sync/sync.service.abstraction\";\nimport { FolderWithIdRequest } from \"@bitwarden/common/vault/models/request/folder-with-id.request\";\n\n@Component({\n selector: \"app-update-key\",\n templateUrl: \"update-key.component.html\",\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordRequired\")\n );\n return;\n }\n\n try {\n this.formPromise = this.makeRequest().then((request) => {\n return this.apiService.postAccountKey(request);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"keyUpdated\"),\n this.i18nService.t(\"logBackInOthersToo\"),\n { timeout: 15000 }\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async makeRequest(): Promise {\n const key = await this.cryptoService.getKey();\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n await this.syncService.fullSync(true);\n\n const folders = await firstValueFrom(this.folderService.folderViews$);\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n return request;\n }\n}\n","
    \n
    \n \n
    \n

    {{ \"updateEncryptionKey\" | i18n }}

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

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

    \n {{ \"updateEncryptionKeyWarning\" | i18n }}\n \n \n
    \n
    \n \n \n
    \n \n
    \n
    \n","import { 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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction,\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 { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction,\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\";\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\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n protected componentName = \"\";\n\n constructor(\n protected folderService: FolderService,\n protected folderApiService: FolderApiServiceAbstraction,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService,\n protected dialogService: DialogServiceAbstraction\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderApiService.save(folder);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedFolder\" : \"addedFolder\")\n );\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"deleteFolder\" },\n content: { key: \"deleteFolderConfirmation\" },\n type: SimpleDialogType.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 }\n}\n","
    \n
    \n \n
    \n

    {{ title }}

    \n \n ×\n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n \n \n \n
    \n
    \n \n
    \n
    \n","import { Component } from \"@angular/core\";\n\nimport { DialogServiceAbstraction } from \"@bitwarden/angular/services/dialog\";\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\";\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: DialogServiceAbstraction\n ) {\n super(\n folderService,\n folderApiService,\n i18nService,\n platformUtilsService,\n logService,\n dialogService\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\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach((c) => (c.checked = false));\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections.filter(isChecked).map((c) => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n const orgs = await firstValueFrom(this.organizations$);\n const orgName =\n orgs.find((o) => o.id === this.organizationId)?.name ?? this.i18nService.t(\"organization\");\n\n try {\n this.formPromise = this.cipherService\n .shareWithServer(cipherView, this.organizationId, selectedCollectionIds)\n .then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemToOrg\", cipherView.name, orgName)\n );\n });\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if (this.collections[i].checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
    \n
    \n
    \n
    \n

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

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

    {{ \"moveToOrgDesc\" | i18n }}

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

    {{ \"collections\" | i18n }}

    \n
    \n \n \n
    \n
    \n
    \n {{ \"noCollectionsInList\" | i18n }}\n
    \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n \n \n
    \n
    \n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"newOrganization\" | i18n }}\n \n \n
    \n
    \n
    \n
    \n
    \n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { ShareComponent as BaseShareComponent } from \"@bitwarden/angular/components/share.component\";\nimport { 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 {{ \"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 {\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\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 /**\n * All organizations that can be shown\n */\n @Input() organizations: Organization[] = [];\n\n /**\n * Currently selected collection\n */\n @Input() collection?: TreeNode;\n\n /**\n * Whether 'Collection' option is shown in the 'New' dropdown\n */\n @Input() canCreateCollections: boolean;\n\n /**\n * Emits an event when the new item button is clicked in the header\n */\n @Output() onAddCipher = new EventEmitter();\n\n /**\n * Emits an event when the new collection button is clicked in the 'New' dropdown menu\n */\n @Output() onAddCollection = new EventEmitter();\n\n /**\n * Emits an event when the new folder button is clicked in the 'New' dropdown menu\n */\n @Output() onAddFolder = 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 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 {{ \"updateKeyTitle\" | i18n }}\n
    \n
    \n

    {{ \"updateEncryptionKeyShortDesc\" | i18n }}

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

    {{ \"updateBrowserDesc\" | i18n }}

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

    {{ \"premiumUpgradeUnlockFeatures\" | i18n }}

    \n \n {{ \"goPremium\" | i18n }}\n \n
    \n
    \n
    \n \n\n\n\n\n\n\n\n","import {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport {\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 { DialogServiceAbstraction, SimpleDialogType } from \"@bitwarden/angular/services/dialog\";\nimport { ModalService } from \"@bitwarden/angular/services/modal.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 { 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 { PasswordRepromptService } from \"@bitwarden/common/vault/abstractions/password-reprompt.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 { Icons } from \"@bitwarden/components\";\n\nimport { UpdateKeyComponent } from \"../../settings/update-key.component\";\nimport { CollectionDialogAction, openCollectionDialog } from \"../components/collection-dialog\";\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 BulkRestoreDialogResult,\n openBulkRestoreDialog,\n} from \"./bulk-action-dialogs/bulk-restore-dialog/bulk-restore-dialog.component\";\nimport {\n BulkShareDialogResult,\n openBulkShareDialog,\n} from \"./bulk-action-dialogs/bulk-share-dialog/bulk-share-dialog.component\";\nimport { CollectionsComponent } from \"./collections.component\";\nimport { FolderAddEditComponent } from \"./folder-add-edit.component\";\nimport { ShareComponent } from \"./share.component\";\nimport { VaultFilterComponent } from \"./vault-filter/components/vault-filter.component\";\nimport { VaultFilterService } from \"./vault-filter/services/abstractions/vault-filter.service\";\nimport { 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 @ViewChild(\"updateKeyTemplate\", { read: ViewContainerRef, static: true })\n updateKeyModalRef: ViewContainerRef;\n\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n showLowKdf = false;\n trashCleanupWarning: string = null;\n kdfIterations: number;\n activeFilter: VaultFilter = new VaultFilter();\n\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: DialogServiceAbstraction,\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 ) {}\n\n async ngOnInit() {\n this.showBrowserOutdated = window.navigator.userAgent.indexOf(\"MSIE\") !== -1;\n this.trashCleanupWarning =this.i18nService.t(\"trashCleanupWarningSelfHosted\");\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.isLowKdfIteration();\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 this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n\n const cipherId = getCipherIdFromParams(params);\n if (!cipherId) {\n return;\n }\n const cipherView = new CipherView();\n cipherView.id = cipherId;\n if (params.action === \"clone\") {\n await this.cloneCipher(cipherView);\n } else if (params.action === \"edit\") {\n await this.editCipher(cipherView);\n }\n }),\n 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((o) => o.canCreateNewCollections);\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 ||\n this.showPremiumCallout ||\n this.showUpdateKey ||\n this.showVerifyEmail ||\n this.showLowKdf\n );\n }\n\n emailVerified(verified: boolean) {\n this.showVerifyEmail = !verified;\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async 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 const ciphers = event.items.filter((i) => i.collection === undefined).map((i) => i.cipher);\n if (ciphers.length === 1) {\n await this.deleteCipher(ciphers[0]);\n } else {\n await this.bulkDelete(ciphers);\n }\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 }\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 const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = null;\n comp.onSavedFolder.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n });\n }\n );\n };\n\n editFolder = async (folder: FolderFilter): Promise => {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = folder.id;\n comp.onSavedFolder.pipe(takeUntil(this.destroy$)).subscribe(() => {\n modal.close();\n });\n comp.onDeletedFolder.pipe(takeUntil(this.destroy$)).subscribe(() => {\n // Navigate away if we deleted the colletion we were viewing\n if (this.filter.folderId === folder.id) {\n this.router.navigate([], {\n queryParams: { folderId: null },\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n modal.close();\n });\n }\n );\n };\n\n filterSearchText(searchText: string) {\n this.searchText$.next(searchText);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n } else if (cipher.organizationId != null) {\n const org = this.organizationService.get(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: cipher.organizationId,\n });\n return;\n }\n }\n\n let madeAttachmentChanges = false;\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n 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 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 != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = id;\n 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 } else if (result.action === CollectionDialogAction.Deleted) {\n // TODO: Remove collection from collectionService when collection\n // deletion is implemented in the individual vault in AC-1347\n this.refresh();\n }\n }\n\n async cloneCipher(cipher: CipherView) {\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 const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"restoreItemConfirmation\" },\n content: { key: \"restoreItem\" },\n type: SimpleDialogType.WARNING,\n });\n\n if (!confirmed) {\n return false;\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 const dialog = openBulkRestoreDialog(this.dialogService, {\n data: { cipherIds: selectedCipherIds },\n });\n\n const result = await lastValueFrom(dialog.closed);\n if (result === BulkRestoreDialogResult.Restored) {\n this.refresh();\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: SimpleDialogType.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(ciphers: CipherView[]) {\n if (!(await this.repromptCipher(ciphers))) {\n return;\n }\n\n const selectedIds = ciphers.map((cipher) => cipher.id);\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n const dialog = openBulkDeleteDialog(this.dialogService, {\n data: { permanent: this.filter.type === \"trash\", cipherIds: selectedIds },\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 updateKey() {\n await this.modalService.openViewRef(UpdateKeyComponent, this.updateKeyModalRef);\n }\n\n async isLowKdfIteration() {\n const kdfType = await this.stateService.getKdfType();\n const kdfOptions = await this.stateService.getKdfConfig();\n return kdfType === KdfType.PBKDF2_SHA256 && kdfOptions.iterations < DEFAULT_PBKDF2_ITERATIONS;\n }\n\n 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 { AuthGuard } from \"@bitwarden/angular/auth/guards/auth.guard\";\nimport { LockGuard } from \"@bitwarden/angular/auth/guards/lock.guard\";\nimport { UnauthGuard } from \"@bitwarden/angular/auth/guards/unauth.guard\";\n\nimport { SubscriptionRoutingModule } from \"../app/billing/settings/subscription-routing.module\";\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 { 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 { HomeGuard } from \"./guards/home.guard\";\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: [HomeGuard], // Redirects either to vault, login or lock page.\n },\n { path: \"login\", component: LoginComponent, canActivate: [UnauthGuard] },\n {\n path: \"login-with-device\",\n component: LoginWithDeviceComponent,\n data: { titleId: \"loginWithDevice\" },\n },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuard] },\n {\n path: \"register\",\n component: TrialInitiationComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"createAccount\" },\n },\n {\n path: \"trial\",\n redirectTo: \"register\",\n pathMatch: \"full\",\n },\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"enterpriseSingleSignOn\" },\n },\n {\n path: \"set-password\",\n component: SetPasswordComponent,\n data: { titleId: \"setMasterPassword\" },\n },\n {\n path: \"hint\",\n component: HintComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"passwordHint\" },\n },\n {\n path: \"lock\",\n component: LockComponent,\n canActivate: [LockGuard],\n },\n { path: \"verify-email\", component: VerifyEmailTokenComponent },\n {\n path: \"accept-organization\",\n component: AcceptOrganizationComponent,\n data: { titleId: \"joinOrganization\", doNotSaveUrl: false },\n },\n {\n path: \"accept-emergency\",\n component: AcceptEmergencyComponent,\n data: { titleId: \"acceptEmergency\", doNotSaveUrl: false },\n },\n {\n path: \"accept-families-for-enterprise\",\n component: AcceptFamilySponsorshipComponent,\n data: { titleId: \"acceptFamilySponsorship\", doNotSaveUrl: false },\n },\n { path: \"recover\", pathMatch: \"full\", redirectTo: \"recover-2fa\" },\n {\n path: \"recover-2fa\",\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"recoverAccountTwoStep\" },\n },\n {\n path: \"recover-delete\",\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"verify-recover-delete\",\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"send/:sendId/:key\",\n component: AccessComponent,\n data: { title: \"Bitwarden Send\" },\n },\n {\n path: \"update-temp-password\",\n component: UpdateTempPasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updateTempPassword\" },\n },\n {\n path: \"update-password\",\n component: UpdatePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updatePassword\" },\n },\n {\n path: \"remove-password\",\n component: RemovePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"removeMasterPassword\" },\n },\n ],\n },\n {\n path: \"\",\n component: UserLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n {\n path: \"vault\",\n loadChildren: () => VaultModule,\n },\n { path: \"sends\", component: SendComponent, data: { title: \"Send\" } },\n {\n path: \"create-organization\",\n component: CreateOrganizationComponent,\n data: { titleId: \"newOrganization\" },\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myAccount\" } },\n {\n path: \"preferences\",\n component: PreferencesComponent,\n data: { titleId: \"preferences\" },\n },\n {\n path: \"security\",\n loadChildren: () => SecurityRoutingModule,\n },\n {\n path: \"domain-rules\",\n component: DomainRulesComponent,\n data: { titleId: \"domainRules\" },\n },\n {\n path: \"subscription\",\n loadChildren: () => SubscriptionRoutingModule,\n },\n {\n path: \"emergency-access\",\n children: [\n {\n path: \"\",\n component: EmergencyAccessComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n {\n path: \":id\",\n component: EmergencyAccessViewComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n ],\n },\n {\n path: \"sponsored-families\",\n component: SponsoredFamiliesComponent,\n data: { titleId: \"sponsoredFamilies\" },\n },\n ],\n },\n {\n path: \"tools\",\n component: ToolsComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"generator\" },\n {\n path: \"\",\n loadChildren: () =>\n import(\"./tools/import-export/import-export.module\").then(\n (m) => m.ImportExportModule\n ),\n },\n {\n path: \"generator\",\n component: GeneratorComponent,\n data: { titleId: \"generator\" },\n },\n ],\n },\n {\n path: \"reports\",\n loadChildren: () => ReportsModule,\n },\n { path: \"setup/families-for-enterprise\", component: FamiliesForEnterpriseSetupComponent },\n ],\n },\n {\n path: \"organizations\",\n loadChildren: () =>\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 { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { EntityUsersComponent } from \"../../../admin-console/organizations/manage/entity-users.component\";\nimport { SharedModule } from \"../../../shared\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule],\n declarations: [EntityUsersComponent],\n exports: [EntityUsersComponent],\n})\nexport class OrganizationManageModule {}\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { 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\";\n\nimport { CheckboxModule } from \"@bitwarden/components\";\n\nimport { SharedModule } from \"../../../app/shared\";\n\nimport { LoginWithDeviceComponent } from \"./login-with-device.component\";\nimport { LoginComponent } from \"./login.component\";\n\n@NgModule({\n imports: [SharedModule, CheckboxModule],\n declarations: [LoginComponent, LoginWithDeviceComponent],\n exports: [LoginComponent, LoginWithDeviceComponent],\n})\nexport class LoginModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared\";\n\nimport { VerticalStepContentComponent } from \"./vertical-step-content.component\";\nimport { VerticalStep } from \"./vertical-step.component\";\nimport { VerticalStepperComponent } from \"./vertical-stepper.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [VerticalStepperComponent, VerticalStep, VerticalStepContentComponent],\n exports: [VerticalStepperComponent, VerticalStep],\n})\nexport class VerticalStepperModule {}\n","import { CdkStepperModule } from \"@angular/cdk/stepper\";\nimport { TitleCasePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormFieldModule } from \"@bitwarden/components\";\n\nimport { OrganizationCreateModule } from \"../../admin-console/organizations/create/organization-create.module\";\nimport { RegisterFormModule } from \"../../auth/register-form/register-form.module\";\nimport { BillingComponent } from \"../../billing/accounts/trial-initiation/billing.component\";\nimport { EnvironmentSelectorModule } from \"../../components/environment-selector/environment-selector.module\";\nimport { LooseComponentsModule, 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 { TrialInitiationComponent } from \"./trial-initiation.component\";\nimport { VerticalStepperModule } from \"./vertical-stepper/vertical-stepper.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n CdkStepperModule,\n VerticalStepperModule,\n FormFieldModule,\n RegisterFormModule,\n OrganizationCreateModule,\n LooseComponentsModule,\n EnvironmentSelectorModule,\n ],\n declarations: [\n TrialInitiationComponent,\n EnterpriseContentComponent,\n TeamsContentComponent,\n ConfirmationDetailsComponent,\n BillingComponent,\n DefaultContentComponent,\n EnterpriseContentComponent,\n Enterprise1ContentComponent,\n Enterprise2ContentComponent,\n TeamsContentComponent,\n Teams1ContentComponent,\n Teams2ContentComponent,\n CnetEnterpriseContentComponent,\n CnetIndividualContentComponent,\n CnetTeamsContentComponent,\n AbmEnterpriseContentComponent,\n AbmTeamsContentComponent,\n LogoCnetComponent,\n LogoForbesComponent,\n LogoUSNewsComponent,\n ],\n exports: [TrialInitiationComponent],\n providers: [TitleCasePipe],\n})\nexport class TrialInitiationModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { OrganizationCreateModule } from \"./admin-console/organizations/create/organization-create.module\";\nimport { OrganizationManageModule } from \"./admin-console/organizations/manage/organization-manage.module\";\nimport { OrganizationUserModule } from \"./admin-console/organizations/users/organization-user.module\";\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 OrganizationManageModule,\n OrganizationUserModule,\n OrganizationCreateModule,\n LoginModule,\n ],\n exports: [\n SharedModule,\n LooseComponentsModule,\n TrialInitiationModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n LoginModule,\n ],\n bootstrap: [],\n})\nexport class OssModule {}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nconst routes: Routes = [{ path: \"**\", redirectTo: \"\" }];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class WildcardRoutingModule {}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { LayoutModule } from \"@angular/cdk/layout\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { AppComponent } from \"./app.component\";\nimport { CoreModule } from \"./core\";\nimport { OssRoutingModule } from \"./oss-routing.module\";\nimport { OssModule } from \"./oss.module\";\nimport { WildcardRoutingModule } from \"./wildcard-routing.module\";\n\n@NgModule({\n imports: [\n OssModule,\n BrowserAnimationsModule,\n FormsModule,\n CoreModule,\n InfiniteScrollModule,\n DragDropModule,\n LayoutModule,\n OssRoutingModule,\n WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n ],\n declarations: [AppComponent],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n\nimport \"bootstrap\";\nimport \"jquery\";\nimport \"popper.js\";\n\nrequire(\"./scss/styles.scss\");\nrequire(\"./scss/tailwind.css\");\n\nimport { AppModule } from \"./app/app.module\";\n\nif (process.env.NODE_ENV === \"production\") {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","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 { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"@bitwarden/common/abstractions/api.service\";\nimport { AuthService } from \"@bitwarden/common/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 { SsoPreValidateResponse } from \"@bitwarden/common/auth/models/response/sso-pre-validate.response\";\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\n@Directive()\nexport class SsoComponent {\n identifier: string;\n loggingIn = false;\n\n formPromise: Promise;\n initiateSsoFormPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginChangePasswordNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"lock\";\n protected changePasswordRoute = \"set-password\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected clientId: string;\n protected redirectUri: string;\n protected state: string;\n protected codeChallenge: string;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationServiceAbstraction,\n protected logService: LogService\n ) {}\n\n async ngOnInit() {\n // eslint-disable-next-line rxjs/no-async-subscribe\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.code != null && qParams.state != null) {\n const codeVerifier = await this.stateService.getSsoCodeVerifier();\n const state = await this.stateService.getSsoState();\n await this.stateService.setSsoCodeVerifier(null);\n await this.stateService.setSsoState(null);\n if (\n qParams.code != null &&\n codeVerifier != null &&\n state != null &&\n this.checkState(state, qParams.state)\n ) {\n await this.logIn(\n qParams.code,\n codeVerifier,\n this.getOrgIdentifierFromState(qParams.state)\n );\n }\n } else if (\n qParams.clientId != null &&\n qParams.redirectUri != null &&\n qParams.state != null &&\n qParams.codeChallenge != null\n ) {\n this.redirectUri = qParams.redirectUri;\n this.state = qParams.state;\n this.codeChallenge = qParams.codeChallenge;\n this.clientId = qParams.clientId;\n }\n });\n }\n\n async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n if (this.identifier == null || this.identifier === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"ssoValidationFailed\"),\n this.i18nService.t(\"ssoIdentifierRequired\")\n );\n return;\n }\n\n this.initiateSsoFormPromise = this.apiService.preValidateSso(this.identifier);\n const response = await this.initiateSsoFormPromise;\n\n const authorizeUrl = await this.buildAuthorizeUrl(\n returnUri,\n includeUserIdentifier,\n response.token\n );\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n\n protected async buildAuthorizeUrl(\n returnUri?: string,\n includeUserIdentifier?: boolean,\n token?: string\n ): Promise {\n let codeChallenge = this.codeChallenge;\n let state = this.state;\n\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n\n if (codeChallenge == null) {\n const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, \"sha256\");\n codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n await this.stateService.setSsoCodeVerifier(codeVerifier);\n }\n\n if (state == null) {\n state = await this.passwordGenerationService.generatePassword(passwordOptions);\n if (returnUri) {\n state += `_returnUri='${returnUri}'`;\n }\n }\n\n // Add Organization Identifier to state\n state += `_identifier=${this.identifier}`;\n\n // Save state (regardless of new or existing)\n await this.stateService.setSsoState(state);\n\n let authorizeUrl =\n this.environmentService.getIdentityUrl() +\n \"/connect/authorize?\" +\n \"client_id=\" +\n this.clientId +\n \"&redirect_uri=\" +\n encodeURIComponent(this.redirectUri) +\n \"&\" +\n \"response_type=code&scope=api offline_access&\" +\n \"state=\" +\n state +\n \"&code_challenge=\" +\n codeChallenge +\n \"&\" +\n \"code_challenge_method=S256&response_mode=query&\" +\n \"domain_hint=\" +\n encodeURIComponent(this.identifier) +\n \"&ssoToken=\" +\n encodeURIComponent(token);\n\n if (includeUserIdentifier) {\n const userIdentifier = await this.apiService.getSsoUserIdentifier();\n authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n }\n\n return authorizeUrl;\n }\n\n private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n this.loggingIn = true;\n try {\n const credentials = new SsoLogInCredentials(\n code,\n codeVerifier,\n this.redirectUri,\n orgIdFromState\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n await this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute], {\n queryParams: {\n identifier: orgIdFromState,\n sso: \"true\",\n },\n });\n }\n } else if (response.resetMasterPassword) {\n if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n await this.onSuccessfulLoginChangePasswordNavigate();\n } else {\n this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdFromState,\n },\n });\n }\n } else if (response.forcePasswordReset !== ForceResetPasswordReason.None) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n await this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n if (this.onSuccessfulLogin != null) {\n await this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n await this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n\n // TODO: Key Connector Service should pass this error message to the logout callback instead of displaying here\n if (e.message === \"Key Connector error\") {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"ssoKeyConnectorError\")\n );\n }\n }\n this.loggingIn = false;\n }\n\n private getOrgIdentifierFromState(state: string): string {\n if (state === null || state === undefined) {\n return null;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n return stateSplit.length > 1 ? stateSplit[1] : null;\n }\n\n private checkState(state: string, checkState: string): boolean {\n if (state === null || state === undefined) {\n return false;\n }\n if (checkState === null || checkState === undefined) {\n return false;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n const checkStateSplit = checkState.split(\"_identifier=\");\n return stateSplit[0] === checkStateSplit[0];\n }\n}\n","import { 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 { 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 LockGuard implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.Locked) {\n return true;\n }\n\n const redirectUrl =\n authStatus === AuthenticationStatus.LoggedOut ? this.loginpage : this.homepage;\n\n return this.router.createUrlTree([redirectUrl]);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"@bitwarden/common/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, 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 { 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\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","export enum SimpleDialogType {\n PRIMARY = \"primary\",\n SUCCESS = \"success\",\n INFO = \"info\",\n WARNING = \"warning\",\n DANGER = \"danger\",\n}\n","export enum SimpleDialogCloseType {\n ACCEPT = \"accept\",\n CANCEL = \"cancel\",\n}\n","import { Dialog, DialogRef } from \"@angular/cdk/dialog\";\n\nimport { SimpleDialogOptions } from \"./simple-dialog-options\";\n\nexport abstract class DialogServiceAbstraction extends Dialog {\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 openSimpleDialog: (simpleDialogOptions: SimpleDialogOptions) => Promise;\n\n /**\n * Opens a simple dialog.\n *\n * @deprecated Use `openSimpleDialogAcceptedPromise` 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 (see `SimpleDialogCloseType`)\n */\n openSimpleDialogRef: (simpleDialogOptions: SimpleDialogOptions) => DialogRef;\n}\n","import {\n DialogRef,\n DialogConfig,\n Dialog,\n DEFAULT_DIALOG_CONFIG,\n DIALOG_SCROLL_STRATEGY,\n} from \"@angular/cdk/dialog\";\nimport { Overlay, OverlayContainer } from \"@angular/cdk/overlay\";\nimport { ComponentType } from \"@angular/cdk/portal\";\nimport { Inject, Injectable, Injector, Optional, SkipSelf, TemplateRef } from \"@angular/core\";\n\nimport { I18nService } from \"@bitwarden/common/platform/abstractions/i18n.service\";\n\nimport { DialogServiceAbstraction } from \"./dialog.service.abstraction\";\nimport { SimpleDialogOptions } from \"./simple-dialog-options\";\nimport { Translation } from \"./translation\";\n\n// This is a temporary base class for Dialogs. It is intended to be removed once the Component Library is adopted by each app.\n@Injectable()\nexport abstract class DialogService extends Dialog implements DialogServiceAbstraction {\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 protected i18nService: I18nService\n ) {\n super(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy);\n }\n\n async openSimpleDialog(options: SimpleDialogOptions): Promise {\n throw new Error(\"Method not implemented.\");\n }\n\n openSimpleDialogRef(simpleDialogOptions: SimpleDialogOptions): DialogRef {\n throw new Error(\"Method not implemented.\");\n }\n\n override open(\n componentOrTemplateRef: ComponentType | TemplateRef,\n config?: DialogConfig>\n ): DialogRef {\n throw new Error(\"Method not implemented.\");\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","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@Injectable()\nexport class ModalService {\n protected modalList: ComponentRef[] = [];\n\n // Lazy loaded modules are not available in componentFactoryResolver,\n // therefore modules needs to manually initialize their resolvers.\n private factoryResolvers: Map, ComponentFactoryResolver> = new Map();\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private applicationRef: ApplicationRef,\n private injector: Injector\n ) {\n document.addEventListener(\"keyup\", (event) => {\n if (event.key === \"Escape\" && this.modalCount > 0) {\n this.topModal.instance.close();\n }\n });\n }\n\n get modalCount() {\n return this.modalList.length;\n }\n\n private get topModal() {\n return this.modalList[this.modalCount - 1];\n }\n\n /**\n * @deprecated Use `dialogService.open` (in web) or `modalService.open` (in desktop/browser) instead.\n * If replacing an existing call to this method, also remove any `@ViewChild` and `` associated with the\n * existing usage.\n */\n async openViewRef(\n componentType: Type,\n viewContainerRef: ViewContainerRef,\n setComponentParameters: (component: T) => void = null\n ): Promise<[ModalRef, T]> {\n const [modalRef, modalComponentRef] = this.openInternal(componentType, null, false);\n modalComponentRef.instance.setComponentParameters = setComponentParameters;\n\n viewContainerRef.insert(modalComponentRef.hostView);\n\n await modalRef.onCreated.pipe(first()).toPromise();\n\n return [modalRef, modalComponentRef.instance.componentRef.instance];\n }\n\n open(componentType: Type, config: ModalConfig = {}) {\n const { replaceTopModal = false, allowMultipleModals = false } = config;\n\n if (this.modalCount > 0 && replaceTopModal) {\n this.topModal.instance.close();\n }\n\n if (this.modalCount > 0 && !allowMultipleModals) {\n return;\n }\n\n const [modalRef] = this.openInternal(componentType, config, true);\n\n return modalRef;\n }\n\n registerComponentFactoryResolver(\n componentType: Type,\n componentFactoryResolver: ComponentFactoryResolver\n ): void {\n this.factoryResolvers.set(componentType, componentFactoryResolver);\n }\n\n resolveComponentFactory(componentType: Type): ComponentFactory {\n if (this.factoryResolvers.has(componentType)) {\n return this.factoryResolvers.get(componentType).resolveComponentFactory(componentType);\n }\n\n return this.componentFactoryResolver.resolveComponentFactory(componentType);\n }\n\n closeAll(): void {\n this.modalList.forEach((modal) => modal.instance.close());\n }\n\n protected openInternal(\n componentType: Type,\n config?: ModalConfig,\n attachToDom?: boolean\n ): [ModalRef, ComponentRef] {\n const [modalRef, componentRef] = this.createModalComponent(config);\n componentRef.instance.childComponentType = componentType;\n\n if (attachToDom) {\n this.applicationRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n }\n\n modalRef.onClosed.pipe(first()).subscribe(() => {\n if (attachToDom) {\n this.applicationRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n\n this.modalList.pop();\n if (this.modalCount > 0) {\n this.topModal.instance.getFocus();\n }\n });\n\n this.setupHandlers(modalRef);\n\n this.modalList.push(componentRef);\n\n return [modalRef, componentRef];\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n let backdrop: HTMLElement = null;\n\n // Add backdrop, setup [data-dismiss] handler.\n modalRef.onCreated.pipe(first()).subscribe((el) => {\n document.body.classList.add(\"modal-open\");\n\n const modalEl: HTMLElement = el.querySelector(\".modal\");\n const dialogEl = modalEl.querySelector(\".modal-dialog\") as HTMLElement;\n\n backdrop = document.createElement(\"div\");\n backdrop.className = \"modal-backdrop fade\";\n backdrop.style.zIndex = `${this.modalCount}040`;\n modalEl.prepend(backdrop);\n\n dialogEl.addEventListener(\"click\", (e: Event) => {\n e.stopPropagation();\n });\n dialogEl.style.zIndex = `${this.modalCount}050`;\n\n const modals = Array.from(\n el.querySelectorAll('.modal-backdrop, .modal *[data-dismiss=\"modal\"]')\n );\n for (const closeElement of modals) {\n closeElement.addEventListener(\"click\", () => {\n modalRef.close();\n });\n }\n });\n\n // onClose is used in Web to hook into bootstrap. On other projects we pipe it directly to closed.\n modalRef.onClose.pipe(first()).subscribe(() => {\n modalRef.closed();\n\n if (this.modalCount === 0) {\n document.body.classList.remove(\"modal-open\");\n }\n });\n }\n\n protected createModalComponent(\n config: ModalConfig\n ): [ModalRef, ComponentRef] {\n const modalRef = new ModalRef();\n\n const map = new WeakMap();\n map.set(ModalConfig, config);\n map.set(ModalRef, modalRef);\n\n const componentFactory =\n this.componentFactoryResolver.resolveComponentFactory(DynamicModalComponent);\n const componentRef = componentFactory.create(new ModalInjector(this.injector, map));\n\n return [modalRef, componentRef];\n }\n}\n","import { Observable } from \"rxjs\";\n\nimport { ThemeType } from \"@bitwarden/common/enums\";\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\";\n\nimport { DialogServiceAbstraction, SimpleDialogType } from \"../../services/dialog\";\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise } = {};\n reuploadPromises: { [id: string]: Promise } = {};\n emergencyAccessId?: string = null;\n protected componentName = \"\";\n\n constructor(\n protected cipherService: CipherService,\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected win: Window,\n protected logService: LogService,\n protected stateService: StateService,\n protected fileDownloadService: FileDownloadService,\n protected dialogService: DialogServiceAbstraction\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"updateKey\")\n );\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"attachmentSaved\"));\n this.onUploadedAttachment.emit();\n } catch (e) {\n this.logService.error(e);\n }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = \"\";\n fileEl.type = \"file\";\n fileEl.value = \"\";\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"deleteAttachment\" },\n content: { key: \"deleteAttachmentConfirmation\" },\n type: SimpleDialogType.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\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"premiumRequired\" },\n content: { key: \"premiumRequiredDesc\" },\n acceptButtonText: { key: \"learnMore\" },\n type: SimpleDialogType.SUCCESS,\n });\n\n if (confirmed) {\n this.platformUtilsService.launchUri(\"https://vault.bitwarden.com/#/?premium=purchase\");\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.dialogService.openSimpleDialog({\n title: { key: \"featureUnavailable\" },\n content: { key: \"updateKey\" },\n acceptButtonText: { key: \"learnMore\" },\n type: SimpleDialogType.WARNING,\n });\n\n if (confirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key\"\n );\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = attachment as any;\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const encBuf = await EncArrayBuffer.fromResponse(response);\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain,\n attachment.fileName,\n decBuf,\n admin\n );\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter((a2) => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"attachmentSaved\")\n );\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n\n protected async reupload(attachment: AttachmentView) {\n // TODO: This should be removed but is needed since we re-use the same template\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"[appFallbackSrc]\",\n})\nexport class FallbackSrcDirective {\n @Input(\"appFallbackSrc\") appFallbackSrc: string;\n\n constructor(private el: ElementRef) {}\n\n @HostListener(\"error\") onError() {\n this.el.nativeElement.src = this.appFallbackSrc;\n }\n}\n","
    \n \n \n \n \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 { 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 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\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 getUserKeyFromKeyConnector: (keyConnectorUrl: string) => Promise;\n postUserKeyToKeyConnector: (\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ) => Promise;\n getKeyConnectorAlive: (keyConnectorUrl: string) => Promise;\n getOrganizationExport: (organizationId: string) => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breach-account.response\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { DeviceResponse } from \"./responses/device.response\";\n\nexport abstract class DevicesApiServiceAbstraction {\n getKnownDevice: (email: string, deviceIdentifier: string) => Promise;\n\n getDeviceByIdentifier: (deviceIdentifier: string) => Promise;\n\n updateTrustedDeviceKeys: (\n deviceIdentifier: string,\n devicePublicKeyEncryptedUserSymKey: string,\n userSymKeyEncryptedDevicePublicKey: string,\n deviceKeyEncryptedDevicePrivateKey: string\n ) => 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 { 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","export abstract class VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n}\n","import { VaultTimeoutAction } from \"../../enums/vault-timeout-action.enum\";\n\nexport abstract class VaultTimeoutSettingsService {\n setVaultTimeoutOptions: (\n vaultTimeout: number,\n vaultTimeoutAction: VaultTimeoutAction\n ) => Promise;\n getVaultTimeout: (userId?: string) => Promise;\n getVaultTimeoutAction: (userId?: string) => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: (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 { 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 { 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 { OrganizationEnrollSecretsManagerRequest } from \"../../models/request/organization/organization-enroll-secrets-manager.request\";\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\";\n\nexport class OrganizationApiServiceAbstraction {\n get: (id: string) => Promise;\n getBilling: (id: string) => Promise;\n getSubscription: (id: string) => Promise;\n getLicense: (id: string, installationId: string) => Promise;\n getAutoEnrollStatus: (identifier: string) => Promise;\n create: (request: OrganizationCreateRequest) => Promise;\n createLicense: (data: FormData) => Promise;\n save: (id: string, request: OrganizationUpdateRequest) => Promise;\n updatePayment: (id: string, request: PaymentRequest) => Promise;\n upgrade: (id: string, request: OrganizationUpgradeRequest) => Promise;\n updateSubscription: (id: string, request: OrganizationSubscriptionUpdateRequest) => Promise;\n updateSeats: (id: string, request: SeatRequest) => Promise;\n updateStorage: (id: string, request: StorageRequest) => Promise;\n verifyBank: (id: string, request: VerifyBankRequest) => Promise;\n cancel: (id: string) => Promise;\n reinstate: (id: string) => Promise;\n leave: (id: string) => Promise;\n delete: (id: string, request: SecretVerificationRequest) => Promise;\n updateLicense: (id: string, data: FormData) => Promise;\n importDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise;\n getOrCreateApiKey: (id: string, request: OrganizationApiKeyRequest) => Promise;\n getApiKeyInformation: (\n id: string,\n organizationApiKeyType?: OrganizationApiKeyType\n ) => Promise>;\n rotateApiKey: (id: string, request: OrganizationApiKeyRequest) => Promise;\n getTaxInfo: (id: string) => Promise;\n updateTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise;\n getKeys: (id: string) => Promise;\n updateKeys: (id: string, request: OrganizationKeysRequest) => Promise;\n getSso: (id: string) => Promise;\n updateSso: (id: string, request: OrganizationSsoRequest) => Promise;\n selfHostedSyncLicense: (id: string) => Promise;\n updateEnrollSecretsManager: (\n id: string,\n request: OrganizationEnrollSecretsManagerRequest\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 || org.canManageGroups;\n}\n\nexport function canAccessSettingsTab(org: Organization): boolean {\n return (\n org.isOwner ||\n org.canManagePolicies ||\n org.canManageSso ||\n org.canManageScim ||\n org.canAccessImportExport\n );\n}\n\nexport function canAccessMembersTab(org: Organization): boolean {\n return org.canManageUsers || org.canManageUsersPassword;\n}\n\nexport function canAccessGroupsTab(org: Organization): boolean {\n return org.canManageGroups;\n}\n\nexport function canAccessReportingTab(org: Organization): boolean {\n return org.canAccessReports || org.canAccessEventLogs;\n}\n\nexport function canAccessBillingTab(org: Organization): boolean {\n return org.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\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 InternalOrganizationService extends OrganizationService {\n replace: (organizations: { [id: string]: 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 { 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 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.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.canCreateNewCollections || this.canEditAnyCollection || this.canDeleteAnyCollection;\n }\n\n get canEditAssignedCollections() {\n return this.isManager || this.permissions.editAssignedCollections;\n }\n\n get canDeleteAssignedCollections() {\n return this.isManager || this.permissions.deleteAssignedCollections;\n }\n\n get canViewAssignedCollections() {\n return this.canDeleteAssignedCollections || this.canEditAssignedCollections;\n }\n\n get canManageGroups() {\n return (this.isAdmin || this.permissions.manageGroups) && this.useGroups;\n }\n\n get canManageSso() {\n return (this.isAdmin || this.permissions.manageSso) && this.useSso;\n }\n\n get 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 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 { 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 { Observable } from \"rxjs\";\n\nimport { AuthRequestPushNotification } from \"../../models/response/notification.response\";\nimport { SymmetricCryptoKey } 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 { Organization } from \"../../admin-console/models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class KeyConnectorService {\n getAndSetKey: (url?: string) => Promise;\n getManagingOrganization: () => Promise;\n getUsesKeyConnector: () => Promise;\n migrateUser: () => Promise;\n userNeedsMigration: () => Promise;\n convertNewSsoUserToKeyConnector: (\n tokenResponse: IdentityTokenResponse,\n orgId: string\n ) => Promise;\n setUsesKeyConnector: (enabled: boolean) => Promise;\n setConvertAccountRequired: (status: boolean) => Promise;\n getConvertAccountRequired: () => Promise;\n removeConvertAccountRequired: () => Promise;\n clear: () => Promise;\n}\n","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 { IdentityTokenResponse } from \"../models/response/identity-token.response\";\n\nexport abstract class TokenService {\n setTokens: (\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n setClientId: (clientId: string) => Promise;\n getClientId: () => Promise;\n setClientSecret: (clientSecret: string) => Promise;\n getClientSecret: () => Promise;\n setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise;\n getTwoFactorToken: () => Promise;\n clearTwoFactorToken: () => Promise;\n clearToken: (userId?: string) => Promise;\n decodeToken: (token?: string) => any;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","import { TwoFactorProviderType } from \"../enums/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","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 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","export 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 */\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 */\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 { SymmetricCryptoKey } 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 decKey: SymmetricCryptoKey,\n public localPasswordHash: string,\n public twoFactor?: TokenTwoFactorRequest\n ) {}\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 { 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: true,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","export 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 TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\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","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\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n Cipher_ClientToggledCardNumberVisible = 1117,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n OrganizationUser_AdminResetPassword = 1508,\n OrganizationUser_ResetSsoLink = 1509,\n OrganizationUser_FirstSsoLogin = 1510,\n OrganizationUser_Revoked = 1511,\n OrganizationUser_Restored = 1512,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n Organization_ClientExportedVault = 1602,\n Organization_VaultAccessed = 1603,\n Organization_EnabledSso = 1604,\n Organization_DisabledSso = 1605,\n Organization_EnabledKeyConnector = 1606,\n Organization_DisabledKeyConnector = 1607,\n Organization_SponsorshipsSynced = 1608,\n\n Policy_Updated = 1700,\n\n ProviderUser_Invited = 1800,\n ProviderUser_Confirmed = 1801,\n ProviderUser_Updated = 1802,\n ProviderUser_Removed = 1803,\n\n ProviderOrganization_Created = 1900,\n ProviderOrganization_Added = 1901,\n ProviderOrganization_Removed = 1902,\n ProviderOrganization_VaultAccessed = 1903,\n\n 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 TrustedDeviceEncryption = \"trusted-device-encryption\",\n}\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}\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}\n","export enum ProviderType {\n Msp = 0,\n Reseller = 1,\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","export enum StateVersion {\n One = 1, // Original flat key/value pair store\n Two = 2, // Move to a typed State object\n Three = 3, // Fix migration of users' premium status\n Four = 4, // Fix 'Never Lock' option by removing stale data\n Five = 5, // Migrate to new storage of encrypted organization keys\n Six = 6, // Delete account.keys.legacyEtmKey property\n Seven = 7, // Remove global desktop auto prompt setting, move to account\n Latest = Seven,\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 { BaseResponse } from \"../response/base.response\";\n\nimport { LoginUriApi } from \"./login-uri.api\";\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty(\"Username\");\n this.password = this.getResponseProperty(\"Password\");\n this.passwordRevisionDate = this.getResponseProperty(\"PasswordRevisionDate\");\n this.totp = this.getResponseProperty(\"Totp\");\n this.autofillOnPageLoad = this.getResponseProperty(\"AutofillOnPageLoad\");\n\n const uris = this.getResponseProperty(\"Uris\");\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { SecureNoteType } from \"../../enums\";\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 { 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 { LoginUriExport } from \"./login-uri.export\";\n\nexport class LoginExport {\n static template(): LoginExport {\n const req = new LoginExport();\n req.uris = [];\n req.username = \"jdoe\";\n req.password = \"myp@ssword123\";\n req.totp = \"JBSWY3DPEHPK3PXP\";\n return req;\n }\n\n static toView(req: LoginExport, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map((u) => LoginUriExport.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n static toDomain(req: LoginExport, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map((u) => LoginUriExport.toDomain(u));\n }\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.totp = req.totp != null ? new EncString(req.totp) : null;\n return domain;\n }\n\n uris: LoginUriExport[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView | LoginDomain) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n if (o instanceof LoginView) {\n this.uris = o.uris.map((u) => new LoginUriExport(u));\n } else {\n this.uris = o.uris.map((u) => new LoginUriExport(u));\n }\n }\n\n if (o instanceof LoginView) {\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n } else {\n this.username = o.username?.encryptedString;\n this.password = o.password?.encryptedString;\n this.totp = o.totp?.encryptedString;\n }\n }\n}\n","import { SecureNoteType } from \"../../enums\";\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 { SecureNoteExport } from \"./secure-note.export\";\n\nexport class CipherExport {\n static template(): CipherExport {\n const req = new CipherExport();\n req.organizationId = null;\n req.collectionIds = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = \"Item name\";\n req.notes = \"Some notes about this item.\";\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n req.reprompt = CipherRepromptType.None;\n return req;\n }\n\n static toView(req: CipherExport, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n if (view.collectionIds || req.collectionIds) {\n const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n view.collectionIds = Array.from(set.values());\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n view.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n view.fields = req.fields.map((f) => FieldExport.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = LoginExport.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNoteExport.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = CardExport.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = IdentityExport.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: CipherExport, domain = new CipherDomain()) {\n domain.type = req.type;\n domain.folderId = req.folderId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.notes = req.notes != null ? new EncString(req.notes) : null;\n domain.favorite = req.favorite;\n domain.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n domain.fields = req.fields.map((f) => FieldExport.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = LoginExport.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNoteExport.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = CardExport.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = IdentityExport.toDomain(req.identity);\n break;\n }\n\n return domain;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n collectionIds: string[];\n name: string;\n notes: string;\n favorite: boolean;\n fields: FieldExport[];\n login: LoginExport;\n secureNote: SecureNoteExport;\n card: CardExport;\n identity: IdentityExport;\n reprompt: CipherRepromptType;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n this.reprompt = o.reprompt;\n\n if (o instanceof CipherView) {\n this.name = o.name;\n this.notes = o.notes;\n } else {\n this.name = o.name?.encryptedString;\n this.notes = o.notes?.encryptedString;\n }\n\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n if (o instanceof CipherView) {\n this.fields = o.fields.map((f) => new FieldExport(f));\n } else {\n this.fields = o.fields.map((f) => new FieldExport(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new LoginExport(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteExport(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardExport(o.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityExport(o.identity);\n break;\n }\n }\n}\n","import { Cipher as CipherDomain } from \"../../vault/models/domain/cipher\";\nimport { CipherView } from \"../../vault/models/view/cipher.view\";\n\nimport { CipherExport } from \"./cipher.export\";\n\nexport class CipherWithIdExport extends CipherExport {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { 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","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 { 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","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\";\n\nimport { FeatureFlag } from \"../../../enums/feature-flag.enum\";\n\nimport { ServerConfig } from \"./server-config\";\n\nexport abstract class ConfigServiceAbstraction {\n serverConfig$: Observable;\n fetchServerConfig: () => Promise;\n getFeatureFlagBool: (key: FeatureFlag, defaultValue?: boolean) => Promise;\n getFeatureFlagString: (key: FeatureFlag, defaultValue?: string) => Promise;\n getFeatureFlagNumber: (key: FeatureFlag, defaultValue?: number) => Promise;\n getCloudRegion: (defaultValue?: string) => Promise;\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 | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n argon2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n iterations: number,\n memory: number,\n parallelism: number\n ) => Promise;\n hkdf: (\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (\n value: ArrayBuffer | string,\n key: ArrayBuffer | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { 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 { SymmetricCryptoKey } from \"../models/domain/symmetric-crypto-key\";\n\nexport abstract class CryptoService {\n setKey: (key: SymmetricCryptoKey) => Promise;\n setKeyHash: (keyHash: string) => Promise;\n setEncKey: (encKey: string) => Promise;\n setEncPrivateKey: (encPrivateKey: string) => Promise;\n setOrgKeys: (\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ) => Promise;\n setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise;\n getKey: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n getKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n getKeyHash: () => Promise;\n compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise;\n getEncKey: (key?: SymmetricCryptoKey) => Promise;\n getPublicKey: () => Promise;\n getPrivateKey: () => Promise;\n getFingerprint: (fingerprintMaterial: string, publicKey?: ArrayBuffer) => Promise;\n getOrgKeys: () => Promise>;\n getOrgKey: (orgId: string) => Promise;\n getProviderKey: (providerId: string) => Promise;\n getKeyForUserEncryption: (key?: SymmetricCryptoKey) => Promise;\n hasKey: () => Promise;\n hasKeyInMemory: (userId?: string) => Promise;\n hasKeyStored: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n hasEncKey: () => Promise;\n clearKey: (clearSecretStorage?: boolean, userId?: string) => Promise;\n clearKeyHash: () => Promise;\n clearEncKey: (memoryOnly?: boolean, userId?: string) => Promise;\n clearKeyPair: (memoryOnly?: boolean, userId?: string) => Promise;\n clearOrgKeys: (memoryOnly?: boolean, userId?: string) => Promise;\n clearProviderKeys: (memoryOnly?: boolean) => Promise;\n clearPinProtectedKey: () => Promise;\n clearKeys: (userId?: string) => Promise;\n toggleKey: () => Promise;\n makeKey: (\n password: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig\n ) => Promise;\n makeKeyFromPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig,\n protectedKeyCs?: EncString\n ) => Promise;\n makeShareKey: () => Promise<[EncString, SymmetricCryptoKey]>;\n makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n makePinKey: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfConfig: KdfConfig\n ) => Promise;\n makeSendKey: (keyMaterial: ArrayBuffer) => Promise;\n hashPassword: (\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ) => Promise;\n makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n remakeEncKey: (\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ) => Promise<[SymmetricCryptoKey, EncString]>;\n encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise;\n rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise;\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptFromBytes: (encBuffer: EncArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n validateKey: (key: SymmetricCryptoKey) => Promise;\n}\n","import { 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 * @remarks For desktop and browser use only.\n * For web, use PlatformUtilsService.isSelfHost()\n */\n isSelfHosted: () => 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 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?: any) => void | boolean;\n readFromClipboard: (options?: any) => 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 { 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 { GeneratedPasswordHistory } from \"../../tools/generator/password\";\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 { Account, AccountSettingsSettings } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/enc-string\";\nimport { StorageOptions } from \"../models/domain/storage-options\";\nimport { DeviceKey, SymmetricCryptoKey } 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 getCryptoMasterKey: (options?: StorageOptions) => Promise;\n setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getCryptoMasterKeyAuto: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyAuto: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyB64: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyB64: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n hasCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyBiometric: (value: 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 getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setDecryptedCryptoSymmetricKey: (\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ) => Promise;\n getDecryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise>;\n setDecryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setDecryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getDecryptedPinProtected: (options?: StorageOptions) => Promise;\n setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\n getDecryptedPolicies: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this, use PolicyService\n */\n setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise;\n getDecryptedPrivateKey: (options?: StorageOptions) => Promise;\n setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n /**\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, options?: StorageOptions) => Promise;\n getEmail: (options?: StorageOptions) => Promise;\n setEmail: (value: string, options?: StorageOptions) => Promise;\n getEmailVerified: (options?: StorageOptions) => Promise;\n setEmailVerified: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAlwaysOnTop: (options?: StorageOptions) => Promise;\n setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise;\n setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegrationFingerprint: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableCloseToTray: (options?: StorageOptions) => Promise;\n setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableDuckDuckGoBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableDuckDuckGoBrowserIntegration: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableFullWidth: (options?: StorageOptions) => Promise;\n setEnableFullWidth: (value: boolean, options?: StorageOptions) => Promise;\n getEnableMinimizeToTray: (options?: StorageOptions) => Promise;\n setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableStartToTray: (options?: StorageOptions) => Promise;\n setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableTray: (options?: StorageOptions) => Promise;\n setEnableTray: (value: boolean, options?: StorageOptions) => Promise;\n getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;\n setEncryptedCiphers: (\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;\n setEncryptedCollections: (\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;\n /**\n * @deprecated Do not call this directly, use FolderService\n */\n setEncryptedFolders: (\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise<{ [orgId: string]: EncryptedOrganizationKeyData }>;\n setEncryptedOrganizationKeys: (\n value: { [orgId: string]: EncryptedOrganizationKeyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setEncryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getEncryptedPinProtected: (options?: StorageOptions) => Promise;\n setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\n getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n /**\n * @deprecated Do not call this directly, use PolicyService\n */\n setEncryptedPolicies: (\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPrivateKey: (options?: StorageOptions) => Promise;\n setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedProviderKeys: (options?: StorageOptions) => Promise;\n setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise;\n /**\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 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: (value: any, options?: StorageOptions) => Promise;\n getUsernameGenerationOptions: (options?: StorageOptions) => Promise;\n setUsernameGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getGeneratorOptions: (options?: StorageOptions) => Promise;\n setGeneratorOptions: (value: any, options?: StorageOptions) => Promise;\n getProtectedPin: (options?: StorageOptions) => Promise;\n setProtectedPin: (value: string, options?: StorageOptions) => Promise;\n getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;\n setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise;\n getPublicKey: (options?: StorageOptions) => Promise;\n setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getRefreshToken: (options?: StorageOptions) => Promise;\n setRefreshToken: (value: string, options?: StorageOptions) => Promise;\n getRememberedEmail: (options?: StorageOptions) => Promise;\n setRememberedEmail: (value: string, options?: StorageOptions) => Promise;\n getSecurityStamp: (options?: StorageOptions) => Promise;\n setSecurityStamp: (value: string, options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use SettingsService\n */\n getSettings: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use SettingsService\n */\n setSettings: (value: AccountSettingsSettings, options?: StorageOptions) => Promise;\n getSsoCodeVerifier: (options?: StorageOptions) => Promise;\n setSsoCodeVerifier: (value: string, options?: StorageOptions) => Promise;\n getSsoOrgIdentifier: (options?: StorageOptions) => Promise;\n setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise;\n getSsoState: (options?: StorageOptions) => Promise;\n setSsoState: (value: string, options?: StorageOptions) => Promise;\n getTheme: (options?: StorageOptions) => Promise;\n setTheme: (value: ThemeType, options?: StorageOptions) => Promise;\n getTwoFactorToken: (options?: StorageOptions) => Promise;\n setTwoFactorToken: (value: string, options?: StorageOptions) => Promise;\n getUserId: (options?: StorageOptions) => Promise;\n getUsesKeyConnector: (options?: StorageOptions) => Promise;\n setUsesKeyConnector: (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 getStateVersion: () => Promise;\n setStateVersion: (value: number) => Promise;\n getWindow: () => Promise;\n setWindow: (value: WindowState) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n getServerConfig: (options?: StorageOptions) => Promise;\n /**\n * @deprecated Do not call this directly, use ConfigService\n */\n setServerConfig: (value: ServerConfigData, options?: StorageOptions) => Promise;\n\n getAvatarColor: (options?: StorageOptions) => Promise;\n setAvatarColor: (value: string, options?: StorageOptions) => Promise;\n 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};\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 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 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: ArrayBuffer = null;\n readonly ivBytes: ArrayBuffer = null;\n readonly macBytes: ArrayBuffer = null;\n\n constructor(readonly buffer: ArrayBuffer) {\n const encBytes = new Uint8Array(buffer);\n const encType = encBytes[0];\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.macBytes = encBytes.slice(\n ENC_TYPE_LENGTH + IV_LENGTH,\n ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH\n ).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH + MAC_LENGTH).buffer;\n break;\n }\n case EncryptionType.AesCbc256_B64: {\n const minimumLength = ENC_TYPE_LENGTH + IV_LENGTH + MIN_DATA_LENGTH;\n if (encBytes.length < minimumLength) {\n this.throwDecryptionError();\n }\n\n this.ivBytes = encBytes.slice(ENC_TYPE_LENGTH, ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n this.dataBytes = encBytes.slice(ENC_TYPE_LENGTH + IV_LENGTH).buffer;\n break;\n }\n default:\n this.throwDecryptionError();\n }\n\n this.encryptionType = encType;\n }\n\n private throwDecryptionError() {\n throw new Error(\n \"Error parsing encrypted ArrayBuffer: data is corrupted or has an invalid format.\"\n );\n }\n\n static async fromResponse(response: {\n arrayBuffer: () => Promise;\n }): Promise {\n const buffer = await response.arrayBuffer();\n if (buffer == null) {\n throw new Error(\"Cannot create EncArrayBuffer from Response - Response is empty\");\n }\n return new EncArrayBuffer(buffer);\n }\n\n static fromB64(b64: string) {\n const buffer = Utils.fromB64ToArray(b64).buffer;\n return new EncArrayBuffer(buffer);\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { EncryptionType, 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?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(\n encryptedStringOrType: string | EncryptionType,\n data?: string,\n iv?: string,\n mac?: string\n ) {\n if (data != null) {\n this.initFromData(encryptedStringOrType as EncryptionType, data, iv, mac);\n } else {\n this.initFromEncryptedString(encryptedStringOrType as string);\n }\n }\n\n get ivBytes(): ArrayBuffer {\n return this.iv == null ? null : Utils.fromB64ToArray(this.iv).buffer;\n }\n\n get macBytes(): ArrayBuffer {\n return this.mac == null ? null : Utils.fromB64ToArray(this.mac).buffer;\n }\n\n get dataBytes(): ArrayBuffer {\n return this.data == null ? null : Utils.fromB64ToArray(this.data).buffer;\n }\n\n toJSON() {\n return this.encryptedString;\n }\n\n static fromJSON(obj: Jsonify): EncString {\n if (obj == null) {\n return null;\n }\n\n return new EncString(obj);\n }\n\n private initFromData(encType: EncryptionType, data: string, iv: string, mac: string) {\n if (iv != null) {\n this.encryptedString = encType + \".\" + iv + \"|\" + data;\n } else {\n this.encryptedString = encType + \".\" + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += \"|\" + mac;\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n }\n\n private initFromEncryptedString(encryptedString: string) {\n this.encryptedString = encryptedString as string;\n if (!this.encryptedString) {\n return;\n }\n\n const { encType, encPieces } = 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.getKeyForUserEncryption();\n }\n}\n","import { Jsonify, Opaque } from \"type-fest\";\n\nimport { EncryptionType } from \"../../../enums\";\nimport { Utils } from \"../../../platform/misc/utils\";\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error(\"Must provide key\");\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error(\"Unable to determine encType.\");\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error(\"Unsupported encType/key length.\");\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n\n toJSON() {\n // The whole object is constructed from the initial key, so just store the B64 key\n return { keyB64: this.keyB64 };\n }\n\n static fromString(s: string): SymmetricCryptoKey {\n if (s == null) {\n return null;\n }\n\n const arrayBuffer = Utils.fromB64ToArray(s).buffer;\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;\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.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) {\n const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory();\n const decrypted = await this.decryptHistory(encrypted);\n await this.stateService.setDecryptedPasswordGenerationHistory(decrypted);\n }\n\n const passwordGenerationHistory =\n await this.stateService.getDecryptedPasswordGenerationHistory();\n return passwordGenerationHistory != null\n ? passwordGenerationHistory\n : new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n await this.stateService.setDecryptedPasswordGenerationHistory(currentHistory);\n return await this.stateService.setEncryptedPasswordGenerationHistory(newHistory);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEncryptedPasswordGenerationHistory(null, { userId: userId });\n await this.stateService.setDecryptedPasswordGenerationHistory(null, { userId: userId });\n }\n\n 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","export abstract class UsernameGenerationServiceAbstraction {\n generateUsername: (options: any) => Promise;\n generateWord: (options: any) => Promise;\n generateSubaddress: (options: any) => Promise;\n generateCatchall: (options: any) => Promise;\n generateForwarded: (options: any) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n}\n","import { ApiService } from \"../../../../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class AnonAddyForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid AnonAddy API token.\";\n }\n if (options.anonaddy?.domain == null || options.anonaddy.domain === \"\") {\n throw \"Invalid AnonAddy domain.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n }),\n };\n const url = \"https://app.anonaddy.com/api/v1/aliases\";\n requestInit.body = JSON.stringify({\n domain: options.anonaddy.domain,\n description:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.data?.email;\n }\n if (response.status === 401) {\n throw \"Invalid AnonAddy API token.\";\n }\n throw \"Unknown AnonAddy error occurred.\";\n }\n}\n","import { ApiService } from \"../../../../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class DuckDuckGoForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid DuckDuckGo API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://quack.duckduckgo.com/api/email/addresses\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n if (json.address) {\n return `${json.address}@duck.com`;\n }\n } else if (response.status === 401) {\n throw \"Invalid DuckDuckGo API token.\";\n }\n throw \"Unknown DuckDuckGo error occurred.\";\n }\n}\n","import { ApiService } from \"../../../../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class FastmailForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Fastmail API token.\";\n }\n\n const accountId = await this.getAccountId(apiService, options);\n if (accountId == null || accountId === \"\") {\n throw \"Unable to obtain Fastmail masked email account ID.\";\n }\n\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://api.fastmail.com/jmap/api/\";\n requestInit.body = JSON.stringify({\n using: [\"https://www.fastmail.com/dev/maskedemail\", \"urn:ietf:params:jmap:core\"],\n methodCalls: [\n [\n \"MaskedEmail/set\",\n {\n accountId: accountId,\n create: {\n \"new-masked-email\": {\n state: \"enabled\",\n description: \"\",\n url: options.website,\n emailPrefix: options.fastmail.prefix,\n },\n },\n },\n \"0\",\n ],\n ],\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (\n json.methodResponses != null &&\n json.methodResponses.length > 0 &&\n json.methodResponses[0].length > 0\n ) {\n if (json.methodResponses[0][0] === \"MaskedEmail/set\") {\n if (json.methodResponses[0][1]?.created?.[\"new-masked-email\"] != null) {\n return json.methodResponses[0][1]?.created?.[\"new-masked-email\"]?.email;\n }\n if (json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"] != null) {\n throw (\n \"Fastmail error: \" +\n json.methodResponses[0][1]?.notCreated?.[\"new-masked-email\"]?.description\n );\n }\n } else if (json.methodResponses[0][0] === \"error\") {\n throw \"Fastmail error: \" + json.methodResponses[0][1]?.description;\n }\n }\n }\n if (response.status === 401 || response.status === 403) {\n throw \"Invalid Fastmail API token.\";\n }\n throw \"Unknown Fastmail error occurred.\";\n }\n\n private async getAccountId(apiService: ApiService, options: ForwarderOptions): Promise {\n const requestInit: RequestInit = {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Authorization: \"Bearer \" + options.apiKey,\n }),\n };\n const url = \"https://api.fastmail.com/.well-known/jmap\";\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200) {\n const json = await response.json();\n if (json.primaryAccounts != null) {\n return json.primaryAccounts[\"https://www.fastmail.com/dev/maskedemail\"];\n }\n }\n return null;\n }\n}\n","import { ApiService } from \"../../../../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class FirefoxRelayForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid Firefox Relay API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Token \" + options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://relay.firefox.com/api/v1/relayaddresses/\";\n requestInit.body = JSON.stringify({\n enabled: true,\n generated_for: options.website,\n description:\n (options.website != null ? options.website + \" - \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.full_address;\n }\n if (response.status === 401) {\n throw \"Invalid Firefox Relay API token.\";\n }\n throw \"Unknown Firefox Relay error occurred.\";\n }\n}\n","export class ForwarderOptions {\n apiKey: string;\n website: string;\n fastmail = new FastmailForwarderOptions();\n anonaddy = new AnonAddyForwarderOptions();\n forwardemail = new ForwardEmailForwarderOptions();\n}\n\nexport class FastmailForwarderOptions {\n prefix: string;\n}\n\nexport class AnonAddyForwarderOptions {\n domain: string;\n}\n\nexport class ForwardEmailForwarderOptions {\n domain: string;\n}\n","import { ApiService } from \"../../../../abstractions/api.service\";\n\nimport { Forwarder } from \"./forwarder\";\nimport { ForwarderOptions } from \"./forwarder-options\";\n\nexport class SimpleLoginForwarder implements Forwarder {\n async generate(apiService: ApiService, options: ForwarderOptions): Promise {\n if (options.apiKey == null || options.apiKey === \"\") {\n throw \"Invalid SimpleLogin API key.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authentication: options.apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n let url = \"https://app.simplelogin.io/api/alias/random/new\";\n if (options.website != null) {\n url += \"?hostname=\" + options.website;\n }\n requestInit.body = JSON.stringify({\n note:\n (options.website != null ? \"Website: \" + options.website + \". \" : \"\") +\n \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json.alias;\n }\n if (response.status === 401) {\n throw \"Invalid SimpleLogin API key.\";\n }\n 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 { UsernameGenerationServiceAbstraction } from \"./username-generation.service.abstraction\";\n\nconst DefaultOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n forwardedService: \"\",\n forwardedAnonAddyDomain: \"anonaddy.me\",\n forwardedForwardEmailDomain: \"hideaddress.net\",\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: any): Promise {\n if (options.type === \"catchall\") {\n return this.generateCatchall(options);\n } else if (options.type === \"subaddress\") {\n return this.generateSubaddress(options);\n } else if (options.type === \"forwarded\") {\n return this.generateForwarded(options);\n } else {\n return this.generateWord(options);\n }\n }\n\n async generateWord(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.wordCapitalize == null) {\n o.wordCapitalize = true;\n }\n if (o.wordIncludeNumber == null) {\n o.wordIncludeNumber = true;\n }\n\n const wordIndex = await this.cryptoService.randomNumber(0, EFFLongWordList.length - 1);\n let word = EFFLongWordList[wordIndex];\n if (o.wordCapitalize) {\n word = word.charAt(0).toUpperCase() + word.slice(1);\n }\n if (o.wordIncludeNumber) {\n const num = await this.cryptoService.randomNumber(1, 9999);\n word = word + this.zeroPad(num.toString(), 4);\n }\n return word;\n }\n\n async generateSubaddress(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n const subaddressEmail = o.subaddressEmail;\n if (subaddressEmail == null || subaddressEmail.length < 3) {\n return o.subaddressEmail;\n }\n const atIndex = subaddressEmail.indexOf(\"@\");\n if (atIndex < 1 || atIndex >= subaddressEmail.length - 1) {\n return subaddressEmail;\n }\n if (o.subaddressType == null) {\n o.subaddressType = \"random\";\n }\n\n const emailBeginning = subaddressEmail.substr(0, atIndex);\n const emailEnding = subaddressEmail.substr(atIndex + 1, subaddressEmail.length);\n\n let subaddressString = \"\";\n if (o.subaddressType === \"random\") {\n subaddressString = await this.randomString(8);\n } else if (o.subaddressType === \"website-name\") {\n subaddressString = o.website;\n }\n return emailBeginning + \"+\" + subaddressString + \"@\" + emailEnding;\n }\n\n async generateCatchall(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.catchallDomain == null || o.catchallDomain === \"\") {\n return null;\n }\n if (o.catchallType == null) {\n o.catchallType = \"random\";\n }\n\n let startString = \"\";\n if (o.catchallType === \"random\") {\n startString = await this.randomString(8);\n } else if (o.catchallType === \"website-name\") {\n startString = o.website;\n }\n return startString + \"@\" + o.catchallDomain;\n }\n\n async generateForwarded(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.forwardedService == null) {\n return null;\n }\n\n let forwarder: Forwarder = null;\n const forwarderOptions = new ForwarderOptions();\n forwarderOptions.website = o.website;\n if (o.forwardedService === \"simplelogin\") {\n forwarder = new SimpleLoginForwarder();\n forwarderOptions.apiKey = o.forwardedSimpleLoginApiKey;\n } else if (o.forwardedService === \"anonaddy\") {\n forwarder = new AnonAddyForwarder();\n forwarderOptions.apiKey = o.forwardedAnonAddyApiToken;\n forwarderOptions.anonaddy.domain = o.forwardedAnonAddyDomain;\n } else if (o.forwardedService === \"firefoxrelay\") {\n forwarder = new FirefoxRelayForwarder();\n forwarderOptions.apiKey = o.forwardedFirefoxApiToken;\n } else if (o.forwardedService === \"fastmail\") {\n forwarder = new FastmailForwarder();\n forwarderOptions.apiKey = o.forwardedFastmailApiToken;\n } else if (o.forwardedService === \"duckduckgo\") {\n forwarder = new DuckDuckGoForwarder();\n forwarderOptions.apiKey = o.forwardedDuckDuckGoToken;\n } 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: any) {\n await this.stateService.setUsernameGenerationOptions(options);\n }\n\n private async randomString(length: number) {\n let str = \"\";\n const charSet = \"abcdefghijklmnopqrstuvwxyz1234567890\";\n for (let i = 0; i < length; i++) {\n const randomCharIndex = await this.cryptoService.randomNumber(0, charSet.length - 1);\n str += charSet.charAt(randomCharIndex);\n }\n return str;\n }\n\n // ref: https://stackoverflow.com/a/10073788\n private zeroPad(number: string, width: number) {\n return number.length >= width\n ? number\n : new Array(width - number.length + 1).join(\"0\") + number;\n }\n}\n","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 { 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: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled = false;\n hideEmail = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n\n toJSON() {\n return Utils.merge(\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)?.buffer,\n cryptoKey: SymmetricCryptoKey.fromJSON(json.cryptoKey),\n text: SendTextView.fromJSON(json.text),\n file: SendFileView.fromJSON(json.file),\n revisionDate: json.revisionDate == null ? null : new Date(json.revisionDate),\n deletionDate: json.deletionDate == null ? null : new Date(json.deletionDate),\n expirationDate: json.expirationDate == null ? null : new Date(json.expirationDate),\n });\n }\n}\n","import { 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 key?: SymmetricCryptoKey,\n originalCipher?: Cipher\n ) => Promise;\n encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise;\n encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise;\n getAllDecryptedForUrl: (\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch?: UriMatchType\n ) => Promise;\n getAllFromApiForOrganization: (organizationId: string) => Promise;\n getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getNextCipherForUrl: (url: string) => Promise;\n updateLastUsedIndexForUrl: (url: string) => void;\n updateLastUsedDate: (id: string) => Promise;\n updateLastLaunchedDate: (id: string) => Promise;\n saveNeverDomain: (domain: string) => Promise;\n createWithServer: (cipher: Cipher) => Promise;\n updateWithServer: (cipher: Cipher) => Promise;\n shareWithServer: (\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n shareManyWithServer: (\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n saveAttachmentWithServer: (\n cipher: Cipher,\n unencryptedFile: any,\n admin?: boolean\n ) => Promise;\n saveAttachmentRawWithServer: (\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin?: boolean\n ) => Promise;\n saveCollectionsWithServer: (cipher: Cipher) => Promise;\n upsert: (cipher: CipherData | CipherData[]) => Promise;\n replace: (ciphers: { [id: string]: CipherData }) => Promise;\n clear: (userId: string) => Promise;\n moveManyWithServer: (ids: string[], folderId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string, 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: (ids: string[]) => 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","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n enabled: () => Promise;\n}\n","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../../../models/response/notification.response\";\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date, userId?: string) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","export enum CipherRepromptType {\n None = 0,\n Password = 1,\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","import { AttachmentResponse } from \"../response/attachment.response\";\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from \"../../../models/api/card.api\";\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipher-reprompt-type\";\nimport { CipherType } from \"../../enums/cipher-type\";\nimport { CipherResponse } from \"../response/cipher.response\";\n\nimport { AttachmentData } from \"./attachment.data\";\nimport { CardData } from \"./card.data\";\nimport { FieldData } from \"./field.data\";\nimport { IdentityData } from \"./identity.data\";\nimport { LoginData } from \"./login.data\";\nimport { PasswordHistoryData } from \"./password-history.data\";\nimport { SecureNoteData } from \"./secure-note.data\";\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\n name: string;\n notes: string;\n login?: LoginData;\n secureNote?: SecureNoteData;\n card?: CardData;\n identity?: IdentityData;\n fields?: FieldData[];\n attachments?: AttachmentData[];\n passwordHistory?: PasswordHistoryData[];\n collectionIds?: string[];\n creationDate: string;\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response?: CipherResponse, collectionIds?: string[]) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.folderId = response.folderId;\n this.edit = response.edit;\n this.viewPassword = response.viewPassword;\n this.organizationUseTotp = response.organizationUseTotp;\n this.favorite = response.favorite;\n this.revisionDate = response.revisionDate;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n this.creationDate = response.creationDate;\n this.deletedDate = response.deletedDate;\n this.reprompt = response.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { CollectionDetailsResponse } from \"../response/collection.response\";\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","import { 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 { LoginUriData } from \"./login-uri.data\";\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n if (data.uris) {\n this.uris = data.uris.map((u) => new LoginUriData(u));\n }\n }\n}\n","import { PasswordHistoryResponse } from \"../response/password-history.response\";\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { SecureNoteType } from \"../../../enums\";\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.getKeyForUserEncryption();\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(\n this,\n a,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n [\"id\", \"url\", \"sizeName\"]\n );\n return a;\n }\n\n static fromJSON(obj: Partial>): Attachment {\n if (obj == null) {\n return null;\n }\n\n const key = EncString.fromJSON(obj.key);\n const fileName = EncString.fromJSON(obj.fileName);\n\n return Object.assign(new Attachment(), obj, {\n key,\n fileName,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../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 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\n constructor(obj?: CipherData, localData: LocalData = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n },\n [\"id\", \"organizationId\", \"folderId\"]\n );\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n if (obj.viewPassword != null) {\n this.viewPassword = obj.viewPassword;\n } else {\n this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n }\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n this.reprompt = obj.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map((a) => new Attachment(a));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map((f) => new Field(f));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map((ph) => new Password(ph));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(encKey?: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n this.organizationId,\n encKey\n );\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId, encKey);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId, encKey);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise\n .then(() => {\n return attachment.decrypt(orgId, encKey);\n })\n .then((decAttachment) => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise\n .then(() => {\n return field.decrypt(orgId, encKey);\n })\n .then((decField) => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise\n .then(() => {\n return ph.decrypt(orgId, encKey);\n })\n .then((decPh) => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.edit = this.edit;\n c.viewPassword = this.viewPassword;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.creationDate = this.creationDate != null ? this.creationDate.toISOString() : null;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n c.reprompt = this.reprompt;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map((f) => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map((a) => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map((ph) => ph.toPasswordHistoryData());\n }\n return c;\n }\n\n static fromJSON(obj: Jsonify) {\n if (obj == null) {\n return null;\n }\n\n const domain = new Cipher();\n const name = EncString.fromJSON(obj.name);\n const notes = EncString.fromJSON(obj.notes);\n const revisionDate = obj.revisionDate == null ? null : new Date(obj.revisionDate);\n const deletedDate = obj.deletedDate == null ? null : new Date(obj.deletedDate);\n const attachments = obj.attachments?.map((a: any) => Attachment.fromJSON(a));\n const fields = obj.fields?.map((f: any) => Field.fromJSON(f));\n const passwordHistory = obj.passwordHistory?.map((ph: any) => Password.fromJSON(ph));\n\n Object.assign(domain, obj, {\n name,\n notes,\n revisionDate,\n deletedDate,\n attachments,\n fields,\n passwordHistory,\n });\n\n switch (obj.type) {\n case CipherType.Card:\n domain.card = Card.fromJSON(obj.card);\n break;\n case CipherType.Identity:\n domain.identity = Identity.fromJSON(obj.identity);\n break;\n case CipherType.Login:\n domain.login = Login.fromJSON(obj.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNote.fromJSON(obj.secureNote);\n break;\n default:\n break;\n }\n\n return domain;\n }\n}\n","import 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 { 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 { LoginUri } from \"./login-uri\";\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n autofillOnPageLoad: boolean;\n\n constructor(obj?: LoginData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate =\n obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.autofillOnPageLoad = obj.autofillOnPageLoad;\n this.buildDomainModel(\n this,\n obj,\n {\n username: null,\n password: null,\n totp: null,\n },\n []\n );\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach((u) => {\n this.uris.push(new LoginUri(u));\n });\n }\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new LoginView(this),\n {\n username: null,\n password: null,\n totp: null,\n },\n orgId,\n encKey\n );\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId, encKey);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate =\n this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n l.autofillOnPageLoad = this.autofillOnPageLoad;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach((u) => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n\n static fromJSON(obj: Partial>): Login {\n if (obj == null) {\n return null;\n }\n\n const username = EncString.fromJSON(obj.username);\n const password = EncString.fromJSON(obj.password);\n const totp = EncString.fromJSON(obj.totp);\n const passwordRevisionDate =\n obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);\n const uris = obj.uris?.map((uri: any) => LoginUri.fromJSON(uri));\n\n return Object.assign(new Login(), obj, {\n username,\n password,\n totp,\n passwordRevisionDate: passwordRevisionDate,\n uris: uris,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport Domain from \"../../../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 CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipher.request\";\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","import { CardApi } from \"../../../models/api/card.api\";\nimport { FieldApi } from \"../../../models/api/field.api\";\nimport { IdentityApi } from \"../../../models/api/identity.api\";\nimport { LoginUriApi } from \"../../../models/api/login-uri.api\";\nimport { LoginApi } from \"../../../models/api/login.api\";\nimport { SecureNoteApi } from \"../../../models/api/secure-note.api\";\nimport { CipherRepromptType } from \"../../enums/cipher-reprompt-type\";\nimport { CipherType } from \"../../enums/cipher-type\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentRequest } from \"./attachment.request\";\nimport { PasswordHistoryRequest } from \"./password-history.request\";\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string };\n attachments2: { [id: string]: AttachmentRequest };\n lastKnownRevisionDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n this.reprompt = cipher.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate =\n cipher.login.passwordRevisionDate != null\n ? cipher.login.passwordRevisionDate.toISOString()\n : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map((u) => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName =\n cipher.card.cardholderName != null ? cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth =\n cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear =\n cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title =\n cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName =\n cipher.identity.firstName != null ? cipher.identity.firstName.encryptedString : null;\n this.identity.middleName =\n cipher.identity.middleName != null ? cipher.identity.middleName.encryptedString : null;\n this.identity.lastName =\n cipher.identity.lastName != null ? cipher.identity.lastName.encryptedString : null;\n this.identity.address1 =\n cipher.identity.address1 != null ? cipher.identity.address1.encryptedString : null;\n this.identity.address2 =\n cipher.identity.address2 != null ? cipher.identity.address2.encryptedString : null;\n this.identity.address3 =\n cipher.identity.address3 != null ? cipher.identity.address3.encryptedString : null;\n this.identity.city =\n cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state =\n cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode =\n cipher.identity.postalCode != null ? cipher.identity.postalCode.encryptedString : null;\n this.identity.country =\n cipher.identity.country != null ? cipher.identity.country.encryptedString : null;\n this.identity.company =\n cipher.identity.company != null ? cipher.identity.company.encryptedString : null;\n this.identity.email =\n cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone =\n cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn =\n cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username =\n cipher.identity.username != null ? cipher.identity.username.encryptedString : null;\n this.identity.passportNumber =\n cipher.identity.passportNumber != null\n ? cipher.identity.passportNumber.encryptedString\n : null;\n this.identity.licenseNumber =\n cipher.identity.licenseNumber != null\n ? cipher.identity.licenseNumber.encryptedString\n : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map((f) => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n field.linkedId = f.linkedId;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach((ph) => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach((attachment) => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { 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\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.folderId = this.getResponseProperty(\"FolderId\") || null;\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.favorite = this.getResponseProperty(\"Favorite\") || false;\n this.edit = !!this.getResponseProperty(\"Edit\");\n if (this.getResponseProperty(\"ViewPassword\") == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty(\"ViewPassword\");\n }\n this.organizationUseTotp = this.getResponseProperty(\"OrganizationUseTotp\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.deletedDate = this.getResponseProperty(\"DeletedDate\");\n\n const login = this.getResponseProperty(\"Login\");\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty(\"Card\");\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty(\"Identity\");\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty(\"SecureNote\");\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty(\"Fields\");\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty(\"Attachments\");\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty(\"PasswordHistory\");\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n\n this.reprompt = this.getResponseProperty(\"Reprompt\") || CipherRepromptType.None;\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { 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 { 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: boolean = null;\n hidePasswords: boolean = null;\n\n constructor(c?: Collection | CollectionAccessDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n this.hidePasswords = c.hidePasswords;\n }\n }\n}\n","import { 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 { ItemView } from \"./item.view\";\nimport { LoginUriView } from \"./login-uri.view\";\n\nexport class LoginView extends ItemView {\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.Password)\n password: string = null;\n\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n autofillOnPageLoad: boolean = null;\n\n constructor(l?: Login) {\n super();\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n this.autofillOnPageLoad = l.autofillOnPageLoad;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? \"••••••••\" : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some((u) => u.canLaunch);\n }\n\n get hasTotp(): boolean {\n return !Utils.isNullOrWhitespace(this.totp);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find((u) => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n\n 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\n return Object.assign(new LoginView(), obj, {\n passwordRevisionDate: passwordRevisionDate,\n uris: uris,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { View } from \"../../../models/view/view\";\nimport { Password } from \"../domain/password\";\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n\n static fromJSON(obj: Partial>): PasswordHistoryView {\n const lastUsedDate = obj.lastUsedDate == null ? null : new Date(obj.lastUsedDate);\n\n return Object.assign(new PasswordHistoryView(), obj, {\n lastUsedDate: lastUsedDate,\n });\n }\n}\n","import { Jsonify } from \"type-fest\";\n\nimport { SecureNoteType } from \"../../../enums\";\nimport { SecureNote } from \"../domain/secure-note\";\n\nimport { ItemView } from \"./item.view\";\n\nexport class SecureNoteView extends ItemView {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n super();\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n\n static fromJSON(obj: Partial>): SecureNoteView {\n return Object.assign(new SecureNoteView(), obj);\n }\n}\n","import { Directive, HostListener, Input, OnDestroy, Optional } from \"@angular/core\";\nimport { BehaviorSubject, finalize, Subject, takeUntil, tap } from \"rxjs\";\n\nimport { LogService } from \"@bitwarden/common/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\") protected handler: FunctionReturningAwaitable;\n\n readonly loading$ = this._loading$.asObservable();\n\n constructor(\n private buttonComponent: ButtonLikeAbstraction,\n @Optional() private validationService?: ValidationService,\n @Optional() private logService?: LogService\n ) {}\n\n get loading() {\n return this._loading$.value;\n }\n\n set loading(value: boolean) {\n this._loading$.next(value);\n this.buttonComponent.loading = value;\n }\n\n @HostListener(\"click\")\n protected async onClick() {\n if (!this.handler || this.loading || this.disabled || this.buttonComponent.disabled) {\n return;\n }\n\n this.loading = true;\n functionToObservable(this.handler)\n .pipe(\n tap({\n error: (err: unknown) => {\n this.logService?.error(`Async action exception: ${err}`);\n this.validationService?.showError(err);\n },\n }),\n finalize(() => (this.loading = false)),\n takeUntil(this.destroy$)\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Directive, Input, OnDestroy, OnInit, Optional } from \"@angular/core\";\nimport { FormGroupDirective } from \"@angular/forms\";\nimport { BehaviorSubject, catchError, filter, of, Subject, switchMap, takeUntil } from \"rxjs\";\n\nimport { LogService } from \"@bitwarden/common/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\") protected 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","\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@Component({\n selector: \"bit-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type: CalloutTypes = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() useAlertRole = false;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.icon ??= defaultIcon[this.type];\n if (this.title == null && defaultI18n[this.type] != null) {\n this.title = this.i18nService.t(defaultI18n[this.type]);\n }\n }\n\n get calloutClass() {\n switch (this.type) {\n case \"danger\":\n return \"tw-border-l-danger-500\";\n case \"info\":\n return \"tw-border-l-info-500\";\n case \"success\":\n return \"tw-border-l-success-500\";\n case \"warning\":\n return \"tw-border-l-warning-500\";\n }\n }\n\n get headerClass() {\n switch (this.type) {\n case \"danger\":\n return \"!tw-text-danger\";\n case \"info\":\n return \"!tw-text-info\";\n case \"success\":\n return \"!tw-text-success\";\n case \"warning\":\n return \"!tw-text-warning\";\n }\n }\n}\n","import { Component, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormControlAbstraction } from \"../form-control\";\n\n@Component({\n selector: \"input[type=checkbox][bitCheckbox]\",\n template: \"\",\n providers: [{ provide: BitFormControlAbstraction, useExisting: CheckboxComponent }],\n})\nexport class CheckboxComponent implements BitFormControlAbstraction {\n @HostBinding(\"class\")\n protected inputClasses = [\n \"tw-appearance-none\",\n \"tw-outline-none\",\n \"tw-relative\",\n \"tw-transition\",\n \"tw-cursor-pointer\",\n \"tw-inline-block\",\n \"tw-rounded\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-h-3.5\",\n \"tw-w-3.5\",\n \"tw-mr-1.5\",\n \"tw-bottom-[-1px]\", // Fix checkbox looking off-center\n\n \"before:tw-content-['']\",\n \"before:tw-block\",\n \"before:tw-absolute\",\n \"before:tw-inset-0\",\n\n \"hover:tw-border-2\",\n \"[&>label]:tw-border-2\",\n\n \"focus-visible:tw-ring-2\",\n \"focus-visible:tw-ring-offset-2\",\n \"focus-visible:tw-ring-primary-700\",\n\n \"disabled:tw-cursor-auto\",\n \"disabled:tw-border\",\n \"disabled:tw-bg-secondary-100\",\n\n \"checked:tw-bg-primary-500\",\n \"checked:tw-border-primary-500\",\n\n \"checked:hover:tw-bg-primary-700\",\n \"checked:hover:tw-border-primary-700\",\n \"[&>label:hover]:checked:tw-bg-primary-700\",\n \"[&>label:hover]:checked:tw-border-primary-700\",\n\n \"checked:before:tw-bg-text-contrast\",\n \"checked:before:tw-mask-image-[var(--mask-image)]\",\n \"checked:before:tw-mask-position-[center]\",\n \"checked:before:tw-mask-repeat-[no-repeat]\",\n\n \"checked:disabled:tw-border-secondary-100\",\n \"checked:disabled:tw-bg-secondary-100\",\n\n \"checked:disabled:before:tw-bg-text-muted\",\n ];\n\n constructor(@Optional() @Self() private ngControl?: NgControl) {}\n\n @HostBinding(\"style.--mask-image\")\n protected maskImage = `url('data:image/svg+xml,%3Csvg class=\"svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"8\" height=\"8\" viewBox=\"0 0 10 10\"%3E%3Cpath d=\"M0.5 6.2L2.9 8.6L9.5 1.4\" fill=\"none\" stroke=\"white\" stroke-width=\"2\"%3E%3C/path%3E%3C/svg%3E')`;\n\n @HostBinding()\n @Input()\n get disabled() {\n return this._disabled ?? this.ngControl?.disabled ?? false;\n }\n set disabled(value: any) {\n this._disabled = value != null && value !== false;\n }\n private _disabled: boolean;\n\n @Input()\n get required() {\n return (\n this._required ?? this.ngControl?.control?.hasValidator(Validators.requiredTrue) ?? false\n );\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n get error(): [string, any] {\n const key = Object.keys(this.ngControl.errors)[0];\n return [key, this.ngControl.errors[key]];\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormControlModule } from \"../form-control\";\nimport { SharedModule } from \"../shared\";\n\nimport { CheckboxComponent } from \"./checkbox.component\";\n\n@NgModule({\n imports: [SharedModule, CommonModule, FormControlModule],\n declarations: [CheckboxComponent],\n exports: [CheckboxComponent],\n})\nexport class CheckboxModule {}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { Utils } from \"@bitwarden/common/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","\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, HostListener, Input, Optional } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitDialogClose]\",\n})\nexport class DialogCloseDirective {\n @Input(\"bit-dialog-close\") dialogResult: any;\n\n constructor(@Optional() public dialogRef: DialogRef) {}\n\n @HostListener(\"click\") close(): void {\n this.dialogRef.close(this.dialogResult);\n }\n}\n","import { CdkDialogContainer, DialogRef } from \"@angular/cdk/dialog\";\nimport { Directive, HostBinding, Input, OnInit, Optional } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"[bitDialogTitleContainer]\",\n})\nexport class DialogTitleContainerDirective implements OnInit {\n @HostBinding(\"id\") id = `bit-dialog-title-${nextId++}`;\n\n @Input() simple = false;\n\n constructor(@Optional() private dialogRef: DialogRef) {}\n\n ngOnInit(): void {\n // Based on angular/components, licensed under MIT\n // https://github.com/angular/components/blob/14.2.0/src/material/dialog/dialog-content-directives.ts#L121-L128\n if (this.dialogRef) {\n Promise.resolve().then(() => {\n const container = this.dialogRef.containerInstance as CdkDialogContainer;\n\n if (container && !container._ariaLabelledBy) {\n container._ariaLabelledBy = this.id;\n }\n });\n }\n }\n}\n","\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","export type InputTypes =\n | \"text\"\n | \"password\"\n | \"number\"\n | \"datetime-local\"\n | \"email\"\n | \"checkbox\"\n | \"search\"\n | \"file\";\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","class Icon {\n constructor(readonly svg: string) {}\n}\n\n// We only export the type to prohibit the creation of Icons without using\n// the `svgIcon` template literal tag.\nexport type { Icon };\n\nexport function isIcon(icon: unknown): icon is Icon {\n return icon instanceof Icon;\n}\n\nexport class DynamicContentNotAllowedError extends Error {\n constructor() {\n super(\"Dynamic content in icons is not allowed due to risk of user-injected XSS.\");\n }\n}\n\nexport function svgIcon(strings: TemplateStringsArray, ...values: unknown[]): Icon {\n if (values.length > 0) {\n throw new DynamicContentNotAllowedError();\n }\n\n return new Icon(strings[0]);\n}\n","import { svgIcon } from \"../icon\";\n\nexport const Search = svgIcon`\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n`;\n","import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n Optional,\n Self,\n} from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\nimport { BitFormFieldControl, InputTypes } from \"../form-field/form-field-control\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"input[bitInput], select[bitInput], textarea[bitInput]\",\n providers: [{ provide: BitFormFieldControl, useExisting: BitInputDirective }],\n})\nexport class BitInputDirective implements BitFormFieldControl {\n @HostBinding(\"class\") @Input() get classList() {\n return [\n \"tw-block\",\n \"tw-w-full\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n this.hasError ? \"tw-border-danger-500\" : \"tw-border-secondary-500\",\n \"tw-text-main\",\n \"tw-placeholder-text-muted\",\n // Rounded\n \"tw-rounded-none\",\n \"first:tw-rounded-l\",\n \"last:tw-rounded-r\",\n // Focus\n \"focus:tw-outline-none\",\n \"focus:tw-border-primary-700\",\n \"focus:tw-ring-1\",\n \"focus:tw-ring-inset\",\n \"focus:tw-ring-primary-700\",\n \"focus:tw-z-10\",\n \"disabled:tw-bg-secondary-100\",\n ].filter((s) => s != \"\");\n }\n\n @HostBinding() @Input() id = `bit-input-${nextId++}`;\n\n @HostBinding(\"attr.aria-describedby\") ariaDescribedBy: string;\n\n @HostBinding(\"attr.aria-invalid\") get ariaInvalid() {\n return this.hasError ? true : undefined;\n }\n\n @HostBinding(\"attr.type\") @Input() type?: InputTypes;\n\n @HostBinding(\"attr.spellcheck\") @Input() spellcheck?: boolean;\n\n @HostBinding()\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n @Input() hasPrefix = false;\n @Input() hasSuffix = false;\n\n @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:before:tw-ring-text-contrast\",\n \"focus-visible:tw-z-10\",\n];\n\n@Directive()\nabstract class LinkDirective {\n @Input()\n linkType: LinkType = \"primary\";\n}\n\n@Directive({\n selector: \"a[bitLink]\",\n})\nexport class AnchorLinkDirective extends LinkDirective {\n @HostBinding(\"class\") get classList() {\n return [\"before:-tw-inset-y-[0.125rem]\"]\n .concat(commonStyles)\n .concat(linkStyles[this.linkType] ?? []);\n }\n}\n\n@Directive({\n selector: \"button[bitLink]\",\n})\nexport class ButtonLinkDirective extends LinkDirective {\n @HostBinding(\"class\") get classList() {\n return [\"before:-tw-inset-y-[0.25rem]\"]\n .concat(commonStyles)\n .concat(linkStyles[this.linkType] ?? []);\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { AnchorLinkDirective, ButtonLinkDirective } from \"./link.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [AnchorLinkDirective, ButtonLinkDirective],\n declarations: [AnchorLinkDirective, ButtonLinkDirective],\n})\nexport class LinkModule {}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-menu-divider\",\n templateUrl: \"./menu-divider.component.html\",\n})\nexport class MenuDividerComponent {}\n","\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitMenuItem]\",\n})\nexport class MenuItemDirective implements FocusableOption {\n @HostBinding(\"class\") classList = [\n \"tw-block\",\n \"tw-py-1\",\n \"tw-px-4\",\n \"!tw-text-main\",\n \"!tw-no-underline\",\n \"tw-cursor-pointer\",\n \"tw-border-none\",\n \"tw-bg-background\",\n \"tw-text-left\",\n \"hover:tw-bg-secondary-100\",\n \"focus:tw-bg-secondary-100\",\n \"focus:tw-z-50\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n \"active:!tw-ring-0\",\n \"active:!tw-ring-offset-0\",\n ];\n @HostBinding(\"attr.role\") role = \"menuitem\";\n @HostBinding(\"tabIndex\") tabIndex = \"-1\";\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { filter, mergeWith } from \"rxjs/operators\";\n\nimport { MenuComponent } from \"./menu.component\";\n\n@Directive({\n selector: \"[bitMenuTriggerFor]\",\n})\nexport class MenuTriggerForDirective implements OnDestroy {\n @HostBinding(\"attr.aria-expanded\") isOpen = false;\n @HostBinding(\"attr.aria-haspopup\") get hasPopup(): \"menu\" | \"dialog\" {\n return this.menu?.ariaRole || \"menu\";\n }\n @HostBinding(\"attr.role\") role = \"button\";\n\n @Input(\"bitMenuTriggerFor\") menu: MenuComponent;\n\n private overlayRef: OverlayRef;\n private defaultMenuConfig: OverlayConfig = {\n panelClass: \"bit-menu-panel\",\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: \"start\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n },\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ])\n .withLockedPosition(true)\n .withFlexibleDimensions(false)\n .withPush(true),\n };\n private closedEventsSub: Subscription;\n private keyDownEventsSub: Subscription;\n\n constructor(\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {}\n\n @HostListener(\"click\") toggleMenu() {\n this.isOpen ? this.destroyMenu() : this.openMenu();\n }\n\n ngOnDestroy() {\n this.disposeAll();\n }\n\n private openMenu() {\n if (this.menu == null) {\n throw new Error(\"Cannot find bit-menu element\");\n }\n\n this.isOpen = true;\n this.overlayRef = this.overlay.create(this.defaultMenuConfig);\n\n const templatePortal = new TemplatePortal(this.menu.templateRef, this.viewContainerRef);\n this.overlayRef.attach(templatePortal);\n\n this.closedEventsSub = this.getClosedEvents().subscribe((event: KeyboardEvent | undefined) => {\n if ([\"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","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\n\nimport { BadgeModule } from \"../badge\";\nimport { SharedModule } from \"../shared\";\n\nimport { MultiSelectComponent } from \"./multi-select.component\";\n\n@NgModule({\n imports: [CommonModule, FormsModule, NgSelectModule, BadgeModule, SharedModule],\n exports: [MultiSelectComponent],\n declarations: [MultiSelectComponent],\n})\nexport class MultiSelectModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { FormControlModule } from \"../form-control\";\n\nimport { RadioButtonComponent } from \"./radio-button.component\";\nimport { RadioGroupComponent } from \"./radio-group.component\";\nimport { RadioInputComponent } from \"./radio-input.component\";\n\n@NgModule({\n imports: [CommonModule, FormControlModule],\n declarations: [RadioInputComponent, RadioButtonComponent, RadioGroupComponent],\n exports: [FormControlModule, RadioInputComponent, RadioButtonComponent, RadioGroupComponent],\n})\nexport class RadioButtonModule {}\n","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 { _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\n private _renderChangesSubscription: Subscription | null = null;\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 this._data.next(data ? [...data] : []);\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 }\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, filter]) => this.filterData(data, filter))\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[], filter: string): T[] {\n if (filter == null || filter == \"\") {\n return data;\n }\n\n return data.filter((obj) => this.filterPredicate(obj, filter));\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 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
    \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