padloc/cypress/fixtures/v3-client/app_src_elements_app_ts.chu...

1 line
1.2 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"app_src_elements_app_ts.chunk.js","mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA,cAAc,SAAS;AACvB;AACA,cAAc,SAAS;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC,oBAAoB,QAAQ;AAC5B;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,yCAAyC;AACzC,2CAA2C;AAC3C,4DAA4D;AAC5D;AACA;AACA,mDAAmD;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA,oBAAoB,YAAY;AAChC;AACA,MAAM;AACN;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,2BAA2B,OAAO;AAClC,+BAA+B,OAAO;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,sCAAsC,SAAS;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC,8BAA8B;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,UAAU;AACV;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,eAAe;AAC/B;;AAEO;;AAEP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC1uDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACgI;AAC7B;AACO;AAC3C;AACE;AACC;AACJ;AACQ;AACZ;AACC;AACD;AACA;AACY;AACG;AACD;AACD;AACA;AACvE,8BAA8B,uFAA2B,CAAC,4GAAqC;AAC/F,yCAAyC,0FAA+B,CAAC,yDAA6B;AACtG,yCAAyC,0FAA+B,CAAC,2DAA6B;AACtG,yCAAyC,0FAA+B,CAAC,4DAA6B;AACtG,yCAAyC,0FAA+B,CAAC,wDAA6B;AACtG,yCAAyC,0FAA+B,CAAC,gEAA6B;AACtG,yCAAyC,0FAA+B,CAAC,oDAA6B;AACtG,yCAAyC,0FAA+B,CAAC,qDAA6B;AACtG,yCAAyC,0FAA+B,CAAC,qDAA6B;AA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","sources":["webpack://@padloc/pwa/../core/vendor/jsbn.js","webpack://@padloc/pwa/../locale/res/wordlists|lazy|/^\\.\\/.*\\.json$/|groupOptions: {}|namespace object","webpack://@padloc/pwa/../app/assets/fonts/fonts.css","webpack://@padloc/pwa/../app/assets/fonts/Inconsolata-Regular.ttf","webpack://@padloc/pwa/../app/assets/fonts/Nunito-Bold.ttf","webpack://@padloc/pwa/../app/assets/fonts/Nunito-Light.ttf","webpack://@padloc/pwa/../app/assets/fonts/Nunito-Regular.ttf","webpack://@padloc/pwa/../app/assets/fonts/Nunito-SemiBold.ttf","webpack://@padloc/pwa/../app/assets/fonts/Padlock.eot","webpack://@padloc/pwa/../app/assets/fonts/Padlock.svg","webpack://@padloc/pwa/../app/assets/fonts/Padlock.ttf","webpack://@padloc/pwa/../app/assets/fonts/Padlock.woff","webpack://@padloc/pwa/../app/assets/fonts/fontawesome-webfont.eot","webpack://@padloc/pwa/../app/assets/fonts/fontawesome-webfont.svg","webpack://@padloc/pwa/../app/assets/fonts/fontawesome-webfont.ttf","webpack://@padloc/pwa/../app/assets/fonts/fontawesome-webfont.woff","webpack://@padloc/pwa/../app/assets/fonts/fontawesome-webfont.woff2","webpack://@padloc/pwa/../app/assets/fonts/fonts.css?3c27","webpack://@padloc/pwa/../app/src/elements/alert-dialog.ts","webpack://@padloc/pwa/../app/src/elements/app.ts","webpack://@padloc/pwa/../app/src/elements/attachment-dialog.ts","webpack://@padloc/pwa/../app/src/elements/base-input.ts","webpack://@padloc/pwa/../app/src/elements/base.ts","webpack://@padloc/pwa/../app/src/elements/billing-dialog.ts","webpack://@padloc/pwa/../app/src/elements/billing-info.ts","webpack://@padloc/pwa/../app/src/elements/card-input.ts","webpack://@padloc/pwa/../app/src/elements/choose-plan-dialog.ts","webpack://@padloc/pwa/../app/src/elements/clipboard.ts","webpack://@padloc/pwa/../app/src/elements/create-invites-dialog.ts","webpack://@padloc/pwa/../app/src/elements/create-item-dialog.ts","webpack://@padloc/pwa/../app/src/elements/create-org-dialog.ts","webpack://@padloc/pwa/../app/src/elements/dialog.ts","webpack://@padloc/pwa/../app/src/elements/export-dialog.ts","webpack://@padloc/pwa/../app/src/elements/field-type-dialog.ts","webpack://@padloc/pwa/../app/src/elements/field.ts","webpack://@padloc/pwa/../app/src/elements/generator.ts","webpack://@padloc/pwa/../app/src/elements/group-dialog.ts","webpack://@padloc/pwa/../app/src/elements/group-item.ts","webpack://@padloc/pwa/../app/src/elements/icon.ts","webpack://@padloc/pwa/../app/src/elements/import-dialog.ts","webpack://@padloc/pwa/../app/src/elements/input.ts","webpack://@padloc/pwa/../app/src/elements/invite-dialog.ts","webpack://@padloc/pwa/../app/src/elements/invite-item.ts","webpack://@padloc/pwa/../app/src/elements/item-dialog.ts","webpack://@padloc/pwa/../app/src/elements/items-filter.ts","webpack://@padloc/pwa/../app/src/elements/items-list.ts","webpack://@padloc/pwa/../app/src/elements/loading-button.ts","webpack://@padloc/pwa/../app/src/elements/login.ts","webpack://@padloc/pwa/../app/src/elements/logo.ts","webpack://@padloc/pwa/../app/src/elements/member-dialog.ts","webpack://@padloc/pwa/../app/src/elements/member-item.ts","webpack://@padloc/pwa/../app/src/elements/menu.ts","webpack://@padloc/pwa/../app/src/elements/move-items-dialog.ts","webpack://@padloc/pwa/../app/src/elements/org-view.ts","webpack://@padloc/pwa/../app/src/elements/orgs-list.ts","webpack://@padloc/pwa/../app/src/elements/password-input.ts","webpack://@padloc/pwa/../app/src/elements/premium-dialog.ts","webpack://@padloc/pwa/../app/src/elements/prompt-dialog.ts","webpack://@padloc/pwa/../app/src/elements/qr-dialog.ts","webpack://@padloc/pwa/../app/src/elements/randomart.ts","webpack://@padloc/pwa/../app/src/elements/recover.ts","webpack://@padloc/pwa/../app/src/elements/report-errors-dialog.ts","webpack://@padloc/pwa/../app/src/elements/select.ts","webpack://@padloc/pwa/../app/src/elements/settings.ts","webpack://@padloc/pwa/../app/src/elements/signup.ts","webpack://@padloc/pwa/../app/src/elements/slider.ts","webpack://@padloc/pwa/../app/src/elements/spinner.ts","webpack://@padloc/pwa/../app/src/elements/start-form.ts","webpack://@padloc/pwa/../app/src/elements/start.ts","webpack://@padloc/pwa/../app/src/elements/subscription.ts","webpack://@padloc/pwa/../app/src/elements/tags-input.ts","webpack://@padloc/pwa/../app/src/elements/textarea.ts","webpack://@padloc/pwa/../app/src/elements/toggle-button.ts","webpack://@padloc/pwa/../app/src/elements/toggle.ts","webpack://@padloc/pwa/../app/src/elements/totp.ts","webpack://@padloc/pwa/../app/src/elements/unlock.ts","webpack://@padloc/pwa/../app/src/elements/update-subscription-dialog.ts","webpack://@padloc/pwa/../app/src/elements/upload-dialog.ts","webpack://@padloc/pwa/../app/src/elements/vault-dialog.ts","webpack://@padloc/pwa/../app/src/elements/vault-item.ts","webpack://@padloc/pwa/../app/src/elements/view.ts","webpack://@padloc/pwa/../app/src/elements/virtual-list.ts","webpack://@padloc/pwa/../app/src/globals.ts","webpack://@padloc/pwa/../app/src/lib/ajax.ts","webpack://@padloc/pwa/../app/src/lib/animation.ts","webpack://@padloc/pwa/../app/src/lib/clipboard.ts","webpack://@padloc/pwa/../app/src/lib/dialog.ts","webpack://@padloc/pwa/../app/src/lib/export.ts","webpack://@padloc/pwa/../app/src/lib/import.ts","webpack://@padloc/pwa/../app/src/lib/route.ts","webpack://@padloc/pwa/../app/src/lib/singleton.ts","webpack://@padloc/pwa/../app/src/lib/util.ts","webpack://@padloc/pwa/../app/src/mixins/auto-lock.ts","webpack://@padloc/pwa/../app/src/mixins/auto-sync.ts","webpack://@padloc/pwa/../app/src/mixins/error-handling.ts","webpack://@padloc/pwa/../app/src/mixins/service-worker.ts","webpack://@padloc/pwa/../app/src/mixins/state.ts","webpack://@padloc/pwa/../app/src/styles/config.ts","webpack://@padloc/pwa/../app/src/styles/index.ts","webpack://@padloc/pwa/../app/src/styles/mixins.ts","webpack://@padloc/pwa/../app/src/styles/shared.ts","webpack://@padloc/pwa/../core/src/account.ts","webpack://@padloc/pwa/../core/src/api.ts","webpack://@padloc/pwa/../core/src/app.ts","webpack://@padloc/pwa/../core/src/attachment.ts","webpack://@padloc/pwa/../core/src/auth.ts","webpack://@padloc/pwa/../core/src/billing.ts","webpack://@padloc/pwa/../core/src/client.ts","webpack://@padloc/pwa/../core/src/collection.ts","webpack://@padloc/pwa/../core/src/container.ts","webpack://@padloc/pwa/../core/src/crypto.ts","webpack://@padloc/pwa/../core/src/diceware.ts","webpack://@padloc/pwa/../core/src/event-target.ts","webpack://@padloc/pwa/../core/src/invite.ts","webpack://@padloc/pwa/../core/src/item.ts","webpack://@padloc/pwa/../core/src/legacy.ts","webpack://@padloc/pwa/../core/src/mfa.ts","webpack://@padloc/pwa/../core/src/org.ts","webpack://@padloc/pwa/../core/src/otp.ts","webpack://@padloc/pwa/../core/src/quota.ts","webpack://@padloc/pwa/../core/src/randomart.ts","webpack://@padloc/pwa/../core/src/session.ts","webpack://@padloc/pwa/../core/src/srp.ts","webpack://@padloc/pwa/../core/src/transport.ts","webpack://@padloc/pwa/../core/src/util.ts","webpack://@padloc/pwa/../core/src/vault.ts","webpack://@padloc/pwa/../locale/src/countries.ts","webpack://@padloc/pwa/../locale/src/wordlists.ts"],"sourcesContent":["// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe;\n\n// (public) Constructor\nexport function BigInteger(a, b, c) {\n if (a != null)\n if (\"number\" == typeof a) this.fromNumber(a, b, c);\n else if (b == null && \"string\" != typeof a) this.fromString(a, 256);\n else this.fromString(a, b);\n}\n\n// return new, unset BigInteger\nfunction nbi() {\n return new BigInteger(null);\n}\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff,\n xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff,\n xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n}\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && navigator.appName == \"Microsoft Internet Explorer\") {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if (inBrowser && j_lm && navigator.appName != \"Netscape\") {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else {\n // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\n\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n\n// Digit conversions\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr, vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return c == null ? -1 : c;\n}\n\n// (protected) copy this to r\nfunction bnpCopyTo(r) {\n for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];\n r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = x < 0 ? -1 : 0;\n if (x > 0) this[0] = x;\n else if (x < -1) this[0] = x + this.DV;\n else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n\n// (protected) set from string and radix\nfunction bnpFromString(s, b) {\n var k;\n if (b == 16) k = 4;\n else if (b == 8) k = 3;\n else if (b == 256) k = 8;\n // byte array\n else if (b == 2) k = 1;\n else if (b == 32) k = 5;\n else if (b == 4) k = 2;\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length,\n mi = false,\n sh = 0;\n while (--i >= 0) {\n var x = k == 8 ? s[i] & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if (sh == 0) this[this.t++] = x;\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = x >> (this.DB - sh);\n } else this[this.t - 1] |= x << sh;\n sh += k;\n if (sh >= this.DB) sh -= this.DB;\n }\n if (k == 8 && (s[0] & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n this.clamp();\n if (mi) BigInteger.ZERO.subTo(this, this);\n}\n\n// (protected) clamp off excess high words\nfunction bnpClamp() {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) --this.t;\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if (this.s < 0) return \"-\" + this.negate().toString(b);\n var k;\n if (b == 16) k = 4;\n else if (b == 8) k = 3;\n else if (b == 2) k = 1;\n else if (b == 32) k = 5;\n else if (b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1 << k) - 1,\n d,\n m = false,\n r = \"\",\n i = this.t;\n var p = this.DB - ((i * this.DB) % k);\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = int2char(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n } else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) m = true;\n if (m) r += int2char(d);\n }\n }\n return m ? r : \"0\";\n}\n\n// (public) -this\nfunction bnNegate() {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n}\n\n// (public) |this|\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n}\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s - a.s;\n if (r != 0) return r;\n var i = this.t;\n r = i - a.t;\n if (r != 0) return this.s < 0 ? -r : r;\n while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;\n return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1,\n t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if (this.t <= 0) return 0;\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];\n for (i = n - 1; i >= 0; --i) r[i] = 0;\n r.t = this.t + n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n, r) {\n for (var i = n; i < this.t; ++i) r[i - n] = this[i];\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB),\n c = (this.s << bs) & this.DM,\n i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (i = ds - 1; i >= 0; --i) r[i] = 0;\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n r.t = this.t - ds;\n r.clamp();\n}\n\n// (protected) r = this - a\nfunction bnpSubTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = c < 0 ? -1 : 0;\n if (c < -1) r[i++] = this.DV + c;\n else if (c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a, r) {\n var x = this.abs(),\n y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) r[i] = 0;\n for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n r.s = 0;\n r.clamp();\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = (r.t = 2 * x.t);\n while (--i >= 0) r[i] = 0;\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) return;\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) q.fromInt(0);\n if (r != null) this.copyTo(r);\n return;\n }\n if (r == null) r = nbi();\n var y = nbi(),\n ts = this.s,\n ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n } else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) return;\n var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt,\n d2 = (1 << this.F1) / yt,\n e = 1 << this.F2;\n var i = r.t,\n j = i - ys,\n t = q == null ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) y[y.t++] = 0;\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\n // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) r.subTo(t, r);\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n return r;\n}\n\n// Modular reduction using \"classic\" algorithm\nfunction Classic(m) {\n this.m = m;\n}\nfunction cConvert(x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n}\nfunction cRevert(x) {\n return x;\n}\nfunction cReduce(x) {\n x.divRemTo(this.m, null, x);\n}\nfunction cMulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n}\nfunction cSqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n}\n\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if (this.t < 1) return 0;\n var x = this[0];\n if ((x & 1) == 0) return 0;\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - ((x * y) % this.DV))) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return y > 0 ? this.DV - y : -y;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while (\n x.t <= this.mt2 // pad x so am has enough room later\n )\n x[x.t++] = 0;\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n}\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n}\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (protected) true iff this is even\nfunction bnpIsEven() {\n return (this.t > 0 ? this[0] & 1 : this.s) == 0;\n}\n\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\nfunction bnpExp(e, z) {\n if (e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(),\n r2 = nbi(),\n g = z.convert(this),\n i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n}\n\n// (public) this^e % m, 0 <= e < 2^32\nfunction bnModPowInt(e, m) {\n var z;\n if (e < 256 || m.isEven()) z = new Classic(m);\n else z = new Montgomery(m);\n return this.exp(e, z);\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n// Copyright (c) 2005-2009 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Extended JavaScript BN functions, required for RSA private ops.\n\n// Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n// Version 1.2: square() API, isProbablePrime fix\n\n// (public)\nfunction bnClone() {\n var r = nbi();\n this.copyTo(r);\n return r;\n}\n\n// (public) return value as integer\nfunction bnIntValue() {\n if (this.s < 0) {\n if (this.t == 1) return this[0] - this.DV;\n else if (this.t == 0) return -1;\n } else if (this.t == 1) return this[0];\n else if (this.t == 0) return 0;\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n}\n\n// (public) return value as byte\nfunction bnByteValue() {\n return this.t == 0 ? this.s : (this[0] << 24) >> 24;\n}\n\n// (public) return value as short (assumes DB>=16)\nfunction bnShortValue() {\n return this.t == 0 ? this.s : (this[0] << 16) >> 16;\n}\n\n// (protected) return x s.t. r^x < DV\nfunction bnpChunkSize(r) {\n return Math.floor((Math.LN2 * this.DB) / Math.log(r));\n}\n\n// (public) 0 if this == 0, 1 if this > 0\nfunction bnSigNum() {\n if (this.s < 0) return -1;\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n else return 1;\n}\n\n// (protected) convert to radix string\nfunction bnpToRadix(b) {\n if (b == null) b = 10;\n if (this.signum() == 0 || b < 2 || b > 36) return \"0\";\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a),\n y = nbi(),\n z = nbi(),\n r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n}\n\n// (protected) convert from radix string\nfunction bnpFromRadix(s, b) {\n this.fromInt(0);\n if (b == null) b = 10;\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs),\n mi = false,\n j = 0,\n w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) BigInteger.ZERO.subTo(this, this);\n}\n\n// (protected) alternate constructor\nfunction bnpFromNumber(a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) this.fromInt(1);\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1))\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\n if (this.isEven()) this.dAddOffset(1, 0); // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n } else {\n // new BigInteger(int,RNG)\n var x = new Array(),\n t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) x[0] &= (1 << t) - 1;\n else x[0] = 0;\n this.fromString(x, 256);\n }\n}\n\n// (public) convert to bigendian byte array\nfunction bnToByteArray() {\n var i = this.t,\n r = new Array();\n r[0] = this.s;\n var p = this.DB - ((i * this.DB) % 8),\n d,\n k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) r[k++] = d | (this.s << (this.DB - p));\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n } else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) d |= -256;\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) ++k;\n if (k > 0 || d != this.s) r[k++] = d;\n }\n }\n return r;\n}\n\nfunction bnEquals(a) {\n return this.compareTo(a) == 0;\n}\nfunction bnMin(a) {\n return this.compareTo(a) < 0 ? this : a;\n}\nfunction bnMax(a) {\n return this.compareTo(a) > 0 ? this : a;\n}\n\n// (protected) r = this op a (bitwise)\nfunction bnpBitwiseTo(a, op, r) {\n var i,\n f,\n m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]);\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) r[i] = op(this[i], f);\n r.t = this.t;\n } else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) r[i] = op(f, a[i]);\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n}\n\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\nfunction bnAnd(a) {\n var r = nbi();\n this.bitwiseTo(a, op_and, r);\n return r;\n}\n\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\nfunction bnOr(a) {\n var r = nbi();\n this.bitwiseTo(a, op_or, r);\n return r;\n}\n\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\nfunction bnXor(a) {\n var r = nbi();\n this.bitwiseTo(a, op_xor, r);\n return r;\n}\n\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\nfunction bnAndNot(a) {\n var r = nbi();\n this.bitwiseTo(a, op_andnot, r);\n return r;\n}\n\n// (public) ~this\nfunction bnNot() {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i];\n r.t = this.t;\n r.s = ~this.s;\n return r;\n}\n\n// (public) this << n\nfunction bnShiftLeft(n) {\n var r = nbi();\n if (n < 0) this.rShiftTo(-n, r);\n else this.lShiftTo(n, r);\n return r;\n}\n\n// (public) this >> n\nfunction bnShiftRight(n) {\n var r = nbi();\n if (n < 0) this.lShiftTo(-n, r);\n else this.rShiftTo(n, r);\n return r;\n}\n\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) return -1;\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) ++r;\n return r;\n}\n\n// (public) returns index of lowest 1-bit (or -1 if none)\nfunction bnGetLowestSetBit() {\n for (var i = 0; i < this.t; ++i) if (this[i] != 0) return i * this.DB + lbit(this[i]);\n if (this.s < 0) return this.t * this.DB;\n return -1;\n}\n\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n\n// (public) return number of set bits\nfunction bnBitCount() {\n var r = 0,\n x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x);\n return r;\n}\n\n// (public) true iff nth bit is set\nfunction bnTestBit(n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) return this.s != 0;\n return (this[j] & (1 << n % this.DB)) != 0;\n}\n\n// (protected) this op (1<<n)\nfunction bnpChangeBit(n, op) {\n var r = BigInteger.ONE.shiftLeft(n);\n this.bitwiseTo(r, op, r);\n return r;\n}\n\n// (public) this | (1<<n)\nfunction bnSetBit(n) {\n return this.changeBit(n, op_or);\n}\n\n// (public) this & ~(1<<n)\nfunction bnClearBit(n) {\n return this.changeBit(n, op_andnot);\n}\n\n// (public) this ^ (1<<n)\nfunction bnFlipBit(n) {\n return this.changeBit(n, op_xor);\n}\n\n// (protected) r = this + a\nfunction bnpAddTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] + a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = c < 0 ? -1 : 0;\n if (c > 0) r[i++] = c;\n else if (c < -1) r[i++] = this.DV + c;\n r.t = i;\n r.clamp();\n}\n\n// (public) this + a\nfunction bnAdd(a) {\n var r = nbi();\n this.addTo(a, r);\n return r;\n}\n\n// (public) this - a\nfunction bnSubtract(a) {\n var r = nbi();\n this.subTo(a, r);\n return r;\n}\n\n// (public) this * a\nfunction bnMultiply(a) {\n var r = nbi();\n this.multiplyTo(a, r);\n return r;\n}\n\n// (public) this^2\nfunction bnSquare() {\n var r = nbi();\n this.squareTo(r);\n return r;\n}\n\n// (public) this / a\nfunction bnDivide(a) {\n var r = nbi();\n this.divRemTo(a, r, null);\n return r;\n}\n\n// (public) this % a\nfunction bnRemainder(a) {\n var r = nbi();\n this.divRemTo(a, null, r);\n return r;\n}\n\n// (public) [this/a,this%a]\nfunction bnDivideAndRemainder(a) {\n var q = nbi(),\n r = nbi();\n this.divRemTo(a, q, r);\n return new Array(q, r);\n}\n\n// (protected) this *= n, this >= 0, 1 < n < DV\nfunction bnpDMultiply(n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n}\n\n// (protected) this += n << w words, this >= 0\nfunction bnpDAddOffset(n, w) {\n if (n == 0) return;\n while (this.t <= w) this[this.t++] = 0;\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) this[this.t++] = 0;\n ++this[w];\n }\n}\n\n// A \"null\" reducer\nfunction NullExp() {}\nfunction nNop(x) {\n return x;\n}\nfunction nMulTo(x, y, r) {\n x.multiplyTo(y, r);\n}\nfunction nSqrTo(x, r) {\n x.squareTo(r);\n}\n\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\n\n// (public) this^e\nfunction bnPow(e) {\n return this.exp(e, new NullExp());\n}\n\n// (protected) r = lower n words of \"this * a\", a.t <= n\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyLowerTo(a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) r[--i] = 0;\n var j;\n for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i);\n r.clamp();\n}\n\n// (protected) r = \"this * a\" without lower n words, n > 0\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyUpperTo(a, n, r) {\n --n;\n var i = (r.t = this.t + a.t - n);\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) r[i] = 0;\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n r.clamp();\n r.drShiftTo(1, r);\n}\n\n// Barrett modular reduction\nfunction Barrett(m) {\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n this.m = m;\n}\n\nfunction barrettConvert(x) {\n if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m);\n else if (x.compareTo(this.m) < 0) return x;\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n}\n\nfunction barrettRevert(x) {\n return x;\n}\n\n// x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1);\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n}\n\n// r = x^2 mod m; x != r\nfunction barrettSqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n}\n\n// r = x*y mod m; x,y != r\nfunction barrettMulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n}\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n// (public) this^e % m (HAC 14.85)\nfunction bnModPow(e, m) {\n var i = e.bitLength(),\n k,\n r = nbv(1),\n z;\n if (i <= 0) return r;\n else if (i < 18) k = 1;\n else if (i < 48) k = 3;\n else if (i < 144) k = 4;\n else if (i < 768) k = 5;\n else k = 6;\n if (i < 8) z = new Classic(m);\n else if (m.isEven()) z = new Barrett(m);\n else z = new Montgomery(m);\n\n // precomputation\n var g = new Array(),\n n = 3,\n k1 = k - 1,\n km = (1 << k) - 1;\n g[1] = z.convert(this);\n if (k > 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n\n var j = e.t - 1,\n w,\n is1 = true,\n r2 = nbi(),\n t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) w = (e[j] >> (i - k1)) & km;\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) w |= e[j - 1] >> (this.DB + i - k1);\n }\n\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) {\n // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) z.sqrTo(r, r2);\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n}\n\n// (public) gcd(this,a) (HAC 14.54)\nfunction bnGCD(a) {\n var x = this.s < 0 ? this.negate() : this.clone();\n var y = a.s < 0 ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit(),\n g = y.getLowestSetBit();\n if (g < 0) return x;\n if (i < g) g = i;\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x);\n if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y);\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n } else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) y.lShiftTo(g, y);\n return y;\n}\n\n// (protected) this % n, n < 2^26\nfunction bnpModInt(n) {\n if (n <= 0) return 0;\n var d = this.DV % n,\n r = this.s < 0 ? n - 1 : 0;\n if (this.t > 0)\n if (d == 0) r = this[0] % n;\n else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n;\n return r;\n}\n\n// (public) 1/this % m (HAC 14.61)\nfunction bnModInverse(m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n var u = m.clone(),\n v = this.clone();\n var a = nbv(1),\n b = nbv(0),\n c = nbv(0),\n d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n } else if (!b.isEven()) b.subTo(m, b);\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n } else if (!d.isEven()) d.subTo(m, d);\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) a.subTo(c, a);\n b.subTo(d, b);\n } else {\n v.subTo(u, v);\n if (ac) c.subTo(a, c);\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n if (d.compareTo(m) >= 0) return d.subtract(m);\n if (d.signum() < 0) d.addTo(m, d);\n else return d;\n if (d.signum() < 0) return d.add(m);\n else return d;\n}\n\nvar lowprimes = [\n 2,\n 3,\n 5,\n 7,\n 11,\n 13,\n 17,\n 19,\n 23,\n 29,\n 31,\n 37,\n 41,\n 43,\n 47,\n 53,\n 59,\n 61,\n 67,\n 71,\n 73,\n 79,\n 83,\n 89,\n 97,\n 101,\n 103,\n 107,\n 109,\n 113,\n 127,\n 131,\n 137,\n 139,\n 149,\n 151,\n 157,\n 163,\n 167,\n 173,\n 179,\n 181,\n 191,\n 193,\n 197,\n 199,\n 211,\n 223,\n 227,\n 229,\n 233,\n 239,\n 241,\n 251,\n 257,\n 263,\n 269,\n 271,\n 277,\n 281,\n 283,\n 293,\n 307,\n 311,\n 313,\n 317,\n 331,\n 337,\n 347,\n 349,\n 353,\n 359,\n 367,\n 373,\n 379,\n 383,\n 389,\n 397,\n 401,\n 409,\n 419,\n 421,\n 431,\n 433,\n 439,\n 443,\n 449,\n 457,\n 461,\n 463,\n 467,\n 479,\n 487,\n 491,\n 499,\n 503,\n 509,\n 521,\n 523,\n 541,\n 547,\n 557,\n 563,\n 569,\n 571,\n 577,\n 587,\n 593,\n 599,\n 601,\n 607,\n 613,\n 617,\n 619,\n 631,\n 641,\n 643,\n 647,\n 653,\n 659,\n 661,\n 673,\n 677,\n 683,\n 691,\n 701,\n 709,\n 719,\n 727,\n 733,\n 739,\n 743,\n 751,\n 757,\n 761,\n 769,\n 773,\n 787,\n 797,\n 809,\n 811,\n 821,\n 823,\n 827,\n 829,\n 839,\n 853,\n 857,\n 859,\n 863,\n 877,\n 881,\n 883,\n 887,\n 907,\n 911,\n 919,\n 929,\n 937,\n 941,\n 947,\n 953,\n 967,\n 971,\n 977,\n 983,\n 991,\n 997\n];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n\n// (public) test primality with certainty >= 1-.5^t\nfunction bnIsProbablePrime(t) {\n var i,\n x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) if (x[0] == lowprimes[i]) return true;\n return false;\n }\n if (x.isEven()) return false;\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i],\n j = i + 1;\n while (j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while (i < j) if (m % lowprimes[i++] == 0) return false;\n }\n return x.millerRabin(t);\n}\n\n// (protected) true if probably prime (HAC 4.24, Miller-Rabin)\nfunction bnpMillerRabin(t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) return false;\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) t = lowprimes.length;\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n //Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if (y.compareTo(n1) != 0) return false;\n }\n }\n return true;\n}\n\n// protected\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\n\n// public\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n// JSBN-specific extension\nBigInteger.prototype.square = bnSquare;\n\n// Expose the Barrett function\nBigInteger.prototype.Barrett = Barrett;\n\n// BigInteger interfaces not implemented in jsbn:\n\n// BigInteger(int signum, byte[] magnitude)\n// double doubleValue()\n// float floatValue()\n// int hashCode()\n// long longValue()\n// static BigInteger valueOf(long val)\n\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\n// For best results, put code like\n// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>\n// in your main HTML document.\n\nvar rng_state;\nvar rng_pool;\nvar rng_pptr;\n\n// Mix in a 32-bit integer into the pool\nfunction rng_seed_int(x) {\n rng_pool[rng_pptr++] ^= x & 255;\n rng_pool[rng_pptr++] ^= (x >> 8) & 255;\n rng_pool[rng_pptr++] ^= (x >> 16) & 255;\n rng_pool[rng_pptr++] ^= (x >> 24) & 255;\n if (rng_pptr >= rng_psize) rng_pptr -= rng_psize;\n}\n\n// Mix in the current time (w/milliseconds) into the pool\nfunction rng_seed_time() {\n rng_seed_int(new Date().getTime());\n}\n\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = new Array();\n rng_pptr = 0;\n var t;\n if (typeof window !== \"undefined\" && window.crypto) {\n if (window.crypto.getRandomValues) {\n // Use webcrypto if available\n var ua = new Uint8Array(32);\n window.crypto.getRandomValues(ua);\n for (t = 0; t < 32; ++t) rng_pool[rng_pptr++] = ua[t];\n } else if (navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n // Extract entropy (256 bits) from NS4 RNG if available\n var z = window.crypto.random(32);\n for (t = 0; t < z.length; ++t) rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n }\n }\n while (rng_pptr < rng_psize) {\n // extract some randomness from Math.random()\n t = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = t >>> 8;\n rng_pool[rng_pptr++] = t & 255;\n }\n rng_pptr = 0;\n rng_seed_time();\n //rng_seed_int(window.screenX);\n //rng_seed_int(window.screenY);\n}\n\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_seed_time();\n rng_state = prng_newstate();\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) rng_pool[rng_pptr] = 0;\n rng_pptr = 0;\n //rng_pool = null;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\n\nfunction rng_get_bytes(ba) {\n var i;\n for (i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n}\n\nexport function SecureRandom() {}\n\nSecureRandom.prototype.nextBytes = rng_get_bytes;\n\n// prng4.js - uses Arcfour as a PRNG\n\nfunction Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = new Array();\n}\n\n// Initialize arcfour context from key, an array of ints, each from [0..255]\nfunction ARC4init(key) {\n var i, j, t;\n for (i = 0; i < 256; ++i) this.S[i] = i;\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n}\n\nfunction ARC4next() {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n}\n\nArcfour.prototype.init = ARC4init;\nArcfour.prototype.next = ARC4next;\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n","var map = {\n\t\"./de.json\": [\n\t\t\"../locale/res/wordlists/de.json\",\n\t\t\"locale_res_wordlists_de_json\"\n\t],\n\t\"./en.json\": [\n\t\t\"../locale/res/wordlists/en.json\",\n\t\t\"locale_res_wordlists_en_json\"\n\t],\n\t\"./es.json\": [\n\t\t\"../locale/res/wordlists/es.json\",\n\t\t\"locale_res_wordlists_es_json\"\n\t],\n\t\"./fr.json\": [\n\t\t\"../locale/res/wordlists/fr.json\",\n\t\t\"locale_res_wordlists_fr_json\"\n\t],\n\t\"./pt.json\": [\n\t\t\"../locale/res/wordlists/pt.json\",\n\t\t\"locale_res_wordlists_pt_json\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = \"../locale/res/wordlists lazy recursive ^\\\\.\\\\/.*\\\\.json$\";\nmodule.exports = webpackAsyncContext;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../pwa/node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../pwa/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../pwa/node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"./Nunito-Light.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"./Nunito-Regular.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"./Nunito-SemiBold.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"./Nunito-Bold.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_4___ from \"./Inconsolata-Regular.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_5___ from \"./Padlock.eot\";\nimport ___CSS_LOADER_URL_IMPORT_6___ from \"./Padlock.woff\";\nimport ___CSS_LOADER_URL_IMPORT_7___ from \"./Padlock.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_8___ from \"./Padlock.svg\";\nimport ___CSS_LOADER_URL_IMPORT_9___ from \"./fontawesome-webfont.eot\";\nimport ___CSS_LOADER_URL_IMPORT_10___ from \"./fontawesome-webfont.woff2\";\nimport ___CSS_LOADER_URL_IMPORT_11___ from \"./fontawesome-webfont.woff\";\nimport ___CSS_LOADER_URL_IMPORT_12___ from \"./fontawesome-webfont.ttf\";\nimport ___CSS_LOADER_URL_IMPORT_13___ from \"./fontawesome-webfont.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\nvar ___CSS_LOADER_URL_REPLACEMENT_8___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_8___, { hash: \"#Padlock\" });\nvar ___CSS_LOADER_URL_REPLACEMENT_9___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_9___);\nvar ___CSS_LOADER_URL_REPLACEMENT_10___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_10___);\nvar ___CSS_LOADER_URL_REPLACEMENT_11___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_11___);\nvar ___CSS_LOADER_URL_REPLACEMENT_12___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_12___);\nvar ___CSS_LOADER_URL_REPLACEMENT_13___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_13___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 300;\\n src: local(\\\"Nunito Light\\\"), local(\\\"Nunito-Light\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 400;\\n src: local(\\\"Nunito Regular\\\"), local(\\\"Nunito-Regular\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 600;\\n src: local(\\\"Nunito SemiBold\\\"), local(\\\"Nunito-SemiBold\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 700;\\n src: local(\\\"Nunito Bold\\\"), local(\\\"Nunito-Bold\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Inconsolata\\\";\\n font-style: normal;\\n font-weight: 400;\\n src: local(\\\"Inconsolata Regular\\\"), local(\\\"Inconsolata-Regular\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") format(\\\"truetype\\\");\\n}\\n\\n@font-face {\\n font-family: \\\"Padlock\\\";\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_5___ + \");\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_5___ + \") format(\\\"embedded-opentype\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_6___ + \") format(\\\"woff\\\"),\\n url(\" + ___CSS_LOADER_URL_REPLACEMENT_7___ + \") format(\\\"truetype\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_8___ + \") format(\\\"svg\\\");\\n font-weight: normal;\\n font-style: normal;\\n}\\n\\n@font-face {\\n font-family: \\\"FontAwesome\\\";\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_9___ + \");\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_9___ + \") format(\\\"embedded-opentype\\\"),\\n url(\" + ___CSS_LOADER_URL_REPLACEMENT_10___ + \") format(\\\"woff2\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_11___ + \") format(\\\"woff\\\"),\\n url(\" + ___CSS_LOADER_URL_REPLACEMENT_12___ + \") format(\\\"truetype\\\"), url(\" + ___CSS_LOADER_URL_REPLACEMENT_13___ + \") format(\\\"svg\\\");\\n font-weight: normal;\\n font-style: normal;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../app/assets/fonts/fonts.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,6GAA6F;AACjG;AACA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,iHAAmG;AACvG;AACA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,mHAAsG;AAC1G;AACA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,2GAA0F;AAC9F;AACA;IACI,0BAA0B;IAC1B,kBAAkB;IAClB,gBAAgB;IAChB,2HAAkH;AACtH;;AAEA;IACI,sBAAsB;IACtB,4CAAyB;IACzB;yHACuF;IACvF,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,0BAA0B;IAC1B,4CAAqC;IACrC;;2HAEuG;IACvG,mBAAmB;IACnB,kBAAkB;AACtB\",\"sourcesContent\":[\"@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 300;\\n src: local(\\\"Nunito Light\\\"), local(\\\"Nunito-Light\\\"), url(./Nunito-Light.ttf) format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 400;\\n src: local(\\\"Nunito Regular\\\"), local(\\\"Nunito-Regular\\\"), url(./Nunito-Regular.ttf) format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 600;\\n src: local(\\\"Nunito SemiBold\\\"), local(\\\"Nunito-SemiBold\\\"), url(./Nunito-SemiBold.ttf) format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Nunito\\\";\\n font-style: normal;\\n font-weight: 700;\\n src: local(\\\"Nunito Bold\\\"), local(\\\"Nunito-Bold\\\"), url(./Nunito-Bold.ttf) format(\\\"truetype\\\");\\n}\\n@font-face {\\n font-family: \\\"Inconsolata\\\";\\n font-style: normal;\\n font-weight: 400;\\n src: local(\\\"Inconsolata Regular\\\"), local(\\\"Inconsolata-Regular\\\"), url(./Inconsolata-Regular.ttf) format(\\\"truetype\\\");\\n}\\n\\n@font-face {\\n font-family: \\\"Padlock\\\";\\n src: url(\\\"./Padlock.eot\\\");\\n src: url(\\\"./Padlock.eot\\\") format(\\\"embedded-opentype\\\"), url(\\\"./Padlock.woff\\\") format(\\\"woff\\\"),\\n url(\\\"./Padlock.ttf\\\") format(\\\"truetype\\\"), url(\\\"./Padlock.svg#Padlock\\\") format(\\\"svg\\\");\\n font-weight: normal;\\n font-style: normal;\\n}\\n\\n@font-face {\\n font-family: \\\"FontAwesome\\\";\\n src: url(\\\"./fontawesome-webfont.eot\\\");\\n src: url(\\\"./fontawesome-webfont.eot\\\") format(\\\"embedded-opentype\\\"),\\n url(\\\"./fontawesome-webfont.woff2\\\") format(\\\"woff2\\\"), url(\\\"./fontawesome-webfont.woff\\\") format(\\\"woff\\\"),\\n url(\\\"./fontawesome-webfont.ttf\\\") format(\\\"truetype\\\"), url(\\\"./fontawesome-webfont.svg\\\") format(\\\"svg\\\");\\n font-weight: normal;\\n font-style: normal;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","export default __webpack_public_path__ + \"4d410e4977b3525f9fca202da60d43ed.ttf\";","export default __webpack_public_path__ + \"e21224eb684dfa21443683a3fc963a3b.ttf\";","export default __webpack_public_path__ + \"d0adc2b29b7472077dc7439642f1439a.ttf\";","export default __webpack_public_path__ + \"c6d06da41ec4b66d90868ce6bf337cbd.ttf\";","export default __webpack_public_path__ + \"2f14cbb7792a42471b1b64de35797d7a.ttf\";","export default __webpack_public_path__ + \"e3a2c12708311d5e47193da456ccdcba.eot\";","export default __webpack_public_path__ + \"49d0dfccb2c7333add0c1277ce21fa1e.svg\";","export default __webpack_public_path__ + \"5503c8e2713e276d4a2cdff45e6991c9.ttf\";","export default __webpack_public_path__ + \"021f830e3290aad20514c75c92ab00c9.woff\";","export default __webpack_public_path__ + \"3d1a8e52672c4af418771bcd7e4111f5.eot\";","export default __webpack_public_path__ + \"9659db92dbc9c899169660fa07a18838.svg\";","export default __webpack_public_path__ + \"ecbe95f309be4cee7aa3f894386282f6.ttf\";","export default __webpack_public_path__ + \"2f7fbbd7d8eee807e437e660436c6033.woff\";","export default __webpack_public_path__ + \"f862b0f4608b4f0fb945113ef8dcdfa3.woff2\";","import api from \"!../../../pwa/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../pwa/node_modules/css-loader/dist/cjs.js!./fonts.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { element, html, property, css } from \"./base\";\nimport { Dialog } from \"./dialog\";\n\nconst defaultButtonLabel = $l(\"OK\");\n\nexport type AlertType = \"info\" | \"warning\" | \"destructive\" | \"choice\" | \"question\" | \"success\";\nexport interface AlertOptions {\n message?: string;\n title?: string;\n options?: string[];\n type?: AlertType;\n icon?: string;\n preventDismiss?: boolean;\n hideIcon?: boolean;\n vertical?: boolean;\n preventAutoClose?: boolean;\n}\n\n@element(\"pl-alert-dialog\")\nexport class AlertDialog extends Dialog<AlertOptions, number> {\n @property()\n buttonLabel: string = defaultButtonLabel;\n @property()\n dialogTitle: string = \"\";\n @property()\n message: string = \"\";\n @property({ reflect: true, attribute: \"type\" })\n type: AlertType = \"info\";\n @property()\n icon = \"\";\n @property()\n options: string[] = [];\n @property({ attribute: \"hide-icon\", reflect: true })\n hideIcon: boolean = false;\n @property({ reflect: true })\n vertical: boolean = false;\n\n static styles = [\n ...Dialog.styles,\n css`\n :host([hide-icon]) .info-icon {\n display: none;\n }\n\n :host([hide-icon]) .info-text,\n :host([hide-icon]) .info-title {\n text-align: center;\n }\n\n .info-text:not(.small) {\n font-size: var(--font-size-default);\n }\n `\n ];\n\n renderContent() {\n const { message, dialogTitle, options, icon, vertical } = this;\n\n return html`\n <div class=\"content\">\n <div class=\"info\" ?hidden=${!dialogTitle && !message}>\n <pl-icon class=\"info-icon\" icon=\"${icon}\"></pl-icon>\n <div class=\"info-body\">\n <div class=\"info-title\">${dialogTitle}</div>\n <div class=\"info-text ${this.dialogTitle ? \"small\" : \"\"}\">${message}</div>\n </div>\n </div>\n\n <div class=\"actions ${vertical || options.length > 2 ? \"vertical\" : \"\"}\">\n ${options.map(\n (o: any, i: number) =>\n html`\n <button class=\"tap ${this._buttonClass(i)}\" @click=${() => this.done(i)}>${o}</button>\n `\n )}\n </div>\n </div>\n `;\n }\n\n done(i: number = -1) {\n super.done(i);\n }\n\n show({\n message = \"\",\n title = \"\",\n options = [\"OK\"],\n type = \"info\",\n preventDismiss = false,\n hideIcon = false,\n vertical = false,\n icon,\n preventAutoClose\n }: AlertOptions = {}): Promise<number> {\n this.message = message;\n this.dialogTitle = title;\n this.type = type;\n this.preventDismiss = preventDismiss;\n this.options = options;\n this.hideIcon = hideIcon;\n this.vertical = vertical;\n this.icon = icon || this._icon(type);\n if (typeof preventAutoClose !== \"undefined\") {\n this.preventAutoClose = preventAutoClose;\n }\n\n return super.show();\n }\n\n private _icon(type: string) {\n switch (type) {\n case \"info\":\n return \"info-round\";\n case \"warning\":\n return \"error\";\n case \"success\":\n return \"success\";\n case \"question\":\n case \"choice\":\n case \"destructive\":\n return \"question\";\n default:\n return \"\";\n }\n }\n\n private _buttonClass(i: number) {\n if (i === 0) {\n return this.type === \"destructive\" ? \"negative\" : this.type !== \"choice\" ? \"primary\" : \"\";\n } else {\n return \"\";\n }\n }\n}\n","import \"../../assets/fonts/fonts.css\";\nimport { Plan, PlanType } from \"@padloc/core/src/billing\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { biometricAuth } from \"@padloc/core/src/platform\";\nimport { VaultItem } from \"@padloc/core/src/item\";\nimport { config, shared, mixins } from \"../styles\";\nimport { app, router } from \"../globals\";\nimport { StateMixin } from \"../mixins/state\";\nimport { AutoLock } from \"../mixins/auto-lock\";\nimport { ErrorHandling } from \"../mixins/error-handling\";\nimport { AutoSync } from \"../mixins/auto-sync\";\nimport { ServiceWorker } from \"../mixins/service-worker\";\nimport { BaseElement, html, css, property, query, listen } from \"./base\";\nimport \"./icon\";\nimport { Input } from \"./input\";\nimport { View } from \"./view\";\nimport { ItemsList } from \"./items-list\";\nimport { Settings } from \"./settings\";\nimport { OrgView } from \"./org-view\";\nimport { OrgsList } from \"./orgs-list\";\nimport { Start } from \"./start\";\nimport { alert, confirm, prompt, clearDialogs, dialog } from \"../lib/dialog\";\nimport { Dialog } from \"./dialog\";\nimport { clearClipboard } from \"../lib/clipboard\";\nimport { Menu } from \"./menu\";\nimport { InviteDialog } from \"./invite-dialog\";\nimport { ItemDialog } from \"./item-dialog\";\nimport { CreateOrgDialog } from \"./create-org-dialog\";\nimport { ChoosePlanDialog } from \"./choose-plan-dialog\";\nimport { PremiumDialog } from \"./premium-dialog\";\nimport { CreateItemDialog } from \"./create-item-dialog\";\nimport { TOTPElement } from \"./totp\";\n\nexport class App extends ServiceWorker(StateMixin(AutoSync(ErrorHandling(AutoLock(BaseElement))))) {\n @property()\n locked = true;\n @property()\n loggedIn = false;\n\n @property({ type: Boolean, reflect: true, attribute: \"singleton-container\" })\n readonly singletonContainer = true;\n\n get router() {\n return router;\n }\n\n @property()\n protected _ready = false;\n\n @query(\"pl-start\")\n private _startView: Start;\n @query(\"pl-settings\")\n private _settings: Settings;\n @query(\"pl-org-view\")\n private _orgView: OrgView;\n @query(\"pl-items-list\")\n private _items: ItemsList;\n @query(\"pl-orgs-list\")\n private _orgs: OrgsList;\n @query(\"pl-menu\")\n private _menu: Menu;\n\n @dialog(\"pl-invite-dialog\")\n private _inviteDialog: InviteDialog;\n\n @dialog(\"pl-item-dialog\")\n private _itemDialog: ItemDialog;\n\n @dialog(\"pl-choose-plan-dialog\")\n private _choosePlanDialog: ChoosePlanDialog;\n\n @dialog(\"pl-create-org-dialog\")\n private _createOrgDialog: CreateOrgDialog;\n\n @dialog(\"pl-premium-dialog\")\n private _premiumDialog: PremiumDialog;\n\n @dialog(\"pl-create-item-dialog\")\n private _createItemDialog: CreateItemDialog;\n\n @property()\n private _view: View | null;\n\n @property({ reflect: true, attribute: \"menu-open\" })\n private _menuOpen: boolean = false;\n\n shouldUpdate() {\n return this._ready;\n }\n\n constructor() {\n super();\n this.load();\n }\n\n async load() {\n await app.loaded;\n // Try syncing account so user can unlock with new password in case it has changed\n if (app.state.loggedIn) {\n app.fetchAccount();\n }\n this._ready = true;\n this._routeChanged();\n const spinner = document.querySelector(\".spinner\") as HTMLElement;\n spinner.style.display = \"none\";\n }\n\n static styles = [\n config.cssVars,\n shared,\n css`\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n }\n\n :host {\n background: linear-gradient(\n var(--color-gradient-highlight-to) 0%,\n var(--color-gradient-highlight-from) 100%\n );\n overflow: hidden;\n color: var(--color-foreground);\n position: fixed;\n width: 100%;\n height: 100%;\n animation: fadeIn 0.5s;\n display: flex;\n flex-direction: column;\n --menu-width: 250px;\n }\n\n .main {\n flex: 1;\n position: relative;\n perspective: 1000px;\n }\n\n .wrapper {\n display: flex;\n transform-origin: 0 center;\n transition: transform 0.4s cubic-bezier(0.6, 0, 0.2, 1);\n ${mixins.fullbleed()}\n ${mixins.gradientDark()}\n }\n\n pl-menu {\n width: var(--menu-width);\n }\n\n .views {\n flex: 1;\n position: relative;\n margin: var(--gutter-size);\n margin-left: 0;\n background: var(--color-quaternary);\n border-radius: var(--border-radius);\n overflow: hidden;\n }\n\n .views > * {\n transition: opacity 0.4s;\n border-radius: var(--border-radius);\n ${mixins.fullbleed()}\n }\n\n .views > :not(.showing) {\n opacity: 0;\n z-index: -1;\n pointer-events: none;\n }\n\n .wrapper:not(.active),\n :host(.dialog-open) .wrapper {\n transform: translate3d(0, 0, -150px) rotateX(5deg);\n border-radius: var(--border-radius);\n }\n\n :host(.dialog-open.hide-app) {\n background: transparent;\n }\n\n :host(.dialog-open.hide-app) .main > * {\n opacity: 0;\n }\n\n .offline {\n background: var(--color-negative);\n color: var(--color-tertiary);\n padding: 8px;\n text-align: center;\n z-index: 100;\n font-weight: 600;\n font-size: var(--font-size-small);\n position: relative;\n }\n\n .offline pl-icon {\n position: absolute;\n right: 0;\n bottom: 0;\n font-size: var(--font-size-micro);\n margin: 4px;\n width: 30px;\n height: 30px;\n }\n\n .menu-scrim {\n ${mixins.fullbleed()}\n z-index: 10;\n background: var(--color-tertiary);\n opacity: 0.3;\n transition: opacity 0.3s;\n display: none;\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n .offline {\n padding-top: max(calc(env(safe-area-inset-top) - 8px), 8px);\n margin-bottom: calc(-1 * max(env(safe-area-inset-top), 8px) + 8px);\n }\n }\n\n @media (max-width: 700px) {\n .views {\n transition: transform 0.3s cubic-bezier(0.6, 0, 0.2, 1);\n ${mixins.fullbleed()}\n }\n\n .views {\n margin: 0;\n }\n\n .views,\n .views > * {\n border-radius: 0;\n }\n\n :host([menu-open]) .views {\n transform: translate(var(--menu-width), 0);\n }\n\n pl-menu {\n transition: transform 0.3s cubic-bezier(0.6, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.6, 0, 0.2, 1);\n }\n\n .menu-scrim {\n display: block;\n }\n\n :host(:not([menu-open])) .menu-scrim {\n opacity: 0;\n pointer-events: none;\n }\n\n :host(:not([menu-open])) pl-menu {\n opacity: 0;\n transform: translate(-100px, 0);\n }\n }\n\n @media (min-width: 1200px) {\n .wrapper {\n border-radius: 8px;\n overflow: hidden;\n box-shadow: rgba(0, 0, 0, 0.5) 0 1px 3px;\n margin: auto;\n overflow: hidden;\n top: 20px;\n left: 20px;\n right: 20px;\n bottom: 20px;\n max-width: 1200px;\n max-height: 900px;\n }\n }\n `\n ];\n\n render() {\n return html`\n <div class=\"offline\" ?hidden=${app.online}>\n ${$l(\"o f f l i n e\")}\n\n <pl-icon icon=\"info\" class=\"tap\" @click=${this._showOfflineAlert}></pl-icon>\n </div>\n\n <div class=\"main\">\n <pl-start id=\"startView\"></pl-start>\n\n <div class=\"wrapper\">\n <pl-menu></pl-menu>\n\n <div class=\"views\">\n <pl-settings></pl-settings>\n\n <pl-org-view></pl-org-view>\n\n <pl-orgs-list></pl-orgs-list>\n\n <pl-items-list></pl-items-list>\n\n <div\n class=\"menu-scrim showing\"\n @touchstart=${(e: MouseEvent) => this._closeMenu(e)}\n @click=${(e: MouseEvent) => this._closeMenu(e)}\n ></div>\n </div>\n </div>\n\n <slot></slot>\n </div>\n `;\n }\n\n stateChanged() {\n this.locked = this.state.locked;\n this.loggedIn = this.state.loggedIn;\n super.stateChanged();\n }\n\n updated(changes: Map<string, any>) {\n if (changes.has(\"locked\")) {\n if (this.locked) {\n this._locked();\n } else {\n this._unlocked();\n }\n }\n\n if (changes.has(\"loggedIn\")) {\n if (this.loggedIn) {\n this._loggedIn();\n } else {\n this._loggedOut();\n }\n }\n }\n\n protected _locked() {\n this.$(\".wrapper\").classList.remove(\"active\");\n clearDialogs();\n clearClipboard();\n this._routeChanged();\n }\n\n protected _unlocked(instant = false) {\n setTimeout(\n async () => {\n if (!this.$(\".wrapper\")) {\n await this.updateComplete;\n }\n\n this.$(\".wrapper\").classList.add(\"active\");\n if (typeof router.params.next !== \"undefined\") {\n router.go(router.params.next, {}, true);\n } else {\n this._routeChanged();\n }\n },\n instant ? 0 : 600\n );\n }\n\n protected _loggedIn() {}\n protected _loggedOut() {}\n\n @listen(\"toggle-menu\")\n _toggleMenu() {\n this._menuOpen = !this._menuOpen;\n }\n\n _closeMenu(e: MouseEvent) {\n this._menuOpen = false;\n e.preventDefault();\n }\n\n @listen(\"dialog-open\")\n _dialogOpen(e: CustomEvent) {\n const dialog = e.target as Dialog<any, any>;\n this.classList.add(\"dialog-open\");\n if (dialog.hideApp) {\n this.classList.add(\"hide-app\");\n }\n }\n\n @listen(\"dialog-close\")\n _dialogClose() {\n this.classList.remove(\"dialog-open\");\n this.classList.remove(\"hide-app\");\n }\n\n @listen(\"route-changed\", router)\n async _routeChanged() {\n if (!this._ready) {\n return;\n }\n\n Dialog.closeAll();\n\n await app.loaded;\n\n const path = router.path;\n\n let match;\n\n if (path === \"recover\") {\n this._startView.recover();\n return;\n }\n\n if (!app.account) {\n if (path === \"login\") {\n this._startView.login();\n } else if ((match = path.match(/^signup(?:\\/([^\\/]+))?$/))) {\n const [, step] = match;\n this._startView.signup(step);\n } else {\n const params = router.params;\n\n if (path) {\n params.next = path;\n }\n\n if ((match = path.match(/^invite\\/([^\\/]+)\\/([^\\/]+)$/))) {\n const [, org, id] = match;\n params.invite = org + \",\" + id;\n }\n\n router.go(params.verify ? \"signup\" : \"login\", params, true);\n }\n return;\n }\n\n if (this.state.locked) {\n if (path === \"unlock\") {\n this._startView.unlock();\n } else {\n router.go(\"unlock\", path ? { next: path, nobio: \"1\", ...router.params } : undefined, true);\n }\n return;\n }\n\n if (path === \"settings\") {\n this._openView(this._settings);\n this._menu.selected = \"settings\";\n } else if ((match = path.match(/^orgs?(?:\\/([^\\/]+))?$/))) {\n const [, id] = match;\n const org = id && app.getOrg(id);\n if (id && !org) {\n router.go(\"orgs\", undefined, true);\n return;\n }\n\n if (org) {\n this._orgView.orgId = id || \"\";\n this._openView(this._orgView);\n this._menu.selected = `orgs/${id}`;\n } else {\n this._openView(this._orgs);\n this._menu.selected = \"orgs\";\n }\n } else if ((match = path.match(/^items(?:\\/([^\\/]+))?$/))) {\n const [, id] = match;\n\n const { vault, tag, favorites, attachments, recent, host } = router.params;\n this._items.selected = id || \"\";\n this._items.vault = vault || \"\";\n this._items.tag = tag || \"\";\n this._items.favorites = favorites === \"true\";\n this._items.attachments = attachments === \"true\";\n this._items.recent = recent === \"true\";\n this._items.host = host === \"true\";\n this._openView(this._items);\n\n this._menu.selected = vault\n ? `vault/${vault}`\n : tag\n ? `tag/${tag}`\n : favorites\n ? \"favorites\"\n : recent\n ? \"recent\"\n : attachments\n ? \"attachments\"\n : host\n ? \"host\"\n : \"items\";\n\n const item = id && app.getItem(id);\n if (item) {\n const { newitem, edit, addattachment, ...rest } = router.params;\n router.params = rest;\n this._itemDialog.isNew = typeof newitem !== \"undefined\";\n this._itemDialog.show(item.item.id);\n if (typeof edit !== \"undefined\") {\n this._itemDialog.edit();\n if (this._itemDialog.isNew && typeof addattachment !== \"undefined\") {\n this._itemDialog.addAttachment();\n }\n }\n app.updateLastUsed(item.item);\n }\n } else if ((match = path.match(/^invite\\/([^\\/]+)\\/([^\\/]+)$/))) {\n const [, orgId, id] = match;\n const invite = await app.getInvite(orgId, id);\n const org = app.getOrg(orgId);\n if (invite) {\n if (org && org.isAdmin(app.account!)) {\n await org.unlock(app.account!);\n await invite.unlock(org.invitesKey);\n }\n this._inviteDialog.show(invite);\n } else {\n await alert($l(\"Could not find invite! Did you use the correct link?\"), { type: \"warning\" });\n router.go(\"items\", undefined, true);\n }\n } else if ((match = path.match(/^plans?\\/(.+)\\/?$/))) {\n const billingProvider = app.state.billingProvider;\n if (!billingProvider) {\n router.go(\"items\", undefined, true);\n return;\n }\n\n const planType = parseInt(match[1]);\n if (planType === PlanType.Premium) {\n await this._premiumDialog.show();\n router.go(\"items\", undefined, true);\n } else {\n const plan = billingProvider!.plans.find(p => p.type === planType);\n if (plan && plan.type !== PlanType.Free) {\n const org = await this._createOrgDialog.show(plan);\n if (org) {\n router.go(`orgs/${org.id}`);\n } else {\n router.go(\"items\", undefined, true);\n }\n } else {\n router.go(\"items\", undefined, true);\n }\n }\n } else {\n router.go(\"items\", undefined, true);\n }\n }\n\n private async _openView(view: View | null) {\n if (view === this._view) {\n return;\n }\n\n if (view) {\n view.classList.add(\"showing\");\n view.active = true;\n }\n\n if (this._view) {\n this._view.classList.remove(\"showing\");\n this._view.active = false;\n }\n\n this._view = view;\n }\n\n @listen(\"keydown\", document)\n _keydown(event: KeyboardEvent) {\n if (this.state.locked || Input.activeInput) {\n return;\n }\n\n const control = event.ctrlKey || event.metaKey;\n\n // ESCAPE -> Back\n if (event.key === \"Escape\") {\n if (Dialog.openDialogs.size) {\n Dialog.closeAll();\n }\n }\n // CTRL/CMD (+ Shift) + F -> Search (All)\n else if (control && event.key === \"f\") {\n event.preventDefault();\n const { vault, tags, recent, favorites, attachments, ...rest } = router.params;\n router.go(\"items\", event.shiftKey ? rest : { vault, tags, recent, favorites, attachments, ...rest });\n this._items.search();\n }\n }\n\n @listen(\"backbutton\", document)\n _androidBack() {\n if (!this.locked && router.canGoBack) {\n router.back();\n } else {\n navigator.Backbutton && navigator.Backbutton.goBack();\n }\n }\n\n @listen(\"create-item\")\n async _newItem() {\n const vault = (router.params.vault && app.getVault(router.params.vault)) || undefined;\n await this._createItemDialog.show(vault);\n }\n\n @listen(\"create-org\")\n async _createOrg() {\n let plan: Plan | null = null;\n\n if (app.billingEnabled) {\n plan = await this._choosePlanDialog.show();\n if (!plan) {\n return;\n }\n }\n\n const org = await this._createOrgDialog.show(plan);\n if (org) {\n router.go(`orgs/${org.id}`);\n }\n }\n\n @listen(\"get-premium\")\n async _getPremium(e: CustomEvent) {\n const message = e.detail && (e.detail.message as string);\n const icon = (e.detail && e.detail.icon) || \"error\";\n\n const confirmed = !message || (await confirm(message, $l(\"Get Premium\"), $l(\"Cancel\"), { icon }));\n\n if (confirmed) {\n await this._premiumDialog.show();\n }\n\n this._routeChanged();\n }\n\n private _showOfflineAlert() {\n alert(\n $l(\n \"It looks like the app cannot connect to the Padloc servers right now, probably due \" +\n \"to a missing internet connection. You can still access your vaults and even create \" +\n \"or edit Vault Items but your changes won't be synchronized until you're back online.\"\n ),\n { title: $l(\"You're Offline\") }\n );\n }\n\n @listen(\"enable-biometric-auth\")\n async _enableBiometricAuth(e: CustomEvent) {\n const confirmed = await confirm(\n (e.detail && e.detail.message) || $l(\"Do you want to enable biometric unlock for this device?\"),\n $l(\"Setup\"),\n $l(\"Cancel\"),\n {\n title: $l(\"Biometric Unlock\")\n }\n );\n\n if (!confirmed) {\n app.forgetMasterKey();\n return;\n }\n\n try {\n const authenticated = await biometricAuth();\n\n if (!authenticated) {\n alert($l(\"Biometric authentication failed! Canceling Setup.\"), {\n title: $l(\"Setup Failed\"),\n type: \"warning\"\n });\n app.forgetMasterKey();\n return;\n }\n } catch (e) {\n alert($l(\"Biometric unlock failed! Canceling Setup. (Reason: {0})\", e.message), {\n title: $l(\"Setup Failed\"),\n type: \"warning\"\n });\n app.forgetMasterKey();\n return;\n }\n\n if (app.account!.locked) {\n const password = await prompt($l(\"Please enter your master password!\"), {\n title: $l(\"Biometric Unlock\"),\n label: $l(\"Enter Master Password\"),\n type: \"password\",\n validate: async pwd => {\n try {\n await app.account!.unlock(pwd);\n } catch (e) {\n throw $l(\"Wrong password! Please try again!\");\n }\n\n return pwd;\n }\n });\n\n if (!password) {\n app.forgetMasterKey();\n return;\n }\n\n await app.unlock(password);\n }\n\n await app.rememberMasterKey();\n\n await alert($l(\"Biometric unlock activated successfully!\"), {\n title: $l(\"Biometric Unlock\"),\n type: \"success\",\n preventAutoClose: true\n });\n }\n\n @listen(\"field-dragged\")\n protected async _fieldDragged({\n detail: { event, item, index }\n }: CustomEvent<{ item: VaultItem; index: number; event: DragEvent }>) {\n const field = item.fields[index];\n const target = event.target as HTMLElement;\n target.classList.add(\"dragging\");\n target.addEventListener(\"dragend\", () => target.classList.remove(\"dragging\"), { once: true });\n const totp: TOTPElement | null =\n target.querySelector(\"pl-totp\") || (target.shadowRoot && target.shadowRoot.querySelector(\"pl-totp\"));\n event.dataTransfer!.setData(\"text/plain\", field.type === \"totp\" && totp ? totp.token : field.value);\n }\n}\n\nwindow.customElements.define(\"pl-app\", App);\n","import { TemplateResult } from \"lit-element\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { VaultItemID } from \"@padloc/core/src/item\";\nimport { Attachment, AttachmentInfo } from \"@padloc/core/src/attachment\";\nimport { saveFile } from \"@padloc/core/src/platform\";\nimport { app } from \"../globals\";\nimport { mixins } from \"../styles\";\nimport { mediaType, fileIcon, fileSize } from \"../lib/util\";\nimport { confirm, prompt } from \"../lib/dialog\";\nimport { element, html, css, property } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport \"./icon\";\nimport { View } from \"./view\";\n\n@element(\"pl-attachment-dialog\")\nexport class AttachmentDialog extends Dialog<{ info?: AttachmentInfo; file?: File; item: VaultItemID }, void> {\n static styles = [\n ...Dialog.styles,\n ...View.styles,\n css`\n .inner {\n background: none;\n box-shadow: none;\n border-radius: 0;\n ${mixins.fullbleed()}\n max-width: none;\n display: flex;\n flex-direction: column;\n }\n\n .scrim {\n background: var(--color-secondary);\n }\n\n :host([open]) .scrim {\n opacity: 1;\n }\n\n header {\n box-shadow: rgba(0, 0, 0, 0.15) 0px 1px 3px;\n }\n\n header > .name {\n flex: 1;\n font-weight: bold;\n text-align: center;\n ${mixins.ellipsis()}\n }\n\n .info,\n .preview {\n flex: 1;\n position: relative;\n }\n\n .preview.image {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n }\n\n .preview.image img {\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n }\n\n .preview.text,\n .preview.code {\n margin: 0;\n background: var(--color-quaternary);\n font-size: var(--font-size-tiny);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .preview code {\n padding: 16px;\n padding-bottom: 80px;\n max-width: 100%;\n max-height: 100%;\n box-sizing: border-box;\n ${mixins.scroll()}\n }\n\n .preview.text {\n white-space: normal;\n }\n\n .preview.text code {\n max-width: 600px;\n }\n\n .info {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--color-tertiary);\n }\n\n .info > pl-icon {\n width: 100px;\n height: 100px;\n font-size: 80px;\n }\n\n .controls {\n display: flex;\n align-items: center;\n padding: 12px;\n background: var(--color-tertiarty);\n border-radius: var(--border-radius);\n }\n\n .mime-type {\n font-weight: bold;\n margin-top: 8px;\n }\n\n .error {\n font-size: var(--font-size-small);\n margin-bottom: 12px;\n color: var(--color-negative);\n font-weight: bold;\n }\n\n .size {\n font-size: var(--font-size-small);\n margin-bottom: 12px;\n }\n `\n ];\n\n @property()\n info: AttachmentInfo | null = null;\n\n @property()\n itemId: VaultItemID | null = null;\n\n readonly preventDismiss = true;\n\n @property()\n private _progress: { loaded: number; total: number } | null = null;\n\n @property()\n private _error = \"\";\n\n @property()\n private _objectUrl?: string;\n\n @property()\n private _attachment: Attachment | null = null;\n\n @property()\n private _preview: TemplateResult | null = null;\n\n get _item() {\n const found = (this.itemId && app.getItem(this.itemId)) || null;\n return found && found.item;\n }\n\n get _vault() {\n const found = (this.itemId && app.getItem(this.itemId)) || null;\n return found && found.vault;\n }\n\n show({ info, item }: { info: AttachmentInfo; item: VaultItemID }) {\n this.info = info;\n this.itemId = item;\n this._error = \"\";\n this._progress = null;\n this._preview = null;\n this._attachment = null;\n this._download();\n return super.show();\n }\n\n done() {\n if (this._objectUrl) {\n URL.revokeObjectURL(this._objectUrl);\n }\n this._objectUrl = undefined;\n this._preview = null;\n this._attachment = null;\n super.done();\n }\n\n private async _delete() {\n this.open = false;\n const confirmed = await confirm(\n $l(\"Are you sure you want to delete this attachment?\"),\n $l(\"Delete\"),\n $l(\"Cancel\"),\n {\n title: $l(\"Delete Attachment\"),\n type: \"destructive\"\n }\n );\n if (confirmed) {\n await app.deleteAttachment(this.itemId!, this.info!);\n this.done();\n } else {\n this.open = true;\n }\n }\n\n async _download() {\n this._progress = null;\n this._error = \"\";\n\n const att = await app.downloadAttachment(this.info!);\n const download = att.downloadProgress!;\n const handler = () => (this._progress = download.progress);\n\n download.addEventListener(\"progress\", handler);\n try {\n await download.completed;\n } catch (e) {}\n download.removeEventListener(\"progress\", handler);\n\n this._progress = null;\n\n if (download.error) {\n this._error = $l(\"Download failed!\");\n } else {\n this._attachment = att;\n this._preview = await this._getPreview(att);\n }\n }\n\n private async _getPreview(att: Attachment) {\n if (!this.info) {\n return null;\n }\n\n const mType = mediaType(this.info.type);\n\n switch (mType) {\n case \"pdf\":\n this._objectUrl = await att.toObjectURL();\n return html`\n <object class=\"content preview pdf\" type=\"application/pdf\" data=\"${this._objectUrl}\"></object>\n `;\n case \"image\":\n this._objectUrl = await att.toObjectURL();\n return html`\n <div class=\"content preview image\">\n <img src=\"${this._objectUrl}\" />\n </div>\n `;\n case \"text\":\n case \"code\":\n const text = await att.toText();\n return html`<pre class=\"content preview ${mType}\"><code>${text}</pre></code>`;\n default:\n return null;\n }\n }\n\n private async _saveToDisk() {\n if (!this._attachment || !this.info) {\n throw \"Need to download attachment first!\";\n }\n\n this.open = false;\n const confirmed = await confirm(\n $l(\n \"Do you want to save this file to your disk? WARNING: Doing \" +\n \"this will leave the file exposed and unprotected on your \" +\n \"harddrive!\"\n ),\n $l(\"Save\"),\n $l(\"Cancel\"),\n { title: $l(\"Save To Disk\"), type: \"warning\" }\n );\n this.open = true;\n\n if (confirmed) {\n saveFile(this.info.name, this.info.type, await this._attachment.getData());\n }\n }\n\n private async _edit() {\n if (!this.info) {\n return;\n }\n this.open = false;\n await prompt(\"\", {\n title: $l(\"Edit Name\"),\n confirmLabel: $l(\"Save\"),\n value: this.info.name,\n label: $l(\"Attachment Name\"),\n validate: async (name: string) => {\n if (!name) {\n throw $l(\"Please enter an attachment name!\");\n }\n if (name !== this.info!.name) {\n this.info!.name = name;\n await app.updateItem(this._item!, {});\n }\n return name;\n }\n });\n this.open = true;\n }\n\n renderContent() {\n if (!this.info) {\n return html``;\n }\n\n return html`\n <header>\n <div class=\"name\">${this.info.name}</div>\n <pl-icon icon=\"close\" class=\"tap\" @click=${() => this.done()}></pl-icon>\n </header>\n\n ${this._preview ||\n html`\n <div class=\"content info\">\n <pl-spinner\n class=\"loading-spinner\"\n .active=${!!this._progress}\n ?hidden=${!this._progress}\n ></pl-spinner>\n <pl-icon .icon=${fileIcon(this.info.type)} ?hidden=${!!this._progress}></pl-icon>\n\n <div class=\"mime-type ellipis\">${this.info.type || $l(\"Unknown File Type\")}</div>\n\n <div class=\"error\" ?hidden=${!this._error}>${this._error}</div>\n\n <div class=\"size\" ?hidden=${!!this._error}>\n ${this._progress\n ? $l(\n \"downloading... {0}/{1}\",\n fileSize(this._progress.loaded),\n fileSize(this._progress.total)\n )\n : fileSize(this.info.size)}\n </div>\n </div>\n `}\n\n <div class=\"fabs\">\n <pl-icon icon=\"delete\" class=\"fab tap destructive\" @click=${this._delete}></pl-icon>\n <div class=\"flex\"></div>\n <pl-icon icon=\"edit\" class=\"fab light tap\" @click=${this._edit}></pl-icon>\n <pl-icon\n icon=\"download\"\n class=\"fab light tap\"\n ?disabled=${!this._attachment}\n @click=${this._saveToDisk}\n ></pl-icon>\n </div>\n `;\n }\n}\n","import { TemplateResult } from \"lit-html\";\nimport { BaseElement, html, css, query, property } from \"./base\";\nimport { shared } from \"../styles\";\n\nlet activeInput: BaseInput | null = null;\n\n// On touch devices, blur active input when tapping on a non-input\ndocument.addEventListener(\"touchend\", () => {\n if (activeInput) {\n activeInput.blur();\n }\n});\n\nexport abstract class BaseInput extends BaseElement {\n @property()\n autocapitalize: string = \"off\";\n\n @property({ reflect: true })\n disabled: boolean = false;\n\n @property({ reflect: true })\n focused: boolean = false;\n\n @property({ reflect: true })\n invalid: boolean = false;\n\n @property()\n placeholder: string = \"\";\n\n @property()\n label: string = \"\";\n\n @property({ attribute: \"no-tab\" })\n noTab: boolean = false;\n\n @property({ reflect: true })\n readonly: boolean = false;\n\n @property({ reflect: true })\n required: boolean = false;\n\n @property({ attribute: \"select-on-focus\" })\n selectOnFocus: boolean = false;\n\n @property()\n get value(): string {\n return (this._inputElement && this._inputElement.value) || \"\";\n }\n set value(val: string) {\n (async () => {\n if (!this._inputElement) {\n await this.updateComplete;\n }\n const oldValue = this._inputElement.value;\n this._inputElement.value = val;\n this.requestUpdate(\"value\", oldValue);\n })();\n }\n\n @query(\".input-element\")\n protected _inputElement: HTMLInputElement;\n\n private _prevValue: string = this.value;\n\n static get activeInput() {\n return activeInput;\n }\n\n protected abstract _renderInput(): TemplateResult;\n\n async focus() {\n if (!this._inputElement) {\n await this.updateComplete;\n }\n this._inputElement.focus();\n }\n\n async blur() {\n if (!this._inputElement) {\n await this.updateComplete;\n }\n this._inputElement.blur();\n }\n\n selectAll() {\n try {\n this._inputElement.setSelectionRange(0, this.value.length);\n } catch (e) {\n this._inputElement.select();\n }\n }\n\n protected _focused(e: FocusEvent) {\n e.stopPropagation();\n this.focused = true;\n activeInput = this;\n\n this.dispatch(\"focus\");\n\n if (this.selectOnFocus) {\n setTimeout(() => this.selectAll(), 10);\n }\n }\n\n protected _blurred(e: FocusEvent) {\n e.stopPropagation();\n this.focused = false;\n\n this.dispatch(\"blur\");\n\n if (activeInput === this) {\n activeInput = null;\n }\n }\n\n protected _changeHandler(e: Event) {\n e.stopPropagation();\n this.dispatch(\"change\", { prevValue: this._prevValue, value: this.value }, true, true);\n this._prevValue = this.value;\n }\n\n protected _touchend(e: Event) {\n e.stopPropagation();\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n position: relative;\n font-size: inherit;\n font-weight: inherit;\n font-family: inherit;\n background: var(--shade-2-color);\n border-radius: var(--border-radius);\n padding: 12px 10px;\n }\n\n input {\n box-sizing: border-box;\n text-overflow: ellipsis;\n box-shadow: none;\n }\n\n .input-element {\n text-align: inherit;\n width: 100%;\n min-height: inherit;\n line-height: inherit;\n caret-color: currentColor;\n cursor: inherit;\n }\n\n textarea {\n overflow-wrap: break-word;\n }\n\n ::-webkit-search-cancel-button {\n display: none;\n }\n\n ::-webkit-placeholder {\n text-shadow: inherit;\n color: inherit;\n opacity: 0.5;\n }\n\n label {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 12px 10px;\n opacity: 0.5;\n transition: transform 0.2s, color 0.2s, opacity 0.5s;\n cursor: text;\n pointer-events: none;\n }\n\n label[float] {\n transform: scale(0.8) translate(0, -32px);\n color: var(--color-highlight);\n font-weight: bold;\n opacity: 1;\n }\n\n .input-element[disabled] {\n opacity: 1;\n -webkit-text-fill-color: currentColor;\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n input[type=\"date\"],\n input[type=\"month\"] {\n display: block;\n min-height: 1.5em;\n }\n }\n `\n ];\n\n render() {\n const { value, focused, label, placeholder } = this;\n\n return html`\n ${this._renderInput()}\n\n <label ?float=${focused || !!value || !!placeholder} ?hidden=${!label}>${label}</label>\n `;\n }\n}\n","import \"reflect-metadata\";\nimport { EventTarget, Event } from \"@padloc/core/src/event-target\";\nimport { LitElement, html, css, svg } from \"lit-element\";\nimport { UpdatingElement, PropertyDeclaration } from \"lit-element/lib/updating-element\";\nexport { html, css, svg };\n\nexport interface BasePrototype extends BaseElement {}\n\nexport interface ListenerDeclaration {\n name: string;\n handler: (e?: Event) => void;\n target?: string | EventTarget;\n}\n\nexport interface Listener {\n name: string;\n target: EventTarget;\n handler: (e: Event) => void;\n}\n\nexport interface Observer {\n props: string[];\n handler: (changed: Map<string, any>) => void;\n}\n\nexport class BaseElement extends LitElement {\n private static _listeners?: ListenerDeclaration[];\n private static _observers?: Observer[];\n\n private _$: { [id: string]: HTMLElement } = {};\n private _$$: { [id: string]: NodeList } = {};\n private _listeners: Listener[] = [];\n\n /**\n * Find first element macthing the selector in the element's shadow root, caching the result\n * @param selector query selector string\n */\n $(sel: string, cached = false): HTMLElement {\n if (!cached || !this._$[sel]) {\n const e = this.renderRoot!.querySelector(sel);\n if (e) {\n this._$[sel] = e as HTMLElement;\n }\n }\n return this._$[sel];\n }\n\n /**\n * Find first element macthing the selector in the element's shadow root, caching the result\n * @param selector query selector string\n */\n $$(sel: string, cached = false): NodeList {\n if (!cached || !this._$[sel]) {\n const e = this.renderRoot!.querySelectorAll(sel);\n if (e) {\n this._$$[sel] = e;\n }\n }\n return this._$$[sel];\n }\n\n /**\n * Fires a custom event with the specified name\n * @param name Name of the event\n * @param detail Optional event detail object\n * @param bubbles Optional - if the event bubbles. Default is TRUE.\n * @param composed Optional - if the event bubbles past the shadow root. Default is TRUE.\n */\n dispatch(name: string, detail?: any, bubbles: boolean = true, composed: boolean = true) {\n if (name) {\n const init: any = {\n bubbles: typeof bubbles === \"boolean\" ? bubbles : true,\n composed: typeof composed === \"boolean\" ? composed : true\n };\n if (detail) {\n init.detail = detail;\n }\n this.dispatchEvent(new CustomEvent(name, init));\n }\n }\n\n get node(): HTMLElement {\n return (this as any) as HTMLElement;\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n const declarations = (<typeof BaseElement>this.constructor)._listeners;\n if (!declarations) {\n return;\n }\n\n for (const decl of declarations) {\n (async () => {\n let targets: EventTarget[] = [];\n\n if (!decl.target) {\n targets = [(this as any) as EventTarget];\n } else if (typeof decl.target === \"string\") {\n // a string target property indicates that the target is a child of this element,\n // so we have to make sure the renderRoot is created first\n await this.updateComplete;\n targets = (this.$$(decl.target) as any) as EventTarget[];\n } else if (typeof decl.target.addEventListener === \"function\") {\n targets = [decl.target];\n }\n\n if (!targets.length) {\n throw \"invalid event target: \" + decl.target;\n }\n\n const handler = (e: Event) => {\n decl.handler.call(this, e);\n };\n for (const target of targets) {\n target.addEventListener(decl.name, handler);\n this._listeners.push({\n target,\n handler,\n name: decl.name\n });\n }\n })();\n }\n }\n\n disconnectedCallback() {\n let listener;\n while ((listener = this._listeners.pop())) {\n listener.target.removeEventListener(listener.name, listener.handler);\n }\n }\n\n updated(changed: Map<string, any>): void {\n let proto = this;\n\n do {\n const observers = (<typeof BaseElement>proto.constructor)._observers;\n if (!observers) {\n return;\n }\n\n for (const observer of observers) {\n if (observer.props.some(p => changed.has(p))) {\n observer.handler.call(this, changed);\n }\n }\n } while (proto instanceof BaseElement && (proto = Object.getPrototypeOf(proto)));\n }\n}\n\n/**\n * Decorator for defining a new custom element\n * @param name tag name of custom element\n */\nexport function element(name: string) {\n return (c: any) => {\n if (name) {\n window.customElements.define(name, c);\n }\n };\n}\n\nexport function property(options?: PropertyDeclaration) {\n return (proto: Object, name: string) => {\n options = options || {};\n if (!options.type) {\n // @ts-ignore\n options.type = getType(proto, name);\n }\n (proto.constructor as typeof UpdatingElement).createProperty(name, options);\n };\n}\n\nfunction getType(prototype: any, propertyName: string): any {\n if (Reflect.hasMetadata) {\n if (Reflect.hasMetadata(\"design:type\", prototype, propertyName)) {\n return Reflect.getMetadata(\"design:type\", prototype, propertyName);\n }\n }\n return null;\n}\n\n/**\n * Decorator to create a getter for the specified selector\n * @param selector selector to find the element\n */\nexport function query(selector: string, cached = false) {\n return (prototype: BasePrototype, propertyName: string) => {\n Object.defineProperty(prototype, propertyName, {\n get() {\n return (this as BasePrototype).$(selector, cached);\n },\n enumerable: true,\n configurable: true\n });\n };\n}\n\n/**\n * Decorator to create a getter that returns a nodelist of all\n * elements matching the selector\n * @param selector selector query\n */\nexport function queryAll(selector: string, cached = false) {\n return (prototype: BasePrototype, propertyName: string) => {\n Object.defineProperty(prototype, propertyName, {\n get() {\n return (this as BasePrototype).$$(selector, cached);\n },\n enumerable: true,\n configurable: true\n });\n };\n}\n\n/**\n * Decorator to add event handlers\n * @param name name of event, e.g. 'click'\n * @param selector EventTarget or a selector to the node to listen to e.g. '#myButton'\n */\nexport function listen(name: string, target?: string | EventTarget) {\n return (prototype: any, methodName: string) => {\n const { constructor } = prototype;\n if (!constructor.hasOwnProperty(\"_listeners\")) {\n Object.defineProperty(constructor, \"_listeners\", { value: [] });\n }\n constructor._listeners.push({\n name,\n target,\n handler: prototype[methodName]\n });\n };\n}\n\n/**\n * Decortator to define an observer that gets called back\n * whenever any of the specified property is updated\n * @param properties list of properties to observe\n */\nexport function observe(...properties: string[]) {\n return (prototype: any, methodName: string) => {\n const { constructor } = prototype;\n if (!constructor.hasOwnProperty(\"_observers\")) {\n Object.defineProperty(constructor, \"_observers\", { value: [] });\n }\n constructor._observers.push({\n props: properties,\n handler: prototype[methodName]\n });\n };\n}\n","import { countries } from \"@padloc/locale/src/countries\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { BillingInfo, BillingAddress, UpdateBillingParams } from \"@padloc/core/src/billing\";\nimport { loadScript } from \"../lib/util\";\nimport { app } from \"../globals\";\nimport { element, html, property, query, css } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Input } from \"./input\";\nimport { Select } from \"./select\";\nimport Nunito from \"../../assets/fonts/Nunito-Regular.ttf\";\n\ninterface Params {\n condensed?: boolean;\n title?: string;\n message?: string;\n submitLabel?: string;\n billingInfo: BillingInfo;\n}\n\n@element(\"pl-billing-dialog\")\nexport class BillingDialog extends Dialog<Params, UpdateBillingParams> {\n @property()\n condensed: boolean = false;\n\n @property()\n dialogTitle = \"\";\n\n @property()\n message = \"\";\n\n @property()\n submitLabel = \"\";\n\n readonly preventDismiss = true;\n\n @property()\n private _error = \"\";\n\n @property()\n private _billingInfo: BillingInfo;\n\n @property()\n private _editingPaymentMethod: boolean = false;\n\n @property()\n private _isBusiness: boolean = false;\n\n @query(\"#submitButton\")\n private _submitButton: LoadingButton;\n\n @query(\"#emailInput\")\n private _emailInput: Input;\n\n @query(\"#nameInput\")\n private _nameInput: Input;\n\n @query(\"#streetInput\")\n private _streetInput: Input;\n\n @query(\"#zipInput\")\n private _zipInput: Input;\n\n @query(\"#cityInput\")\n private _cityInput: Input;\n\n @query(\"#countrySelect\")\n private _countrySelect: Select<{ code: string; name: string }>;\n\n @query(\"#couponInput\")\n private _couponInput: Input;\n\n private _stripe: any;\n private _cardElement: any;\n\n async show({ condensed, title, message, submitLabel, billingInfo }: Params) {\n this.condensed = condensed || false;\n this.dialogTitle = title || $l(\"Update Billing Info\");\n this.message = message || \"\";\n this.submitLabel = submitLabel || $l(\"Save\");\n this._billingInfo = billingInfo;\n this._editingPaymentMethod = !this._billingInfo || !this._billingInfo.paymentMethod;\n // $l(\n // \"Add your billing info now so you're all set to keep using Padloc once the trial period is over. Don't worry, you won't be charged yet!\"\n // )\n if (app.state.billingProvider && !this._stripe) {\n this._initStripe();\n }\n return super.show();\n }\n\n private async _initStripe() {\n const stripePubKey = app.state.billingProvider && app.state.billingProvider.config.publicKey;\n\n if (!stripePubKey) {\n return;\n }\n\n const Stripe = await loadScript(\"https://js.stripe.com/v3/\", \"Stripe\");\n\n const stripe = (this._stripe = Stripe(stripePubKey));\n const elements = stripe.elements({\n fonts: [\n {\n src: `local(\"Nunito Regular\"), local(\"Nunito-Regular\"), url(${Nunito}) format(\"truetype\")`,\n family: \"Nunito\",\n style: \"normal\",\n weight: 400\n }\n ]\n });\n const card = (this._cardElement = elements.create(\"card\", {\n iconStyle: \"solid\",\n hidePostalCode: true,\n style: {\n base: {\n fontFamily: '\"Nunito\", \"Helvetica Neue\", Helvetica, sans-serif',\n fontSmoothing: \"antialiased\",\n fontSize: \"18px\"\n }\n }\n }));\n const cardElement = document.createElement(\"div\");\n this.appendChild(cardElement);\n card.mount(cardElement);\n\n let cardEmpty = true;\n card.addEventListener(\"change\", (e: any) => {\n this._error = (e.error && e.error.message) || \"\";\n cardEmpty = e.empty;\n });\n card.addEventListener(\"blur\", () => {\n if (cardEmpty) {\n this._editingPaymentMethod = !this._billingInfo || !this._billingInfo.paymentMethod;\n }\n });\n }\n\n private async _editPaymentMethod() {\n this._editingPaymentMethod = true;\n await this.updateComplete;\n this._cardElement.focus();\n }\n\n private async _submit() {\n if (this._submitButton.state === \"loading\") {\n return;\n }\n\n this._error = \"\";\n\n let paymentMethod;\n\n if (this._editingPaymentMethod) {\n this._submitButton.start();\n\n const { token, error } = await this._stripe.createToken(this._cardElement);\n\n if (error) {\n this._error = error.message;\n this._submitButton.fail();\n return;\n }\n\n this._submitButton.success();\n\n paymentMethod = {\n name: `${token.card.brand} •••• •••• •••• ${token.card.last4}`,\n source: token.id\n };\n }\n\n const address = new BillingAddress().fromRaw({\n name: this._nameInput.value,\n street: this._streetInput.value,\n postalCode: this._zipInput.value,\n city: this._cityInput.value,\n country: this._countrySelect.selected.code\n });\n\n const coupon = this._couponInput.value;\n\n this.done(\n new UpdateBillingParams({\n account: this._billingInfo!.account,\n org: this._billingInfo!.org,\n email: this._emailInput.value,\n address,\n paymentMethod,\n coupon\n })\n );\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n }\n\n h1 {\n display: block;\n text-align: center;\n }\n\n label {\n font-weight: bold;\n margin: 8px 16px;\n font-size: var(--font-size-small);\n }\n\n .card-wrapper {\n padding: 14px 0 14px 12px;\n }\n\n .city-wrapper {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 8px;\n margin: 8px;\n }\n\n .city-wrapper > * {\n margin: 0;\n }\n\n .payment-method {\n display: flex;\n align-items: center;\n padding: 5px;\n font-weight: bold;\n }\n\n .message {\n font-size: var(--font-size-small);\n padding: 0 20px 10px 20px;\n }\n\n .skip-button {\n background: none;\n color: var(--color-tertiary);\n margin-top: 8px;\n }\n\n .discount {\n padding: 12px;\n }\n\n .discount .name {\n font-weight: bold;\n }\n\n .discount .coupon {\n opacity: 0.7;\n font-family: var(--font-family-mono);\n }\n\n .payment-disabled-message {\n padding: 30px;\n text-align: center;\n }\n `\n ];\n\n renderContent() {\n const billingInfo = this._billingInfo || new BillingInfo();\n\n let { email, address, paymentMethod, discount } = billingInfo;\n\n email = email || (app.account!.billing && app.account!.billing.email) || app.account!.email;\n const name = address.name || app.account!.name;\n\n const countryOptions = [\n { code: \"\", toString: () => $l(\"Select A Country\") },\n ...countries.map(c => Object.assign(c, { toString: () => c.name }))\n ];\n\n return html`\n <header>\n <pl-icon></pl-icon>\n <div class=\"title flex\">${this.dialogTitle}</div>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${() => this.done()}></pl-icon>\n </header>\n\n <div class=\"content\">\n ${!app.billingEnabled\n ? html`\n <div class=\"payment-disabled-message\">\n ${$l(\n 'To update your billing info and payment method, please log in through our website (found under \"Settings\") ' +\n \"or contact us at \"\n )}\n <a href=\"mailto:support@padloc.app\">support@padloc.app</a>!\n </div>\n `\n : html`\n <div class=\"message\">\n ${this.message}\n </div>\n\n <label>${$l(\"Payment Details\")}</label>\n\n <div class=\"card-wrapper item\" ?hidden=${!this._editingPaymentMethod}>\n <slot></slot>\n </div>\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n\n ${paymentMethod\n ? html`\n <div class=\"payment-method item\" ?hidden=${this._editingPaymentMethod}>\n <pl-icon icon=\"credit\"></pl-icon>\n <div class=\"flex\">\n ${paymentMethod.name}\n </div>\n <pl-icon icon=\"edit\" class=\"tap\" @click=${this._editPaymentMethod}></pl-icon>\n </div>\n `\n : html``}\n\n <div ?hidden=\"condensed\">\n <label>${$l(\"Billing Address\")}</label>\n\n <pl-input\n id=\"emailInput\"\n class=\"item\"\n .type=\"email\"\n .placeholder=${$l(\"Billing Email\")}\n .value=${email}\n ></pl-input>\n\n <pl-input\n id=\"nameInput\"\n class=\"item\"\n .placeholder=${$l(\"Name\")}\n .value=${name}\n ></pl-input>\n\n <pl-input\n id=\"streetInput\"\n class=\"item\"\n .placeholder=${$l(\"Address\")}\n .value=${address.street}\n ></pl-input>\n\n <div class=\"city-wrapper\">\n <pl-input\n id=\"zipInput\"\n class=\"item\"\n .placeholder=${$l(\"Postal Code\")}\n .value=${address.postalCode}\n ></pl-input>\n\n <pl-input\n id=\"cityInput\"\n class=\"item\"\n .placeholder=${$l(\"City\")}\n .value=${address.city}\n ></pl-input>\n </div>\n\n <pl-select\n class=\"item\"\n id=\"countrySelect\"\n .options=${countryOptions}\n .selected=${countryOptions.find(c => c.code === address.country)}\n ></pl-select>\n\n <label>${$l(\"Tax Info\")}</label>\n\n <pl-toggle-button\n class=\"item tap\"\n reverse\n .label=${$l(\"This is a business\")}\n value=${this._isBusiness}\n @change=${(e: CustomEvent) => (this._isBusiness = e.detail.value)}\n ></pl-toggle-button>\n\n <pl-input\n id=\"taxIdInput\"\n class=\"item\"\n .placeholder=${$l(\"Tax ID\")}\n ?hidden=${!this._isBusiness}\n ></pl-input>\n </div>\n\n <label>Coupon</label>\n\n <div class=\"discount item\" ?hidden=${!discount}>\n <span class=\"name\">${discount && discount.name}</span>\n <span class=\"coupon\">(${discount && discount.coupon})</span>\n </div>\n\n <pl-input\n class=\"item\"\n id=\"couponInput\"\n placeholder=${$l(\"Coupon Code\")}\n ?hidden=${!!discount}\n ></pl-input>\n\n <div class=\"actions\">\n <pl-loading-button class=\"primary tap\" id=\"submitButton\" @click=${this._submit}>\n ${this.submitLabel}\n </pl-loading-button>\n\n <button class=\"tap\" @click=${() => this.done()} ?hidden=${this.condensed}>\n ${$l(\"Cancel\")}\n </button>\n </div>\n `}\n </div>\n `;\n }\n\n renderAfter() {\n return html`\n <button class=\"tap skip-button\" @click=${() => this.done()} ?hidden=${!this.condensed}>\n ${$l(\"Add Later\")}\n </button>\n `;\n }\n}\n","import { countries } from \"@padloc/locale/src/countries\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { BillingInfo } from \"@padloc/core/src/billing\";\nimport { shared } from \"../styles\";\nimport { dialog, alert } from \"../lib/dialog\";\nimport { app } from \"../globals\";\nimport { BaseElement, element, property, html, css, query } from \"./base\";\nimport \"./icon\";\nimport { LoadingButton } from \"./loading-button\";\nimport { BillingDialog } from \"./billing-dialog\";\n\n@element(\"pl-billing-info\")\nexport class BillingInfoElement extends BaseElement {\n @property()\n billing: BillingInfo | null = null;\n\n @query(\"#editButton\")\n private _editButton: LoadingButton;\n\n @dialog(\"pl-billing-dialog\")\n private _billingDialog: BillingDialog;\n\n private async _update() {\n if (this._editButton.state === \"loading\") {\n return;\n }\n\n const billingInfo = this.billing!;\n\n const params = await this._billingDialog.show({ billingInfo });\n if (params) {\n this._editButton.start();\n try {\n await app.updateBilling(params);\n this._editButton.success();\n } catch (e) {\n this._editButton.fail();\n alert(e.message || $l(\"Something went wrong. Please try again later!\"), { type: \"warning\" });\n throw e;\n }\n }\n }\n\n static styles = [\n shared,\n css`\n :host {\n padding: 8px;\n display: grid;\n grid-template-columns: 36px 1fr;\n position: relative;\n }\n\n .payment-method,\n .billing-email,\n .discount {\n font-weight: bold;\n }\n\n .data {\n margin: 8px 6px;\n }\n\n .edit-button {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n }\n\n .missing {\n opacity: 0.7;\n cursor: pointer;\n }\n\n .data-icon {\n width: 36px;\n }\n `\n ];\n\n render() {\n if (!this.billing) {\n return html``;\n }\n\n const billing = this.billing!;\n const country = countries.find(c => c.code === billing.address.country);\n const postalCode = billing.address.postalCode;\n const city = billing.address.city;\n\n return html`\n <pl-loading-button id=\"editButton\" class=\"edit-button tap icon\" @click=${this._update}>\n <pl-icon icon=\"edit\"></pl-icon>\n </pl-loading-button>\n\n <pl-icon icon=\"credit\" class=\"data-icon\"></pl-icon>\n\n <div class=\"data payment-method\">\n ${billing.paymentMethod\n ? html`\n <div>\n ${billing.paymentMethod.name}\n </div>\n `\n : html`\n <div class=\"missing\" @click=${this._update}>\n ${$l(\"Add Payment Method\")}\n </div>\n `}\n </div>\n\n ${billing.email || billing.address.name\n ? html`\n <pl-icon icon=\"address\" class=\"data-icon\"></pl-icon>\n\n <div class=\"data\">\n <div class=\"billing-email\">${billing.email}</div>\n <div class=\"billing-name\">${billing.address.name}</div>\n <div class=\"billing-street\">${billing.address.street}</div>\n <div class=\"billing-city\">\n ${postalCode ? `${postalCode}, ` : \"\"} ${city ? `${city}, ` : \"\"}\n ${country ? `${country.name}` : \"\"}\n </div>\n </div>\n `\n : html``}\n ${billing.discount\n ? html`\n <pl-icon icon=\"discount\" class=\"data-icon\"></pl-icon>\n\n <div class=\"data discount\">\n ${billing.discount.name}\n </div>\n `\n : html``}\n `;\n }\n}\n","import { loadScript } from \"../lib/util\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, property, css } from \"./base\";\nimport Nunito from \"../../assets/fonts/Nunito-Regular.ttf\";\n\n@element(\"pl-card-input\")\nexport class CardInput extends BaseElement {\n @property()\n stripePubKey = \"pk_test_jTF9rjIV9LyiyJ6ir2ARE8Oy\";\n\n @property()\n error = \"\";\n\n private _stripe: any;\n private _cardElement: any;\n\n async getToken() {\n this.error = \"\";\n\n const { token, error } = await this._stripe.createToken(this._cardElement);\n\n if (error) {\n this.error = error.message;\n this.dispatch(\"change\", { error: this.error });\n throw error;\n }\n\n return token.id;\n }\n\n async connectedCallback() {\n super.connectedCallback();\n\n const Stripe = await loadScript(\"https://js.stripe.com/v3/\", \"Stripe\");\n\n const stripe = (this._stripe = Stripe(this.stripePubKey));\n const elements = stripe.elements({\n fonts: [\n {\n src: `local(\"Nunito Regular\"), local(\"Nunito-Regular\"), url(${Nunito}) format(\"truetype\")`,\n family: \"Nunito\",\n style: \"normal\",\n weight: 400\n }\n ]\n });\n const card = (this._cardElement = elements.create(\"card\", {\n iconStyle: \"solid\",\n hidePostalCode: true,\n style: {\n base: {\n fontFamily: '\"Nunito\", \"Helvetica Neue\", Helvetica, sans-serif',\n fontSmoothing: \"antialiased\",\n fontSize: \"18px\"\n },\n invalid: {\n // color: \"#ff6666\",\n // textShadow: \"none\"\n }\n }\n }));\n const cardElement = document.createElement(\"div\");\n this.appendChild(cardElement);\n card.mount(cardElement);\n card.addEventListener(\"change\", (e: any) => {\n this.error = (e.error && e.error.message) || \"\";\n this.dispatch(\"change\", { error: this.error });\n });\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n padding: 14px 0 14px 12px;\n border-radius: var(--border-radius);\n background: var(--color-shade-1);\n }\n\n :host(.item) {\n background: var(--color-tertiary);\n border: solid 1px var(--color-shade-1);\n border-bottom-width: 3px;\n margin: var(--gutter-size);\n }\n `\n ];\n\n render() {\n return html`\n <slot></slot>\n `;\n }\n}\n","import { unsafeHTML } from \"lit-html/directives/unsafe-html\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Plan, PlanType } from \"@padloc/core/src/billing\";\nimport { Org } from \"@padloc/core/src/org\";\nimport { mixins } from \"../styles\";\nimport { app } from \"../globals\";\nimport { element, html, property, css } from \"./base\";\nimport { Dialog } from \"./dialog\";\n\n@element(\"pl-choose-plan-dialog\")\nexport class ChoosePlanDialog extends Dialog<Org | undefined, Plan> {\n @property()\n private _plans: Plan[] = [];\n\n @property()\n private _org?: Org;\n\n async show(org?: Org) {\n const result = super.show();\n this._org = org;\n if (!app.state.billingProvider) {\n this.done();\n } else {\n this._plans = app.state.billingProvider.plans\n .filter(p => [PlanType.Family, PlanType.Team, PlanType.Business].includes(p.type))\n .sort((a, b) => a.type - b.type);\n }\n return result;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n h2 {\n color: var(--color-tertiary);\n margin: 0;\n }\n\n .outer {\n padding: 0;\n }\n\n .inner {\n background: transparent;\n box-shadow: none;\n max-width: 100%;\n width: 100%;\n ${mixins.scroll()}\n scroll-snap-type: x mandatory;\n white-space: nowrap;\n padding: 12px 24px;\n text-align: center;\n display: block;\n }\n\n .plans {\n min-width: 100%;\n display: flex;\n padding: 20px 50px;\n box-sizing: border-box;\n justify-content: center;\n }\n\n .plan {\n flex: 1;\n white-space: normal;\n width: 100%;\n max-width: 330px;\n background: var(--color-tertiary);\n border-radius: var(--border-radius);\n overflow: hidden;\n display: inline-flex;\n flex-direction: column;\n cursor: pointer;\n scroll-snap-align: center;\n text-align: center;\n will-change: transform;\n }\n\n .plan:not(:last-child) {\n margin-right: 12px;\n }\n\n .plan-header {\n text-align: center;\n padding: 20px;\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n /*\n .plan-header::before {\n content: \"\";\n ${mixins.fullbleed()}\n background: linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%);\n }\n */\n\n .plan-name {\n font-size: 2rem;\n margin-bottom: 10px;\n font-weight: bold;\n }\n\n .plan-description {\n font-size: 1.1rem;\n }\n\n .plan-trial {\n font-size: 1.5rem;\n margin-top: 8px;\n }\n\n .plan-then {\n font-size: var(--font-size-small);\n margin: 4px 0 -4px 0;\n }\n\n .plan-price {\n letter-spacing: 0.1em;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n font-weight: bold;\n font-size: 1.2rem;\n margin-top: 8px;\n }\n\n .plan-price-currency {\n line-height: 1em;\n margin-top: 0.4em;\n }\n\n .plan-price-dollars {\n font-size: 3em;\n line-height: 1em;\n }\n\n .plan-price-cents {\n font-size: 1.5em;\n line-height: 1em;\n margin-top: 0.2em;\n }\n\n .plan-unit {\n font-size: var(--font-size-small);\n }\n\n .plan-fineprint {\n font-size: var(--font-size-tiny);\n opacity: 0.8;\n }\n\n .features {\n font-size: var(--font-size-small);\n }\n\n .features > * {\n margin: 0;\n padding: 10px 15px;\n border: none;\n border-radius: 0;\n }\n\n .features > :not(:last-child) {\n border-bottom: solid 1px var(--color-shade-1);\n }\n\n .plan button {\n margin: 8px;\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n font-weight: bold;\n }\n\n .tabs {\n color: var(--color-tertiary);\n justify-content: center;\n }\n `\n ];\n\n private _renderPlan(plan: Plan) {\n const monthlyPrice = Math.round(plan.cost / 12);\n\n const trialDaysLeft = this._org && this._org.billing ? this._org.billing.trialDaysLeft : 30;\n\n return html`\n <div\n style=${plan.color\n ? `--color-highlight: ${plan.color}; --color-highlight-text: var(--color-tertiary);`\n : \"\"}\n class=\"plan\"\n @click=${() => this.done(plan)}\n >\n <div class=\"plan-header\">\n <div class=\"plan-name\">\n ${plan.name}\n </div>\n <div class=\"plan-description\">\n ${unsafeHTML(plan.description.replace(/\\*\\*(.+)\\*\\*/g, \"<strong>$1</strong>\"))}\n </div>\n <div class=\"flex\"></div>\n <div class=\"plan-trial\" ?hidden=${!trialDaysLeft}>\n ${$l(\"Free For {0} Days\", trialDaysLeft.toString())}\n </div>\n <div class=\"plan-then\" ?hidden=${!trialDaysLeft}>\n ${$l(\"then\")}\n </div>\n <div class=\"plan-price\">\n <div class=\"plan-price-currency\">\n $\n </div>\n <div class=\"plan-price-dollars\">\n ${Math.floor(monthlyPrice / 100)}\n </div>\n <div class=\"plan-price-cents\">\n .${(monthlyPrice % 100).toString().padEnd(2, \"0\")}\n </div>\n </div>\n <div class=\"plan-unit\">\n ${$l(\"per user / month\")}\n </div>\n <div class=\"flex\"></div>\n <div class=\"plan-fineprint\">\n ${$l(\"USD, billed annually\")}\n </div>\n </div>\n\n <ul class=\"features\">\n ${plan.features.map(\n feature => html`\n <li>\n ${unsafeHTML(feature.replace(/\\*\\*(.+)\\*\\*/g, \"<strong>$1</strong>\"))}\n </li>\n `\n )}\n </ul>\n\n <div class=\"flex\"></div>\n\n <button class=\"tap\">\n ${this._org ? $l(\"Choose Plan\") : $l(\"Try For Free\")}\n </button>\n </div>\n `;\n }\n //\n // renderBefore() {\n // return html`\n // <h2>${$l(\"Choose A Plan\")}</h2>\n // `;\n // }\n\n renderContent() {\n const plans = this._plans;\n return html`\n ${plans.map(plan => this._renderPlan(plan))}\n `;\n }\n}\n","import { styleMap } from \"lit-html/directives/style-map\";\nimport { VaultItem, Field } from \"@padloc/core/src/item\";\nimport { setClipboard } from \"@padloc/core/src/platform\";\nimport { shared, mixins } from \"../styles\";\nimport { BaseElement, element, html, css, property } from \"./base\";\nimport \"./icon\";\n\n@element(\"pl-clipboard\")\nexport class Clipboard extends BaseElement {\n @property() item: VaultItem | null = null;\n @property() field: Field | null = null;\n @property() private _tMinusClear: number = 0;\n\n private _interval: number;\n private _resolve: (() => void) | null = null;\n\n shouldUpdate() {\n return !!this.item && !!this.field;\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n justify-content: center;\n transition: transform 0.5s cubic-bezier(1, -0.3, 0, 1.3);\n position: fixed;\n left: 70px;\n right: 70px;\n bottom: 15px;\n z-index: 100;\n pointer-events: none;\n }\n\n .inner {\n display: flex;\n align-items: center;\n border-radius: var(--border-radius);\n color: var(--color-background);\n text-shadow: rgba(0, 0, 0, 0.2) 0 1px 0;\n max-width: 100%;\n box-shadow: rgba(0, 0, 0, 0.3) 0 1px 2px;\n ${mixins.gradientHighlight(true)}\n pointer-events: auto;\n }\n\n pl-icon {\n flex: none;\n }\n\n :host(:not(.showing)) {\n transform: translateY(150%);\n }\n\n .content {\n flex: 1;\n padding: 15px;\n }\n\n .name {\n font-weight: bold;\n flex-grow: 1;\n font-size: var(--font-size-tiny);\n line-height: 15px;\n margin: 4px 4px 4px 0;\n text-align: center;\n }\n\n .clear-button {\n padding: 0;\n width: 36px;\n height: 36px;\n margin: 4px;\n line-height: normal;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n border-radius: 100%;\n font-size: 10px;\n flex: none;\n background: transparent;\n position: relative;\n font-weight: bold;\n }\n\n .countdown {\n ${mixins.fullbleed()}\n width: 32px;\n height: 32px;\n margin: auto;\n border-radius: 100%;\n }\n\n .countdown circle {\n transform-origin: center center;\n transform: rotate(-90deg);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.8;\n stroke-dasharray: 25;\n stroke-linecap: round;\n transition: stroke-dashoffset 1s linear;\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n :host {\n left: 80px;\n right: 80px;\n bottom: calc(env(safe-area-inset-bottom) / 1.5);\n }\n }\n `\n ];\n\n render() {\n const { item, field, _tMinusClear } = this;\n return html`\n <div class=\"inner\">\n <pl-icon icon=\"clipboard\"></pl-icon>\n\n <div class=\"name\">${item!.name} / ${field!.name}</div>\n\n <button class=\"clear-button tap\" @click=${() => this.clear()}>\n <svg class=\"countdown\" viewBox=\"0 0 10 10\">\n <defs>\n <filter id=\"shadow\">\n <feOffset dx=\"-0.3\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" in=\"shadowOffsetOuter1\"/>\n </filter>\n </defs>\n\n <circle\n filter=\"url(#shadow)\"\n cx=\"5\"\n cy=\"5\"\n r=\"4\"\n style=${styleMap({ strokeDashoffset: ((1 - (_tMinusClear / 60)) * 25).toString() })}\n />\n\n <circle\n cx=\"5\"\n cy=\"5\"\n r=\"4\"\n style=${styleMap({ strokeDashoffset: ((1 - (_tMinusClear / 60)) * 25).toString() })}\n />\n </svg>\n\n <div>\n ${_tMinusClear}s\n </div>\n </button>\n </div>\n `;\n }\n\n async set(item: VaultItem, field: Field, duration = 60) {\n clearInterval(this._interval);\n\n this.item = item;\n this.field = field;\n\n const value = await field.transform();\n setClipboard(value);\n\n const tStart = Date.now();\n\n this._tMinusClear = duration;\n this._interval = window.setInterval(() => {\n const dt = tStart + duration * 1000 - Date.now();\n if (dt <= 0) {\n this.clear();\n } else {\n this._tMinusClear = Math.floor(dt / 1000);\n }\n }, 1000);\n\n setTimeout(() => this.classList.add(\"showing\"), 10);\n\n return new Promise(resolve => {\n this._resolve = resolve;\n });\n }\n\n clear() {\n clearInterval(this._interval);\n setClipboard(\" \");\n this.classList.remove(\"showing\");\n this._resolve && this._resolve();\n this._resolve = null;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Org } from \"@padloc/core/src/org\";\nimport { Invite } from \"@padloc/core/src/invite\";\nimport { app } from \"../globals\";\nimport { element, property, html, css, query } from \"./base\";\nimport { Input } from \"./input\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport \"./icon\";\n\n@element(\"pl-create-invites-dialog\")\nexport class CreateInvitesDialog extends Dialog<Org, Invite[]> {\n @property()\n private _emails: string[] = [];\n\n @property()\n private _error: string = \"\";\n\n private _org: Org;\n\n private _maxEmails = 50;\n\n @query(\"pl-input\")\n private _emailInput: Input;\n\n @query(\"#submitButton\")\n private _submitButton: LoadingButton;\n\n private _isValid(email: string) {\n return /\\S+@\\S+\\.\\S+/.test(email);\n }\n\n private _input() {\n const emails = this._emailInput.value.split(/[,;\\s]+/);\n this._emails = [...new Set([...this._emails, ...emails.slice(0, -1).filter(e => !!e)])];\n this._emailInput.value = emails[emails.length - 1];\n this.requestUpdate();\n }\n\n private _enter() {\n const emails = this._emailInput.value.split(/[,;\\s]+/);\n this._emails = [...new Set([...this._emails, ...emails.filter(e => !!e)])];\n this._emailInput.value = \"\";\n this.requestUpdate();\n }\n\n private _keydown(e: KeyboardEvent) {\n if (e.key === \"Backspace\" && !this._emailInput.value) {\n this._emails.pop();\n this.requestUpdate();\n }\n }\n\n private _remove(email: string) {\n this._emails = this._emails.filter(e => e !== email);\n }\n\n private async _submit() {\n if (this._submitButton.state === \"loading\") {\n return;\n }\n\n if (!this._emails.length) {\n this._error = $l(\"Please enter at least one email address!\");\n this.rumble();\n return;\n }\n\n if (this._emails.length > this._maxEmails) {\n this._error = $l(\"You have entered too many email addresses! Please delete some before submitting!\");\n this.rumble();\n return;\n }\n\n if (this._emails.some(email => !this._isValid(email))) {\n this._error = $l(\"Some of the emails you entered appear to be invalid!\");\n this.rumble();\n return;\n }\n\n this._error = \"\";\n\n this._submitButton.start();\n\n try {\n const invites = await app.createInvites(this._org, this._emails);\n this._submitButton.success();\n this.done(invites);\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong! Please try again later!\");\n this._submitButton.fail();\n this.rumble();\n }\n }\n\n async show(org: Org) {\n this._org = org;\n this._emails = [];\n this._error = \"\";\n return super.show();\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n :host {\n text-align: center;\n }\n\n .inner {\n background: var(--color-quaternary);\n }\n\n .message {\n font-size: var(--font-size-small);\n margin: 8px 20px;\n }\n\n .tags {\n flex-wrap: wrap;\n margin: 8px;\n padding: 12px 12px 6px 12px;\n justify-content: center;\n position: relative;\n }\n\n .tags > * {\n margin-bottom: 6px;\n }\n\n .tag > pl-icon {\n font-size: var(--font-size-micro);\n margin: 0 -3px 0 0;\n }\n\n pl-input {\n text-align: left;\n background: transparent;\n font-size: var(--font-size-small);\n padding: 4px 8px;\n }\n\n .email-count {\n font-weight: bold;\n position: absolute;\n bottom: 8px;\n right: 8px;\n margin: 0;\n font-size: var(--font-size-tiny);\n }\n\n .email-count[warning] {\n color: var(--color-negative);\n }\n\n .error.item {\n padding: 8px;\n color: var(--color-negative);\n }\n `\n ];\n\n renderContent() {\n return html`\n <header>\n <div class=\"title flex\">${$l(\"Invite New Members\")}</div>\n </header>\n\n <div class=\"content\">\n <div class=\"message\">\n ${$l(\n \"Please enter up to {0} email addresses of the persons you would like to invite, separated by spaces or commas!\",\n this._maxEmails.toString()\n )}\n </div>\n\n <div class=\"tags item\" @click=${() => this._emailInput.focus()}>\n ${this._emails.map(\n email => html`\n <div class=\"tag ${this._isValid(email) ? \"\" : \"warning\"}\">\n <div>${email}</div>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${() => this._remove(email)}></pl-icon>\n </div>\n `\n )}\n\n <pl-input\n .placeholder=${$l(\"Enter Email Address\")}\n type=\"email\"\n @enter=${this._enter}\n @input=${this._input}\n @blur=${this._enter}\n @keydown=${this._keydown}\n ></pl-input>\n\n <div class=\"email-count\" ?warning=${this._emails.length > this._maxEmails}>\n ${this._emails.length}/${this._maxEmails}\n </div>\n </div>\n\n <div class=\"item error\" ?hidden=${!this._error}>${this._error}</div>\n </div>\n\n <div class=\"footer\">\n <div class=\"actions\">\n <pl-loading-button id=\"submitButton\" @click=${this._submit} class=\"primary tap\">\n ${$l(\"Submit\")}\n </pl-loading-button>\n <button @click=${this.dismiss} class=\"transparent tap\">\n ${$l(\"Cancel\")}\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { Vault } from \"@padloc/core/src/vault\";\nimport { VaultItem, Field, ItemTemplate, ITEM_TEMPLATES } from \"@padloc/core/src/item\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { app, router } from \"../globals\";\nimport { alert } from \"../lib/dialog\";\nimport { element, html, css, query, property } from \"./base\";\nimport { Select } from \"./select\";\nimport { Dialog } from \"./dialog\";\n\n@element(\"pl-create-item-dialog\")\nexport class CreateItemDialog extends Dialog<Vault, VaultItem> {\n @query(\"#vaultSelect\")\n private _vaultSelect: Select<Vault>;\n\n @property()\n private _template: ItemTemplate = ITEM_TEMPLATES[0];\n\n readonly preventDismiss = true;\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n max-width: 500px;\n }\n\n pl-input,\n pl-select {\n text-align: center;\n }\n\n .templates {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n grid-gap: 8px;\n margin: var(--gutter-size);\n }\n\n .template {\n padding: 4px;\n display: flex;\n align-items: center;\n margin: 0;\n font-weight: 600;\n }\n\n .vault-select,\n .template[active] {\n background: var(--color-primary);\n color: var(--color-tertiary);\n font-weight: bold;\n text-shadow: rgba(0, 0, 0, 0.15) 0 2px 0;\n }\n\n .icon {\n margin-right: 4px;\n }\n\n .message {\n text-align: center;\n margin: 20px;\n }\n `\n ];\n\n renderContent() {\n return html`\n <header>\n <div class=\"title flex\">${$l(\"New Vault Item\")}</div>\n </header>\n\n <div class=\"content\">\n <pl-select\n id=\"vaultSelect\"\n class=\"vault-select tap item\"\n icon=\"vault\"\n .options=${app.vaults.filter(v => app.hasWritePermissions(v))}\n ></pl-select>\n\n <div class=\"message\">\n ${$l(\"What kind of item you would like to add?\")}\n </div>\n\n <div class=\"templates\">\n ${ITEM_TEMPLATES.map(\n template => html`\n <div\n class=\"item template tap\"\n @click=${() => (this._template = template)}\n ?active=${this._template === template}\n >\n <pl-icon icon=${template.icon} class=\"icon\"></pl-icon>\n <div>${template.toString()}</div>\n </div>\n `\n )}\n </div>\n </div>\n\n <div class=\"footer\">\n <div class=\"actions\">\n <button @click=${() => this._enter()} class=\"primary tap\">${$l(\"Create\")}</button>\n\n <button @click=${() => this.done()} class=\"transparent tap\">${$l(\"Cancel\")}</button>\n </div>\n </div>\n `;\n }\n\n private async _enter() {\n const vault = this._vaultSelect.selected!;\n const quota = app.getItemsQuota(vault);\n if (quota !== -1 && vault.items.size >= quota) {\n this.done();\n if (app.billingEnabled) {\n this.dispatch(\"get-premium\", {\n message: $l(\n \"You have reached the maximum number of items for this account. \" +\n \"Upgrade to Premium to get unlimited items for your private vault!\"\n ),\n icon: \"list\"\n });\n } else {\n alert($l(\"You have reached the maximum number of items for this account!\"), { type: \"warning\" });\n }\n return;\n }\n\n const item = await app.createItem(\n \"\",\n vault,\n this._template.fields.map(f => new Field({ ...f, value: \"\" }))\n );\n this.done(item);\n\n const params = { ...router.params, edit: \"true\", newitem: \"true\" } as any;\n if (this._template.attachment) {\n params.addattachment = \"true\";\n }\n router.go(`items/${item.id}`, params);\n }\n\n async show(vault: Vault = app.mainVault!) {\n await this.updateComplete;\n this._vaultSelect.selected = vault;\n return super.show();\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Org } from \"@padloc/core/src/org\";\nimport { Plan, BillingInfo, UpdateBillingParams } from \"@padloc/core/src/billing\";\nimport { dialog } from \"../lib/dialog\";\nimport { app } from \"../globals\";\nimport { element, html, property, css, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport \"./card-input\";\nimport { BillingDialog } from \"./billing-dialog\";\nimport { ChoosePlanDialog } from \"./choose-plan-dialog\";\nimport { Input } from \"./input\";\n\n@element(\"pl-create-org-dialog\")\nexport class CreateOrgDialog extends Dialog<Plan | null, Org> {\n @property()\n plan: Plan | null = null;\n\n @property()\n quantity: number = 1;\n\n @property()\n private _updateBillingParams: UpdateBillingParams | null = null;\n\n @property()\n private _error = \"\";\n\n @property()\n private _org: Org | null = null;\n\n @query(\"#nameInput\")\n private _nameInput: Input;\n\n @query(\"#quantityInput\")\n private _quantityInput: Input;\n\n @query(\"#submitButton\")\n private _submitButton: LoadingButton;\n\n @dialog(\"pl-billing-dialog\")\n private _billingDialog: BillingDialog;\n\n @dialog(\"pl-choose-plan-dialog\")\n private _choosePlanDialog: ChoosePlanDialog;\n\n async show(plan: Plan | null) {\n this.plan = plan;\n this.quantity = (plan && plan.min) || 1;\n this._updateBillingParams = null;\n this._org = null;\n this._error = \"\";\n return super.show();\n }\n\n private async _submit() {\n if (this._submitButton.state === \"loading\") {\n return;\n }\n\n const name = this._nameInput.value;\n\n if (!name) {\n this._error = $l(\"Please enter an organization name!\");\n return;\n }\n\n this._error = \"\";\n this._submitButton.start();\n\n if (!this._org) {\n try {\n this._org = await app.createOrg(name);\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._submitButton.fail();\n return;\n }\n }\n\n if (this.plan) {\n const params = this._updateBillingParams || new UpdateBillingParams();\n params.plan = this.plan.id;\n params.members = this.quantity;\n params.org = this._org.id;\n try {\n await app.updateBilling(params);\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._submitButton.fail();\n return;\n }\n }\n\n const org = (this._org = app.getOrg(this._org.id)!);\n\n // Create first vault and group\n if (org.quota.groups) {\n const everyone = await app.createGroup(org, \"Everyone\", [org.getMember(app.account!)!]);\n await app.createVault(\"Main\", org, [], [{ name: everyone.name, readonly: false }]);\n } else {\n await app.createVault(\"Main\", org, [{ id: app.account!.id, readonly: false }]);\n }\n\n this._submitButton.success();\n this.done(org);\n }\n\n private async _updateQuantity() {\n const quantity = parseInt(this._quantityInput.value);\n const { min, max } = this.plan!;\n if (!isNaN(quantity) && quantity >= min && quantity <= max) {\n this.quantity = quantity;\n }\n }\n\n private async _updateBillingInfo() {\n this.open = false;\n const billingInfo = new BillingInfo();\n billingInfo.address.name = this._nameInput.value;\n const billing = await this._billingDialog.show({\n billingInfo\n });\n\n if (billing) {\n this._updateBillingParams = billing;\n this._error = \"\";\n }\n\n this.open = true;\n }\n\n private async _changePlan() {\n this.open = false;\n const plan = await this._choosePlanDialog.show();\n if (plan) {\n this.plan = plan;\n }\n this.open = true;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n text-align: center;\n }\n\n .plan {\n text-align: center;\n padding: 20px;\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n .plan-name {\n font-size: 1.7rem;\n margin-bottom: 8px;\n font-weight: bold;\n }\n\n .plan-trial {\n font-size: 1.2rem;\n margin-bottom: 8px;\n }\n\n .plan-then {\n font-size: var(--font-size-tiny);\n margin-bottom: 8px;\n }\n\n .plan-price {\n letter-spacing: 0.1em;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n font-weight: bold;\n font-size: 1rem;\n margin: 5px;\n }\n\n .plan-price-currency {\n line-height: 1em;\n margin-top: 0.4em;\n }\n\n .plan-price-dollars {\n font-size: 3em;\n line-height: 1em;\n }\n\n .plan-price-cents {\n font-size: 1.5em;\n line-height: 1em;\n margin-top: 0.2em;\n }\n\n .plan-unit {\n font-size: var(--font-size-small);\n }\n\n .plan-fineprint {\n font-size: var(--font-size-tiny);\n opacity: 0.7;\n margin: 4px 0 -4px 0;\n }\n\n pl-loading-button {\n font-weight: bold;\n }\n\n pl-loading-button.primary {\n margin: 8px;\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n font-weight: bold;\n border-bottom: solid 3px var(--color-shade-2);\n }\n\n .error {\n color: var(--color-negative);\n padding: 8px;\n text-align: center;\n }\n\n .payment-method {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n font-weight: bold;\n }\n\n .quantity-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 8px;\n }\n\n .quantity-label {\n font-weight: bold;\n padding: 12px;\n font-size: 1.2em;\n text-align: left;\n }\n\n .quantity-input {\n width: 60px;\n margin: 0;\n font-weight: bold;\n font-size: 1.5rem;\n }\n\n .quantity-minmax {\n font-size: var(--font-size-micro);\n opacity: 0.5;\n text-align: right;\n padding: 12px;\n }\n\n .edit-plan-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n }\n `\n ];\n\n private _renderBilling(plan: Plan) {\n const monthlyPrice = Math.round((this.quantity * plan.cost) / 12);\n const paymentMethod = this._updateBillingParams && this._updateBillingParams.paymentMethod;\n\n return html`\n <div class=\"plan item\">\n <pl-icon class=\"tap edit-plan-icon\" icon=\"edit\" @click=${this._changePlan}></pl-icon>\n\n <div class=\"plan-name\">\n ${plan.name}\n </div>\n\n <div class=\"flex\"></div>\n\n <div class=\"plan-trial\">\n ${$l(\"Free For {0} Days\", (30).toString())}\n </div>\n\n <div class=\"plan-then\">\n ${$l(\"then\")}\n </div>\n\n <div class=\"plan-price\">\n <div class=\"plan-price-currency\">$</div>\n <div class=\"plan-price-dollars\">\n ${Math.floor(monthlyPrice / 100)}\n </div>\n <div class=\"plan-price-cents\">\n .${(monthlyPrice % 100).toString().padEnd(2, \"0\")}\n </div>\n </div>\n\n <div class=\"plan-unit\">\n ${$l(\"per month\")}\n </div>\n\n <div class=\"plan-fineprint\">\n (${$l(\"USD, billed annually\")})\n </div>\n\n <div class=\"flex\"></div>\n </div>\n\n <div class=\"quantity-wrapper\" ?hidden=${plan.max < 2}>\n <div class=\"quantity-minmax flex\">\n <div>${$l(\"{0} min\", plan.min.toString())}</div>\n <div>${$l(\"{0} max\", plan.max.toString())}</div>\n </div>\n <pl-input\n id=\"quantityInput\"\n class=\"quantity-input item\"\n type=\"number\"\n .value=${this.quantity}\n .min=${plan.min}\n .max=${plan.max}\n @input=${this._updateQuantity}\n @blur=${() => (this._quantityInput.value = this.quantity.toString())}\n ></pl-input>\n <div class=\"quantity-label flex\">\n ${$l(\"Seats\")}\n </div>\n </div>\n\n <div class=\"payment-method item tap\" @click=${this._updateBillingInfo}>\n <pl-icon icon=\"credit\"></pl-icon>\n ${paymentMethod\n ? html`\n <div>\n ${paymentMethod.name}\n </div>\n `\n : html`\n <div>\n ${$l(\"Add Billing Info\")}\n </div>\n `}\n </div>\n `;\n }\n\n renderContent() {\n const plan = this.plan;\n const color = (plan && plan.color) || \"var(--color-primary)\";\n\n return html`\n <header>\n <pl-icon></pl-icon>\n <div class=\"title flex\">${$l(\"Create Organization\")}</div>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${this.dismiss}></pl-icon>\n </header>\n\n <div class=\"content\" style=${`--color-highlight: ${color}; --color-highlight-text: var(--color-tertiary);`}>\n <pl-input\n id=\"nameInput\"\n class=\"item\"\n .label=${$l(\"Organization Name\")}\n .value=${(this._org && this._org.name) || \"\"}\n ></pl-input>\n\n ${plan ? this._renderBilling(plan) : html``}\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n\n <pl-loading-button id=\"submitButton\" class=\"tap primary\" @click=${this._submit}>\n ${$l(\"Create\")}\n </pl-loading-button>\n </div>\n `;\n }\n}\n","import { shared, mixins } from \"../styles\";\nimport { animateElement } from \"../lib/animation\";\nimport { BaseElement, element, html, css, property, observe, listen } from \"./base\";\nimport { Input } from \"./input\";\n\n@element(\"pl-dialog\")\nexport class Dialog<I, R> extends BaseElement {\n static openDialogs = new Set<Dialog<any, any>>();\n\n static closeAll() {\n for (const dialog of Dialog.openDialogs) {\n if (!dialog.preventAutoClose) {\n dialog.done();\n }\n }\n }\n\n @property()\n open: boolean = false;\n @property()\n preventDismiss: boolean = false;\n @property()\n preventAutoClose: boolean = false;\n @property()\n dismissOnTapOutside: boolean = true;\n\n readonly hideApp: boolean = false;\n\n isShowing: boolean = false;\n private _hideTimeout?: number;\n private _resolve: ((result?: R) => void) | null;\n\n protected done(result?: R) {\n this._resolve && this._resolve(result);\n this._resolve = null;\n this.open = false;\n Dialog.openDialogs.delete(this);\n }\n\n async show(_input: I = (undefined as any) as I) {\n Dialog.openDialogs.add(this);\n this.open = true;\n\n return new Promise<R>(resolve => {\n this._resolve = resolve;\n });\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n ${mixins.fullbleed()}\n z-index: 10;\n }\n\n :host(:not([open])) {\n pointer-events: none;\n }\n\n .outer {\n height: 100%;\n display: flex;\n position: relative;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px;\n box-sizing: border-box;\n transition: transform 400ms cubic-bezier(0.08, 0.85, 0.3, 1.15) 0s,\n opacity 200ms cubic-bezier(0.6, 0, 0.2, 1) 0s;\n }\n\n .scrim {\n display: block;\n background: #000000;\n opacity: 0;\n transition: opacity 400ms cubic-bezier(0.6, 0, 0.2, 1);\n ${mixins.fullbleed()}\n position: fixed;\n }\n\n :host([open]) .scrim {\n opacity: 0.8;\n }\n\n .inner {\n position: relative;\n width: 100%;\n max-height: 100%;\n box-sizing: border-box;\n max-width: var(--pl-dialog-max-width, 400px);\n z-index: 1;\n border-radius: var(--border-radius);\n box-shadow: rgba(0, 0, 0, 0.25) 0 0 5px;\n overflow: hidden;\n background: var(--color-tertiary);\n display: flex;\n flex-direction: column;\n }\n\n .content {\n flex: 1;\n ${mixins.scroll()}\n }\n\n .footer {\n background: var(--color-tertiary);\n margin: 0;\n border-top: solid 1px var(--color-shade-1);\n }\n\n .actions {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n grid-gap: var(--gutter-size);\n margin: var(--gutter-size);\n }\n\n .actions.vertical {\n grid-template-columns: 1fr;\n }\n\n :host(:not([open])) .outer {\n opacity: 0;\n transform: scale(0.8);\n transition: transform 200ms cubic-bezier(0.6, 0, 0.2, 1), opacity 200ms cubic-bezier(0.6, 0, 0.2, 1);\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n .outer {\n padding-top: max(env(safe-area-inset-top), 12px);\n padding-bottom: max(env(safe-area-inset-bottom), 12px);\n }\n }\n `\n ];\n\n render() {\n return html`\n <div class=\"scrim\"></div>\n\n <div class=\"outer\" @click=${this._tappedOutside}>\n ${this.renderBefore()}\n <div id=\"inner\" class=\"inner\" @click=${(e: Event) => e.stopPropagation()}>\n ${this.renderContent()}\n </div>\n ${this.renderAfter()}\n </div>\n `;\n }\n\n protected renderBefore() {\n return html`\n <slot name=\"before\"></slot>\n `;\n }\n\n protected renderContent() {\n return html`\n <slot></slot>\n `;\n }\n\n protected renderAfter() {\n return html`\n <slot name=\"after\"></slot>\n `;\n }\n\n @listen(\"backbutton\", window)\n _back(e: Event) {\n if (this.open) {\n this.dismiss();\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n rumble() {\n animateElement(this.$(\"#inner\"), { animation: \"rumble\", duration: 200, clear: true });\n }\n\n @observe(\"open\")\n _openChanged() {\n clearTimeout(this._hideTimeout);\n\n // Set _display: block_ if we're showing. If we're hiding\n // we need to wait until the transitions have finished before we\n // set _display: none_.\n if (this.open) {\n if (Input.activeInput) {\n Input.activeInput.blur();\n }\n this.style.display = \"\";\n this.offsetLeft;\n this.isShowing = true;\n this.setAttribute(\"open\", \"\");\n } else {\n this.removeAttribute(\"open\");\n this._hideTimeout = window.setTimeout(() => {\n this.style.display = \"none\";\n this.isShowing = false;\n }, 400);\n }\n\n this.dispatch(this.open ? \"dialog-open\" : \"dialog-close\", { dialog: this }, true, true);\n }\n\n private _tappedOutside() {\n if (this.dismissOnTapOutside) {\n this.dismiss();\n }\n }\n\n dismiss() {\n if (!this.preventDismiss) {\n this.dispatch(\"dialog-dismiss\");\n this.done();\n }\n }\n}\n","import { Vault } from \"@padloc/core/src/vault\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { saveFile } from \"@padloc/core/src/platform\";\nimport { stringToBytes } from \"@padloc/core/src/encoding\";\nimport { CSV, PBES2, ImportFormat } from \"../lib/import\";\nimport { supportedFormats, asCSV, asPBES2Container } from \"../lib/export\";\nimport { app } from \"../globals\";\nimport { prompt } from \"../lib/dialog\";\nimport { element, html, css, query } from \"./base\";\nimport { Select } from \"./select\";\nimport { Dialog } from \"./dialog\";\n\n@element(\"pl-export-dialog\")\nexport class ExportDialog extends Dialog<void, void> {\n @query(\"#formatSelect\")\n private _formatSelect: Select<ImportFormat>;\n @query(\"#vaultSelect\")\n private _vaultSelect: Select<Vault>;\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n display: flex;\n flex-direction: column;\n }\n\n pl-input,\n pl-select,\n button {\n text-align: center;\n margin: 0 10px 10px 10px;\n background: var(--shade-2-color);\n border-radius: 8px;\n }\n\n h1 {\n display: block;\n text-align: center;\n }\n\n .csv-note {\n font-size: var(--font-size-micro);\n text-align: center;\n padding: 0px 20px 20px 20px;\n }\n `\n ];\n\n renderContent() {\n return html`\n <h1>${$l(\"Export Data\")}</h1>\n\n <pl-select\n id=\"vaultSelect\"\n .options=${app.vaults}\n .label=${$l(\"Target Vault\")}\n @change=${() => this.requestUpdate()}\n >\n </pl-select>\n\n <pl-select\n id=\"formatSelect\"\n .options=${supportedFormats}\n .label=${$l(\"Format\")}\n @change=${() => this.requestUpdate()}\n ></pl-select>\n\n <div class=\"csv-note\" ?hidden=${this._formatSelect && this._formatSelect.selected !== CSV}>\n ${$l(\n \"WARNING: Exporting to CSV format will save your data without encyryption of any \" +\n \"kind which means it can be read by anyone. We strongly recommend exporting your data as \" +\n \"a secure, encrypted file, instead!\"\n )}\n </div>\n\n <button @click=${() => this._export()} class=\"tap primary\">\n ${$l(\"Export {0} Items\", this._vaultSelect && this._vaultSelect.selected!.items.size.toString())}\n </button>\n `;\n }\n\n async show() {\n await this.updateComplete;\n this._formatSelect.selected = PBES2;\n this._vaultSelect.selected = app.mainVault!;\n return super.show();\n }\n\n private async _export() {\n const vault = this._vaultSelect.selected!;\n const items = [...vault.items];\n\n const date = new Date().toISOString().substr(0, 10);\n let data = \"\";\n let fileName = \"\";\n let type = \"text/plain\";\n\n switch (this._formatSelect.selected.format) {\n case CSV.format:\n data = await asCSV(items);\n fileName = `${vault.name.replace(/ /g, \"_\")}_${date}.csv`;\n type = \"text/csv\";\n break;\n\n case PBES2.format:\n this.open = false;\n const password = await prompt($l(\"Please choose a password to protect this backup with!\"), {\n title: $l(\"Choose Password\"),\n type: \"password\",\n placeholder: \"Enter Password\",\n validate: async val => {\n if (!val) {\n throw $l(\"Please choose a password!\");\n }\n return val;\n }\n });\n\n if (!password) {\n this.open = true;\n return;\n }\n\n const repeated = await prompt($l(\"Please repeat the password!\"), {\n title: $l(\"Choose Password\"),\n type: \"password\",\n placeholder: \"Repeat Password\",\n validate: async val => {\n if (val !== password) {\n throw $l(\"Password not repeated correctly!\");\n }\n return val;\n }\n });\n\n if (!repeated) {\n this.open = true;\n return;\n }\n\n data = await asPBES2Container(items, password);\n fileName = `${vault.name.replace(/ /g, \"_\")}_${date}.pbes2`;\n break;\n\n default:\n return;\n }\n saveFile(fileName, type, stringToBytes(data));\n this.done();\n }\n}\n","import { FieldDef, FIELD_DEFS } from \"@padloc/core/src/item\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { element, html, css } from \"./base\";\nimport { Dialog } from \"./dialog\";\n\n@element(\"pl-field-type-dialog\")\nexport class FieldTypeDialog extends Dialog<void, FieldDef> {\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n max-width: 440px;\n }\n\n .field-defs {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n grid-gap: 8px;\n margin: 8px;\n }\n\n .field-def {\n padding: 8px;\n display: flex;\n align-items: center;\n margin: 0;\n font-weight: 600;\n }\n\n .icon {\n margin-right: 4px;\n }\n\n .message {\n text-align: center;\n margin: 20px;\n }\n `\n ];\n\n renderContent() {\n return html`\n <header>\n <pl-icon></pl-icon>\n <div class=\"title flex\">${$l(\"Choose A Field Type\")}</div>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${this.dismiss}></pl-icon>\n </header>\n\n <div class=\"content\">\n <div class=\"message\">\n ${$l(\"What kind of field you would like to add?\")}\n </div>\n <div class=\"field-defs\">\n ${[...Object.values(FIELD_DEFS)].map(\n fieldDef => html`\n <div class=\"item field-def tap\" @click=${() => this.done(fieldDef)}>\n <pl-icon icon=${fieldDef.icon} class=\"icon\"></pl-icon>\n <div>${fieldDef.name}</div>\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n}\n","import { FieldType, FIELD_DEFS } from \"@padloc/core/src/item\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, css, property, query, observe } from \"./base\";\nimport \"./icon\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\nimport \"./input\";\nimport \"./textarea\";\nimport \"./totp\";\n\n@element(\"pl-field\")\nexport class FieldElement extends BaseElement {\n @property()\n editing: boolean = false;\n\n @property()\n name: string = \"\";\n\n @property()\n value: string = \"\";\n\n @property()\n type: FieldType = FieldType.Note;\n\n @property()\n private _masked: boolean = false;\n\n @query(\".name-input\")\n private _nameInput: Input;\n\n @query(\".value-input\")\n private _valueInput: Input | Textarea;\n\n private get _fieldDef() {\n return FIELD_DEFS[this.type] || FIELD_DEFS.text;\n }\n\n private get _fieldActions() {\n const actions = [{ icon: \"copy\", action: () => this.dispatch(\"copy-clipboard\") }];\n\n if (this._fieldDef.mask) {\n actions.push({ icon: this._masked ? \"show\" : \"hide\", action: () => (this._masked = !this._masked) });\n }\n\n return actions;\n }\n\n focus() {\n const inputToFocus = this._nameInput.value ? this._valueInput : this._nameInput;\n inputToFocus.focus();\n }\n\n @observe(\"type\")\n _typeChanged() {\n this._masked = this._fieldDef.mask;\n }\n\n @observe(\"editing\")\n _editingChanged() {\n if (!this.editing) {\n this.setAttribute(\"draggable\", \"true\");\n } else {\n this.removeAttribute(\"draggable\");\n }\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n border-radius: 8px;\n min-height: 80px;\n opacity: 0.999;\n }\n\n .field-buttons {\n display: flex;\n flex-direction: column;\n margin: 4px;\n }\n\n .field-buttons.right {\n margin-left: -4px;\n }\n\n .field-buttons.left {\n margin-right: -4px;\n }\n\n :host(:not(:hover)) .field-buttons.right {\n visibility: hidden;\n }\n\n .field-header {\n display: flex;\n margin-bottom: 4px;\n font-size: var(--font-size-tiny);\n font-weight: bold;\n color: var(--color-highlight);\n align-items: center;\n position: relative;\n }\n\n .field-header pl-icon {\n border-radius: 0;\n font-size: 10px;\n width: 10px;\n height: 11px;\n position: absolute;\n left: 8px;\n top: 8px;\n }\n\n .field-value {\n display: flex;\n }\n\n .field-value > :not(:first-child) {\n margin-left: 4px;\n }\n\n .value-input,\n .value-display {\n font-family: var(--font-family-mono);\n font-size: 110%;\n padding: 4px 8px;\n line-height: 1.4em;\n flex: 1;\n width: 0;\n }\n\n .value-display {\n white-space: pre-wrap;\n overflow-wrap: break-word;\n user-select: text;\n cursor: text;\n }\n\n .fields-container {\n margin: 8px;\n width: 0;\n }\n\n .name-input {\n flex: 1;\n min-width: 0;\n padding: 0 10px 0 24px;\n line-height: 30px;\n }\n\n .name-input,\n .value-input {\n height: auto;\n box-sizing: border-box;\n background: none;\n }\n\n .value-input {\n border: dashed 1px var(--color-shade-2);\n }\n\n .name-input[readonly] {\n border: none;\n }\n\n :host([draggable]),\n :host([draggable]) .name-input {\n cursor: grab;\n }\n\n :host([draggable]):active {\n cursor: grabbing;\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n .field-header pl-icon {\n top: 11px;\n }\n\n .drag-handle {\n display: none;\n }\n }\n `\n ];\n\n private _renderDisplayValue() {\n const format = this._fieldDef.format || ((value: string, _masked: boolean) => value);\n switch (this.type) {\n case \"totp\":\n return html`\n <pl-totp class=\"value-display\" .secret=${this.value} .time=${Date.now()}></pl-totp>\n `;\n default:\n return html`\n <pre class=\"value-display\">${format(this.value, this._masked)}</pre>\n `;\n }\n }\n\n private _renderEditValue() {\n switch (this.type) {\n case \"note\":\n return html`\n <pl-textarea\n class=\"value-input\"\n .placeholder=${$l(\"Enter Notes Here\")}\n @input=${() => (this.value = this._valueInput.value)}\n autosize\n .value=${this.value}\n >\n </pl-textarea>\n `;\n\n case \"totp\":\n return html`\n <pl-input\n class=\"value-input\"\n .placeholder=${$l(\"Enter Secret\")}\n type=\"text\"\n @input=${() => (this.value = this._valueInput.value)}\n .value=${this.value}\n >\n </pl-input>\n <pl-icon icon=\"qrcode\" class=\"tap\" @click=${() => this.dispatch(\"get-totp-qr\")}></pl-icon>\n `;\n case \"password\":\n return html`\n <pl-input\n class=\"value-input\"\n .placeholder=${$l(\"Enter Password\")}\n type=\"text\"\n @input=${() => (this.value = this._valueInput.value)}\n .value=${this.value}\n >\n </pl-input>\n <pl-icon icon=\"generate\" class=\"tap\" @click=${() => this.dispatch(\"generate\")}></pl-icon>\n `;\n\n default:\n let inputType: string;\n switch (this.type) {\n case \"email\":\n case \"url\":\n case \"date\":\n case \"month\":\n inputType = this.type;\n break;\n case \"pin\":\n case \"credit\":\n inputType = \"number\";\n break;\n case \"phone\":\n inputType = \"tel\";\n break;\n default:\n inputType = \"text\";\n }\n return html`\n <pl-input\n class=\"value-input\"\n .placeholder=${$l(\"Enter Value Here\")}\n .type=${inputType}\n .pattern=${this._fieldDef.pattern}\n @input=${() => (this.value = this._valueInput.value)}\n .value=${this.value}\n >\n </pl-input>\n `;\n }\n }\n\n render() {\n return html`\n <div class=\"field-buttons left\" ?hidden=${!this.editing}>\n <pl-icon\n icon=\"menu\"\n class=\"drag-handle\"\n @mouseover=${() => this.setAttribute(\"draggable\", \"true\")}\n @mouseout=${() => this.removeAttribute(\"draggable\")}\n >\n </pl-icon>\n\n <pl-icon icon=\"remove\" class=\"tap\" @click=${() => this.dispatch(\"remove\")}> </pl-icon>\n </div>\n\n <div class=\"fields-container flex\">\n <div class=\"field-header\">\n <pl-icon icon=\"${this._fieldDef.icon}\"></pl-icon>\n\n <pl-input\n class=\"name-input\"\n placeholder=\"${this.editing ? $l(\"Enter Field Name\") : $l(\"Unnamed\")}\"\n .value=${this.name}\n @input=${() => (this.name = this._nameInput.value)}\n ?readonly=${!this.editing}\n >\n </pl-input>\n </div>\n\n <div class=\"field-value\">\n ${this.editing ? this._renderEditValue() : this._renderDisplayValue()}\n </div>\n </div>\n\n <div class=\"field-buttons right\" ?hidden=${this.editing}>\n ${this._fieldActions.map(\n ({ icon, action }) => html`\n <pl-icon icon=${icon} class=\"tap\" @click=${action}></pl-icon>\n `\n )}\n </div>\n `;\n }\n}\n","import { randomString, chars } from \"@padloc/core/src/util\";\nimport { generatePassphrase, AVAILABLE_LANGUAGES } from \"@padloc/core/src/diceware\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { animateElement } from \"../lib/animation\";\nimport { app } from \"../globals\";\nimport { html, css, property, query, listen } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { Slider } from \"./slider\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { Select } from \"./select\";\nimport \"./icon\";\n\nexport type GeneratorMode = \"words\" | \"chars\";\n\ninterface SeparatorOption {\n value: string;\n toString(): string;\n}\n\nconst separators = [\n {\n value: \"-\",\n toString: () => $l(\"Dash\") + \" ( - )\"\n },\n {\n value: \"_\",\n toString: () => $l(\"Underscore\") + \" ( _ )\"\n },\n {\n value: \"/\",\n toString: () => $l(\"Slash\") + \" ( / )\"\n },\n {\n value: \" \",\n toString: () => $l(\"Space\") + \" ( )\"\n }\n];\n\nexport class Generator extends Dialog<void, string> {\n @property()\n value: string = \"\";\n\n @property()\n mode: GeneratorMode = \"words\";\n\n @query(\"#separator\")\n private _separator: Select<SeparatorOption>;\n @query(\"#language\")\n private _language: Select<{ value: string }>;\n @query(\"#wordCount\")\n private _wordCount: Slider;\n\n @query(\"#lower\")\n private _lower: ToggleButton;\n @query(\"#upper\")\n private _upper: ToggleButton;\n @query(\"#numbers\")\n private _numbers: ToggleButton;\n @query(\"#other\")\n private _other: ToggleButton;\n @query(\"#length\")\n private _length: Slider;\n\n @query(\".result\")\n private _result: HTMLDivElement;\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n display: flex;\n flex-direction: column;\n }\n\n .header {\n background: var(--color-tertiary);\n text-align: center;\n font-weight: bold;\n }\n\n .header-title {\n font-size: 120%;\n padding: 20px 20px 10px 20px;\n }\n\n .charsets {\n display: flex;\n }\n\n .charsets > * {\n flex: 1;\n }\n\n pl-toggle-button {\n display: block;\n border-bottom: solid 1px rgba(0, 0, 0, 0.1);\n }\n\n pl-slider {\n display: flex;\n height: var(--row-height);\n border-bottom: solid 1px rgba(0, 0, 0, 0.1);\n }\n\n .controls > pl-select {\n margin-top: calc(2 * var(--gutter-size));\n }\n\n .result {\n font-family: var(--font-family-mono);\n text-align: center;\n font-size: 120%;\n overflow-wrap: break-word;\n font-weight: bold;\n padding: 20px;\n margin: var(--gutter-size);\n cursor: pointer;\n }\n\n .result > .hint {\n margin: 8px 0 -12px 0;\n font-size: var(--font-size-micro);\n color: var(--color-shade-3);\n }\n\n .arrow {\n display: block;\n margin: -10px auto;\n font-size: 120%;\n }\n `\n ];\n\n renderContent() {\n const { value } = this;\n return html`\n <div class=\"header\">\n <div class=\"header-title\">${$l(\"Generate Password\")}</div>\n <div class=\"tabs\">\n <div\n class=\"flex tab tap\"\n ?active=${this.mode === \"words\"}\n @click=${() => this._selectMode(\"words\")}\n >\n ${$l(\"passphrase\")}\n </div>\n <div\n class=\"flex tab tap\"\n ?active=${this.mode === \"chars\"}\n @click=${() => this._selectMode(\"chars\")}\n >\n ${$l(\"random string\")}\n </div>\n </div>\n </div>\n\n <div class=\"content\">\n <div ?hidden=${this.mode !== \"words\"} class=\"controls\">\n <pl-select\n id=\"separator\"\n .options=${separators}\n .label=${$l(\"Word Separator\")}\n class=\"item tap\"\n ></pl-select>\n\n <pl-select\n id=\"language\"\n .options=${AVAILABLE_LANGUAGES}\n .label=${$l(\"Language\")}\n class=\"item tap\"\n ></pl-select>\n\n <pl-slider\n id=\"wordCount\"\n unit=\" ${$l(\"words\")}\"\n value=\"4\"\n min=\"3\"\n max=\"6\"\n class=\"item tap\"\n ></pl-slider>\n </div>\n\n <div ?hidden=${this.mode !== \"chars\"} class=\"controls\">\n <pl-toggle-button id=\"lower\" label=\"a-z\" class=\"item tap\" reverse></pl-toggle-button>\n\n <pl-toggle-button id=\"upper\" label=\"A-Z\" class=\"item tap\" reverse></pl-toggle-button>\n\n <pl-toggle-button id=\"numbers\" label=\"0-9\" class=\"item tap\" reverse></pl-toggle-button>\n\n <pl-toggle-button id=\"other\" label=\"?()/%...\" class=\"item tap\" reverse></pl-toggle-button>\n\n <pl-slider id=\"length\" label=\"${$l(\"length\")}\" value=\"20\" min=\"5\" max=\"50\" class=\"item\"></pl-slider>\n </div>\n\n <pl-icon icon=\"arrow-down\" class=\"arrow\"></pl-icon>\n\n <div class=\"result item\" @click=${() => this._generate()}>\n <div>\n ${value}\n </div>\n\n <div class=\"hint\">\n ${$l(\"Click To Shuffle\")}\n </div>\n </div>\n </div>\n\n <div class=\"footer\">\n <div class=\"actions\">\n <button class=\"primary tap\" @click=${() => this._confirm()}>${$l(\"Use\")}</button>\n <button class=\"transparent tap\" @click=${() => this.dismiss()}>${$l(\"Discard\")}</button>\n </div>\n </div>\n `;\n }\n\n firstUpdated() {\n this._lower.active = this._upper.active = this._numbers.active = true;\n }\n\n async show(): Promise<string> {\n await this.updateComplete;\n this._generate();\n return super.show();\n }\n\n @listen(\"change\")\n async _generate() {\n const separator = (this._separator && this._separator.selected && this._separator.selected.value) || \"-\";\n const language =\n (this._language && this._language.selected && this._language.selected.value) || app.state.device.locale;\n\n switch (this.mode) {\n case \"words\":\n this.value = await generatePassphrase(this._wordCount.value, separator, [language]);\n break;\n case \"chars\":\n let charSet = \"\";\n this._lower.active && (charSet += chars.lower);\n this._upper.active && (charSet += chars.upper);\n this._numbers.active && (charSet += chars.numbers);\n this._other.active && (charSet += chars.other);\n this.value = charSet ? await randomString(this._length.value, charSet) : \"\";\n break;\n }\n\n animateElement(this._result, { animation: \"bounce\" });\n }\n\n private _confirm() {\n this.done(this.value);\n }\n\n private _selectMode(mode: GeneratorMode) {\n this.mode = mode;\n this._generate();\n }\n}\n\nwindow.customElements.define(\"pl-generator\", Generator);\n","import { Org, OrgMember, Group } from \"@padloc/core/src/org\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { app } from \"../globals\";\nimport { prompt } from \"../lib/dialog\";\nimport { element, html, css, property, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Input } from \"./input\";\nimport \"./toggle-button\";\nimport \"./member-item\";\n\ntype InputType = { group: Group | null; org: Org };\n\n@element(\"pl-group-dialog\")\nexport class GroupDialog extends Dialog<InputType, void> {\n @property()\n group: Group | null = null;\n\n @property()\n org: Org | null = null;\n\n @query(\"#saveButton\")\n private _saveButton: LoadingButton;\n\n @query(\"#nameInput\")\n private _nameInput: Input;\n\n @query(\"#filterMembersInput\")\n private _filterMembersInput: Input;\n\n @property()\n private _membersFilter: string = \"\";\n\n @property()\n private _error: string = \"\";\n\n private _members = new Set<string>();\n\n private _getCurrentMembers(): Set<string> {\n const members = new Set<string>();\n\n if (!this.group || !this.org) {\n return members;\n }\n\n for (const member of this.org.getMembersForGroup(this.group!)) {\n members.add(member.id);\n }\n\n return members;\n }\n\n private get _hasChanged() {\n if (!this._nameInput) {\n return false;\n }\n const currentMembers = this._getCurrentMembers();\n const membersChanged =\n this._members.size !== currentMembers.size ||\n [...this._members.values()].some(group => !currentMembers.has(group));\n\n const nameChanged = this.group ? this.group.name !== this._nameInput.value : !!this._nameInput.value;\n\n return this._members.size && this._nameInput.value && (membersChanged || nameChanged);\n }\n\n async show({ org, group }: InputType): Promise<void> {\n this.org = org;\n this.group = group;\n this._members = this._getCurrentMembers();\n this._error = \"\";\n await this.updateComplete;\n this._nameInput.value = group ? group.name : \"\";\n this._clearMembersFilter();\n if (group) {\n setTimeout(() => this._nameInput.focus(), 100);\n }\n await super.show();\n }\n\n _toggleMember(member: OrgMember) {\n if (this._members.has(member.id)) {\n this._members.delete(member.id);\n } else {\n this._members.add(member.id);\n }\n\n this.requestUpdate();\n }\n\n private async _save() {\n if (this._saveButton.state === \"loading\") {\n return;\n }\n\n this._error = \"\";\n this._saveButton.start();\n\n try {\n const org = this.org!;\n const members = [...this._members.values()].map(id => org.getMember({ id })!);\n\n if (this.group) {\n await app.updateGroup(org, this.group, members, this._nameInput.value);\n } else {\n await app.createGroup(org, this._nameInput.value, members);\n }\n\n this._saveButton.success();\n this.done();\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._saveButton.fail();\n throw e;\n }\n }\n\n private async _deleteGroup() {\n this.open = false;\n\n const deleted = await prompt($l(\"Are you sure you want to delete this group?\"), {\n type: \"destructive\",\n title: $l(\"Delete Group\"),\n placeholder: $l(\"Type 'DELETE' to confirm\"),\n confirmLabel: $l(\"Delete\"),\n validate: async val => {\n if (val !== \"DELETE\") {\n throw $l(\"Type 'DELETE' to confirm\");\n }\n\n await app.updateOrg(this.org!.id, async org => {\n org.groups = org.groups.filter(group => group.name !== this.group!.name);\n });\n\n return val;\n }\n });\n\n if (deleted) {\n this.done();\n } else {\n this.open = true;\n }\n }\n\n private _updateMembersFilter() {\n this._membersFilter = this._filterMembersInput.value;\n }\n\n private _clearMembersFilter() {\n this._membersFilter = this._filterMembersInput.value = \"\";\n }\n\n shouldUpdate() {\n return !!this.org;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n }\n\n pl-toggle-button {\n display: block;\n padding: 0 15px 0 0;\n }\n\n .delete-button {\n color: var(--color-negative);\n font-size: var(--font-size-default);\n }\n `\n ];\n\n renderContent() {\n const org = this.org!;\n const memFilter = this._membersFilter.toLowerCase();\n const members = memFilter\n ? org.members.filter(\n ({ name, email }) => email.toLowerCase().includes(memFilter) || name.toLowerCase().includes(memFilter)\n )\n : org.members;\n // members.sort((a, b) => this._members.has(a.id) - this._members.has(b.id));\n const canEdit = org.isAdmin(app.account!);\n const canDelete = this.group && canEdit;\n\n return html`\n <header>\n <pl-icon icon=\"group\"></pl-icon>\n <pl-input\n id=\"nameInput\"\n class=\"flex\"\n .placeholder=${$l(\"Enter Group Name\")}\n .readonly=${!canEdit}\n @input=${() => this.requestUpdate()}\n ></pl-input>\n <pl-icon\n icon=\"delete\"\n class=\"delete-button tap\"\n @click=${this._deleteGroup}\n ?hidden=${!canDelete}\n ></pl-icon>\n </header>\n\n <div class=\"content\">\n <div class=\"search-wrapper item\">\n <pl-icon icon=\"search\"></pl-icon>\n <pl-input\n id=\"filterMembersInput\"\n placeholder=\"${$l(\"Search...\")}\"\n @input=${this._updateMembersFilter}\n ></pl-input>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${this._clearMembersFilter}></pl-icon>\n </div>\n\n ${members.map(\n member => html`\n <pl-toggle-button\n class=\"item tap\"\n reverse\n @click=${() => this._toggleMember(member)}\n .active=${this._members.has(member.id)}\n ?disabled=${!canEdit}\n >\n <pl-member-item hideRole .member=${member}></pl-member-item>\n </pl-toggle-button>\n `\n )}\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n </div>\n\n <div class=\"footer\">\n <div class=\"actions\">\n <pl-loading-button\n class=\"tap primary\"\n id=\"saveButton\"\n ?disabled=${!canEdit || !this._hasChanged}\n @click=${this._save}\n >\n ${this.group ? $l(\"Save\") : $l(\"Create Group\")}\n </pl-loading-button>\n\n <button class=\"transparent tap\" @click=${this.dismiss}>\n ${!this.group || this._hasChanged ? $l(\"Cancel\") : $l(\"Close\")}\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { Group } from \"@padloc/core/src/org\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, css, property } from \"./base\";\nimport \"./icon\";\n\n@element(\"pl-group-item\")\nexport class GroupItem extends BaseElement {\n @property()\n group: Group;\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n align-items: center;\n padding: 4px 0;\n }\n\n .icon {\n font-size: 120%;\n margin: 8px;\n background: #eee;\n border: solid 1px #ddd;\n width: 45px;\n height: 45px;\n }\n\n .tags {\n margin: 4px 0;\n }\n\n .group-name {\n font-weight: bold;\n margin-bottom: 4px;\n }\n\n .group-info {\n flex: 1;\n width: 0;\n }\n `\n ];\n\n render() {\n return html`\n <pl-icon class=\"icon\" icon=\"group\"></pl-icon>\n\n <div class=\"group-info\">\n <div class=\"group-name ellipsis\">${this.group.name}</div>\n\n <div class=\"tags small\">\n <div class=\"tag\">\n <pl-icon icon=\"user\"></pl-icon>\n\n <div>${this.group.members.length}</div>\n </div>\n\n <div class=\"tag\">\n <pl-icon icon=\"vaults\"></pl-icon>\n\n <div>${this.group.vaults.length}</div>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { BaseElement, element, html, css, property } from \"./base\";\n\n@element(\"pl-icon\")\nexport class PlIcon extends BaseElement {\n @property({ reflect: true })\n icon: string = \"\";\n\n static styles = [\n css`\n :host {\n display: inline-block;\n text-align: center;\n font-family: \"FontAwesome\";\n color: inherit;\n font-size: inherit;\n position: relative;\n height: 40px;\n width: 40px;\n font-weight: normal !important;\n border-radius: 100%;\n overflow: hidden;\n }\n\n div {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n height: 0;\n line-height: 0;\n }\n\n :host([icon=\"add\"]) > div::before {\n content: \"\\\\f067\";\n }\n\n :host([icon=\"menu\"]) > div::before {\n content: \"\\\\f0c9\";\n }\n\n :host([icon=\"close\"]) > div::before {\n content: \"\\\\f00d\";\n }\n\n :host([icon=\"more\"]) > div::before {\n content: \"\\\\f141\";\n }\n\n :host([icon=\"delete\"]) > div::before {\n content: \"\\\\f2ed\";\n }\n\n :host([icon=\"copy\"]) > div::before {\n /* content: \"\\\\f24d\"; */\n content: \"\\\\f0c5\";\n }\n\n :host([icon=\"edit\"]) > div::before {\n content: \"\\\\f303\";\n }\n\n :host([icon=\"forward\"]) > div::before {\n content: \"\\\\f054\";\n }\n\n :host([icon=\"backward\"]) > div::before {\n content: \"\\\\f053\";\n }\n\n :host([icon=\"check\"]) > div::before {\n content: \"\\\\f00c\";\n }\n\n :host([icon=\"cancel\"]) > div::before {\n content: \"\\\\f00d\";\n }\n\n :host([icon=\"generate\"]) > div::before {\n content: \"\\\\f522\";\n }\n\n :host([icon=\"tag\"]) > div::before {\n content: \"\\\\f02b\";\n }\n\n :host([icon=\"tags\"]) > div::before {\n content: \"\\\\f02c\";\n }\n\n :host([icon=\"dropdown\"]) > div::before {\n content: \"\\\\f0d7\";\n }\n\n :host([icon=\"dropup\"]) > div::before {\n content: \"\\\\f0d8\";\n }\n\n :host([icon=\"settings\"]) > div::before {\n content: \"\\\\f013\";\n }\n\n :host([icon=\"cloud\"]) > div::before {\n content: \"\\\\f0c2\";\n }\n\n :host([icon=\"lock\"]) > div::before {\n content: \"\\\\f023\";\n }\n\n :host([icon=\"refresh\"]) > div::before {\n content: \"\\\\f2f1\";\n }\n\n :host([icon=\"unlock\"]) > div::before {\n content: \"\\\\f13e\";\n }\n\n :host([icon=\"export\"]) > div::before {\n content: \"\\\\f093\";\n }\n\n :host([icon=\"import\"]) > div::before {\n content: \"\\\\f019\";\n }\n\n :host([icon=\"search\"]) > div::before {\n content: \"\\\\f002\";\n }\n\n :host([icon=\"info\"]) > div::before {\n content: \"\\\\f129\";\n }\n\n :host([icon=\"info-round\"]) > div::before {\n content: \"\\\\f05a\";\n }\n\n :host([icon=\"download\"]) > div::before {\n content: \"\\\\f019\";\n }\n\n :host([icon=\"upload\"]) > div::before {\n content: \"\\\\f093\";\n }\n\n :host([icon=\"show\"]) > div::before {\n content: \"\\\\f06e\";\n }\n\n :host([icon=\"hide\"]) > div::before {\n content: \"\\\\f070\";\n }\n\n :host([icon=\"checked\"]) > div::before {\n content: \"\\\\f14a\";\n }\n\n :host([icon=\"checkall\"]) > div::before {\n content: \"\\\\f560\";\n }\n\n :host([icon=\"success\"]) > div::before {\n content: \"\\\\f058\";\n }\n\n :host([icon=\"unchecked\"]) > div::before {\n content: \"\\\\f146\";\n }\n\n :host([icon=\"share\"]) > div::before {\n content: \"\\\\f045\";\n }\n\n :host([icon=\"logout\"]) > div::before {\n content: \"\\\\f2f5\";\n }\n\n :host([icon=\"mail\"]) > div::before {\n content: \"\\\\f0e0\";\n }\n\n :host([icon=\"user\"]) > div::before {\n content: \"\\\\f007\";\n }\n\n :host([icon=\"record\"]) > div::before {\n content: \"\\\\f15b\";\n }\n\n :host([icon=\"mobile\"]) > div::before {\n content: \"\\\\f10b\";\n font-size: 140%;\n }\n\n :host([icon=\"database\"]) > div::before {\n content: \"\\\\f1c0\";\n }\n\n :host([icon=\"time\"]) > div::before {\n content: \"\\\\f017\";\n }\n\n :host([icon=\"error\"]) > div::before {\n content: \"\\\\f071\";\n }\n\n :host([icon=\"question\"]) > div::before {\n content: \"\\\\f059\";\n }\n\n :host([icon=\"desktop\"]) > div::before {\n content: \"\\\\f109\";\n }\n\n :host([icon=\"group\"]) > div::before {\n content: \"\\\\f509\";\n }\n\n :host([icon=\"members\"]) > div::before {\n content: \"\\\\f0c0\";\n }\n\n :host([icon=\"vaults\"]) > div::before {\n content: \"\\\\f1b3\";\n }\n\n :host([icon=\"vault\"]) > div::before {\n content: \"\\\\f1b2\";\n }\n\n :host([icon=\"share\"]) > div::before {\n content: \"\\\\f064\";\n }\n\n :host([icon=\"invite\"]) > div::before {\n content: \"\\\\f234\";\n }\n\n :host([icon=\"trusted\"]) > div::before {\n content: \"\\\\f4fc\";\n }\n\n :host([icon=\"removeuser\"]) > div::before {\n content: \"\\\\f506\";\n }\n\n :host([icon=\"org\"]) > div::before {\n content: \"\\\\f0c0\";\n }\n\n // :host([icon=\"logo\"]) > div::before {\n // content: \"\\\\f447\";\n // }\n\n :host([icon=\"list\"]) > div::before {\n content: \"\\\\f550\";\n }\n\n :host([icon=\"remove\"]) > div::before {\n content: \"\\\\f056\";\n }\n\n :host([icon=\"password\"]) > div::before {\n content: \"\\\\f069\";\n }\n\n :host([icon=\"admins\"]) > div::before {\n content: \"\\\\f509\";\n }\n\n :host([icon=\"archive\"]) > div::before {\n content: \"\\\\f187\";\n }\n\n :host([icon=\"attachment\"]) > div::before {\n content: \"\\\\f0c6\";\n }\n\n :host([icon=\"file\"]) > div::before {\n content: \"\\\\f15b\";\n }\n\n :host([icon=\"file-video\"]) > div::before {\n content: \"\\\\f1c8\";\n }\n\n :host([icon=\"file-pdf\"]) > div::before {\n content: \"\\\\f1c1\";\n }\n\n :host([icon=\"file-image\"]) > div::before {\n content: \"\\\\f1c5\";\n }\n\n :host([icon=\"file-csv\"]) > div::before {\n content: \"\\\\f6dd\";\n }\n\n :host([icon=\"file-code\"]) > div::before {\n content: \"\\\\f1c9\";\n }\n\n :host([icon=\"file-archive\"]) > div::before {\n content: \"\\\\f1c6\";\n }\n\n :host([icon=\"file-audio\"]) > div::before {\n content: \"\\\\f1c7\";\n }\n\n :host([icon=\"file-text\"]) > div::before {\n content: \"\\\\f15c\";\n }\n\n :host([icon=\"file-certificate\"]) > div::before {\n content: \"\\\\f56c\";\n }\n\n :host([icon=\"arrow-down\"]) > div::before {\n content: \"\\\\f309\";\n }\n\n :host([icon=\"favorite\"]) > div::before {\n content: \"\\\\f005\";\n }\n\n :host([icon=\"qrcode\"]) > div::before {\n content: \"\\\\f029\";\n }\n\n :host([icon=\"credit\"]) > div::before {\n content: \"\\\\f09d\";\n }\n\n :host([icon=\"address\"]) > div::before {\n content: \"\\\\f2bb\";\n }\n\n :host([icon=\"discount\"]) > div::before {\n content: \"\\\\f295\";\n }\n\n :host([icon=\"dollar\"]) > div::before {\n content: \"\\\\f155\";\n }\n\n :host([icon=\"storage\"]) > div::before {\n content: \"\\\\f49e\";\n }\n\n :host([icon=\"hirarchy\"]) > div::before {\n content: \"\\\\f0e8\";\n }\n\n :host([icon=\"web\"]) > div::before {\n content: \"\\\\f57d\";\n }\n\n :host([icon=\"bank\"]) > div::before {\n content: \"\\\\f53d\";\n }\n\n :host([icon=\"login\"]) > div::before {\n content: \"\\\\f2f6\";\n }\n\n :host([icon=\"sim\"]) > div::before {\n content: \"\\\\f7c4\";\n }\n\n :host([icon=\"wifi\"]) > div::before {\n content: \"\\\\f1eb\";\n }\n\n :host([icon=\"passport\"]) > div::before {\n content: \"\\\\f5ab\";\n }\n\n :host([icon=\"note\"]) > div::before {\n content: \"\\\\f036\";\n }\n\n :host([icon=\"custom\"]) > div::before {\n content: \"\\\\f249\";\n }\n\n :host([icon=\"email\"]) > div::before {\n content: \"\\\\f1fa\";\n }\n\n :host([icon=\"fingerprint\"]) > div::before {\n content: \"\\\\f577\";\n }\n\n :host([icon=\"totp\"]) > div::before {\n content: \"\\\\f1da\";\n }\n\n :host([icon=\"month\"]) > div::before {\n content: \"\\\\f133\";\n }\n\n :host([icon=\"date\"]) > div::before {\n content: \"\\\\f073\";\n }\n\n :host([icon=\"phone\"]) > div::before {\n content: \"\\\\f095\";\n }\n\n :host([icon=\"text\"]) > div::before {\n content: \"\\\\f031\";\n }\n\n :host([icon=\"clipboard\"]) > div::before {\n content: \"\\\\f328\";\n }\n\n :host([icon=\"logo\"]) > div::before {\n font-family: \"Padlock\";\n content: \"\\\\0041\";\n font-size: 110%;\n }\n `\n ];\n\n render() {\n return html`\n <div></div>\n `;\n }\n}\n","import { Vault } from \"@padloc/core/src/vault\";\nimport { VaultItem } from \"@padloc/core/src/item\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport * as imp from \"../lib/import\";\nimport { prompt, alert } from \"../lib/dialog\";\nimport { app } from \"../globals\";\nimport { element, html, css, query, property } from \"./base\";\nimport { Select } from \"./select\";\nimport { Dialog } from \"./dialog\";\n\n@element(\"pl-import-dialog\")\nexport class ImportDialog extends Dialog<string, void> {\n @property()\n private _rawData: string = \"\";\n\n @property()\n private _items: VaultItem[] = [];\n\n @query(\"#formatSelect\")\n private _formatSelect: Select<imp.ImportFormat>;\n @query(\"#vaultSelect\")\n private _vaultSelect: Select<Vault>;\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n display: flex;\n flex-direction: column;\n }\n\n pl-input,\n pl-select,\n button {\n text-align: center;\n margin: 0 10px 10px 10px;\n background: var(--shade-2-color);\n border-radius: 8px;\n }\n\n h1 {\n display: block;\n text-align: center;\n }\n\n .csv-note {\n font-size: var(--font-size-micro);\n text-align: center;\n padding: 0px 20px 20px 20px;\n }\n `\n ];\n\n renderContent() {\n return html`\n <h1>${$l(\"Import Data\")}</h1>\n\n <pl-select\n id=\"formatSelect\"\n .options=${imp.supportedFormats}\n .label=${$l(\"Format\")}\n @change=${this._parseString}\n disabled\n ></pl-select>\n\n <div class=\"csv-note\" ?hidden=${this._formatSelect && this._formatSelect.selected !== imp.CSV}>\n ${$l(\n \"IMPORTANT: Before importing, please make sure that your CSV data \" +\n \"is structured according to Padlocks specific requirements!\"\n )}\n <a href=\"https://padlock.io/howto/import/#importing-from-csv\" target=\"_blank\">${$l(\"Learn More\")}</a>\n </div>\n\n <pl-select id=\"vaultSelect\" .options=${app.vaults} .label=${$l(\"Target Vault\")}></pl-select>\n\n <button @click=${() => this._import()} class=\"tap primary\" ?disabled=${!this._items.length}>\n ${$l(\"Import {0} Items\", this._items.length.toString())}\n </button>\n `;\n }\n\n async show(input: string) {\n await this.updateComplete;\n const result = super.show();\n this._rawData = input;\n this._formatSelect.selected = imp.guessFormat(input) || imp.CSV;\n this._parseString();\n this._vaultSelect.selected = app.mainVault!;\n return result;\n }\n\n private async _parseString(): Promise<void> {\n const rawStr = this._rawData;\n\n switch (this._formatSelect.selected!.format) {\n case imp.PADLOCK_LEGACY.format:\n this.open = false;\n const pwd = await prompt($l(\"This file is protected by a password.\"), {\n title: $l(\"Enter Password\"),\n placeholder: $l(\"Enter Password\"),\n type: \"password\",\n validate: async (pwd: string) => {\n try {\n this._items = await imp.asPadlockLegacy(rawStr, pwd);\n } catch (e) {\n throw $l(\"Wrong Password\");\n }\n return pwd;\n }\n });\n this.open = true;\n\n if (pwd === null) {\n this.done();\n }\n break;\n case imp.LASTPASS.format:\n this._items = await imp.asLastPass(rawStr);\n break;\n case imp.CSV.format:\n this._items = await imp.asCSV(rawStr);\n break;\n case imp.PBES2.format:\n this.open = false;\n const pwd2 = await prompt($l(\"This file is protected by a password.\"), {\n title: $l(\"Enter Password\"),\n placeholder: $l(\"Enter Password\"),\n type: \"password\",\n validate: async (pwd: string) => {\n try {\n this._items = await imp.asPBES2Container(rawStr, pwd);\n } catch (e) {\n throw $l(\"Wrong Password\");\n }\n return pwd;\n }\n });\n this.open = true;\n\n if (pwd2 === null) {\n this.done();\n }\n break;\n default:\n this._items = [];\n }\n }\n\n private async _import() {\n const vault = this._vaultSelect.selected!;\n const quota = app.getItemsQuota(vault);\n\n if (quota !== -1 && vault.items.size + this._items.length > quota) {\n this.done();\n if (app.billingEnabled) {\n this.dispatch(\"get-premium\", {\n message: $l(\n \"The number of imported items exceeds your remaining quota. \" +\n \"Upgrade to Premium to get unlimited items for your private vault!\"\n ),\n icon: \"list\"\n });\n } else {\n alert($l(\"The number of imported items exceeds your remaining quota.\"), { type: \"warning\" });\n }\n return;\n }\n\n app.addItems(this._items, vault);\n // this.dispatch(\"data-imported\", { items: items });\n this.done();\n alert($l(\"Successfully imported {0} items.\", this._items.length.toString()), { type: \"success\" });\n }\n}\n","import { element, html, listen, property } from \"./base\";\nimport { BaseInput } from \"./base-input\";\n\n@element(\"pl-input\")\nexport class Input extends BaseInput {\n @property()\n type: string = \"\";\n\n @property()\n pattern: string = \"\";\n\n get validationMessage() {\n return this._inputElement.validationMessage;\n }\n\n @listen(\"keydown\")\n _keydown(e: KeyboardEvent) {\n if (e.key === \"Enter\") {\n this.checkValidity();\n this.dispatch(\"enter\");\n e.preventDefault();\n e.stopPropagation();\n } else if (e.key === \"Escape\") {\n this.dispatch(\"escape\");\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n _renderInput() {\n const { placeholder, readonly, noTab, disabled, autocapitalize, required, type, pattern } = this;\n\n return html`\n <input\n class=\"input-element\"\n .placeholder=${placeholder}\n ?readonly=${readonly}\n .tabIndex=${noTab ? \"-1\" : \"\"}\n ?disabled=${disabled}\n autocapitalize=\"${autocapitalize ? \"\" : \"off\"}\"\n ?required=${required}\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n type=\"${type}\"\n pattern=\"${pattern || \".*\"}\"\n @focus=${this._focused}\n @blur=${this._blurred}\n @change=${this._changeHandler}\n @touchend=${this._touchend}\n />\n `;\n }\n\n checkValidity() {\n return this._inputElement && this._inputElement.checkValidity();\n }\n\n reportValidity() {\n return this._inputElement && this._inputElement.reportValidity();\n }\n}\n","import { until } from \"lit-html/directives/until\";\nimport { Invite } from \"@padloc/core/src/invite\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { formatDateFromNow } from \"../lib/util\";\nimport { app, router } from \"../globals\";\nimport { alert, dialog } from \"../lib/dialog\";\nimport { element, html, css, property, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Input } from \"./input\";\nimport { MemberDialog } from \"./member-dialog\";\n\n@element(\"pl-invite-dialog\")\nexport class InviteDialog extends Dialog<Invite, void> {\n @property()\n invite: Invite | null = null;\n\n @query(\"#acceptButton\")\n private _acceptButton: LoadingButton;\n @query(\"#resendButton\")\n private _resendButton: LoadingButton;\n @query(\"#deleteButton\")\n private _deleteButton: LoadingButton;\n @query(\"#confirmButton\")\n private _confirmButton: LoadingButton;\n @query(\"#codeInput\")\n private _codeInput: Input;\n\n @dialog(\"pl-member-dialog\")\n private _memberDialog: MemberDialog;\n\n @property()\n private _error: string = \"\";\n\n private _pollInterval = 5000;\n\n private get _enableActions(): boolean {\n return !!this.invite && !this.invite.expired && !this.invite.accepted;\n }\n\n async show(invite: Invite): Promise<void> {\n this._error = \"\";\n this.invite = invite;\n setTimeout(() => this._refresh(), this._pollInterval);\n return super.show();\n }\n\n dismiss() {\n super.dismiss();\n router.go(`orgs/${this.invite!.org!.id}`);\n }\n\n private async _refresh() {\n if (!this.invite || !this.open || this.invite.accepted) {\n return;\n }\n\n const invite = await app.getInvite(this.invite.org!.id, this.invite.id);\n if (invite) {\n invite.secret = this.invite.secret;\n invite.expires = this.invite.expires;\n this.invite = invite;\n }\n setTimeout(() => this._refresh(), this._pollInterval);\n }\n\n shouldUpdate() {\n return !!this.invite;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n :host {\n text-align: center;\n }\n\n .invite-text {\n font-size: var(--font-size-small);\n margin: 20px;\n }\n\n .invite-text.small {\n font-size: var(--font-size-tiny);\n }\n\n .invite-text.error {\n color: var(--color-error);\n text-shadow: none;\n font-weight: bold;\n }\n\n .invite-email {\n font-size: 120%;\n margin: 15px;\n font-weight: bold;\n }\n\n .invite-code {\n font-size: 200%;\n font-family: var(--font-family-mono);\n text-transform: uppercase;\n margin: 20px;\n letter-spacing: 5px;\n font-weight: bold;\n user-select: text;\n cursor: text;\n }\n\n .tags {\n justify-content: center;\n overflow: visible;\n margin: 20px 0;\n }\n\n .tag.org {\n font-size: var(--font-size-small);\n padding: 4px 16px;\n }\n\n .code-input {\n border-radius: 8px;\n margin: 15px;\n }\n `\n ];\n\n renderContent() {\n const { email, expires, expired, org, accepted, purpose } = this.invite!;\n const forMe = email === app.account!.email;\n\n const status = expired\n ? { icon: \"time\", class: \"warning\", text: $l(\"This invite has expired\") }\n : accepted\n ? { icon: \"check\", class: \"\", text: $l(\"Accepted\") }\n : {\n icon: \"time\",\n class: \"\",\n text: until(\n (async () => {\n return $l(\"expires {0}\", await formatDateFromNow(expires));\n })()\n )\n };\n\n return html`\n <header>\n <pl-icon></pl-icon>\n\n <div class=\"title flex\">\n ${purpose === \"confirm_membership\" ? $l(\"Confirm Membership\") : $l(\"Organization Invite\")}\n </div>\n\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${() => this.dismiss()}></pl-icon>\n </header>\n\n <div class=\"content\">\n <div class=\"tags\">\n <div class=\"tag org highlight\">\n <pl-icon icon=\"org\"></pl-icon>\n\n <div>${org!.name}</div>\n </div>\n </div>\n\n ${forMe ? this._inviteeBody() : this._adminBody()}\n\n <div class=\"tags\">\n <div class=\"tag ${status.class}\">\n <pl-icon icon=\"${status.icon}\"></pl-icon>\n\n <div>${status.text}</div>\n </div>\n </div>\n\n <div class=\"invite-text\" ?hidden=${!forMe || !accepted}>\n ${$l(\n \"Please wait for an admin to complete the process. \" +\n \"You will be notified as soon as you receive access.\"\n )}\n </div>\n\n <div class=\"item error\" ?hidden=${!this._error}>\n ${this._error}\n </div>\n\n <div class=\"actions\">\n ${forMe ? this._inviteeActions() : this._adminActions()}\n </div>\n </div>\n `;\n }\n\n private _inviteeBody() {\n const { org, purpose } = this.invite!;\n const { _enableActions } = this;\n return html`\n <div class=\"invite-text\">\n ${$l(\n purpose === \"confirm_membership\"\n ? \"Please confirm your membership for the {0} organization.\"\n : \"You've been invited to join the {0} organization.\",\n org!.name\n )}\n </div>\n\n <pl-input\n class=\"code-input tiles-2\"\n id=\"codeInput\"\n ?hidden=${!_enableActions}\n @enter=${() => this._accept()}\n label=\"${$l(\"Enter Confirmation Code\")}\"\n >\n </pl-input>\n\n <div class=\"invite-text small\" ?hidden=${!_enableActions}>\n ${$l(\n \"If you haven't received the confirmation code yet, please ask the organization owner \" +\n \"to provide it to you!\"\n )}\n </div>\n `;\n }\n\n _inviteeActions() {\n return html`\n <pl-loading-button\n id=\"acceptButton\"\n class=\"tap primary\"\n ?hidden=${!this._enableActions}\n @click=${() => this._accept()}\n >\n ${$l(this.invite!.purpose === \"confirm_membership\" ? \"Confirm\" : \"Accept\")}\n </pl-loading-button>\n `;\n }\n\n _adminBody() {\n const { _enableActions } = this;\n const { email, secret, purpose } = this.invite!;\n return html`\n <div class=\"invite-text\">\n ${$l(\n purpose === \"confirm_membership\"\n ? \"A membership confirmation request was sent to:\"\n : \"An invite was sent to:\"\n )}\n </div>\n\n <div class=\"invite-email\">${email}</div>\n\n <div class=\"invite-text\" ?hidden=${!_enableActions}>\n ${$l(\n \"They will also need the following confirmation code, which \" +\n \"you should communicate to them separately:\"\n )}\n </div>\n\n <div class=\"invite-code\" ?hidden=${!_enableActions}>${secret}</div>\n `;\n }\n\n _adminActions() {\n const { accepted, expired, purpose } = this.invite!;\n return html`\n <pl-loading-button\n ?hidden=${!accepted}\n ?disabled=${!accepted || expired}\n id=\"confirmButton\"\n class=\"tap primary\"\n @click=${() => this._confirm()}\n >\n <pl-icon icon=\"invite\"></pl-icon>\n\n <div>${$l(purpose === \"confirm_membership\" ? \"Confirm\" : \"Add Member\")}</div>\n </pl-loading-button>\n\n <pl-loading-button id=\"deleteButton\" class=\"tap negative\" @click=${() => this._delete()}>\n <pl-icon icon=\"delete\"></pl-icon>\n\n <div>${$l(\"Delete\")}</div>\n </pl-loading-button>\n\n <pl-loading-button ?hidden=${accepted} id=\"resendButton\" class=\"tap\" @click=${() => this._resend()}>\n <pl-icon icon=\"mail\"></pl-icon>\n\n <div>${$l(\"Resend\")}</div>\n </pl-loading-button>\n `;\n }\n\n private async _delete() {\n if (this._deleteButton.state === \"loading\") {\n return;\n }\n this._deleteButton.start();\n try {\n await app.deleteInvite(this.invite!);\n this._deleteButton.success();\n this.dismiss();\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._deleteButton.fail();\n throw e;\n }\n this.dismiss();\n }\n\n private async _resend() {\n if (this._resendButton.state === \"loading\") {\n return;\n }\n this._resendButton.start();\n let org = app.getOrg(this.invite!.org!.id)!;\n try {\n await app.deleteInvite(this.invite!);\n this.invite = (await app.createInvites(org!, [this.invite!.email], this.invite!.purpose))[0];\n router.go(`invite/${this.invite.org.id}/${this.invite.id}`, undefined, true);\n this._resendButton.success();\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._resendButton.fail();\n throw e;\n }\n }\n\n private async _accept() {\n if (this._acceptButton.state === \"loading\") {\n return;\n }\n\n if (!this._codeInput.value) {\n this._error = $l(\"Please enter a confirmation code!\");\n this.rumble();\n return;\n }\n\n this._acceptButton.start();\n try {\n const success = await app.acceptInvite(this.invite!, this._codeInput.value.toLowerCase());\n if (success) {\n this._acceptButton.success();\n this.dismiss();\n alert(\n $l(\n \"You have successfully accepted the invite. You'll be notified once you've been granted access.\"\n ),\n { type: \"success\" }\n );\n } else {\n this._acceptButton.fail();\n this._error = $l(\"Wrong confirmation code. Please try again!\");\n this.rumble();\n return;\n }\n } catch (e) {\n this._acceptButton.fail();\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this.rumble();\n }\n }\n\n private async _confirm() {\n if (this._confirmButton.state === \"loading\") {\n return;\n }\n this._confirmButton.start();\n try {\n const member = await app.confirmInvite(this.invite!);\n this._confirmButton.success();\n\n this.open = false;\n\n await this._memberDialog.show({ org: app.getOrg(this.invite!.org!.id)!, member });\n\n this.dismiss();\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._confirmButton.fail();\n throw e;\n }\n }\n}\n","import { until } from \"lit-html/directives/until\";\nimport { Invite } from \"@padloc/core/src/invite\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { formatDateFromNow } from \"../lib/util\";\nimport { shared } from \"../styles\";\nimport { app } from \"../globals\";\nimport { dialog, alert } from \"../lib/dialog\";\nimport { BaseElement, element, html, css, property, query } from \"./base\";\nimport { LoadingButton } from \"./loading-button\";\nimport { MemberDialog } from \"./member-dialog\";\nimport \"./icon\";\n\n@element(\"pl-invite-item\")\nexport class InviteItem extends BaseElement {\n @property()\n invite: Invite;\n\n @query(\".confirm-button\")\n private _confirmButton: LoadingButton;\n\n @dialog(\"pl-member-dialog\")\n private _memberDialog: MemberDialog;\n\n private async _confirm() {\n if (this._confirmButton.state === \"loading\") {\n return;\n }\n this._confirmButton.start();\n try {\n const member = await app.confirmInvite(this.invite!);\n this._confirmButton.success();\n await this._memberDialog.show({ org: app.getOrg(this.invite!.org!.id)!, member });\n } catch (e) {\n this._confirmButton.fail();\n alert(e.message || $l(\"Something went wrong. Please try again later!\"), { type: \"warning\" });\n }\n }\n\n shoudUpdate() {\n return !!this.invite;\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n align-items: center;\n padding: 4px 0;\n }\n\n .icon {\n font-size: 120%;\n margin: 10px;\n background: #eee;\n border: solid 1px #ddd;\n width: 45px;\n height: 45px;\n }\n\n .tags {\n margin: 4px 0;\n }\n\n .invite-info {\n flex: 1;\n width: 0;\n }\n\n .invite:hover {\n background: #fafafa;\n }\n\n .invite .tags {\n padding: 0;\n margin: 0;\n }\n\n .invite-email {\n font-weight: bold;\n margin-bottom: 4px;\n }\n\n .invite-code {\n text-align: center;\n margin: 12px;\n }\n\n .invite-code-label {\n font-weight: bold;\n font-size: var(--font-size-micro);\n }\n\n .invite-code-value {\n font-size: 140%;\n font-family: var(--font-family-mono);\n font-weight: bold;\n text-transform: uppercase;\n cursor: text;\n user-select: text;\n letter-spacing: 2px;\n }\n\n .confirm-button {\n padding: 6px 8px;\n margin: 12px;\n font-size: var(--font-size-small);\n align-self: center;\n }\n\n @media (max-width: 400px) {\n .invite-code {\n display: none;\n }\n }\n `\n ];\n\n render() {\n const inv = this.invite!;\n const account = app.account!;\n const org = app.getOrg(inv.org.id)!;\n\n const status = inv.expired\n ? { icon: \"time\", class: \"warning\", text: $l(\"expired\") }\n : inv.accepted\n ? { icon: \"check\", class: \"highlight\", text: $l(\"accepted\") }\n : {\n icon: \"time\",\n class: \"\",\n text: (async () => $l(\"{0}\", await formatDateFromNow(inv.expires, false)))()\n };\n\n let secret = Promise.resolve(\"\");\n\n if (org.isAdmin(account)) {\n const unlockOrg = org.unlock(account);\n secret = (async () => {\n await unlockOrg;\n await inv.unlock(org.invitesKey);\n return inv.secret;\n })();\n }\n\n return html`\n <pl-icon class=\"icon\" icon=\"mail\"></pl-icon>\n\n <div class=\"invite-info\">\n <div class=\"invite-email ellipsis\">${inv.email}</div>\n\n <div class=\"tags small\">\n <div class=\"tag ${status.class}\">\n <pl-icon icon=\"${status.icon}\"></pl-icon>\n\n <div>${until(status.text)}</div>\n </div>\n </div>\n </div>\n\n <pl-loading-button\n class=\"tap primary confirm-button\"\n ?hidden=${!inv.accepted || inv.expired}\n @click=${this._confirm}\n >\n ${$l(\"Confirm\")}\n </pl-loading-button>\n\n <div class=\"invite-code\" ?hidden=${inv.accepted || inv.expired}>\n <div class=\"invite-code-label\">${$l(\"Confirmation Code:\")}</div>\n\n <div class=\"invite-code-value\">${until(secret)}</div>\n </div>\n `;\n }\n}\n","import { until } from \"lit-html/directives/until\";\nimport { repeat } from \"lit-html/directives/repeat\";\nimport { VaultItemID, Field } from \"@padloc/core/src/item\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { AttachmentInfo } from \"@padloc/core/src/attachment\";\nimport { parseURL } from \"@padloc/core/src/otp\";\nimport { formatDateFromNow, fileIcon, fileSize } from \"../lib/util\";\nimport { alert, confirm, dialog } from \"../lib/dialog\";\nimport { app, router } from \"../globals\";\nimport { setClipboard } from \"../lib/clipboard\";\nimport { animateCascade } from \"../lib/animation\";\nimport { element, html, css, property, query, queryAll, observe } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport \"./icon\";\nimport { Input } from \"./input\";\nimport { TagsInput } from \"./tags-input\";\nimport { MoveItemsDialog } from \"./move-items-dialog\";\nimport { FieldElement } from \"./field\";\nimport \"./field\";\nimport { Generator } from \"./generator\";\nimport { AttachmentDialog } from \"./attachment-dialog\";\nimport { UploadDialog } from \"./upload-dialog\";\nimport { QRDialog } from \"./qr-dialog\";\nimport { FieldTypeDialog } from \"./field-type-dialog\";\nimport { View } from \"./view\";\n\n@element(\"pl-item-dialog\")\nexport class ItemDialog extends Dialog<string, void> {\n @property()\n itemId: VaultItemID = \"\";\n\n @property()\n isNew: boolean = false;\n\n get _item() {\n const found = (this.itemId && app.getItem(this.itemId)) || null;\n return found && found.item;\n }\n\n get _vault() {\n const found = (this.itemId && app.getItem(this.itemId)) || null;\n return found && found.vault;\n }\n\n @property({ reflect: true, attribute: \"editing\" })\n private _editing: boolean = false;\n\n @property()\n private _fields: Field[] = [];\n\n @query(\"#nameInput\")\n private _nameInput: Input;\n\n @query(\"pl-tags-input\")\n private _tagsInput: TagsInput;\n\n @queryAll(\"pl-field\")\n private _fieldInputs: FieldElement[];\n\n @query(\"input[type='file']\")\n private _fileInput: HTMLInputElement;\n\n @dialog(\"pl-move-items-dialog\")\n private _moveItemsDialog: MoveItemsDialog;\n\n @dialog(\"pl-generator\")\n private _generator: Generator;\n\n @dialog(\"pl-attachment-dialog\")\n private _attachmentDialog: AttachmentDialog;\n\n @dialog(\"pl-upload-dialog\")\n private _uploadDialog: UploadDialog;\n\n @dialog(\"pl-qr-dialog\")\n private _qrDialog: QRDialog;\n\n @dialog(\"pl-field-type-dialog\")\n private _fieldTypeDialog: FieldTypeDialog;\n\n private _draggingIndex = -1;\n\n private _dragOverIndex = -1;\n\n async show(itemId: string) {\n this._editing = false;\n this.itemId = itemId;\n await this.updateComplete;\n this._itemChanged();\n // Workaround for weird bug where name input is sometimes empty after opening dialog\n setTimeout(() => this._itemChanged(), 200);\n const promise = super.show();\n await this.updateComplete;\n animateCascade(this.$$(\".content > *\"));\n return promise;\n }\n\n async addAttachment() {\n await this.updateComplete;\n\n if (this._vault!.id === app.mainVault!.id && !app.account!.quota.storage && app.billingEnabled) {\n this.dispatch(\"get-premium\", {\n message: $l(\"Upgrade to Premium now and get 1GB of encrypted file storage!\"),\n icon: \"storage\"\n });\n this.done();\n return;\n }\n\n this._fileInput.click();\n }\n\n dismiss() {\n super.dismiss();\n router.go(\"items\");\n }\n\n done() {\n super.done();\n this.itemId = \"\";\n this._itemChanged();\n }\n\n static styles = [\n ...Dialog.styles,\n ...View.styles,\n css`\n .inner {\n max-width: 500px;\n background: var(--color-quaternary);\n display: flex;\n flex-direction: column;\n min-height: 500px;\n max-height: 100%;\n }\n\n .content {\n padding-bottom: 50px;\n }\n\n .content > * {\n margin: 12px;\n }\n\n .name {\n padding: 0 8px;\n margin: 0 8px;\n line-height: 40px;\n text-align: center;\n }\n\n :host([editing]) .name {\n border: dashed 1px var(--color-shade-3);\n text-align: left;\n }\n\n pl-field {\n position: relative;\n }\n\n .content > pl-tags-input {\n margin: 12px 16px;\n }\n\n :host(:not([editing])) pl-field:hover {\n background: #eee;\n }\n\n .updated {\n text-align: center;\n font-size: var(--font-size-tiny);\n color: var(--color-shade-4);\n font-weight: 600;\n margin: 30px;\n }\n\n .updated::before {\n font-family: FontAwesome;\n font-size: 80%;\n content: \"\\\\f303\";\n display: inline-block;\n margin-right: 4px;\n }\n\n .attachment {\n display: flex;\n align-items: center;\n padding: 12px;\n margin: 12px;\n }\n\n .attachment-body {\n flex: 1;\n width: 0;\n }\n\n .attachment .file-icon {\n font-size: 150%;\n margin: 0 4px 0 -4px;\n }\n\n .attachment-name {\n font-size: var(--font-size-small);\n font-weight: bold;\n line-height: 1.5em;\n }\n\n .attachment-size {\n font-size: var(--font-size-tiny);\n }\n\n .attachment-remove {\n margin: 0 8px 0 -8px;\n }\n\n .favorite {\n color: var(--color-secondary);\n opacity: 0.3;\n cursor: pointer;\n transition: transform 0.2s cubic-bezier(0.05, 0.7, 0.03, 3) 0s;\n transform: scale(0.9);\n }\n\n .favorite:hover {\n opacity: 0.6;\n }\n\n .favorite[active] {\n color: var(--color-negative);\n opacity: 1;\n transform: scale(1);\n }\n\n .editing {\n text-align: center;\n padding: 8px;\n margin: 0 0 0 12px;\n box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;\n border-radius: var(--border-radius);\n background: rgba(255, 255, 255, 0.9);\n }\n\n .actions {\n grid-template-columns: 1fr 1fr;\n }\n\n .actions > button {\n font-size: var(--font-size-small);\n background: none;\n padding: 10px 8px 10px 0;\n border: dashed 1px;\n font-weight: bold;\n }\n\n .actions > button.negative {\n color: var(--color-negative);\n border-color: var(--color-negative);\n }\n\n .save-button,\n .cancel-button {\n flex: 1;\n max-width: 200px;\n min-width: 120px;\n }\n\n :host(.dragging) .content > * {\n will-change: transform;\n transition: transform 0.2s;\n }\n\n pl-field.dragover::after {\n content: \"\";\n display: block;\n height: 30px;\n border: dashed 2px var(--color-primary);\n width: 100%;\n box-sizing: border-box;\n position: absolute;\n bottom: -45px;\n border-radius: var(--border-radius);\n }\n\n pl-field.dragover ~ * {\n transform: translate3d(0, 40px, 0);\n }\n\n @media (max-width: 700px) {\n .outer {\n padding: 0;\n }\n\n .inner {\n border-radius: 0;\n max-width: 100%;\n width: 100%;\n height: 100%;\n }\n\n .scrim {\n display: none;\n }\n }\n `\n ];\n\n renderContent() {\n if (app.state.locked || !this._item || !this._vault) {\n return html``;\n }\n\n const { updated, updatedBy } = this._item!;\n const vault = this._vault!;\n const org = vault.org && app.getOrg(vault.org.id);\n const readonly = !app.hasWritePermissions(vault);\n const updatedByMember = org && org.getMember({ id: updatedBy });\n const attachments = this._item!.attachments || [];\n const isFavorite = app.account!.favorites.has(this.itemId);\n\n return html`\n <header>\n <pl-icon icon=\"close\" class=\"tap close-icon\" @click=${this.dismiss} ?hidden=${this._editing}></pl-icon>\n <pl-input\n id=\"nameInput\"\n class=\"name flex\"\n .placeholder=${$l(\"Enter Item Name\")}\n ?readonly=${!this._editing}\n >\n </pl-input>\n <pl-icon\n icon=\"favorite\"\n class=\"favorite\"\n ?active=${isFavorite}\n @click=${() => this._setFavorite(!isFavorite)}\n ></pl-icon>\n </header>\n\n <div class=\"content\">\n <pl-tags-input .editing=${this._editing} .vault=${this._vault} @move=${this._move}></pl-tags-input>\n\n ${repeat(\n this._fields,\n field => `${this.itemId}_${field.name}_${field.type}`,\n (field: Field, index: number) => html`\n <pl-field\n class=\"item\"\n .name=${field.name}\n .value=${field.value}\n .type=${field.type}\n .editing=${this._editing}\n @edit=${() => this._editField(index)}\n @copy-clipboard=${() => setClipboard(this._item!, field)}\n @remove=${() => this._removeField(index)}\n @generate=${() => this._generateValue(index)}\n @get-totp-qr=${() => this._getTotpQR(index)}\n @dragstart=${(e: DragEvent) => this._dragstart(e, index)}\n @dragenter=${(e: DragEvent) => this._dragenter(e, index)}\n @dragover=${(e: DragEvent) => this._dragover(e)}\n @dragend=${(e: DragEvent) => this._dragend(e)}\n @drop=${(e: DragEvent) => this._drop(e)}\n >\n </pl-field>\n `\n )}\n ${attachments.map(\n a => html`\n <div\n class=\"attachment item ${this._editing ? \"\" : \"tap\"}\"\n @click=${() => this._openAttachment(a)}\n >\n <pl-icon icon=${fileIcon(a.type)} class=\"file-icon\" ?hidden=${this._editing}></pl-icon>\n <pl-icon\n icon=\"remove\"\n class=\"attachment-remove tap\"\n ?hidden=${!this._editing}\n @click=${() => this._deleteAttachment(a)}\n ></pl-icon>\n <div class=\"attachment-body\">\n <div class=\"attachment-name ellipsis\">${a.name}</div>\n <div class=\"attachment-size\">${fileSize(a.size)}</div>\n </div>\n </div>\n `\n )}\n\n <div class=\"actions\" ?hidden=${!this._editing}>\n <button class=\"icon tap\" @click=${() => this._addField()}>\n <pl-icon icon=\"add\"></pl-icon>\n <div>${$l(\"Field\")}</div>\n </button>\n\n <button class=\"icon tap\" @click=${this.addAttachment}>\n <pl-icon icon=\"attachment\"></pl-icon>\n <div>${$l(\"Attachment\")}</div>\n </button>\n\n <button class=\"icon tap\" @click=${this._move}>\n <pl-icon icon=\"share\"></pl-icon>\n <div>${$l(\"Move\")}</div>\n </button>\n\n <button class=\"icon tap negative\" @click=${this._deleteItem} ?hidden=${this.isNew}>\n <pl-icon icon=\"delete\"></pl-icon>\n <div>${$l(\"Delete\")}</div>\n </button>\n </div>\n\n <div class=\"updated\">\n ${until(formatDateFromNow(updated!))}\n ${updatedByMember && \" \" + $l(\"by {0}\", updatedByMember.email)}\n </div>\n </div>\n\n <div class=\"fabs\" ?hidden=${this._editing}>\n <div class=\"flex\"></div>\n\n <pl-icon icon=\"edit\" class=\"tap fab\" @click=${() => this.edit()} ?disabled=${readonly}> </pl-icon>\n </div>\n\n <div class=\"fabs\" ?hidden=${!this._editing}>\n <button class=\"primary icon fab tap save-button\" @click=${this.save}>\n <pl-icon icon=\"check\"></pl-icon>\n <div>${$l(\"Save\")}</div>\n </button>\n\n <div class=\"spacer\"></div>\n\n <button class=\"icon fab tap cancel-button\" @click=${this.cancelEdit}>\n <pl-icon icon=\"cancel\"></pl-icon>\n <div>${$l(\"Cancel\")}</div>\n </button>\n </div>\n\n <input type=\"file\" hidden @change=${this._attachFile} />\n `;\n }\n\n async edit() {\n if (!app.hasWritePermissions(this._vault!)) {\n return;\n }\n this._editing = true;\n await this.updateComplete;\n setTimeout(() => this._nameInput.focus(), 100);\n }\n\n async cancelEdit() {\n if (this.isNew) {\n app.deleteItems([this._item!]);\n this.dismiss();\n } else {\n this._fields = this._getFields();\n await this.updateComplete;\n this._editing = false;\n this._itemChanged();\n }\n this.isNew = false;\n }\n\n save() {\n app.updateItem(this._item!, {\n name: this._nameInput.value,\n fields: this._getFields(),\n tags: this._tagsInput.tags\n });\n this._editing = false;\n this._itemChanged();\n this.isNew = false;\n }\n\n @observe(\"_editing\")\n _editingChanged() {\n this.dismissOnTapOutside = !this._editing;\n }\n\n private _getFields() {\n return [...this._fieldInputs].map((fieldEl: FieldElement) => {\n return new Field({\n name: fieldEl.name,\n value: fieldEl.value,\n type: fieldEl.type\n });\n });\n }\n\n private _itemChanged() {\n if (this._item) {\n this._nameInput.value = this._item.name;\n this._fields = this._item.fields.map(f => new Field({ ...f }));\n this._tagsInput.tags = [...this._item.tags];\n } else {\n this._nameInput.value = \"\";\n this._fields = [];\n this._tagsInput.tags = [];\n }\n }\n\n private _removeField(index: number) {\n this._fields = this._fields.filter((_, i) => i !== index);\n }\n\n private async _deleteItem() {\n this.open = false;\n const confirmed = await confirm($l(\"Are you sure you want to delete this item?\"), $l(\"Delete\"), $l(\"Cancel\"), {\n type: \"destructive\"\n });\n if (confirmed) {\n app.deleteItems([this._item!]);\n router.go(\"items\");\n } else {\n this.open = true;\n }\n }\n\n private async _addField() {\n this.open = false;\n const fieldDef = await this._fieldTypeDialog.show();\n this.open = true;\n\n if (!fieldDef) {\n return;\n }\n\n this._fields.push(new Field({ name: fieldDef.name, value: \"\", type: fieldDef.type }));\n this.requestUpdate();\n await this.updateComplete;\n setTimeout(() => this._fieldInputs[this._fields.length - 1].focus(), 100);\n }\n\n private async _move() {\n if (!app.hasWritePermissions(this._vault!)) {\n return;\n }\n this.open = false;\n if (this._item!.attachments.length) {\n await alert($l(\"Items with attachments cannot be moved!\"), { type: \"warning\" });\n } else {\n const movedItems = await this._moveItemsDialog.show([{ item: this._item!, vault: this._vault! }]);\n if (movedItems && movedItems.length) {\n router.go(`items/${movedItems[0].id}`);\n }\n }\n this.open = true;\n }\n\n private async _editField(index: number) {\n if (!app.hasWritePermissions(this._vault!)) {\n return;\n }\n this._editing = true;\n await this.updateComplete;\n this._fieldInputs[index].focus();\n }\n\n private async _generateValue(index: number) {\n this.open = false;\n const value = await this._generator.show();\n this.open = true;\n if (value) {\n this._fields[index].value = value;\n }\n }\n\n private async _attachFile() {\n const file = this._fileInput.files![0];\n this._fileInput.value = \"\";\n if (!file) {\n return;\n }\n\n if (file.size > 5e6) {\n alert($l(\"The selected file is too large! Only files of up to 5 MB are supported.\"), {\n type: \"warning\"\n });\n return;\n }\n\n this.open = false;\n const att = await this._uploadDialog.show({ item: this.itemId, file });\n if (att) {\n await alert($l(\"File uploaded successfully!\"), { type: \"success\" });\n }\n this.open = true;\n }\n\n private async _openAttachment(info: AttachmentInfo) {\n if (this._editing) {\n return;\n }\n this.open = false;\n await this._attachmentDialog.show({ item: this.itemId, info });\n this.open = true;\n }\n\n private async _getTotpQR(index: number): Promise<void> {\n this.open = false;\n const data = await this._qrDialog.show();\n if (data) {\n try {\n const { secret } = parseURL(data);\n this._fields[index].value = secret;\n } catch (e) {\n await alert(\"Invalid Code! Please try again!\", { type: \"warning\" });\n return this._getTotpQR(index);\n }\n }\n this.open = true;\n }\n\n private _setFavorite(favorite: boolean) {\n app.toggleFavorite(this.itemId, favorite);\n this.requestUpdate();\n }\n\n private async _deleteAttachment(a: AttachmentInfo) {\n this.open = false;\n const confirmed = await confirm(\n $l(\"Are you sure you want to delete this attachment?\"),\n $l(\"Delete\"),\n $l(\"Cancel\"),\n {\n title: $l(\"Delete Attachment\"),\n type: \"destructive\"\n }\n );\n this.open = true;\n if (confirmed) {\n await app.deleteAttachment(this.itemId!, a);\n this.requestUpdate();\n }\n }\n\n private _drop(e: DragEvent) {\n // console.log(\"drop\", e, this._draggingIndex, this._dragOverIndex);\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n\n private async _dragstart(event: DragEvent, index: number) {\n // console.log(\"dragstart\", event);\n this._draggingIndex = index;\n this.dispatch(\"field-dragged\", { item: this._item, index, event });\n (event.target as HTMLElement).classList.add(\"dragging\");\n this.classList.add(\"dragging\");\n }\n\n private _dragenter(e: DragEvent, index: number) {\n // console.log(\"dragenter\", e);\n e.dataTransfer!.dropEffect = \"move\";\n\n this._dragOverIndex = index;\n\n for (const [i, field] of this._fieldInputs.entries()) {\n field.classList.toggle(\n \"dragover\",\n i === index && i !== this._draggingIndex && i !== this._draggingIndex - 1\n );\n }\n }\n\n private _dragover(e: DragEvent) {\n e.preventDefault();\n }\n\n private _dragend(_e: DragEvent) {\n // console.log(\"dragend\", e, this._draggingIndex, this._dragOverIndex);\n\n if (this._draggingIndex !== -1 || this._dragOverIndex !== -1) {\n const field = this._fields[this._draggingIndex];\n this._fields.splice(this._draggingIndex, 1);\n const targetIndex =\n this._dragOverIndex >= this._draggingIndex ? this._dragOverIndex : this._dragOverIndex + 1;\n this._fields.splice(targetIndex, 0, field);\n this.requestUpdate();\n }\n\n for (const field of this._fieldInputs) {\n field.classList.remove(\"dragging\");\n field.classList.remove(\"dragover\");\n }\n this.classList.remove(\"dragging\");\n this._dragOverIndex = -1;\n this._draggingIndex = -1;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { VaultID } from \"@padloc/core/src/vault\";\nimport { Tag } from \"@padloc/core/src/item\";\nimport { StateMixin } from \"../mixins/state\";\nimport { shared, mixins } from \"../styles\";\nimport { app, router } from \"../globals\";\nimport { BaseElement, element, css, property, html } from \"./base\";\n\n@element(\"pl-items-filter\")\nexport class ItemsFilter extends StateMixin(BaseElement) {\n @property()\n vault: VaultID = \"\";\n\n @property()\n tag: Tag = \"\";\n\n @property()\n favorites: boolean = false;\n\n @property()\n attachments: boolean = false;\n\n @property()\n recent: boolean = false;\n\n @property()\n host: string = \"\";\n\n @property()\n searching: boolean = false;\n\n @property({ reflect: true, attribute: \"selecting\" })\n private _selecting: Boolean = false;\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n text-align: center;\n overflow: visible;\n }\n\n button {\n display: flex;\n margin: 0 auto;\n align-items: center;\n font-weight: bold;\n padding: 6px 12px;\n border-radius: 20px;\n line-height: normal;\n box-sizing: border-box;\n overflow: hidden;\n max-width: 100%;\n background: var(--color-shade-1);\n border-bottom: solid 2px var(--color-shade-2);\n margin-bottom: -2px;\n font-size: var(--font-size-small);\n }\n\n button.vault {\n background: var(--color-primary);\n color: var(--color-tertiary);\n text-shadow: rgba(0, 0, 0, 0.2) 0 2px 0;\n border-bottom: solid 2px var(--color-shade-4);\n }\n\n button.filter-tag {\n background: var(--color-secondary);\n color: var(--color-tertiary);\n text-shadow: rgba(0, 0, 0, 0.2) 0 2px 0;\n border-bottom: solid 2px #222;\n }\n\n button.favorites,\n button.host {\n background: var(--color-negative);\n color: var(--color-tertiary);\n text-shadow: rgba(0, 0, 0, 0.2) 0 2px 0;\n border-bottom: solid 2px var(--color-shade-4);\n }\n\n button pl-icon {\n font-size: 85%;\n width: 20px;\n height: 20px;\n margin-right: -6px;\n }\n\n button pl-icon.search-icon {\n margin-right: 3px;\n margin-left: -4px;\n }\n\n .list pl-icon {\n margin-left: -4px;\n margin-right: 2px;\n margin-top: 1px;\n font-size: 80%;\n width: 25px;\n }\n\n button > div,\n .option > div {\n ${mixins.ellipsis()}\n }\n\n .scrim {\n z-index: 10;\n border-top: solid 3px #f2f2f2;\n background: rgba(255, 255, 255, 0.5);\n ${mixins.fullbleed()}\n top: 60px;\n will-change: opacity;\n transition: opacity 200ms cubic-bezier(0.6, 0, 0.2, 1);\n }\n\n :host(:not([selecting])) .scrim {\n opacity: 0;\n pointer-events: none;\n }\n\n :host(:not([selecting])) .list {\n transform: translate3d(0, -100%, 0);\n }\n\n .list {\n padding: 12px 6px 6px 6px;\n background: var(--color-tertiary);\n box-sizing: border-box;\n max-height: 100%;\n width: 100%;\n font-size: var(--font-size-tiny);\n border-bottom: solid 3px var(--color-shade-1);\n will-change: transform;\n transition: transform 200ms cubic-bezier(0.6, 0, 0.2, 1);\n ${mixins.scroll()}\n }\n\n .list button {\n margin-bottom: 6px;\n border-bottom: none;\n padding: 5px 10px;\n text-shadow: none;\n }\n\n h4 {\n margin: 16px 10px 10px 10px;\n text-align: center;\n opacity: 0.8;\n }\n\n .no-tags {\n font-size: var(--font-size-micro);\n padding: 5px 10px 15px 10px;\n opacity: 0.5;\n }\n\n .count {\n opacity: 0.7;\n margin-left: 6px;\n margin-right: 2px;\n font-size: var(--font-size-tiny);\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n .scrim {\n top: calc(50px + max(env(safe-area-inset-top), 8px));\n }\n }\n `\n ];\n\n render() {\n if (!app.mainVault || !app.account) {\n return html``;\n }\n const { vault: vaultId, tag, favorites, attachments, recent, host } = this;\n const vault = app.getVault(vaultId);\n const cl = favorites\n ? \"favorites\"\n : recent\n ? \"recent\"\n : vault\n ? \"vault\"\n : attachments\n ? \"attachments\"\n : tag\n ? \"filter-tag\"\n : host\n ? \"host\"\n : \"all\";\n const label = favorites\n ? $l(\"Favorites\")\n : recent\n ? $l(\"Recently Used\")\n : attachments\n ? $l(\"Attachments\")\n : host\n ? this.state.currentHost\n : vault\n ? vault.name\n : tag || $l(\"All Items\");\n\n const count = app.count;\n\n return html`\n <button class=\"tap ${cl}\" @click=${() => (this._selecting = !this._selecting)}>\n <pl-icon icon=\"search\" class=\"search-icon\" ?hidden=${!this.searching}></pl-icon>\n\n <div>${label}</div>\n\n <pl-icon icon=\"dropdown\"></pl-icon>\n </button>\n\n <div class=\"scrim\" @click=${() => this._dismiss()}>\n <div class=\"list ${cl}\">\n <button class=\"host tap\" @click=${() => this._select({ host: true })} ?hidden=${!count.currentHost}>\n <pl-icon icon=\"web\"></pl-icon>\n <div>\n ${this.state.currentHost}\n </div>\n <div class=\"count\">${count.currentHost}</div>\n </button>\n\n <button class=\"all tap\" @click=${() => this._select({})}>\n <pl-icon icon=\"list\"></pl-icon>\n <div>\n ${$l(\"All Items\")}\n </div>\n <div class=\"count\">${count.total}</div>\n </button>\n\n <button class=\"recent tap\" @click=${() => this._select({ recent: true })}>\n <pl-icon icon=\"time\"></pl-icon>\n <div>\n ${$l(\"Recently Used\")}\n </div>\n <div class=\"count\">${count.recent}</div>\n </button>\n\n <button class=\"attachments tap\" @click=${() => this._select({ attachments: true })}>\n <pl-icon icon=\"attachment\"></pl-icon>\n <div>\n ${$l(\"Attachments\")}\n </div>\n <div class=\"count\">${count.attachments}</div>\n </button>\n\n <button class=\"favorites tap\" @click=${() => this._select({ favorites: true })}>\n <pl-icon icon=\"favorite\"></pl-icon>\n <div>\n ${$l(\"Favorites\")}\n </div>\n <div class=\"count\">${count.favorites}</div>\n </button>\n\n <button class=\"vault tap\" @click=${() => this._select({ vault: app.mainVault!.id })}>\n <pl-icon icon=\"vault\"></pl-icon>\n <div>\n ${$l(\"My Vault\")}\n </div>\n <div class=\"count\">${app.mainVault!.items.size}</div>\n </button>\n\n ${app.orgs.map(org => {\n const vaults = app.vaults.filter(v => v.org && v.org.id === org.id);\n\n return html`\n <h4>${org.name}</h4>\n\n ${vaults.map(\n vault => html`\n <button class=\"vault tap\" @click=${() => this._select({ vault: vault.id })}>\n <pl-icon icon=\"vault\"></pl-icon>\n <div>\n ${vault.name}\n </div>\n <div class=\"count\">${vault.items.size}</div>\n </button>\n `\n )}\n `;\n })}\n\n <h4>${$l(\"Tags\")}</h4>\n\n <div class=\"no-tags\" ?hidden=${!!this.state.tags.length}>\n ${$l(\"You don't have any tags yet.\")}\n </div>\n\n ${app.state.tags.map(\n ([tag, count]) => html`\n <button class=\"filter-tag tap\" @click=${() => this._select({ tag })}>\n <pl-icon icon=\"tag\"></pl-icon>\n <div>\n ${tag}\n </div>\n <div class=\"count\">${count}</div>\n </button>\n `\n )}\n </div>\n </div>\n `;\n }\n\n _select({\n tag,\n vault,\n favorites,\n recent,\n attachments,\n host\n }: {\n tag?: Tag;\n vault?: VaultID;\n favorites?: boolean;\n recent?: boolean;\n attachments?: boolean;\n host?: boolean;\n }) {\n const params: any = {};\n if (tag) {\n params.tag = tag;\n }\n if (vault) {\n params.vault = vault;\n }\n if (favorites) {\n params.favorites = favorites;\n }\n if (attachments) {\n params.attachments = attachments;\n }\n if (recent) {\n params.recent = recent;\n }\n if (host) {\n params.host = host;\n }\n router.go(\"items\", params);\n }\n\n _dismiss() {\n this._selecting = false;\n }\n}\n","import { VaultItem, Field, Tag } from \"@padloc/core/src/item\";\nimport { Vault, VaultID } from \"@padloc/core/src/vault\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { debounce, wait, escapeRegex } from \"@padloc/core/src/util\";\nimport { AttachmentInfo } from \"@padloc/core/src/attachment\";\nimport { cache } from \"lit-html/directives/cache\";\nimport { StateMixin } from \"../mixins/state\";\nimport { setClipboard } from \"../lib/clipboard\";\nimport { app, router } from \"../globals\";\nimport { dialog, confirm } from \"../lib/dialog\";\nimport { mixins } from \"../styles\";\nimport { fileIcon, fileSize } from \"../lib/util\";\nimport { element, html, css, property, query, listen, observe } from \"./base\";\nimport { View } from \"./view\";\nimport { Input } from \"./input\";\nimport { MoveItemsDialog } from \"./move-items-dialog\";\nimport { AttachmentDialog } from \"./attachment-dialog\";\nimport \"./icon\";\nimport \"./items-filter\";\nimport \"./virtual-list\";\nimport \"./totp\";\n\ninterface ListItem {\n item: VaultItem;\n vault: Vault;\n section?: string;\n firstInSection?: boolean;\n lastInSection?: boolean;\n warning?: boolean;\n}\n\nfunction filterByString(fs: string, rec: VaultItem) {\n if (!fs) {\n return true;\n }\n const content = [rec.name, ...rec.tags, ...rec.fields.map(f => f.name), ...rec.fields.map(f => f.value)]\n .join(\" \")\n .toLowerCase();\n return content.search(escapeRegex(fs.toLowerCase())) !== -1;\n}\n\n@element(\"pl-items-list\")\nexport class ItemsList extends StateMixin(View) {\n @property()\n selected: string = \"\";\n\n @property()\n multiSelect: boolean = false;\n\n @property()\n vault: VaultID = \"\";\n\n @property()\n tag: Tag = \"\";\n\n @property()\n favorites: boolean = false;\n\n @property()\n attachments: boolean = false;\n\n @property()\n recent: boolean = false;\n\n @property()\n host: boolean = false;\n\n @property()\n private _listItems: ListItem[] = [];\n // @property()\n // private _firstVisibleIndex: number = 0;\n // @property()\n // private _lastVisibleIndex: number = 0;\n\n // @query(\"#main\")\n // private _main: HTMLElement;\n @query(\"#filterInput\")\n private _filterInput: Input;\n\n @property()\n private _filterShowing: boolean = false;\n\n private _cachedBounds: DOMRect | ClientRect | null = null;\n // private _selected = new Map<string, ListItem>();\n\n @dialog(\"pl-move-items-dialog\")\n private _moveItemsDialog: MoveItemsDialog;\n\n @dialog(\"pl-attachment-dialog\")\n private _attachmentDialog: AttachmentDialog;\n\n private _multiSelect = new Map<string, ListItem>();\n\n private _updateItems = debounce(() => {\n this._listItems = this._getItems();\n }, 50);\n\n @observe(\"vault\")\n @observe(\"tag\")\n @observe(\"favorites\")\n @observe(\"attachments\")\n @observe(\"recent\")\n @observe(\"host\")\n async stateChanged() {\n // Clear items from selection that are no longer in list (due to filtering)\n for (const id of this._multiSelect.keys()) {\n if (!this._listItems.some(i => i.item.id === id)) {\n this._multiSelect.delete(id);\n }\n }\n\n // When the app is getting locked, give the lock animation some time to finish\n if (this._listItems.length && this.state.locked) {\n await wait(500);\n }\n\n this._updateItems();\n }\n\n async search() {\n this._filterShowing = true;\n await this.updateComplete;\n this._filterInput.focus();\n }\n\n cancelFilter() {\n this._filterInput.value = \"\";\n this._filterInput.blur();\n this._filterShowing = false;\n this._updateItems();\n }\n\n selectItem(item: ListItem) {\n if (this.multiSelect) {\n if (this._multiSelect.has(item.item.id)) {\n this._multiSelect.delete(item.item.id);\n } else {\n this._multiSelect.set(item.item.id, item);\n }\n this.requestUpdate();\n } else {\n router.go(`items/${item.item.id}`);\n }\n }\n\n selectAll() {\n this.multiSelect = true;\n for (const item of this._listItems) {\n this._multiSelect.set(item.item.id, item);\n }\n this.requestUpdate();\n }\n\n clearSelection() {\n this._multiSelect.clear();\n this.requestUpdate();\n }\n\n cancelMultiSelect() {\n this._multiSelect.clear();\n this.multiSelect = false;\n this.requestUpdate();\n }\n\n firstUpdated() {\n this._resizeHandler();\n }\n\n static styles = [\n ...View.styles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n position: relative;\n background: var(--color-quaternary);\n border-radius: var(--border-radius);\n }\n\n header {\n overflow: visible;\n z-index: 10;\n }\n\n header pl-input {\n font-size: var(--font-size-default);\n padding: 0 0 0 10px;\n }\n\n pl-items-filter {\n min-width: 0;\n }\n\n main {\n padding-bottom: 70px;\n position: relative;\n }\n\n .section-header {\n grid-column: 1/-1;\n font-weight: bold;\n display: flex;\n align-items: flex-end;\n height: 35px;\n box-sizing: border-box;\n padding: 0 10px 5px 10px;\n background: var(--color-quaternary);\n display: flex;\n z-index: 1;\n position: -webkit-sticky;\n position: sticky;\n top: -3px;\n margin-bottom: -8px;\n font-size: var(--font-size-small);\n }\n\n .item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n margin: 6px;\n cursor: pointer;\n /*\n box-shadow: rgba(0, 0, 0, 0.1) 0 1px 8px;\n border: none;\n */\n }\n\n .item-body {\n flex: 1;\n min-width: 0;\n }\n\n .item .tags {\n padding: 0;\n }\n\n .item .tags .tag-name {\n max-width: 60px;\n }\n\n .item-header {\n height: 24px;\n margin: 12px 12px 8px 12px;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .item-name {\n ${mixins.ellipsis()}\n font-weight: 600;\n flex: 1;\n min-width: 0;\n line-height: 24px;\n }\n\n .item-fields {\n position: relative;\n display: flex;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0 0 6px 6px;\n }\n\n .item-fields::after {\n content: \"\";\n display: block;\n width: 6px;\n flex: none;\n /*\n position: absolute;\n z-index: 1;\n right: 0;\n top: 0;\n bottom: 0;\n background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n */\n }\n\n .item-field {\n cursor: pointer;\n font-size: var(--font-size-tiny);\n position: relative;\n flex: 1;\n border-radius: 8px;\n max-width: calc(60%);\n opacity: 0.999;\n }\n\n .item-field.dragging {\n background: var(--color-tertiary);\n }\n\n .item-field.dragging::after {\n background: none;\n }\n\n .item-field > * {\n transition: transform 0.2s cubic-bezier(1, -0.3, 0, 1.3), opacity 0.2s;\n }\n\n .item-field:not(.copied) .copied-message,\n .item-field.copied .item-field-label {\n opacity: 0;\n transform: scale(0);\n }\n\n .copied-message {\n ${mixins.fullbleed()}\n border-radius: inherit;\n font-weight: bold;\n color: var(--color-primary);\n text-align: center;\n line-height: 45px;\n }\n\n .copied-message::before {\n font-family: \"FontAwesome\";\n content: \"\\\\f00c\\\\ \";\n }\n\n .item-field-label {\n padding: 4px 6px;\n pointer-events: none;\n min-width: 0;\n }\n\n .item-field-name {\n font-size: var(--font-size-micro);\n color: var(--color-primary);\n margin-bottom: 2px;\n font-weight: 600;\n ${mixins.ellipsis()}\n line-height: 16px;\n height: 16px;\n }\n\n .item-field-name pl-icon {\n font-size: 9px;\n color: var(--color-primary);\n display: inline-block;\n height: 10px;\n width: 10px;\n border-radius: 0;\n position: relative;\n top: 1px;\n }\n\n .item-field-value {\n font-weight: 600;\n line-height: 19px;\n height: 19px;\n ${mixins.ellipsis()}\n }\n\n .item-field-value > * {\n vertical-align: middle;\n }\n\n .item-field.attachment {\n display: flex;\n align-items: center;\n }\n\n .attachment .file-icon {\n display: inline-block;\n height: 1em;\n width: 1em;\n font-size: 90%;\n border-radius: 0;\n vertical-align: middle;\n }\n\n .item:focus:not([selected]) {\n border-color: var(--color-highlight);\n color: #4ca8d9;\n }\n\n .item[selected] {\n background: #e6e6e6;\n border-color: #ddd;\n }\n\n .item-check {\n position: relative;\n width: 30px;\n height: 30px;\n box-sizing: border-box;\n border: solid 3px transparent;\n background: var(--color-shade-1);\n border-radius: 30px;\n margin: 12px;\n margin-right: 0;\n }\n\n .item-check::after {\n content: \"\";\n display: block;\n ${mixins.fullbleed()}\n background: var(--color-negative);\n border-radius: inherit;\n transition: transform 0.2s, opacity 0.2s;\n transition-timing-function: cubic-bezier(1, -0.3, 0, 1.3);\n }\n\n .item-check:not([checked])::after {\n opacity: 0;\n transform: scale(0);\n }\n\n .selected-count {\n text-align: center;\n display: block;\n margin-left: 12px;\n background: rgba(255, 255, 255, 0.9);\n border-radius: var(--border-radius);\n padding: 12px 4px;\n line-height: 1.2em;\n font-size: var(--font-size-tiny);\n font-weight: bold;\n box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;\n }\n\n pl-virtual-list {\n padding: 6px;\n padding-bottom: 65px;\n ${mixins.fullbleed()}\n ${mixins.scroll()}\n }\n `\n ];\n\n render() {\n const placeholder = this._listItems.length\n ? {}\n : this._filterShowing\n ? {\n icon: \"search\",\n text: $l(\"Your search did not match any items.\")\n }\n : this.vault\n ? {\n icon: \"vault\",\n text: $l(\"This vault does not have any items yet.\")\n }\n : this.attachments\n ? {\n icon: \"attachment\",\n text: $l(\"You don't have any attachments yet.\")\n }\n : this.favorites\n ? {\n icon: \"favorite\",\n text: $l(\"You don't have any favorites yet.\")\n }\n : this.recent\n ? {\n icon: \"time\",\n text: $l(\"You don't have any recently used items!\")\n }\n : {\n icon: \"list\",\n text: $l(\"You don't have any items yet.\")\n };\n return html`\n <header>\n <pl-icon\n icon=\"menu\"\n class=\"tap menu-button\"\n @click=${() => this.dispatch(\"toggle-menu\")}\n ?hidden=${this._filterShowing}\n ></pl-icon>\n\n <div class=\"spacer\" ?hidden=${this._filterShowing}></div>\n\n <pl-items-filter\n .vault=${this.vault}\n .tag=${this.tag}\n .favorites=${this.favorites}\n .recent=${this.recent}\n .host=${this.host}\n .attachments=${this.attachments}\n .searching=${this._filterShowing}\n ></pl-items-filter>\n\n <div class=\"spacer\" ?hidden=${this._filterShowing}></div>\n\n <pl-input\n class=\"flex\"\n .placeholder=${$l(\"Type To Search\")}\n id=\"filterInput\"\n select-on-focus\n @input=${this._updateItems}\n @escape=${this.cancelFilter}\n ?hidden=${!this._filterShowing}\n >\n </pl-input>\n\n <pl-icon\n icon=\"search\"\n class=\"tap\"\n @click=${() => this.search()}\n ?hidden=${this._filterShowing}\n ></pl-icon>\n\n <pl-icon\n class=\"tap\"\n icon=\"cancel\"\n @click=${() => this.cancelFilter()}\n ?hidden=${!this._filterShowing}\n ></pl-icon>\n </header>\n\n <main id=\"main\">\n <pl-virtual-list\n .data=${this._listItems}\n .minItemWidth=${300}\n .itemHeight=${111}\n .renderItem=${(item: ListItem) => this._renderItem(item)}\n .guard=${({ item, vault }: ListItem) => [\n item.name,\n item.tags,\n item.fields,\n vault,\n item.id === this.selected,\n this.multiSelect,\n this._multiSelect.has(item.id)\n ]}\n ></pl-virtual-list>\n </main>\n\n <div class=\"empty-placeholder\" ?hidden=${!placeholder.text}>\n <pl-icon icon=\"${placeholder.icon}\"></pl-icon>\n\n <div>${placeholder.text}</div>\n </div>\n\n <div class=\"fabs\" ?hidden=${this.multiSelect}>\n <pl-icon icon=\"checked\" class=\"tap fab\" @click=${() => (this.multiSelect = true)}></pl-icon>\n\n <div class=\"flex\"></div>\n\n <pl-icon icon=\"add\" class=\"tap fab primary\" @click=${() => this.dispatch(\"create-item\")}></pl-icon>\n </div>\n\n <div class=\"fabs\" ?hidden=${!this.multiSelect}>\n <pl-icon\n icon=\"checkall\"\n class=\"tap fab\"\n @click=${() => (this._multiSelect.size ? this.clearSelection() : this.selectAll())}\n >\n </pl-icon>\n\n <pl-icon icon=\"cancel\" class=\"tap fab\" @click=${() => this.cancelMultiSelect()}></pl-icon>\n\n <div class=\"flex selected-count\">${$l(\"{0} items selected\", this._multiSelect.size.toString())}</div>\n\n <pl-icon icon=\"share\" class=\"tap fab\" @click=${() => this._moveItems()}></pl-icon>\n\n <pl-icon icon=\"delete\" class=\"tap fab destructive\" @click=${() => this._deleteItems()}></pl-icon>\n </div>\n `;\n }\n\n @listen(\"resize\", window)\n _resizeHandler() {\n delete this._cachedBounds;\n }\n //\n // private _scrollToIndex(i: number) {\n // const el = this.$(`pl-item-item[index=\"${i}\"]`);\n // if (el) {\n // this._main.scrollTop = el.offsetTop - 6;\n // }\n // }\n //\n // private _scrollToSelected() {\n // const selected = this._selected.values()[0];\n // const i = this._listItems.indexOf(selected);\n // if (i !== -1 && (i < this._firstVisibleIndex || i > this._lastVisibleIndex)) {\n // this._scrollToIndex(i);\n // }\n // }\n\n // private async _animateItems(delay = 100) {\n // await this.updateComplete;\n // this._main.style.opacity = \"0\";\n // setTimeout(() => {\n // this._scrollHandler();\n // const elements = Array.from(this.$$(\".list-item\"));\n // const animated = elements.slice(this._firstVisibleIndex, this._lastVisibleIndex + 1);\n //\n // animateCascade(animated, { clear: true });\n // this._main.style.opacity = \"1\";\n // }, delay);\n // }\n\n private async _deleteItems() {\n let selected = [...this._multiSelect.values()];\n\n if (selected.some(({ vault }) => !app.hasWritePermissions(vault))) {\n const proceed = await confirm(\n $l(\n \"Some items in your selection are from Vaults you don't have write access \" +\n \"to and cannot be deleted. Do you want to proceed deleting the other items?\"\n ),\n $l(\"Yes\"),\n $l(\"No\")\n );\n if (!proceed) {\n return;\n }\n selected = selected.filter(({ vault }) => app.hasWritePermissions(vault));\n }\n\n const confirmed = await confirm(\n $l(\"Are you sure you want to delete these items? This action can not be undone!\"),\n $l(\"Delete {0} Items\", selected.length.toString()),\n $l(\"Cancel\"),\n { type: \"destructive\" }\n );\n if (confirmed) {\n await app.deleteItems(selected.map(i => i.item));\n this.cancelMultiSelect();\n }\n }\n\n private async _moveItems() {\n let selected = [...this._multiSelect.values()];\n if (selected.some(({ item }) => !!item.attachments.length)) {\n const proceed = await confirm(\n $l(\n \"Some items in your selection have attachments and cannot be moved. \" +\n \"Do you want to proceed moving the other items?\"\n ),\n $l(\"Yes\"),\n $l(\"No\")\n );\n if (!proceed) {\n return;\n }\n selected = selected.filter(({ item }) => !item.attachments.length);\n }\n\n if (selected.some(({ vault }) => !app.hasWritePermissions(vault))) {\n const proceed = await confirm(\n $l(\n \"Some items in your selection are from Vaults you don't have write \" +\n \"access to and cannot be moved. Do you want to proceed moving the other items?\"\n ),\n $l(\"Yes\"),\n $l(\"No\")\n );\n if (!proceed) {\n return;\n }\n selected = selected.filter(({ vault }) => app.hasWritePermissions(vault));\n }\n\n const movedItems = await this._moveItemsDialog.show(selected);\n if (movedItems) {\n this.cancelMultiSelect();\n }\n }\n\n private _copyField({ item }: ListItem, index: number, e: Event) {\n e.stopPropagation();\n setClipboard(item, item.fields[index]);\n const fieldEl = e.target as HTMLElement;\n fieldEl.classList.add(\"copied\");\n setTimeout(() => fieldEl.classList.remove(\"copied\"), 1000);\n app.updateLastUsed(item);\n this.dispatch(\"field-clicked\", { item, index });\n }\n\n private async _dragFieldStart({ item }: ListItem, index: number, event: DragEvent) {\n this.dispatch(\"field-dragged\", { item, index, event });\n return true;\n }\n\n private _openAttachment(a: AttachmentInfo, item: VaultItem, e: MouseEvent) {\n e.stopPropagation();\n this._attachmentDialog.show({ info: a, item: item.id });\n }\n\n private _getItems(): ListItem[] {\n const { vault: vaultId, tag, favorites, attachments, recent, host } = this;\n const filter = (this._filterInput && this._filterInput.value) || \"\";\n const recentThreshold = new Date(Date.now() - app.settings.recentLimit * 24 * 60 * 60 * 1000);\n\n let items: ListItem[] = [];\n\n if (host) {\n items = this.app.getItemsForHost(this.app.state.currentHost);\n } else {\n for (const vault of this.state.vaults) {\n // Filter by vault\n if (vaultId && vault.id !== vaultId) {\n continue;\n }\n\n for (const item of vault.items) {\n if (\n // filter by tag\n (!tag || item.tags.includes(tag)) &&\n (!favorites || app.account!.favorites.has(item.id)) &&\n (!attachments || !!item.attachments.length) &&\n (!recent ||\n (app.state.lastUsed.has(item.id) && app.state.lastUsed.get(item.id)! > recentThreshold)) &&\n filterByString(filter || \"\", item)\n ) {\n items.push({\n vault,\n item,\n section: \"\",\n firstInSection: false,\n lastInSection: false\n });\n }\n }\n }\n }\n\n items.sort((a, b) => {\n const x = a.item.name.toLowerCase();\n const y = b.item.name.toLowerCase();\n return x > y ? 1 : x < y ? -1 : 0;\n });\n\n return items;\n }\n\n private _renderItem(li: ListItem) {\n const { item, vault, warning } = li;\n const tags = [];\n\n if (!this.vault && app.mainVault && vault.id !== app.mainVault.id) {\n tags.push({ name: vault.name, icon: \"\", class: \"highlight\" });\n }\n\n if (warning) {\n tags.push({ icon: \"error\", class: \"warning\", name: \"\" });\n }\n\n if (item.tags.length === 1) {\n const t = item.tags.find(t => t === router.params.tag) || item.tags[0];\n tags.push({\n name: t,\n class: \"\"\n });\n } else if (item.tags.length) {\n tags.push({\n icon: \"tag\",\n name: item.tags.length.toString(),\n class: \"\"\n });\n }\n\n const attCount = (item.attachments && item.attachments.length) || 0;\n if (attCount) {\n tags.push({\n name: attCount.toString(),\n icon: \"attachment\",\n class: \"\"\n });\n }\n\n if (app.account!.favorites.has(item.id)) {\n tags.push({\n name: \"\",\n icon: \"favorite\",\n class: \"warning\"\n });\n }\n\n return html`\n <div class=\"item\" ?selected=${item.id === this.selected} @click=\"${() => this.selectItem(li)}}\">\n ${cache(\n this.multiSelect\n ? html`\n <div\n class=\"item-check\"\n ?hidden=${!this.multiSelect}\n ?checked=${this._multiSelect.has(item.id)}\n ></div>\n `\n : \"\"\n )}\n\n <div class=\"item-body\">\n <div class=\"item-header\">\n <div class=\"item-name\" ?disabled=${!item.name}>\n ${item.name || $l(\"No Name\")}\n </div>\n\n <div class=\"tags small\">\n ${tags.map(\n tag => html`\n <div class=\"tag ${tag.class}\">\n ${tag.icon\n ? html`\n <pl-icon icon=\"${tag.icon}\"></pl-icon>\n `\n : \"\"}\n ${tag.name\n ? html`\n <div class=\"tag-name ellipsis\">\n ${tag.name}\n </div>\n `\n : \"\"}\n </div>\n `\n )}\n </div>\n </div>\n\n <div class=\"item-fields\">\n ${item.fields.map((f: Field, i: number) => {\n return html`\n <div\n class=\"item-field tap\"\n @click=${(e: MouseEvent) => this._copyField(li, i, e)}\n draggable=\"true\"\n @dragstart=${(e: DragEvent) => this._dragFieldStart(li, i, e)}\n >\n <div class=\"item-field-label\">\n <div class=\"item-field-name\">\n <pl-icon icon=\"${f.icon}\"></pl-icon>\n ${f.name || $l(\"Unnamed\")}\n </div>\n ${f.type === \"totp\"\n ? html`\n <pl-totp class=\"item-field-value\" .secret=${f.value}></pl-totp>\n `\n : html`\n <div class=\"item-field-value\">\n ${f.format(true)}\n </div>\n `}\n </div>\n\n <div class=\"copied-message\">${$l(\"copied\")}</div>\n </div>\n `;\n })}\n ${item.attachments.map(\n a => html`\n <div\n class=\"item-field attachment tap\"\n @click=${(e: MouseEvent) => this._openAttachment(a, item, e)}\n >\n <div class=\"item-field-label\">\n <div class=\"item-field-name ellipsis\">\n <pl-icon icon=\"attachment\"></pl-icon>\n ${a.name}\n </div>\n <div class=\"item-field-value\">\n <pl-icon icon=${fileIcon(a.type)} class=\"file-icon\"></pl-icon>\n <span>${fileSize(a.size)}</span>\n </div>\n </div>\n </div>\n `\n )}\n ${cache(\n !item.fields.length && !item.attachments.length\n ? html`\n <div class=\"item-field\" disabled ?hidden=${!!item.fields.length}>\n <div class=\"item-field-label\">\n <div class=\"item-field-name\">\n ${$l(\"No Fields\")}\n </div>\n <div class=\"item-field-value\">${$l(\"This item has no fields.\")}</div>\n </div>\n </div>\n `\n : \"\"\n )}\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { shared, mixins } from \"../styles\";\nimport { BaseElement, element, html, css, property, listen } from \"./base\";\nimport \"./icon\";\nimport \"./spinner\";\n\ntype ButtonState = \"idle\" | \"loading\" | \"success\" | \"fail\";\n\n@element(\"pl-loading-button\")\nexport class LoadingButton extends BaseElement {\n @property({ reflect: true })\n state: ButtonState = \"idle\";\n @property()\n noTab: boolean = false;\n\n private _stopTimeout: number;\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n padding: 12px 15px;\n }\n\n :host([state=\"loading\"]) button {\n cursor: progress;\n }\n\n button {\n background: transparent;\n position: relative;\n flex: 1;\n height: auto;\n padding: 0;\n }\n\n button > * {\n transition: transform 0.2s cubic-bezier(1, -0.3, 0, 1.3), opacity 0.2s;\n will-change: transform;\n }\n\n button > :not(.label) {\n ${mixins.absoluteCenter()}\n }\n\n button > .label {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n :host(.vertical) .label {\n flex-direction: column;\n }\n\n button.loading .label,\n button.success .label,\n button.fail .label,\n button:not(.loading) .spinner,\n button:not(.success) .icon-success,\n button:not(.fail) .icon-fail {\n opacity: 0.5;\n transform: scale(0);\n }\n\n button pl-icon {\n font-size: 120%;\n }\n\n pl-spinner {\n width: 30px;\n height: 30px;\n }\n\n :host(.icon) {\n background: transparent !important;\n border-radius: 100% !important;\n padding: 0;\n line-height: 0;\n }\n\n :host(:not(.icon)) ::slotted(pl-icon:first-child) {\n margin: -10px 0 -10px -10px;\n }\n `\n ];\n\n render() {\n const { state, noTab } = this;\n return html`\n <button type=\"button\" class=\"${state}\" tabindex=\"${noTab ? \"-1\" : \"\"}\">\n <div class=\"label\"><slot></slot></div>\n\n <pl-spinner .active=\"${state == \"loading\"}\" class=\"spinner\"></pl-spinner>\n\n <pl-icon icon=\"check\" class=\"icon-success\"></pl-icon>\n\n <pl-icon icon=\"cancel\" class=\"icon-fail\"></pl-icon>\n </button>\n `;\n }\n\n static get is() {\n return \"pl-loading-button\";\n }\n\n @listen(\"click\")\n _click(e: MouseEvent) {\n if (this.state === \"loading\") {\n e.stopPropagation();\n }\n }\n\n start() {\n clearTimeout(this._stopTimeout);\n this.state = \"loading\";\n }\n\n stop() {\n this.state = \"idle\";\n }\n\n success() {\n this.state = \"success\";\n this._stopTimeout = window.setTimeout(() => this.stop(), 1000);\n }\n\n fail() {\n this.state = \"fail\";\n this._stopTimeout = window.setTimeout(() => this.stop(), 1000);\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { RetrieveMFATokenResponse } from \"@padloc/core/src/api\";\nimport { ErrorCode } from \"@padloc/core/src/error\";\nimport { MFAPurpose } from \"@padloc/core/src/mfa\";\nimport { app, router } from \"../globals\";\nimport { element, html, css, property, query } from \"./base\";\nimport { StartForm } from \"./start-form\";\nimport { Input } from \"./input\";\nimport { PasswordInput } from \"./password-input\";\nimport { LoadingButton } from \"./loading-button\";\nimport { alert, confirm, prompt } from \"../lib/dialog\";\nimport \"./logo\";\n\n@element(\"pl-login\")\nexport class Login extends StartForm {\n @property()\n private _errorMessage: string;\n\n @query(\"#emailInput\")\n private _emailInput: Input;\n @query(\"#passwordInput\")\n private _passwordInput: PasswordInput;\n @query(\"#loginButton\")\n private _loginButton: LoadingButton;\n\n private _failedCount = 0;\n\n async reset() {\n await this.updateComplete;\n this._emailInput.value = router.params.email || \"\";\n this._passwordInput.value = \"\";\n this._loginButton.stop();\n this._failedCount = 0;\n super.reset();\n if (router.params.verifying) {\n this._verifyEmail();\n }\n }\n\n static styles = [\n ...StartForm.styles,\n css`\n .hint {\n font-size: var(--font-size-tiny);\n box-sizing: border-box;\n transition: max-height 0.3s;\n max-height: 100px;\n margin: 40px 0 -20px 0;\n }\n\n button.signup {\n background: none;\n border: none;\n height: auto;\n line-height: normal;\n font-weight: bold;\n height: var(--row-height);\n }\n `\n ];\n\n render() {\n return html`\n <div flex></div>\n\n <form>\n <pl-logo class=\"animate\"></pl-logo>\n\n <pl-input\n id=\"emailInput\"\n type=\"email\"\n required\n select-on-focus\n .label=${$l(\"Email Address\")}\n class=\"animate tap\"\n @enter=${() => this._submit()}\n >\n </pl-input>\n\n <pl-password-input\n id=\"passwordInput\"\n required\n select-on-focus\n .label=${$l(\"Master Password\")}\n class=\"animate tap\"\n @enter=${() => this._submit()}\n >\n </pl-password-input>\n\n <pl-loading-button id=\"loginButton\" class=\"tap animate\" @click=${() => this._submit()}>\n ${$l(\"Login\")}\n </pl-loading-button>\n\n ${this._errorMessage\n ? html`\n <div class=\"error note animate\">${this._errorMessage}</div>\n `\n : \"\"}\n\n <div class=\"hint animate\">\n ${$l(\"New to Padloc?\")}\n </div>\n\n <button type=\"button\" class=\"tap signup animate\" @click=${() => router.go(\"signup\")}>\n ${$l(\"Sign Up Now\")}\n </button>\n </form>\n\n <div flex></div>\n `;\n }\n\n private async _verifyEmail() {\n router.params = { ...router.params, email: this._emailInput.value, verifying: \"1\" };\n\n const res: RetrieveMFATokenResponse | null = await prompt(\n $l(\"Please enter the confirmation code sent to your email address to proceed!\"),\n {\n title: $l(\"One Last Step!\"),\n placeholder: $l(\"Enter Verification Code\"),\n confirmLabel: $l(\"Submit\"),\n type: \"number\",\n pattern: \"[0-9]*\",\n validate: async (code: string) => {\n try {\n return app.retrieveMFAToken(this._emailInput.value, code, MFAPurpose.Login);\n } catch (e) {\n if (e.code === ErrorCode.MFA_TRIES_EXCEEDED) {\n alert($l(\"Maximum number of tries exceeded! Please resubmit and try again!\"), {\n type: \"warning\"\n });\n return null;\n }\n throw e.message ||\n `Something went wrong while we were processing your request. Please try again later! (Error Code: ${e.code})`;\n }\n }\n }\n );\n\n if (res) {\n this._verificationToken = res.token;\n }\n\n const { email, verifying, ...rest } = router.params;\n router.params = rest;\n\n return res;\n }\n\n private async _accountDoesntExist(email: string) {\n const signup = await confirm(\n $l(\"An account with this email address does not exist!\"),\n $l(\"Sign Up\"),\n $l(\"Cancel\"),\n {\n icon: \"info\"\n }\n );\n if (signup) {\n router.go(\"signup\", { email });\n }\n }\n\n private async _submit(): Promise<void> {\n if (this._loginButton.state === \"loading\") {\n return;\n }\n\n if (!this._emailInput.reportValidity()) {\n return;\n }\n\n this._emailInput.blur();\n this._passwordInput.blur();\n\n const email = this._emailInput.value;\n let password = this._passwordInput.value;\n\n if (this._emailInput.invalid) {\n this._errorMessage = $l(\"Please enter a valid email address!\");\n this.rumble();\n this._emailInput.focus();\n return;\n }\n\n if (!password) {\n this._errorMessage = $l(\"Please enter your master password!\");\n this.rumble();\n this._passwordInput.focus();\n return;\n }\n\n this._errorMessage = \"\";\n this._loginButton.start();\n try {\n await app.login(email, password, this._verificationToken);\n this._loginButton.success();\n this.done();\n } catch (e) {\n switch (e.code) {\n case ErrorCode.MFA_REQUIRED:\n this._loginButton.stop();\n\n await app.requestMFACode(email, MFAPurpose.Login);\n const verify = await this._verifyEmail();\n\n if (!verify) {\n return;\n }\n\n if (!verify.hasAccount) {\n if (verify.hasLegacyAccount) {\n this._migrateAccount(email, password, verify.legacyToken!, verify.token);\n } else {\n this._accountDoesntExist(email);\n }\n return;\n }\n\n return this._submit();\n case ErrorCode.INVALID_CREDENTIALS:\n this._errorMessage = $l(\"Wrong username or password. Please try again!\");\n this._loginButton.fail();\n this.rumble();\n\n this._failedCount++;\n if (this._failedCount > 2) {\n const recover = await confirm(\n $l(\"Can't remember your master password?\"),\n $l(\"Recover Account\"),\n $l(\"Try Again\")\n );\n if (recover) {\n router.go(\"recover\", { email });\n }\n } else {\n this._passwordInput.focus();\n }\n return;\n case ErrorCode.NOT_FOUND:\n this._loginButton.fail();\n this._accountDoesntExist(email);\n return;\n default:\n this._loginButton.fail();\n throw e;\n }\n }\n }\n}\n","import { BaseElement, element, html, css, svg, property } from \"./base\";\n\n@element(\"pl-logo\")\nexport class Logo extends BaseElement {\n @property({ reflect: true })\n reveal: boolean = false;\n\n static styles = [\n css`\n :host {\n position: relative;\n display: block;\n width: 200px;\n height: 52px;\n }\n\n :host([reveal]) .padloc > * {\n stroke-dashoffset: 0;\n }\n\n svg {\n width: 100%;\n height: 100%;\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-width: 7;\n }\n\n .padloc > * {\n transition: stroke-dashoffset 1.4s cubic-bezier(0.57, 0.25, 0, 0.99);\n stroke-dashoffset: 0;\n }\n\n .p {\n stroke-dashoffset: 234px;\n stroke-dasharray: 234px;\n transition-delay: 0s;\n }\n\n .a {\n stroke-dashoffset: 190px;\n stroke-dasharray: 190px;\n transition-delay: 0.1s;\n }\n\n .d {\n stroke-dashoffset: 232px;\n stroke-dasharray: 232px;\n transition-delay: 0.2s;\n }\n\n .l {\n stroke-dashoffset: 155px;\n stroke-dasharray: 155px;\n transition-delay: 0.3s;\n }\n\n .o {\n stroke-dashoffset: 168px;\n stroke-dasharray: 168px;\n transition-delay: 0.4s;\n }\n\n .c {\n stroke-dashoffset: 237px;\n stroke-dasharray: 237px;\n transition-delay: 0.5s;\n }\n `\n ];\n\n _logo() {\n return svg`\n <svg viewBox=\"0 -12 380 120\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n\n <filter id=\"shadow\">\n <feOffset dy=\"3\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0\" in=\"shadowOffsetOuter1\"/>\n </filter>\n\n </defs>\n\n <g class=\"padloc shadow\" filter=\"url(#shadow)\">\n\n <path class=\"p\" d=\"M26.4525939,21 C31.4460596,21 35.9653942,22.1535365 40.0107335,24.460644 C44.0560727,26.7677515 47.2322485,29.9439273 49.539356,33.9892665 C51.8464635,38.0346058 53,42.5539404 53,47.5474061 C53,52.4776633 51.8464635,56.9653942 49.539356,61.0107335 C47.2322485,65.0560727 44.0560727,68.2322485 40.0107335,70.539356 C35.9653942,72.8464635 31.4460596,74 26.4525939,74 C21.9647957,74 17.9037153,73.036086 14.2692308,71.108229 C10.6347463,69.180372 7.77460792,66.5414598 5.68872987,63.1914132 L5.68872987,92.7728086 C5.68872987,93.6577265 5.43589996,94.3530088 4.93023256,94.8586762 C4.42456515,95.3643436 3.7292829,95.6171735 2.84436494,95.6171735 C2.0226554,95.6171735 1.34317502,95.3643436 0.805903399,94.8586762 C0.26863178,94.3530088 1.13686838e-13,93.6577265 1.13686838e-13,92.7728086 L1.13686838e-13,46.9785331 C0.0632084258,42.1114843 1.2641505,37.6869609 3.60286225,33.7048301 C5.94157401,29.7226992 9.11774976,26.609731 13.1314848,24.3658318 C17.1452198,22.1219327 21.5855451,21 26.4525939,21 Z M26.4525939,68.6905188 C30.3715163,68.6905188 33.9111351,67.7740104 37.0715564,65.940966 C40.2319776,64.1079217 42.728673,61.5796226 44.5617174,58.3559928 C46.3947617,55.1323631 47.3112701,51.5295369 47.3112701,47.5474061 C47.3112701,43.5652753 46.3947617,39.962449 44.5617174,36.7388193 C42.728673,33.5151896 40.2319776,30.9710886 37.0715564,29.1064401 C33.9111351,27.2417915 30.3715163,26.3094812 26.4525939,26.3094812 C22.5336715,26.3094812 18.9940528,27.2417915 15.8336315,29.1064401 C12.6732102,30.9710886 10.1923167,33.5151896 8.39087657,36.7388193 C6.58943643,39.962449 5.68872987,43.5652753 5.68872987,47.5474061 C5.68872987,51.5295369 6.58943643,55.1323631 8.39087657,58.3559928 C10.1923167,61.5796226 12.6732102,64.1079217 15.8336315,65.940966 C18.9940528,67.7740104 22.5336715,68.6905188 26.4525939,68.6905188 Z\"></path>\n\n <path class=\"a\" d=\"M101.903818,21 C106.834075,21 111.321806,22.1535365 115.367145,24.460644 C119.412485,26.7677515 122.58866,29.9439273 124.895768,33.9892665 C127.202876,38.0346058 128.356412,42.5539404 128.356412,47.5474061 L128.356412,70.5867621 C128.356412,71.4084716 128.103582,72.087952 127.597915,72.6252236 C127.092247,73.1624952 126.396965,73.431127 125.512047,73.431127 C124.690338,73.431127 124.010857,73.1624952 123.473586,72.6252236 C122.936314,72.087952 122.667682,71.4084716 122.667682,70.5867621 L122.667682,63.1914132 C120.581804,66.5414598 117.721666,69.180372 114.087181,71.108229 C110.452697,73.036086 106.391616,74 101.903818,74 C96.9103524,74 92.3910178,72.8464635 88.3456785,70.539356 C84.3003393,68.2322485 81.1241635,65.0560727 78.817056,61.0107335 C76.5099484,56.9653942 75.356412,52.4776633 75.356412,47.5474061 C75.356412,42.5539404 76.5099484,38.0346058 78.817056,33.9892665 C81.1241635,29.9439273 84.3003393,26.7677515 88.3456785,24.460644 C92.3910178,22.1535365 96.9103524,21 101.903818,21 Z M101.903818,68.6905188 C105.82274,68.6905188 109.362359,67.7740104 112.52278,65.940966 C115.683202,64.1079217 118.164095,61.5796226 119.965535,58.3559928 C121.766976,55.1323631 122.667682,51.5295369 122.667682,47.5474061 C122.667682,43.5652753 121.766976,39.962449 119.965535,36.7388193 C118.164095,33.5151896 115.683202,30.9710886 112.52278,29.1064401 C109.362359,27.2417915 105.82274,26.3094812 101.903818,26.3094812 C97.9848957,26.3094812 94.4452769,27.2417915 91.2848556,29.1064401 C88.1244343,30.9710886 85.627739,33.5151896 83.7946946,36.7388193 C81.9616503,39.962449 81.0451419,43.5652753 81.0451419,47.5474061 C81.0451419,51.5295369 81.9616503,55.1323631 83.7946946,58.3559928 C85.627739,61.5796226 88.1244343,64.1079217 91.2848556,65.940966 C94.4452769,67.7740104 97.9848957,68.6905188 101.903818,68.6905188 Z\"></path>\n\n <path class=\"d\" d=\"M200.453612,1 C201.33121,1 202.020742,1.2507387 202.522227,1.75222363 C203.023712,2.25370856 203.27445,2.94324 203.27445,3.82083863 L203.27445,49.2363405 C203.211765,54.063133 202.020756,58.4510603 199.701388,62.4002541 C197.38202,66.349448 194.232115,69.4366682 190.251579,71.6620076 C186.271042,73.887347 181.867444,75 177.040651,75 C172.088487,75 167.606533,73.8560047 163.594654,71.5679797 C159.582774,69.2799547 156.432869,66.1300497 154.144844,62.1181703 C151.856819,58.1062908 150.712824,53.6243365 150.712824,48.6721728 C150.712824,43.7826947 151.856819,39.3320827 154.144844,35.3202033 C156.432869,31.3083239 159.582774,28.1584189 163.594654,25.8703939 C167.606533,23.5823689 172.088487,22.4383736 177.040651,22.4383736 C181.49133,22.4383736 185.51882,23.3943149 189.123243,25.3062262 C192.727666,27.2181375 195.564148,29.8352227 197.632773,33.1575604 L197.632773,3.82083863 C197.632773,2.94324 197.899183,2.25370856 198.432011,1.75222363 C198.964838,1.2507387 199.638699,1 200.453612,1 Z M177.040651,69.7344346 C180.927159,69.7344346 184.437501,68.8098356 187.571782,66.9606099 C190.706063,65.1113842 193.166436,62.588326 194.952976,59.3913596 C196.739517,56.1943932 197.632773,52.6213666 197.632773,48.6721728 C197.632773,44.722979 196.739517,41.1499525 194.952976,37.952986 C193.166436,34.7560196 190.706063,32.2486326 187.571782,30.4307497 C184.437501,28.6128668 180.927159,27.703939 177.040651,27.703939 C173.154143,27.703939 169.643801,28.6128668 166.50952,30.4307497 C163.375239,32.2486326 160.899195,34.7560196 159.081312,37.952986 C157.263429,41.1499525 156.354501,44.722979 156.354501,48.6721728 C156.354501,52.6213666 157.263429,56.1943932 159.081312,59.3913596 C160.899195,62.588326 163.375239,65.1113842 166.50952,66.9606099 C169.643801,68.8098356 173.154143,69.7344346 177.040651,69.7344346 Z\"></path>\n\n <path class=\"l\" d=\"M230,2.8425096 C230,2.02133606 230.268457,1.34229889 230.805378,0.805377721 C231.342299,0.268456556 232.021336,0 232.84251,0 C233.663683,0 234.34272,0.268456556 234.879641,0.805377721 C235.416563,1.34229889 235.685019,2.02133606 235.685019,2.8425096 L235.685019,71.1574904 C235.685019,71.9786639 235.416563,72.6577011 234.879641,73.1946223 C234.34272,73.7315434 233.663683,74 232.84251,74 C232.021336,74 231.342299,73.7315434 230.805378,73.1946223 C230.268457,72.6577011 230,71.9786639 230,71.1574904 L230,2.8425096 Z\"></path>\n\n <path class=\"o\" d=\"M286.957975,22 C291.888232,22 296.375963,23.1535365 300.421302,25.460644 C304.466642,27.7677515 307.642817,30.9439273 309.949925,34.9892665 C312.257032,39.0346058 313.410569,43.5539404 313.410569,48.5474061 C313.410569,53.4776633 312.257032,57.9653942 309.949925,62.0107335 C307.642817,66.0560727 304.466642,69.2322485 300.421302,71.539356 C296.375963,73.8464635 291.888232,75 286.957975,75 C281.964509,75 277.445175,73.8464635 273.399835,71.539356 C269.354496,69.2322485 266.17832,66.0560727 263.871213,62.0107335 C261.564105,57.9653942 260.410569,53.4776633 260.410569,48.5474061 C260.410569,43.5539404 261.564105,39.0346058 263.871213,34.9892665 C266.17832,30.9439273 269.354496,27.7677515 273.399835,25.460644 C277.445175,23.1535365 281.964509,22 286.957975,22 Z M286.957975,27.3094812 C283.039052,27.3094812 279.499434,28.2417915 276.339012,30.1064401 C273.178591,31.9710886 270.681896,34.5151896 268.848851,37.7388193 C267.015807,40.962449 266.099299,44.5652753 266.099299,48.5474061 C266.099299,52.5295369 267.015807,56.1323631 268.848851,59.3559928 C270.681896,62.5796226 273.178591,65.1079217 276.339012,66.940966 C279.499434,68.7740104 283.039052,69.6905188 286.957975,69.6905188 C290.876897,69.6905188 294.416516,68.7740104 297.576937,66.940966 C300.737359,65.1079217 303.218252,62.5796226 305.019692,59.3559928 C306.821132,56.1323631 307.721839,52.5295369 307.721839,48.5474061 C307.721839,44.5652753 306.821132,40.962449 305.019692,37.7388193 C303.218252,34.5151896 300.737359,31.9710886 297.576937,30.1064401 C294.416516,28.2417915 290.876897,27.3094812 286.957975,27.3094812 Z\"></path>\n\n <path class=\"c\" d=\"M359.820963,22 C363.873552,22 367.577816,22.7915094 370.933866,24.374552 C374.289917,25.9575945 377.202671,28.3004624 379.672218,31.4032258 C380.115469,32.0364428 380.337092,32.5746692 380.337092,33.0179211 C380.337092,33.904425 379.893847,34.6009533 379.007343,35.1075269 C378.564091,35.4874571 378.057525,35.6774194 377.48763,35.6774194 C376.601126,35.6774194 375.872937,35.2974948 375.303042,34.5376344 C371.250453,29.725185 366.089812,27.3189964 359.820963,27.3189964 C356.148304,27.3189964 352.887286,28.2213171 350.037809,30.0259857 C347.188332,31.8306542 344.987936,34.3476541 343.436554,37.5770609 C341.885173,40.8064678 341.109494,44.447411 341.109494,48.5 C341.109494,52.4892673 341.964324,56.0985502 343.67401,59.327957 C345.383696,62.5573638 347.758224,65.0901939 350.797666,66.9265233 C353.837107,68.7628527 357.319749,69.6810036 361.245694,69.6810036 C366.818004,69.6810036 371.282117,68.1296451 374.638167,65.0268817 C375.208063,64.4569864 375.872931,64.172043 376.632791,64.172043 C377.32933,64.172043 377.899217,64.3936656 378.342468,64.8369176 C378.975685,65.4068129 379.292289,66.1033412 379.292289,66.9265233 C379.292289,67.623062 379.039006,68.1929488 378.532433,68.6362007 C376.316173,70.6624952 373.720022,72.2296838 370.743902,73.3378136 C367.767782,74.4459434 364.601744,75 361.245694,75 C356.369923,75 351.969131,73.8443963 348.043185,71.5331541 C344.11724,69.221912 341.030353,66.0400442 338.782433,61.9874552 C336.534512,57.9348662 335.410569,53.4390928 335.410569,48.5 C335.410569,43.4975855 336.455361,38.9859819 338.544977,34.9650538 C340.634594,30.9441257 343.547348,27.778088 347.283329,25.4668459 C351.019309,23.1556037 355.198479,22 359.820963,22 Z\"></path>\n\n </g>\n\n <g class=\"padloc\">\n\n <path class=\"p\" d=\"M26.4525939,21 C31.4460596,21 35.9653942,22.1535365 40.0107335,24.460644 C44.0560727,26.7677515 47.2322485,29.9439273 49.539356,33.9892665 C51.8464635,38.0346058 53,42.5539404 53,47.5474061 C53,52.4776633 51.8464635,56.9653942 49.539356,61.0107335 C47.2322485,65.0560727 44.0560727,68.2322485 40.0107335,70.539356 C35.9653942,72.8464635 31.4460596,74 26.4525939,74 C21.9647957,74 17.9037153,73.036086 14.2692308,71.108229 C10.6347463,69.180372 7.77460792,66.5414598 5.68872987,63.1914132 L5.68872987,92.7728086 C5.68872987,93.6577265 5.43589996,94.3530088 4.93023256,94.8586762 C4.42456515,95.3643436 3.7292829,95.6171735 2.84436494,95.6171735 C2.0226554,95.6171735 1.34317502,95.3643436 0.805903399,94.8586762 C0.26863178,94.3530088 1.13686838e-13,93.6577265 1.13686838e-13,92.7728086 L1.13686838e-13,46.9785331 C0.0632084258,42.1114843 1.2641505,37.6869609 3.60286225,33.7048301 C5.94157401,29.7226992 9.11774976,26.609731 13.1314848,24.3658318 C17.1452198,22.1219327 21.5855451,21 26.4525939,21 Z M26.4525939,68.6905188 C30.3715163,68.6905188 33.9111351,67.7740104 37.0715564,65.940966 C40.2319776,64.1079217 42.728673,61.5796226 44.5617174,58.3559928 C46.3947617,55.1323631 47.3112701,51.5295369 47.3112701,47.5474061 C47.3112701,43.5652753 46.3947617,39.962449 44.5617174,36.7388193 C42.728673,33.5151896 40.2319776,30.9710886 37.0715564,29.1064401 C33.9111351,27.2417915 30.3715163,26.3094812 26.4525939,26.3094812 C22.5336715,26.3094812 18.9940528,27.2417915 15.8336315,29.1064401 C12.6732102,30.9710886 10.1923167,33.5151896 8.39087657,36.7388193 C6.58943643,39.962449 5.68872987,43.5652753 5.68872987,47.5474061 C5.68872987,51.5295369 6.58943643,55.1323631 8.39087657,58.3559928 C10.1923167,61.5796226 12.6732102,64.1079217 15.8336315,65.940966 C18.9940528,67.7740104 22.5336715,68.6905188 26.4525939,68.6905188 Z\"></path>\n\n <path class=\"a\" d=\"M101.903818,21 C106.834075,21 111.321806,22.1535365 115.367145,24.460644 C119.412485,26.7677515 122.58866,29.9439273 124.895768,33.9892665 C127.202876,38.0346058 128.356412,42.5539404 128.356412,47.5474061 L128.356412,70.5867621 C128.356412,71.4084716 128.103582,72.087952 127.597915,72.6252236 C127.092247,73.1624952 126.396965,73.431127 125.512047,73.431127 C124.690338,73.431127 124.010857,73.1624952 123.473586,72.6252236 C122.936314,72.087952 122.667682,71.4084716 122.667682,70.5867621 L122.667682,63.1914132 C120.581804,66.5414598 117.721666,69.180372 114.087181,71.108229 C110.452697,73.036086 106.391616,74 101.903818,74 C96.9103524,74 92.3910178,72.8464635 88.3456785,70.539356 C84.3003393,68.2322485 81.1241635,65.0560727 78.817056,61.0107335 C76.5099484,56.9653942 75.356412,52.4776633 75.356412,47.5474061 C75.356412,42.5539404 76.5099484,38.0346058 78.817056,33.9892665 C81.1241635,29.9439273 84.3003393,26.7677515 88.3456785,24.460644 C92.3910178,22.1535365 96.9103524,21 101.903818,21 Z M101.903818,68.6905188 C105.82274,68.6905188 109.362359,67.7740104 112.52278,65.940966 C115.683202,64.1079217 118.164095,61.5796226 119.965535,58.3559928 C121.766976,55.1323631 122.667682,51.5295369 122.667682,47.5474061 C122.667682,43.5652753 121.766976,39.962449 119.965535,36.7388193 C118.164095,33.5151896 115.683202,30.9710886 112.52278,29.1064401 C109.362359,27.2417915 105.82274,26.3094812 101.903818,26.3094812 C97.9848957,26.3094812 94.4452769,27.2417915 91.2848556,29.1064401 C88.1244343,30.9710886 85.627739,33.5151896 83.7946946,36.7388193 C81.9616503,39.962449 81.0451419,43.5652753 81.0451419,47.5474061 C81.0451419,51.5295369 81.9616503,55.1323631 83.7946946,58.3559928 C85.627739,61.5796226 88.1244343,64.1079217 91.2848556,65.940966 C94.4452769,67.7740104 97.9848957,68.6905188 101.903818,68.6905188 Z\"></path>\n\n <path class=\"d\" d=\"M200.453612,1 C201.33121,1 202.020742,1.2507387 202.522227,1.75222363 C203.023712,2.25370856 203.27445,2.94324 203.27445,3.82083863 L203.27445,49.2363405 C203.211765,54.063133 202.020756,58.4510603 199.701388,62.4002541 C197.38202,66.349448 194.232115,69.4366682 190.251579,71.6620076 C186.271042,73.887347 181.867444,75 177.040651,75 C172.088487,75 167.606533,73.8560047 163.594654,71.5679797 C159.582774,69.2799547 156.432869,66.1300497 154.144844,62.1181703 C151.856819,58.1062908 150.712824,53.6243365 150.712824,48.6721728 C150.712824,43.7826947 151.856819,39.3320827 154.144844,35.3202033 C156.432869,31.3083239 159.582774,28.1584189 163.594654,25.8703939 C167.606533,23.5823689 172.088487,22.4383736 177.040651,22.4383736 C181.49133,22.4383736 185.51882,23.3943149 189.123243,25.3062262 C192.727666,27.2181375 195.564148,29.8352227 197.632773,33.1575604 L197.632773,3.82083863 C197.632773,2.94324 197.899183,2.25370856 198.432011,1.75222363 C198.964838,1.2507387 199.638699,1 200.453612,1 Z M177.040651,69.7344346 C180.927159,69.7344346 184.437501,68.8098356 187.571782,66.9606099 C190.706063,65.1113842 193.166436,62.588326 194.952976,59.3913596 C196.739517,56.1943932 197.632773,52.6213666 197.632773,48.6721728 C197.632773,44.722979 196.739517,41.1499525 194.952976,37.952986 C193.166436,34.7560196 190.706063,32.2486326 187.571782,30.4307497 C184.437501,28.6128668 180.927159,27.703939 177.040651,27.703939 C173.154143,27.703939 169.643801,28.6128668 166.50952,30.4307497 C163.375239,32.2486326 160.899195,34.7560196 159.081312,37.952986 C157.263429,41.1499525 156.354501,44.722979 156.354501,48.6721728 C156.354501,52.6213666 157.263429,56.1943932 159.081312,59.3913596 C160.899195,62.588326 163.375239,65.1113842 166.50952,66.9606099 C169.643801,68.8098356 173.154143,69.7344346 177.040651,69.7344346 Z\"></path>\n\n <path class=\"l\" d=\"M230,2.8425096 C230,2.02133606 230.268457,1.34229889 230.805378,0.805377721 C231.342299,0.268456556 232.021336,0 232.84251,0 C233.663683,0 234.34272,0.268456556 234.879641,0.805377721 C235.416563,1.34229889 235.685019,2.02133606 235.685019,2.8425096 L235.685019,71.1574904 C235.685019,71.9786639 235.416563,72.6577011 234.879641,73.1946223 C234.34272,73.7315434 233.663683,74 232.84251,74 C232.021336,74 231.342299,73.7315434 230.805378,73.1946223 C230.268457,72.6577011 230,71.9786639 230,71.1574904 L230,2.8425096 Z\"></path>\n\n <path class=\"o\" d=\"M286.957975,22 C291.888232,22 296.375963,23.1535365 300.421302,25.460644 C304.466642,27.7677515 307.642817,30.9439273 309.949925,34.9892665 C312.257032,39.0346058 313.410569,43.5539404 313.410569,48.5474061 C313.410569,53.4776633 312.257032,57.9653942 309.949925,62.0107335 C307.642817,66.0560727 304.466642,69.2322485 300.421302,71.539356 C296.375963,73.8464635 291.888232,75 286.957975,75 C281.964509,75 277.445175,73.8464635 273.399835,71.539356 C269.354496,69.2322485 266.17832,66.0560727 263.871213,62.0107335 C261.564105,57.9653942 260.410569,53.4776633 260.410569,48.5474061 C260.410569,43.5539404 261.564105,39.0346058 263.871213,34.9892665 C266.17832,30.9439273 269.354496,27.7677515 273.399835,25.460644 C277.445175,23.1535365 281.964509,22 286.957975,22 Z M286.957975,27.3094812 C283.039052,27.3094812 279.499434,28.2417915 276.339012,30.1064401 C273.178591,31.9710886 270.681896,34.5151896 268.848851,37.7388193 C267.015807,40.962449 266.099299,44.5652753 266.099299,48.5474061 C266.099299,52.5295369 267.015807,56.1323631 268.848851,59.3559928 C270.681896,62.5796226 273.178591,65.1079217 276.339012,66.940966 C279.499434,68.7740104 283.039052,69.6905188 286.957975,69.6905188 C290.876897,69.6905188 294.416516,68.7740104 297.576937,66.940966 C300.737359,65.1079217 303.218252,62.5796226 305.019692,59.3559928 C306.821132,56.1323631 307.721839,52.5295369 307.721839,48.5474061 C307.721839,44.5652753 306.821132,40.962449 305.019692,37.7388193 C303.218252,34.5151896 300.737359,31.9710886 297.576937,30.1064401 C294.416516,28.2417915 290.876897,27.3094812 286.957975,27.3094812 Z\"></path>\n\n <path class=\"c\" d=\"M359.820963,22 C363.873552,22 367.577816,22.7915094 370.933866,24.374552 C374.289917,25.9575945 377.202671,28.3004624 379.672218,31.4032258 C380.115469,32.0364428 380.337092,32.5746692 380.337092,33.0179211 C380.337092,33.904425 379.893847,34.6009533 379.007343,35.1075269 C378.564091,35.4874571 378.057525,35.6774194 377.48763,35.6774194 C376.601126,35.6774194 375.872937,35.2974948 375.303042,34.5376344 C371.250453,29.725185 366.089812,27.3189964 359.820963,27.3189964 C356.148304,27.3189964 352.887286,28.2213171 350.037809,30.0259857 C347.188332,31.8306542 344.987936,34.3476541 343.436554,37.5770609 C341.885173,40.8064678 341.109494,44.447411 341.109494,48.5 C341.109494,52.4892673 341.964324,56.0985502 343.67401,59.327957 C345.383696,62.5573638 347.758224,65.0901939 350.797666,66.9265233 C353.837107,68.7628527 357.319749,69.6810036 361.245694,69.6810036 C366.818004,69.6810036 371.282117,68.1296451 374.638167,65.0268817 C375.208063,64.4569864 375.872931,64.172043 376.632791,64.172043 C377.32933,64.172043 377.899217,64.3936656 378.342468,64.8369176 C378.975685,65.4068129 379.292289,66.1033412 379.292289,66.9265233 C379.292289,67.623062 379.039006,68.1929488 378.532433,68.6362007 C376.316173,70.6624952 373.720022,72.2296838 370.743902,73.3378136 C367.767782,74.4459434 364.601744,75 361.245694,75 C356.369923,75 351.969131,73.8443963 348.043185,71.5331541 C344.11724,69.221912 341.030353,66.0400442 338.782433,61.9874552 C336.534512,57.9348662 335.410569,53.4390928 335.410569,48.5 C335.410569,43.4975855 336.455361,38.9859819 338.544977,34.9650538 C340.634594,30.9441257 343.547348,27.778088 347.283329,25.4668459 C351.019309,23.1556037 355.198479,22 359.820963,22 Z\"></path>\n\n </g>\n </svg>`;\n }\n render() {\n return html`\n ${this._logo()}\n `;\n }\n}\n","import { Org, OrgMember, OrgRole, Group } from \"@padloc/core/src/org\";\nimport { VaultID } from \"@padloc/core/src/vault\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { mixins } from \"../styles\";\nimport { app } from \"../globals\";\nimport { confirm, choose } from \"../lib/dialog\";\nimport { element, html, css, property, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport \"./icon\";\nimport \"./toggle-button\";\nimport \"./group-item\";\nimport \"./member-item\";\nimport \"./vault-item\";\n\ntype InputType = { member: OrgMember; org: Org };\n\n@element(\"pl-member-dialog\")\nexport class MemberDialog extends Dialog<InputType, void> {\n @property()\n org: Org | null = null;\n\n @property()\n member: OrgMember | null = null;\n\n @query(\"#saveButton\")\n private _saveButton: LoadingButton;\n\n @property()\n private _error: string = \"\";\n\n private _vaults = new Map<string, { read: boolean; write: boolean }>();\n private _groups = new Set<string>();\n\n private _getCurrentVaults(): Map<string, { read: boolean; write: boolean }> {\n const vaults = new Map<string, { read: boolean; write: boolean }>();\n\n if (!this.org || !this.member) {\n return vaults;\n }\n\n for (const vault of this.org.vaults) {\n const v = this.member && this.member.vaults.find(v => v.id === vault!.id);\n vaults.set(vault.id, {\n read: !!v,\n write: !!v && !v.readonly\n });\n }\n\n return vaults;\n }\n\n private _getCurrentGroups() {\n return this.org && this.member\n ? new Set(this.org.getGroupsForMember(this.member).map(g => g.name))\n : new Set<string>();\n }\n\n private get _hasChanged() {\n if (!this.org || !this.member) {\n return false;\n }\n\n const currentVaults = this._getCurrentVaults();\n const vaultsChanged = this.org.vaults.some(({ id }) => {\n const c = currentVaults.get(id)!;\n const s = this._vaults.get(id)!;\n return c.read !== s.read || c.write !== s.write;\n });\n\n const currentGroups = this._getCurrentGroups();\n const groupsChanged =\n currentGroups.size !== this._groups.size ||\n [...this._groups.values()].some(name => !currentGroups.has(name));\n\n return vaultsChanged || groupsChanged;\n }\n\n async show({ member, org }: InputType): Promise<void> {\n this.member = member;\n this.org = org;\n this._groups = this._getCurrentGroups();\n this._vaults = this._getCurrentVaults();\n this._error = \"\";\n await this.updateComplete;\n return super.show();\n }\n\n _toggleGroup(group: Group) {\n if (this._groups.has(group.name)) {\n this._groups.delete(group.name);\n } else {\n this._groups.add(group.name);\n }\n this.requestUpdate();\n }\n\n private _toggleVault({ id }: { id: VaultID }) {\n const { read } = this._vaults.get(id)!;\n this._vaults.set(id, read ? { read: false, write: false } : { read: true, write: true });\n this.requestUpdate();\n }\n\n private _toggleRead({ id }: { id: VaultID }, event?: Event) {\n if (event) {\n event.stopImmediatePropagation();\n }\n\n const sel = this._vaults.get(id)!;\n sel.read = !sel.read;\n if (!sel.read) {\n sel.write = false;\n }\n\n this.requestUpdate();\n }\n\n private _toggleWrite({ id }: { id: VaultID }, event?: Event) {\n if (event) {\n event.stopImmediatePropagation();\n }\n\n const sel = this._vaults.get(id)!;\n sel.write = !sel.write;\n if (sel.write) {\n sel.read = true;\n }\n\n this.requestUpdate();\n }\n\n private async _save() {\n if (this._saveButton.state === \"loading\") {\n return;\n }\n\n this._error = \"\";\n this._saveButton.start();\n\n const vaults = [...this._vaults.entries()]\n .filter(([, { read }]) => read)\n .map(([id, { write }]) => ({ id, readonly: !write }));\n\n try {\n await app.updateMember(this.org!, this.member!, {\n vaults,\n groups: [...this._groups]\n });\n this._saveButton.success();\n this.done();\n } catch (e) {\n this._saveButton.fail();\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n throw e;\n }\n }\n\n private async _showOptions() {\n const isAdmin = this.member!.role === OrgRole.Admin;\n\n this.open = false;\n const choice = await choose(\n \"\",\n [$l(\"Remove\"), $l(\"Suspend\"), isAdmin ? $l(\"Remove Admin\") : $l(\"Make Admin\")],\n {\n hideIcon: true,\n type: \"destructive\"\n }\n );\n\n switch (choice) {\n case 0:\n this._removeMember();\n break;\n case 1:\n this._suspendMember();\n break;\n case 2:\n isAdmin ? this._removeAdmin() : this._makeAdmin();\n break;\n default:\n this.open = true;\n }\n }\n\n private async _removeMember() {\n this.open = false;\n const confirmed = await confirm(\n $l(\"Are you sure you want to remove this member from this organization?\"),\n $l(\"Remove\"),\n $l(\"Cancel\"),\n {\n type: \"destructive\",\n title: $l(\"Remove Member\")\n }\n );\n this.open = true;\n\n if (confirmed) {\n this._saveButton.start();\n\n try {\n await app.removeMember(this.org!, this.member!);\n\n this._saveButton.success();\n this.done();\n } catch (e) {\n this._saveButton.fail();\n throw e;\n }\n }\n }\n\n private async _makeAdmin() {\n this.open = false;\n\n const confirmed = await confirm(\n $l(\n \"Are you sure you want to make this member an admin? \" +\n \"Admins can manage vaults, groups and permissions.\"\n ),\n $l(\"Make Admin\"),\n $l(\"Cancel\")\n );\n\n this.open = true;\n\n if (confirmed) {\n this._saveButton.start();\n\n try {\n this.member = await app.updateMember(this.org!, this.member!, { role: OrgRole.Admin });\n this._saveButton.success();\n } catch (e) {\n this._saveButton.fail();\n throw e;\n }\n }\n }\n\n private async _removeAdmin() {\n this.open = false;\n\n const confirmed = await confirm(\n $l(\"Are you sure you want to remove this member as admin?\"),\n $l(\"Remove Admin\"),\n $l(\"Cancel\"),\n { type: \"destructive\" }\n );\n\n this.open = true;\n\n if (confirmed) {\n this._saveButton.start();\n\n try {\n this.member = await app.updateMember(this.org!, this.member!, { role: OrgRole.Member });\n this._saveButton.success();\n } catch (e) {\n this._saveButton.fail();\n throw e;\n }\n }\n }\n\n private async _suspendMember() {\n this.open = false;\n\n const confirmed = await confirm(\n $l(\"Are you sure you want to suspend this member?\"),\n $l(\"Suspend Member\"),\n $l(\"Cancel\"),\n { type: \"destructive\" }\n );\n\n this.open = true;\n\n if (confirmed) {\n this._saveButton.start();\n\n try {\n this.member = await app.updateMember(this.org!, this.member!, { role: OrgRole.Suspended });\n this._saveButton.success();\n this.done();\n } catch (e) {\n this._saveButton.fail();\n throw e;\n }\n }\n }\n\n shouldUpdate() {\n return !!this.org && !!this.member;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n }\n\n pl-toggle-button {\n display: block;\n padding: 0 15px 0 0;\n }\n\n .more-button {\n font-size: var(--font-size-small);\n align-self: flex-start;\n width: 30px;\n height: 30px;\n margin-top: 5px;\n }\n\n .subheader {\n margin: 8px;\n font-weight: bold;\n display: flex;\n align-items: flex-end;\n padding: 0 8px;\n font-size: var(--font-size-small);\n }\n\n .subheader .permission {\n width: 50px;\n font-size: var(--font-size-tiny);\n text-align: center;\n ${mixins.ellipsis()}\n }\n\n .item {\n display: flex;\n align-items: center;\n }\n\n .item pl-toggle {\n margin-right: 14px;\n }\n `\n ];\n\n renderContent() {\n const org = this.org!;\n const member = this.member!;\n const accountIsOwner = org.isOwner(app.account!);\n const accountIsAdmin = org.isAdmin(app.account!);\n const memberIsOwner = org.isOwner(member);\n\n return html`\n <header>\n <pl-member-item .member=${member} class=\"flex\"></pl-member-item>\n <pl-icon\n icon=\"more\"\n class=\"more-button tap\"\n ?hidden=${!accountIsOwner || memberIsOwner}\n @click=${this._showOptions}\n ></pl-icon>\n </header>\n\n <div class=\"content\">\n <div class=\"subheader\" ?hidden=${!org.groups.length}>\n <div>${$l(\"Groups\")}</div>\n </div>\n\n ${org.groups.map(\n group => html`\n <pl-toggle-button\n ?disabled=${!accountIsAdmin}\n class=\"item tap\"\n reverse\n @click=${() => this._toggleGroup(group)}\n .active=${this._groups.has(group.name)}\n >\n <pl-group-item .group=${group}></pl-group-item>\n </pl-toggle-button>\n `\n )}\n\n <div class=\"subheader\">\n <div>${$l(\"Vaults\")}</div>\n <div class=\"flex\"></div>\n <div class=\"permission\">${$l(\"read\")}</div>\n <div class=\"permission\">${$l(\"write\")}</div>\n </div>\n\n ${org.vaults.map(\n vault => html`\n <div class=\"item tap\" @click=${() => this._toggleVault(vault)} ?disabled=${!accountIsAdmin}>\n <pl-vault-item .vault=${vault} class=\"flex\"></pl-vault-item>\n <pl-toggle\n .active=${this._vaults.get(vault.id)!.read}\n @click=${(e: Event) => this._toggleRead(vault, e)}\n ></pl-toggle>\n <pl-toggle\n .active=${this._vaults.get(vault.id)!.write}\n @click=${(e: Event) => this._toggleWrite(vault, e)}\n ></pl-toggle>\n </div>\n `\n )}\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n </div>\n\n <div class=\"footer\">\n <div class=\"actions\">\n <pl-loading-button\n class=\"tap primary\"\n id=\"saveButton\"\n ?disabled=${!accountIsAdmin || !this._hasChanged}\n @click=${this._save}\n >\n ${$l(\"Save\")}\n </pl-loading-button>\n\n <button class=\"transparent tap\" @click=${this.dismiss}>\n ${this._hasChanged ? $l(\"Cancel\") : $l(\"Close\")}\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { Org, OrgMember, OrgRole } from \"@padloc/core/src/org\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, css, property } from \"./base\";\nimport \"./randomart\";\nimport \"./icon\";\n\n@element(\"pl-member-item\")\nexport class MemberItem extends BaseElement {\n @property()\n member: OrgMember;\n\n @property()\n org: Org;\n\n @property()\n hideRole: boolean = false;\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n align-items: center;\n padding: 8px;\n }\n\n pl-fingerprint {\n color: var(--color-secondary);\n --color-background: var(--color-tertiary);\n width: 45px;\n height: 45px;\n border-radius: 100%;\n border: solid 1px var(--border-color);\n margin-right: 8px;\n }\n\n .member-info {\n flex: 1;\n width: 0;\n }\n\n .name-wrapper {\n display: flex;\n }\n\n .name-wrapper > .tags {\n margin: 0 0 0 4px;\n }\n\n .member-name {\n font-weight: bold;\n flex: 1;\n width: 0;\n }\n\n .member-email {\n font-size: 90%;\n }\n `\n ];\n\n render() {\n const isAdmin = this.member.role === OrgRole.Admin;\n const isOwner = this.member.role === OrgRole.Owner;\n const isSuspended = this.member.role === OrgRole.Suspended;\n const groups = (this.org && this.org.getGroupsForMember(this.member).filter(g => g.name !== \"Everyone\")) || [];\n\n return html`\n <pl-fingerprint .key=${this.member.publicKey}></pl-fingerprint>\n\n <div class=\"member-info\">\n <div class=\"name-wrapper\">\n <div class=\"member-name ellipsis\">${this.member.name}</div>\n\n <div class=\"tiny tags\">\n ${groups.map(\n group => html`\n <div class=\"tag\">\n <pl-icon icon=\"group\"></pl-icon>\n ${group.name}\n </div>\n `\n )}\n ${!this.hideRole && isOwner\n ? html`\n <div class=\"tag warning\">${$l(\"Owner\")}</div>\n `\n : !this.hideRole && isAdmin\n ? html`\n <div class=\"tag highlight\">${$l(\"Admin\")}</div>\n `\n : !this.hideRole && isSuspended\n ? html`\n <div class=\"tag warning\">${$l(\"Suspended\")}</div>\n `\n : \"\"}\n </div>\n </div>\n\n <div class=\"member-email ellipsis\">${this.member.email}</div>\n </div>\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { PlanType, SubscriptionStatus } from \"@padloc/core/src/billing\";\nimport { ErrorCode } from \"@padloc/core/src/error\";\nimport { Vault } from \"@padloc/core/src/vault\";\nimport { app, router } from \"../globals\";\nimport { shared, mixins } from \"../styles\";\nimport { dialog, alert } from \"../lib/dialog\";\nimport { StateMixin } from \"../mixins/state\";\nimport { BaseElement, element, property, html, css } from \"./base\";\nimport \"./logo\";\nimport \"./spinner\";\nimport { ReportErrorsDialog } from \"./report-errors-dialog\";\n\n@element(\"pl-menu\")\nexport class Menu extends StateMixin(BaseElement) {\n @property()\n selected: string = \"items\";\n\n @dialog(\"pl-report-errors-dialog\")\n _reportErrorsDialog: ReportErrorsDialog;\n\n private _goTo(path: string, params?: any) {\n this.dispatch(\"toggle-menu\");\n router.go(path, params);\n }\n\n private _lock() {\n this.dispatch(\"toggle-menu\");\n app.lock();\n }\n\n private _getPremium(e?: MouseEvent) {\n e && e.stopPropagation();\n this.dispatch(\"get-premium\");\n this.dispatch(\"toggle-menu\");\n }\n\n private _reportErrors() {\n this._reportErrorsDialog.show();\n }\n\n private _displayVaultError(vault: Vault, e?: Event) {\n e && e.stopPropagation();\n\n const error = vault.error!;\n\n switch (error.code) {\n case ErrorCode.UNSUPPORTED_VERSION:\n alert(\n $l(\n \"A newer version of Padloc is required to synchronize this vault. Please update to the latest version now!\"\n ),\n {\n title: \"Update Required\",\n type: \"warning\"\n }\n );\n return;\n case ErrorCode.MISSING_ACCESS:\n alert($l(\"This vault could not be synchronized because you no longer have access to it.\"), {\n title: \"Sync Failed\",\n type: \"warning\"\n });\n return;\n default:\n alert(\n error.message ||\n $l(\n \"An unknown error occured while synchronizing this vault. If this problem persists please contact customer support.\"\n ),\n {\n title: \"Sync Failed\",\n type: \"warning\"\n }\n );\n return;\n }\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n flex-direction: column;\n color: var(--color-tertiary);\n font-size: var(--font-size-small);\n }\n\n .scroller {\n flex: 1;\n height: 0;\n ${mixins.scroll()}\n padding: 10px 0;\n }\n\n li {\n background: transparent;\n border: none;\n display: flex;\n align-items: center;\n height: 40px;\n margin: 2px 10px;\n padding-right: 10px;\n border-radius: 8px;\n overflow: hidden;\n height: 40px;\n font-weight: 600;\n --color-highlight: var(--color-tertiary);\n --color-foreground: var(--color-secondary);\n }\n\n li:not(.sub-item) {\n margin-top: 8px;\n }\n\n li[selected] {\n background: var(--color-highlight);\n box-shadow: rgba(0, 0, 0, 0.1) 0 1px 1px;\n color: var(--color-foreground);\n font-weight: bold;\n }\n\n li div {\n flex: 1;\n ${mixins.ellipsis()}\n }\n\n h3 {\n font-size: 100%;\n margin-top: 30px;\n padding: 0 20px;\n opacity: 0.8;\n font-weight: normal;\n }\n\n .sub-item {\n height: 35px;\n font-size: var(--font-size-tiny);\n margin-left: 20px;\n }\n\n .sub-item pl-icon {\n width: 30px;\n height: 30px;\n font-size: 90%;\n }\n\n .favorites,\n .host {\n --color-highlight: var(--color-negative);\n --color-foreground: var(--color-tertiary);\n }\n\n .vault {\n --color-highlight: var(--color-primary);\n --color-foreground: var(--color-tertiary);\n }\n\n .new {\n opacity: 0.6;\n }\n\n pl-logo {\n height: 30px;\n margin: 15px auto 0 auto;\n opacity: 0.25;\n }\n\n .version {\n text-align: center;\n margin-bottom: 15px;\n font-size: var(--font-size-micro);\n font-weight: 600;\n opacity: 0.3;\n }\n\n .no-tags {\n font-size: var(--font-size-micro);\n padding: 0 20px;\n opacity: 0.5;\n width: 100px;\n }\n\n .footer {\n padding: 5px;\n display: flex;\n align-items: center;\n box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 15px 0px;\n z-index: 1;\n }\n\n .footer pl-icon {\n width: 30px;\n height: 30px;\n font-size: var(--font-size-tiny);\n }\n\n .syncing {\n width: 20px;\n height: 20px;\n margin: 5px;\n }\n\n .get-premium {\n background: var(--color-negative);\n }\n\n li .detail {\n margin-left: 2px;\n flex: none;\n opacity: 0.7;\n font-weight: semi-bold;\n padding: 2px 6px;\n margin-right: -4px;\n opacity: 1;\n border-radius: var(--border-radius);\n display: flex;\n }\n\n li .detail pl-icon {\n height: 20px;\n width: 20px;\n }\n\n .detail.warning {\n color: white;\n opacity: 1;\n background: var(--color-negative);\n }\n\n .separator {\n height: 2px;\n background: var(--color-shade-2);\n border-radius: 100%;\n margin: 8px 16px;\n }\n\n .errors-button {\n background: var(--color-negative);\n padding: 0;\n padding-right: 8px;\n display: flex;\n align-items: center;\n font-weight: bold;\n }\n\n .subsection-header {\n margin: 12px 8px 6px 26px;\n opacity: 0.7;\n font-size: var(--font-size-tiny);\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n pl-logo {\n margin-top: max(env(safe-area-inset-top), 15px);\n }\n\n .footer {\n padding-bottom: max(calc(env(safe-area-inset-bottom) / 3), 5px);\n padding-left: max(calc(env(safe-area-inset-bottom) / 3), 5px);\n }\n }\n `\n ];\n\n render() {\n const mainVault = app.mainVault;\n const account = app.account;\n\n if (!mainVault || !account) {\n return html``;\n }\n\n const itemsQuota = app.getItemsQuota();\n\n const tags = app.state.tags;\n\n const count = app.count;\n\n const showSettingsWarning =\n app.billingEnabled &&\n account.billing &&\n (!account.billing.subscription || account.billing.subscription.status === SubscriptionStatus.Inactive);\n\n const showUpgradeButton =\n app.billingEnabled &&\n (!account.billing ||\n !account.billing.subscription ||\n account.billing.subscription.plan.type === PlanType.Free) &&\n itemsQuota !== -1;\n\n return html`\n <div class=\"scroller\">\n <pl-logo reveal></pl-logo>\n\n <div class=\"version\">v${process.env.PL_VERSION}</div>\n\n <div class=\"separator\"></div>\n\n <nav>\n <ul>\n <li class=\"tap\" @click=${() => this._goTo(\"items\", {})} ?selected=${this.selected === \"items\"}>\n <pl-icon icon=\"list\"></pl-icon>\n\n <div>${$l(\"Items\")}</div>\n </li>\n\n <li\n class=\"sub-item tap favorites\"\n @click=${() => this._goTo(\"items\", { host: true })}\n ?selected=${this.selected === \"host\"}\n ?hidden=${!count.currentHost}\n >\n <pl-icon icon=\"web\"></pl-icon>\n\n <div>${this.app.state.currentHost}</div>\n\n <div class=\"detail\">${count.currentHost}</div>\n </li>\n\n <li\n class=\"sub-item tap\"\n @click=${() => this._goTo(\"items\", { recent: true })}\n ?selected=${this.selected === \"recent\"}\n >\n <pl-icon icon=\"time\"></pl-icon>\n\n <div>${$l(\"Recently Used\")}</div>\n\n <div class=\"detail\">${count.recent}</div>\n </li>\n\n <li\n class=\"sub-item tap favorites\"\n @click=${() => this._goTo(\"items\", { favorites: true })}\n ?selected=${this.selected === \"favorites\"}\n >\n <pl-icon icon=\"favorite\"></pl-icon>\n\n <div>${$l(\"Favorites\")}</div>\n\n <div class=\"detail\">${count.favorites}</div>\n </li>\n\n <li\n class=\"sub-item tap\"\n @click=${() => this._goTo(\"items\", { attachments: true })}\n ?selected=${this.selected === \"attachments\"}\n >\n <pl-icon icon=\"attachment\"></pl-icon>\n\n <div>${$l(\"Attachments\")}</div>\n\n <div class=\"detail\">${count.attachments}</div>\n </li>\n\n <li\n class=\"sub-item tap vault\"\n @click=${() => this._goTo(\"items\", { vault: mainVault.id })}\n ?selected=${this.selected === `vault/${mainVault.id}`}\n >\n <pl-icon icon=\"vault\"></pl-icon>\n <div>${$l(\"My Vault\")}</div>\n ${mainVault.error\n ? html`\n <div\n class=\"detail tap warning\"\n @click=${(e: Event) => this._displayVaultError(mainVault, e)}\n >\n <pl-icon icon=\"error\"></pl-icon>\n </div>\n `\n : itemsQuota !== -1\n ? html`\n <div class=\"detail tap warning\" @click=${this._getPremium}>\n ${mainVault.items.size} / ${itemsQuota}\n </div>\n `\n : html`\n <div class=\"detail\">\n ${mainVault.items.size}\n </div>\n `}\n </li>\n\n ${app.orgs.map(org => {\n const vaults = app.vaults.filter(v => v.org && v.org.id === org.id);\n\n return html`\n <div class=\"subsection\">\n <div class=\"subsection-header\">${org.name}</div>\n ${vaults.map(vault => {\n return html`\n <li\n class=\"sub-item tap vault\"\n @click=${() => this._goTo(\"items\", { vault: vault.id })}\n ?selected=${this.selected === `vault/${vault.id}`}\n >\n <pl-icon icon=\"vault\"></pl-icon>\n <div>${vault.name}</div>\n\n ${vault.error\n ? html`\n <div\n class=\"detail tap warning\"\n @click=${(e: Event) => this._displayVaultError(vault, e)}\n >\n <pl-icon icon=\"error\"></pl-icon>\n </div>\n `\n : html`\n <div class=\"detail\">\n ${vault.items.size}\n </div>\n `}\n </li>\n `;\n })}\n </div>\n `;\n })}\n\n <div class=\"subsection\" ?hidden=${!tags.length}>\n <div class=\"subsection-header\">${$l(\"Tags\")}</div>\n ${tags.map(\n ([tag, count]) => html`\n <li\n class=\"sub-item tap\"\n @click=${() => this._goTo(\"items\", { tag })}\n ?selected=${this.selected === `tag/${tag}`}\n >\n <pl-icon icon=\"tag\"></pl-icon>\n\n <div>${tag}</div>\n\n <div class=\"detail\">${count}</div>\n </li>\n `\n )}\n </div>\n\n <li class=\"new sub-item tap\" @click=${() => this.dispatch(\"create-item\")}>\n <pl-icon icon=\"add\"></pl-icon>\n\n <div>${$l(\"New Vault Item\")}</div>\n </li>\n\n <div class=\"separator\"></div>\n\n <li class=\"tap\" ?selected=${this.selected === \"orgs\"} @click=${() => this._goTo(\"orgs\")}>\n <pl-icon icon=\"hirarchy\"></pl-icon>\n\n <div>\n ${$l(\"Orgs & Teams\")}\n </div>\n </li>\n\n ${app.orgs.map(\n org => html`\n <li\n class=\"sub-item tap\"\n ?selected=${this.selected === `orgs/${org.id}`}\n @click=${() => this._goTo(`orgs/${org.id}`)}\n >\n <pl-icon icon=\"org\"></pl-icon>\n\n <div>${org.name}</div>\n\n <div class=\"detail warning\" ?hidden=${!org.frozen}>\n <pl-icon icon=\"error\"></pl-icon>\n </div>\n </li>\n `\n )}\n\n <li class=\"new sub-item tap\" @click=${() => this.dispatch(\"create-org\")}>\n <pl-icon icon=\"add\"></pl-icon>\n\n <div>${$l(\"New Organization\")}</div>\n </li>\n\n <div class=\"separator\"></div>\n\n <li\n class=\"tap\"\n @click=${() => this._goTo(\"settings\")}\n ?selected=${this.selected === \"settings\"}\n >\n <pl-icon icon=\"settings\"></pl-icon>\n\n <div>${$l(\"Settings\")}</div>\n\n <div class=\"detail warning\" ?hidden=${!showSettingsWarning}>\n <pl-icon icon=\"error\"></pl-icon>\n </div>\n </li>\n\n <li class=\"get-premium tap\" @click=${this._getPremium} ?hidden=${!showUpgradeButton}>\n <pl-icon icon=\"favorite\"></pl-icon>\n\n <div>${$l(\"Get Premium\")}</div>\n </li>\n </ul>\n </nav>\n </div>\n\n <div class=\"footer\">\n <pl-icon icon=\"lock\" class=\"tap\" @click=${this._lock}></pl-icon>\n <pl-icon icon=\"refresh\" class=\"tap\" @click=${() => app.synchronize()}></pl-icon>\n <div class=\"flex\"></div>\n <pl-spinner .active=${app.state.syncing} class=\"syncing\"></pl-spinner>\n <button class=\"errors-button tap\" @click=${this._reportErrors} ?hidden=${!app.state._errors.length}>\n <pl-icon icon=\"error\" class=\"warning-icon\"></pl-icon>\n <div>${app.state._errors.length}</div>\n </button>\n </div>\n `;\n }\n}\n","import { Vault } from \"@padloc/core/src/vault\";\nimport { VaultItem } from \"@padloc/core/src/item\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { app } from \"../globals\";\nimport { element, property, html, css, query } from \"./base\";\nimport { Select } from \"./select\";\nimport { Dialog } from \"./dialog\";\n\n@element(\"pl-move-items-dialog\")\nexport class MoveItemsDialog extends Dialog<{ vault: Vault; item: VaultItem }[], VaultItem[]> {\n @property()\n items: { vault: Vault; item: VaultItem }[] = [];\n @property()\n vaults: Vault[] = [];\n\n @query(\"#vaultSelect\")\n private _vaultSelect: Select<Vault>;\n\n static styles = [\n ...Dialog.styles,\n css`\n pl-input,\n pl-select {\n text-align: center;\n margin: 12px;\n }\n\n .actions {\n margin: 12px;\n grid-gap: 12px;\n }\n\n h1 {\n display: block;\n text-align: center;\n }\n\n .message {\n margin: 8px;\n text-align: center;\n }\n `\n ];\n\n renderContent() {\n const itemsDescription =\n this.items.length === 1 ? `'${this.items[0].item.name}'` : $l(\"{0} Items\", this.items.length.toString());\n\n return html`\n <h1>${$l(\"Move {0} To\", itemsDescription)}</h1>\n\n <div class=\"message\" ?hidden=${this.vaults.length}>\n ${$l(\"No target vaults available!\")}\n </div>\n\n <pl-select id=\"vaultSelect\" .options=${this.vaults} .label=${$l(\"Vault\")} ?hidden=${!this.vaults.length}>\n </pl-select>\n\n <div class=\"actions\">\n <button @click=${this._enter} class=\"primary tap\" ?disabled=${!this.vaults.length}>\n ${this.items.length === 1 ? $l(\"Move Item\") : $l(\"Move Items\")}\n </button>\n <button @click=${this.dismiss} class=\"tap\">\n ${$l(\"Cancel\")}\n </button>\n </div>\n `;\n }\n\n private async _enter() {\n this.done(\n await app.moveItems(\n this.items.map(i => i.item),\n this._vaultSelect.selected!\n )\n );\n }\n\n async show(items: { vault: Vault; item: VaultItem }[]) {\n this.items = items;\n const sourceVaults = this.items.reduce((sv, i) => sv.add(i.vault), new Set<Vault>());\n this.vaults =\n sourceVaults.size === 1\n ? app.vaults.filter(v => app.hasWritePermissions(v) && v !== sourceVaults.values().next().value)\n : app.vaults.filter(v => app.hasWritePermissions(v));\n // this._vaultSelect.options = vaults;\n await this.updateComplete;\n this._vaultSelect.selected = this.vaults[0];\n return super.show();\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Invite } from \"@padloc/core/src/invite\";\nimport { OrgMember, OrgRole, Group } from \"@padloc/core/src/org\";\nimport { BillingInfo } from \"@padloc/core/src/billing\";\nimport { StateMixin } from \"../mixins/state\";\nimport { mixins } from \"../styles\";\nimport { dialog, alert, choose, confirm, prompt } from \"../lib/dialog\";\nimport { app, router } from \"../globals\";\nimport { element, html, css, property, query, observe } from \"./base\";\nimport { View } from \"./view\";\nimport { Input } from \"./input\";\nimport { VaultDialog } from \"./vault-dialog\";\nimport { GroupDialog } from \"./group-dialog\";\nimport { MemberDialog } from \"./member-dialog\";\nimport { CreateInvitesDialog } from \"./create-invites-dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport \"./billing-info\";\nimport \"./subscription\";\nimport \"./member-item\";\nimport \"./group-item\";\nimport \"./vault-item\";\nimport \"./invite-item\";\nimport \"./icon\";\n\n@element(\"pl-org-view\")\nexport class OrgView extends StateMixin(View) {\n @property()\n orgId: string = \"\";\n\n @query(\"#filterMembersInput\")\n private _filterMembersInput: Input;\n\n @query(\"#rotateKeysButton\")\n private _rotateKeysButton: LoadingButton;\n\n @dialog(\"pl-vault-dialog\")\n private _vaultDialog: VaultDialog;\n\n @dialog(\"pl-group-dialog\")\n private _groupDialog: GroupDialog;\n\n @dialog(\"pl-member-dialog\")\n private _memberDialog: MemberDialog;\n\n @dialog(\"pl-create-invites-dialog\")\n private _createInvitesDialog: CreateInvitesDialog;\n\n private get _org() {\n return app.getOrg(this.orgId);\n }\n\n @property()\n private _page: \"members\" | \"groups\" | \"vaults\" | \"invites\" | \"settings\" = \"members\";\n\n @property()\n private _membersFilter: string = \"\";\n\n private async _createInvite() {\n const invites = await this._createInvitesDialog.show(this._org!);\n if (invites) {\n if (invites.length === 1) {\n router.go(`invite/${invites[0].org!.id}/${invites[0].id}`);\n } else {\n alert($l(\"Successfully created {0} invites!\", invites.length.toString()));\n this._page = \"invites\";\n }\n }\n }\n\n private _showInvite(invite: Invite) {\n router.go(`invite/${invite.org!.id}/${invite.id}`);\n }\n\n private async _createVault() {\n await this._vaultDialog.show({ org: this._org!, vault: null });\n }\n\n private async _showGroup(group: Group) {\n await this._groupDialog.show({ org: this._org!, group });\n }\n\n private async _createGroup() {\n await this._groupDialog.show({ org: this._org!, group: null });\n }\n\n private async _showVault(vault: { id: string; name: string }) {\n await this._vaultDialog.show({ org: this._org!, vault: vault });\n }\n\n private _updateMembersFilter() {\n this._membersFilter = this._filterMembersInput.value;\n }\n\n private async _showMember(member: OrgMember) {\n const org = this._org!;\n\n if (member.role === OrgRole.Suspended) {\n if (!org.isOwner(app.account!)) {\n return;\n }\n\n const invite = org.invites.find(invite => invite.email === member.email);\n\n if (invite) {\n this._showInvite(invite);\n } else {\n const choice = await choose(\"\", [$l(\"Remove Member\"), $l(\"Unsuspend\")], { type: \"destructive\" });\n\n switch (choice) {\n case 0:\n const confirmed = await confirm(\n $l(\"Are you sure you want to remove this member from this organization?\"),\n $l(\"Remove\"),\n $l(\"Cancel\"),\n {\n type: \"destructive\",\n title: $l(\"Remove Member\")\n }\n );\n\n if (confirmed) {\n await app.removeMember(org, member);\n }\n break;\n case 1:\n const [invite] = await app.createInvites(org, [member.email], \"confirm_membership\");\n router.go(`invite/${invite.org!.id}/${invite.id}`);\n break;\n }\n }\n } else {\n await this._memberDialog.show({ org: org, member });\n }\n }\n\n private async _deleteOrg() {\n const deleted = await prompt(\n $l(\n \"Are you sure you want to delete this organization? \" +\n \"All associated vaults and the data within them will be lost! \" +\n \"This action can not be undone.\"\n ),\n {\n type: \"destructive\",\n title: $l(\"Delete Organization\"),\n confirmLabel: $l(\"Delete\"),\n placeholder: $l(\"Type 'DELETE' to confirm\"),\n validate: async val => {\n if (val !== \"DELETE\") {\n throw $l(\"Type 'DELETE' to confirm\");\n }\n\n await app.deleteOrg(this._org!.id);\n\n return val;\n }\n }\n );\n\n if (deleted) {\n router.go(\"\");\n alert(\"Organization deleted successfully.\", { type: \"success\" });\n }\n }\n\n private async _changeName() {\n await prompt(\"\", {\n title: $l(\"Rename Organization\"),\n confirmLabel: $l(\"Save\"),\n label: $l(\"Company Name\"),\n value: this._org!.name,\n validate: async name => {\n if (!name) {\n throw $l(\"Please enter a name!\");\n }\n\n await app.updateOrg(this._org!.id, async org => (org.name = name));\n\n return name;\n }\n });\n }\n\n private async _rotateKeys() {\n if (this._rotateKeysButton.state === \"loading\") {\n return;\n }\n\n const confirmed = await confirm(\n $l(\n \"Do you want to rotate this organizations cryptographic keys? All organization \" +\n \"memberships will have to be reconfirmed but no data will be lost.\"\n ),\n $l(\"Confirm\")\n );\n\n if (!confirmed) {\n return;\n }\n\n this._rotateKeysButton.start();\n\n try {\n await app.rotateOrgKeys(this._org!);\n this._rotateKeysButton.success();\n alert(\n $l(\n \"The organizations cryptographic keys have been rotated successfully and \" +\n \"membership confirmation requests for all members have been sent out.\"\n ),\n { type: \"success\" }\n );\n } catch (e) {\n this._rotateKeysButton.fail();\n alert(e.message || $l(\"Something went wrong. Please try again later!\"), { type: \"warning\" });\n }\n }\n\n @observe(\"orgId\")\n _orgChanged() {\n this._page = \"members\";\n this._clearMembersFilter();\n }\n\n private _clearMembersFilter() {\n this._membersFilter = this._filterMembersInput.value = \"\";\n }\n\n shouldUpdate() {\n return !!this._org;\n }\n\n static styles = [\n ...View.styles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n background: var(--color-quaternary);\n border-radius: var(--border-radius);\n }\n\n .wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n max-width: 500px;\n margin: 0 auto;\n }\n\n .subview {\n position: relative;\n ${mixins.fullbleed()}\n ${mixins.scroll()}\n }\n\n header {\n display: block;\n border: none;\n }\n\n .header-inner {\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n }\n\n .header-inner .title {\n text-align: center;\n }\n\n header > .tabs {\n margin: -10px;\n }\n\n .tabs .spacer {\n padding: 0;\n }\n\n .new-button {\n display: flex;\n font-weight: bold;\n align-items: center;\n justify-content: center;\n padding: 8px;\n }\n\n .new-button > pl-icon {\n font-size: 80%;\n width: 30px;\n height: 30px;\n }\n\n .settings {\n padding: 8px;\n }\n\n .settings > button,\n .settings > pl-loading-button {\n text-align: center;\n display: block;\n font-weight: bold;\n }\n\n .settings .item {\n margin: 8px 0;\n }\n\n .settings h3 {\n margin: 18px 8px 12px 8px;\n text-align: center;\n }\n\n .settings button {\n width: 100%;\n }\n\n .error.item button {\n width: 100%;\n margin-top: 8px;\n }\n `\n ];\n\n render() {\n const org = this._org!;\n const isOwner = org.isOwner(app.account!);\n const isAdmin = isOwner || org.isAdmin(app.account!);\n const invites = org.invites;\n const groups = org.groups;\n const vaults = org.vaults;\n const memFilter = this._membersFilter.toLowerCase();\n const members = memFilter\n ? org.members.filter(\n ({ name, email }) => email.toLowerCase().includes(memFilter) || name.toLowerCase().includes(memFilter)\n )\n : org.members;\n\n const billing = org.billing || Object.assign(new BillingInfo(), { org: org.id });\n\n return html`\n <header>\n <div class=\"header-inner\">\n <pl-icon class=\"tap menu-button\" icon=\"menu\" @click=${() => this.dispatch(\"toggle-menu\")}></pl-icon>\n <div class=\"title flex ellipsis\">${org.name}</div>\n <pl-icon></pl-icon>\n </div>\n\n <div class=\"tabs\">\n <div class=\"spacer\"></div>\n\n <div class=\"tap\" ?active=${this._page === \"members\"} @click=${() => (this._page = \"members\")}>\n <pl-icon icon=\"members\"></pl-icon>\n <div>${$l(\"Members\")}</div>\n </div>\n\n <div\n class=\"tap\"\n ?active=${this._page === \"groups\"}\n @click=${() => (this._page = \"groups\")}\n ?hidden=${!org.groups.length && !org.quota.groups}\n >\n <pl-icon icon=\"group\"></pl-icon>\n <div>${$l(\"Groups\")}</div>\n </div>\n\n <div class=\"tap\" ?active=${this._page === \"vaults\"} @click=${() => (this._page = \"vaults\")}>\n <pl-icon icon=\"vaults\"></pl-icon>\n <div>${$l(\"Vaults\")}</div>\n </div>\n\n <div\n class=\"tap\"\n ?active=${this._page === \"settings\"}\n @click=${() => (this._page = \"settings\")}\n ?hidden=${!isOwner}\n >\n <pl-icon icon=\"settings\"></pl-icon>\n <div>${$l(\"Settings\")}</div>\n </div>\n\n <div class=\"spacer\"></div>\n </div>\n </header>\n\n <main>\n <div class=\"wrapper\">\n <div ?hidden=${this._page !== \"members\"} class=\"subview\">\n ${org.frozen\n ? html`\n <div class=\"error item\">\n ${$l(\n \"This organization currently does not have an active subscription \" +\n 'and has been put in \"frozen\" state as a result. While in this state, ' +\n \"you won't be able to make any changes to members, groups or vaults of this \" +\n \"organization.\"\n )}\n <button class=\"tap\" @click=${() => (this._page = \"settings\")}>\n ${$l(\"Update Subscription\")}\n </button>\n </div>\n `\n : \"\"}\n\n <div class=\"search-wrapper item\">\n <pl-icon icon=\"search\"></pl-icon>\n <pl-input\n id=\"filterMembersInput\"\n placeholder=\"${$l(\"Search...\")}\"\n @input=${this._updateMembersFilter}\n ></pl-input>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${this._clearMembersFilter}></pl-icon>\n </div>\n <ul>\n <li\n class=\"new-button item tap\"\n @click=${this._createInvite}\n ?hidden=${!isOwner || members.length < 50}\n >\n <pl-icon icon=\"invite\"></pl-icon>\n <div>${$l(\"Invite New Members\")}</div>\n </li>\n\n ${invites.map(\n inv => html`\n <li class=\"item tap\" @click=${() => this._showInvite(inv)}>\n <pl-invite-item .invite=${inv}></pl-invite-item>\n </li>\n `\n )}\n ${members.map(\n member => html`\n <li class=\"tap member item\" @click=${() => this._showMember(member)}>\n <pl-member-item .member=${member} .org=${this._org}></pl-member-item>\n </li>\n `\n )}\n\n <li class=\"new-button tap item\" @click=${this._createInvite} ?hidden=${!isOwner}>\n <pl-icon icon=\"add\"></pl-icon>\n <div>${$l(\"Invite New Members\")}</div>\n </li>\n </ul>\n </div>\n\n <div ?hidden=${this._page !== \"groups\"} class=\"subview\">\n ${org.frozen\n ? html`\n <div class=\"error item\">\n ${$l(\n \"This organization currently does not have an active subscription \" +\n 'and has been put in \"frozen\" state as a result. While in this state, ' +\n \"you won't be able to make any changes to members, groups or vaults of this \" +\n \"organization.\"\n )}\n <button class=\"tap\" ?hidden=${!isOwner} @click=${() => (this._page = \"settings\")}>\n ${$l(\"Update Subscription\")}\n </button>\n </div>\n `\n : \"\"}\n <ul>\n ${groups.map(\n group => html`\n <li @click=${() => this._showGroup(group)} class=\"item tap\">\n <pl-group-item .group=${group}></pl-group-item>\n </li>\n `\n )}\n <li class=\"new-button tap item\" @click=${this._createGroup} ?hidden=${!isAdmin}>\n <pl-icon icon=\"add\"></pl-icon>\n <div>${$l(\"New Group\")}</div>\n </li>\n </ul>\n </div>\n\n <div ?hidden=${this._page !== \"vaults\"} class=\"subview\">\n ${org.frozen\n ? html`\n <div class=\"error item\">\n ${$l(\n \"This organization currently does not have an active subscription \" +\n 'and has been put in \"frozen\" state as a result. While in this state, ' +\n \"you won't be able to make any changes to members, groups or vaults of this \" +\n \"organization.\"\n )}\n <button class=\"tap\" ?hidden=${!isOwner} @click=${() => (this._page = \"settings\")}>\n ${$l(\"Update Subscription\")}\n </button>\n </div>\n `\n : \"\"}\n <ul>\n ${vaults.map(\n vault => html`\n <li @click=${() => this._showVault(vault)} class=\"item tap\">\n <pl-vault-item\n .vault=${vault}\n .groups=${org.getGroupsForVault(vault).length}\n .members=${org.getMembersForVault(vault).length}\n ></pl-vault-item>\n </li>\n `\n )}\n <li class=\"new-button tap item\" @click=${this._createVault} ?hidden=${!isAdmin}>\n <pl-icon icon=\"add\"></pl-icon>\n <div>${$l(\"New Vault\")}</div>\n </li>\n </ul>\n </div>\n\n <div ?hidden=${this._page !== \"settings\"} class=\"subview settings\">\n ${org.frozen\n ? html`\n <div class=\"error item\">\n ${$l(\n \"This organization currently does not have an active subscription \" +\n 'and has been put in \"frozen\" state as a result. While in this state, ' +\n \"you won't be able to make any changes to members, groups or vaults of this \" +\n \"organization.\"\n )}\n </div>\n `\n : \"\"}\n ${app.billingEnabled\n ? html`\n <h3>${$l(\"Subscription\")}</h3>\n\n <pl-subscription .org=${this._org} class=\"item\"></pl-subscription>\n\n <h3>${$l(\"Billing Info\")}</h3>\n\n <pl-billing-info .billing=${billing} class=\"item\"></pl-billing-info>\n `\n : \"\"}\n\n <h3>${$l(\"Security\")}</h3>\n\n <pl-loading-button id=\"rotateKeysButton\" class=\"tap item\" @click=${this._rotateKeys}\n >${$l(\"Rotate Cryptographic Keys\")}</pl-loading-button\n >\n\n <h3>${$l(\"General\")}</h3>\n\n <button class=\"tap item\" @click=${this._changeName}>${$l(\"Change Organization Name\")}</button>\n\n <button class=\"item tap negative\" @click=${this._deleteOrg}>\n ${$l(\"Delete Organization\")}\n </button>\n </div>\n </div>\n </main>\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { StateMixin } from \"../mixins/state\";\nimport { app, router } from \"../globals\";\nimport { element, html, css } from \"./base\";\nimport { View } from \"./view\";\nimport \"./icon\";\n\n@element(\"pl-orgs-list\")\nexport class OrgsList extends StateMixin(View) {\n static styles = [\n ...View.styles,\n css`\n :host {\n background: var(--color-quaternary);\n display: flex;\n flex-direction: column;\n }\n\n .orgs {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n grid-gap: 12px;\n margin: 12px;\n }\n\n .orgs > * {\n margin: 0;\n }\n\n .org {\n padding: 16px;\n display: flex;\n align-items: center;\n }\n\n .org-icon {\n font-size: 120%;\n margin-right: 12px;\n background: #eee;\n border: solid 1px #ddd;\n width: 50px;\n height: 50px;\n }\n\n .org .tags {\n margin: 4px 0;\n }\n\n .org-name {\n font-weight: bold;\n margin-bottom: 4px;\n font-size: 120%;\n font-weight: 600;\n }\n\n .org-info {\n flex: 1;\n width: 0;\n }\n\n .new-org {\n background: none;\n border: dashed 1px;\n font-weight: bold;\n }\n `\n ];\n\n render() {\n return html`\n <header>\n <pl-icon class=\"tap menu-button\" icon=\"menu\" @click=${() => this.dispatch(\"toggle-menu\")}></pl-icon>\n\n <div class=\"title flex\">${$l(\"Orgs & Teams\")}</div>\n\n <pl-icon></pl-icon>\n </header>\n\n <main>\n <div class=\"orgs\">\n ${app.orgs.map(\n org => html`\n <div class=\"org item tap\" @click=${() => router.go(`orgs/${org.id}`)}>\n <pl-icon class=\"org-icon\" icon=\"org\"></pl-icon>\n\n <div class=\"org-info\">\n <div class=\"org-name ellipsis\">${org.name}</div>\n\n <div class=\"tags small\">\n <div class=\"tag\">\n <pl-icon icon=\"org\"></pl-icon>\n\n <div>${org.members.length}</div>\n </div>\n\n <div class=\"tag\">\n <pl-icon icon=\"group\"></pl-icon>\n\n <div>${org.groups.length}</div>\n </div>\n\n <div class=\"tag\">\n <pl-icon icon=\"vault\"></pl-icon>\n\n <div>${org.vaults.length}</div>\n </div>\n\n <div class=\"warning tag\" ?hidden=${!org.frozen}>\n <pl-icon icon=\"error\"></pl-icon>\n </div>\n </div>\n </div>\n </div>\n `\n )}\n </div>\n\n <div class=\"empty-placeholder\" ?hidden=${!!app.orgs.length}>\n <pl-icon icon=\"org\"></pl-icon>\n\n <div>\n ${$l(\n \"Organizations allow you to securely share passwords, documents and other data \" +\n \"within your family, team or any other kind of group!\"\n )}\n </div>\n\n <button class=\"primary tap\" @click=${() => this.dispatch(\"create-org\")}>\n ${$l(\"Create Organization\")}\n </button>\n </div>\n\n <div class=\"fabs\">\n <div class=\"flex\"></div>\n\n <pl-icon icon=\"add\" class=\"tap fab\" @click=${() => this.dispatch(\"create-org\")}></pl-icon>\n </div>\n </main>\n `;\n }\n}\n","import { element, html, css } from \"./base\";\nimport { Input } from \"./input\";\nimport \"./icon\";\n\n@element(\"pl-password-input\")\nexport class PasswordInput extends Input {\n constructor() {\n super();\n this.type = \"password\";\n }\n\n static styles = [\n ...Input.styles,\n css`\n input {\n font-size: 120%;\n font-family: var(--font-family-mono);\n }\n\n .mask-icon {\n position: absolute;\n z-index: 1;\n right: 5px;\n top: 0;\n bottom: 0;\n margin: auto;\n opacity: 0.8;\n }\n `\n ];\n\n render() {\n return html`\n ${super.render()}\n\n <pl-icon\n icon=\"${this.type === \"password\" ? \"show\" : \"hide\"}\"\n class=\"mask-icon tap\"\n @click=${this._toggleMasked}\n >\n </pl-icon>\n `;\n }\n\n _toggleMasked() {\n this.type = this.type === \"password\" ? \"text\" : \"password\";\n }\n}\n","import { unsafeHTML } from \"lit-html/directives/unsafe-html\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { BillingInfo, Plan, PlanType, UpdateBillingParams } from \"@padloc/core/src/billing\";\nimport { dialog } from \"../lib/dialog\";\nimport { mixins } from \"../styles\";\nimport { app } from \"../globals\";\nimport { element, html, property, css, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport \"./card-input\";\nimport { BillingDialog } from \"./billing-dialog\";\n\n@element(\"pl-premium-dialog\")\nexport class PremiumDialog extends Dialog<void, void> {\n @property()\n plan: Plan | null = null;\n\n @property()\n private _error = \"\";\n\n @property()\n private _updateBillingParams: UpdateBillingParams | null = null;\n\n @query(\"#submitButton\")\n private _submitButton: LoadingButton;\n\n @dialog(\"pl-billing-dialog\")\n private _billingDialog: BillingDialog;\n\n private async _submit() {\n if (this._submitButton.state === \"loading\") {\n return;\n }\n\n this._error = \"\";\n this._submitButton.start();\n\n const params =\n this._updateBillingParams ||\n new UpdateBillingParams({\n account: app.account!.id\n });\n\n params.plan = this.plan!.id;\n\n try {\n await app.updateBilling(params);\n this._submitButton.success();\n this.done();\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._submitButton.fail();\n return;\n }\n }\n\n async show() {\n const result = super.show();\n const plan =\n app.state.billingProvider && app.state.billingProvider.plans.find(p => p.type === PlanType.Premium);\n if (plan) {\n this.plan = plan;\n this._error = \"\";\n this._updateBillingParams = null;\n } else {\n this.done();\n }\n return result;\n }\n\n private async _updateBillingInfo() {\n this.open = false;\n const billing = await this._billingDialog.show({\n billingInfo: Object.assign(new BillingInfo(), { account: app.account!.id })\n });\n if (billing) {\n this._updateBillingParams = billing;\n this._error = \"\";\n }\n this.open = true;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .plan {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .inner {\n background: var(--color-quaternary);\n text-align: center;\n }\n\n .plan-header {\n text-align: center;\n padding: 20px;\n /* background: linear-gradient(180deg, #59c6ff 0%, #077cb9 100%); */\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n .close-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n }\n\n .plan-name {\n font-size: 2rem;\n margin-bottom: 10px;\n font-weight: bold;\n }\n\n .plan-trial {\n font-size: 1.5rem;\n margin-bottom: 10px;\n }\n\n .plan-then {\n font-size: var(--font-size-small);\n margin-bottom: 10px;\n }\n\n .plan-price {\n letter-spacing: 0.1em;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n font-weight: bold;\n font-size: 1.2rem;\n margin: 5px;\n }\n\n .plan-price-currency {\n line-height: 1em;\n margin-top: 0.4em;\n }\n\n .plan-price-dollars {\n font-size: 3em;\n line-height: 1em;\n }\n\n .plan-price-cents {\n font-size: 1.5em;\n line-height: 1em;\n margin-top: 0.2em;\n }\n\n .plan-unit {\n font-size: var(--font-size-small);\n margin-bottom: 15px;\n }\n\n .plan-fineprint {\n font-size: var(--font-size-tiny);\n opacity: 0.8;\n }\n\n .quantity {\n font-size: 1.6rem;\n margin-top: 20px;\n }\n\n pl-loading-button {\n font-weight: bold;\n }\n\n pl-loading-button.primary {\n margin: 8px;\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n font-weight: bold;\n border-bottom: solid 3px var(--color-shade-2);\n }\n\n .error {\n color: var(--color-negative);\n padding: 8px;\n text-align: center;\n }\n\n .payment-method {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n font-weight: bold;\n margin-bottom: 0;\n }\n\n .change-plan {\n background: transparent;\n color: var(--color-tertiary);\n font-weight: bold;\n margin: 4px;\n }\n\n .features {\n font-size: var(--font-size-small);\n margin-top: 8px;\n flex: 1;\n ${mixins.scroll()}\n }\n\n .features > * {\n padding: 10px 15px;\n }\n\n .features > :not(:last-child) {\n border-bottom: solid 1px var(--color-shade-1);\n }\n `\n ];\n\n renderContent() {\n if (!this.plan || !app.account) {\n return html``;\n }\n\n const plan = this.plan;\n const monthlyPrice = Math.round(plan.cost / 12);\n const paymentMethod =\n (this._updateBillingParams && this._updateBillingParams.paymentMethod) ||\n (app.account.billing && app.account.billing.paymentMethod);\n\n const trialDaysLeft = app.account.billing ? app.account.billing.trialDaysLeft : 30;\n\n return html`\n <div\n class=\"plan\"\n style=${plan.color\n ? `--color-highlight: ${plan.color}; --color-highlight-text: var(--color-tertiary);`\n : \"\"}\n >\n <div class=\"plan-header\">\n <pl-icon class=\"tap close-icon\" icon=\"cancel\" @click=${() => this.done()}></pl-icon>\n\n <div class=\"plan-name\">\n ${plan.name}\n </div>\n\n <div class=\"flex\"></div>\n\n <div class=\"plan-trial\" ?hidden=${!trialDaysLeft}>\n ${$l(\"Free For {0} Days\", trialDaysLeft.toString())}\n </div>\n\n <div class=\"plan-then\" ?hidden=${!trialDaysLeft}>\n ${$l(\"then\")}\n </div>\n\n <div class=\"plan-price\">\n <div class=\"plan-price-currency\">$</div>\n <div class=\"plan-price-dollars\">\n ${Math.floor(monthlyPrice / 100)}\n </div>\n <div class=\"plan-price-cents\">\n .${(monthlyPrice % 100).toString().padEnd(2, \"0\")}\n </div>\n </div>\n\n <div class=\"plan-unit\">\n ${$l(\"per month\")}\n </div>\n\n <div class=\"flex\"></div>\n\n <div class=\"plan-fineprint\">\n ${$l(\"USD, billed annually\")}\n </div>\n </div>\n\n <ul class=\"features\">\n ${plan.features.map(\n feature => html`\n <li>\n ${unsafeHTML(feature.replace(/\\*\\*(.+)\\*\\*/g, \"<strong>$1</strong>\"))}\n </li>\n `\n )}\n </ul>\n\n <div class=\"payment-method item tap\" @click=${this._updateBillingInfo}>\n <pl-icon icon=\"credit\"></pl-icon>\n ${paymentMethod\n ? html`\n <div>\n ${paymentMethod.name}\n </div>\n `\n : html`\n <div>\n ${$l(\"Add Billing Info\")}\n </div>\n `}\n </div>\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n\n <pl-loading-button id=\"submitButton\" class=\"tap primary\" @click=${this._submit}>\n ${trialDaysLeft ? $l(\"Start Trial\") : $l(\"Buy Now\")}\n </pl-loading-button>\n </div>\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { element, html, css, property, query } from \"./base\";\nimport { Input } from \"./input\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Dialog } from \"./dialog\";\n\nconst defaultConfirmLabel = $l(\"OK\");\nconst defaultCancelLabel = $l(\"Cancel\");\nconst defaultType = \"text\";\nconst defaultPlaceholder = \"\";\n\nexport interface PromptOptions {\n title?: string;\n message?: string;\n placeholder?: string;\n label?: string;\n type?: string;\n pattern?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n preventDismiss?: boolean;\n validate?: (val: string, input: Input) => Promise<any>;\n value?: string;\n preventAutoClose?: boolean;\n}\n\n@element(\"pl-prompt-dialog\")\nexport class PromptDialog extends Dialog<PromptOptions, any> {\n @property()\n confirmLabel: string = defaultConfirmLabel;\n @property()\n cancelLabel: string = defaultCancelLabel;\n @property()\n title: string = \"\";\n @property()\n message: string = \"\";\n @property()\n placeholder: string = defaultPlaceholder;\n @property()\n label: string = \"\";\n @property()\n preventDismiss: boolean = true;\n @property({ reflect: true })\n type: string = defaultType;\n @property()\n pattern: string = \"\";\n @property()\n validate?: (val: string, input: Input) => Promise<any>;\n @property()\n private _validationMessage: string = \"\";\n\n @query(\"#confirmButton\")\n private _confirmButton: LoadingButton;\n @query(\"pl-input\")\n private _input: Input;\n\n static styles = [\n ...Dialog.styles,\n css`\n h1 {\n display: block;\n text-align: center;\n }\n\n .message {\n margin: 20px;\n text-align: center;\n }\n\n pl-input {\n text-align: center;\n margin: 8px;\n }\n\n .validation-message {\n position: relative;\n margin-top: 15px;\n font-weight: bold;\n font-size: var(--font-size-small);\n color: var(--color-error);\n text-shadow: none;\n text-align: center;\n }\n `\n ];\n\n renderContent() {\n return html`\n <div class=\"content\">\n <h1 ?hidden=${!this.title}>${this.title}</h1>\n\n <div class=\"message\" ?hidden=${!this.message}>${this.message}</div>\n\n <pl-input\n class=\"tap\"\n .type=${this.type}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .pattern=${this.pattern}\n @enter=${() => this._confirmButton.click()}\n >\n </pl-input>\n\n <div class=\"actions\">\n <pl-loading-button\n id=\"confirmButton\"\n class=\"tap ${this.type === \"destructive\" ? \"negative\" : \"primary\"}\"\n @click=${() => this._confirm()}\n >\n ${this.confirmLabel}\n </pl-loading-button>\n\n <button class=\"tap\" @click=${() => this.done(null)} ?hidden=${!this.cancelLabel}>\n ${this.cancelLabel}\n </button>\n </div>\n </div>\n `;\n }\n\n renderAfter() {\n return html`\n <div class=\"validation-message\" slot=\"after\">${this._validationMessage}</div>\n `;\n }\n\n done(val: string | null) {\n this._validationMessage = \"\";\n super.done(val);\n }\n\n async show({\n title = \"\",\n message = \"\",\n placeholder = defaultPlaceholder,\n label = \"\",\n value = \"\",\n type = defaultType,\n pattern = \"\",\n confirmLabel = defaultConfirmLabel,\n cancelLabel = defaultCancelLabel,\n preventDismiss = true,\n preventAutoClose = false,\n validate\n }: PromptOptions = {}) {\n this.title = title;\n this.message = message;\n this.type = type;\n this.pattern = pattern;\n this.placeholder = placeholder;\n this.label = label;\n this.confirmLabel = confirmLabel;\n this.cancelLabel = cancelLabel;\n this.preventDismiss = preventDismiss;\n this.preventAutoClose = preventAutoClose;\n this.validate = validate;\n this._validationMessage = \"\";\n await this.updateComplete;\n this._confirmButton.stop();\n this._input.value = value;\n\n setTimeout(() => this._input.focus(), 300);\n\n return super.show();\n }\n\n private async _confirm() {\n let val = this._input.value;\n if (this.validate) {\n this._confirmButton.start();\n try {\n val = await this.validate(val, this._input);\n this._confirmButton.success();\n this.done(val);\n } catch (e) {\n this.rumble();\n this._validationMessage = e;\n this._confirmButton.fail();\n }\n } else {\n this.done(val);\n }\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { scanQR, stopScanQR } from \"@padloc/core/src/platform\";\nimport { mixins } from \"../styles\";\nimport { alert } from \"../lib/dialog\";\nimport { element, html, css } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { View } from \"./view\";\nimport \"./icon\";\n\n@element(\"pl-qr-dialog\")\nexport class QRDialog extends Dialog<void, string> {\n readonly hideApp = true;\n\n static styles = [\n ...Dialog.styles,\n ...View.styles,\n css`\n .inner {\n ${mixins.fullbleed()}\n border-radius: 0;\n max-width: 100%;\n display: flex;\n flex-direction: column;\n background: transparent;\n }\n\n .scrim {\n background: transparent;\n }\n\n .seeker {\n ${mixins.fullbleed()}\n width: 300px;\n height: 300px;\n border: solid 3px var(--color-negative);\n border-radius: var(--border-radius);\n margin: auto;\n }\n `\n ];\n\n renderContent() {\n return html`\n <header>\n <pl-icon></pl-icon>\n <div class=\"title flex\">\n ${$l(\"Scan QR Code\")}\n </div>\n <pl-icon class=\"tap\" icon=\"close\" @click=${() => this.done()}></pl-icon>\n </header>\n <canvas></canvas>\n <div class=\"seeker\"></div>\n `;\n }\n\n async show() {\n scanQR().then(\n (res: string) => this.done(res),\n (err: Error) => {\n this.done();\n alert($l(\"Failed to scan QR code. Error: \" + err.toString()), {\n type: \"warning\"\n });\n }\n );\n return super.show();\n }\n\n done(data?: string) {\n stopScanQR();\n super.done(data);\n }\n}\n","import { randomArt } from \"@padloc/core/src/randomart\";\nimport { getCryptoProvider as getProvider } from \"@padloc/core/src/platform\";\nimport { svg } from \"lit-html\";\nimport { until } from \"lit-html/directives/until\";\nimport { BaseElement, html, css, element, property } from \"./base\";\n\n@element(\"pl-fingerprint\")\nexport class Fingerprint extends BaseElement {\n @property()\n key!: Uint8Array;\n\n private async _grid() {\n const size = 11;\n const fingerprint = await getProvider().fingerprint(this.key);\n const art = randomArt(fingerprint, { width: size, height: size });\n const rects = [];\n for (const [x, line] of art.values.entries()) {\n for (const [y, val] of line.entries()) {\n rects.push(svg`<rect x=\"${x}\" y=\"${y}\" width=\"1\" height=\"1\" opacity=\"${val / 10}\" />`);\n }\n }\n return svg`\n <svg viewBox=\"0 0 ${size} ${size}\">\n ${rects}\n </svg>\n `;\n }\n\n shouldUpdate() {\n return !!this.key;\n }\n\n static styles = [\n css`\n :host {\n display: block;\n width: 100px;\n height: 100px;\n position: relative;\n overflow: hidden;\n background: var(--color-background);\n color: var(--color-foreground);\n }\n\n svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n pointer-events: none;\n }\n `\n ];\n\n render() {\n return html`\n ${until(this._grid())}\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { ErrorCode } from \"@padloc/core/src/error\";\nimport { MFAPurpose } from \"@padloc/core/src/mfa\";\nimport { app, router } from \"../globals\";\nimport { element, html, css, property, query } from \"./base\";\nimport { StartForm } from \"./start-form\";\nimport { Input } from \"./input\";\nimport { LoadingButton } from \"./loading-button\";\nimport { alert, choose, prompt } from \"../lib/dialog\";\nimport { passwordStrength } from \"../lib/util\";\n\n@element(\"pl-recover\")\nexport class Recover extends StartForm {\n @property()\n private _weakPassword = false;\n\n private get _email() {\n return router.params.email || \"\";\n }\n\n @query(\"#emailInput\")\n private _emailInput: Input;\n @query(\"#passwordInput\")\n private _passwordInput: Input;\n @query(\"#repeatPasswordInput\")\n private _repeatPasswordInput: Input;\n @query(\"#submitButton\")\n private _submitButton: LoadingButton;\n\n async reset() {\n this._passwordInput.value = \"\";\n this._repeatPasswordInput.value = \"\";\n this._submitButton.stop();\n super.reset();\n }\n\n static styles = [\n ...StartForm.styles,\n css`\n h1 {\n display: block;\n text-align: center;\n margin: 10px;\n }\n\n .title {\n width: 300px;\n margin: 10px auto 30px auto;\n font-size: var(--font-size-small);\n font-weight: bold;\n letter-spacing: 0.5px;\n padding: 0 10px;\n }\n\n #submitButton {\n margin-bottom: 30px;\n }\n\n .login {\n text-decoration: underline;\n cursor: pointer;\n }\n\n .recovery-notes {\n text-align: left;\n padding: 20px;\n margin: 10px;\n }\n\n .recovery-notes ul {\n list-style: disc;\n }\n\n .recovery-notes li {\n margin: 10px 20px 0 20px;\n background: transparent;\n border: none;\n }\n\n .back-button {\n display: flex;\n align-items: center;\n padding: 4px 8px 4px 4px;\n background: transparent;\n align-self: flex-start;\n margin-top: 20px;\n }\n\n .back-button:not:hover {\n opacity: 0.8;\n }\n\n .back-button pl-icon {\n width: 15px;\n height: 15px;\n margin-right: 4px;\n font-size: 0.8em;\n }\n `\n ];\n\n render() {\n return html`\n <div flex></div>\n\n <form>\n <button class=\"back-button tap animate\" type=\"button\" @click=${() => router.go(\"login\")}>\n <pl-icon icon=\"backward\"></pl-icon>\n <div>\n ${$l(\"Back To Login\")}\n </div>\n </button>\n\n <h1 class=\"animate\">${$l(\"Recover Account\")}</h1>\n\n <div class=\"title animate\">\n ${$l(\"Please enter your email address and new master password.\")}\n </div>\n\n <pl-input\n id=\"emailInput\"\n type=\"email\"\n required\n .label=${$l(\"Email Address\")}\n .value=${this._email}\n class=\"tiles-2 animate\"\n @enter=${() => this._submit()}\n >\n </pl-input>\n\n <pl-input\n id=\"passwordInput\"\n type=\"password\"\n required\n .label=${$l(\"New Master Password\")}\n class=\"tiles-2 animate\"\n @change=${() => this._updatePwdStrength()}\n @enter=${() => this._submit()}\n >\n </pl-input>\n\n <div class=\"error note\" ?hidden=${!this._weakPassword}>${$l(\"WARNING: Weak Password!\")}</div>\n\n <pl-input\n id=\"repeatPasswordInput\"\n type=\"password\"\n required\n .label=${$l(\"Repeat Master Password\")}\n class=\"tiles-2 animate\"\n @enter=${() => this._submit()}\n >\n </pl-input>\n\n <div class=\"error note animate recovery-notes\">\n ${$l(\n \"IMPORTANT, READ CAREFULLY: Padloc is designed in a way that makes it impossible \" +\n \"for us to access the data encrypted in any of your vaults even if we wanted to. \" +\n \"While this is essential to ensuring the security of your data, it also has the \" +\n \"following implications:\"\n )}\n <ul>\n <li>\n ${$l(\n \"Any data stored in your private vault can not be recovered and will be permantently lost.\"\n )}\n </li>\n <li>\n ${$l(\n \"All your organization memberships will be suspended temporarily until \" +\n \"confirmed by the organization owner.\"\n )}\n </li>\n <li>\n ${$l(\n \"All members of organizations you own will be suspended temporarily until \" +\n \"confirmed by you.\"\n )}\n </li>\n </ul>\n </div>\n\n <pl-loading-button id=\"submitButton\" class=\"tap animate\" @click=${() => this._submit()}>\n ${$l(\"Recover Account\")}\n </pl-loading-button>\n </form>\n\n <div flex></div>\n `;\n }\n\n private async _submit() {\n if (this._submitButton.state === \"loading\") {\n return;\n }\n\n this._emailInput.blur();\n this._passwordInput.blur();\n\n if (this._emailInput.invalid) {\n await alert(this._emailInput.validationMessage || $l(\"Please enter a valid email address!\"), {\n type: \"warning\"\n });\n return;\n }\n\n if (!this._passwordInput.value) {\n await alert($l(\"Please enter a master password!\"), { type: \"warning\" });\n return;\n }\n\n if (this._passwordInput.value !== this._repeatPasswordInput.value) {\n await alert($l(\"You didn't repeat your master password correctly. Try again!\"), { type: \"warning\" });\n return;\n }\n\n const email = this._emailInput.value;\n const password = this._passwordInput.value;\n\n const strength = await passwordStrength(password);\n if (strength.score < 2) {\n const choice = await choose(\n $l(\n \"The password you entered is weak which makes it easier for attackers to break \" +\n \"the encryption used to protect your data. Try to use a longer password or include a \" +\n \"variation of uppercase, lowercase and special characters as well as numbers!\"\n ),\n [$l(\"Learn More\"), $l(\"Choose Different Password\"), $l(\"Use Anyway\")],\n {\n type: \"warning\",\n title: $l(\"WARNING: Weak Password\"),\n hideIcon: true,\n preventDismiss: true\n }\n );\n switch (choice) {\n case 0:\n this._openPwdHowTo();\n return;\n case 1:\n this._passwordInput.focus();\n return;\n }\n }\n\n await app.requestMFACode(email, MFAPurpose.Recover);\n\n return this._recover(email, password);\n }\n\n private async _recover(email: string, password: string): Promise<void> {\n this._submitButton.start();\n\n const verify = await prompt(\n $l(\n \"To complete the account recovery process, please enter \" +\n \"the confirmation code sent to your email address!\"\n ),\n {\n placeholder: \"Enter Verification Code\",\n confirmLabel: \"Submit\",\n validate: async (code: string) => {\n try {\n return await app.retrieveMFAToken(email, code, MFAPurpose.Recover);\n } catch (e) {\n if (e.code === ErrorCode.MFA_TRIES_EXCEEDED) {\n alert($l(\"Maximum number of tries exceeded! Please resubmit and try again!\"), {\n type: \"warning\"\n });\n return \"\";\n }\n throw e.message || e.code || e.toString();\n }\n }\n }\n );\n\n if (!verify) {\n this._submitButton.stop();\n return;\n }\n\n try {\n await app.recoverAccount({ email, password, verify: verify.token });\n this._submitButton.success();\n await alert($l(\"Account recovery successful!\"), { type: \"success\" });\n router.go(\"login\");\n } catch (e) {\n this._submitButton.fail();\n throw e;\n }\n }\n\n private async _updatePwdStrength() {\n const pwd = this._passwordInput.value;\n const result = await passwordStrength(pwd);\n const score = result.score;\n this._weakPassword = score < 3;\n }\n\n private _openPwdHowTo() {\n window.open(\"https://padlock.io/howto/choose-master-password/\", \"_system\");\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { app } from \"../globals\";\nimport { element, html, css } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { composeEmail } from \"@padloc/core/src/platform\";\n\n@element(\"pl-report-errors-dialog\")\nexport class ReportErrorsDialog extends Dialog<void, void> {\n private _reportErrors() {\n const email = process.env.PL_SUPPORT_EMAIL || \"\";\n const subject = \"Padloc Error Report\";\n const message = `\n\n----- enter your comment above -----\n\nIMPORTANT: Please verify that the message below does not contain any sensitive data before sending this email!\n\nThe following errors occurred:\n\n${app.state._errors.join(\"\\n\\n\")}\n\nDevice Info:\n\n${JSON.stringify(app.state.device.toRaw(), null, 4)}\n`;\n composeEmail(email, subject, message);\n this._dismissErrors();\n }\n\n private _dismissErrors() {\n app.setState({ _errors: [] });\n this.done();\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .message {\n margin: 18px;\n }\n `\n ];\n\n renderContent() {\n return html`\n <header>\n <div class=\"title flex\">\n ${$l(\"Report Errors\")}\n </div>\n </header>\n\n <div class=\"content\">\n <div class=\"error note item\">${$l(\"{0} Errors Detected\", app.state._errors.length.toString())}</div>\n <div class=\"message\">\n ${$l(\n \"Padloc has registered {0} errors during your use of the app. \" +\n \"These errors may not have any impact on functionality and can often be ignored, \" +\n \"but reporting them may help us diagnose problems, identify possible failure \" +\n \"modes and generally improve the stability of the app.\",\n app.state._errors.length.toString()\n )}\n </div>\n <div class=\"actions\">\n <button class=\"primary tap\" @click=${this._reportErrors}>Report</button>\n <button class=\"tap\" @click=${this._dismissErrors}>Dismiss</button>\n </div>\n </div>\n `;\n }\n}\n","import { shared } from \"../styles\";\nimport { BaseElement, element, html, css, property, query, observe } from \"./base\";\n\n@element(\"pl-select\")\nexport class Select<T> extends BaseElement {\n @property()\n options: T[] = [];\n @property()\n selected: T;\n @property()\n label: string = \"\";\n @property()\n icon: string = \"\";\n\n @query(\"select\")\n private _select: HTMLSelectElement;\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n position: relative;\n padding: 0;\n height: var(--row-height);\n padding: 0 15px;\n background: var(--shade-2-color);\n border-radius: var(--border-radius);\n }\n\n select {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n cursor: pointer;\n }\n\n select.pad-left {\n padding-left: 30px;\n }\n\n option {\n background-color: var(--color-tertiary);\n color: var(--color-secondary);\n }\n\n label {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 13px;\n opacity: 0.5;\n transition: transform 0.2s, color 0.2s, opacity 0.5s;\n cursor: text;\n pointer-events: none;\n }\n\n label[float] {\n transform: scale(0.8) translate(0, -32px);\n color: var(--color-highlight);\n font-weight: bold;\n opacity: 1;\n }\n\n pl-icon {\n position: absolute;\n width: 20px;\n height: 20px;\n top: 0;\n bottom: 0;\n margin: auto;\n pointer-events: none;\n }\n\n pl-icon.right {\n right: 12px;\n }\n\n pl-icon.left {\n left: 14px;\n }\n `\n ];\n\n render() {\n const { options, selected, label, icon } = this;\n\n return html`\n ${icon\n ? html`\n <pl-icon icon=${icon} class=\"left\"></pl-icon>\n `\n : \"\"}\n\n <select\n id=\"selectEl\"\n class=\"${icon ? \"pad-left\" : \"\"}\"\n .selectedIndex=${options.indexOf(selected)}\n @change=${() => this._changed()}\n >\n ${options.map(\n o => html`\n <option>${o}</option>\n `\n )}\n </select>\n\n <pl-icon icon=\"dropdown\" class=\"right\"></pl-icon>\n\n <label for=\"selectEl\" float>${label}</label>\n `;\n }\n\n @observe(\"options\")\n @observe(\"selected\")\n async _propsChanged() {\n if (!this.selected) {\n this.selected = this.options[0];\n }\n await this.updateComplete;\n this._select.selectedIndex = this.options.indexOf(this.selected);\n }\n\n private _changed() {\n this.selected = this.options[this._select.selectedIndex];\n this.dispatch(\"change\");\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { BillingInfo } from \"@padloc/core/src/billing\";\nimport { composeEmail } from \"@padloc/core/src/platform\";\nimport { mixins } from \"../styles\";\nimport { alert, confirm, prompt, dialog } from \"../lib/dialog\";\nimport { app, router } from \"../globals\";\nimport { StateMixin } from \"../mixins/state\";\nimport { element, html, css, query, listen } from \"./base\";\nimport { View } from \"./view\";\nimport \"./icon\";\nimport { Slider } from \"./slider\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { ImportDialog } from \"./import-dialog\";\nimport { ExportDialog } from \"./export-dialog\";\nimport \"./billing-info\";\nimport \"./randomart\";\nimport \"./subscription\";\n\n@element(\"pl-settings\")\nexport class Settings extends StateMixin(View) {\n @query(\"input[type='file']\")\n private _fileInput: HTMLInputElement;\n\n @dialog(\"pl-import-dialog\")\n private _importDialog: ImportDialog;\n\n @dialog(\"pl-export-dialog\")\n private _exportDialog: ExportDialog;\n\n shouldUpdate() {\n return !!app.account;\n }\n\n static styles = [\n ...View.styles,\n css`\n :host {\n background: var(--color-quaternary);\n display: flex;\n flex-direction: column;\n }\n\n h3 {\n margin: 18px 8px 12px 8px;\n text-align: center;\n }\n\n .wrapper {\n max-width: 500px;\n margin: 0 auto;\n padding: 0 8px 8px 8px;\n }\n\n button {\n display: block;\n }\n\n .item {\n width: 100%;\n box-sizing: border-box;\n margin: 12px 0;\n }\n\n .account {\n font-size: 110%;\n display: flex;\n align-items: center;\n }\n\n pl-fingerprint {\n width: 60px;\n height: 60px;\n border-radius: 100%;\n border: solid 1px var(--border-color);\n margin: 15px;\n }\n\n .account-info {\n flex: 1;\n min-width: 0;\n padding-right: 18px;\n }\n\n .account-email {\n ${mixins.ellipsis()}\n }\n\n .account-email {\n font-weight: bold;\n ${mixins.ellipsis()}\n }\n\n .account pl-icon {\n width: 50px;\n height: 50px;\n margin: 5px;\n }\n `\n ];\n\n render() {\n const { settings, billingEnabled } = app;\n const account = app.account!;\n const billing = account.billing || new BillingInfo();\n\n return html`\n <header>\n <pl-icon class=\"tap menu-button\" icon=\"menu\" @click=${() => this.dispatch(\"toggle-menu\")}></pl-icon>\n\n <div class=\"title flex\">${$l(\"Settings\")}</div>\n\n <pl-icon></pl-icon>\n </header>\n\n <main>\n <div class=\"wrapper\">\n <h3>${$l(\"Profile\")}</h3>\n\n <div class=\"account item\">\n <pl-fingerprint .key=${account.publicKey}></pl-fingerprint>\n\n <div class=\"account-info\">\n <div class=\"account-name\">${account.name}</div>\n\n <div class=\"account-email\">${account.email}</div>\n </div>\n\n <pl-icon class=\"tap\" icon=\"edit\" @click=${() => this._editAccount()}></pl-icon>\n </div>\n\n <h3>${$l(\"Security\")}</h3>\n\n <button class=\"tap item\" @click=${() => this._logout()}>${$l(\"Log Out\")}</button>\n\n <button class=\"tap item\" @click=${() => this._changePassword()}>\n ${$l(\"Change Master Password\")}\n </button>\n\n ${billingEnabled\n ? html`\n <h3>${$l(\"Subscription\")}</h3>\n\n <pl-subscription class=\"item\"></pl-subscription>\n\n <h3>${$l(\"Billing Info\")}</h3>\n\n <pl-billing-info .billing=${billing} class=\"item\"></pl-billing-info>\n `\n : html``}\n\n <h3>${$l(\"Auto Lock\")}</h3>\n\n <pl-toggle-button\n id=\"autoLockButton\"\n .active=${settings.autoLock}\n .label=${$l(\"Lock Automatically\")}\n class=\"item tap\"\n reverse\n >\n </pl-toggle-button>\n\n <pl-slider\n id=\"autoLockDelaySlider\"\n .min=\"1\"\n .max=\"10\"\n .step=\"1\"\n .value=${settings.autoLockDelay}\n .unit=${$l(\" min\")}\n .label=${$l(\"After\")}\n ?hidden=${!settings.autoLock}\n class=\"item\"\n >\n </pl-slider>\n\n ${app.supportsBiometricUnlock\n ? html`\n <h3>${$l(\"Biometric Unlock\")}</h3>\n <pl-toggle-button\n id=\"biometricUnlockButton\"\n .active=${app.remembersMasterKey}\n .label=${$l(\"Enable Biometric Unlock\")}\n class=\"item tap\"\n reverse\n @change=${this._toggleBiometricUnlock}\n >\n </pl-toggle-button>\n `\n : \"\"}\n\n <h3>${$l(\"Import / Export\")}</h3>\n\n <button class=\"item tap\" @click=${() => this._import()}>${$l(\"Import...\")}</button>\n\n <button class=\"item tap\" @click=${() => this._export()}>${$l(\"Export...\")}</button>\n\n <h3>${$l(\"Support\")}</h3>\n\n <button @click=${() => this._openWebsite()} class=\"item tap\">${$l(\"Website\")}</button>\n\n <button @click=${() => this._sendMail()} class=\"item tap\">${$l(\"Contact Support\")}</button>\n\n <h3>${$l(\"Danger Zone\")}</h3>\n\n <button @click=${() => this._deleteAccount()} class=\"item tap negative\">\n ${$l(\"Delete Account\")}\n </button>\n </div>\n </main>\n\n <input type=\"file\" accept=\"text/plain,.csv,.pls,.set,.pbes2\" hidden @change=${() => this._importFile()} />\n `;\n }\n\n @listen(\"change\")\n _updateSettings() {\n app.setSettings({\n autoLock: (this.$(\"#autoLockButton\") as ToggleButton).active,\n autoLockDelay: (this.$(\"#autoLockDelaySlider\") as Slider).value\n });\n }\n\n private _editAccount() {\n const account = app.account!;\n prompt(\"\", {\n title: $l(\"Edit Profile\"),\n confirmLabel: $l(\"Save\"),\n value: account.name,\n label: $l(\"Name\"),\n validate: async (name: string) => {\n if (!name) {\n throw $l(\"Please enter a name!\");\n }\n if (name !== account.name) {\n await app.updateAccount(async account => (account.name = name));\n }\n return name;\n }\n });\n }\n\n private async _logout() {\n const confirmed = await confirm($l(\"Do you really want to log out?\"), $l(\"Log Out\"));\n if (confirmed) {\n app.logout();\n }\n }\n\n //* Opens the change password dialog and resets the corresponding input elements\n private async _changePassword() {\n const success = await prompt($l(\"Please enter your current password!\"), {\n title: $l(\"Change Master Password\"),\n label: $l(\"Enter Current Password\"),\n type: \"password\",\n validate: async pwd => {\n try {\n await app.account!.unlock(pwd);\n } catch (e) {\n throw $l(\"Wrong password! Please try again!\");\n }\n\n return pwd;\n }\n });\n\n if (!success) {\n return;\n }\n\n const newPwd = await prompt($l(\"Now choose a new master password!\"), {\n title: $l(\"Change Master Password\"),\n label: $l(\"Enter New Password\"),\n type: \"password\",\n validate: async (val: string) => {\n if (val === \"\") {\n throw $l(\"Please enter a password!\");\n }\n return val;\n }\n });\n\n if (newPwd === null) {\n return;\n }\n\n const confirmed = await prompt($l(\"Please confirm your new password!\"), {\n title: $l(\"Change Master Password\"),\n label: $l(\"Repeat New Password\"),\n type: \"password\",\n validate: async pwd => {\n if (pwd !== newPwd) {\n throw \"Wrong password! Please try again!\";\n }\n\n return pwd;\n }\n });\n\n if (!confirmed) {\n return;\n }\n\n await app.changePassword(newPwd);\n alert($l(\"Master password changed successfully.\"), { type: \"success\" });\n }\n\n private _openWebsite() {\n window.open(\"https://padloc.app\", \"_system\");\n }\n\n private _sendMail() {\n const email = process.env.PL_SUPPORT_EMAIL || \"\";\n const subject = \"Padloc Support Request\";\n const message = `\n\n----- enter your message above -----\n\nNOTE: Below we have included some information about your device that may help\nus analyse any problems you may be having. If you're not comfortable sharing\nthis data simply delete this of the email!\n\nDevice Info: ${JSON.stringify(app.state.device.toRaw(), null, 4)}\n`;\n\n composeEmail(email, subject, message);\n }\n\n private async _import() {\n this._fileInput.click();\n }\n\n private async _importFile() {\n const file = this._fileInput.files![0];\n const reader = new FileReader();\n reader.onload = async () => {\n await this._importDialog.show(reader.result as string);\n this._fileInput.value = \"\";\n };\n\n reader.readAsText(file);\n }\n\n private _export() {\n this._exportDialog.show();\n }\n\n private async _deleteAccount() {\n const success = await prompt($l(\"Please enter your master password to proceed.\"), {\n title: $l(\"Delete Account\"),\n label: $l(\"Enter Master Password\"),\n type: \"password\",\n validate: async pwd => {\n try {\n await app.account!.unlock(pwd);\n } catch (e) {\n throw $l(\"Wrong password! Please try again!\");\n }\n\n return pwd;\n }\n });\n\n if (!success) {\n return;\n }\n\n const deleted = await prompt(\n $l(\n \"Are you sure you want to delete this account? \" +\n \"All associated vaults and the data within them will be lost and any active subscriptions will be canceled immediately. \" +\n \"This action can not be undone!\"\n ),\n {\n type: \"destructive\",\n title: $l(\"Delete Account\"),\n confirmLabel: $l(\"Delete\"),\n placeholder: $l(\"Type 'DELETE' to confirm\"),\n validate: async val => {\n if (val !== \"DELETE\") {\n throw $l(\"Type 'DELETE' to confirm\");\n }\n\n try {\n await app.deleteAccount();\n } catch (e) {\n throw e.message || $l(\"Something went wrong. Please try again later!\");\n }\n\n return val;\n }\n }\n );\n\n if (deleted) {\n router.go(\"\");\n }\n }\n\n private async _toggleBiometricUnlock(e: Event) {\n e.stopPropagation();\n const toggle = e.target as ToggleButton;\n console.log(toggle.active);\n if (toggle.active) {\n this.dispatch(\"enable-biometric-auth\");\n } else {\n const confirmed = await confirm($l(\"Are you sure you want to disable biometric unlock?\"));\n if (confirmed) {\n await app.forgetMasterKey();\n } else {\n toggle.active = true;\n }\n }\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { ErrorCode } from \"@padloc/core/src/error\";\nimport { generatePassphrase } from \"@padloc/core/src/diceware\";\nimport { MFAPurpose } from \"@padloc/core/src/mfa\";\nimport { passwordStrength, isTouch } from \"../lib/util\";\nimport { app, router } from \"../globals\";\nimport { element, html, css, property, query } from \"./base\";\nimport { StartForm } from \"./start-form\";\nimport { Input } from \"./input\";\nimport { PasswordInput } from \"./password-input\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Generator } from \"./generator\";\nimport { alert, choose, prompt, dialog } from \"../lib/dialog\";\nimport { mixins } from \"../styles\";\nimport \"./logo\";\n\nconst steps = [\"\", \"verify\", \"password\"];\n\n@element(\"pl-signup\")\nexport class Signup extends StartForm {\n protected get _verificationToken() {\n return router.params.verify || router.params.token || \"\";\n }\n\n @property()\n private _password: string = \"\";\n\n private get _email() {\n return router.params.email || \"\";\n }\n\n private get _name() {\n return router.params.name || \"\";\n }\n\n private get _invite() {\n const inviteString = router.params.invite;\n if (inviteString) {\n const [org, id] = inviteString.split(\",\");\n return { org, id };\n } else {\n return undefined;\n }\n }\n\n private _step = \"start\";\n\n @query(\"#emailInput\")\n private _emailInput: Input;\n @query(\"#nameInput\")\n private _nameInput: Input;\n @query(\"#codeInput\")\n private _codeInput: Input;\n @query(\"#repeatPasswordInput\")\n private _repeatPasswordInput: PasswordInput;\n @query(\"#submitEmailButton\")\n private _submitEmailButton: LoadingButton;\n @query(\"#verifyEmailButton\")\n private _verifyEmailButton: LoadingButton;\n @query(\"#submitPasswordButton\")\n private _submitPasswordButton: LoadingButton;\n\n @dialog(\"pl-generator\")\n private _generator: Generator;\n\n async reset() {\n this._repeatPasswordInput.value = \"\";\n this._codeInput.value = \"\";\n this._submitEmailButton.stop();\n this._verifyEmailButton.stop();\n this._submitPasswordButton.stop();\n setTimeout(() => (this._logo.reveal = true), 500);\n }\n\n async goToStep(step = \"\") {\n const i = steps.indexOf(step);\n if (i === -1) {\n return;\n }\n const iPrev = steps.indexOf(this._step);\n\n const wrappers = this.$$(\".wrapper\");\n const wrapper = wrappers[i] as HTMLElement;\n const prevWrapper = wrappers[iPrev] as HTMLElement;\n wrapper.removeAttribute(\"hidden\");\n this._animateIn(wrapper.querySelectorAll(\".animate\"));\n if (prevWrapper && prevWrapper !== wrapper) {\n this._animateOut(prevWrapper.querySelectorAll(\".animate\"));\n setTimeout(() => prevWrapper.setAttribute(\"hidden\", \"\"), 1000);\n }\n this._step = step;\n\n if (step === \"password\" && !this._password) {\n this._generatePassphrase();\n }\n\n setTimeout(() => this.requestUpdate(), 10);\n }\n\n private async _generatePassphrase() {\n this._password = await generatePassphrase(4, \" \", [app.state.device.locale]);\n const wrapper = this.$(\".master-password\");\n wrapper.classList.add(\"reveal\");\n setTimeout(() => wrapper.classList.remove(\"reveal\"), 2000);\n }\n\n static styles = [\n ...StartForm.styles,\n css`\n h1 {\n display: block;\n text-align: center;\n margin: 20px 10px;\n }\n\n .master-password-form {\n max-width: 500px;\n }\n\n .title {\n max-width: 310px;\n margin: 30px auto;\n font-size: var(--font-size-small);\n font-weight: bold;\n letter-spacing: 0.5px;\n padding: 0 10px;\n }\n\n #submitButton {\n margin-bottom: 30px;\n }\n\n .login-wrapper {\n font-size: var(--font-size-small);\n padding: 8px;\n margin: 8px 0;\n opacity: 0.7;\n }\n\n .link {\n text-decoration: underline;\n cursor: pointer;\n font-weight: bold;\n }\n\n pl-input:not([focused]) + .hint {\n color: rgba(0, 0, 0, 0.2);\n text-shadow: none;\n }\n\n .master-password {\n position: relative;\n background: var(--shade-2-color);\n font-family: var(--font-family-mono);\n font-size: 120%;\n padding: 20px;\n overflow-wrap: break-word;\n }\n\n .master-password-cover {\n ${mixins.fullbleed()}\n height: 2em;\n line-height: 2em;\n margin: auto;\n font-weight: bold;\n text-shadow: none;\n color: rgba(0, 0, 0, 0.3);\n }\n\n .master-password:hover {\n background: var(--shade-3-color);\n }\n\n .master-password > * {\n transition: transform 0.2s cubic-bezier(1, -0.3, 0, 1.3), opacity 0.2s;\n }\n\n .master-password:not(:hover):not(.reveal) .master-password-value,\n .master-password:hover .master-password-cover,\n .master-password.reveal .master-password-cover {\n opacity: 0;\n transform: scale(0);\n }\n\n .hint.subtle {\n opacity: 0.5;\n }\n\n [focused] + .hint.subtle {\n opacity: 1;\n }\n\n .password-actions {\n margin: -20px 0 30px 0;\n }\n\n .password-action {\n padding: 6px 10px;\n margin: 0 4px;\n font-size: var(--font-size-tiny);\n font-weight: 600;\n }\n `\n ];\n\n render() {\n return html`\n <div class=\"wrapper\" hidden>\n <div flex></div>\n\n <form>\n <pl-logo class=\"animate\"></pl-logo>\n\n <div class=\"title animate\">\n ${$l(\"Welcome to Padloc! Let's get you started by creating an account for you.\")}\n </div>\n\n <pl-input\n id=\"emailInput\"\n type=\"email\"\n required\n .label=${$l(\"Email Address\")}\n .value=${this._email}\n class=\"tiles-2 animate\"\n @enter=${() => this._submitEmail()}\n >\n </pl-input>\n\n <div class=\"hint animate\">\n ${$l(\n \"Your email address serves as your username and allows us to get in touch with you. \" +\n \"Don't worry, we would never send you any spam!\"\n )}\n </div>\n\n <pl-input\n id=\"nameInput\"\n .label=${$l(\"Your Name\")}\n .value=${this._name}\n class=\"tiles-2 animate\"\n @enter=${() => this._submitEmail()}\n >\n </pl-input>\n\n <div class=\"hint animate\">\n ${$l(\"What should we call you?\")}\n </div>\n\n <pl-loading-button\n id=\"submitEmailButton\"\n class=\"tap tiles-3 animate\"\n @click=${() => this._submitEmail()}\n >\n ${$l(\"Continue\")}\n </pl-loading-button>\n </form>\n\n <div flex></div>\n\n <div class=\"login-wrapper animate\">\n ${$l(\"Already have an account?\")}\n <span class=\"link\" @click=${() => router.go(\"login\")}>${$l(\"Sign In\")}</span>\n </div>\n </div>\n\n <div class=\"wrapper\" hidden>\n <div flex></div>\n\n <form>\n <h1 class=\"animate\">${$l(\"You've Got Mail!\")}</h1>\n\n <div class=\"hint animate\">\n ${$l(\n \"To verify your email address, please enter the confirmation code we sent to {0}.\",\n this._email\n )}\n </div>\n\n <pl-input\n id=\"codeInput\"\n type=\"number\"\n pattern=\"[0-9]*\"\n required\n .label=${$l(\"Confirmation Code\")}\n class=\"tiles-2 animate\"\n @enter=${() => this._verifyEmail()}\n >\n </pl-input>\n\n <pl-loading-button\n id=\"verifyEmailButton\"\n class=\"tap tiles-3 animate\"\n @click=${() => this._verifyEmail()}\n >\n ${$l(\"Continue\")}\n </pl-loading-button>\n </form>\n\n <div flex></div>\n </div>\n\n <div class=\"wrapper\" hidden>\n <div flex></div>\n\n <form class=\"master-password-form\">\n <h1 class=\"animate\">\n <div>${$l(\"Say hello to your\")}</div>\n <strong>${$l(\"Master Password\")}</strong>\n </h1>\n\n <div class=\"hint animate\">\n ${$l(\n \"It's the last password you'll ever have to remember! \" +\n \"Please memorize it and never reveal it to anyone (not even us)! \" +\n \"We recommend writing it down on a piece of paper and \" +\n \"storing it somewhere safe, at least until you have it safely memorized.\"\n )}\n </div>\n\n <div class=\"master-password animate\">\n <div class=\"master-password-value\">\n <span>${this._password}</span>\n </div>\n\n <div class=\"master-password-cover\">\n ${isTouch() ? $l(\"[Tap To Reveal]\") : $l(\"[Hover To Reveal]\")}\n </div>\n </div>\n\n <div class=\"hint animate\">\n ${$l(\n \"This random passphrase was generated just for you and is designed \" +\n \"to be both secure and easy to remember. Don't like it?\"\n )}\n </div>\n\n <div class=\"password-actions animate\">\n <button type=\"button\" class=\"password-action tap\" @click=${this._generatePassphrase}>\n ${$l(\"Try Another One\")}\n </button>\n or\n <button type=\"button\" class=\"password-action tap\" @click=${this._editMasterPassword}>\n ${$l(\"Choose Your Own\")}\n </button>\n </div>\n\n <pl-password-input\n id=\"repeatPasswordInput\"\n required\n .label=${$l(\"Repeat Master Password\")}\n class=\"tiles-2 animate repeat-master-password\"\n @enter=${() => this._submitPassword()}\n >\n </pl-password-input>\n\n <pl-loading-button\n id=\"submitPasswordButton\"\n class=\"tap tiles-3 animate\"\n @click=${() => this._submitPassword()}\n >\n ${$l(\"Continue\")}\n </pl-loading-button>\n </form>\n\n <div flex></div>\n </div>\n `;\n }\n\n private async _submitEmail() {\n if (this._submitEmailButton.state === \"loading\") {\n return;\n }\n\n if (!this._emailInput.reportValidity()) {\n return;\n }\n\n const email = this._emailInput.value;\n const name = this._nameInput.value;\n\n if (this._verificationToken) {\n router.go(\"signup/password\", { ...router.params, email, name });\n } else {\n this._submitEmailButton.start();\n try {\n await app.requestMFACode(email, MFAPurpose.Signup);\n this._submitEmailButton.success();\n router.go(\"signup/verify\", { ...router.params, email, name });\n } catch (e) {\n this._submitEmailButton.fail();\n throw e;\n }\n }\n }\n\n private async _verifyEmail() {\n if (this._verifyEmailButton.state === \"loading\") {\n return;\n }\n\n this._verifyEmailButton.start();\n try {\n const verify = await app.retrieveMFAToken(this._email, this._codeInput.value, MFAPurpose.Signup);\n\n if (verify.hasAccount) {\n this._verifyEmailButton.stop();\n this._accountExists();\n return;\n }\n\n if (verify.hasLegacyAccount) {\n const migrated = await this._migrateAccount(\n this._email,\n \"\",\n verify.legacyToken!,\n verify.token,\n this._name\n );\n if (migrated) {\n this._verifyEmailButton.success();\n } else {\n const { verify, ...params } = router.params;\n router.go(\"signup\", params);\n this._emailInput.focus();\n }\n return;\n }\n\n router.go(\"signup/password\", { ...router.params, token: verify.token });\n this._verifyEmailButton.success();\n } catch (e) {\n if (e.code === ErrorCode.MFA_TRIES_EXCEEDED) {\n alert($l(\"Maximum number of tries exceeded! Please resubmit and try again!\"), { type: \"warning\" });\n router.go(\"signup\");\n return;\n }\n this._verifyEmailButton.fail();\n throw e;\n }\n }\n\n private async _submitPassword() {\n if (this._submitPasswordButton.state === \"loading\") {\n return;\n }\n\n if (this._password !== this._repeatPasswordInput.value) {\n await alert($l(\"You didn't repeat your master password correctly. Try again!\"), { type: \"warning\" });\n return;\n }\n\n const email = this._email;\n const name = this._name;\n const password = this._password;\n\n this._submitPasswordButton.start();\n\n try {\n await app.signup({ email, password, name, verify: this._verificationToken, invite: this._invite });\n this._submitPasswordButton.success();\n this.done();\n } catch (e) {\n this._submitPasswordButton.fail();\n switch (e.code) {\n case ErrorCode.ACCOUNT_EXISTS:\n this._accountExists();\n return;\n default:\n throw e;\n }\n }\n\n this._password = \"\";\n }\n\n private async _accountExists() {\n const choice = await choose(\n $l(\"An account with this email address already exists!\"),\n [$l(\"Login\"), $l(\"Change Email\")],\n { type: \"warning\" }\n );\n if (choice === 0) {\n router.go(\"login\");\n } else {\n const { verify, ...params } = router.params;\n router.go(\"signup\", params);\n this._emailInput.focus();\n }\n }\n\n private async _editMasterPassword(): Promise<void> {\n const choice = await choose(\n $l(\"We recommend using a randomly generated password that is both strong and easy to remember.\"),\n [$l(\"Keep This One\"), $l(\"Generate Another\"), $l(\"Choose My Own\")],\n { title: $l(\"Want A Different Master Password?\") }\n );\n\n let newPwd;\n\n switch (choice) {\n case 0:\n break;\n case 1:\n newPwd = await this._generator.show();\n break;\n case 2:\n newPwd = await prompt(\n $l(\"We recommend using a randomly generated password that is both strong and easy to remember.\"),\n { title: $l(\"Choose Own Master Password\"), label: $l(\"Enter Master Password\"), type: \"password\" }\n );\n break;\n }\n\n if (newPwd) {\n const strength = await passwordStrength(newPwd);\n\n if (strength.score < 2) {\n const choice = await choose(\n $l(\n \"The password you entered is weak which makes it easier for attackers to break \" +\n \"the encryption used to protect your data. Try to use a longer password or include a \" +\n \"variation of uppercase, lowercase and special characters as well as numbers!\"\n ),\n [$l(\"Choose Different Password\"), $l(\"Use Anyway\")],\n {\n type: \"warning\",\n title: $l(\"WARNING: Weak Password\"),\n hideIcon: true,\n preventDismiss: true\n }\n );\n if (choice === 0) {\n return this._editMasterPassword();\n }\n }\n\n this._password = newPwd;\n }\n }\n}\n","import { BaseElement, element, html, css, property, query } from \"./base\";\nimport { shared } from \"../styles\";\n\n@element(\"pl-slider\")\nexport class Slider extends BaseElement {\n @property() min: number = 1;\n @property() max: number = 10;\n @property() value: number = this.min;\n @property() unit: string = \"\";\n @property() step: number = 1;\n @property() label: string = \"\";\n @property() hideValue: boolean = false;\n\n @query(\"input\") private _input: HTMLInputElement;\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n align-items: center;\n height: var(--row-height);\n padding: 0 15px;\n font-size: inherit;\n --track-color: var(--slider-track-color, rgba(0, 0, 0, 0.1));\n --knob-color: var(--slider-knob-color, var(--color-highlight));\n --track-size: var(--slider-track-size, 2px);\n --knob-size: var(--slider-knob-size, 25px);\n }\n\n input[type=\"range\"] {\n -webkit-appearance: none;\n width: 100%;\n margin: 0;\n padding: 0;\n flex: 1;\n height: auto;\n min-height: var(--knob-size);\n }\n\n input[type=\"range\"]:focus {\n outline: none;\n }\n\n label {\n margin-right: 10px;\n }\n\n label:empty {\n display: none;\n }\n\n .value-display {\n margin-left: 10px;\n }\n\n input[type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n cursor: pointer;\n border-radius: 100%;\n height: 0.2em;\n background: var(--shade-2);\n }\n\n input[type=\"range\"]::-webkit-slider-thumb {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: var(--knob-size);\n width: var(--knob-size);\n margin-top: calc(0.5 * var(--track-size) - 0.5 * var(--knob-size));\n position: relative;\n border-radius: 100%;\n background: var(--knob-color);\n cursor: pointer;\n border: none;\n box-sizing: border-box;\n background-clip: content-box;\n }\n\n input[type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(1.1);\n }\n\n input[type=\"range\"]::-moz-range-track {\n width: 100%;\n height: var(--track-size);\n cursor: pointer;\n background: var(--track-color);\n border-radius: 100%;\n }\n\n input[type=\"range\"]::-moz-range-thumb {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: var(--knob-size);\n width: var(--knob-size);\n margin-top: calc(0.5 * var(--track-size) - 0.5 * var(--knob-size));\n position: relative;\n border-radius: 100%;\n background: var(--knob-color);\n cursor: pointer;\n border: none;\n box-sizing: border-box;\n background-clip: content-box;\n }\n\n input[type=\"range\"]:active::-moz-range-thumb {\n transform: scale(1.1);\n }\n `\n ];\n\n render() {\n return html`\n <label>${this.label}</label>\n\n <input\n type=\"range\"\n .value=${this.value}\n .min=${this.min}\n .max=${this.max}\n .step=${this.step}\n @input=${() => this._inputChange()}\n />\n\n <span class=\"value-display\" ?hidden=${this.hideValue}>${this.value}${this.unit}</span>\n `;\n }\n\n private _inputChange() {\n const prev = this.value;\n this.value = parseFloat(this._input.value);\n this.dispatch(\"change\", { prev: prev, value: this.value }, true, true);\n }\n}\n","import { BaseElement, element, html, css, svg, property, query, observe } from \"./base\";\n\n@element(\"pl-spinner\")\nexport class Spinner extends BaseElement {\n static styles = [\n css`\n @keyframes spin {\n from {\n stroke-dashoffset: 240;\n }\n\n to {\n stroke-dashoffset: 40;\n }\n }\n\n @keyframes rotate {\n to {\n transform: rotate(360deg);\n }\n }\n\n :host {\n display: block;\n width: 40px;\n height: 40px;\n position: relative;\n transition: opacity 0.3s;\n will-change: opacity;\n }\n\n :host(:not([active])) {\n opacity: 0;\n }\n\n svg {\n width: 100%;\n height: 100%;\n }\n\n circle {\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-width: 10;\n stroke-dasharray: 252;\n transform-origin: center center;\n will-change: transform;\n }\n\n circle.spinning {\n animation: spin 1.5s cubic-bezier(0.44, 0.22, 0.64, 0.86) alternate infinite,\n rotate linear 1.2s infinite;\n }\n `\n ];\n\n @property({ reflect: true })\n active: boolean = false;\n\n @query(\"circle\")\n private _circle: SVGCircleElement;\n\n private _stopTimeout: number;\n\n @observe(\"active\")\n _activeChanged() {\n clearTimeout(this._stopTimeout);\n\n if (this.active) {\n this._circle.classList.add(\"spinning\");\n } else {\n this._stopTimeout = window.setTimeout(() => this._circle.classList.remove(\"spinning\"), 300);\n }\n }\n\n render() {\n return html`\n ${svg`\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" r=\"40\" />\n </svg>\n `}\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { GetLegacyDataParams } from \"@padloc/core/src/api\";\nimport { VaultItem } from \"@padloc/core/src/item\";\nimport { mixins, shared } from \"../styles\";\nimport { BaseElement, css, query } from \"./base\";\nimport { animateElement, animateCascade } from \"../lib/animation\";\nimport { alert, confirm, prompt } from \"../lib/dialog\";\nimport { importLegacyContainer } from \"../lib/import\";\nimport { app } from \"../globals\";\nimport { Logo } from \"./logo\";\nimport \"./icon\";\n\nconst styles = css`\n @keyframes reveal {\n from {\n transform: translate(0, 30px);\n opacity: 0;\n }\n }\n\n @keyframes fade {\n to {\n transform: translate(0, -200px);\n opacity: 0;\n }\n }\n\n :host,\n .wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n ${mixins.fullbleed()}\n ${mixins.scroll()}\n }\n\n form {\n width: 100%;\n max-width: 400px;\n }\n\n form > * {\n border-radius: 8px;\n margin: 12px;\n }\n\n pl-logo {\n margin: 40px auto 30px auto;\n }\n\n pl-loading-button {\n overflow: hidden;\n font-weight: bold;\n }\n\n .hint {\n font-size: var(--font-size-small);\n box-sizing: border-box;\n padding: 0 10px;\n margin-bottom: 30px;\n transition: color 0.2s;\n }\n\n .hint.warning {\n color: #ffc107;\n font-weight: bold;\n margin: 0;\n padding: 0;\n text-shadow: none;\n }\n`;\n\nexport abstract class StartForm extends BaseElement {\n static styles = [shared, styles];\n\n protected _verificationToken: string;\n\n @query(\"pl-logo\")\n protected _logo: Logo;\n\n protected _animateIn(nodes: Iterable<Node | Element>) {\n return animateCascade(nodes, {\n animation: \"reveal\",\n duration: 1000,\n fullDuration: 1500,\n initialDelay: 300,\n fill: \"backwards\",\n clear: 3000\n });\n }\n\n protected _animateOut(nodes: Iterable<Node | Element>) {\n animateCascade(nodes, {\n animation: \"fade\",\n duration: 400,\n fullDuration: 600,\n initialDelay: 0,\n fill: \"forwards\",\n easing: \"cubic-bezier(1, 0, 0.2, 1)\",\n clear: 3000\n });\n }\n\n reset() {\n this._animateIn(this.$$(\".animate\"));\n this.requestUpdate();\n this._logo && setTimeout(() => (this._logo.reveal = true), 500);\n }\n\n done() {\n this._animateOut(this.$$(\".animate\"));\n }\n\n rumble() {\n animateElement(this.$(\"form\"), { animation: \"rumble\", duration: 200, clear: true });\n }\n\n protected async _migrateAccount(\n email: string,\n password: string,\n legacyToken: string,\n signupToken: string,\n name = \"\"\n ): Promise<boolean> {\n const choice = await alert(\n $l(\n \"You don't have a Padloc 3 account yet but we've found \" +\n \"an account from an older version. \" +\n \"Would you like to migrate your account to Padloc 3 now?\"\n ),\n {\n title: \"Account Migration\",\n icon: \"user\",\n options: [$l(\"Migrate\"), $l(\"Learn More\"), $l(\"Cancel\")]\n }\n );\n\n if (choice === 1) {\n window.open(\"https://padloc.app/help/migrate-v3\", \"_system\");\n return this._migrateAccount(email, password, legacyToken, signupToken, name);\n } else if (choice === 2) {\n return false;\n }\n\n const legacyData = await app.api.getLegacyData(\n new GetLegacyDataParams({\n email,\n verify: legacyToken\n })\n );\n\n let items: VaultItem[] | null = null;\n try {\n if (!password) {\n throw \"No password provided\";\n }\n await legacyData.unlock(password);\n items = await importLegacyContainer(legacyData);\n } catch (e) {\n password = await prompt($l(\"Please enter your master password!\"), {\n title: $l(\"Migrating Account\"),\n placeholder: $l(\"Enter Master Password\"),\n confirmLabel: $l(\"Submit\"),\n type: \"password\",\n preventAutoClose: true,\n validate: async (password: string) => {\n try {\n await legacyData.unlock(password);\n items = await importLegacyContainer(legacyData);\n } catch (e) {\n throw $l(\"Wrong password! Please try again!\");\n }\n return password;\n }\n });\n }\n\n if (items && password) {\n await app.signup({ email, password, verify: signupToken, name });\n await app.addItems(items, app.mainVault!);\n const deleteLegacy = await confirm(\n $l(\n \"Your account and all associated data was migrated successfully! Do you want to delete your old account now?\"\n ),\n $l(\"Yes\"),\n $l(\"No\"),\n { title: $l(\"Delete Legacy Account\"), icon: \"delete\", preventAutoClose: true }\n );\n\n if (deleteLegacy) {\n await app.api.deleteLegacyAccount();\n }\n\n await alert(\n $l(\n \"All done! Please note that you won't be able to access your Padloc 3 account \" +\n \"with older versions of the app, so please make sure you have the latest version installed \" +\n \"on all your devices! (You can find download links for all platforms at \" +\n \"https://padloc.app/downloads/). Enjoy using Padloc 3!\"\n ),\n {\n title: $l(\"Migration Complete\"),\n type: \"success\"\n }\n );\n return true;\n } else {\n alert($l(\"Unfortunately we could not complete migration of your data.\"), {\n type: \"warning\"\n });\n return false;\n }\n }\n}\n","import { app } from \"../globals\";\nimport { shared, mixins } from \"../styles\";\nimport { StateMixin } from \"../mixins/state\";\nimport { BaseElement, element, html, css, property, query } from \"./base\";\nimport { Unlock } from \"./unlock\";\nimport { Login } from \"./login\";\nimport { Signup } from \"./signup\";\nimport { Recover } from \"./recover\";\n\n@element(\"pl-start\")\nexport class Start extends StateMixin(BaseElement) {\n @property({ reflect: true })\n open: boolean = false;\n\n @query(\"pl-unlock\")\n private _unlockForm: Unlock;\n @query(\"pl-login\")\n private _loginForm: Login;\n @query(\"pl-signup\")\n private _signupForm: Signup;\n @query(\"pl-recover\")\n private _recoverForm: Recover;\n\n async unlock() {\n await this.updateComplete;\n this._showForm(this._unlockForm);\n }\n\n async login() {\n await this.updateComplete;\n this._showForm(this._loginForm);\n }\n\n async signup(step?: string) {\n await this.updateComplete;\n this._signupForm.goToStep(step);\n this._showForm(this._signupForm);\n }\n\n async recover() {\n await this.updateComplete;\n this._showForm(this._recoverForm);\n }\n\n stateChanged() {\n this.open = !app.state.locked;\n }\n\n async _showForm(form: Unlock | Login | Signup | Recover) {\n for (const f of [this._unlockForm, this._loginForm, this._signupForm, this._recoverForm]) {\n if (f === form) {\n f.classList.add(\"showing\");\n f.reset();\n } else {\n f.classList.remove(\"showing\");\n f.done();\n }\n }\n }\n\n static styles = [\n shared,\n css`\n :host {\n --color-background: var(--color-primary);\n --color-foreground: var(--color-tertiary);\n --color-highlight: var(--color-secondary);\n color: var(--color-foreground);\n display: flex;\n flex-direction: column;\n z-index: 5;\n text-align: center;\n text-shadow: rgba(0, 0, 0, 0.15) 0 2px 0;\n background: linear-gradient(180deg, #59c6ff 0%, #077cb9 100%);\n transition: transform 0.4s cubic-bezier(1, 0, 0.2, 1);\n ${mixins.fullbleed()}\n ${mixins.scroll()}\n }\n\n main {\n ${mixins.fullbleed()}\n background: transparent;\n min-height: 510px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n .form:not(.showing) {\n opacity: 0;\n transition: opacity 1s;\n pointer-events: none;\n }\n\n :host([open]) {\n pointer-events: none;\n }\n\n :host([open]) {\n transition-delay: 0.4s;\n transform: translate3d(0, -100%, 0);\n }\n `\n ];\n\n render() {\n return html`\n <pl-unlock class=\"form\"></pl-unlock>\n\n <pl-login class=\"form\"></pl-login>\n\n <pl-signup class=\"form\"></pl-signup>\n\n <pl-recover class=\"form\"></pl-recover>\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Org } from \"@padloc/core/src/org\";\nimport { PlanType, SubscriptionStatus, UpdateBillingParams } from \"@padloc/core/src/billing\";\nimport { shared } from \"../styles\";\nimport { dialog, alert, choose, confirm } from \"../lib/dialog\";\nimport { fileSize, loadScript } from \"../lib/util\";\nimport { app } from \"../globals\";\nimport { StateMixin } from \"../mixins/state\";\nimport { BaseElement, element, property, html, css, query } from \"./base\";\nimport \"./icon\";\nimport { LoadingButton } from \"./loading-button\";\nimport { UpdateSubscriptionDialog } from \"./update-subscription-dialog\";\nimport { BillingDialog } from \"./billing-dialog\";\n\n@element(\"pl-subscription\")\nexport class OrgSubscription extends StateMixin(BaseElement) {\n @property()\n org: Org | null = null;\n\n @dialog(\"pl-update-subscription-dialog\")\n private _updateSubscriptionDialog: UpdateSubscriptionDialog;\n\n @dialog(\"pl-billing-dialog\")\n private _billingDialog: BillingDialog;\n\n @query(\"#editButton\")\n private _editButton: LoadingButton;\n\n @query(\"#paymentButton\")\n private _paymentButton: LoadingButton;\n\n @query(\"#authButton\")\n private _authButton: LoadingButton;\n\n @query(\"#downgradeButton\")\n private _downgradeButton: LoadingButton;\n\n private get _billing() {\n return this.org ? this.org.billing : app.account && app.account.billing;\n }\n\n private get _subscription() {\n return this._billing && this._billing.subscription;\n }\n\n private async _update() {\n const sub = this._subscription;\n\n if (this.org) {\n if (!sub) {\n this._updatePlan();\n return;\n }\n } else {\n if (!sub || sub.plan.type === PlanType.Free) {\n this.dispatch(\"get-premium\");\n return;\n }\n }\n\n const canceled = sub.status === SubscriptionStatus.Canceled;\n const choices = canceled ? [$l(\"Resume Subscription\")] : [$l(\"Cancel Subscription\")];\n\n if (this.org) {\n choices.push($l(\"Update Plan\"));\n }\n\n const choice = await choose(\"\", choices);\n\n switch (choice) {\n case 0:\n return canceled ? this._resumeSubscription() : this._cancelSubscription();\n case 1:\n return this._updateSubscriptionDialog.show(this.org!);\n }\n }\n\n private _updatePlan() {\n this.org ? this._updateSubscriptionDialog.show(this.org) : this.dispatch(\"get-premium\");\n }\n\n private async _downgrade() {\n if (this.org) {\n throw \"Can only downgrade subscription for private account!\";\n }\n\n if (this._downgradeButton.state === \"loading\") {\n return;\n }\n\n const confirmed = await confirm(\n $l(\"Are you sure you want to downgrade to the Free Plan?\"),\n $l(\"Downgrade\"),\n $l(\"Cancel\"),\n { type: \"destructive\", title: \"Downgrade\" }\n );\n\n if (!confirmed) {\n return;\n }\n\n this._downgradeButton.start();\n try {\n await app.updateBilling(new UpdateBillingParams({ planType: PlanType.Free }));\n this._downgradeButton.success();\n } catch (e) {\n this._downgradeButton.fail();\n alert(e.message || $l(\"Something went wrong. Please try again later!\"), { type: \"warning\" });\n }\n }\n\n private async _updateBilling() {\n if (this._paymentButton.state === \"loading\") {\n return;\n }\n\n const billingInfo = this._billing!;\n\n const params = await this._billingDialog.show({ billingInfo });\n if (params) {\n this._paymentButton.start();\n try {\n await app.updateBilling(params);\n this._paymentButton.success();\n } catch (e) {\n this._paymentButton.fail();\n alert(e.message || $l(\"Something went wrong. Please try again later!\"), { type: \"warning\" });\n throw e;\n }\n }\n }\n\n private async _do(fn: () => Promise<any>) {\n if (this._editButton.state === \"loading\") {\n return;\n }\n\n this._editButton.start();\n try {\n await fn();\n this._editButton.success();\n } catch (e) {\n this._editButton.fail();\n alert(e.message || $l(\"Something went wrong. Please try again later!\"), { type: \"warning\" });\n }\n }\n\n private async _cancelSubscription() {\n this._do(() =>\n app.updateBilling(new UpdateBillingParams({ org: (this.org && this.org.id) || undefined, cancel: true }))\n );\n }\n\n private async _resumeSubscription() {\n this._do(() =>\n app.updateBilling(new UpdateBillingParams({ org: (this.org && this.org.id) || undefined, cancel: false }))\n );\n }\n\n private async _authenticatePayment() {\n const stripePubKey = app.state.billingProvider && app.state.billingProvider.config.publicKey;\n\n if (!stripePubKey || this._authButton.state === \"loading\") {\n return;\n }\n\n this._authButton.start();\n\n let error: string = \"\";\n try {\n const Stripe = await loadScript(\"https://js.stripe.com/v3/\", \"Stripe\");\n const stripe = Stripe(stripePubKey);\n const result = await stripe.handleCardPayment(this._subscription!.paymentRequiresAuth);\n error = result.error && result.error.message;\n await app.updateBilling(new UpdateBillingParams());\n } catch (e) {\n error = e.message || $l(\"Something went wrong. Please try again later!\");\n }\n\n if (error) {\n alert(error);\n this._authButton.fail();\n } else {\n this._authButton.success();\n }\n }\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n position: relative;\n display: flex;\n flex-direction: column;\n }\n\n .quota {\n margin: 0 12px 12px 12px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));\n }\n\n .quota-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 4px;\n font-weight: bold;\n text-align: center;\n }\n\n .quota-item[warning] {\n color: var(--color-negative);\n }\n\n .quota-item pl-icon {\n font-size: 150%;\n }\n\n .quota-item .label {\n font-size: var(--font-size-small);\n }\n\n .edit-button {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 1;\n }\n\n .missing {\n opacity: 0.7;\n cursor: pointer;\n }\n\n .plan-name {\n font-size: 150%;\n font-weight: bold;\n margin: 16px 8px;\n text-align: center;\n }\n\n button {\n font-weight: bold;\n }\n\n .premium-button {\n margin: 0 12px 12px 12px;\n }\n `\n ];\n\n render() {\n if (!app.account) {\n return html``;\n }\n\n const account = app.account!;\n const billing = this.org ? this.org.billing : account.billing;\n const sub = billing && billing.subscription;\n\n const trialDays =\n sub && sub.trialEnd\n ? Math.max(0, Math.ceil((sub.trialEnd.getTime() - Date.now()) / 1000 / 60 / 60 / 24))\n : 0;\n\n const periodDays =\n sub && sub.periodEnd\n ? Math.max(0, Math.ceil((sub.periodEnd.getTime() - Date.now()) / 1000 / 60 / 60 / 24))\n : 0;\n\n const privateItemQuota = app.getItemsQuota();\n const privateItemCount = (app.mainVault && app.mainVault.items.size) || 0;\n\n return html`\n <div class=\"plan-name\">\n ${(sub && sub.plan.name) || $l(\"No Plan Selected\")}\n </div>\n\n <div class=\"quota\">\n ${this.org\n ? html`\n <div\n class=\"quota-item\"\n ?warning=${this.org.quota.members !== -1 &&\n this.org.members.length >= this.org.quota.members}\n >\n <pl-icon icon=\"members\"></pl-icon>\n\n <div class=\"label\">\n ${this.org.quota.members === -1\n ? $l(\"Unlimited\")\n : `${this.org.members.length} / ${this.org.quota.members}`}\n </div>\n </div>\n\n <div\n class=\"quota-item\"\n ?warning=${this.org.quota.groups !== -1 &&\n this.org.groups.length >= this.org.quota.groups}\n >\n <pl-icon icon=\"group\"></pl-icon>\n\n <div class=\"label\">\n ${this.org.quota.groups === -1\n ? $l(\"Unlimited\")\n : `${this.org.groups.length} / ${this.org.quota.groups}`}\n </div>\n </div>\n\n <div\n class=\"quota-item\"\n ?warning=${this.org.quota.vaults !== -1 &&\n this.org.vaults.length >= this.org.quota.vaults}\n >\n <pl-icon icon=\"vaults\"></pl-icon>\n\n <div class=\"label\">\n ${this.org.quota.vaults === -1\n ? $l(\"Unlimited\")\n : `${this.org.vaults.length} / ${this.org.quota.vaults}`}\n </div>\n </div>\n\n <div\n class=\"quota-item\"\n ?warning=${this.org.quota.storage !== -1 &&\n this.org.usedStorage >= this.org.quota.storage * 1e9 - 5e6}\n >\n <pl-icon icon=\"storage\"></pl-icon>\n\n <div class=\"label\">\n ${this.org.quota.storage === -1\n ? $l(\"Unlimited\")\n : `${fileSize(this.org.usedStorage)} / ${this.org.quota.storage} GB`}\n </div>\n </div>\n `\n : html`\n <div\n class=\"quota-item\"\n ?warning=${privateItemQuota !== -1 && privateItemCount >= privateItemQuota}\n >\n <pl-icon icon=\"list\"></pl-icon>\n\n <div class=\"label\">\n ${privateItemQuota === -1\n ? $l(\"Unlimited\")\n : `${privateItemCount} / ${privateItemQuota}`}\n </div>\n </div>\n\n <div class=\"quota-item\" ?warning=${account.usedStorage >= account.quota.storage * 1e9 - 5e6}>\n <pl-icon icon=\"storage\"></pl-icon>\n\n <div class=\"label\">\n ${fileSize(account.usedStorage)} / ${account.quota.storage} GB\n </div>\n </div>\n `}\n ${sub\n ? html`\n <div class=\"quota-item\">\n <pl-icon icon=\"dollar\"></pl-icon>\n\n <div class=\"label\">\n ${$l(\"{0} / Year\", ((sub.members * sub.plan.cost) / 100).toFixed(2))}\n </div>\n </div>\n\n ${sub.status === SubscriptionStatus.Canceled\n ? html`\n <div class=\"quota-item\" warning>\n <pl-icon icon=\"time\"></pl-icon>\n\n <div class=\"label\">\n ${$l(\"Canceled ({0} days left)\", periodDays.toString())}\n </div>\n </div>\n `\n : sub.status === SubscriptionStatus.Inactive\n ? html`\n <div class=\"quota-item\" warning>\n <pl-icon icon=\"error\"></pl-icon>\n\n <div class=\"label\">\n ${sub.paymentRequiresAuth ? $l(\"Authentication Required\") : $l(\"Inactive\")}\n </div>\n </div>\n `\n : sub.status === SubscriptionStatus.Trialing\n ? html`\n <div class=\"quota-item\" ?warning=${trialDays < 3}>\n <pl-icon icon=\"time\"></pl-icon>\n\n <div class=\"label\">\n ${$l(\"Trialing ({0} days left)\", trialDays.toString())}\n </div>\n </div>\n `\n : html``}\n `\n : \"\"}\n </div>\n\n ${sub && sub.paymentError\n ? html`\n <div class=\"error item\">${sub.paymentError}</div>\n `\n : \"\"}\n ${!sub\n ? html`\n <button class=\"premium-button primary tap\" @click=${this._updatePlan}>\n ${$l(\"Choose Plan\")}\n </button>\n `\n : sub.paymentRequiresAuth\n ? html`\n <pl-loading-button\n id=\"authButton\"\n class=\"premium-button primary tap\"\n @click=${this._authenticatePayment}\n >${$l(\"Complete Payment\")}</pl-loading-button\n >\n `\n : sub.status === SubscriptionStatus.Inactive\n ? html`\n <pl-loading-button\n id=\"paymentButton\"\n class=\"premium-button primary tap\"\n @click=${this._updateBilling}\n >\n ${$l(\"Add Payment Method\")}\n </pl-loading-button>\n\n <pl-loading-button id=\"downgradeButton\" class=\"premium-button tap\" @click=${this._downgrade} ?hidden=${!!this.org}>\n ${$l(\"Downgrade To Free Plan\")}\n </pl-loading-button>\n `\n : this.org || sub.plan.type !== PlanType.Free\n ? html`\n <pl-loading-button id=\"editButton\" class=\"edit-button tap icon\" @click=${this._update}>\n <pl-icon icon=\"edit\"></pl-icon>\n </pl-loading-button>\n `\n : html`\n <button class=\"premium-button primary tap\" @click=${this._update}>${$l(\"Get Premium\")}</button>\n `}\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Vault } from \"@padloc/core/src/vault\";\nimport { Tag } from \"@padloc/core/src/item\";\nimport { app } from \"../globals\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, css, property, query } from \"./base\";\nimport { Input } from \"./input\";\nimport \"./icon\";\n\n@element(\"pl-tags-input\")\nexport class TagsInput extends BaseElement {\n @property()\n editing: boolean = false;\n @property()\n vault: Vault | null = null;\n @property()\n tags: Tag[] = [];\n @property()\n _showResults: Boolean = false;\n\n @query(\"pl-input\")\n private _input: Input;\n\n private _focusTimeout: number = 0;\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n position: relative;\n z-index: 1;\n overflow: visible;\n font-size: var(--font-size-small);\n overflow: visible;\n }\n\n .wrapper {\n flex-wrap: wrap;\n overflow: visible;\n margin-top: -6px;\n }\n\n .wrapper > * {\n margin-top: 6px;\n }\n\n .tags.small .tag {\n padding: 5px 7px;\n }\n\n .results {\n padding: 0;\n border-radius: 8px;\n margin-top: 0;\n flex-direction: column;\n align-items: flex-start;\n }\n\n .results .tag {\n padding: 6px 8px;\n margin-top: 6px;\n }\n\n .input-wrapper {\n font-size: var(--font-size-micro);\n padding: 0 4px;\n height: 24px;\n line-height: 24px;\n background: var(--color-tertiary);\n border: solid 1px var(--color-shade-4);\n border-radius: 8px;\n align-self: stretch;\n position: relative;\n min-width: 80px;\n overflow: hidden;\n }\n\n .input-wrapper pl-input {\n font-size: inherit;\n position: absolute;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n padding-left: 20px;\n top: 0;\n font-weight: bold;\n pointer-events: none;\n }\n\n .add-tag {\n height: 26px;\n overflow: visible;\n }\n\n .add-tag .input-wrapper pl-icon {\n height: 25px;\n }\n `\n ];\n\n render() {\n const { tags, editing, vault, _showResults } = this;\n const { value } = this._input || { value: \"\" };\n const results = app.state.tags\n .filter(([t]) => !this.tags.includes(t) && t !== value && t.toLowerCase().startsWith(value))\n .map(([t]) => t);\n if (value) {\n results.push(value);\n }\n\n return html`\n <div class=\"tags small wrapper\">\n <div class=\"tag highlight tap\" @click=${() => this._vaultClicked()}>\n <pl-icon icon=\"vault\"></pl-icon>\n\n <div class=\"tag-name\">${vault}</div>\n </div>\n\n ${tags.map(\n tag => html`\n <div class=\"tag tap\" @click=${() => this._tagClicked(tag)}>\n <pl-icon icon=\"tag\"></pl-icon>\n\n <div>${tag}</div>\n\n <pl-icon icon=\"cancel\" ?hidden=${!editing}></pl-icon>\n </div>\n `\n )}\n\n <div class=\"add-tag\" ?hidden=${!editing}>\n <div class=\"input-wrapper tap\" @click=${() => this._input.focus()}>\n <pl-icon icon=\"add\"></pl-icon>\n\n <pl-input\n .placeholder=${$l(\"Add Tag\")}\n @enter=${() => this._addTag(value)}\n @input=${() => this.requestUpdate()}\n @focus=${() => this._focusChanged()}\n @blur=${() => this._focusChanged()}\n >\n </pl-input>\n </div>\n\n <div class=\"tags small results\" ?hidden=${!_showResults}>\n ${results.map(\n res => html`\n <div class=\"tag tap\" @click=${() => this._addTag(res)}>\n <pl-icon icon=\"tag\"></pl-icon>\n\n <div>${res}</div>\n </div>\n `\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n private _addTag(tag: Tag) {\n if (!tag || this.tags.includes(tag)) {\n return;\n }\n this.tags.push(tag);\n this._input.value = \"\";\n this._showResults = false;\n this.requestUpdate();\n }\n\n private _tagClicked(tag: Tag) {\n if (this.editing) {\n this.tags = this.tags.filter(t => t !== tag);\n }\n }\n\n private _vaultClicked() {\n this.dispatch(\"move\");\n }\n\n _focusChanged() {\n clearTimeout(this._focusTimeout);\n setTimeout(() => (this._showResults = this._input.focused), this._input.focused ? 0 : 200);\n }\n}\n","// @ts-ignore\nimport autosize from \"autosize/src/autosize\";\nimport { element, html, property } from \"./base\";\nimport { BaseInput } from \"./base-input\";\n\n@element(\"pl-textarea\")\nexport class Textarea extends BaseInput {\n @property()\n autosize: boolean = false;\n\n updated() {\n if (this.autosize) {\n setTimeout(() => autosize(this._inputElement));\n }\n }\n\n _renderInput() {\n const { placeholder, readonly, noTab, disabled, autocapitalize, required } = this;\n\n return html`\n <textarea\n class=\"input-element\"\n .placeholder=${placeholder}\n .tabIndex=${noTab ? \"-1\" : \"\"}\n ?readonly=${readonly}\n ?disabled=${disabled}\n ?required=${required}\n autocapitalize=${autocapitalize}\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n rows=\"1\"\n @focus=${this._focused}\n @blur=${this._blurred}\n @change=${this._changeHandler}\n @touchend=${this._touchend}\n ></textarea>\n `;\n }\n}\n","import { shared, mixins } from \"../styles\";\nimport { BaseElement, element, html, css, property, query } from \"./base\";\nimport { Toggle } from \"./toggle\";\n\n@element(\"pl-toggle-button\")\nexport class ToggleButton extends BaseElement {\n @property()\n active: boolean = false;\n @property({ reflect: true })\n reverse: boolean = false;\n @property()\n label: string = \"\";\n\n @query(\"pl-toggle\")\n _toggle: Toggle;\n\n static styles = [\n shared,\n css`\n :host {\n display: block;\n font-size: inherit;\n padding: 12px 15px;\n }\n\n button {\n background: transparent;\n display: flex;\n width: 100%;\n align-items: center;\n height: 100%;\n padding: 0;\n line-height: normal;\n text-align: left;\n }\n\n button > div {\n flex: 1;\n ${mixins.ellipsis()}\n }\n\n :host(:not([reverse])) button > div {\n padding-left: 0.5em;\n }\n\n :host([reverse]) button > div {\n padding-right: 0.5em;\n }\n\n :host([reverse]) button {\n flex-direction: row-reverse;\n }\n\n pl-toggle {\n display: inline-block;\n pointer-events: none;\n }\n `\n ];\n\n render() {\n const { active, label } = this;\n return html`\n <button @click=${() => this.toggle()}>\n\n <pl-toggle .active=${active} @change=${() => (this.active = this._toggle.active)}\"></pl-toggle>\n\n <div>\n ${label}\n <slot></slot>\n </div>\n\n </button>\n`;\n }\n\n toggle() {\n this._toggle.toggle();\n }\n}\n","import { BaseElement, element, html, css, property, listen } from \"./base\";\nimport { shared } from \"../styles\";\n\n@element(\"pl-toggle\")\nexport class Toggle extends BaseElement {\n @property({ reflect: true })\n active: boolean = false;\n @property() notap: boolean = false;\n\n static styles = [\n shared,\n css`\n :host {\n --width: var(--toggle-width, 36px);\n --height: var(--toggle-height, 24px);\n --gutter-width: var(--toggle-gutter-width, 2px);\n --color-off: var(--toggle-color-off, var(--color-foreground));\n --color-on: var(--toggle-color-on, var(--color-highlight));\n --color-knob: var(--toggle-color-knob, var(--color-background));\n\n display: inline-block;\n width: var(--width);\n height: var(--height);\n background: var(--color-off);\n border-radius: var(--height);\n\n transition: background 0.5s ease;\n }\n\n .knob {\n --size: calc(var(--height) - 2 * var(--gutter-width));\n display: block;\n height: var(--size);\n width: var(--size);\n margin: var(--gutter-width);\n background: var(--color-knob);\n border-radius: var(--size);\n\n transition: transform 0.5s cubic-bezier(1, -0.5, 0, 1.5) -0.2s, background 0.5s, opacity 0.5s;\n }\n\n :host([active]) {\n background: var(--color-on);\n }\n\n :host([active]) .knob {\n --dx: calc(var(--width) - var(--height));\n transform: translate(var(--dx), 0);\n }\n `\n ];\n\n render() {\n return html`\n <div class=\"knob\"></div>\n `;\n }\n\n @listen(\"click\")\n _click() {\n if (!this.notap) {\n this.toggle();\n }\n }\n\n toggle() {\n this.active = !this.active;\n this.dispatch(\"change\", { value: this.active, prevValue: !this.active }, true, true);\n }\n}\n","import { styleMap } from \"lit-html/directives/style-map.js\";\nimport { hotp } from \"@padloc/core/src/otp\";\nimport { base32ToBytes } from \"@padloc/core/src/encoding\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, svg, css, property, observe } from \"./base\";\nimport \"./icon\";\n\n@element(\"pl-totp\")\nexport class TOTPElement extends BaseElement {\n @property()\n secret: string = \"\";\n\n @property()\n interval = 30;\n\n @property()\n token = \"\";\n\n @property()\n private _error = \"\";\n\n @property()\n private _age = 0;\n\n private _counter = 0;\n private _updateTimeout = -1;\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n align-items: center;\n user-select: text;\n -webkit-user-select: text;\n font: inherit;\n white-space: normal !important;\n }\n\n .countdown {\n width: 1em;\n height: 1em;\n margin-left: 0.3em;\n border-radius: 100%;\n }\n\n .countdown circle {\n transform-origin: center center;\n transform: rotate(-90deg);\n fill: none;\n stroke: currentColor;\n stroke-width: 8;\n stroke-dasharray: 25;\n transition: stroke-dashoffset 1s linear;\n }\n\n .countdown circle.bg {\n opacity: 0.2;\n }\n\n .error {\n color: var(--color-negative);\n }\n `\n ];\n\n @observe(\"secret\")\n private async _update(updInt = 2000) {\n window.clearTimeout(this._updateTimeout);\n\n if (!this.secret) {\n this.token = \"\";\n this._age = 0;\n return;\n }\n\n const time = Date.now();\n\n const counter = Math.floor(time / 1000 / this.interval);\n if (counter !== this._counter) {\n try {\n this.token = await hotp(base32ToBytes(this.secret), counter);\n this._error = \"\";\n } catch (e) {\n this.token = \"\";\n this._error = $l(\"Invalid Code\");\n this._age = 0;\n return;\n }\n this._counter = counter;\n }\n\n this._age = ((Date.now() / 1000) % this.interval) / this.interval;\n\n if (updInt) {\n this._updateTimeout = window.setTimeout(() => this._update(updInt), updInt);\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._update();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.clearTimeout(this._updateTimeout);\n }\n\n render() {\n return html`\n ${this._error\n ? html`\n <span class=\"error\">${this._error}</span>\n `\n : html`\n <span>\n ${this.token.substring(0, 3)}&nbsp;${this.token.substring(3, 6)}\n </span>\n `}\n ${svg`\n <svg class=\"countdown\" viewBox=\"0 0 10 10\" ?hidden=${!this.token}>\n <circle cx=\"5\" cy=\"5\" r=\"4\" class=\"bg\" />\n <circle\n cx=\"5\"\n cy=\"5\"\n r=\"4\"\n style=${styleMap({ strokeDashoffset: Math.floor(this._age * -25).toString() })}\n />\n </svg>\n `}\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { ErrorCode } from \"@padloc/core/src/error\";\nimport { biometricAuth } from \"@padloc/core/src/platform\";\nimport { app, router } from \"../globals\";\nimport { isTouch } from \"../lib/util\";\nimport { element, property, html, css, query, listen } from \"./base\";\nimport { StartForm } from \"./start-form\";\nimport { PasswordInput } from \"./password-input\";\nimport { LoadingButton } from \"./loading-button\";\nimport { alert, confirm, choose } from \"../lib/dialog\";\nimport \"./logo\";\n\n@element(\"pl-unlock\")\nexport class Unlock extends StartForm {\n @property()\n private _errorMessage: string;\n\n @query(\"#passwordInput\")\n private _passwordInput: PasswordInput;\n\n @query(\"#unlockButton\")\n private _unlockButton: LoadingButton;\n\n @query(\"#bioauthButton\")\n private _bioauthButton: LoadingButton;\n\n private _failedCount = 0;\n\n async reset() {\n if (!this._passwordInput) {\n return;\n }\n this._passwordInput.value = \"\";\n this._errorMessage = \"\";\n this._unlockButton.stop();\n this._failedCount = 0;\n super.reset();\n\n if (!isTouch()) {\n setTimeout(() => this._passwordInput.focus(), 100);\n }\n\n if (\n app.account &&\n app.account.locked &&\n app.supportsBiometricUnlock &&\n app.remembersMasterKey &&\n !(\"nobio\" in router.params)\n ) {\n this._bioAuth();\n }\n\n setTimeout(() => {\n this._bioauthButton.classList.toggle(\"show\", app.supportsBiometricUnlock);\n }, 1000);\n }\n\n static styles = [\n ...StartForm.styles,\n css`\n .current-account {\n font-size: var(--font-size-tiny);\n margin: 30px;\n }\n\n .logout {\n text-decoration: underline;\n cursor: pointer;\n }\n\n .account {\n position: relative;\n }\n\n .account pl-icon {\n position: absolute;\n right: 5px;\n top: 6px;\n }\n\n .bioauth-button {\n background: transparent;\n width: 50px;\n transition: transform 0.5s cubic-bezier(1, -0.3, 0, 1.3), opacity 0.5s;\n position: absolute;\n bottom: 12px;\n left: 0;\n right: 0;\n margin: auto;\n }\n\n .bioauth-button:not(.show) {\n opacity: 0;\n transform: scale(0);\n }\n\n .bioauth-button pl-icon {\n font-size: 140%;\n width: 50px;\n height: 50px;\n }\n\n @supports (-webkit-overflow-scrolling: touch) {\n .bioauth-button {\n bottom: max(env(safe-area-inset-bottom), 12px);\n }\n }\n `\n ];\n\n render() {\n const email = app.account && app.account.email;\n return html`\n <div flex></div>\n\n <form>\n <pl-logo class=\"animate\"></pl-logo>\n\n <div class=\"account animate\">\n <pl-input .label=${$l(\"Logged In As\")} .value=\"${email}\" readonly></pl-input>\n <pl-icon icon=\"more\" class=\"tap\" @click=${this._showMenu}></pl-icon>\n </div>\n\n <pl-password-input\n id=\"passwordInput\"\n required\n .label=${$l(\"Enter Master Password\")}\n class=\"animate\"\n select-on-focus\n @enter=${() => this._submit()}\n >\n </pl-password-input>\n\n <pl-loading-button id=\"unlockButton\" class=\"tap animate\" @click=${() => this._submit()}>\n ${$l(\"Unlock\")}\n </pl-loading-button>\n\n <div class=\"error note\" ?hidden=${!this._errorMessage}>${this._errorMessage}</div>\n </form>\n\n <div flex></div>\n\n <pl-loading-button class=\"bioauth-button icon tap\" id=\"bioauthButton\" @click=${this._bioAuth}>\n <pl-icon icon=\"fingerprint\"></pl-icon>\n </pl-loading-button>\n `;\n }\n\n private async _submit() {\n if (this._unlockButton.state === \"loading\") {\n return;\n }\n\n this._passwordInput.blur();\n\n if (!this._passwordInput.value) {\n this._errorMessage = $l(\"Please enter your master password!\");\n this.rumble();\n this._passwordInput.focus();\n return;\n }\n\n this._errorMessage = \"\";\n this._unlockButton.start();\n try {\n await app.unlock(this._passwordInput.value);\n this._unlockButton.success();\n this.done();\n } catch (e) {\n this._unlockButton.fail();\n if (e.code !== ErrorCode.DECRYPTION_FAILED) {\n throw e;\n }\n this._errorMessage = $l(\"Wrong password! Please try again.\");\n this.rumble();\n\n this._failedCount++;\n if (this._failedCount > 2) {\n const recover = await confirm(\n $l(\"Can't remember your master password?\"),\n $l(\"Recover Account\"),\n $l(\"Try Again\")\n );\n if (recover) {\n router.go(\"recover\", { email: app.account!.email });\n }\n } else {\n this._passwordInput.focus();\n }\n }\n }\n\n private async _showMenu() {\n const choice = await choose(\"\", [$l(\"Logout / Switch Account\"), $l(\"Forgot Password\")]);\n switch (choice) {\n case 0:\n this._logout();\n break;\n case 1:\n router.go(\"recover\", { email: app.account!.email });\n break;\n }\n }\n\n private async _logout() {\n const confirmed = await confirm($l(\"Are you sure you want to log out of this account?\"));\n if (confirmed) {\n await app.logout();\n router.go(\"login\");\n }\n }\n\n private async _bioAuth() {\n if (this._bioauthButton.state === \"loading\") {\n return;\n }\n\n this._bioauthButton.start();\n\n try {\n if (app.remembersMasterKey) {\n const authenticated = await biometricAuth();\n\n if (!authenticated) {\n this._bioauthButton.fail();\n return;\n }\n\n try {\n await app.unlockWithRememberedMasterKey();\n } catch (e) {\n this.dispatch(\"enable-biometric-auth\", {\n message: $l(\"Biometric unlock expired. Complete setup to reeneable.\")\n });\n }\n\n this._bioauthButton.success();\n } else {\n this.dispatch(\"enable-biometric-auth\");\n this._bioauthButton.stop();\n }\n } catch (error) {\n this._bioauthButton.fail();\n alert($l(\"Biometric unlock failed! Reason: {0}\", error.message), {\n title: $l(\"Failed To Unlock\"),\n type: \"warning\"\n });\n }\n }\n\n @listen(\"visibilitychange\", document)\n _focused() {\n setTimeout(() => {\n if (app.state.locked && this.classList.contains(\"showing\") && document.visibilityState !== \"hidden\") {\n this._passwordInput && this._passwordInput.focus();\n }\n }, 100);\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { Org } from \"@padloc/core/src/org\";\nimport { Plan, UpdateBillingParams } from \"@padloc/core/src/billing\";\nimport { dialog } from \"../lib/dialog\";\nimport { app } from \"../globals\";\nimport { element, html, property, css, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport \"./card-input\";\nimport { ChoosePlanDialog } from \"./choose-plan-dialog\";\nimport { Input } from \"./input\";\n\n@element(\"pl-update-subscription-dialog\")\nexport class UpdateSubscriptionDialog extends Dialog<Org, void> {\n @property()\n org: Org | null = null;\n\n @property()\n plan: Plan | null = null;\n\n @property()\n quantity: number = 1;\n\n @property()\n private _error = \"\";\n\n @query(\"#quantityInput\")\n private _quantityInput: Input;\n\n @query(\"#submitButton\")\n private _submitButton: LoadingButton;\n\n @dialog(\"pl-choose-plan-dialog\")\n private _choosePlanDialog: ChoosePlanDialog;\n\n async show(org: Org) {\n const promise = super.show();\n this._error = \"\";\n this.org = org;\n const sub = org.billing && org.billing.subscription;\n if (sub) {\n this.plan = sub.plan;\n this.quantity = sub.members;\n } else {\n this._changePlan();\n }\n return promise;\n }\n\n private async _submit() {\n if (this._submitButton.state === \"loading\") {\n return;\n }\n\n this._error = \"\";\n this._submitButton.start();\n\n const params = new UpdateBillingParams({\n plan: this.plan!.id,\n members: this.quantity,\n org: this.org!.id\n });\n try {\n await app.updateBilling(params);\n this._submitButton.success();\n this.done();\n } catch (e) {\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n this._submitButton.fail();\n }\n }\n\n private async _updateQuantity() {\n const quantity = parseInt(this._quantityInput.value);\n const { min, max } = this.plan!;\n if (!isNaN(quantity) && quantity >= min && quantity <= max) {\n this.quantity = quantity;\n }\n }\n\n private async _changePlan() {\n this.open = false;\n const plan = await this._choosePlanDialog.show(this.org || undefined);\n if (plan) {\n this.plan = plan;\n this.quantity = plan.min;\n }\n this.open = true;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: transparent;\n box-shadow: none;\n background: var(--color-quaternary);\n text-align: center;\n }\n\n .plan {\n text-align: center;\n padding: 20px;\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n .plan-name {\n font-size: 1.7rem;\n margin-bottom: 8px;\n font-weight: bold;\n }\n\n .plan-price {\n letter-spacing: 0.1em;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n font-weight: bold;\n font-size: 1rem;\n margin: 5px;\n }\n\n .plan-price-currency {\n line-height: 1em;\n margin-top: 0.4em;\n }\n\n .plan-price-dollars {\n font-size: 3em;\n line-height: 1em;\n }\n\n .plan-price-cents {\n font-size: 1.5em;\n line-height: 1em;\n margin-top: 0.2em;\n }\n\n .plan-unit {\n font-size: var(--font-size-small);\n }\n\n .plan-fineprint {\n font-size: var(--font-size-tiny);\n opacity: 0.7;\n margin: 4px 0 -4px 0;\n }\n\n pl-loading-button {\n font-weight: bold;\n }\n\n pl-loading-button.primary {\n background: var(--color-highlight);\n color: var(--color-highlight-text);\n font-weight: bold;\n border-bottom: solid 3px var(--color-shade-2);\n }\n\n .quantity-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 8px;\n }\n\n .quantity-label {\n font-weight: bold;\n padding: 12px;\n font-size: 1.2em;\n text-align: left;\n }\n\n .quantity-input {\n width: 60px;\n margin: 0;\n font-weight: bold;\n font-size: 1.5rem;\n }\n\n .quantity-minmax {\n font-size: var(--font-size-micro);\n opacity: 0.5;\n text-align: right;\n padding: 12px;\n }\n\n .edit-plan-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n }\n `\n ];\n\n renderContent() {\n const plan = this.plan;\n\n if (!plan) {\n return html``;\n }\n\n const color = plan.color;\n const monthlyPrice = Math.round((this.quantity * plan.cost) / 12);\n\n return html`\n <div style=${`--color-highlight: ${color}; --color-highlight-text: var(--color-tertiary);`}>\n <h1>${$l(\"Update Subscription\")}</h1>\n\n <div class=\"plan item\">\n <pl-icon class=\"tap edit-plan-icon\" icon=\"edit\" @click=${this._changePlan}></pl-icon>\n\n <div class=\"plan-name\">\n ${plan.name}\n </div>\n\n <div class=\"plan-price\">\n <div class=\"plan-price-currency\">$</div>\n <div class=\"plan-price-dollars\">\n ${Math.floor(monthlyPrice / 100)}\n </div>\n <div class=\"plan-price-cents\">\n .${(monthlyPrice % 100).toString().padEnd(2, \"0\")}\n </div>\n </div>\n\n <div class=\"plan-unit\">\n ${$l(\"per month\")}\n </div>\n\n <div class=\"plan-fineprint\">\n (${$l(\"USD, billed annually\")})\n </div>\n\n <div class=\"flex\"></div>\n </div>\n\n <div class=\"quantity-wrapper\" ?hidden=${plan.max < 2}>\n <div class=\"quantity-minmax flex\">\n <div>${$l(\"{0} min\", plan.min.toString())}</div>\n <div>${$l(\"{0} max\", plan.max.toString())}</div>\n </div>\n <pl-input\n id=\"quantityInput\"\n class=\"quantity-input item\"\n type=\"number\"\n .value=${this.quantity}\n .min=${plan.min}\n .max=${plan.max}\n @input=${this._updateQuantity}\n @blur=${() => (this._quantityInput.value = this.quantity.toString())}\n ></pl-input>\n <div class=\"quantity-label flex\">\n ${$l(\"Seats\")}\n </div>\n </div>\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n\n <div class=\"actions\">\n <pl-loading-button id=\"submitButton\" class=\"tap primary\" @click=${this._submit}>\n ${$l(\"Update\")}\n </pl-loading-button>\n\n <button class=\"tap\" @click=${() => this.done()}>${$l(\"Cancel\")}</button>\n </div>\n </div>\n `;\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { VaultItemID } from \"@padloc/core/src/item\";\nimport { Attachment } from \"@padloc/core/src/attachment\";\nimport { ErrorCode } from \"@padloc/core/src/error\";\nimport { app } from \"../globals\";\nimport { fileIcon, fileSize } from \"../lib/util\";\nimport { element, html, css, property, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport \"./icon\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Input } from \"./input\";\n\n@element(\"pl-upload-dialog\")\nexport class UploadDialog extends Dialog<{ file: File; item: VaultItemID }, Attachment> {\n static styles = [\n ...Dialog.styles,\n css`\n h1 {\n margin: 0 0 8px 0;\n }\n\n .file-info {\n display: flex;\n margin: 12px 0;\n align-items: center;\n }\n\n .file-info pl-icon {\n width: 80px;\n height: 80px;\n font-size: 60px;\n margin: 4px;\n }\n\n .name {\n font-weight: bold;\n height: auto;\n padding: 8px 12px;\n margin-right: 12px;\n margin-left: -6px;\n }\n\n .size,\n .error {\n margin-top: 8px;\n font-weight: bold;\n font-size: var(--font-size-small);\n }\n\n .error {\n color: var(--color-negative);\n }\n `\n ];\n\n @property()\n file: File | null = null;\n\n @property()\n itemId: VaultItemID | null = null;\n\n readonly preventDismiss = true;\n\n @property()\n private _progress: { loaded: number; total: number } | null = null;\n\n @property()\n private _error = \"\";\n\n @query(\"#nameInput\")\n private _nameInput: Input;\n\n @query(\"#uploadButton\")\n private _uploadButton: LoadingButton;\n\n get _item() {\n const found = (this.itemId && app.getItem(this.itemId)) || null;\n return found && found.item;\n }\n\n get _vault() {\n const found = (this.itemId && app.getItem(this.itemId)) || null;\n return found && found.vault;\n }\n\n show({ item, file }: { file: File; item: VaultItemID }) {\n this._error = \"\";\n this._progress = null;\n this.file = file;\n this.itemId = item;\n return super.show();\n }\n\n async upload() {\n if (this._uploadButton.state === \"loading\") {\n return;\n }\n\n this._progress = null;\n this._error = \"\";\n\n if (!this._nameInput.value) {\n this._error = $l(\"Please enter a name!\");\n return;\n }\n\n this._uploadButton.start();\n\n const att = await app.createAttachment(this.itemId!, this.file!, this._nameInput.value);\n\n const upload = att.uploadProgress!;\n\n const handler = () => (this._progress = upload.progress);\n\n upload.addEventListener(\"progress\", handler);\n try {\n await upload.completed;\n } catch (e) {}\n upload.removeEventListener(\"progress\", handler);\n\n this._progress = null;\n\n if (upload.error) {\n this._uploadButton.fail();\n this._error =\n upload.error.code === ErrorCode.STORAGE_QUOTA_EXCEEDED\n ? $l(\"Storage limit exceeded!\")\n : $l(\"Upload failed! Please try again!\");\n } else {\n this._uploadButton.success();\n this.done(att);\n }\n }\n\n renderContent() {\n if (!this.file) {\n return html``;\n }\n\n return html`\n <div class=\"file-info\">\n <pl-icon .icon=${fileIcon(this.file.type)}></pl-icon>\n\n <div class=\"flex\">\n <h1>${$l(\"Upload Attachment\")}</h1>\n\n <pl-input class=\"name\" id=\"nameInput\" .value=${this.file.name}></pl-input>\n\n <div class=\"size\">\n ${this._progress\n ? $l(\n \"uploading... {0}/{1}\",\n fileSize(this._progress.loaded),\n fileSize(this._progress.total)\n )\n : (this.file.type || $l(\"Unkown File Type\")) + \" - \" + fileSize(this.file.size)}\n </div>\n\n <div class=\"error\" ?hidden=${!this._error}>${this._error}</div>\n </div>\n </div>\n\n <div class=\"actions\">\n <pl-loading-button id=\"uploadButton\" class=\"primary tap\" @click=\"${this.upload}}\">\n <div>${this._error ? $l(\"Retry Upload\") : $l(\"Upload\")}</div>\n </pl-loading-button>\n\n <button class=\"tap\" @click=${() => this.done()} ?disabled=${!!this._progress}>${$l(\"Cancel\")}</button>\n </div>\n `;\n }\n}\n","import { VaultID } from \"@padloc/core/src/vault\";\nimport { Org, Group, OrgMember } from \"@padloc/core/src/org\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { mixins } from \"../styles\";\nimport { app } from \"../globals\";\nimport { prompt } from \"../lib/dialog\";\nimport { element, html, css, property, query } from \"./base\";\nimport { Dialog } from \"./dialog\";\nimport { LoadingButton } from \"./loading-button\";\nimport { Input } from \"./input\";\nimport \"./icon\";\nimport \"./group-item\";\nimport \"./member-item\";\nimport \"./toggle\";\n\ntype InputType = { vault: { id: VaultID; name: string } | null; org: Org };\n\n@element(\"pl-vault-dialog\")\nexport class VaultDialog extends Dialog<InputType, void> {\n @property()\n org: Org | null = null;\n\n @property()\n vault: { id: VaultID; name: string } | null = null;\n\n @query(\"#nameInput\")\n private _nameInput: Input;\n\n @query(\"#saveButton\")\n private _saveButton: LoadingButton;\n\n @query(\"#filterInput\")\n private _filterInput: Input;\n\n @property()\n private _filterString: string = \"\";\n\n @property()\n private _error: string = \"\";\n\n private _members = new Map<string, { read: boolean; write: boolean }>();\n\n private _groups = new Map<string, { read: boolean; write: boolean }>();\n\n private _getCurrentMembers(): Map<string, { read: boolean; write: boolean }> {\n const members = new Map<string, { read: boolean; write: boolean }>();\n\n if (!this.org) {\n return members;\n }\n\n for (const member of this.org.members) {\n const v = this.vault && member.vaults.find(v => v.id === this.vault!.id);\n members.set(member.id, {\n read: !!v,\n write: !!v && !v.readonly\n });\n }\n\n return members;\n }\n\n private _getCurrentGroups(): Map<string, { read: boolean; write: boolean }> {\n const groups = new Map<string, { read: boolean; write: boolean }>();\n\n if (!this.org) {\n return groups;\n }\n\n for (const group of this.org.groups) {\n const v = this.vault && group.vaults.find(v => v.id === this.vault!.id);\n groups.set(group.name, {\n read: !!v,\n write: !!v && !v.readonly\n });\n }\n\n return groups;\n }\n\n private get _hasChanged() {\n if (!this.org || !this._nameInput) {\n return false;\n }\n\n const currentGroups = this._getCurrentGroups();\n const groupsChanged = this.org.groups.some(({ name }) => {\n const c = currentGroups.get(name)!;\n const s = this._groups.get(name)!;\n return c.read !== s.read || c.write !== s.write;\n });\n\n const currentMembers = this._getCurrentMembers();\n const membersChanged = this.org.members.some(({ id }) => {\n const c = currentMembers.get(id)!;\n const s = this._members.get(id)!;\n return c.read !== s.read || c.write !== s.write;\n });\n\n const nameChanged = this.vault ? this.vault.name !== this._nameInput.value : !!this._nameInput.value;\n\n return (\n (this._groups.size || this._members.size) &&\n this._nameInput.value &&\n (groupsChanged || membersChanged || nameChanged)\n );\n }\n\n async show({ vault, org }: InputType): Promise<void> {\n this._error = \"\";\n this.vault = vault;\n this.org = org;\n this._members = this._getCurrentMembers();\n this._groups = this._getCurrentGroups();\n await this.updateComplete;\n this._nameInput.value = this.vault ? this.vault.name : \"\";\n return super.show();\n }\n\n private _toggle(obj: Group | OrgMember) {\n if (obj instanceof Group) {\n const { read } = this._groups.get(obj.name)!;\n this._groups.set(obj.name, read ? { read: false, write: false } : { read: true, write: true });\n } else {\n const { read } = this._members.get(obj.id)!;\n this._members.set(obj.id, read ? { read: false, write: false } : { read: true, write: true });\n }\n this.requestUpdate();\n }\n\n private _toggleRead(obj: Group | OrgMember, event?: Event) {\n if (event) {\n event.stopImmediatePropagation();\n }\n\n const sel = obj instanceof Group ? this._groups.get(obj.name)! : this._members.get(obj.id)!;\n sel.read = !sel.read;\n if (!sel.read) {\n sel.write = false;\n }\n\n this.requestUpdate();\n }\n\n private _toggleWrite(obj: Group | OrgMember, event?: Event) {\n if (event) {\n event.stopImmediatePropagation();\n }\n\n const sel = obj instanceof Group ? this._groups.get(obj.name)! : this._members.get(obj.id)!;\n sel.write = !sel.write;\n if (sel.write) {\n sel.read = true;\n }\n\n this.requestUpdate();\n }\n\n // _toggleReadonly(group: Group) {\n // this._selection.get(group.id)!.readonly = !this._selection.get(group.id)!.readonly;\n // }\n\n private async _save() {\n this._error = \"\";\n\n const groups = [...this._groups.entries()]\n .filter(([, { read }]) => read)\n .map(([name, { write }]) => ({ name, readonly: !write }));\n\n const members = [...this._members.entries()]\n .filter(([, { read }]) => read)\n .map(([id, { write }]) => ({ id, readonly: !write }));\n\n if (!members.length && !groups.length) {\n this._error = \"You have to assign at least one member or group!\";\n return;\n }\n\n if (this._saveButton.state === \"loading\") {\n return;\n }\n\n this._saveButton.start();\n\n try {\n if (this.vault) {\n await app.updateVaultAccess(this.org!.id, this.vault.id, this._nameInput.value, members, groups);\n } else {\n await app.createVault(this._nameInput.value, this.org!, members, groups);\n }\n\n this._saveButton.success();\n this.done();\n } catch (e) {\n this._saveButton.fail();\n this._error = e.message || $l(\"Something went wrong. Please try again later!\");\n throw e;\n }\n\n this.requestUpdate();\n }\n\n private async _deleteVault() {\n this.open = false;\n const deleted = await prompt(\n $l(\n \"Are you sure you want to delete this vault? \" +\n \"All the data stored in it will be lost! \" +\n \"This action can not be undone.\"\n ),\n {\n type: \"destructive\",\n title: $l(\"Delete Vault\"),\n confirmLabel: $l(\"Delete\"),\n placeholder: $l(\"Type 'DELETE' to confirm\"),\n validate: async val => {\n if (val !== \"DELETE\") {\n throw $l(\"Type 'DELETE' to confirm\");\n }\n\n await app.deleteVault(this.vault!.id);\n\n return val;\n }\n }\n );\n\n if (deleted) {\n this.done();\n } else {\n this.open = true;\n }\n }\n\n private _updateFilter() {\n this._filterString = this._filterInput.value;\n }\n\n private _clearFilter() {\n this._filterString = this._filterInput.value = \"\";\n }\n\n shouldUpdate() {\n return !!this.org;\n }\n\n static styles = [\n ...Dialog.styles,\n css`\n .inner {\n background: var(--color-quaternary);\n }\n\n .delete-button {\n color: var(--color-negative);\n font-size: var(--font-size-default);\n }\n\n .subheader {\n margin: 8px;\n font-weight: bold;\n display: flex;\n align-items: flex-end;\n padding: 0 8px;\n font-size: var(--font-size-small);\n }\n\n .subheader .permission {\n width: 50px;\n text-align: center;\n font-size: var(--font-size-tiny);\n ${mixins.ellipsis()}\n }\n\n .item {\n display: flex;\n align-items: center;\n }\n\n .item pl-toggle {\n margin-right: 14px;\n }\n `\n ];\n\n renderContent() {\n const org = this.org!;\n const isAdmin = org.isAdmin(app.account!);\n\n const filter = this._filterString.toLowerCase();\n\n const members = filter\n ? org.members.filter(\n ({ name, email }) => email.toLowerCase().includes(filter) || name.toLowerCase().includes(filter)\n )\n : org.members;\n\n const groups = filter ? org.groups.filter(({ name }) => name.toLowerCase().includes(filter)) : org.groups;\n\n return html`\n <header>\n <pl-icon icon=\"vault\"></pl-icon>\n <pl-input\n id=\"nameInput\"\n class=\"flex\"\n .placeholder=${$l(\"Enter Vault Name\")}\n .readonly=${!isAdmin}\n @input=${() => this.requestUpdate()}\n ></pl-input>\n <pl-icon\n icon=\"delete\"\n class=\"delete-button tap\"\n ?hidden=${!isAdmin || !this.vault}\n @click=${this._deleteVault}\n ></pl-icon>\n </header>\n\n <div class=\"content\">\n <div class=\"search-wrapper item\">\n <pl-icon icon=\"search\"></pl-icon>\n <pl-input id=\"filterInput\" placeholder=\"${$l(\"Search...\")}\" @input=${this._updateFilter}></pl-input>\n <pl-icon icon=\"cancel\" class=\"tap\" @click=${this._clearFilter}></pl-icon>\n </div>\n\n <div class=\"subheader\" ?hidden=${!groups.length}>\n <div>${$l(\"Groups\")}</div>\n <div class=\"flex\"></div>\n <div class=\"permission\">${$l(\"read\")}</div>\n <div class=\"permission\">${$l(\"write\")}</div>\n </div>\n\n ${groups.map(\n group => html`\n <div class=\"item tap\" @click=${() => this._toggle(group)} ?disabled=${!isAdmin}>\n <pl-group-item .group=${group} class=\"flex\"></pl-group-item>\n <pl-toggle\n .active=${this._groups.get(group.name)!.read}\n @click=${(e: Event) => this._toggleRead(group, e)}\n ></pl-toggle>\n <pl-toggle\n .active=${this._groups.get(group.name)!.write}\n @click=${(e: Event) => this._toggleWrite(group, e)}\n ></pl-toggle>\n </div>\n `\n )}\n\n <div class=\"subheader\" ?hidden=${!members.length}>\n <div>${$l(\"Members\")}</div>\n <div class=\"flex\"></div>\n <div class=\"permission\">${$l(\"read\")}</div>\n <div class=\"permission\">${$l(\"write\")}</div>\n </div>\n\n ${members.map(\n member => html`\n <div class=\"item tap\" @click=${() => this._toggle(member)} ?disabled=${!isAdmin}>\n <pl-member-item hideRole .member=${member} class=\"flex\"></pl-member-item>\n <pl-toggle\n .active=${this._members.get(member.id)!.read}\n @click=${(e: Event) => this._toggleRead(member, e)}\n ></pl-toggle>\n <pl-toggle\n .active=${this._members.get(member.id)!.write}\n @click=${(e: Event) => this._toggleWrite(member, e)}\n ></pl-toggle>\n </div>\n `\n )}\n\n <div class=\"error item\" ?hidden=\"${!this._error}\">\n ${this._error}\n </div>\n </div>\n\n <div class=\"footer\">\n <div class=\"actions\">\n <pl-loading-button\n class=\"tap primary\"\n id=\"saveButton\"\n ?disabled=${!isAdmin || !this._hasChanged}\n @click=${this._save}\n >\n ${this.vault ? $l(\"Save\") : $l(\"Create Vault\")}\n </pl-loading-button>\n\n <button class=\"transparent tap\" @click=${this.dismiss}>\n ${this._hasChanged ? $l(\"Cancel\") : $l(\"Close\")}\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { VaultID } from \"@padloc/core/src/vault\";\nimport { shared } from \"../styles\";\nimport { BaseElement, element, html, css, property } from \"./base\";\nimport \"./icon\";\n\n@element(\"pl-vault-item\")\nexport class VaultItem extends BaseElement {\n @property()\n vault: { id: VaultID; name: string };\n\n @property()\n groups: number = 0;\n\n @property()\n members: number = 0;\n\n static styles = [\n shared,\n css`\n :host {\n display: flex;\n align-items: center;\n padding: 4px 0;\n }\n\n .icon {\n font-size: 120%;\n margin: 8px;\n background: #eee;\n border: solid 1px #ddd;\n width: 45px;\n height: 45px;\n }\n\n .tags {\n margin: 4px 0;\n }\n\n .vault-name {\n font-weight: bold;\n margin-bottom: 4px;\n }\n\n .vault-info {\n flex: 1;\n width: 0;\n }\n `\n ];\n\n render() {\n return html`\n <pl-icon class=\"icon\" icon=\"vault\"></pl-icon>\n\n <div class=\"vault-info\">\n <div class=\"vault-name ellipsis\">${this.vault.name}</div>\n\n <div class=\"tags small\">\n <div class=\"tag\">\n <pl-icon icon=\"group\"></pl-icon>\n\n <div>${this.groups}</div>\n </div>\n\n <div class=\"tag\">\n <pl-icon icon=\"user\"></pl-icon>\n\n <div>${this.members}</div>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { BaseElement, property, observe, css } from \"./base\";\nimport { shared } from \"../styles\";\n\nexport class View extends BaseElement {\n static styles = [\n shared,\n css`\n @supports (-webkit-overflow-scrolling: touch) {\n header {\n padding-top: max(env(safe-area-inset-top), 8px);\n }\n\n .fabs {\n margin: calc(env(safe-area-inset-bottom) / 3);\n }\n }\n `\n ];\n\n @property()\n active: boolean = false;\n\n @observe(\"active\")\n _activeChanged() {\n if (this.active) {\n this._activated();\n } else {\n this._deactivated();\n }\n }\n\n protected _activated() {}\n\n protected _deactivated() {}\n}\n","import { TemplateResult } from \"lit-html\";\nimport { guard } from \"lit-html/directives/guard\";\nimport { BaseElement, element, property, html, css, observe, listen } from \"./base\";\nimport { mixins } from \"../styles\";\n\n@element(\"pl-virtual-list\")\nexport class VirtualList<T> extends BaseElement {\n @property()\n data: T[] = [];\n\n @property()\n minItemWidth: number;\n\n @property()\n itemHeight: number;\n\n @property()\n renderItem: (data: T) => TemplateResult;\n\n @property()\n buffer: number = 1;\n\n @property()\n guard?: (data: T) => any[];\n\n get firstIndex() {\n return this._firstIndex;\n }\n get lastIndex() {\n return this._lastIndex;\n }\n\n private _firstIndex: number;\n private _lastIndex: number;\n private _height: number;\n private _width: number;\n private _canvasHeight: number;\n private _itemWidth: number;\n private _itemsPerRow: number;\n\n private _elements: {\n data: T | null;\n x: number;\n y: number;\n }[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"scroll\", () => this._updateIndizes(), { passive: true });\n this._updateBounds();\n }\n\n @observe(\"data\", \"itemMinWidth\", \"minItemWidth\", \"itemHeight\")\n @listen(\"resize\", window)\n _updateBounds() {\n const { width, height } = getComputedStyle(this);\n this._width = parseInt(width!);\n this._height = parseInt(height!);\n this._itemsPerRow = Math.floor(this._width / (this.minItemWidth || this._width));\n this._itemWidth = this._width / this._itemsPerRow;\n const rowCount = Math.ceil(this.data.length / this._itemsPerRow);\n this._canvasHeight = rowCount * this.itemHeight;\n const elementCount = Math.ceil(this._height / this.itemHeight + 2 * this.buffer) * this._itemsPerRow;\n\n const els = [];\n for (let i = 0; i < elementCount; i++) {\n els.push({ data: null, x: 0, y: 0 });\n }\n this._elements = els;\n this._updateIndizes();\n this._updateElements();\n }\n\n _updateIndizes() {\n const oldFirstIndex = this._firstIndex;\n const oldLastIndex = this._lastIndex;\n this._firstIndex = Math.max(Math.floor(this.scrollTop / this.itemHeight - this.buffer) * this._itemsPerRow, 0);\n this._lastIndex = Math.min(this._firstIndex + this._elements.length, this.data.length) - 1;\n if (this._firstIndex !== oldFirstIndex || this._lastIndex !== oldLastIndex) {\n this._updateElements();\n }\n }\n\n _updateElements() {\n for (let i = this._firstIndex; i <= this._lastIndex; i++) {\n const elIndex = i % this._elements.length;\n Object.assign(this._elements[elIndex], {\n data: this.data[i],\n x: (i % this._itemsPerRow) * this._itemWidth,\n y: Math.floor(i / this._itemsPerRow) * this.itemHeight\n });\n }\n this.requestUpdate();\n }\n\n createRenderRoot() {\n return this;\n }\n\n static styles = [\n css`\n :host {\n ${mixins.scroll()}\n overflow-y: auto !important;\n overflow-x: hidden !important;\n }\n\n ::slotted(.content) {\n position: relative;\n }\n\n ::slotted(.cell) {\n position: absolute;\n will-change: transform;\n transition: transform 0.5s;\n }\n `\n ];\n\n render() {\n const { _itemWidth: w, itemHeight: h } = this;\n return html`\n <div class=\"content\" style=\"position: relative; height: ${this._canvasHeight}px\">\n ${this._elements.map(({ x, y, data }) => {\n const render = () => {\n return data !== null\n ? html`\n <div\n class=\"cell\"\n style=\"position: absolute; will-change: transform; width: ${w}px; height: ${h}px; transform: translate3d(${x}px, ${y}px, 0)\"\n >\n ${this.renderItem(data)}\n </div>\n `\n : html``;\n };\n\n const deps = [x, y, data, w, h];\n this.guard && data && deps.push(...this.guard(data));\n return this.guard ? guard(deps, render) : render();\n })}\n </div>\n `;\n }\n}\n\n@element(\"virtual-list-test\")\nexport class VirtualListTest extends BaseElement {\n data: { i: number }[] = [];\n\n constructor() {\n super();\n for (let i = 0; i < 10000; i++) {\n this.data.push({ i });\n }\n }\n\n static styles = [\n css`\n pl-virtual-list {\n ${mixins.fullbleed()}\n overflow-y: auto;\n }\n\n .item {\n border: solid 1px;\n margin: 5px;\n text-align: center;\n line-height: 90px;\n }\n `\n ];\n\n render() {\n return html`\n <pl-virtual-list\n .data=${this.data}\n .minItemWidth=${200}\n .itemHeight=${100}\n .renderItem=${(item: { i: number }) =>\n html`\n <div class=\"item\">${item.i}</div>\n `}\n ></pl-virtual-list>\n `;\n }\n}\n","import { App } from \"@padloc/core/src/app\";\nimport { getPlatform } from \"@padloc/core/src/platform\";\nimport { Router } from \"./lib/route\";\nimport { AjaxSender } from \"./lib/ajax\";\n\nconst sender = new AjaxSender(process.env.PL_SERVER_URL!);\nexport const app = (window.app = new App(sender));\nexport const router = (window.router = new Router());\nwindow.getPlatform = getPlatform;\n","import { Err, ErrorCode } from \"@padloc/core/src/error\";\nimport { marshal, unmarshal } from \"@padloc/core/src/encoding\";\nimport { Request, Response, Sender, RequestProgress } from \"@padloc/core/src/transport\";\n\nexport type Method = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n\nexport async function request(\n method: Method,\n url: string,\n body?: string,\n headers?: Map<string, string>,\n progress?: RequestProgress\n): Promise<XMLHttpRequest> {\n let req = new XMLHttpRequest();\n\n return new Promise<XMLHttpRequest>((resolve, reject) => {\n req.onreadystatechange = () => {\n if (req.readyState === 4) {\n if (!req.status) {\n reject(new Err(ErrorCode.FAILED_CONNECTION));\n } else {\n resolve(req);\n }\n }\n };\n\n try {\n req.open(method, url, true);\n if (headers) {\n headers.forEach((value, key) => req.setRequestHeader(key, value));\n }\n if (progress) {\n req.onprogress = (pg: { loaded: number; total: number }) => (progress.downloadProgress = pg);\n req.upload.onprogress = (pg: { loaded: number; total: number }) => (progress.uploadProgress = pg);\n }\n req.send(body);\n } catch (e) {\n reject(new Err(ErrorCode.FAILED_CONNECTION));\n }\n });\n}\n\nexport class AjaxSender implements Sender {\n constructor(public url: string) {}\n\n async send(req: Request, progress?: RequestProgress): Promise<Response> {\n const body = marshal(req.toRaw());\n const res = await request(\n \"POST\",\n this.url,\n body,\n new Map<string, string>([[\"Content-Type\", \"application/json\"], [\"Accept\", \"application/json\"]]),\n progress\n );\n try {\n return new Response().fromRaw(unmarshal(res.responseText));\n } catch (e) {\n throw new Err(ErrorCode.SERVER_ERROR);\n }\n }\n}\n","const defaults = {\n animation: \"slideIn\",\n duration: 500,\n easing: \"ease\",\n delay: 0,\n fill: \"backwards\",\n initialDelay: 0,\n fullDuration: 1000,\n clear: false,\n direction: \"normal\"\n};\n\nconst clearAnimation = new Map<HTMLElement, number>();\n\nexport function animateElement(el: HTMLElement, opts = {}) {\n const { animation, duration, direction, easing, delay, fill, clear } = Object.assign({}, defaults, opts);\n clearTimeout(clearAnimation.get(el));\n el.style.animation = \"\";\n el.offsetLeft;\n el.style.animation = `${animation} ${direction} ${duration}ms ${easing} ${delay}ms ${fill}`;\n if (clear) {\n const clearDelay = typeof clear === \"number\" ? clear : 0;\n clearAnimation.set(el, window.setTimeout(() => (el.style.animation = \"\"), delay + duration + clearDelay));\n }\n\n return new Promise(resolve => setTimeout(resolve, delay + duration));\n}\n\nexport function animateCascade(nodes: Iterable<Node | Element>, opts = {}) {\n const els = Array.from(nodes);\n const { fullDuration, duration, initialDelay } = Object.assign({}, defaults, opts);\n const dt = Math.max(30, Math.floor((fullDuration - duration) / els.length));\n\n const promises = [];\n for (const [i, e] of els.entries()) {\n promises.push(animateElement(e as HTMLElement, Object.assign(opts, { delay: initialDelay + i * dt })));\n }\n\n return Promise.all(promises);\n}\n","import { VaultItem, Field } from \"@padloc/core/src/item\";\nimport \"../elements/clipboard\";\nimport { Clipboard } from \"../elements/clipboard\";\nimport { getSingleton } from \"./singleton\"\n\nexport async function setClipboard(item: VaultItem, field: Field, duration?: number) {\n const singleton = getSingleton(\"pl-clipboard\") as Clipboard;\n return singleton.set(item, field, duration);\n}\n\nexport function clearClipboard() {\n const singleton = getSingleton(\"pl-clipboard\") as Clipboard;\n singleton.clear();\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { BaseElement } from \"../elements/base\";\nimport \"../elements/generator\";\nimport \"../elements/alert-dialog\";\nimport \"../elements/prompt-dialog\";\nimport \"../elements/export-dialog\";\nimport { AlertDialog, AlertOptions } from \"../elements/alert-dialog\";\nimport { PromptDialog, PromptOptions } from \"../elements/prompt-dialog\";\nimport { getSingleton } from \"./singleton\";\n\nlet lastDialogPromise = Promise.resolve();\nlet currentDialog: any;\n\nexport const getDialog = getSingleton;\n\nexport function lineUpDialog(d: string | any, fn: (d: any) => Promise<any>): Promise<any> {\n const dialog = typeof d === \"string\" ? getSingleton(d) : d;\n const promise = lastDialogPromise.then(() => {\n currentDialog = dialog;\n return fn(dialog);\n });\n\n lastDialogPromise = promise;\n\n return promise;\n}\n\nexport function alert(message: string, options?: AlertOptions, instant = false): Promise<number> {\n options = options || {};\n options.message = message;\n return instant\n ? getDialog(\"pl-alert-dialog\").show(options)\n : lineUpDialog(\"pl-alert-dialog\", (dialog: AlertDialog) => dialog.show(options));\n}\n\nexport function confirm(\n message: string,\n confirmLabel = $l(\"Confirm\"),\n cancelLabel = $l(\"Cancel\"),\n options: any = {},\n instant?: boolean\n) {\n options.options = [confirmLabel, cancelLabel];\n options.type = options.type || \"question\";\n options.horizontal = typeof options.horizontal !== \"undefined\" ? options.horizontal : true;\n return alert(message, options, instant).then(choice => choice === 0);\n}\n\nexport function prompt(message: string, opts: PromptOptions = {}, instant = false) {\n opts.message = message;\n return instant\n ? getDialog(\"pl-prompt-dialog\").show(opts)\n : lineUpDialog(\"pl-prompt-dialog\", (dialog: PromptDialog) => dialog.show(opts));\n}\n\nexport function choose(message: string, options: string[], opts: AlertOptions = {}): Promise<number> {\n opts.options = options;\n return alert(message, {\n ...opts,\n options,\n type: \"choice\",\n vertical: true\n });\n}\n\nexport function generate() {\n return lineUpDialog(\"pl-generator\", dialog => dialog.show());\n}\n\nexport function clearDialogs() {\n if (currentDialog) {\n currentDialog.open = false;\n }\n lastDialogPromise = Promise.resolve();\n}\n\nexport function dialog(name: string) {\n return (prototype: BaseElement, propertyName: string) => {\n Object.defineProperty(prototype, propertyName, {\n get() {\n return getDialog(name);\n },\n enumerable: true,\n configurable: true\n });\n };\n}\n","import { VaultItem } from \"@padloc/core/src/item\";\nimport { PBES2Container } from \"@padloc/core/src/container\";\nimport { marshal, stringToBytes } from \"@padloc/core/src/encoding\";\nimport { loadPapa, ImportFormat, CSV, PBES2 } from \"./import\";\n\nexport const supportedFormats: ImportFormat[] = [CSV, PBES2];\nexport { CSV, PBES2 } from \"./import\";\n\nfunction itemsToTable(items: VaultItem[]) {\n // Array of column names\n let cols = [\"name\", \"tags\"];\n // Column indizes associated with field/column names\n let colInds = {};\n // Two dimensional array, starting with column names\n let table = [cols];\n\n // Fill up columns array with distinct field names\n for (let item of items) {\n for (let field of item.fields) {\n if (!colInds[field.name]) {\n colInds[field.name] = cols.length;\n cols.push(field.name);\n }\n }\n }\n\n // Creates an array of empty strings with the length of the `cols` array\n function emptyRow() {\n var l = cols.length;\n var row: string[] = [];\n while (l--) {\n row.push(\"\");\n }\n return row;\n }\n\n // Add a row for each item\n items.forEach(function (item) {\n // Create an empty row to be filled with item name, category and field values\n var row = emptyRow();\n // VaultItem name and category are always the first and second column respectively\n row[0] = item.name;\n row[1] = item.tags.join(\",\");\n\n // Fill up columns with corrensponding field values if the fields exist on the item. All\n // other columns remain empty\n item.fields.forEach(function (item) {\n row[colInds[item.name]] = item.value;\n });\n\n // Add row to table\n table.push(row);\n });\n\n return table;\n}\n\nexport async function asCSV(items: VaultItem[]): Promise<string> {\n const papa = await loadPapa();\n return papa.unparse(itemsToTable(items));\n}\n\nexport async function asPBES2Container(items: VaultItem[], password: string): Promise<string> {\n for (const item of items) {\n item.attachments = [];\n }\n\n const container = new PBES2Container();\n await container.unlock(password);\n await container.setData(stringToBytes(marshal({ items: items.map((item) => item.toRaw()) })));\n return container.toJSON();\n}\n","import { unmarshal, bytesToString } from \"@padloc/core/src/encoding\";\nimport { PBES2Container } from \"@padloc/core/src/container\";\nimport { validateLegacyContainer, parseLegacyContainer } from \"@padloc/core/src/legacy\";\nimport { VaultItem, Field, createVaultItem, FieldType } from \"@padloc/core/src/item\";\nimport { Err, ErrorCode } from \"@padloc/core/src/error\";\nimport { uuid } from \"@padloc/core/src/util\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\n\nexport interface ImportFormat {\n format: \"csv\" | \"padlock-legacy\" | \"lastpass\" | \"padloc\";\n toString(): string;\n}\n\nexport const CSV: ImportFormat = {\n format: \"csv\",\n toString() {\n return \"CSV\";\n }\n};\n\nexport const PADLOCK_LEGACY: ImportFormat = {\n format: \"padlock-legacy\",\n toString() {\n return \"Padlock (v2)\";\n }\n};\n\nexport const LASTPASS: ImportFormat = {\n format: \"lastpass\",\n toString() {\n return \"LastPass\";\n }\n};\n\nexport const PBES2: ImportFormat = {\n format: \"padloc\",\n toString() {\n return \"Encrypted Container\";\n }\n};\n\nexport const supportedFormats: ImportFormat[] = [CSV, PADLOCK_LEGACY, LASTPASS, PBES2];\n\nexport function loadPapa(): Promise<any> {\n return import(/* webpackChunkName: \"papaparse\" */ \"papaparse\");\n}\n\n/**\n * Takes a data table (represented by a two-dimensional array) and converts it\n * into an array of items\n * @param Array data Two-dimensional array containing tabular item data; The first 'row'\n * should contain field names. All other rows represent items, containing\n * the item name, field values and optionally a list of tags.\n * @param Integer nameColIndex Index of the column containing the item names. Defaults to 0\n * @param Integer tagsColIndex Index of the column containing the item categories. If left empty\n * no categories will be used\n */\nexport async function fromTable(data: string[][], nameColIndex?: number, tagsColIndex?: number): Promise<VaultItem[]> {\n // Use first row for column names\n const colNames = data[0];\n\n if (nameColIndex === undefined) {\n const i = colNames.indexOf(\"name\");\n nameColIndex = i !== -1 ? i : 0;\n }\n\n if (tagsColIndex === undefined) {\n tagsColIndex = colNames.indexOf(\"tags\");\n if (tagsColIndex === -1) {\n tagsColIndex = colNames.indexOf(\"category\");\n }\n }\n\n // All subsequent rows should contain values\n let items = data.slice(1).map(function(row) {\n // Construct an array of field object from column names and values\n let fields: Field[] = [];\n for (let i = 0; i < row.length; i++) {\n // Skip name column, category column (if any) and empty fields\n if (i != nameColIndex && i != tagsColIndex && row[i]) {\n const name = colNames[i];\n const value = row[i];\n fields.push(\n new Field().fromRaw({\n name,\n value\n })\n );\n }\n }\n\n const name = row[nameColIndex!];\n const tags = row[tagsColIndex!];\n return createVaultItem(name, fields, (tags && tags.split(\",\")) || []);\n });\n\n return Promise.all(items);\n}\n\nexport async function isCSV(data: string): Promise<Boolean> {\n const papa = await loadPapa();\n return papa.parse(data).errors.length === 0;\n}\n\nexport async function asCSV(data: string, nameColIndex?: number, tagsColIndex?: number): Promise<VaultItem[]> {\n const papa = await loadPapa();\n const parsed = papa.parse(data);\n if (parsed.errors.length) {\n throw new Err(ErrorCode.INVALID_CSV);\n }\n return fromTable(parsed.data, nameColIndex, tagsColIndex);\n}\n\n/**\n * Checks if a given string represents a Padlock enrypted backup\n */\nexport function isPadlockV1(data: string): boolean {\n try {\n return validateLegacyContainer(unmarshal(data));\n } catch (e) {\n return false;\n }\n}\n\nexport async function asPadlockLegacy(data: string, password: string): Promise<VaultItem[]> {\n const container = parseLegacyContainer(unmarshal(data));\n await container.unlock(password);\n return importLegacyContainer(container);\n}\n\nexport async function importLegacyContainer(container: PBES2Container) {\n const records = unmarshal(bytesToString(await container.getData())) as any[];\n const items = records\n .filter(({ removed }) => !removed)\n .map(async ({ name = \"Unnamed\", fields = [], tags, category, updated }) => {\n return new VaultItem().fromRaw({\n id: await uuid(),\n name,\n fields,\n tags: tags || [category],\n updated,\n updatedBy: \"\",\n attachments: []\n });\n });\n\n return Promise.all(items);\n}\n\nexport function isPBES2Container(data: string) {\n try {\n new PBES2Container().fromRaw(unmarshal(data));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport async function asPBES2Container(data: string, password: string): Promise<VaultItem[]> {\n const container = new PBES2Container().fromRaw(unmarshal(data));\n await container.unlock(password);\n\n const raw = unmarshal(bytesToString(await container.getData())) as any;\n\n const items = raw.items.map((item: any) => {\n // Due to a bug in < v1.3.4 items were not serialized properly, so we may\n // need this additional step\n if (typeof item === \"string\") {\n try {\n item = unmarshal(item);\n } catch (e) {}\n }\n return new VaultItem().fromRaw(item);\n });\n\n return items;\n}\n\n/*\n * Lastpass secure notes are exported by putting non-standard fields into the 'extra' column. Every line\n * represents a field in the following format:\n *\n * field_name:data\n *\n * We're parsing that information to retrieve the individual fields\n */\nfunction lpParseNotes(str: string): Field[] {\n let lines = str.split(\"\\n\");\n let fields = lines\n .filter(line => !!line)\n .map(line => {\n let split = line.indexOf(\":\");\n return new Field({\n name: line.substring(0, split),\n value: line.substring(split + 1),\n type: FieldType.Text\n });\n });\n return fields;\n}\n\n/*\n * Parses a single row in a LastPass CSV file. Apart from extracting the default fields, we also parse\n * the 'extra' column for 'special notes' and remove any special fields that are not needed outside of\n * LastPass\n */\nasync function lpParseRow(row: string[]): Promise<VaultItem> {\n const nameIndex = 4;\n const categoryIndex = 5;\n const urlIndex = 0;\n const usernameIndex = 1;\n const passwordIndex = 2;\n const notesIndex = 3;\n\n let fields: Field[] = [\n new Field({ name: $l(\"Username\"), value: row[usernameIndex], type: FieldType.Username }),\n new Field({ name: $l(\"Password\"), value: row[passwordIndex], type: FieldType.Password }),\n new Field({ name: $l(\"URL\"), value: row[urlIndex], type: FieldType.Url })\n ];\n let notes = row[notesIndex];\n\n if (row[urlIndex] === \"http://sn\") {\n // The 'http://sn' url indicates that this line represents a 'secure note', which means\n // we'll have to parse the 'extra' column to retrieve the individual fields\n fields.push(...lpParseNotes(notes));\n // In case of 'secure notes' we don't want the url and NoteType field\n fields = fields.filter(f => f.name != \"url\" && f.name != \"NoteType\");\n } else {\n // We've got a regular 'site' item, so the 'extra' column simply contains notes\n fields.push(new Field({ name: $l(\"Notes\"), value: notes, type: FieldType.Note }));\n }\n\n const dir = row[categoryIndex];\n // Create a basic item using the standard fields\n return createVaultItem(row[nameIndex], fields, dir ? [dir] : []);\n}\n\nexport async function asLastPass(data: string): Promise<VaultItem[]> {\n const papa = await loadPapa();\n let items = papa\n .parse(data)\n .data // Remove first row as it only contains field names\n .slice(1)\n // Filter out empty rows\n .filter((row: string[]) => row.length > 1)\n .map(lpParseRow);\n\n return Promise.all(items);\n}\n\n/**\n * Checks if a given string represents a LastPass CSV file\n */\nexport function isLastPass(data: string): boolean {\n return data.split(\"\\n\")[0] === \"url,username,password,extra,name,grouping,fav\";\n}\n\nexport function guessFormat(data: string): ImportFormat | null {\n return isPBES2Container(data)\n ? PBES2\n : isPadlockV1(data)\n ? PADLOCK_LEGACY\n : isLastPass(data)\n ? LASTPASS\n : isCSV(data)\n ? CSV\n : null;\n}\n","import { EventEmitter } from \"@padloc/core/src/event-target\";\n\nexport class Router extends EventEmitter {\n history: string[] = [];\n\n constructor(public basePath = \"/\") {\n super();\n window.addEventListener(\"popstate\", () => {\n this._pathChanged();\n });\n this._pathChanged();\n }\n\n private _pathChanged() {\n const index = (history.state && history.state.historyIndex) || 0;\n const path = this.path;\n const direction = this.history.length - 1 < index ? \"forward\" : \"backward\";\n\n if (this.history.length === index) {\n this.history.push(path);\n } else\n while (this.history.length - 1 > index) {\n this.history.pop();\n }\n\n this.dispatch(\"route-changed\", { path, direction });\n }\n\n get path() {\n return window.location.pathname.replace(new RegExp(\"^\" + this.basePath), \"\");\n }\n\n get params() {\n const params = {};\n for (const [key, value] of new URLSearchParams(window.location.search)) {\n params[key] = value;\n }\n return params;\n }\n\n set params(params: { [prop: string]: string }) {\n history.replaceState(\n { historyIndex: this.history.length - 1 },\n \"\",\n this.basePath + this.path + \"?\" + new URLSearchParams(params).toString()\n );\n this.dispatch(\"params-changed\", { params });\n }\n\n get canGoBack() {\n return this.history.length > 1;\n }\n\n go(path: string, params?: { [prop: string]: string }, replace = false) {\n params = params || this.params;\n\n // Clean out properties with value undefined\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === \"undefined\") {\n delete params[key];\n }\n }\n\n const queryString = new URLSearchParams(params).toString();\n\n if (path !== this.path || queryString !== window.location.search) {\n let url = this.basePath + path;\n if (queryString) {\n url += \"?\" + queryString;\n }\n\n if (replace) {\n history.replaceState({ historyIndex: this.history.length - 1 }, \"\", url);\n } else {\n history.pushState({ historyIndex: this.history.length }, \"\", url);\n }\n this._pathChanged();\n }\n }\n\n forward() {\n history.forward();\n }\n\n back(alternate = \"\") {\n if (this.canGoBack) {\n history.back();\n } else {\n this.go(alternate);\n }\n }\n}\n","const singletons = {};\nlet container: HTMLElement;\n\nexport function getSingleton(elName: string) {\n if (!container) {\n container = document.querySelector(\"[singleton-container]\") as HTMLElement;\n }\n\n let el = singletons[elName];\n\n if (!el) {\n singletons[elName] = el = document.createElement(elName);\n container.appendChild(el);\n }\n\n return el;\n}\n","const loaded: Map<string, Promise<any>> = new Map<string, Promise<any>>();\nexport function loadScript(src: string, global?: string): Promise<any> {\n if (loaded.has(src)) {\n return loaded.get(src)!;\n }\n\n const s = document.createElement(\"script\");\n s.src = src;\n s.type = \"text/javascript\";\n const p = new Promise((resolve, reject) => {\n s.onload = () => resolve(global ? window[global] : undefined);\n s.onerror = (e: string | Event) => reject(e);\n document.head.appendChild(s);\n });\n\n loaded.set(src, p);\n return p;\n}\n\nexport async function formatDateFromNow(date: Date | string | number, addSuffix = true) {\n const { distanceInWordsToNow } = await import(/* webpackChunkName: \"date-fns\" */ \"date-fns\");\n return distanceInWordsToNow(date, { addSuffix });\n}\n\nexport async function passwordStrength(pwd: string): Promise<{ score: number }> {\n // @ts-ignore\n const { default: zxcvbn } = await import(/* webpackChunkName: \"zxcvbn\" */ \"zxcvbn\");\n return zxcvbn(pwd);\n}\n\nexport function toggleAttribute(el: Element, attr: string, on: boolean) {\n if (on) {\n el.setAttribute(attr, \"\");\n } else {\n el.removeAttribute(attr);\n }\n}\n\nexport function mediaType(mimeType: string) {\n const match = mimeType.match(/(.*)\\/(.*)/);\n const [, type, subtype] = match || [\"\", \"\", \"\"];\n\n switch (type) {\n case \"video\":\n return \"video\";\n case \"audio\":\n return \"audio\";\n case \"image\":\n return \"image\";\n case \"text\":\n switch (subtype) {\n case \"csv\":\n // return \"csv\";\n case \"plain\":\n return \"text\";\n default:\n return \"code\";\n }\n case \"application\":\n switch (subtype) {\n case \"pdf\":\n return \"pdf\";\n case \"json\":\n return \"code\";\n case \"pkcs8\":\n case \"pkcs10\":\n case \"pkix-cert\":\n case \"pkix-crl\":\n case \"pkcs7-mime\":\n case \"x-x509-ca-cert\":\n case \"x-x509-user-cert\":\n case \"x-pkcs12\":\n case \"x-pkcs7-certificates\":\n case \"x-pkcs7-mime\":\n case \"x-pkcs7-crl\":\n case \"x-pem-file\":\n case \"x-pkcs12\":\n case \"x-pkcs7-certreqresp\":\n return \"certificate\";\n case \"zip\":\n case \"x-7z-compressed\":\n case \"x-freearc\":\n case \"x-bzip\":\n case \"x-bzip2\":\n case \"java-archive\":\n case \"x-rar-compressed\":\n case \"x-tar\":\n return \"archive\";\n }\n default:\n return \"\";\n }\n}\n\nexport function fileIcon(mimeType: string) {\n const mType = mediaType(mimeType);\n return mType ? `file-${mType}` : \"file\";\n}\n\nexport function fileSize(size: number = 0) {\n return size < 1e6 ? Math.ceil(size / 10) / 100 + \" KB\" : Math.ceil(size / 10000) / 100 + \" MB\";\n}\n\nexport function mask(value: string): string {\n return value && value.replace(/[^\\n]/g, \"\\u2022\");\n}\n\nexport function isTouch(): boolean {\n return window.matchMedia(\"(hover: none)\").matches;\n}\n","import { app } from \"../globals\";\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport function AutoLock<B extends Constructor<Object>>(baseClass: B) {\n return class extends baseClass {\n _pausedAt: Date | null = null;\n _lockTimeout?: number;\n\n get _lockDelay() {\n return app.settings.autoLockDelay * 60 * 1000;\n }\n\n constructor(...args: any[]) {\n super(...args);\n document.addEventListener(\"click\", () => this._startTimer());\n document.addEventListener(\"keydown\", () => this._startTimer());\n document.addEventListener(\"pause\", () => this._pause());\n document.addEventListener(\"resume\", () => this._resume());\n }\n\n _cancelAutoLock() {\n this._pausedAt = null;\n if (this._lockTimeout) {\n clearTimeout(this._lockTimeout);\n }\n // if (this._lockNotificationTimeout) {\n // clearTimeout(this._lockNotificationTimeout);\n // }\n }\n\n // Handler for cordova `pause` event. Records the current time for auto locking when resuming\n _pause() {\n this._pausedAt = new Date();\n }\n\n // Handler for cordova `resume` event. If auto lock is enabled and the specified time has passed\n // since the app was paused, locks the app\n _resume() {\n if (\n app.settings.autoLock &&\n !app.state.locked &&\n this._pausedAt &&\n new Date().getTime() - this._pausedAt.getTime() > this._lockDelay\n ) {\n this._doLock();\n }\n this._startTimer();\n }\n\n _doLock() {\n // if app is currently syncing restart the timer\n if (app.state.syncing) {\n this._startTimer();\n return;\n }\n\n app.lock();\n }\n\n _startTimer() {\n this._cancelAutoLock();\n if (app.settings.autoLock && !app.state.locked) {\n this._lockTimeout = window.setTimeout(() => this._doLock(), this._lockDelay);\n // this._lockNotificationTimeout = setTimeout(() => {\n // if (!this.locked && !this._pausedAt) {\n // this.notify($l(\"Auto-lock in 10 seconds\"), \"info\", 3000);\n // }\n // }, this._lockDelay - 10000);\n }\n }\n };\n}\n","import { app } from \"../globals\";\nimport { ErrorHandling } from \"./error-handling\";\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport function AutoSync<B extends Constructor<ErrorHandling>>(baseClass: B) {\n return class extends baseClass {\n constructor(...args: any[]) {\n super(...args);\n app.loaded.then(() => this.startPeriodicSync());\n }\n\n startPeriodicSync() {\n setTimeout(async () => {\n if (app.state.loggedIn && !app.state.locked) {\n try {\n await app.synchronize();\n } catch (e) {\n await this.handleError(e);\n }\n }\n this.startPeriodicSync();\n }, app.settings.syncInterval * 60 * 1000);\n }\n };\n}\n","import { Err, ErrorCode } from \"@padloc/core/src/error\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { app, router } from \"../globals\";\nimport { alert } from \"../lib/dialog\";\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport interface ErrorHandling {\n handleError(error: any): Promise<boolean>;\n}\n\nexport function ErrorHandling<B extends Constructor<Object>>(baseClass: B) {\n return class extends baseClass implements ErrorHandling {\n constructor(...args: any[]) {\n super(...args);\n window.addEventListener(\"error\", (e: ErrorEvent) => this.handleError(e.error));\n window.addEventListener(\"unhandledrejection\", (e: PromiseRejectionEvent) => this.handleError(e.reason));\n }\n\n async handleError(error: any) {\n error =\n error instanceof Err\n ? error\n : error instanceof Error\n ? new Err(ErrorCode.UNKNOWN_ERROR, error.message, { error })\n : new Err(ErrorCode.UNKNOWN_ERROR, error.toString());\n\n switch (error.code) {\n case ErrorCode.FAILED_CONNECTION:\n // A failed connection is interpreted as the user simply being offline,\n // which is indicated in another place in the UI\n return true;\n case ErrorCode.INVALID_SESSION:\n case ErrorCode.SESSION_EXPIRED:\n await app.logout();\n await alert($l(\"Your session has expired. Please log in again!\"), { preventAutoClose: true });\n router.go(\"login\");\n return true;\n\n // These are expected to occur during a user lifecycle and can be ingored.\n case ErrorCode.ACCOUNT_EXISTS:\n case ErrorCode.MFA_REQUIRED:\n case ErrorCode.MFA_FAILED:\n case ErrorCode.MFA_TRIES_EXCEEDED:\n case ErrorCode.ORG_FROZEN:\n case ErrorCode.ORG_QUOTA_EXCEEDED:\n case ErrorCode.MEMBER_QUOTA_EXCEEDED:\n case ErrorCode.GROUP_QUOTA_EXCEEDED:\n case ErrorCode.VAULT_QUOTA_EXCEEDED:\n case ErrorCode.STORAGE_QUOTA_EXCEEDED:\n case ErrorCode.BILLING_ERROR:\n case ErrorCode.OUTDATED_REVISION:\n case ErrorCode.MISSING_ACCESS:\n case ErrorCode.INVALID_CREDENTIALS:\n return true;\n\n case ErrorCode.UNSUPPORTED_VERSION:\n await alert(\n error.message ||\n $l(\n \"Some data associated with your account was saved with a newer version of \" +\n \"Padloc and cannot be decoded. Please install the latest version Padloc!\"\n ),\n { title: $l(\"Update Required\"), type: \"warning\" }\n );\n\n default:\n app.state._errors.push(error);\n app.publish();\n }\n\n return false;\n }\n };\n}\n","import { Workbox } from \"workbox-window\";\nimport { translate as $l } from \"@padloc/locale/src/translate\";\nimport { confirm } from \"../lib/dialog\";\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport function ServiceWorker<B extends Constructor<Object>>(baseClass: B) {\n return class extends baseClass {\n constructor(...args: any[]) {\n super(...args);\n if (!process.env.PL_DISABLE_SW) {\n this.initSW();\n }\n }\n\n private _wb: Workbox;\n\n private async _updateReady() {\n const confirmed = await confirm(\n $l(\"A new update is ready to install! Do you want to install it now?\"),\n $l(\"Install & Reload\"),\n $l(\"Later\"),\n { preventAutoClose: true }\n );\n\n if (confirmed) {\n // set up a listener that will reload the page as soon as the\n // previously waiting service worker has taken control.\n this._wb.addEventListener(\"controlling\", () => {\n window.location.reload();\n });\n\n // Send a message telling the service worker to skip waiting.\n // This will trigger the `controlling` event handler above.\n this._wb.messageSW({ type: \"INSTALL_UPDATE\" });\n }\n }\n\n initSW() {\n if (!(\"serviceWorker\" in navigator)) {\n return;\n }\n\n this._wb = new Workbox(\"/sw.js\");\n\n // Add an event listener to detect when the registered\n // service worker has installed but is waiting to activate.\n this._wb.addEventListener(\"waiting\", () => {\n setTimeout(() => {\n this._updateReady();\n }, 1000);\n });\n\n this._wb.register();\n }\n\n checkForUpdates() {\n this._wb.register();\n }\n };\n}\n","import { BaseElement } from \"../elements/base\";\nimport { app } from \"../globals\";\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport const StateMixin = <T extends Constructor<BaseElement>>(baseElement: T) =>\n class extends baseElement {\n get app() {\n return app;\n }\n\n get state() {\n return app.state;\n }\n\n _stateHandler = this.stateChanged.bind(this);\n\n connectedCallback() {\n super.connectedCallback();\n\n app.subscribe(this._stateHandler);\n this.stateChanged();\n }\n\n disconnectedCallback() {\n app.unsubscribe(this._stateHandler);\n\n super.disconnectedCallback();\n }\n\n /**\n * The `stateChanged()` method will be called when the state is updated.\n */\n protected stateChanged() {\n this.requestUpdate();\n }\n };\n","import { css } from \"lit-element\";\n\nexport const narrowWidth = 700;\nexport const wideWidth = 1200;\n\nexport const cssVars = css`\n :host {\n --font-family: \"Nunito\";\n --font-family-fallback: sans-serif;\n --font-family-mono: \"Inconsolata\";\n\n --font-size-micro: 12px;\n --font-size-tiny: 14px;\n --font-size-small: 16px;\n --font-size-default: 18px;\n --font-weight-thin: 100;\n --font-weight-light: 300;\n --font-weight-regular: 400;\n --font-weight-bold: 700;\n\n --color-primary: #3bb7f9;\n --color-secondary: #444;\n --color-tertiary: #ffffff;\n --color-quaternary: #fafafa;\n /* --color-negative: #D7322D; */\n --color-negative: #ff6666;\n\n --color-background: var(--color-tertiary);\n --color-foreground: var(--color-secondary);\n --color-highlight: var(--color-primary);\n --color-error: var(--color-negative);\n\n --color-shade-1: rgba(0, 0, 0, 0.05);\n --color-shade-2: rgba(0, 0, 0, 0.1);\n --color-shade-3: rgba(0, 0, 0, 0.15);\n --color-shade-4: rgba(0, 0, 0, 0.2);\n\n --color-gradient-highlight-from: rgb(7, 124, 185);\n --color-gradient-highlight-to: rgb(89, 198, 255);\n --color-gradient-warning-from: #f25b00;\n --color-gradient-warning-to: #f49300;\n --color-gradient-dark-from: #222;\n --color-gradient-dark-to: #555;\n\n --color-scrim: rgba(255, 255, 255, 0.9);\n\n --color-btn-front: var(--color-foreground);\n --color-btn-back: var(--shade-3-color);\n\n --row-height: 50px;\n\n --gutter-size: 8px;\n --border-radius: 8px;\n --border-color: rgba(0, 0, 0, 0.1);\n\n --toaster-easing: cubic-bezier(1, -0.3, 0, 1.3);\n\n --shade-1-color: transparent;\n --shade-2-color: var(--color-shade-1);\n --shade-3-color: var(--color-shade-2);\n --shade-4-color: var(--color-shade-3);\n --shade-5-color: var(--color-shade-4);\n\n --narrow-width: 700px;\n --wide-width: 1200px;\n }\n`;\n","import * as mixins from \"./mixins\";\nimport * as config from \"./config\";\n\nimport { shared } from \"./shared\";\n\nexport { mixins, config, shared };\n","import { css } from \"lit-element\";\n\nexport const unselectable = () => css`\n cursor: default;\n user-select: none;\n`;\n\nexport const positionSticky = () => css`\n position: -webkit-sticky;\n position: -moz-sticky;\n position: -o-sticky;\n position: -ms-sticky;\n position: sticky;\n`;\n\nexport const fullbleed = () => css`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n`;\n\nexport const scroll = (direction?: \"vertical\" | \"horizontal\") => css`\n ${direction === \"vertical\" ? css`overflow-y` : direction === \"horizontal\" ? css`overflow-x` : css`overflow`}: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const ellipsis = () => css`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const absoluteCenter = () => css`\n ${fullbleed()};\n margin: auto;\n`;\n\nexport const shade1 = () => css`\n background: var(--shade-1-color);\n`;\n\nexport const shade2 = () => css`\n background: var(--shade-2-color);\n`;\n\nexport const shade3 = () => css`\n background: var(--shade-3-color);\n`;\n\nexport const shade4 = () => css`\n background: var(--shade-4-color);\n`;\n\nexport const shade5 = () => css`\n background: var(--shade-5-color);\n`;\n\nexport const card = () => css`\n background: var(--color-background);\n /* box-shadow: rgba(0, 0, 0, 0.2) 0 0 1px; */\n border-radius: var(--border-radius);\n border: solid 1px rgba(0, 0, 0, 0.1);\n border-bottom-width: 2px;\n overflow: hidden;\n`;\n\nexport const gradientHighlight = (horizontal = false) => css`\n background: linear-gradient(\n ${horizontal ? css`90deg` : css`0`},\n var(--color-gradient-highlight-from) 0%,\n var(--color-gradient-highlight-to) 100%\n );\n`;\n\nexport const gradientWarning = (horizontal = false) => css`\n background: linear-gradient(\n ${horizontal ? css`90deg` : css`0`},\n var(--color-gradient-warning-from) 0%,\n var(--color-gradient-warning-to) 100%\n );\n`;\n\nexport const gradientDark = (horizontal = false) => css`\n background: linear-gradient(\n ${horizontal ? css`90deg` : css`0`},\n var(--color-gradient-dark-from) 0%,\n var(--color-gradient-dark-to) 100%\n );\n`;\n\nexport const textShadow = () => css`\n text-shadow: rgba(0, 0, 0, 0.2) 0px 2px 0px;\n`;\n","import { css } from \"lit-element\";\nimport * as mixins from \"./mixins\";\n\nexport const shared = css`\n :host {\n user-select: none;\n -webkit-user-select: none;\n }\n\n input,\n textarea {\n user-select: auto;\n -webkit-user-select: auto;\n }\n\n input[type=\"number\"]::-webkit-outer-spin-button,\n input[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n :host,\n html,\n button,\n input,\n textarea {\n font-family: var(--font-family), var(--font-family-fallback);\n font-weight: var(--font-weight-regular);\n font-size: var(--font-size-default);\n -webkit-font-smoothing: antialiased;\n -webkit-tap-highlight-color: transparent;\n }\n\n ::selection {\n background: var(--color-secondary);\n color: var(--color-tertiary);\n }\n\n a {\n text-decoration: underline;\n color: inherit;\n }\n\n button,\n a.button {\n display: inline-block;\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n border: none;\n margin: 0;\n padding: 12px 15px;\n cursor: pointer;\n text-align: center;\n text-shadow: inherit;\n }\n\n button.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n button.icon pl-icon {\n width: 30px;\n height: 20px;\n margin-left: -8px;\n font-size: 90%;\n }\n\n button.arrow,\n a.button.arrow {\n padding-right: 30px;\n }\n\n button.arrow::before,\n a.button.arrow::before {\n font-family: \"FontAwesome\";\n content: \"\\\\f054\";\n display: block;\n position: absolute;\n top: 0;\n right: 15px;\n bottom: 0;\n }\n\n button,\n pl-loading-button,\n pl-toggle-button,\n a.button {\n background: var(--color-btn-back);\n border-radius: var(--border-radius);\n }\n\n button.primary,\n pl-loading-button.primary,\n a.button.primary {\n background: var(--color-highlight);\n color: var(--color-tertiary);\n font-weight: bold;\n }\n\n button.negative,\n pl-loading-button.negative,\n a.button.negative {\n background: var(--color-negative);\n color: var(--color-tertiary);\n font-weight: bold;\n }\n\n button.transparent {\n background: none;\n }\n\n button.light {\n color: var(--color-tertiary);\n }\n\n input,\n select {\n border: none;\n -webkit-appearance: none;\n -mox-appearance: none;\n appearance: none;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n text-shadow: inherit;\n color: inherit;\n border-radius: 0;\n background: transparent;\n margin: 0;\n padding: 0;\n }\n\n textarea {\n font-weight: inherit;\n font-family: inherit;\n font-size: inherit;\n color: inherit;\n border: none;\n background: transparent;\n margin: 0;\n display: block;\n padding: 0;\n border-radius: 0;\n appearance: none;\n resize: none;\n }\n\n textarea[nowrap] {\n white-space: pre;\n word-wrap: normal;\n overflow-x: scroll;\n }\n\n strong {\n font-weight: var(--font-weight-bold);\n }\n\n h1,\n h2 {\n font-weight: normal;\n }\n\n h1 {\n font-size: 150%;\n margin: 20px;\n }\n\n h2 {\n font-size: 120%;\n margin: 10px 20px 5px 20px;\n }\n\n ::-webkit-search-cancel-button {\n display: none;\n }\n\n *:focus {\n outline: none;\n }\n\n ::-webkit-input-placeholder {\n text-shadow: inherit;\n color: inherit;\n opacity: 0.6;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [invisible] {\n opacity: 0;\n }\n\n [disabled] {\n opacity: 0.5;\n pointer-events: none !important;\n }\n\n section {\n margin: 10px 5px;\n }\n\n section > button {\n width: 100%;\n }\n\n header {\n display: flex;\n font-size: 120%;\n padding: 10px;\n background: var(--color-tertiary);\n border-bottom: solid 3px var(--color-shade-1);\n align-items: center;\n font-weight: bold;\n min-height: 40px;\n }\n\n header pl-input {\n height: auto;\n background: transparent;\n padding: 0 5px;\n }\n\n header .title {\n padding: 0 5px;\n text-align: center;\n }\n\n main {\n flex: 1;\n box-sizing: border-box;\n ${mixins.scroll()}\n overflow-x: hidden;\n position: relative;\n }\n\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n\n .item {\n border-radius: var(--border-radius);\n background: var(--color-tertiary);\n border: solid 1px var(--color-shade-1);\n border-bottom-width: 3px;\n margin: var(--gutter-size);\n /*box-shadow: 0px 5px 5px -5px var(--color-shade-2), 0 0 2px var(--color-shade-1);*/\n }\n\n .item.error {\n background: var(--color-negative);\n color: var(--color-tertiary);\n padding: 8px;\n text-align: center;\n }\n\n .item.padded {\n padding: 8px;\n }\n\n code {\n font-family: var(--font-family-mono);\n }\n\n pre {\n font: inherit;\n margin: 0;\n }\n\n pl-dialog .message {\n padding: 15px;\n text-align: center;\n }\n\n pl-dialog button,\n pl-dialog pl-loading-button {\n width: 100%;\n box-sizing: border-box;\n font-weight: bold;\n }\n\n .layout {\n display: flex;\n }\n\n .layout.vertical {\n flex-direction: column;\n }\n\n .layout.align-center {\n align-items: center;\n }\n\n .layout.justify-center {\n justify-content: center;\n }\n\n .spacer,\n .flex,\n [flex] {\n flex: 1;\n }\n\n .tap {\n position: relative;\n cursor: pointer;\n }\n\n .tap::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: currentColor;\n opacity: 0;\n transition: opacity 1s;\n pointer-events: none;\n border-radius: inherit;\n }\n\n .tap:active::after {\n opacity: 0.3;\n transition: none;\n }\n\n .tap::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: currentColor;\n opacity: 0;\n pointer-events: none;\n border-radius: inherit;\n }\n\n .tap:not(:active):hover::before {\n opacity: 0.1;\n }\n\n .tiles > :nth-child(8n + 1),\n .tiles-1 {\n ${mixins.shade1()}\n }\n\n .tiles > :nth-child(8n + 2),\n .tiles-2 {\n ${mixins.shade2()}\n }\n\n .tiles > :nth-child(8n + 3),\n .tiles-3 {\n ${mixins.shade3()}\n }\n\n .tiles > :nth-child(8n + 4),\n .tiles-4 {\n ${mixins.shade4()}\n }\n\n .tiles > :nth-child(8n + 5),\n .tiles-5 {\n ${mixins.shade5()}\n }\n\n .tiles > :nth-child(8n + 6),\n .tiles-6 {\n ${mixins.shade4()}\n }\n\n .tiles > :nth-child(8n + 7),\n .tiles-7 {\n ${mixins.shade3()}\n }\n\n .tiles > :nth-child(8n + 8),\n .tiles-8 {\n ${mixins.shade2()}\n }\n\n .ellipsis {\n ${mixins.ellipsis()}\n }\n\n pl-icon[spin] {\n animation: spin 1s infinite;\n transform-origin: center 49%;\n }\n\n .info {\n display: flex;\n align-items: center;\n }\n\n .info-icon {\n width: 80px;\n height: 80px;\n font-size: 46px;\n margin: 10px 0 10px 10px;\n }\n\n .info-body {\n padding: 20px 15px 20px 10px;\n flex: 1;\n width: 0;\n }\n\n .info-title {\n font-size: 120%;\n font-weight: bold;\n margin-bottom: 5px;\n }\n\n .info-text {\n font-size: var(--font-size-small);\n }\n\n .tags {\n display: flex;\n overflow-x: auto;\n margin: 8px 0;\n align-items: center;\n -webkit-overflow-scrolling: touch;\n }\n\n .tags::after {\n content: \"\";\n display: block;\n width: 1px;\n flex: none;\n }\n\n .tag {\n color: var(--color-tertiary);\n /*text-shadow: rgba(0, 0, 0, 0.2) 0 1px 0;*/\n font-weight: bold;\n border-radius: var(--border-radius);\n font-size: var(--font-size-tiny);\n padding: 5px 8px;\n line-height: normal;\n text-align: center;\n background: var(--color-secondary);\n }\n\n .tag:not(:last-child) {\n margin-right: 6px;\n }\n\n .tag > * {\n display: inline-block;\n vertical-align: top;\n }\n\n .tag pl-icon {\n width: 20px;\n height: 20px;\n }\n\n .tag pl-icon:first-child {\n margin-left: -2px;\n }\n\n .tag pl-icon:last-child {\n margin-right: -2px;\n }\n\n .tag.ghost {\n border: dashed 1px;\n background: transparent;\n color: var(--color-foreground);\n }\n\n .tag.highlight {\n background: var(--color-highlight);\n }\n\n .tag.warning {\n background: var(--color-negative);\n }\n\n .tags.tiny .tag {\n font-size: 12px;\n padding: 4px 6px;\n line-height: 14px;\n border-radius: 6px;\n }\n\n .tags.tiny pl-icon {\n font-size: 10px;\n width: 14px;\n height: 14px;\n }\n\n .tags.small .tag {\n font-size: var(--font-size-micro);\n padding: 4px 6px;\n line-height: 16px;\n }\n\n .tags.small pl-icon {\n font-size: 10px;\n width: 16px;\n height: 16px;\n }\n\n .record-tag.store-tag {\n ${mixins.gradientDark(true)}\n text-shadow: rgba(0, 0, 0, 0.1) 0 1px 0;\n }\n\n .fabs {\n position: absolute;\n z-index: 2;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n display: flex;\n align-items: center;\n }\n\n .fab {\n pointer-events: auto;\n border-radius: 45px;\n margin: 12px;\n box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;\n color: var(--color-tertiary);\n width: 45px;\n height: 45px;\n text-shadow: rgba(0, 0, 0, 0.2) 0 2px 0px;\n background: var(--color-secondary);\n }\n\n button.fab {\n width: auto;\n padding: 4px 20px;\n font-weight: bold;\n }\n\n .fab.primary {\n background: var(--color-primary);\n }\n\n .fab.light {\n background: var(--color-tertiary);\n color: var(--color-secondary);\n text-shadow: none;\n }\n\n .fab:not(:last-child) {\n margin-right: 0;\n }\n\n .fab.destructive {\n background: var(--color-negative);\n }\n\n .centering {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .empty-placeholder {\n ${mixins.fullbleed()}\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 20px;\n }\n\n .empty-placeholder pl-icon {\n width: 100px;\n height: 100px;\n font-size: 50px;\n }\n\n .empty-placeholder > div {\n width: 300px;\n margin-bottom: 20px;\n }\n\n .input-wrapper {\n display: flex;\n align-items: center;\n padding: 0 10px;\n }\n\n .input-wrapper pl-input {\n padding: 0;\n background: transparent;\n }\n\n .tabs {\n display: flex;\n margin: 0 auto;\n width: auto;\n ${mixins.scroll(\"horizontal\")}\n font-size: var(--font-size-default);\n font-weight: bold;\n }\n\n .tabs > * {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 10px 15px;\n border-bottom: solid 3px var(--color-shade-1);\n }\n\n .tabs > * > pl-icon {\n margin-left: -10px;\n font-size: 90%;\n width: 35px;\n height: 35px;\n }\n\n .tabs > *[active] {\n color: var(--color-highlight);\n border-color: var(--color-highlight);\n }\n\n .search-wrapper {\n display: flex;\n align-items: center;\n position: sticky;\n top: var(--gutter-size);\n z-index: 5;\n }\n\n .search-wrapper pl-icon {\n opacity: 0.5;\n margin-left: 5px;\n }\n\n .search-wrapper pl-input {\n font-size: var(--font-size-small);\n height: auto;\n flex: 1;\n background: transparent;\n padding-left: 5px;\n }\n\n .note {\n padding: 0;\n font-size: var(--font-size-small);\n font-weight: bold;\n padding: 8px;\n box-shadow: rgba(0, 0, 0, 0.3) 0 0 3px 0;\n text-shadow: rgba(0, 0, 0, 0.2) 0 2px 0;\n background: var(--color-primary);\n }\n\n .note.error {\n background: var(--color-negative);\n }\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes slideIn {\n from {\n transform: translate(0, 50px);\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes rumble {\n 25% {\n transform: translate(5px, 0);\n }\n 50% {\n transform: translate(-5px, -3px);\n }\n 75% {\n transform: translate(5px, 2px);\n }\n }\n\n @keyframes bounce {\n from,\n 20%,\n 40%,\n to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n transform: scale3d(0.5, 0.5, 0.5);\n }\n\n 33% {\n transform: scale3d(1.05, 1.05, 1.05);\n }\n\n 66% {\n transform: scale3d(0.98, 0.98, 0.98);\n }\n\n to {\n transform: scale3d(1, 1, 1);\n }\n }\n\n @media (min-width: 701px) {\n .menu-button {\n visibility: hidden;\n }\n\n .narrow {\n display: none !important;\n }\n }\n\n @media (max-width: 700px) {\n .wide {\n display: none;\n }\n }\n`;\n","import { stringToBytes, concatBytes, Serializable, AsSerializable, AsBytes, AsDate, AsSet, Exclude } from \"./encoding\";\nimport { RSAPublicKey, RSAPrivateKey, RSAKeyParams, HMACKey, HMACParams, HMACKeyParams } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { Err, ErrorCode } from \"./error\";\nimport { PBES2Container } from \"./container\";\nimport { Storable } from \"./storage\";\nimport { SessionInfo } from \"./session\";\nimport { VaultID } from \"./vault\";\nimport { Org, OrgID } from \"./org\";\nimport { AccountQuota } from \"./quota\";\nimport { BillingInfo } from \"./billing\";\nimport { VaultItemID } from \"./item\";\n\n/** Unique identifier for [[Account]] objects */\nexport type AccountID = string;\n\nexport class AccountSecrets extends Serializable {\n constructor({ signingKey, privateKey, favorites }: Partial<AccountSecrets> = {}) {\n super();\n Object.assign(this, { signingKey, privateKey, favorites });\n }\n\n @AsBytes()\n signingKey!: Uint8Array;\n\n @AsBytes()\n privateKey!: Uint8Array;\n\n @AsSet()\n favorites = new Set<VaultItemID>();\n}\n\n/**\n * The `Account` object represents an individual Padloc user and holds general\n * account information as well as cryptographic keys necessary for accessing\n * [[Vaults]] and signing/verifying [[Org]]anization details.\n *\n * The [[privateKey]] and [[signingKey]] properties are considered secret and\n * therefore need to be encrypted at rest. For this, the [[Account]] object\n * serves as a [[PBESContainer]] which is unlocked by the users **master\n * password**.\n */\nexport class Account extends PBES2Container implements Storable {\n /** Unique account ID */\n id: AccountID = \"\";\n\n /** The users email address */\n email = \"\";\n\n /** The users display name */\n name = \"\";\n\n /** When the account was created */\n @AsDate()\n created = new Date();\n\n /** when the account was last updated */\n @AsDate()\n updated = new Date();\n\n /** The accounts public key */\n @AsBytes()\n publicKey!: RSAPublicKey;\n\n /**\n * The accounts private key\n *\n * @secret\n * **IMPORTANT**: This property is considered **secret**\n * and should never stored or transmitted in plain text\n */\n @Exclude()\n privateKey!: RSAPrivateKey;\n\n /**\n * HMAC key used for signing and verifying organization details\n *\n * **IMPORTANT**: This property is considered **secret**\n * and should never stored or transmitted in plain text\n *\n * @secret\n */\n @Exclude()\n signingKey!: HMACKey;\n\n /** List of currently active sessions */\n @AsSerializable(SessionInfo)\n sessions: SessionInfo[] = [];\n\n /** ID of the accounts main or \"private\" [[Vault]]. */\n mainVault: {\n id: VaultID;\n name?: string;\n revision?: string;\n } = { id: \"\" };\n\n /** IDs of all organizations this account is a member of */\n orgs: {\n id: OrgID;\n name?: string;\n revision?: string;\n }[] = [];\n\n /**\n * Revision id used for ensuring continuity when synchronizing the account\n * object between client and server\n */\n revision: string = \"\";\n\n @AsSerializable(AccountQuota)\n quota: AccountQuota = new AccountQuota();\n\n billingDisabled = false;\n\n @AsSerializable(BillingInfo)\n billing?: BillingInfo;\n\n usedStorage: number = 0;\n\n @Exclude()\n favorites = new Set<VaultItemID>();\n\n /**\n * Whether or not this Account object is current \"locked\" or, in other words,\n * whether the `privateKey` and `signingKey` properties have been decrypted.\n */\n get locked(): boolean {\n return !this.privateKey;\n }\n\n get masterKey() {\n return this._key;\n }\n\n set masterKey(key: Uint8Array | undefined) {\n this._key = key;\n }\n\n /**\n * Generates the accounts [[privateKey]], [[publicKey]] and [[signingKey]] and\n * encrypts [[privateKey]] and [[singingKey]] using the master password.\n */\n async initialize(password: string) {\n const { publicKey, privateKey } = await getProvider().generateKey(new RSAKeyParams());\n this.publicKey = publicKey;\n this.privateKey = privateKey;\n this.signingKey = await getProvider().generateKey(new HMACKeyParams());\n await this.setPassword(password);\n }\n\n /** Updates the master password by reencrypting the [[privateKey]] and [[signingKey]] properties */\n async setPassword(password: string) {\n await super.unlock(password);\n await this._commitSecrets();\n this.updated = new Date();\n }\n\n /**\n * \"Unlocks\" the account by decrypting and extracting [[privateKey]] and\n * [[signingKey]] from [[encryptedData]]\n */\n async unlock(password: string) {\n await super.unlock(password);\n await this._loadSecrets();\n }\n\n /**\n * Unlocks the account by providing the encryption key directly rather than\n * deriving it fro the master password\n */\n async unlockWithMasterKey(key: Uint8Array) {\n this._key = key;\n await this._loadSecrets();\n }\n\n /**\n * \"Locks\" the account by deleting all sensitive data from the object\n */\n lock() {\n super.lock();\n delete this.privateKey;\n delete this.signingKey;\n delete this.favorites;\n }\n\n clone() {\n const clone = super.clone();\n clone.copySecrets(this);\n return clone;\n }\n\n toString() {\n return this.name || this.email;\n }\n\n /**\n * Creates a signature that can be used later to verify an organizations id and public key\n */\n async signOrg({ id, publicKey }: { id: string; publicKey: Uint8Array }) {\n return getProvider().sign(this.signingKey, concatBytes([stringToBytes(id), publicKey], 0x00), new HMACParams());\n }\n\n /**\n * Verifies an organizations id an public key, using the signature stored\n * in the [[Member]] object associated with the account.\n */\n async verifyOrg(org: Org): Promise<void> {\n if (!this.signingKey) {\n throw \"Account needs to be unlocked first\";\n }\n\n const member = org.getMember(this);\n\n if (!member) {\n throw new Err(ErrorCode.VERIFICATION_ERROR, \"Account is not a member.\");\n }\n\n const verified = await getProvider().verify(\n this.signingKey,\n member.orgSignature,\n concatBytes([stringToBytes(org.id), org.publicKey], 0x00),\n new HMACParams()\n );\n\n if (!verified) {\n throw new Err(ErrorCode.VERIFICATION_ERROR, `Failed to verify public key of ${org.name}!`);\n }\n }\n\n async toggleFavorite(id: VaultItemID, favorite: boolean) {\n favorite ? this.favorites.add(id) : this.favorites.delete(id);\n await this._commitSecrets();\n }\n\n copySecrets(account: Account) {\n this.privateKey = account.privateKey;\n this.signingKey = account.signingKey;\n this.favorites = account.favorites;\n this._key = account._key;\n }\n\n private async _loadSecrets() {\n const secrets = new AccountSecrets().fromBytes(await this.getData());\n if (!secrets.favorites) {\n secrets.favorites = new Set<VaultItemID>();\n }\n Object.assign(this, secrets);\n }\n\n private async _commitSecrets() {\n const secrets = new AccountSecrets(this);\n await this.setData(secrets.toBytes());\n }\n}\n","import { Session, SessionID } from \"./session\";\nimport { Account, AccountID } from \"./account\";\nimport { Auth } from \"./auth\";\nimport { Vault, VaultID } from \"./vault\";\nimport { Org, OrgID } from \"./org\";\nimport { Invite, InviteID } from \"./invite\";\nimport { Serializable, SerializableConstructor, AsBytes, AsSerializable } from \"./encoding\";\nimport { Attachment, AttachmentID } from \"./attachment\";\nimport { BillingProviderInfo, UpdateBillingParams } from \"./billing\";\nimport { PBKDF2Params } from \"./crypto\";\nimport { PBES2Container } from \"./container\";\nimport { RequestProgress } from \"./transport\";\nimport { MFAPurpose, MFAType } from \"./mfa\";\n\n/**\n * Api parameters for creating a new Account to be used with [[API.createAccount]].\n */\nexport class CreateAccountParams extends Serializable {\n /** The [[Account]] object containing the relevant information */\n @AsSerializable(Account)\n account!: Account;\n\n /**\n * An [[Auth]] object container the verifier and authentication params\n * required for subsequent authentication\n */\n @AsSerializable(Auth)\n auth!: Auth;\n\n /**\n * The verification token obtained from [[API.completeEmailVerification]].\n */\n verify: string = \"\";\n\n /**\n * The corresponding [[InviteID]] and [[OrgID]] if signup was initiated\n * through an invite link.\n *\n * @optional\n */\n invite?: {\n id: InviteID;\n org: OrgID;\n } = undefined;\n\n constructor(props?: Partial<CreateAccountParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for initiating account recovery to be used with [[API.recoverAccount]]\n */\nexport class RecoverAccountParams extends Serializable {\n /** The newly initialized [[Account]] object */\n @AsSerializable(Account)\n account!: Account;\n\n /** The new authentication parameters */\n @AsSerializable(Auth)\n auth!: Auth;\n\n /** An email verification token obtained from [[API.completeEmailVerification]] */\n verify: string = \"\";\n\n constructor(props?: Partial<RecoverAccountParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for requesting email verfication through [[API.requestEmailVerification]]\n * @deprecated since v3.1.0\n */\nexport class RequestEmailVerificationParams extends Serializable {\n /** The email address to be verified */\n email = \"\";\n\n /** The purpose of the email verification */\n purpose: MFAPurpose = MFAPurpose.Signup;\n\n constructor(props?: Partial<RequestEmailVerificationParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for completing email verification through [[API.completeEmailVerification]]\n * @deprecated since v3.1.0\n */\nexport class CompleteEmailVerificationParams extends Serializable {\n /** The email address to be verified */\n email: string = \"\";\n\n /** The verification code received via email after calling [[API.requestEmailVerification]] */\n code: string = \"\";\n\n constructor(props?: Partial<CompleteEmailVerificationParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for requesting Multi-Factor Authenticatino via [[API.requestMFACode]]\n */\nexport class RequestMFACodeParams extends Serializable {\n /** The accounts email address */\n email = \"\";\n\n /** The purpose of the email verification */\n purpose: MFAPurpose = MFAPurpose.Login;\n\n type: MFAType = MFAType.Email;\n\n constructor(props?: Partial<RequestMFACodeParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for retrieving MFA token via [[API.retrieveMFAToken]]\n */\nexport class RetrieveMFATokenParams extends Serializable {\n /** The email address to be verified */\n email: string = \"\";\n\n /** The verification code received via email after calling [[API.requestEmailVerification]] */\n code: string = \"\";\n\n purpose: MFAPurpose = MFAPurpose.Login;\n\n constructor(props?: Partial<RetrieveMFATokenParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\nexport class RetrieveMFATokenResponse extends Serializable {\n /** The verification token which can be used to authenticate certain requests */\n token: string = \"\";\n\n /** Whether the user already has an account */\n hasAccount: boolean = false;\n\n /** Whether the user has a legacy account */\n hasLegacyAccount: boolean = false;\n\n /** Token for getting legacy data. */\n legacyToken?: string = undefined;\n\n constructor(props?: Partial<RetrieveMFATokenResponse>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for initiating authentication through [[API.initAuth]]\n */\nexport class InitAuthParams extends Serializable {\n /** The email address of the [[Account]] in question */\n email = \"\";\n\n /**\n * The verification token obtained from [[API.completeEmailVerification]].\n */\n verify?: string = undefined;\n\n constructor(props?: Partial<InitAuthParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * The response object received from [[API.initAuth]]\n */\nexport class InitAuthResponse extends Serializable {\n /** The account id */\n account: AccountID = \"\";\n\n /** The key derivation parameters used for authentication */\n @AsSerializable(PBKDF2Params)\n keyParams: PBKDF2Params = new PBKDF2Params();\n\n /** A random value used for SRP session negotiation */\n @AsBytes()\n B!: Uint8Array;\n\n constructor(props?: Partial<InitAuthResponse>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for creating a new [[Session]] through [[API.createSession]]\n */\nexport class CreateSessionParams extends Serializable {\n /** The id of the [[Account]] to create the session for */\n account: AccountID = \"\";\n\n /** Verification value used for SRP session negotiation */\n @AsBytes()\n M!: Uint8Array;\n\n /** Random value used form SRP session negotiation */\n @AsBytes()\n A!: Uint8Array;\n\n constructor(props?: Partial<CreateSessionParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for fetching an [[Invite]]\n */\nexport class GetInviteParams extends Serializable {\n /** The organization id */\n org: OrgID = \"\";\n\n /** The invite id */\n id: InviteID = \"\";\n\n constructor(props?: Partial<GetInviteParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\n/**\n * Parameters for fetching an [[Attachment]]\n */\nexport class GetAttachmentParams extends Serializable {\n /** The vault id */\n vault: VaultID = \"\";\n\n /** The attachment id */\n id: AttachmentID = \"\";\n\n constructor(props?: Partial<GetAttachmentParams>) {\n super();\n props && Object.assign(this, props);\n }\n}\n\nexport class DeleteAttachmentParams extends GetAttachmentParams {}\n\nexport class GetLegacyDataParams extends Serializable {\n constructor(vals: Partial<GetLegacyDataParams> = {}) {\n super();\n Object.assign(this, vals);\n }\n\n email: string = \"\";\n verify?: string = undefined;\n}\n\ninterface HandlerDefinition {\n method: string;\n input?: SerializableConstructor;\n output?: SerializableConstructor;\n}\n\n/**\n * Decorator for defining request handler methods\n */\nfunction Handler(\n input: SerializableConstructor | StringConstructor | undefined,\n output: SerializableConstructor | StringConstructor | undefined\n) {\n return (proto: API, method: string) => {\n if (!proto.handlerDefinitions) {\n proto.handlerDefinitions = [];\n }\n proto.handlerDefinitions.push({\n method,\n input: input === String ? undefined : (input as SerializableConstructor | undefined),\n output: output === String ? undefined : (output as SerializableConstructor | undefined)\n });\n };\n}\n\nexport type PromiseWithProgress<T> = Promise<T> & { progress?: RequestProgress };\n\n/**\n * Transport-agnostic interface defining communication\n * between [[Client]] and [[Server]] instances.\n */\nexport class API {\n handlerDefinitions!: HandlerDefinition[];\n\n /**\n * Request verification of a given email address. This will send a verification code\n * to the email in question which can then be exchanged for a verification token via\n * [[completeEmailVerification]].\n * @deprecated since v3.1.0\n */\n @Handler(RequestEmailVerificationParams, undefined)\n requestEmailVerification(_params: RequestEmailVerificationParams): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Complete the email verification process by providing a verification code received\n * via email. Returns a verification token that can be used in other api calls like\n * [[createAccount]] or [[recoverAccount]].\n * @deprecated since v3.1.0\n */\n @Handler(CompleteEmailVerificationParams, String)\n completeEmailVerification(_params: CompleteEmailVerificationParams): PromiseWithProgress<string> {\n throw \"Not implemented\";\n }\n\n /**\n * Request verification of a given email address. This will send a verification code\n * to the email in question which can then be exchanged for a verification token via\n * [[completeEmailVerification]].\n */\n @Handler(RequestMFACodeParams, undefined)\n requestMFACode(_params: RequestMFACodeParams): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Complete the email verification process by providing a verification code received\n * via email. Returns a verification token that can be used in other api calls like\n * [[createAccount]] or [[recoverAccount]].\n */\n @Handler(RetrieveMFATokenParams, RetrieveMFATokenResponse)\n retrieveMFAToken(_params: RetrieveMFATokenParams): PromiseWithProgress<RetrieveMFATokenResponse> {\n throw \"Not implemented\";\n }\n\n /**\n * Initiate the login procedure for a given account by requesting the authentication params\n * which are required for proceeding with [[createSession]].\n */\n @Handler(InitAuthParams, InitAuthResponse)\n initAuth(_params: InitAuthParams): PromiseWithProgress<InitAuthResponse> {\n throw \"Not implemented\";\n }\n\n /**\n * Update the authentication params stored on the server. This is usually used\n * in case a users master password has changed.\n */\n @Handler(Auth, undefined)\n updateAuth(_params: Auth): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Create new [[Session]] which can be used to authenticate future request\n */\n @Handler(CreateSessionParams, Session)\n createSession(_params: CreateSessionParams): PromiseWithProgress<Session> {\n throw \"Not implemented\";\n }\n\n /**\n * Revoke a [[Session]], effectively logging out any client authenticated with it\n */\n @Handler(String, undefined)\n revokeSession(_id: SessionID): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Create a new [[Account]]\n */\n @Handler(CreateAccountParams, Account)\n createAccount(_params: CreateAccountParams): PromiseWithProgress<Account> {\n throw \"Not implemented\";\n }\n\n /**\n * Get the [[Account]] associated with the current session\n *\n * @authentication_required\n */\n @Handler(undefined, Account)\n getAccount(): PromiseWithProgress<Account> {\n throw \"Not implemented\";\n }\n\n /**\n * Update the [[Account]] associated with the current session.\n *\n * @authentication_required\n */\n @Handler(Account, Account)\n updateAccount(_account: Account): PromiseWithProgress<Account> {\n throw \"Not implemented\";\n }\n\n /**\n * Initiate account recovery\n */\n @Handler(RecoverAccountParams, Account)\n recoverAccount(_params: RecoverAccountParams): PromiseWithProgress<Account> {\n throw \"Not implemented\";\n }\n\n /**\n * Delete current account\n */\n @Handler(undefined, undefined)\n deleteAccount(): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Create a new [[Org]]\n *\n * @authentication_required\n */\n @Handler(Org, Org)\n createOrg(_params: Org): PromiseWithProgress<Org> {\n throw \"Not implemented\";\n }\n\n /**\n * Get the [[Org]] for a given `id`.\n *\n * @authentication_required\n *\n * Requires the authenticated account to be a member of the given organization\n */\n @Handler(undefined, Org)\n getOrg(_id: OrgID): PromiseWithProgress<Org> {\n throw \"Not implemented\";\n }\n\n /**\n * Updates a given [[Org]]\n *\n * @authentication_required\n *\n * Updating members, organization name or pubic/private keys requires the [[OrgRole.Owner]]\n * role, while any other changes require the [[OrgRole.Admin]] role.\n */\n @Handler(Org, Org)\n updateOrg(_org: Org): PromiseWithProgress<Org> {\n throw \"Not implemented\";\n }\n\n @Handler(String, undefined)\n deleteOrg(_id: OrgID): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Create a new vault\n *\n * @authentication_required\n *\n * Requires the [[OrgRole.Admin]] role on the associated organization\n */\n @Handler(Vault, Vault)\n createVault(_vault: Vault): PromiseWithProgress<Vault> {\n throw \"Not implemented\";\n }\n\n /**\n * Get the [[Vault]] with the given `id`\n *\n * @authentiation_required\n *\n * If the vault belongs to an organization, the authenticated account needs to\n * be assigned to the given vault either directly or through a [[Group]].\n * Otherwise, only access to the accounts private vault is allowed.\n */\n @Handler(String, Vault)\n getVault(_id: VaultID): PromiseWithProgress<Vault> {\n throw \"Not implemented\";\n }\n\n /**\n * Update the given [[Vault]]\n *\n * @authentiation_required\n *\n * If vault belongs to an organization, the authenticated account needs to\n * be be assigned to the given vault either directly or through a [[Group]]\n * and have explicit write access. Otherwise, only access to the accounts\n * private vault is allowed.\n */\n @Handler(Vault, Vault)\n updateVault(_vault: Vault): PromiseWithProgress<Vault> {\n throw \"Not implemented\";\n }\n\n /**\n * Delete the [[Vault]] with the given `id`\n *\n * @authentication_required\n *\n * Requires at least the [[OrgRole.Admin]] role on the organization the vault\n * belongs to. Private vaults cannot be deleted.\n */\n @Handler(String, undefined)\n deleteVault(_id: VaultID): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n /**\n * Get an [[Invite]].\n *\n * @authentication_required\n *\n * Requires the authenticated account to either be an [[OrgRole.Owner]] of\n * the associated organization or the recipient of the invite.\n */\n @Handler(GetInviteParams, Invite)\n getInvite(_params: GetInviteParams): PromiseWithProgress<Invite> {\n throw \"Not implemented\";\n }\n\n /**\n * Accept an [[Invite]]\n *\n * @authentication_required\n *\n * Requires the authenticated account to be the recipient of the invite.\n */\n @Handler(Invite, undefined)\n acceptInvite(_invite: Invite): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n @Handler(Attachment, String)\n createAttachment(_attachment: Attachment): PromiseWithProgress<AttachmentID> {\n throw \"Not implemented\";\n }\n\n @Handler(GetAttachmentParams, Attachment)\n getAttachment(_attachment: GetAttachmentParams): PromiseWithProgress<Attachment> {\n throw \"Not implemented\";\n }\n\n @Handler(DeleteAttachmentParams, undefined)\n deleteAttachment(_attachment: DeleteAttachmentParams): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n @Handler(UpdateBillingParams, undefined)\n updateBilling(_params: UpdateBillingParams): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n\n @Handler(undefined, BillingProviderInfo)\n getBillingProviders(): PromiseWithProgress<BillingProviderInfo[]> {\n throw \"Not implemented\";\n }\n\n @Handler(GetLegacyDataParams, PBES2Container)\n getLegacyData(_params: GetLegacyDataParams): PromiseWithProgress<PBES2Container> {\n throw \"Not implemented\";\n }\n\n @Handler(undefined, undefined)\n deleteLegacyAccount(): PromiseWithProgress<void> {\n throw \"Not implemented\";\n }\n}\n","import { loadLanguage, translate as $l } from \"@padloc/locale/src/translate\";\nimport { Storage, Storable } from \"./storage\";\nimport {\n Serializable,\n Serialize,\n AsDate,\n AsSerializable,\n bytesToBase64,\n base64ToBytes,\n stringToBytes\n} from \"./encoding\";\nimport { Invite, InvitePurpose } from \"./invite\";\nimport { Vault, VaultID } from \"./vault\";\nimport { Org, OrgID, OrgType, OrgMember, OrgRole, Group } from \"./org\";\nimport { VaultItem, VaultItemID, Field, Tag, createVaultItem } from \"./item\";\nimport { Account, AccountID } from \"./account\";\nimport { Auth } from \"./auth\";\nimport { MFAPurpose } from \"./mfa\";\nimport { Session, SessionID } from \"./session\";\nimport {\n API,\n RequestMFACodeParams,\n RetrieveMFATokenParams,\n CreateAccountParams,\n InitAuthParams,\n InitAuthResponse,\n CreateSessionParams,\n RecoverAccountParams,\n GetInviteParams,\n GetAttachmentParams,\n DeleteAttachmentParams\n} from \"./api\";\nimport { Client } from \"./client\";\nimport { Sender } from \"./transport\";\nimport {\n DeviceInfo,\n getDeviceInfo,\n isKeyStoreAvailable,\n keyStoreSet,\n keyStoreGet,\n keyStoreDelete,\n getCryptoProvider,\n getStorage\n} from \"./platform\";\nimport { uuid, throttle } from \"./util\";\nimport { Client as SRPClient } from \"./srp\";\nimport { Err, ErrorCode } from \"./error\";\nimport { Attachment, AttachmentInfo } from \"./attachment\";\nimport { BillingProviderInfo, UpdateBillingParams } from \"./billing\";\nimport { SimpleContainer } from \"./container\";\nimport { AESKeyParams, PBKDF2Params } from \"./crypto\";\n\n/** Various usage stats */\nexport class Stats extends Serializable {\n /** Time of last sync */\n @AsDate()\n lastSync?: Date;\n}\n\n/** Various application settings */\nexport class Settings extends Serializable {\n /** Whether to lock app automatically after a certain period of inactivity */\n autoLock: boolean = true;\n /** Duration after which auto-lock is triggered, in minutes */\n autoLockDelay: number = 5;\n /** Interval for automatic sync, in minutes */\n syncInterval: number = 1;\n /** Time threshold used for filtering \"recent\" items, in days */\n recentLimit: number = 7;\n}\n\nexport interface HashedItem {\n hosts: string[];\n}\n\nexport class Index extends Serializable {\n @AsSerializable(PBKDF2Params)\n hashParams = new PBKDF2Params({ iterations: 1 });\n\n items: HashedItem[] = [];\n\n async fromItems(items: VaultItem[]) {\n const crypto = getCryptoProvider();\n\n if (!this.hashParams.salt.length) {\n this.hashParams.salt = await crypto.randomBytes(16);\n }\n\n this.items = (\n await Promise.all(\n items.map(async item => ({\n hosts: (\n await Promise.all(\n item.fields\n .filter(f => f.type === \"url\")\n .map(async f => {\n // try to parse host from url. if url is not valid,\n // assume the url field contains just the domain.\n let host = f.value;\n try {\n host = new URL(f.value).host;\n } catch (e) {}\n\n if (!host) {\n return null;\n }\n\n const hashedHost = await crypto.deriveKey(stringToBytes(host), this.hashParams);\n\n return bytesToBase64(hashedHost);\n })\n )\n ).filter(h => h !== null) as string[]\n }))\n )\n ).filter(item => item.hosts.length);\n }\n\n async matchHost(host: string) {\n const hashedHost = bytesToBase64(await getCryptoProvider().deriveKey(stringToBytes(host), this.hashParams));\n return this.items.filter(item => item.hosts.some(h => h === hashedHost)).length;\n }\n\n async fuzzyMatchHost(host: string) {\n // Try exact match first, then try to add/remove \"www.\"\n return (\n (await this.matchHost(host)) ||\n (host.startsWith(\"www.\") ? this.matchHost(host.slice(4)) : this.matchHost(\"www.\" + host))\n );\n }\n\n async matchUrl(url: string) {\n try {\n const { host } = new URL(url);\n return this.fuzzyMatchHost(host);\n } catch (e) {\n return 0;\n }\n }\n}\n\n/** Application state */\nexport class AppState extends Storable {\n id = \"app-state\";\n\n /** Application Settings */\n @AsSerializable(Settings)\n settings = new Settings();\n\n /** Usage data */\n @AsSerializable(Stats)\n stats = new Stats();\n\n /** Info about current device */\n @AsSerializable(DeviceInfo)\n device = new DeviceInfo();\n\n /** Current [[Session]] */\n @AsSerializable(Session)\n session: Session | null = null;\n\n /** Currently logged in [[Account]] */\n @AsSerializable(Account)\n account: Account | null = null;\n\n /** All organizations the current [[account]] is a member of. */\n @AsSerializable(Org)\n orgs: Org[] = [];\n\n /** All vaults the current [[account]] has access to. */\n @AsSerializable(Vault)\n vaults: Vault[] = [];\n\n /** Whether a sync is currently in process. */\n syncing = false;\n\n /** Whether the app has an internet connection at the moment */\n online = true;\n\n @AsSerializable(SimpleContainer)\n rememberedMasterKey: SimpleContainer | null = null;\n\n @AsSerializable(BillingProviderInfo)\n billingProvider: BillingProviderInfo | null = null;\n\n currentHost: string = \"\";\n\n @AsSerializable(Index)\n index: Index = new Index();\n\n /** IDs of most recently used items. The most recently used item is last */\n @Serialize({\n arrayDeserializeIndividually: false,\n fromRaw: (raw: [string, string][]) => new Map<string, Date>(raw.map(([id, date]) => [id, new Date(date)])),\n toRaw: (val: any) => [...val]\n })\n lastUsed = new Map<string, Date>();\n\n _errors: Err[] = [];\n\n /** All [[Tag]]s found within the users [[Vault]]s */\n get tags() {\n const tags = new Map<string, number>();\n\n for (const vault of this.vaults) {\n for (const item of vault.items) {\n for (const tag of item.tags) {\n if (!tags.has(tag)) {\n tags.set(tag, 0);\n }\n\n tags.set(tag, tags.get(tag)! + 1);\n }\n }\n }\n\n return [...tags.entries()];\n }\n\n /** Whether the app is in \"locked\" state */\n get locked() {\n return !this.account || this.account.locked;\n }\n\n /** Whether a user is logged in */\n get loggedIn() {\n return !!this.session;\n }\n}\n\n/**\n * The `App` class is *the* user-facing top level component encapsulating all\n * functionality of the Padloc client app. It is responsible for managing\n * state, client-side persistence and synchronization with the [[Server]] and\n * exposes methods for manipulating a users [[Account]], [[Org]]anizations and\n * [[Vault]]s.\n *\n * [[App]] is completely platform-agnostic and can be used in any environment\n * capable of running JavaScript. It does however rely on platform-specific\n * providers for a number of features like storage and encryption which can\n * be \"plugged in\" as needed.\n *\n * ### Encryption\n *\n * The `@padloc/core` module does not provide or depend on any specific\n * implementation of cryptographic primitives but instead relies on\n * the [[CryptoProvider]] interface to provide those.\n *\n * Users of the [[App]] class (and of the `@padloc/core` package in general)\n * are responsible for ensuring that a secure implemenation of the\n * [[CryptoProvider]] interface is available before using any methods that\n * require cryptographic functionality. This is done through the\n * `crypto.setProvider` function (see example below).\n *\n * ### Platform API\n *\n * Certain functionality requires access to some platform APIs. For this,\n * an implementation of the [[Platform]] interface can be provided via\n * `platform.setPlatform`.\n *\n * ### Persistent Storage\n *\n * Persistent storage is provided by an implementation of the [[Storage]]\n * interface.\n *\n * ### Data Transport\n *\n * The [[Sender]] interface handles communication with the [[Server]] instance\n * through a RPC [[Request]]-[[Response]] cycle. The implementation provided\n * should match the [[Receiver]] implementation used in the [[Server]]\n * instance.\n *\n * ### Initialization Example\n *\n * ```ts\n * @import { setProvider } from \"@padloc/core/src/crypto\";\n * @import { setPlatform } from \"@padloc/core/src/platform\";\n *\n * setProvider(new NodeCryptoProvider());\n * setPlatform(new NodePlatform());\n *\n * const app = new App(new LevelDBStorage(), new HTTPSender());\n *\n * app.loaded.then(() => console.log(\"app ready!\");\n * ```\n */\nexport class App {\n /** App version */\n version = \"3.0\";\n\n /** API client for RPC calls */\n api: API;\n\n /** Application state */\n state = new AppState();\n\n /** Promise that is resolved when the app has been fully loaded */\n loaded: Promise<void>;\n\n storage: Storage;\n\n constructor(\n /** Data transport provider */\n sender: Sender,\n storage = getStorage()\n ) {\n this.storage = storage;\n this.api = new Client(this.state, sender, (_req, _res, err) => {\n const online = !err || err.code !== ErrorCode.FAILED_CONNECTION;\n if (online !== this.state.online) {\n this.setState({ online });\n }\n });\n this.loaded = this.load();\n }\n\n /** Promise that resolves once all current synchronization processes are complete */\n get syncComplete() {\n return Promise.all([...this._activeSyncPromises.values(), ...this._queuedSyncPromises.values()]);\n }\n\n /** Current account */\n get account() {\n return this.state.account;\n }\n\n /** Current session */\n get session() {\n return this.state.session;\n }\n\n /** The current accounts organizations */\n get orgs() {\n return this.state.orgs.sort();\n }\n\n /** The current accounts vaults */\n get vaults() {\n return this.state.vaults.sort();\n }\n\n /** Application settings */\n get settings() {\n return this.state.settings;\n }\n\n /** The current users main, or \"private\" [[Vault]] */\n get mainVault(): Vault | null {\n return (this.account && this.getVault(this.account.mainVault.id)) || null;\n }\n\n get online() {\n return this.state.online;\n }\n\n get supportsBiometricUnlock() {\n return this.state.device.supportsBioAuth && this.state.device.supportsKeyStore;\n }\n\n get remembersMasterKey() {\n return !!this.state.rememberedMasterKey;\n }\n\n get billingEnabled() {\n return !!this.state.billingProvider && !(this.state.account && this.state.account.billingDisabled);\n }\n\n get count() {\n const count = {\n favorites: 0,\n attachments: 0,\n recent: 0,\n total: 0,\n currentHost: this.state.currentHost ? this.getItemsForHost(this.state.currentHost).length : 0\n };\n\n const recentThreshold = new Date(Date.now() - this.settings.recentLimit * 24 * 60 * 60 * 1000);\n for (const vault of this.vaults) {\n for (const item of vault.items) {\n count.total++;\n if (this.account && this.account.favorites.has(item.id)) {\n count.favorites++;\n }\n if (item.attachments.length) {\n count.attachments++;\n }\n if (this.state.lastUsed.has(item.id) && this.state.lastUsed.get(item.id)! > recentThreshold) {\n count.recent++;\n }\n }\n }\n\n return count;\n }\n\n private _queuedSyncPromises = new Map<string, Promise<void>>();\n private _activeSyncPromises = new Map<string, Promise<void>>();\n\n private _subscriptions: Array<(state: AppState) => void> = [];\n\n private _cachedAuthInfo = new Map<string, InitAuthResponse>();\n\n /** Save application state to persistent storage */\n async save() {\n await this.loaded;\n if (!this.state.locked) {\n await this.state.index.fromItems(\n this.state.vaults.reduce((items, v) => [...items, ...v.items], [] as VaultItem[])\n );\n }\n\n await this.storage.save(this.state);\n }\n\n /** Load application state from persistent storage */\n async load() {\n // Try to load app state from persistent storage.\n try {\n this.setState(await this.storage.get(AppState, this.state.id));\n } catch (e) {}\n\n // Update device info\n const { id, ...rest } = await getDeviceInfo();\n Object.assign(this.state.device, rest);\n\n try {\n await loadLanguage(this.state.device.locale);\n } catch (e) {\n // Failed to load language, so we'll fallback to default (English)\n }\n\n // If no device id has been set yet, generate a new one\n if (!this.state.device.id) {\n this.state.device.id = await uuid();\n }\n\n // Save back to storage\n await this.storage.save(this.state);\n\n this.loadBillingProvider();\n\n // Notify state change\n this.publish();\n }\n\n async reload() {\n const masterKey = this.account && this.account.masterKey;\n await this.load();\n if (masterKey) {\n await this.unlockWithMasterKey(masterKey);\n }\n }\n\n /**\n * Unlocks the current [[Account]] and all available [[Vaults]].\n */\n async unlock(password: string) {\n if (!this.account) {\n throw \"Unlocking only works if the user is logged in!\";\n }\n\n // Unlock account using the master password\n await this.account.unlock(password);\n\n await this._unlocked();\n }\n\n /**\n * Locks the app and wipes all sensitive information from memory.\n */\n async lock() {\n [this.account!, ...this.state.orgs, ...this.state.vaults].forEach(each => each.lock());\n this.publish();\n }\n\n /**\n * Synchronizes the current account and all of the accounts organizations\n * and vaults\n */\n async synchronize() {\n this.setState({ syncing: true });\n await this.fetchAccount();\n await this.fetchOrgs();\n await this.syncVaults();\n await this.save();\n this.setStats({ lastSync: new Date() });\n this.publish();\n }\n\n /**\n * Notifies of changes to the app [[state]] via the provided function\n *\n * @returns A unsubscribe function\n */\n subscribe(fn: (state: AppState) => void) {\n this._subscriptions.push(fn);\n return () => this.unsubscribe(fn);\n }\n\n /**\n * Unsubscribes a function previously subscribed through [[subscribe]].\n */\n unsubscribe(fn: (state: AppState) => void) {\n this._subscriptions = this._subscriptions.filter(f => f === fn);\n }\n\n /**\n * Notifies all subscribers of a [[state]] change\n */\n publish = throttle(() => {\n for (const fn of this._subscriptions) {\n fn(this.state);\n }\n }, 1000);\n\n /**\n * Updates the app [[state]]\n */\n setState(state: Partial<AppState>) {\n Object.assign(this.state, state);\n this.publish();\n }\n\n /** Update usage data */\n async setStats(obj: Partial<Stats>) {\n Object.assign(this.state.stats, obj);\n await this.save();\n this.publish();\n }\n\n /** Update application settings */\n async setSettings(obj: Partial<Settings>) {\n Object.assign(this.state.settings, obj);\n await this.save();\n this.publish();\n }\n\n /*\n * ===============================\n * ACCOUNT & SESSION MANGAGEMENT\n * ===============================\n */\n\n /** Request email verification for a given `email`. */\n async requestMFACode(email: string, purpose: MFAPurpose) {\n return this.api.requestMFACode(new RequestMFACodeParams({ email, purpose }));\n }\n\n /** Complete email with the given `code` */\n async retrieveMFAToken(email: string, code: string, purpose: MFAPurpose) {\n return this.api.retrieveMFAToken(new RetrieveMFATokenParams({ email, code, purpose }));\n }\n\n /**\n * Creates a new Padloc [[Account]] and signs in the user.\n */\n async signup({\n /** The desired email address */\n email,\n /** The users master password */\n password,\n /** The desired display name */\n name,\n /** Verification token obtained trough [[completeEmailVerification]] */\n verify,\n /** Information about the [[Invite]] object if signup was initiated through invite link */\n invite\n }: {\n email: string;\n password: string;\n name: string;\n verify: string;\n invite?: { id: string; org: string };\n }) {\n // Inialize account object\n const account = new Account();\n account.email = email;\n account.name = name;\n await account.initialize(password);\n\n // Initialize auth object\n const auth = new Auth(email);\n const authKey = await auth.getAuthKey(password);\n\n // Calculate verifier\n const srp = new SRPClient();\n await srp.initialize(authKey);\n auth.verifier = srp.v!;\n\n // Send off request to server\n await this.api.createAccount(\n new CreateAccountParams({\n account,\n auth,\n verify,\n invite\n })\n );\n\n // Sign into new account\n await this.login(email, password);\n }\n\n /**\n * Log in user, creating a new [[Session]], loading [[Account]] info and\n * fetching all of the users [[Org]]anizations and [[Vault]]s.\n */\n async login(email: string, password: string, verify?: string) {\n if (!this._cachedAuthInfo.has(email)) {\n // Fetch authentication info\n this._cachedAuthInfo.set(email, await this.api.initAuth(new InitAuthParams({ email, verify })));\n }\n\n const { account: accId, keyParams, B } = this._cachedAuthInfo.get(email)!;\n\n const auth = new Auth(email);\n auth.keyParams = keyParams;\n\n // Generate auth secret\n const authKey = await auth.getAuthKey(password);\n\n // Initialize SRP object\n const srp = new SRPClient();\n await srp.initialize(authKey);\n await srp.setB(B);\n\n // Create session object\n const session = await this.api.createSession(\n new CreateSessionParams({ account: accId, A: srp.A!, M: srp.M1! })\n );\n\n // Apply session key and update state\n session.key = srp.K!;\n this.setState({ session });\n\n // Fetch and unlock account object\n const account = await this.api.getAccount();\n await account.unlock(password);\n this.setState({ account });\n\n // Save application state\n await this.save();\n\n // Load organizations and vaults\n await this.synchronize();\n }\n\n /**\n * Logs out user and clears all sensitive information\n */\n async logout() {\n await this._logout();\n this.publish();\n }\n\n async deleteAccount() {\n await this.api.deleteAccount();\n await this._logout();\n }\n\n private async _logout() {\n this._cachedAuthInfo.clear();\n\n if (await this.canRememberMasterKey()) {\n await this.forgetMasterKey();\n }\n\n // Revoke session\n try {\n await this.api.revokeSession(this.state.session!.id);\n } catch (e) {}\n\n // Reset application state\n this.setState({\n account: null,\n session: null,\n vaults: [],\n orgs: [],\n index: new Index()\n });\n await this.save();\n }\n\n /**\n * Updates the users master password\n */\n async changePassword(password: string) {\n // TODO: Add option to rotate keys\n\n await this.updateAccount(async account => {\n // Update account object\n await account.setPassword(password);\n\n // Update auth object\n const auth = new Auth(account.email);\n auth.account = account.id;\n const authKey = await auth.getAuthKey(password);\n const srp = new SRPClient();\n await srp.initialize(authKey);\n auth.verifier = srp.v!;\n await this.api.updateAuth(auth);\n });\n\n if (await this.canRememberMasterKey()) {\n await this.forgetMasterKey();\n }\n }\n\n /**\n * Fetches the users [[Account]] info from the [[Server]]\n */\n async fetchAccount() {\n const account = await this.api.getAccount();\n\n // Copy over secret properties so we don't have to\n // unlock the account object again.\n if (this.account) {\n account.copySecrets(this.account);\n }\n\n // Update and save state\n this.setState({ account });\n await this.save();\n }\n\n /**\n * Updates the users [[Account]] information\n * @param transform A function applying the changes to the account\n */\n async updateAccount(transform: (account: Account) => Promise<any>) {\n if (!this.account) {\n throw \"User needs to be logged in in order to update their account!\";\n }\n\n // Create a clone of the current account to prevent inconsistencies in\n // case something goes wrong.\n let account = this.account.clone();\n\n // Apply changes\n await transform(account);\n\n // Send request to server\n try {\n account = await this.api.updateAccount(account);\n } catch (e) {\n // If account has been updated since last fetch,\n // get the current version and then retry\n if (e.code === ErrorCode.OUTDATED_REVISION) {\n await this.fetchAccount();\n await this.updateAccount(transform);\n } else {\n throw e;\n }\n }\n\n // Copy over secret properties so we don't have to unlock the\n // account object again.\n account.copySecrets(this.account!);\n\n // Update and save state\n this.setState({ account });\n await this.save();\n }\n\n /**\n * Revokes the given [[Session]]\n */\n async revokeSession({ id }: { id: SessionID }) {\n await this.api.revokeSession(id);\n await this.fetchAccount();\n }\n\n /**\n * Initiates account recovery allowing a user to regain control of their\n * account in case they forget their master password. This results in the\n * following:\n *\n * - All of the accounts cryptographic keys are rotated.\n * - The accounts sensitive data is encrypted with the new master password.\n * - The accounts authentication info is updated to reflect the password change.\n * - The accounts private vault is reset (and the data within it lost).\n * - The cryptographic keys of all [[Org]]anizations owned by the account will be\n * rotated and all members suspended until reconfirmed.\n * - The accounts memberships to any [[Org]]ganizations not owned by it will be\n * suspended until reconfirmed.\n *\n * The user will automatically get logged in during this process\n * so a separate login is not necessary.\n */\n async recoverAccount({\n /** Account email */\n email,\n /** New master password */\n password,\n /** Verification token obtained trough [[completeEmailVerification]] */\n verify\n }: {\n email: string;\n password: string;\n verify: string;\n }) {\n // Log out user (if logged in)\n await this._logout();\n\n // Initialize account with new password\n let account = new Account();\n account.email = email;\n await account.initialize(password);\n\n // Initialize auth object with new password\n const auth = new Auth(email);\n const authKey = await auth.getAuthKey(password);\n const srp = new SRPClient();\n await srp.initialize(authKey);\n auth.verifier = srp.v!;\n\n // Send account recovery request to the server, updating account and\n // authentication info. This will also suspend the accounts membership\n // to any organizations not owned by them.\n await this.api.recoverAccount(\n new RecoverAccountParams({\n account,\n auth,\n verify\n })\n );\n\n // Sign in user using the new password\n await this.login(email, password);\n\n // Rotate keys of all owned organizations. Suspend all other members\n // and create invites to reconfirm the membership.\n for (const org of this.state.orgs.filter(o => o.isOwner(account))) {\n await this.rotateOrgKeys(org);\n }\n }\n\n async rotateOrgKeys(org: Org) {\n const account = this.account!;\n\n return this.updateOrg(org.id, async org => {\n // Rotate org encryption key\n delete org.encryptedData;\n await org.updateAccessors([account]);\n\n // Rotate other cryptographic keys\n await org.generateKeys();\n\n org.invites = [];\n\n // Suspend members and create confirmation invites\n for (const member of org.members.filter(m => m.id !== account.id)) {\n member.role = OrgRole.Suspended;\n const invite = new Invite(member.email, \"confirm_membership\");\n await invite.initialize(org, this.account!);\n org.invites.push(invite);\n }\n\n // Update own membership\n await org.addOrUpdateMember({\n id: account.id,\n email: account.email,\n name: account.name,\n publicKey: account.publicKey,\n orgSignature: await account.signOrg(org),\n role: OrgRole.Owner\n });\n });\n }\n\n canRememberMasterKey() {\n return isKeyStoreAvailable();\n }\n\n async rememberMasterKey() {\n if (!this.account || this.account.locked) {\n throw \"App needs to be unlocked first\";\n }\n const key = await getCryptoProvider().generateKey(new AESKeyParams());\n await keyStoreSet(\"master_key_encryption_key\", bytesToBase64(key));\n const container = new SimpleContainer();\n await container.unlock(key);\n await container.setData(this.account.masterKey!);\n this.setState({ rememberedMasterKey: container });\n await this.save();\n }\n\n async forgetMasterKey() {\n try {\n await keyStoreDelete(\"master_key_encryption_key\");\n } catch (e) {}\n this.setState({ rememberedMasterKey: null });\n await this.save();\n }\n\n async unlockWithRememberedMasterKey() {\n const encryptedMasterKey = this.state.rememberedMasterKey!;\n const key = base64ToBytes(await keyStoreGet(\"master_key_encryption_key\"));\n await encryptedMasterKey.unlock(key);\n const masterKey = await encryptedMasterKey.getData();\n await this.unlockWithMasterKey(masterKey);\n }\n\n async unlockWithMasterKey(key: Uint8Array) {\n await this.account!.unlockWithMasterKey(key);\n await this._unlocked();\n }\n\n /**\n * ==================\n * VAULT MANAGEMENT\n * ==================\n */\n\n /** Get the [[Vault]] with the given `id` */\n getVault(id: VaultID) {\n return this.state.vaults.find(vault => vault.id === id);\n }\n\n /** Locally update the given `vault` object */\n putVault(vault: Vault) {\n this.setState({\n vaults: [...this.state.vaults.filter(v => v.id !== vault.id), vault]\n });\n }\n\n isMainVault(vault: Vault) {\n return vault && this.account && this.account.mainVault.id === vault.id;\n }\n\n /** Create a new [[Vault]] */\n async createVault(\n name: string,\n org: Org,\n members: { id: AccountID; readonly: boolean }[] = [],\n groups: { name: string; readonly: boolean }[] = []\n ): Promise<Vault> {\n let vault = new Vault();\n vault.name = name;\n vault.org = { id: org.id, name: org.name };\n vault = await this.api.createVault(vault);\n\n await this.fetchOrg(org);\n\n await this.updateOrg(org.id, async (org: Org) => {\n groups.forEach(({ name, readonly }) => {\n const group = org.getGroup(name);\n if (!group) {\n setTimeout(() => {\n throw `Group not found: ${name}`;\n });\n return;\n }\n group.vaults.push({ id: vault.id, readonly });\n });\n members.forEach(({ id, readonly }) => {\n const member = org.getMember({ id });\n if (!member) {\n setTimeout(() => {\n throw `Member not found: ${id}`;\n });\n return;\n }\n member.vaults.push({ id: vault.id, readonly });\n });\n });\n\n await this.synchronize();\n return vault;\n }\n\n /** Update [[Vault]] name and access (not the vaults contents) */\n async updateVaultAccess(\n /** Organization owning the vault */\n orgId: OrgID,\n /** The vault id */\n id: VaultID,\n /** The new vault name */\n name: string,\n /** Organization members that should have access to the vault */\n members: { id: AccountID; readonly: boolean }[] = [],\n /** Groups that should have access to the vault */\n groups: { name: string; readonly: boolean }[] = []\n ) {\n if (!members.length && !groups.length) {\n throw new Error(\"You have to assign at least one member or group!\");\n }\n\n await this.updateOrg(orgId, async (org: Org) => {\n // Update name (the name of the actual [[Vault]] name will be\n // updated in the background)\n org.vaults.find(v => v.id === id)!.name = name;\n\n // Update group access\n for (const group of org.groups) {\n // remove previous vault entry\n group.vaults = group.vaults.filter(v => v.id !== id);\n // update vault entry\n const selection = groups.find(g => g.name === group.name);\n if (selection) {\n group.vaults.push({ id, readonly: selection.readonly });\n }\n }\n\n // Update member access\n for (const member of org.members) {\n // remove previous vault entry\n member.vaults = member.vaults.filter(v => v.id !== id);\n // update vault entry\n const selection = members.find(m => m.id === member.id);\n if (selection) {\n member.vaults.push({ id, readonly: selection.readonly });\n }\n }\n });\n\n this.synchronize();\n }\n\n /** Commit changes to vault object and save locally */\n async saveVault(vault: Vault): Promise<void> {\n await vault.commit();\n this.putVault(vault);\n await this.save();\n }\n\n /** Delete [[Vault]] */\n async deleteVault(id: VaultID) {\n await this.api.deleteVault(id);\n await this.synchronize();\n }\n\n /** Synchronize the given [[Vault]] */\n async syncVault(vault: { id: VaultID; name?: string; revision?: string }): Promise<Vault> {\n return this._queueSync(vault, (vault: { id: VaultID }) => this._syncVault(vault));\n }\n\n /** Synchronize all vaults the current user has access to. */\n async syncVaults() {\n if (!this.account) {\n return;\n }\n\n // Sync private vault\n const promises = [this.syncVault(this.account.mainVault)] as Promise<any>[];\n\n // Sync vaults assigned to through organizations\n for (const org of this.state.orgs) {\n // Sync all vaults for this organization\n for (const vault of org.getVaultsForMember(this.account)) {\n promises.push(this.syncVault(vault));\n }\n }\n\n // clean up vaults the user no longer has access to\n const removeVaults = new Set<VaultID>();\n for (const vault of this.state.vaults) {\n const org = vault.org && this.getOrg(vault.org.id);\n if (\n vault.id !== this.account.mainVault.id &&\n (!org || !org.vaults.find(v => v.id === vault.id) || !org.canRead(vault, this.account))\n ) {\n removeVaults.add(vault.id);\n }\n }\n\n await this.setState({\n vaults: this.state.vaults.filter(v => !removeVaults.has(v.id))\n });\n\n await Promise.all(promises);\n }\n\n async fetchVault({ id, revision }: { id: VaultID; revision?: string }): Promise<Vault | null> {\n if (!this.account) {\n console.error(\"need to be logged in to fetch vault!\");\n return null;\n }\n\n let localVault = this.getVault(id);\n\n if (localVault && revision && localVault.revision === revision) {\n return localVault;\n }\n\n let remoteVault: Vault | null = null;\n let result: Vault;\n\n try {\n // Fetch and unlock remote vault\n remoteVault = await this.api.getVault(id);\n } catch (e) {\n if (localVault && e.code !== ErrorCode.FAILED_CONNECTION) {\n localVault.error = e;\n }\n }\n\n if (!remoteVault) {\n return null;\n }\n\n try {\n await remoteVault.unlock(this.account);\n } catch (e) {\n if (localVault) {\n localVault.error = e;\n return localVault;\n } else {\n remoteVault.error = e;\n this.putVault(remoteVault);\n return remoteVault;\n }\n }\n\n // Merge changes\n if (localVault) {\n result = this.getVault(id)!;\n try {\n await result.unlock(this.account);\n result.merge(remoteVault);\n } catch (e) {\n result = remoteVault;\n }\n } else {\n result = remoteVault;\n }\n\n // Migrate favorites from \"old\" favoriting mechanism\n for (const item of result.items) {\n if (item.favorited && item.favorited.includes(this.account.id)) {\n this.account.favorites.add(item.id);\n item.favorited = item.favorited.filter(acc => acc !== this.account!.id);\n result.items.update(item);\n }\n }\n\n await this.saveVault(result);\n\n return result;\n }\n\n async updateVault({ id }: { id: VaultID }, tries = 0): Promise<Vault | null> {\n if (!this.account) {\n throw \"need to be logged in to update vault!\";\n }\n\n let vault = this.getVault(id)!;\n const org = vault.org && this.getOrg(vault.org.id);\n\n const accessors = (org ? org.getAccessors(vault) : [this.account]) as OrgMember[];\n\n const accessorsChanged =\n vault.accessors.length !== accessors.length ||\n accessors.some(a => vault.accessors.some(b => a.id !== b.id));\n\n if ((org && org.isSuspended(this.account)) || (!vault.items.hasChanges && !accessorsChanged)) {\n // No changes - skipping update\n return vault;\n }\n\n if (org && !org.canWrite(vault, this.account)) {\n // User does'nt have write access; dismiss changes and bail out;\n vault.items.clearChanges();\n return vault;\n }\n\n const updateStarted = new Date();\n vault = vault.clone();\n\n vault.items.clearChanges();\n await vault.commit();\n\n try {\n // // Make sure the organization revision matches the one the vault is based on\n if (vault.org && (!org || org.revision !== vault.org.revision)) {\n if (tries > 3) {\n throw new Err(\n ErrorCode.OUTDATED_REVISION,\n $l(\n \"Local changes to this vault could not be synchronized because there was a problem \" +\n \"retrieving information for this vaults organization. If this problem persists \" +\n \"please contact customer support!\"\n )\n );\n }\n\n // Get the latest organization and vault info, then try again\n await this.fetchOrg({ id: vault.org.id });\n await this.fetchVault({ id });\n return this.updateVault(vault, tries + 1);\n }\n } catch (e) {\n this.getVault(vault.id)!.error = e;\n return null;\n }\n\n // Update accessors\n if (org) {\n try {\n if (org.frozen) {\n throw new Err(\n ErrorCode.ORG_FROZEN,\n $l(\"Synching local changes failed because the organization this vault belongs to is frozen.\")\n );\n }\n\n if (!org.canWrite(vault, this.account)) {\n throw new Err(\n ErrorCode.INSUFFICIENT_PERMISSIONS,\n $l(\"Synching local changes failed because you don't have write permissions for this vault.\")\n );\n }\n\n // Look up which members should have access to this vault\n const accessors = org.getAccessors(vault);\n\n // Verify member details\n await this.account.verifyOrg(org);\n await org.verifyAll(accessors);\n\n // Update accessors\n await vault.updateAccessors(accessors);\n } catch (e) {\n this.getVault(vault.id)!.error = e;\n return null;\n }\n } else {\n await vault.updateAccessors([this.account]);\n }\n\n // Push updated vault object to [[Server]]\n try {\n vault = await this.api.updateVault(vault);\n await vault.unlock(this.account);\n\n const existing = this.getVault(vault.id)!;\n\n // Clear changes that happened before the sync started (retaining any changes made while\n // the sync was in progress)\n existing.items.clearChanges(updateStarted);\n\n // Merge changes back into existing vault (also updating revisision etc.)\n existing.merge(vault);\n\n // Comit changes and update local state\n await existing.commit();\n this.putVault(existing);\n\n if (org) {\n org.revision = vault.org!.revision!;\n org.vaults.find(v => v.id === vault!.id)!.revision = vault.revision;\n this.putOrg(org);\n this.account.orgs.find(o => o.id === org.id)!.revision = org.revision;\n } else {\n this.account.mainVault.revision = vault.revision;\n }\n\n await this.save();\n\n return existing;\n } catch (e) {\n // The server will reject the update if the vault revision does\n // not match the current revision on the server, in which case we'll\n // have to fetch the current vault version and try again.\n if (e.code === ErrorCode.OUTDATED_REVISION) {\n await this.fetchVault({ id });\n return this.updateVault({ id });\n }\n\n if (e.code !== ErrorCode.FAILED_CONNECTION) {\n this.getVault(vault.id)!.error = e;\n }\n\n return vault;\n }\n }\n\n /** Whether the current user has write permissions to the given `vault`. */\n hasWritePermissions(vault: Vault) {\n // No organization means its the users private vault so they naturally have write access\n if (!vault.org) {\n return true;\n }\n\n const org = this.getOrg(vault.org.id)!;\n return org.canWrite(vault, this.account!);\n }\n\n private async _syncVault(vault: { id: VaultID; revision?: string }): Promise<Vault | null> {\n await this.fetchVault(vault);\n return this.updateVault(vault);\n }\n\n /**\n * =======================\n * Vault Item Management\n * =======================\n */\n\n /** Get the [[VaultItem]] and [[Vault]] for the given item `id` */\n getItem(id: VaultItemID): { item: VaultItem; vault: Vault } | null {\n for (const vault of this.state.vaults) {\n const item = vault.items.get(id);\n if (item) {\n return { item, vault };\n }\n }\n\n return null;\n }\n\n /** Adds a number of `items` to the given `vault` */\n async addItems(items: VaultItem[], { id }: { id: VaultID }) {\n const vault = this.getVault(id)!;\n vault.items.update(...items);\n await this.saveVault(vault);\n this.syncVault(vault);\n }\n\n /** Creates a new [[VaultItem]] */\n async createItem(name: string, vault: { id: VaultID }, fields?: Field[], tags?: Tag[]): Promise<VaultItem> {\n const item = await createVaultItem(name || \"\", fields, tags);\n if (this.account) {\n item.updatedBy = this.account.id;\n }\n\n await this.addItems([item], vault);\n\n return item;\n }\n\n /** Update a given [[VaultItem]]s name, fields, tags and attachments */\n async updateItem(\n item: VaultItem,\n upd: {\n name?: string;\n fields?: Field[];\n tags?: Tag[];\n attachments?: AttachmentInfo[];\n }\n ) {\n const { vault } = this.getItem(item.id)!;\n vault.items.update(new VaultItem({ ...item, ...upd, updatedBy: this.account!.id }));\n await this.saveVault(vault);\n await this.syncVault(vault);\n }\n\n async toggleFavorite(id: VaultItemID, favorite: boolean) {\n await this.updateAccount(acc => acc.toggleFavorite(id, favorite));\n }\n\n async updateLastUsed(item: VaultItem) {\n this.state.lastUsed.set(item.id, new Date());\n this.publish();\n }\n\n /** Delete a number of `items` */\n async deleteItems(items: VaultItem[]) {\n const attachments: AttachmentInfo[] = [];\n\n // Group items by vault\n const grouped = new Map<Vault, VaultItem[]>();\n for (const item of items) {\n const { vault } = this.getItem(item.id)!;\n\n if (!grouped.has(vault)) {\n grouped.set(vault, []);\n }\n\n grouped.get(vault)!.push(item);\n attachments.push(...item.attachments);\n }\n\n const promises: Promise<void>[] = [];\n\n // Delete all attachments for this item\n promises.push(...attachments.map(att => this.api.deleteAttachment(new DeleteAttachmentParams(att))));\n\n // Remove items from their respective vaults\n for (const [vault, items] of grouped.entries()) {\n promises.push(\n (async () => {\n vault.items.remove(...items);\n await this.saveVault(vault);\n await this.syncVault(vault);\n })()\n );\n }\n\n await Promise.all(promises);\n }\n\n /** Move `items` from their current vault to the `target` vault */\n async moveItems(items: VaultItem[], target: Vault) {\n if (items.some(item => !!item.attachments.length)) {\n throw \"Items with attachments cannot be moved!\";\n }\n const newItems = await Promise.all(items.map(async item => new VaultItem({ ...item, id: await uuid() })));\n await this.addItems(newItems, target);\n await this.deleteItems(items);\n return newItems;\n }\n\n getItemsForHost(host: string) {\n const items: { vault: Vault; item: VaultItem }[] = [];\n for (const vault of this.vaults) {\n for (const item of vault.items) {\n if (\n item.fields.some(field => {\n if (field.type !== \"url\") {\n return false;\n }\n\n // Try to parse host from url. If field value is not a valid URL,\n // assume its the bare host name\n let h = field.value;\n try {\n h = new URL(field.value).host;\n } catch (e) {}\n\n // If host doesn't match exactly, try with/without \"www.\"\n return h === host || (host.startsWith(\"www.\") ? host.slice(4) === h : \"www.\" + host === h);\n })\n ) {\n items.push({ vault, item });\n }\n }\n }\n return items;\n }\n\n getItemsForUrl(url: string) {\n try {\n const { host } = new URL(url);\n return this.getItemsForHost(host);\n } catch (e) {\n return [];\n }\n }\n\n /*\n * =========================\n * ORGANIZATION MANAGEMENT\n * =========================\n */\n\n /** Get the organization with the given `id` */\n getOrg(id: OrgID) {\n return this.state.orgs.find(org => org.id === id);\n }\n\n /** Update the given organization locally */\n putOrg(org: Org) {\n this.setState({\n orgs: [...this.state.orgs.filter(v => v.id !== org.id), org]\n });\n }\n\n /** Create a new [[Org]]ganization */\n async createOrg(name: string, type: OrgType = OrgType.Business): Promise<Org> {\n let org = new Org();\n org.name = name;\n org.type = type;\n org = await this.api.createOrg(org);\n await org.initialize(this.account!);\n org = await this.api.updateOrg(org);\n await this.fetchAccount();\n return this.fetchOrg(org);\n }\n\n /** Fetch all organizations the current account is a member of */\n async fetchOrgs() {\n if (!this.account) {\n return;\n }\n\n try {\n await Promise.all(this.account.orgs.map(org => this.fetchOrg(org)));\n } catch (e) {}\n\n // Remove orgs that the account is no longer a member of\n this.setState({ orgs: this.state.orgs.filter(org => this.account!.orgs.some(o => o.id === org.id)) });\n }\n\n /** Fetch the [[Org]]anization object with the given `id` */\n async fetchOrg({ id, revision }: { id: OrgID; revision?: string }) {\n const existing = this.getOrg(id);\n\n if (existing && existing.revision === revision) {\n return existing;\n }\n\n const org = await this.api.getOrg(id);\n\n // Verify that the updated organization object has a `minMemberUpdated`\n // property equal to or higher than the previous (local) one.\n if (existing && org.minMemberUpdated < existing.minMemberUpdated) {\n throw new Err(ErrorCode.VERIFICATION_ERROR, \"'minMemberUpdated' property may not decrease!\");\n }\n\n this.putOrg(org);\n await this.save();\n return org;\n }\n\n /**\n * Update the organization with the given `id`.\n *\n * @param transform Function applying the changes\n */\n async updateOrg(id: OrgID, transform: (org: Org) => Promise<any>): Promise<Org> {\n // Create a clone of the existing org object\n let org = this.getOrg(id)!.clone();\n\n // Apply changes\n await transform(org);\n\n try {\n org = await this.api.updateOrg(org);\n } catch (e) {\n // If organizaton has been updated since last fetch,\n // get the current version and then retry\n if (e.code === ErrorCode.OUTDATED_REVISION) {\n await this.fetchOrg({ id });\n return this.updateOrg(id, transform);\n } else {\n throw e;\n }\n }\n\n // Update and save app state\n this.putOrg(org);\n await this.save();\n return org;\n }\n\n async deleteOrg(id: OrgID) {\n await this.api.deleteOrg(id);\n await this.synchronize();\n }\n\n /** Creates a new [[Group]] in the given `org` */\n async createGroup(org: Org, name: string, members: OrgMember[]) {\n const group = new Group();\n group.name = name;\n group.members = members.map(({ id }) => ({ id }));\n await this.updateOrg(org.id, async (org: Org) => {\n if (org.getGroup(name)) {\n throw \"A group with this name already exists!\";\n }\n org.groups.push(group);\n });\n return group;\n }\n\n /**\n * Updates a [[Group]]s name and members\n */\n async updateGroup(org: Org, { name }: Group, members: OrgMember[], newName?: string) {\n await this.updateOrg(org.id, async org => {\n const group = org.getGroup(name);\n if (!group) {\n throw \"Group not found!\";\n }\n if (newName && newName !== name && org.getGroup(newName)) {\n throw \"Another group with this name already exists!\";\n }\n if (newName) {\n group.name = newName;\n }\n group.members = members.map(({ id }) => ({ id }));\n });\n }\n\n /**\n * Update a members assigned [[Vault]]s, [[Group]]s and [[OrgRole]].\n */\n async updateMember(\n org: Org,\n { id }: OrgMember,\n {\n vaults,\n groups,\n role\n }: {\n vaults?: { id: VaultID; readonly: boolean }[];\n groups?: string[];\n role?: OrgRole;\n }\n ): Promise<OrgMember> {\n await this.updateOrg(org.id, async org => {\n const member = org.getMember({ id })!;\n\n // Update assigned vaults\n if (vaults) {\n member.vaults = vaults;\n }\n\n // Update assigned groups\n if (groups) {\n // Remove member from all groups\n for (const group of org.groups) {\n group.members = group.members.filter(m => m.id !== id);\n }\n\n // Add them back to the assigned groups\n for (const name of groups) {\n const group = org.getGroup(name)!;\n group.members.push({ id });\n }\n }\n\n // Update member role\n if (role && member.role !== role) {\n await org.unlock(this.account!);\n await org.addOrUpdateMember({ ...member, role });\n }\n });\n\n return this.getOrg(org.id)!.getMember({ id })!;\n }\n\n /**\n * Removes a member from the given `org`\n */\n async removeMember(org: Org, member: OrgMember) {\n await this.updateOrg(org.id, async org => {\n await org.unlock(this.account!);\n await org.removeMember(member);\n });\n }\n\n /*\n * ===================\n * INVITE MANAGEMENT\n * ===================\n */\n\n /**\n * Create a new [[Invite]]\n */\n async createInvites({ id }: Org, emails: string[], purpose?: InvitePurpose) {\n let invites: Invite[] = [];\n await this.updateOrg(id, async (org: Org) => {\n await org.unlock(this.account!);\n invites = [];\n for (const email of emails) {\n const invite = new Invite(email, purpose);\n await invite.initialize(org, this.account!);\n invites.push(invite);\n }\n org.invites = [...org.invites.filter(a => !invites.some(b => a.email === b.email)), ...invites];\n });\n return invites!;\n }\n\n /**\n * Get an [[Invite]] based on the organization id and invite id.\n */\n async getInvite(orgId: string, id: string) {\n let invite = null;\n try {\n invite = await this.api.getInvite(new GetInviteParams({ org: orgId, id }));\n } catch (e) {}\n return invite;\n }\n\n /**\n * Accept an [[Invite]]\n *\n * @param secret The secret confirmation code, provided to the user by the organization owner\n */\n async acceptInvite(invite: Invite, secret: string) {\n const success = await invite.accept(this.account!, secret);\n if (success) {\n await this.api.acceptInvite(invite);\n }\n return success;\n }\n\n /**\n * Confirm an [[Invite]] after it has been accepted by the invitee.\n * This will verify the invitees information and then add them to\n * the organization.\n *\n * @returns The newly created member object.\n */\n async confirmInvite(invite: Invite): Promise<OrgMember> {\n // Verify invitee information\n if (!(await invite.verifyInvitee())) {\n throw new Err(ErrorCode.VERIFICATION_ERROR, \"Failed to verify invitee information!\");\n }\n\n // Add member and update organization\n await this.updateOrg(invite.org!.id, async (org: Org) => {\n await org.unlock(this.account!);\n await org.addOrUpdateMember(invite.invitee!);\n org.removeInvite(invite);\n });\n\n return this.getOrg(invite.org!.id)!.getMember({ id: invite.invitee!.id })!;\n }\n\n /**\n * Deletes an [[Invite]]\n */\n async deleteInvite(invite: Invite): Promise<void> {\n await this.updateOrg(\n invite.org!.id,\n async org => (org.invites = org.invites.filter(inv => inv.id !== invite.id))\n );\n }\n\n /**\n * =============\n * ATTACHMENTS\n * =============\n */\n\n async createAttachment(itemId: VaultItemID, file: File, name?: string): Promise<Attachment> {\n const { vault, item } = this.getItem(itemId)!;\n\n const att = new Attachment({ vault: vault.id });\n await att.fromFile(file);\n if (name) {\n att.name = name;\n }\n\n const promise = this.api.createAttachment(att);\n\n att.uploadProgress = promise.progress;\n\n promise.then(id => {\n att.id = id;\n this.updateItem(item, { attachments: [...item.attachments, att.info] });\n promise.progress!.complete();\n });\n\n return att;\n }\n\n async downloadAttachment(att: AttachmentInfo) {\n const attachment = new Attachment(att);\n\n const promise = this.api.getAttachment(new GetAttachmentParams({ id: att.id, vault: att.vault }));\n\n attachment.downloadProgress = promise.progress;\n\n promise.then(att => {\n attachment.fromRaw(att.toRaw());\n attachment.type = att.type;\n attachment.name = att.name;\n promise.progress!.complete();\n });\n\n return attachment;\n }\n\n async deleteAttachment(itemId: VaultItemID, att: Attachment | AttachmentInfo): Promise<void> {\n const { item } = this.getItem(itemId)!;\n try {\n await this.api.deleteAttachment(new DeleteAttachmentParams(att));\n } catch (e) {\n if (e.code !== ErrorCode.NOT_FOUND) {\n throw e;\n }\n }\n await this.updateItem(item, { attachments: item.attachments.filter(a => a.id !== att.id) });\n }\n\n /**\n * =========\n * BILLING\n * =========\n */\n\n async updateBilling(params: UpdateBillingParams) {\n params.provider = (this.state.billingProvider && this.state.billingProvider.type) || \"\";\n await this.api.updateBilling(params);\n params.org ? await this.fetchOrg({ id: params.org }) : await this.fetchAccount();\n }\n\n async loadBillingProvider() {\n const providers = await this.api.getBillingProviders();\n this.setState({ billingProvider: providers[0] || null });\n }\n\n getItemsQuota(vault: Vault = this.mainVault!) {\n return this.isMainVault(vault) && !this.orgs.some(org => !org.frozen) ? this.account!.quota.items : -1;\n }\n\n /**\n * ================\n * HELPER METHODS\n * ================\n */\n\n private async _queueSync(obj: { id: string }, fn: (obj: { id: string }) => Promise<any>): Promise<any> {\n let queued = this._queuedSyncPromises.get(obj.id);\n let active = this._activeSyncPromises.get(obj.id);\n\n if (queued) {\n // There is already a queued sync promise, so just return that one\n return queued;\n }\n\n if (active) {\n // There is already a synchronization in process. wait for the current sync to finish\n // before starting a new one.\n const next = () => {\n this._queuedSyncPromises.delete(obj.id);\n return this._queueSync(obj, fn);\n };\n queued = active.then(next, next);\n this._queuedSyncPromises.set(obj.id, queued);\n return queued;\n }\n\n active = fn(obj).then(\n (result: any) => {\n this._activeSyncPromises.delete(obj.id);\n this.setState({ syncing: !!this._activeSyncPromises.size });\n return result;\n },\n e => {\n this._activeSyncPromises.delete(obj.id);\n this.setState({ syncing: !!this._activeSyncPromises.size });\n throw e;\n }\n );\n\n this._activeSyncPromises.set(obj.id, active);\n this.setState({ syncing: !!this._activeSyncPromises.size });\n\n return active;\n }\n\n private async _unlocked() {\n // Unlock all vaults\n await Promise.all(\n this.state.vaults.map(async vault => {\n try {\n await vault.unlock(this.account!);\n } catch (e) {\n vault.error = e;\n }\n })\n );\n\n // Notify state change\n this.publish();\n\n // Trigger sync\n this.synchronize();\n }\n}\n","import { Serializable, AsBytes } from \"./encoding\";\nimport { SimpleContainer } from \"./container\";\nimport { VaultID } from \"./vault\";\nimport { AESKeyParams } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { Err, ErrorCode } from \"./error\";\nimport { RequestProgress } from \"./transport\";\n\nfunction readFile(blob: File): Promise<Uint8Array> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = new Uint8Array(reader.result as ArrayBuffer);\n resolve(result);\n };\n\n reader.onerror = e => {\n reader.abort();\n reject(e);\n };\n\n reader.readAsArrayBuffer(blob);\n });\n}\n\nfunction readAsText(blob: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n resolve(reader.result as string);\n };\n\n reader.onerror = e => {\n reader.abort();\n reject(e);\n };\n\n reader.readAsText(blob);\n });\n}\n\nfunction readFileAsDataURL(blob: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n resolve(reader.result as string);\n };\n\n reader.onerror = e => {\n reader.abort();\n reject(e);\n };\n\n reader.readAsDataURL(blob);\n });\n}\n\nexport type AttachmentID = string;\n\nexport class AttachmentInfo extends Serializable {\n constructor(vals: Partial<AttachmentInfo> = {}) {\n super();\n Object.assign(this, vals);\n }\n\n id: AttachmentID = \"\";\n vault: VaultID = \"\";\n name: string = \"\";\n size: number = 0;\n type: string = \"\";\n\n @AsBytes()\n key!: Uint8Array;\n}\n\nexport class Attachment extends SimpleContainer {\n id: AttachmentID = \"\";\n vault: VaultID = \"\";\n name: string = \"\";\n size: number = 0;\n type: string = \"\";\n uploadProgress?: RequestProgress;\n downloadProgress?: RequestProgress;\n\n constructor({ key, ...info }: Partial<AttachmentInfo> = {}) {\n super();\n Object.assign(this, {\n _key: key,\n ...info\n });\n }\n\n get info(): AttachmentInfo {\n return new AttachmentInfo({\n id: this.id,\n vault: this.vault,\n name: this.name,\n type: this.type,\n size: this.size,\n key: this._key\n });\n }\n\n get loaded(): boolean {\n return !!this.encryptedData;\n }\n\n async fromFile(file: File) {\n this.type = file.type;\n this.size = file.size;\n this.name = file.name;\n\n const data = await readFile(file);\n\n this._key = await getProvider().generateKey({\n algorithm: \"AES\",\n keySize: this.encryptionParams.keySize\n } as AESKeyParams);\n\n await this.setData(data);\n return this;\n }\n\n async toFile(): Promise<File> {\n const data = await this.getData();\n return new File([data], this.name, { type: this.type });\n }\n\n async toDataURL(): Promise<string> {\n const file = await this.toFile();\n return readFileAsDataURL(file);\n }\n\n async toObjectURL(): Promise<string> {\n const file = await this.toFile();\n return URL.createObjectURL(file);\n }\n\n async toText(): Promise<string> {\n const file = await this.toFile();\n return readAsText(file);\n }\n\n validate() {\n return typeof this.id === \"string\" && typeof this.vault === \"string\" && typeof this.size === \"number\";\n }\n}\n\nexport interface AttachmentStorage {\n put(a: Attachment): Promise<void>;\n get(vault: VaultID, id: AttachmentID): Promise<Attachment>;\n delete(vault: VaultID, id: AttachmentID): Promise<void>;\n deleteAll(vault: VaultID): Promise<void>;\n getUsage(vault: VaultID): Promise<number>;\n}\n\nexport class MemoryAttachmentStorage implements AttachmentStorage {\n private _storage = new Map<string, Attachment>();\n\n async put(a: Attachment): Promise<void> {\n this._storage.set(`${a.vault}_${a.id}`, a);\n }\n\n async get(vault: VaultID, id: AttachmentID): Promise<Attachment> {\n const att = this._storage.get(`${vault}_${id}`);\n if (!att) {\n throw new Err(ErrorCode.NOT_FOUND);\n }\n return att;\n }\n\n async delete(vault: VaultID, id: AttachmentID): Promise<void> {\n this._storage.delete(`${vault}_${id}`);\n }\n\n async deleteAll(vault: VaultID): Promise<void> {\n for (const key of this._storage.keys()) {\n if (key.startsWith(vault)) {\n this._storage.delete(key);\n }\n }\n }\n\n async getUsage(vault: VaultID): Promise<number> {\n let size = 0;\n for (const [key, att] of this._storage.entries()) {\n if (key.startsWith(vault)) {\n size += att.size;\n }\n }\n return size;\n }\n}\n","import { Serializable, stringToBytes, AsBytes, AsSerializable } from \"./encoding\";\nimport { PBKDF2Params } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { DeviceInfo } from \"./platform\";\nimport { Storable } from \"./storage\";\nimport { AccountID } from \"./account\";\n\n/**\n * Contains authentication data needed for SRP session negotiation\n */\nexport class Auth extends Serializable implements Storable {\n /** Id of the [[Account]] the authentication data belongs to */\n account: AccountID = \"\";\n\n /** Verifier used for SRP session negotiation */\n @AsBytes()\n verifier?: Uint8Array;\n\n /**\n * Key derivation params used by the client to compute session key from the\n * users master password\n * */\n @AsSerializable(PBKDF2Params)\n keyParams = new PBKDF2Params();\n\n @AsSerializable(DeviceInfo)\n trustedDevices: DeviceInfo[] = [];\n\n get id() {\n return this.email;\n }\n\n constructor(public email: string = \"\") {\n super();\n }\n\n /**\n * Generate the session key from the users master `password`\n */\n async getAuthKey(password: string) {\n // If no salt is set yet (i.e. during initialization),\n // generate a random value\n if (!this.keyParams.salt.length) {\n this.keyParams.salt = await getProvider().randomBytes(16);\n }\n return getProvider().deriveKey(stringToBytes(password), this.keyParams);\n }\n}\n","import { AccountID } from \"./account\";\nimport { OrgID } from \"./org\";\nimport { Serializable, AsSerializable, AsDate } from \"./encoding\";\n\nexport enum PlanType {\n Free,\n Premium,\n Family,\n Team,\n Business\n}\n\nexport class Plan extends Serializable {\n id = \"\";\n type: PlanType = PlanType.Free;\n name = \"Free\";\n description = \"\";\n items: number = -1;\n storage: number = 0;\n groups: number = 0;\n vaults: number = 0;\n min: number = 0;\n max: number = 0;\n available = false;\n cost: number = 0;\n features: string[] = [];\n default = false;\n color = \"\";\n}\n\nexport class PaymentMethod extends Serializable {\n id = \"\";\n name = \"\";\n}\n\nexport enum SubscriptionStatus {\n Trialing = \"trialing\",\n Active = \"active\",\n Inactive = \"inactive\",\n Canceled = \"canceled\"\n}\n\nexport class Subscription extends Serializable {\n id = \"\";\n account: AccountID = \"\";\n org: OrgID = \"\";\n status: SubscriptionStatus = SubscriptionStatus.Active;\n items: number = -1;\n storage: number = 0;\n groups: number = 0;\n vaults: number = 0;\n members: number = 0;\n\n paymentError?: string = undefined;\n paymentRequiresAuth?: string = undefined;\n currentInvoice: string = \"\";\n\n @AsDate()\n periodEnd: Date = new Date(0);\n\n @AsDate()\n trialEnd?: Date;\n\n @AsSerializable(Plan)\n plan: Plan = new Plan();\n}\n\nexport class BillingAddress extends Serializable {\n name = \"\";\n street = \"\";\n postalCode = \"\";\n city = \"\";\n country = \"\";\n\n constructor(params?: Partial<BillingAddress>) {\n super();\n if (params) {\n Object.assign(this, params);\n }\n }\n}\n\nexport class Discount extends Serializable {\n name = \"\";\n coupon = \"\";\n}\n\nexport class BillingInfo extends Serializable {\n customerId: string = \"\";\n account: AccountID = \"\";\n org: OrgID = \"\";\n email: string = \"\";\n\n @AsSerializable(Subscription)\n subscription: Subscription | null = null;\n\n @AsSerializable(PaymentMethod)\n paymentMethod: PaymentMethod | null = null;\n\n @AsSerializable(BillingAddress)\n address: BillingAddress = new BillingAddress();\n\n @AsSerializable(Discount)\n discount: Discount | null = null;\n\n @AsDate()\n firstTrialStarted?: Date;\n\n get trialDaysLeft() {\n const daysSinceFirstTrial = this.firstTrialStarted\n ? Math.floor((Date.now() - this.firstTrialStarted.getTime()) / 24 / 60 / 60 / 1000)\n : 0;\n return Math.max(0, 30 - daysSinceFirstTrial);\n }\n}\n\nexport class UpdateBillingParams extends Serializable {\n provider: string = \"\";\n account?: AccountID = undefined;\n org?: OrgID = undefined;\n email?: string = undefined;\n plan?: string = undefined;\n planType?: PlanType = undefined;\n members?: number = undefined;\n paymentMethod?: { name: string } & any = undefined;\n coupon?: string = undefined;\n cancel?: boolean = undefined;\n\n @AsSerializable(BillingAddress)\n address?: BillingAddress;\n\n constructor(params?: Partial<UpdateBillingParams>) {\n super();\n if (params) {\n Object.assign(this, params);\n }\n }\n}\n\nexport class BillingProviderInfo extends Serializable {\n type: string = \"\";\n config: {\n [param: string]: string;\n } = {};\n\n @AsSerializable(Plan)\n plans: Plan[] = [];\n}\n\nexport interface BillingProvider {\n update(params: UpdateBillingParams): Promise<void>;\n delete(billingInfo: BillingInfo): Promise<void>;\n getInfo(): BillingProviderInfo;\n}\n//\n// const stubPlans: Plan[] = [\n// {\n// id: \"personal\",\n// name: \"Personal\",\n// description: \"Basic Setup For Personal Use\",\n// storage: -1,\n// available: true,\n// default: true\n// },\n// {\n// id: \"shared\",\n// name: \"Shared\",\n// description: \"Basic Setup For Sharing\",\n// storage: -1,\n// vaults: -1,\n// available: true,\n// orgType: 1\n// },\n// {\n// id: \"advanced\",\n// name: \"Advanced\",\n// description: \"Advanced Setup For Sharing\",\n// storage: -1,\n// groups: -1,\n// vaults: -1,\n// available: true,\n// orgType: 2\n// }\n// ].map(p => {\n// const plan = new Plan();\n// Object.assign(plan, p);\n// return plan;\n// });\n","import { API, PromiseWithProgress } from \"./api\";\nimport { Sender, Request, Response, RequestProgress } from \"./transport\";\nimport { DeviceInfo } from \"./platform\";\nimport { Session } from \"./session\";\nimport { Account } from \"./account\";\nimport { Err, ErrorCode } from \"./error\";\nimport { Serializable } from \"./encoding\";\n\n/**\n * Client state, keeping track of [[session]], [[account]] and [[device]] info\n */\nexport interface ClientState {\n /** Current session */\n session: Session | null;\n /** Currently logged in account */\n account: Account | null;\n /** info about current device */\n device: DeviceInfo;\n}\n\n/**\n * Client-side interface for Client-Server communication. Manages serialization,\n * authentication and some state like current session and account.\n */\nexport class Client extends API {\n online = true;\n\n constructor(\n /** Object for storing state */\n public state: ClientState,\n /** [[Sender]] implementation used for sending/receiving requests */\n private sender: Sender,\n private hook?: (req: Request, res: Response | null, err: Err | null) => void\n ) {\n super();\n\n for (const { method, output } of this.handlerDefinitions) {\n this[method] = (input: Serializable | string | undefined) => {\n const progress = new RequestProgress();\n const promise = this.call(\n method,\n typeof input === \"undefined\" ? [] : [input instanceof Serializable ? input.toRaw() : input],\n progress\n ).then(res => {\n return output\n ? Array.isArray(res.result)\n ? res.result.map(each => new output().fromRaw(each))\n : new output().fromRaw(res.result)\n : res.result;\n }) as PromiseWithProgress<any>;\n promise.progress = progress;\n return promise;\n };\n }\n }\n\n /** The current session */\n get session() {\n return this.state.session;\n }\n\n /** Generic method for making an RPC call */\n async call(method: string, params?: any[], progress?: RequestProgress) {\n const { session } = this.state;\n\n const req = new Request();\n req.method = method;\n req.params = params;\n req.device = this.state.device;\n\n if (session) {\n await session.authenticate(req);\n }\n\n let res;\n\n try {\n res = await this.sender.send(req, progress);\n } catch (e) {\n if (progress) {\n progress.error = e;\n }\n this.hook && this.hook(req, null, e);\n throw e;\n }\n\n if (res.error) {\n const err = new Err((res.error.code as any) as ErrorCode, res.error.message);\n if (progress) {\n progress.error = err;\n }\n this.hook && this.hook(req, res, err);\n throw err;\n }\n\n if (session && !(await session.verify(res))) {\n const err = new Err(ErrorCode.INVALID_RESPONSE);\n if (progress) {\n progress.error = err;\n }\n this.hook && this.hook(req, res, err);\n throw err;\n }\n\n this.hook && this.hook(req, res, null);\n return res;\n }\n}\n","import { Serializable } from \"./encoding\";\nimport { VaultItem } from \"./item\";\n\n/**\n * A collection of vault items items, used for consolidating changes made independently\n * across multiple instances through \"merging\".\n */\nexport class VaultItemCollection extends Serializable implements Iterable<VaultItem> {\n /** Number of items in this VaultItemCollection */\n get size() {\n return this._items.size;\n }\n\n get hasChanges() {\n return !!this._changes.size;\n }\n\n /** Aggregated list of tags assigned to the items in this collection */\n get tags(): string[] {\n const tags = new Set<string>();\n for (const r of this) {\n for (const t of r.tags) {\n tags.add(t);\n }\n }\n return [...tags];\n }\n\n private _items: Map<string, VaultItem>;\n private _changes = new Map<string, Date>();\n\n constructor(items: VaultItem[] = []) {\n super();\n this._items = new Map(items.map(item => [item.id, item] as [string, VaultItem]));\n }\n\n /** Get an item with a given `id` */\n get(id: string) {\n return this._items.get(id) || null;\n }\n\n /**\n * Updates one or more items based on their id. If no item with the same id\n * exists, the item will be added to the collection\n */\n update(...items: VaultItem[]) {\n for (const item of items) {\n item.updated = new Date();\n this._items.set(item.id, item);\n this._changes.set(item.id, item.updated);\n }\n }\n\n /**\n * Removes one or more items based on their id.\n */\n remove(...items: VaultItem[]) {\n for (const item of items) {\n this._items.delete(item.id);\n this._changes.set(item.id, new Date());\n }\n }\n\n /**\n * Merges in changes from another [[VaultItemCollection]] instance.\n */\n merge(coll: VaultItemCollection) {\n // Delete any items from this collection that don't\n // exist in the other collection and haven't been changed recently\n for (const item of this) {\n if (!this._changes.has(item.id) && !coll.get(item.id)) {\n this._items.delete(item.id);\n }\n }\n\n // Get changes items from other collection (but only if they haven't recently changed locally)\n for (const item of coll) {\n if (!this._changes.has(item.id)) {\n this._items.set(item.id, item);\n }\n }\n }\n\n clearChanges(before?: Date) {\n for (const [id, changed] of this._changes.entries()) {\n if (!before || changed <= before) {\n this._changes.delete(id);\n }\n }\n }\n\n protected _toRaw(version: string) {\n return {\n items: Array.from(this).map(item => item.toRaw(version)),\n changes: [...this._changes]\n };\n }\n\n protected _fromRaw({ items, changes }: any) {\n this._items = new Map(\n items.map((item: any) => [item.id, new VaultItem().fromRaw(item)] as [string, VaultItem])\n );\n this._changes = new Map<string, Date>(\n changes && changes.map(([id, date]: [string, string]) => [id, new Date(date)])\n );\n }\n\n [Symbol.iterator]() {\n return this._items.values();\n }\n}\n","import { Serializable, stringToBytes, AsBytes, AsSerializable } from \"./encoding\";\nimport { Err, ErrorCode } from \"./error\";\nimport {\n PBKDF2Params,\n AESKey,\n AESEncryptionParams,\n AESKeyParams,\n RSAEncryptionParams,\n RSAPrivateKey,\n RSAPublicKey\n} from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\n\n/**\n * Base class for all **Container** implementations. In general, a **Container** is\n * an object for holding data encrypted using a symmetric cipher. Implementations\n * vary mostly in how the encryption key is generated. Sub classes must implement\n * the [[unlock]] method and may likely also want to augment [[lock]], [[validate]],\n * [[_fromRaw]] and [[_toRaw]].\n */\nexport abstract class BaseContainer extends Serializable {\n /** Parameters used for encryption of content data */\n @AsSerializable(AESEncryptionParams)\n encryptionParams: AESEncryptionParams = new AESEncryptionParams();\n\n /** Encrypted data */\n @AsBytes()\n encryptedData?: Uint8Array;\n\n /**\n * The key used for encryption. Sub classes must set this property in the [[unlock]] method.\n */\n protected _key?: AESKey;\n\n /**\n * Encrypts the provided `data` and stores it in the container\n */\n async setData(data: Uint8Array) {\n if (!this._key) {\n throw new Err(ErrorCode.ENCRYPTION_FAILED, \"No encryption key provided!\");\n }\n\n // Generate random initialization vector\n this.encryptionParams.iv = await getProvider().randomBytes(16);\n\n // Generate additional authenticated data.\n // Note: Without knowing anything about the nature of the encrypted data,\n // we can't really choose a meaningful value for this. In the future,\n // we may want to provide the option to pass this as an argument but for now\n // a random value should be sufficient.\n this.encryptionParams.additionalData = await getProvider().randomBytes(16);\n\n // Encrypt the data and store it.\n this.encryptedData = await getProvider().encrypt(this._key, data, this.encryptionParams);\n }\n\n /**\n * Decrypts and extracts the plain text data from the container. This will\n * usually require unlocking the container first.\n */\n async getData(): Promise<Uint8Array> {\n if (!this.encryptedData || !this._key) {\n throw new Err(ErrorCode.DECRYPTION_FAILED);\n }\n return await getProvider().decrypt(this._key, this.encryptedData, this.encryptionParams);\n }\n\n /**\n * Unlocks the container, making it possible to extract the plain text\n * data via [[getData]]. The type of **secret** provided will differ based\n * on the encryption scheme used by implemenations.\n */\n abstract unlock(secret: unknown): Promise<void>;\n\n /**\n * Locks the container, removing the possibility to extract the plain text data\n * via [[getData]] until the container is unlocked again. Subclasses extending\n * this class must take care to delete any keys or other sensitive data\n * that may have been stored temporarily after unlocking the container.\n */\n lock() {\n delete this._key;\n }\n\n clone() {\n const clone = super.clone();\n clone._key = this._key;\n return clone;\n }\n}\n\n/**\n * Most basic **Container** implementation where the encryption key is\n * simply passed explicitly.\n */\nexport class SimpleContainer extends BaseContainer {\n async unlock(key: AESKey) {\n this._key = key;\n }\n}\n\n/**\n * Password-based **Container** that uses the\n * [PBES2](https://tools.ietf.org/html/rfc2898#section-6.2) encryption scheme,\n * deriving the encryption key from a user-provided passphrase.\n */\nexport class PBES2Container extends BaseContainer {\n /** Parameters used for key derivation */\n @AsSerializable(PBKDF2Params)\n keyParams: PBKDF2Params = new PBKDF2Params();\n\n /**\n * Unlocks the container using the given **password**\n */\n async unlock(password: string) {\n if (!this.keyParams.salt.length) {\n this.keyParams.salt = await getProvider().randomBytes(16);\n }\n this._key = await getProvider().deriveKey(stringToBytes(password), this.keyParams);\n }\n}\n\n/**\n * Represents an individual with access to a [[SharedContainer]]. Each accessor is mapped\n * to an entity owning a public/private key pair via their `id`.\n */\nexport class Accessor extends Serializable {\n /**\n * Identifier used to map an `Accessor` to the owner of the public key used to encrypt the shared key.\n */\n id: string = \"\";\n\n /** Shared key encrypted with the public key of the entity associated with the `Accessor` object */\n @AsBytes()\n encryptedKey: Uint8Array = new Uint8Array();\n}\n\n/**\n * The `SharedContainer` is used to securely share data between a number of\n * accessors using a shared-key encryption scheme where the content data is\n * encrypted using a randomly generated shared key that is then encrypted with\n * each accessors public key and stored along the encrypted data. Accessors can\n * then retrieve the shared key by decrypting it using their private key and\n * use it to recover the original data.\n */\nexport class SharedContainer extends BaseContainer {\n /** Parameters used to wrap the shared encryption key */\n @AsSerializable(RSAEncryptionParams)\n keyParams: RSAEncryptionParams = new RSAEncryptionParams();\n\n /** The ids and encrypted keys of all accessors */\n @AsSerializable(Accessor)\n accessors: Accessor[] = [];\n\n /**\n * Unlocks the container using the id and private key of a given accessor.\n * The id is used to look up the corresponding encrypted key while the\n * private key is used to decrypt it.\n */\n async unlock({ id, privateKey }: { id: string; privateKey: RSAPrivateKey }) {\n if (this._key) {\n // Container is already unlocked, no need to unlock it again\n return;\n }\n\n // Find accessor object with the same id\n const accessor = this.accessors.find(a => a.id === id);\n\n if (!accessor || !accessor.encryptedKey) {\n // No corresponding accessor found.\n throw new Err(ErrorCode.MISSING_ACCESS, \"You no longer have access to this vault.\");\n }\n\n // Decrypt shared key using provided private key\n this._key = await getProvider().decrypt(privateKey, accessor.encryptedKey, this.keyParams);\n }\n\n /**\n * Updates the containers accessors, generating a new shared key and encrypting\n * it with the public keys of the provided **subjects**. Non-empty containers\n * need to be unlocked first.\n */\n async updateAccessors(subjects: { id: string; publicKey: RSAPublicKey }[]) {\n // Get existing data so we can reencrypt it after rotating the key\n let data: Uint8Array | null = null;\n\n // If the container already contains data, we need to reencrypt it after generating a new key\n if (this.encryptedData) {\n if (!this._key) {\n throw \"Non-empty containers need to be unlocked before accessors can be updated!\";\n }\n data = await this.getData();\n }\n\n // Updating the accessors also requires generating a new shared key\n this._key = await getProvider().generateKey(new AESKeyParams());\n\n // Reencrypt data with new key\n if (data) {\n await this.setData(data);\n }\n\n // Encrypt the shared key with the public key of each accessor and store it along with their id\n this.accessors = await Promise.all(\n subjects.map(async ({ id, publicKey }) => {\n const accessor = new Accessor();\n accessor.id = id;\n accessor.encryptedKey = await getProvider().encrypt(publicKey, this._key!, this.keyParams);\n return accessor;\n })\n );\n }\n}\n","import { Serializable, AsBytes } from \"./encoding\";\n\n// Default number of pbkdf2 iterations\nexport const PBKDF2_ITER_DEFAULT = 5e4;\n// Maximum number of pbkdf2 iterations\nexport const PBKDF2_ITER_MAX = 1e7;\n\nexport type AESKey = Uint8Array;\nexport type HMACKey = Uint8Array;\nexport type SymmetricKey = AESKey | HMACKey;\nexport type RSAPublicKey = Uint8Array;\nexport type RSAPrivateKey = Uint8Array;\n\nexport class AESEncryptionParams extends Serializable {\n algorithm: \"AES-GCM\" | \"AES-CCM\" = \"AES-GCM\";\n tagSize: 64 | 96 | 128 = 128;\n keySize: 256 = 256;\n\n @AsBytes()\n iv: Uint8Array = new Uint8Array();\n\n @AsBytes()\n additionalData = new Uint8Array();\n\n validate() {\n return (\n [\"AES-GCM\", \"AES-CCM\"].includes(this.algorithm) &&\n [64, 96, 128].includes(this.tagSize) &&\n [256].includes(this.keySize)\n );\n }\n}\n\nexport class AESKeyParams extends Serializable {\n algorithm: \"AES\" = \"AES\";\n keySize: 256 = 256;\n\n validate() {\n return this.algorithm === \"AES\" && this.keySize === 256;\n }\n}\n\nexport class HMACKeyParams extends Serializable {\n algorithm: \"HMAC\" = \"HMAC\";\n keySize: 256 = 256;\n\n validate() {\n return this.algorithm === \"HMAC\" && this.keySize === 256;\n }\n}\n\nexport class RSAKeyParams extends Serializable {\n algorithm: \"RSA\" = \"RSA\";\n modulusLength: 2048 = 2048;\n hash: \"SHA-256\" = \"SHA-256\";\n\n @AsBytes()\n publicExponent: Uint8Array = new Uint8Array([0x01, 0x00, 0x01]);\n\n validate() {\n return (\n this.algorithm === \"RSA\" &&\n this.modulusLength === 2048 &&\n this.hash === \"SHA-256\" &&\n this.publicExponent instanceof Uint8Array\n );\n }\n}\n\nexport class PBKDF2Params extends Serializable {\n algorithm: \"PBKDF2\" = \"PBKDF2\";\n hash: \"SHA-256\" = \"SHA-256\";\n keySize: 256 = 256;\n iterations: number = PBKDF2_ITER_DEFAULT;\n\n @AsBytes()\n salt: Uint8Array = new Uint8Array();\n\n constructor(props?: Partial<PBKDF2Params>) {\n super();\n props && Object.assign(this, props);\n }\n\n validate() {\n return (\n this.algorithm === \"PBKDF2\" &&\n this.hash === \"SHA-256\" &&\n this.keySize === 256 &&\n typeof this.iterations === \"number\" &&\n this.iterations < PBKDF2_ITER_MAX &&\n this.salt instanceof Uint8Array\n );\n }\n}\n\nexport class RSAEncryptionParams extends Serializable {\n algorithm: \"RSA-OAEP\" = \"RSA-OAEP\";\n hash: \"SHA-256\" = \"SHA-256\";\n\n validate() {\n return this.algorithm === \"RSA-OAEP\" && this.hash === \"SHA-256\";\n }\n}\n\nexport class RSASigningParams extends Serializable {\n algorithm: \"RSA-PSS\" = \"RSA-PSS\";\n hash: \"SHA-256\" = \"SHA-256\";\n saltLength: 32 = 32;\n\n validate() {\n return this.algorithm === \"RSA-PSS\" && this.hash === \"SHA-256\" && this.saltLength === 32;\n }\n}\n\nexport class HMACParams extends Serializable {\n algorithm: \"HMAC\" = \"HMAC\";\n hash: \"SHA-1\" | \"SHA-256\" = \"SHA-256\";\n keySize: number = 256;\n\n constructor(props?: Partial<HMACParams>) {\n super();\n props && Object.assign(this, props);\n }\n\n validate() {\n return this.algorithm === \"HMAC\" && this.hash === \"SHA-256\" && this.keySize === 256;\n }\n}\n\nexport class HashParams extends Serializable {\n algorithm: \"SHA-1\" | \"SHA-256\" = \"SHA-256\";\n\n constructor(props?: Partial<HashParams>) {\n super();\n props && Object.assign(this, props);\n }\n\n validate() {\n return [\"SHA-1\", \"SHA-256\"].includes(this.algorithm);\n }\n}\n\n/**\n * CryptoProvider provides a unified interface for cryptographic primitives\n * accross all platforms. This is usually a thin wrapper around the\n * native crypto module provided by the platform.\n */\nexport interface CryptoProvider {\n /**\n * Generates an Array of `n` random bytes\n */\n randomBytes(n: number): Promise<Uint8Array>;\n\n /**\n * Creates a digest of the provided **input** using the algorithm specified in **params**\n * For algorithms that should be supported, see [[HashParams]].\n */\n hash(input: Uint8Array, params: HashParams): Promise<Uint8Array>;\n\n /**\n * Generates a random key or key pair for the algorithm specified in **params**\n */\n generateKey(params: AESKeyParams): Promise<AESKey>;\n generateKey(params: HMACKeyParams): Promise<HMACKey>;\n generateKey(params: RSAKeyParams): Promise<{ privateKey: RSAPrivateKey; publicKey: RSAPublicKey }>;\n\n /**\n * Derives a key from a given `password` using the provided key derivation **params**\n * `password` should be the byte array representation of a UTF-8 encoded password.\n */\n deriveKey(password: Uint8Array, params: PBKDF2Params): Promise<SymmetricKey>;\n\n /**\n * Encrypts `data` with `key` using the cipher and parameters specified in `params`\n */\n encrypt(key: AESKey, data: Uint8Array, params: AESEncryptionParams): Promise<Uint8Array>;\n encrypt(publicKey: RSAPublicKey, data: Uint8Array, params: RSAEncryptionParams): Promise<Uint8Array>;\n\n /**\n * Decrypts `data` with `key` using the cipher and parameters specified in `params`\n */\n decrypt(key: AESKey, data: Uint8Array, params: AESEncryptionParams): Promise<Uint8Array>;\n decrypt(privateKey: RSAPrivateKey, data: Uint8Array, params: RSAEncryptionParams): Promise<Uint8Array>;\n\n /**\n * Creates a signature from `data` with `key` using the algorithm and parameters specified in `params`\n */\n sign(key: HMACKey, data: Uint8Array, params: HMACParams): Promise<Uint8Array>;\n sign(key: RSAPrivateKey, data: Uint8Array, params: RSASigningParams): Promise<Uint8Array>;\n\n /**\n * Verifies `signature` with `data` and `key` using the algorithm and parameters specified in `params`\n */\n verify(key: HMACKey, signature: Uint8Array, data: Uint8Array, params: HMACParams): Promise<boolean>;\n verify(key: RSAPublicKey, signature: Uint8Array, data: Uint8Array, params: RSASigningParams): Promise<boolean>;\n\n /**\n * Creates a fingerprint from a given rsa public key\n */\n fingerprint(key: RSAPublicKey): Promise<Uint8Array>;\n}\n","import { getWordList } from \"@padloc/locale/src/wordlists\";\nimport { randomNumber } from \"./util\";\n\nexport { AVAILABLE_LANGUAGES } from \"@padloc/locale/src/wordlists\";\n\n/**\n * Generates a passphrase consisting of a number of words randomly selected\n * from a word list. Motivated by http://world.std.com/~reinhold/diceware.html\n */\nexport async function generatePassphrase(nWords = 4, separator = \"-\", languages = [\"en\"]) {\n const words = [];\n const list: string[] = [];\n\n for (const lang of languages) {\n list.push(...(await getWordList(lang)));\n }\n\n // Fall back to englisch if no word lists were found for provided languages\n if (!list.length) {\n list.push(...(await getWordList(\"en\")));\n }\n\n for (let i = 0; i < nWords; i++) {\n words.push(list[await randomNumber(0, list.length - 1)]);\n }\n\n return words.join(separator);\n}\n","export interface Event {\n type: string;\n detail?: any;\n}\n\nexport type Listener = ((e: Event) => void) | { handle: (e: Event) => void };\n\nexport interface EventTarget {\n addEventListener(eventName: string, listener: Listener): any;\n removeEventListener(eventName: string, listener: Listener): any;\n}\n\nexport class EventEmitter implements EventTarget {\n private _listeners = new Map<string, Set<Listener>>();\n\n addEventListener(eventName: string, listener: Listener) {\n if (!this._listeners.has(eventName)) {\n this._listeners.set(eventName, new Set<Listener>());\n }\n this._listeners.get(eventName)!.add(listener);\n }\n\n removeEventListener(eventName: string, listener: Listener) {\n const listeners = this._listeners.get(eventName);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n dispatchEvent(e: Event) {\n const listeners = this._listeners.get(e.type);\n if (listeners) {\n for (const listener of listeners) {\n if (typeof listener === \"function\") {\n listener(e);\n } else {\n listener.handle(e);\n }\n }\n }\n }\n\n dispatch(type: string, detail?: any) {\n this.dispatchEvent({ type, detail });\n }\n}\n","import { PBKDF2Params, HMACParams, HMACKey } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { SimpleContainer } from \"./container\";\nimport {\n stringToBytes,\n bytesToString,\n bytesToHex,\n marshal,\n unmarshal,\n concatBytes,\n Serializable,\n AsSerializable,\n AsDate,\n AsBytes\n} from \"./encoding\";\nimport { Account, AccountID } from \"./account\";\nimport { Org, OrgID } from \"./org\";\nimport { uuid } from \"./util\";\nimport { Err, ErrorCode } from \"./error\";\n\nexport type InvitePurpose = \"join_org\" | \"confirm_membership\";\n\n/**\n * Unique identifier for [[Invite]]s.\n */\nexport type InviteID = string;\n\nclass OrgInfo extends Serializable {\n id: OrgID = \"\";\n name: string = \"\";\n\n @AsBytes()\n publicKey!: Uint8Array;\n\n /**\n * Signature created using the HMAC key derived from [[secret]]\n * Used by invitee to verify organization details.\n */\n @AsBytes()\n signature!: Uint8Array;\n\n constructor(vals: Partial<OrgInfo>) {\n super();\n Object.assign(this, vals);\n }\n}\n\nclass InviteeInfo extends Serializable {\n id: AccountID = \"\";\n name: string = \"\";\n email: string = \"\";\n\n @AsBytes()\n publicKey!: Uint8Array;\n /**\n * Signature created using the HMAC key derived from [[Invite.secret]]\n * Used by organization owner to verify invitee details.\n */\n @AsBytes()\n signature!: Uint8Array;\n /**\n * Signature of organization details created using the invitee accounts\n * own secret signing key. Will be stored on the [[Member]] object to\n * allow the member to verify the organization details at a later time.\n */\n @AsBytes()\n orgSignature!: Uint8Array;\n\n constructor(vals: Partial<InviteeInfo>) {\n super();\n Object.assign(this, vals);\n }\n}\n\n/**\n * The `Invite` class encapsules most of the logic and information necessary to\n * perform a key exchange between an [[Org]] and [[Account]] before adding the\n * [[Account]] as a member. A secret HMAC key is used to sign and verify the public keys\n * of both invitee and organization. This key is derived from a [[secret]], which\n * needs to be communicated between the organization owner and invitee directly.\n *\n * The invite flow generally works as follows:\n *\n * ```ts\n * // ORG OWNER\n *\n * const invite = new Invite(\"bob@example.com\", \"add_member\");\n *\n * // Generates random secret and signs organization details\n * await invite.intialize(org, orgOwnerAccount);\n *\n * console.log(\"invite secret: \", invite.secret);\n *\n * // => Invite object is send to server, which sends an email to the invitee\n *\n * // INVITEE\n * // => Invitee fetches `invite` object from server, asks org owner for `secret` (in person)\n *\n * // Verifies organization info and signs own public key\n *\n * const success = await invite.accept(inviteeAccount, secret);\n *\n * if (!success) {\n * throw \"Verification failed! Incorrect secret?\";\n * }\n *\n * // => Sends updated invite object to server\n *\n * // ORG OWNER\n *\n * // => Fetches updated invite object\n *\n * // Verify invitee details.\n * if (!(await invite.verifyInvitee())) {\n * throw \"Failed to verify invitee details!\";\n * }\n *\n * // DONE!\n * await org.addOrUpdateMember(invite.invitee);\n * ```\n */\nexport class Invite extends SimpleContainer {\n /** Unique identfier */\n id: InviteID = \"\";\n\n /** Time of creation */\n @AsDate()\n created = new Date();\n\n /**\n * Expiration time used to limit invite procedure to a certain time\n * window. This property is also stored in [[encryptedData]] along\n * with the invite secret to prevent tempering.\n */\n @AsDate()\n expires = new Date();\n\n /**\n * Organization info, including HMAC signature used for verification.\n * Set during initialization\n */\n @AsSerializable(OrgInfo)\n org!: OrgInfo;\n\n /**\n * Invitee info, including HMAC signature used for verification\n * Set when the invitee successfully accepts the invite\n */\n @AsSerializable(InviteeInfo)\n invitee!: InviteeInfo;\n\n /** Info about who created the invite. */\n invitedBy?: {\n id: AccountID;\n name: string;\n email: string;\n } = undefined;\n\n /**\n * Random secret used for deriving the HMAC key that is used to sign and\n * verify organization and invitee details. It is encrypted at rest with an\n * AES key only available to organization admins. The invitee does not have\n * access to this property directly but needs to request it from the\n * organization owner directly.\n *\n * @secret\n * **IMPORTANT**: This property is considered **secret**\n * and should never stored or transmitted in plain text\n */\n set secret(s: string) {\n this._secret = s;\n this._signingKey = null;\n }\n get secret() {\n return this._secret;\n }\n\n /** Whether this invite has expired */\n get expired(): boolean {\n return new Date() > new Date(this.expires);\n }\n\n /** Whether this invite has been accepted by the invitee */\n get accepted(): boolean {\n return !!this.invitee;\n }\n\n private _secret: string = \"\";\n private _signingKey: HMACKey | null = null;\n\n /** Key derivation paramaters used for deriving the HMAC signing key from [[secret]]. */\n @AsSerializable(PBKDF2Params)\n signingKeyParams = new PBKDF2Params({\n iterations: 1e6\n });\n\n /**\n * Parameters used for signing organization and initee details.\n */\n @AsSerializable(HMACParams)\n signingParams = new HMACParams();\n\n constructor(\n /** invitee email */\n public email = \"\",\n /** purpose of the invite */\n public purpose: InvitePurpose = \"join_org\"\n ) {\n super();\n }\n\n /**\n * Initializes the invite by generating a random [[secret]] and [[id]] and\n * signing and storing the organization details.\n *\n * @param org The organization this invite is for\n * @param invitor Account creating the invite\n * @param duration Number of hours until this invite expires\n */\n async initialize(org: Org, invitor: Account, duration = 12) {\n this.id = await uuid();\n this.invitedBy = { id: invitor.id, email: invitor.email, name: invitor.name };\n\n // Generate secret\n this.secret = bytesToHex(await getProvider().randomBytes(4));\n // Set expiration time (12 hours from now)\n this.expires = new Date(Date.now() + 1000 * 60 * 60 * duration);\n\n // Encrypt secret and expiration date (the expiration time is also stored/transmitted\n // in plain text, encrypting it will allow verifying it wasn't tempered with later)\n this._key = org.invitesKey;\n await this.setData(stringToBytes(marshal({ secret: this.secret, expires: this.expires })));\n\n // Initialize signing params\n this.signingKeyParams.salt = await getProvider().randomBytes(16);\n\n // Create org signature using key derived from secret (see `_getSigningKey`)\n this.org = new OrgInfo({\n id: org.id,\n name: org.name,\n publicKey: org.publicKey,\n signature: await this._sign(concatBytes([stringToBytes(org.id), org.publicKey], 0x00))\n });\n }\n\n /**\n * \"Unlocks\" the invite with the dedicated key (owned by the respective [[Org]]).\n * This grants access to the [[secret]] property and verfies that [[expires]] has\n * not been tempered with.\n */\n async unlock(key: Uint8Array) {\n await super.unlock(key);\n const { secret, expires } = unmarshal(bytesToString(await this.getData()));\n this.secret = secret;\n\n // Verify that expiration time has not been tempered with\n if (this.expires.getTime() !== new Date(expires).getTime()) {\n throw new Err(ErrorCode.VERIFICATION_ERROR);\n }\n }\n\n lock() {\n super.lock();\n delete this.secret;\n delete this._signingKey;\n }\n\n /**\n * Accepts the invite by verifying the organization details and, if successful,\n * signing and storing the invitees own information. Throws if verification\n * is unsuccessful.\n */\n async accept(account: Account, secret: string): Promise<boolean> {\n this.secret = secret;\n\n // Verify org signature\n if (!(await this.verifyOrg())) {\n this.secret = \"\";\n return false;\n }\n\n this.invitee = new InviteeInfo({\n id: account.id,\n name: account.name,\n email: account.email,\n publicKey: account.publicKey,\n // this is used by the organization owner to verify the invitees public key\n signature: await this._sign(\n concatBytes([stringToBytes(account.id), stringToBytes(account.email), account.publicKey], 0x00)\n ),\n // this is used by member later to verify the organization public key\n orgSignature: await account.signOrg(this.org)\n });\n\n return true;\n }\n\n /** Verifies the organization information. */\n async verifyOrg(): Promise<boolean> {\n if (!this.org) {\n throw \"Invite needs to be initialized first!\";\n }\n\n return (\n this.expires > new Date() &&\n this._verify(this.org.signature, concatBytes([stringToBytes(this.org.id), this.org.publicKey], 0x00))\n );\n }\n\n /** Verifies the invitee information. */\n async verifyInvitee(): Promise<boolean> {\n if (!this.invitee) {\n throw \"Invite needs to be accepted first!\";\n }\n\n return (\n this.expires > new Date() &&\n this._verify(\n this.invitee.signature,\n concatBytes(\n [stringToBytes(this.invitee.id), stringToBytes(this.invitee.email), this.invitee.publicKey],\n 0x00\n )\n )\n );\n }\n\n private async _getSigningKey() {\n if (!this._signingKey) {\n this._signingKey = (await getProvider().deriveKey(\n stringToBytes(this.secret),\n this.signingKeyParams\n )) as HMACKey;\n }\n return this._signingKey;\n }\n\n private async _sign(val: Uint8Array): Promise<Uint8Array> {\n return getProvider().sign(await this._getSigningKey(), val, this.signingParams);\n }\n\n private async _verify(sig: Uint8Array, val: Uint8Array): Promise<boolean> {\n return await getProvider().verify(await this._getSigningKey(), sig, val, this.signingParams);\n }\n}\n","import { translate as $l } from \"@padloc/locale/src/translate\";\nimport { base32ToBytes, Serializable, AsSerializable, AsDate } from \"./encoding\";\nimport { totp } from \"./otp\";\nimport { uuid } from \"./util\";\nimport { AccountID } from \"./account\";\nimport { AttachmentInfo } from \"./attachment\";\n\n/** A tag that can be assigned to a [[VaultItem]] */\nexport type Tag = string;\n\n/** Unique identifier for [[VaultItem]]s */\nexport type VaultItemID = string;\n\nexport enum FieldType {\n Username = \"username\",\n Password = \"password\",\n Url = \"url\",\n Email = \"email\",\n Date = \"date\",\n Month = \"month\",\n Credit = \"credit\",\n Phone = \"phone\",\n Pin = \"pin\",\n Totp = \"totp\",\n Note = \"note\",\n Text = \"text\"\n}\n\n/**\n * Field definition containing meta data for a certain field type\n */\nexport interface FieldDef {\n /** content type */\n type: FieldType;\n /** regular expression describing pattern of field contents */\n pattern: string;\n /** whether the field should be masked when displayed */\n mask: boolean;\n /** whether the field value can have multiple lines */\n multiline: boolean;\n /** icon used for display */\n icon: string;\n /** display name */\n name: string;\n /** display formatting */\n format?: (value: string, masked: boolean) => string;\n /** for values that need to be prepared before being copied / filled */\n transform?: (value: string) => Promise<string>;\n}\n\n/** Available field types and respective meta data */\nexport const FIELD_DEFS: { [t in FieldType]: FieldDef } = {\n [FieldType.Username]: {\n type: FieldType.Username,\n pattern: \".*\",\n mask: false,\n multiline: false,\n icon: \"user\",\n get name() {\n return $l(\"Username\");\n }\n },\n [FieldType.Password]: {\n type: FieldType.Password,\n pattern: \".*\",\n mask: true,\n multiline: true,\n icon: \"lock\",\n get name() {\n return $l(\"Password\");\n },\n format(value, masked) {\n return masked ? value.replace(/./g, \"\\u2022\") : value;\n }\n },\n [FieldType.Url]: {\n type: FieldType.Url,\n pattern: \".*\",\n mask: false,\n multiline: false,\n icon: \"web\",\n get name() {\n return $l(\"URL\");\n }\n },\n [FieldType.Email]: {\n type: FieldType.Email,\n pattern: \".*\",\n mask: false,\n multiline: false,\n icon: \"email\",\n get name() {\n return $l(\"Email Address\");\n }\n },\n [FieldType.Date]: {\n type: FieldType.Date,\n pattern: \"\\\\d\\\\d\\\\d\\\\d-\\\\d\\\\d-\\\\d\\\\d\",\n mask: false,\n multiline: false,\n icon: \"date\",\n get name() {\n return $l(\"Date\");\n },\n format(value) {\n return new Date(value).toLocaleDateString();\n }\n },\n [FieldType.Month]: {\n type: FieldType.Month,\n pattern: \"\\\\d\\\\d\\\\d\\\\d-\\\\d\\\\d\",\n mask: false,\n multiline: false,\n icon: \"month\",\n get name() {\n return $l(\"Month\");\n }\n },\n [FieldType.Credit]: {\n type: FieldType.Credit,\n pattern: \"\\\\d*\",\n mask: true,\n multiline: false,\n icon: \"credit\",\n get name() {\n return $l(\"Credit Card Number\");\n },\n format(value, masked) {\n const parts = [];\n\n for (let i = 0; i < value.length; i += 4) {\n const part = value.slice(i, i + 4);\n parts.push(masked && i < value.length - 4 ? part.replace(/./g, \"\\u2022\") : part);\n }\n\n return parts.join(\" \");\n }\n },\n [FieldType.Phone]: {\n type: FieldType.Phone,\n pattern: \".*\",\n mask: false,\n multiline: false,\n icon: \"phone\",\n get name() {\n return $l(\"Phone Number\");\n }\n },\n [FieldType.Pin]: {\n type: FieldType.Pin,\n pattern: \"\\\\d*\",\n mask: true,\n multiline: false,\n icon: \"lock\",\n get name() {\n return $l(\"PIN\");\n },\n format(value, masked) {\n return masked ? value.replace(/./g, \"\\u2022\") : value;\n }\n },\n [FieldType.Totp]: {\n type: FieldType.Totp,\n pattern: \".*\",\n mask: false,\n multiline: false,\n icon: \"totp\",\n get name() {\n return $l(\"2FA Token\");\n },\n async transform(value: string) {\n return await totp(base32ToBytes(value));\n }\n },\n [FieldType.Note]: {\n type: FieldType.Note,\n pattern: \".*\",\n mask: false,\n multiline: true,\n icon: \"note\",\n get name() {\n return $l(\"Note\");\n }\n },\n [FieldType.Text]: {\n type: FieldType.Text,\n pattern: \".*\",\n mask: false,\n multiline: false,\n icon: \"text\",\n get name() {\n return $l(\"Other\");\n }\n }\n};\n\nexport class Field extends Serializable {\n constructor(vals: Partial<Field> = {}) {\n super();\n Object.assign(this, vals);\n }\n\n /**\n * field type, determining meta data via the corresponding field definition\n * in [[FIELD_DEFS]]\n */\n type: FieldType = FieldType.Text;\n /** field name */\n name: string = \"\";\n /** field content */\n value: string = \"\";\n\n get def(): FieldDef {\n return FIELD_DEFS[this.type] || FIELD_DEFS[FieldType.Text];\n }\n\n get icon() {\n return this.def.icon;\n }\n\n async transform() {\n return this.def.transform ? await this.def.transform(this.value) : this.value;\n }\n\n format(masked: boolean) {\n return this.def.format ? this.def.format(this.value, masked) : this.value;\n }\n\n protected _fromRaw(raw: any) {\n if (!raw.type) {\n raw.type = guessFieldType(raw);\n }\n return super._fromRaw(raw);\n }\n}\n\n/** Normalizes a tag value by removing invalid characters */\nexport function normalizeTag(tag: string): Tag {\n return tag.replace(\",\", \"\");\n}\n\n/** Represents an entry within a vault */\nexport class VaultItem extends Serializable {\n constructor(vals: Partial<VaultItem> = {}) {\n super();\n Object.assign(this, vals);\n }\n\n /** unique identfier */\n id: VaultItemID = \"\";\n\n /** item name */\n name: string = \"\";\n\n /** item fields */\n @AsSerializable(Field)\n fields: Field[] = [];\n\n /** array of tags assigned with this item */\n tags: Tag[] = [];\n\n /** Date and time of last update */\n @AsDate()\n updated: Date = new Date();\n\n /** [[Account]] the item was last updated by */\n updatedBy: AccountID = \"\";\n\n /**\n * @DEPRECATED\n * Accounts that have favorited this item\n */\n favorited: AccountID[] = [];\n\n /** attachments associated with this item */\n @AsSerializable(AttachmentInfo)\n attachments: AttachmentInfo[] = [];\n}\n\n/** Creates a new vault item */\nexport async function createVaultItem(name: string, fields: Field[] = [], tags: Tag[] = []): Promise<VaultItem> {\n return new VaultItem({\n name,\n fields,\n tags,\n id: await uuid()\n });\n}\n\nconst matchUsername = /username/i;\nconst matchPassword = /password/i;\nconst matchUrl = /url/i;\nconst matchNote = /\\n/;\n\n/** Guesses the most appropriate field type based on field name and value */\nexport function guessFieldType({ name = \"\", value = \"\", masked }: any): FieldType {\n return masked || name.match(matchPassword)\n ? FieldType.Password\n : name.match(matchUsername)\n ? FieldType.Username\n : name.match(matchUrl)\n ? FieldType.Url\n : value.match(matchNote)\n ? FieldType.Note\n : FieldType.Text;\n}\n\nexport interface ItemTemplate {\n fields: { name: string; type: FieldType }[];\n icon: string;\n toString(): string;\n attachment?: boolean;\n}\n\nexport const ITEM_TEMPLATES: ItemTemplate[] = [\n {\n toString: () => $l(\"Website / App\"),\n icon: \"web\",\n fields: [\n {\n get name() {\n return $l(\"Username\");\n },\n type: FieldType.Username\n },\n {\n get name() {\n return $l(\"Password\");\n },\n type: FieldType.Password\n },\n {\n get name() {\n return $l(\"URL\");\n },\n type: FieldType.Url\n }\n ]\n },\n {\n toString: () => $l(\"Computer\"),\n icon: \"desktop\",\n fields: [\n {\n get name() {\n return $l(\"Username\");\n },\n type: FieldType.Username\n },\n {\n get name() {\n return $l(\"Password\");\n },\n type: FieldType.Password\n }\n ]\n },\n {\n toString: () => $l(\"Credit Card\"),\n icon: \"credit\",\n fields: [\n {\n get name() {\n return $l(\"Card Number\");\n },\n type: FieldType.Credit\n },\n {\n get name() {\n return $l(\"Card Owner\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Valid Until\");\n },\n type: FieldType.Month\n },\n {\n get name() {\n return $l(\"CVC\");\n },\n type: FieldType.Pin\n },\n {\n get name() {\n return $l(\"PIN\");\n },\n type: FieldType.Pin\n }\n ]\n },\n {\n toString: () => $l(\"Bank Account\"),\n icon: \"bank\",\n fields: [\n {\n get name() {\n return $l(\"Account Owner\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"IBAN\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"BIC\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Card PIN\");\n },\n type: FieldType.Pin\n }\n ]\n },\n {\n toString: () => $l(\"WIFI Password\"),\n icon: \"wifi\",\n fields: [\n {\n get name() {\n return $l(\"Name\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Password\");\n },\n type: FieldType.Password\n }\n ]\n },\n {\n toString: () => $l(\"Passport\"),\n icon: \"passport\",\n fields: [\n {\n get name() {\n return $l(\"Full Name\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Passport Number\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Country\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Birthdate\");\n },\n type: FieldType.Date\n },\n {\n get name() {\n return $l(\"Birthplace\");\n },\n type: FieldType.Text\n },\n {\n get name() {\n return $l(\"Issued On\");\n },\n type: FieldType.Date\n },\n {\n get name() {\n return $l(\"Expires\");\n },\n type: FieldType.Date\n }\n ]\n },\n {\n toString: () => $l(\"Note\"),\n icon: \"note\",\n fields: [\n {\n get name() {\n return $l(\"Note\");\n },\n type: FieldType.Note\n }\n ]\n },\n {\n toString: () => $l(\"Document\"),\n icon: \"attachment\",\n fields: [],\n attachment: true\n },\n {\n toString: () => $l(\"Custom\"),\n icon: \"custom\",\n fields: []\n }\n];\n","import { sjcl } from \"../vendor/sjcl\";\nimport { Err, ErrorCode } from \"./error\";\nimport { PBKDF2_ITER_MAX } from \"./crypto\";\nimport { PBES2Container } from \"./container\";\n\n/**\n * Interface representing legacy container structure (i.e. encryption format\n * used in Padlock versions 1.x and 2.x)\n */\nexport interface LegacyContainer {\n version?: 1;\n cipher: \"aes\";\n mode: \"ccm\";\n iv: string;\n adata: string;\n ts: 64 | 96 | 128;\n keySize: 256;\n salt: string;\n iter: number;\n ct: string;\n}\n\n/**\n * Validates legacy container structure\n */\nexport function validateLegacyContainer(obj: any): boolean {\n return (\n typeof obj === \"object\" &&\n (obj.version === undefined || obj.version === 1) && // has a valid version\n [128, 192, 256].includes(obj.keySize) &&\n typeof obj.iter == \"number\" && // valid PBKDF2 iteration count\n obj.iter <= PBKDF2_ITER_MAX && // sane pbkdf2 iteration count\n typeof obj.salt == \"string\" &&\n [\"aes\"].includes(obj.cipher) && // valid cipher\n [\"ccm\", \"ocb2\"].includes(obj.mode) && // exiting mode\n typeof obj.iv == \"string\" && // valid initialisation vector\n typeof obj.ct == \"string\" && // valid cipher text\n typeof obj.adata == \"string\" && // valid authorisation data\n [64, 96, 128].includes(obj.ts) // valid authorisation tag length\n );\n}\n\n/**\n * Transforms a legacy container object into an instance of [[PBES2Container]]\n */\nexport function parseLegacyContainer(raw: LegacyContainer): PBES2Container {\n if (!validateLegacyContainer(raw)) {\n throw new Err(ErrorCode.ENCODING_ERROR);\n }\n\n if (raw.version === undefined) {\n // Legacy versions of Padlock had a bug where the base64-encoded\n // `adata` value was not converted to a BitArray before being\n // passed to `sjcl.mode.ccm.encrypt/decrypt` and the raw string was\n // passed instead. This went unnoticed as the functions in question\n // quietly accepted the string and simply treated it as an array.\n // So in order to successfully decrypt legacy containers we have to\n // perfom this conversion first.\n raw.adata = sjcl.codec.base64.fromBits(raw.adata);\n }\n\n return new PBES2Container().fromRaw({\n encryptionParams: {\n algorithm: \"AES-CCM\",\n tagSize: raw.ts,\n keySize: raw.keySize,\n iv: raw.iv,\n additionalData: raw.adata\n },\n keyParams: {\n algorithm: \"PBKDF2\",\n hash: \"SHA-256\",\n keySize: raw.keySize,\n iterations: raw.iter,\n salt: raw.salt\n },\n encryptedData: raw.ct\n });\n}\n","import { Serializable, bytesToBase64, AsDate } from \"./encoding\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { Storable } from \"./storage\";\nimport { randomNumber } from \"./util\";\n\nexport enum MFAPurpose {\n Signup,\n Login,\n Recover,\n GetLegacyData\n}\n\nexport enum MFAType {\n Email\n}\n\n/**\n * Class for storing email verification data. Email verificatiion is used\n * to prove ownership of the email address in question and as a authentication\n * mechanism.\n */\nexport class MFARequest extends Serializable implements Storable {\n /** Time of creation */\n @AsDate()\n created = new Date();\n\n /**\n * MFA verification code. This code is sent to the user via email\n * through [[API.requestMFACode]]\n */\n code: string = \"\";\n\n /**\n * MFA token that can be exchanged for the MFA code via [[API.retrieveMFAToken]]\n */\n token: string = \"\";\n\n /**\n * Number of failed tries\n */\n tries: number = 0;\n\n get id() {\n return `${this.email}_${this.purpose}`;\n }\n\n constructor(\n /** The email to be verified */\n public email: string,\n /** The verification purpose */\n public purpose: MFAPurpose,\n public type: MFAType = MFAType.Email\n ) {\n super();\n }\n\n async init() {\n const len = 6;\n // Create random 6-digit verification code\n this.code = (await randomNumber(0, Math.pow(10, len) - 1)).toString().padStart(len, \"0\");\n // Create random 16-byte verification token\n this.token = bytesToBase64(await getProvider().randomBytes(16));\n this.tries = 0;\n }\n}\n","import { stringToBytes, Serializable, concatBytes, AsSerializable, AsBytes, AsDate, Exclude } from \"./encoding\";\nimport { RSAPrivateKey, RSAPublicKey, AESKey, RSAKeyParams, AESKeyParams, RSASigningParams } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { SharedContainer } from \"./container\";\nimport { Err, ErrorCode } from \"./error\";\nimport { Storable } from \"./storage\";\nimport { Vault, VaultID } from \"./vault\";\nimport { Account, AccountID } from \"./account\";\nimport { Invite, InviteID } from \"./invite\";\nimport { OrgQuota } from \"./quota\";\nimport { BillingInfo } from \"./billing\";\n\n/** Role of a member within an organization, each associated with certain priviliges */\nexport enum OrgRole {\n /**\n * Organization owner. Can manage members, groups and vaults. Owners have\n * access to the secret [[Org.privateKey]] and [[Org.invitesKey]]\n * properties.\n */\n Owner,\n /**\n * Organization admin. Can manage groups and vaults.\n */\n Admin,\n /**\n * Basic organization member. Can read public organization data and read/write\n * certain [[Vault]]s they have been assigned to directly or via [[Group]]s.\n */\n Member,\n /**\n * Suspended members can read public organization data and access [[Vaults]] they\n * have been assigned to, but are excluded from any updates to those vaults.\n * Member information (like public key and email address) of suspended members\n * are considered unverified, and need to be updated and verified via a\n * membership confirmation [[Invite]].\n */\n Suspended\n}\n\n/**\n * Represents an [[Account]]s membership to an [[Org]]\n */\nexport class OrgMember extends Serializable {\n /** id of the corresponding [[Account]] */\n id: AccountID = \"\";\n\n /** name of the corresponding [[Account]] */\n name = \"\";\n\n /** email address of the corresponding [[Account]] */\n email = \"\";\n\n /** public key of the corresponding [[Account]] */\n @AsBytes()\n publicKey!: RSAPublicKey;\n\n /** signature used by other members to verify [[id]], [[email]] and [[publicKey]] */\n @AsBytes()\n signature!: Uint8Array;\n\n /** signature used by the member to verify [[Org.id]] and [[Org.publickey]] of the organization */\n @AsBytes()\n orgSignature!: Uint8Array;\n\n /** vaults assigned to this member */\n vaults: {\n id: VaultID;\n readonly: boolean;\n }[] = [];\n\n /** the members organization role */\n role: OrgRole = OrgRole.Member;\n\n /** time the member was last updated */\n @AsDate()\n updated = new Date(0);\n\n constructor({ id, name, email, publicKey, signature, orgSignature, role, updated }: Partial<OrgMember> = {}) {\n super();\n Object.assign(this, { id, name, email, publicKey, signature, orgSignature, updated });\n this.role = typeof role !== \"undefined\" && role in OrgRole ? role : OrgRole.Member;\n }\n}\n\n/**\n * A group of members, used to manage [[Vault]] access for multiple members at once.\n */\nexport class Group extends Serializable {\n constructor(vals: Partial<Group> = {}) {\n super();\n Object.assign(this, vals);\n }\n\n /** display name */\n name = \"\";\n /** members assigned to this group */\n members: { id: AccountID }[] = [];\n /** [[Vault]]s assigned to this group */\n vaults: {\n id: VaultID;\n readonly: boolean;\n }[] = [];\n}\n\n/** Unique identifier for [[Org]]s */\nexport type OrgID = string;\n\nexport enum OrgType {\n Basic,\n Team,\n Business\n}\n\nexport class OrgSecrets extends Serializable {\n constructor({ invitesKey, privateKey }: Partial<OrgSecrets> = {}) {\n super();\n Object.assign(this, { invitesKey, privateKey });\n }\n\n @AsBytes()\n invitesKey!: Uint8Array;\n\n @AsBytes()\n privateKey!: Uint8Array;\n}\n\n/**\n * Organizations are the central component of Padlocs secure data sharing architecture.\n *\n * All shared [[Vault]]s are provisioned and managed in the context of an organization,\n * while the [[Org]] class itself is responsible for managing, signing and verifying\n * public keys, identities and priviliges for all of it's members.\n *\n * Vaults can be assigned to members direcly or indirectly through [[Group]]s. In both\n * cases, this access can be declared *readonly*.\n *\n * Before being added to an organization, members need to go throug a key exchange\n * procedure designed to allow verification of organization and member details\n * by both parties. See [[Invite]] class for details.\n *\n * The [[privateKey]] and [[invitesKey]] properties are considered secret and are only\n * accessible to members with the [[OrgRole.Owner]] role. To protect this information\n * from unauthorized access, [[Org]] extends the [[SharedContainer]] class, encrypting\n * this data at rest.\n *\n * #### Organization Structure\n * ```\n * ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n * │ │ ╱│ │╲ │ │\n * │ Account │┼─────────○─│ Membership │──┼────────┼│ Organization │\n * │ │ ╲│ │╱ │ │\n * └──────────────┘ └───┬──────┬───┘ └──────────────┘\n * ╲│╱ ╲│╱ ┼\n * ○ ○ ○\n * │ │ ╱│╲\n * │ │ ┌──────────────┐\n * │ │ ╱│ │\n * │ └──────────────○─│ Group │\n * │ ╲│ │\n * ○ └──────────────┘\n * ╱│╲ ╲│╱\n * ┌──────────────┐ ○\n * │ │╲ │\n * │ Shared Vault │─○──────────────────────┘\n * │ │╱\n * └──────────────┘\n * ```\n */\nexport class Org extends SharedContainer implements Storable {\n /** Unique identier */\n id: OrgID = \"\";\n\n type: OrgType = OrgType.Basic;\n\n /** [[Account]] which created this organization */\n owner: AccountID = \"\";\n\n /** Organization name */\n name: string = \"\";\n\n /** Creation date */\n @AsDate()\n created: Date = new Date();\n\n /** Last updated */\n @AsDate()\n updated: Date = new Date();\n\n /** Public key used for verifying member signatures */\n @AsBytes()\n publicKey!: RSAPublicKey;\n\n /**\n * Private key used for signing member details\n *\n * @secret\n * **IMPORTANT**: This property is considered **secret**\n * and should never stored or transmitted in plain text\n */\n @Exclude()\n privateKey!: RSAPrivateKey;\n\n /**\n * AES key used as encryption key for [[Invite]]s\n *\n * @secret\n * **IMPORTANT**: This property is considered **secret**\n * and should never stored or transmitted in plain text\n */\n @Exclude()\n invitesKey!: AESKey;\n\n /**\n * Minimum accepted update time for organization members.\n * Any members with a [[OrgMember.updated]] value lower than\n * this should be considered invalid.\n *\n * In order to prevent an attacker from rolling back this value, all\n * clients should verify that updated organization object always have a\n * [[Org.minMemberUpdated]] value equal to or higher than the previous one.\n */\n @AsDate()\n minMemberUpdated: Date = new Date();\n\n /** Parameters for creating member signatures */\n @AsSerializable(RSASigningParams)\n signingParams = new RSASigningParams();\n\n /** Array of organization members */\n @AsSerializable(OrgMember)\n members: OrgMember[] = [];\n\n /** This organizations [[Group]]s. */\n @AsSerializable(Group)\n groups: Group[] = [];\n\n /** Shared [[Vault]]s owned by this organization */\n vaults: { id: VaultID; name: string; revision?: string }[] = [];\n\n /** Pending [[Invite]]s */\n @AsSerializable(Invite)\n invites: Invite[] = [];\n\n /**\n * Revision id used for ensuring continuity when synchronizing the account\n * object between client and server\n */\n revision: string = \"\";\n\n /**\n * Whether the organization is in \"frozen\" state. If an organization is\n * frozen, groups, members and vaults assoziated with the Organization can\n * not be updated.\n */\n frozen = false;\n\n @AsSerializable(OrgQuota)\n quota: OrgQuota = new OrgQuota();\n\n @AsSerializable(BillingInfo)\n billing?: BillingInfo;\n\n usedStorage: number = 0;\n\n /** Whether the given [[Account]] is an [[OrgRole.Owner]] */\n isOwner(m: { id: AccountID }) {\n const member = this.getMember(m);\n return !!member && member.role <= OrgRole.Owner;\n }\n\n /** Whether the given [[Account]] is an [[OrgRole.Admin]] */\n isAdmin(m: { id: AccountID }) {\n const member = this.getMember(m);\n return !!member && member.role <= OrgRole.Admin;\n }\n\n /** Whether the given [[Account]] is currently suspended */\n isSuspended(m: { id: AccountID }) {\n const member = this.getMember(m);\n return !!member && member.role === OrgRole.Suspended;\n }\n\n /** Get the [[OrgMember]] object for this [[Account]] */\n getMember({ id }: { id: AccountID }) {\n return this.members.find(m => m.id === id);\n }\n\n /** Whether the given [[Account]] is an organization member */\n isMember(acc: { id: AccountID }) {\n return !!this.getMember(acc);\n }\n\n /** Get group with the given `name` */\n getGroup(name: string) {\n return [...this.groups].find(g => g.name === name);\n }\n\n /** Get all members of a given `group` */\n getMembersForGroup(group: Group): OrgMember[] {\n return (\n group.members\n .map(m => this.getMember(m))\n // Filter out undefined members\n .filter(m => !!m) as OrgMember[]\n );\n }\n\n /** Get all [[Group]]s the given [[Account]] is a member of */\n getGroupsForMember({ id }: { id: AccountID }) {\n return this.groups.filter(g => g.members.some(m => m.id === id));\n }\n\n /** Get all groups assigned to a given [[Vault]] */\n getGroupsForVault({ id }: { id: VaultID }): Group[] {\n return this.groups.filter(group => group.vaults.some(v => v.id === id));\n }\n\n /** Get all members directly assigned to a given [[Vault]] */\n getMembersForVault({ id }: { id: VaultID }): OrgMember[] {\n return this.members.filter(member => member.role !== OrgRole.Suspended && member.vaults.some(v => v.id === id));\n }\n\n /** Get all membes that have acess to a given `vault`, either directly or through a [[Group]] */\n getAccessors(vault: Vault) {\n const results = new Set<OrgMember>(this.getMembersForVault(vault));\n\n for (const group of this.getGroupsForVault(vault)) {\n for (const m of group.members) {\n const member = this.getMember(m);\n if (member && member.role !== OrgRole.Suspended) {\n results.add(member);\n }\n }\n }\n\n return [...results];\n }\n\n /** Get all vaults the given member has access to */\n getVaultsForMember(acc: OrgMember | Account) {\n const member = this.getMember(acc);\n\n if (!member) {\n throw \"A member with this id does not exist!\";\n }\n\n const results = new Set<VaultID>(member.vaults.map(v => v.id));\n\n for (const group of this.getGroupsForMember(member)) {\n for (const vault of group.vaults) {\n results.add(vault.id);\n }\n }\n\n return this.vaults.filter(v => results.has(v.id));\n }\n\n /** Check whether the given `account` has read access to a `vault` */\n canRead(vault: { id: VaultID }, account: { id: AccountID }) {\n const member = this.getMember(account);\n\n return (\n member &&\n [member, ...this.getGroupsForMember(member)].some(({ vaults }) => vaults.some(v => v.id === vault.id))\n );\n }\n\n /** Check whether the given `account` has write access to a `vault` */\n canWrite(vault: { id: VaultID }, acc: { id: AccountID }) {\n const member = this.getMember(acc);\n\n return (\n member &&\n member.role !== OrgRole.Suspended &&\n [member, ...this.getGroupsForMember(member)].some(({ vaults }) =>\n vaults.some(v => v.id === vault.id && !v.readonly)\n )\n );\n }\n\n /** Get the invite with the given `id` */\n getInvite(id: InviteID) {\n return this.invites.find(inv => inv.id === id);\n }\n\n /** Remove an invite */\n removeInvite({ id }: Invite) {\n this.invites = this.invites.filter(inv => inv.id !== id);\n }\n\n /**\n * Initializes the organization, generating [[publicKey]], [[privateKey]],\n * and [[invitesKey]] and adding the given `account` as the organization\n * owner.\n */\n async initialize(account: Account) {\n // Update access to keypair\n await this.updateAccessors([account]);\n\n // Generate cryptographic keys\n await this.generateKeys();\n\n // Set minimum date for member update times\n this.minMemberUpdated = new Date();\n\n const orgSignature = await account.signOrg(this);\n const member = await this.sign(\n new OrgMember({\n id: account.id,\n name: account.name,\n email: account.email,\n publicKey: account.publicKey,\n orgSignature,\n role: OrgRole.Owner,\n updated: new Date()\n })\n );\n this.members.push(member);\n }\n\n /**\n * Generates a new [[publicKey]], [[privateKey]] and [[invitesKey]] and\n * encrypts the latter two\n */\n async generateKeys() {\n this.invitesKey = await getProvider().generateKey(new AESKeyParams());\n const { privateKey, publicKey } = await getProvider().generateKey(new RSAKeyParams());\n this.privateKey = privateKey;\n this.publicKey = publicKey;\n await this.setData(new OrgSecrets(this).toBytes());\n }\n\n /**\n * Regenerates all cryptographic keys and updates all member signatures\n */\n async rotateKeys(force = false) {\n if (!force) {\n // Verify members and groups with current public key\n await this.verifyAll();\n }\n\n // Rotate Org key pair\n await this.generateKeys();\n\n // Rotate org encryption key\n delete this.encryptedData;\n await this.updateAccessors(this.members.filter(m => m.role === OrgRole.Owner));\n\n // Re-sign all members\n await Promise.all(this.members.filter(m => m.role !== OrgRole.Suspended).map(m => this.addOrUpdateMember(m)));\n }\n\n /**\n * \"Unlocks\" the organization, granting access to the organizations\n * [[privateKey]] and [[invitesKey]] properties.\n */\n async unlock(account: Account) {\n await super.unlock(account);\n if (this.encryptedData) {\n const secrets = new OrgSecrets().fromBytes(await this.getData());\n Object.assign(this, secrets);\n }\n }\n\n lock() {\n super.lock();\n delete this.privateKey;\n delete this.invitesKey;\n this.invites.forEach(invite => invite.lock);\n }\n\n /**\n * Signs the `member`s public key, id, role and email address so they can be verified later\n */\n async sign(member: OrgMember): Promise<OrgMember> {\n if (!this.privateKey) {\n throw \"Organisation needs to be unlocked first.\";\n }\n\n member.signature = await getProvider().sign(\n this.privateKey,\n concatBytes(\n [\n stringToBytes(member.id),\n stringToBytes(member.email),\n new Uint8Array([member.role]),\n member.publicKey,\n stringToBytes(member.updated.toISOString())\n ],\n 0x00\n ),\n this.signingParams\n );\n return member;\n }\n\n /**\n * Verifies the `member`s public key, id, role and email address.\n * Throws if verification fails.\n */\n async verify(member: OrgMember): Promise<void> {\n if (!member.signature) {\n throw new Err(ErrorCode.VERIFICATION_ERROR, \"No signed public key provided!\");\n }\n\n const verified =\n member.updated >= this.minMemberUpdated &&\n (await getProvider().verify(\n this.publicKey,\n member.signature,\n concatBytes(\n [\n stringToBytes(member.id),\n stringToBytes(member.email),\n new Uint8Array([member.role]),\n member.publicKey,\n stringToBytes(member.updated.toISOString())\n ],\n 0x00\n ),\n this.signingParams\n ));\n\n if (!verified) {\n throw new Err(ErrorCode.VERIFICATION_ERROR, `Failed to verify public key of ${member.name}!`);\n }\n }\n\n /**\n * Verify all provided `members`, throws if verification fails for any of them.\n */\n async verifyAll(members: OrgMember[] = this.members.filter(m => m.role !== OrgRole.Suspended)) {\n // Verify public keys for members and groups\n await Promise.all(members.map(async obj => this.verify(obj)));\n }\n\n /**\n * Adds a member to the organization, or updates the existing member with the same id.\n */\n async addOrUpdateMember({\n id,\n name,\n email,\n publicKey,\n orgSignature,\n role\n }: {\n id: string;\n name: string;\n email: string;\n publicKey: Uint8Array;\n orgSignature: Uint8Array;\n role?: OrgRole;\n }) {\n if (!this.privateKey) {\n throw \"Organisation needs to be unlocked first.\";\n }\n\n role = typeof role !== \"undefined\" ? role : OrgRole.Member;\n\n const existing = this.members.find(m => m.id === id);\n const updated = new Date();\n\n if (existing) {\n Object.assign(existing, { name, email, publicKey, orgSignature, role, updated });\n await this.sign(existing);\n } else {\n this.members.push(\n await this.sign(new OrgMember({ id, name, email, publicKey, orgSignature, role, updated }))\n );\n }\n }\n\n /**\n * Removes a member from the organization\n */\n async removeMember(member: { id: AccountID }) {\n if (!this.privateKey) {\n throw \"Organisation needs to be unlocked first.\";\n }\n\n // Remove member from all groups\n for (const group of this.getGroupsForMember(member)) {\n group.members = group.members.filter(m => m.id !== member.id);\n }\n\n // Remove member\n this.members = this.members.filter(m => m.id !== member.id);\n\n // Verify remaining members (since we're going to re-sign them)\n await this.verifyAll();\n\n // Bump minimum update date\n this.minMemberUpdated = new Date();\n\n // Re-sign all members\n await Promise.all(this.members.filter(m => m.role !== OrgRole.Suspended).map(m => this.addOrUpdateMember(m)));\n }\n\n toString() {\n return this.name;\n }\n}\n","import { numToBytes, bytesToNum } from \"./encoding\";\nimport { HMACParams } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\nimport { base32ToBytes } from \"./encoding\";\n\nexport interface HOTPOpts {\n digits: number;\n hash: \"SHA-1\" | \"SHA-256\";\n}\n\nexport interface TOTPOpts extends HOTPOpts {\n interval: number;\n}\n\nfunction getToken(hmac: Uint8Array, digits: number = 6): string {\n const offset = hmac[hmac.length - 1] & 0xf;\n const bin = new Uint8Array([hmac[offset] & 0x7f, hmac[offset + 1], hmac[offset + 2], hmac[offset + 3]]);\n const num = bytesToNum(bin);\n return (num % 10 ** digits).toString().padStart(digits, \"0\");\n}\n\nexport async function hotp(\n secret: Uint8Array,\n counter: number,\n { hash, digits }: HOTPOpts = { digits: 6, hash: \"SHA-1\" }\n) {\n const hmac = await getProvider().sign(\n secret,\n numToBytes(counter),\n new HMACParams({ hash, keySize: secret.length * 8 })\n );\n return getToken(hmac, digits);\n}\n\nexport async function totp(\n secret: Uint8Array,\n time: number = Date.now(),\n { interval, ...opts }: TOTPOpts = { interval: 30, digits: 6, hash: \"SHA-1\" }\n) {\n const counter = Math.floor(time / interval / 1000);\n return hotp(secret, counter, opts);\n}\n\nexport function parseURL(data: string) {\n const url = new URL(data);\n const params = new URLSearchParams(url.search);\n const secret = params.get(\"secret\");\n\n if (!secret || !base32ToBytes(secret).length) {\n throw \"Invalid secret\";\n }\n\n return { secret };\n}\n","import { Serializable } from \"./encoding\";\n\nexport class AccountQuota extends Serializable {\n items = -1;\n storage = -1;\n orgs = -1;\n\n constructor(vals?: Partial<AccountQuota>) {\n super();\n if (vals) {\n Object.assign(this, vals);\n }\n }\n}\n\nexport class OrgQuota extends Serializable {\n members = -1;\n groups = -1;\n vaults = -1;\n storage = -1;\n\n constructor(vals?: Partial<OrgQuota>) {\n super();\n if (vals) {\n Object.assign(this, vals);\n }\n }\n}\n","/**\n * Options for generating a fingerprint graphic\n */\nexport interface Options {\n /** target height (number of cells) */\n height: number;\n /** target width (number of cells) */\n width: number;\n /** symbols to be mapped against calculated values */\n symbols: string[];\n}\n\n/**\n * Represents a \"fingerprint\" visualization of a certain [[height]] and [[width]],\n * the [[values]] property contains the raw values generated using the [drunken\n * bishop](http://www.dirk-loss.de/sshvis/drunken_bishop.pdf) while [[symbols]]\n * represents the same values by mapping the on the symbols defined in [[Options.symbols]].\n */\nexport interface Fingerprint {\n width: number;\n height: number;\n values: number[][];\n symbols: string[][];\n}\n\ntype Move = \"00\" | \"01\" | \"10\" | \"11\";\ntype Position = [number, number];\n\n/** Default options */\nexport const defaults: Options = {\n height: 9,\n width: 17,\n symbols: [\" \", \".\", \"o\", \"+\", \"=\", \"*\", \"B\", \"O\", \"X\", \"@\", \"%\", \"&\", \"#\", \"/\", \"^\", \"S\", \"E\"]\n};\n\n// Converts a buffer to a binary moves array\nfunction getMoves(bytes: Uint8Array): Move[] {\n const moves = [];\n for (const b of bytes) {\n let str = b.toString(2);\n while (str.length < 8) {\n str = \"0\" + str;\n }\n moves.push(str.slice(6, 8), str.slice(4, 6), str.slice(2, 4), str.slice(0, 2));\n }\n return moves as Move[];\n}\n\n// Gets the steps from a set of moves and the box's height and width\nfunction getSteps(moves: Move[], width: number, height: number): Position[] {\n let pos: Position = [(width - 1) / 2, (height - 1) / 2];\n const steps = [pos];\n\n for (const move of moves) {\n let [x, y] = pos;\n\n switch (move) {\n case \"00\":\n x--, y--;\n break;\n case \"01\":\n x++, y--;\n break;\n case \"10\":\n x--, y++;\n break;\n case \"11\":\n x++, y++;\n break;\n }\n\n pos = [Math.max(0, Math.min(width - 1, x)), Math.max(0, Math.min(height - 1, y))];\n steps.push(pos);\n }\n\n return steps;\n}\n\n// Renders the randomart image from a given fingerprint\nexport function getValues(fingerprint: Uint8Array, opts: Partial<Options> = {}): number[][] {\n const { width, height } = Object.assign({}, defaults, opts);\n\n if (height % 2 !== 1 || width % 2 !== 1) {\n throw \"The height and width options must be odd numbers\";\n }\n\n if (fingerprint.length % 2 !== 0) {\n throw \"The fingerprint length must be an even number\";\n }\n\n const moves = getMoves(fingerprint);\n const steps = getSteps(moves, width, height);\n const grid: number[][] = [];\n for (let i = 0; i < height; i++) {\n grid.push(new Array(width).fill(0));\n }\n\n for (const [x, y] of steps) {\n grid[y][x]++;\n }\n\n const [x0, y0] = steps[0];\n const [x1, y1] = steps[steps.length - 1];\n grid[y0][x0] = 15;\n grid[y1][x1] = 16;\n return grid;\n}\n\n/**\n * Generates a visualisation of a \"fingerprint\" similar to the ascii-based\n * visualization method used by OpenSSH. Generates a \"heat map\" of values on a\n * grid of a given width and height using the \"drunken bishop\" algorithm\n * desribed in [this paper](http://www.dirk-loss.de/sshvis/drunken_bishop.pdf).\n */\nexport function randomArt(fingerprint: Uint8Array, opts: Partial<Options> = {}): Fingerprint {\n const options = Object.assign({}, defaults, opts);\n const vals = getValues(fingerprint, options);\n const symbols = opts.symbols || defaults.symbols;\n return {\n width: options.width,\n height: options.height,\n values: vals,\n symbols: vals.map(line => line.map(val => symbols[val]))\n };\n}\n","import { Request, Response, RequestAuthentication } from \"./transport\";\nimport { marshal, Serializable, stringToBytes, AsDate, AsSerializable, AsBytes } from \"./encoding\";\nimport { HMACParams } from \"./crypto\";\nimport { Storable } from \"./storage\";\nimport { DeviceInfo } from \"./platform\";\nimport { AccountID } from \"./account\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\n\n/** Unique identifier for [[Session]]s */\nexport type SessionID = string;\n\n/** Public session info (used for display purposes) */\nexport class SessionInfo extends Serializable {\n id: string = \"\";\n account: AccountID = \"\";\n\n @AsDate()\n created: Date = new Date(0);\n\n @AsDate()\n updated: Date = new Date(0);\n\n @AsDate()\n lastUsed: Date = new Date(0);\n\n @AsDate()\n expires?: Date;\n\n @AsSerializable(DeviceInfo)\n device?: DeviceInfo;\n}\n\n/**\n * A session represents a trusted connection between a [[Server]] and [[Client]]\n * which can be used to authenticate requests, allowing both parties to verify\n * the other parties identity and check the request/response bodies integrity.\n * The authentication flow usually works as follows:\n *\n * ```ts\n * // CLIENT\n *\n * const request = createRequest();\n * await this.session.authenticate(request);\n *\n * // SERVER\n *\n * if (!(await context.session.verify(request))) {\n * throw \"Failed to verify request!\";\n * }\n *\n * const response = processRequest(request);\n * await context.session.authenticate(response);\n *\n * // CLIENT\n *\n * if (!(await context.session.verify(response))) {\n * throw \"Failed to verify response!\";\n * }\n *\n * processResponse(response);\n * ```\n *\n * ```\n * ┌──────────┐ ┌──────────┐\n * │Client (C)│ │Server (S)│\n * └─────┬────┘ └────┬─────┘\n * ┌──────────────────────────┐ │ │\n * │req = [request body] │ │ req, sid, │\n * │t1 = [timestamp] │ │ t1, sig1 │ ┌──────────────────────────┐\n * │sig1 = HMAC(K, sid|t1|req)│ │──────────────▶│ │=> verify sig1 │\n * └──────────────────────────┘ │ │ │res = [response body] │\n * │ │ │t2 = [timestamp] │\n * ┌──────────────┐ │ res, t2, sig2 │ │sig2 = HMAC(K, sid|t2|res)│\n * │=> verify sig2│ │◁ ─ ─ ─ ─ ─ ─ ─│ └──────────────────────────┘\n * └──────────────┘ │ │\n * │ │\n * ▼ ▼\n * ```\n */\nexport class Session extends Serializable implements Storable {\n /** Unique identifier */\n id: string = \"\";\n\n /** Associated [[Account]] */\n account: AccountID = \"\";\n\n /** Time of creation */\n @AsDate()\n created = new Date(0);\n\n /** Time of last update */\n @AsDate()\n updated = new Date(0);\n\n /** When this session was last used to authenticate a request */\n @AsDate()\n lastUsed = new Date(0);\n\n /** Expiration time */\n @AsDate()\n expires?: Date;\n\n /** Session key used to sign/verify requests and responses */\n @AsBytes()\n key?: Uint8Array;\n\n /** Info about the device the client is running on */\n @AsSerializable(DeviceInfo)\n device?: DeviceInfo;\n\n /**\n * Public session info\n */\n get info(): SessionInfo {\n return new SessionInfo().fromRaw({\n id: this.id,\n account: this.account,\n created: this.created,\n updated: this.updated,\n lastUsed: this.lastUsed,\n expires: this.expires,\n device: this.device && this.device.toRaw()\n });\n }\n\n /**\n * Authenticates a [[Request]] or [[Response]] by signing the session id,\n * timestamp and request/response body using the session [[key]].\n */\n async authenticate(r: Request | Response): Promise<void> {\n const data = (<Request>r).params || (<Response>r).result;\n r.auth = await this._sign(data);\n }\n\n /**\n * Verifies session id, timestamp and request/response body of a given\n * [[Request]] or [[Response]] using the session [[key]].\n */\n async verify(r: Request | Response): Promise<boolean> {\n if (!r.auth) {\n return false;\n }\n\n const data = (<Request>r).params || (<Response>r).result;\n\n return this._verify(r.auth, data);\n }\n\n private async _sign(data: any): Promise<RequestAuthentication> {\n const time = new Date();\n const session = this.id;\n const message = `${session}_${time.toISOString()}_${marshal(data)}`;\n const signature = await getProvider().sign(this.key!, stringToBytes(message), new HMACParams());\n return new RequestAuthentication({\n session,\n time,\n signature\n });\n }\n\n private async _verify(auth: RequestAuthentication, data: any): Promise<boolean> {\n const { signature, time } = auth;\n const message = `${this.id}_${time.toISOString()}_${marshal(data)}`;\n return await getProvider().verify(this.key!, signature, stringToBytes(message), new HMACParams());\n }\n}\n","/**\n * This module implements version 6a of the [Secure Remote\n * Password](http://srp.stanford.edu/design.html) protocol.\n *\n * The [[Client]] and [[Server]] classes are the high-level interfaces to be\n * used on the client and server side, respectively. The SRP key negotiation\n * flow usually happens as follows:\n *\n * #### First signup\n *\n * ```ts\n * // CLIENT\n *\n * const u = [username/email];\n * const p = [user password];\n * const i = [iteration count];\n * const s = [random salt];\n *\n * const x = PBKDF2(p, s, i);\n *\n * const client = new Client();\n * await client.initialize(x);\n * const v = client.v;\n *\n * => Send u, v, s, i to server\n * ```\n *\n * #### Login / create session\n *\n * ```ts\n * // CLIENT => request login for `u`\n *\n * // SERVER\n *\n * const { v, s, i } = getAuthInfo(u);\n *\n * const server = new Server();\n * await server.initialize(v);\n * const B = server.B;\n *\n * // => Send s, i, B to client\n *\n * // CLIENT\n *\n * const x = PBKDF2(p, s, i);\n *\n * const client = new Client();\n * await client.initialize(x);\n * await client.setB(B);\n *\n * const A = client.A;\n * const M1 = client.M1;\n *\n * // Common session key\n * const K = client.K;\n *\n * // => Send A, M1 to server\n *\n * // SERVER\n *\n * await server.setA(A);\n * if (server.M1 !== M1) {\n * throw \"Invalid credentials!\";\n * }\n *\n * // Common session key\n * const K = server.K;\n *\n * // => Success!\n *\n * // [OPTIONAL] (This step is usually not required since even without\n * // verifying M2, the client will notice something is wrong as soon as they try\n * // to verify an authenticated response from the server.)\n *\n * M2 = server.M2;\n * // => Send M2 to client\n *\n * // CLIENT\n * if (client.M2 !== M2) {\n * throw \"Something is fishy!\";\n * }\n * ```\n *\n * #### Overview:\n *\n * ```\n * ┌──────────┐ ┌──────────┐\n * │Client (C)│ │Server (S)│\n * └─────┬────┘ └────┬─────┘\n * ┌───────────────────┐ │ │\n * │u = [email address]│ │ u, A │\n * │a, A = [random*] │ │──────────────▶│\n * └───────────────────┘ │ │ ┌────────────────┐\n * │ │ │b, B = [random*]│\n * ┌───────────────────────┐ │ s, i, B │ └────────────────┘\n * │p = [master password] │ │◁ ─ ─ ─ ─ ─ ─ ─│\n * │x = PBKDF2(p,s,i) │ │ │\n * │K = K_client(x, a, B)* │ │ │\n * │M = M(A, B, K)* │ │ M │ ┌───────────────────────┐\n * └───────────────────────┘ │──────────────▶│ │K' = K_server(v, b, A)*│\n * │ │ │M' = M(A, B, K') │\n * │ │ │=> verify M == M' │\n * ┌───────────────┐ │ sid │ │S = [session id] │\n * │=> store sid, K│ │◀ ─ ─ ─ ─ ─ ─ ─│ │=> store sid, K │\n * └───────────────┘ │ │ └───────────────────────┘\n * │ │\n * ▼ ▼\n * ```\n */\nimport { BigInteger } from \"../vendor/jsbn\";\nimport { bytesToHex, hexToBytes, concatBytes } from \"./encoding\";\nimport { HashParams } from \"./crypto\";\nimport { getCryptoProvider as getProvider } from \"./platform\";\n\nasync function digest(hash: \"SHA-1\" | \"SHA-256\" = \"SHA-256\", ...input: Uint8Array[]): Promise<Uint8Array> {\n return getProvider().hash(concatBytes(input), new HashParams({ algorithm: hash }));\n}\n\nfunction i2b(i: BigInteger): Uint8Array {\n let hex = i.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n return hexToBytes(hex);\n}\n\nfunction b2i(b: Uint8Array): BigInteger {\n return new BigInteger(bytesToHex(b), 16);\n}\n\n/**\n * High-level interface for the client side\n */\nexport class Client {\n /** Verifier value, available after calling [[initialize]] */\n get v() {\n return this._v ? i2b(this._v) : null;\n }\n\n /** Client-side random initializer, available after calling [[initialize]] */\n get A() {\n return this._A ? i2b(this._A) : null;\n }\n\n /** Common session key, available after calling [[initialize]] and [[setB]] */\n get K() {\n return this._K ? i2b(this._K) : null;\n }\n\n /**\n * First value used to verify a successful key exchange, available after\n * calling [[initialize]] and [[setB]]\n */\n get M1() {\n return this._M1 ? i2b(this._M1) : null;\n }\n\n /**\n * Second value used to verify a successful key exchange, available after\n * calling [[initialize]] and [[setB]]\n */\n get M2() {\n return this._M2 ? i2b(this._M2) : null;\n }\n\n private _srp: Core;\n private _x?: BigInteger;\n private _v?: BigInteger;\n private _a?: BigInteger;\n private _A?: BigInteger;\n private _B?: BigInteger;\n private _K?: BigInteger;\n private _M1?: BigInteger;\n private _M2?: BigInteger;\n\n constructor(length: SRPGroupLength = 4096) {\n this._srp = new Core(length);\n }\n\n /** Initialize client using the given secret `x`, generating [[v]] and [[A]] */\n async initialize(x: Uint8Array) {\n this._x = b2i(x);\n this._v = this._srp.v(this._x);\n this._a = b2i(await getProvider().randomBytes(32));\n this._A = this._srp.A(this._a);\n }\n\n /**\n * Apply [[Server.B]] value, calculating [[K]], [[M1]] and [[M2]].\n * Should only be called after [[initialize]] has been called.\n */\n async setB(B: Uint8Array) {\n if (!this._x || !this._a || !this._A) {\n throw \"not initialized\";\n }\n this._B = b2i(B);\n this._K = await this._getKey();\n this._M1 = await this._srp.M1(this._A, this._B, this._K);\n this._M2 = await this._srp.M2(this._A, this._M1, this._K);\n }\n\n private async _getKey(): Promise<BigInteger> {\n if (!this._x || !this._a || !this._A || !this._B) {\n throw \"not initialized\";\n }\n\n if (this._srp.isZeroWhenModN(this._B)) {\n throw \"Invalid B value\";\n }\n\n const u = await this._srp.u(this._A, this._B);\n const S = await this._srp.clientS(this._B, this._x, this._a, u);\n const K = await this._srp.K(S);\n return K;\n }\n}\n\nexport class Server {\n /** Server-side random initializer, available after calling [[initialize]] */\n get B() {\n return this._B ? i2b(this._B) : null;\n }\n\n /** Common session key, available after calling [[initialize]] and [[setA]] */\n get K() {\n return this._K ? i2b(this._K) : null;\n }\n\n /**\n * First value used to verify a successful key exchange, available after\n * calling [[initialize]] and [[setA]]\n */\n get M1() {\n return this._M1 ? i2b(this._M1) : null;\n }\n\n /**\n * Second value used to verify a successful key exchange, available after\n * calling [[initialize]] and [[setA]]\n */\n get M2() {\n return this._M2 ? i2b(this._M2) : null;\n }\n\n private _srp: Core;\n private _v?: BigInteger;\n private _b?: BigInteger;\n private _B?: BigInteger;\n private _A?: BigInteger;\n private _K?: BigInteger;\n private _M1?: BigInteger;\n private _M2?: BigInteger;\n\n constructor(length: SRPGroupLength = 4096) {\n this._srp = new Core(length);\n }\n\n /** Initialize server using the given verfifier `v`. Generates [[B]]. */\n async initialize(v: Uint8Array) {\n this._v = b2i(v);\n this._b = b2i(await getProvider().randomBytes(32));\n this._B = await this._srp.B(this._v, this._b);\n }\n\n /**\n * Apply [[Client.A]] value, calculating [[K]], [[M1]] and [[M2]].\n * Should only be called after [[initialize]] has been called.\n */\n async setA(A: Uint8Array) {\n if (!this._v || !this._b || !this._B) {\n throw \"not initialized\";\n }\n this._A = b2i(A);\n this._K = await this._getKey();\n this._M1 = await this._srp.M1(this._A, this._B, this._K);\n this._M2 = await this._srp.M2(this._A, this._M1, this._K);\n }\n\n private async _getKey() {\n if (!this._v || !this._b || !this._B || !this._A) {\n throw \"not initialized\";\n }\n\n if (this._srp.isZeroWhenModN(this._A)) {\n throw \"Invalid A value\";\n }\n\n const u = await this._srp.u(this._A, this._B);\n const S = this._srp.serverS(this._A, this._v, u, this._b);\n const K = await this._srp.K(S);\n return K;\n }\n}\n\n/**\n * Implements various formulas defined in the [SRP\n * specification](http://srp.stanford.edu/design.html), used by [[Client]] and\n * [[Server]] classes.\n */\nexport class Core {\n private _params: SRPParams;\n\n constructor(length: SRPGroupLength) {\n this._params = getParams(length);\n if (!this._params) {\n throw \"Invalid group length!\";\n }\n }\n\n /** Creates a hash of all arguments, concatenated */\n async H(...inp: BigInteger[]): Promise<BigInteger> {\n const hash = await digest(this._params.hash, ...inp.map(i => i2b(i)));\n return b2i(hash);\n }\n\n /**\n * Calculates verifier `v` from secret `x` according to the formula\n * ```\n * v = g ^ x % N\n * ```\n */\n v(x: BigInteger): BigInteger {\n return this._params.g.modPow(x, this._params.N);\n }\n\n /** Calculates `A` from random value `a`, according to the formula\n * ```\n * A = g ^ a % N\n * ```\n */\n A(a: BigInteger) {\n return this._params.g.modPow(a, this._params.N);\n }\n\n /**\n * Calculates `B` from `v` and the random value `b` according to the formula\n * ```\n * B = (k * v + g ^ b % N) % N\n * ```\n */\n async B(v: BigInteger, b: BigInteger): Promise<BigInteger> {\n const k = await this.k();\n return k\n .multiply(v)\n .add(this._params.g.modPow(b, this._params.N))\n .mod(this._params.N);\n }\n\n /**\n * Calculates `u` from `A` and `B` according to the formula\n * ```\n * u = H(A | B)\n * ```\n */\n async u(A: BigInteger, B: BigInteger): Promise<BigInteger> {\n return await this.H(A, B);\n }\n\n /**\n * Calculates `S` from `B`, `x`, `a` and `u` according to the formula\n * ```\n * S = (B - k * (g ^ x % N)) ^ (a + u * x) % N\n * ```\n */\n async clientS(B: BigInteger, x: BigInteger, a: BigInteger, u: BigInteger): Promise<BigInteger> {\n const k = await this.k();\n return B.subtract(k.multiply(this._params.g.modPow(x, this._params.N))).modPow(\n a.add(u.multiply(x)),\n this._params.N\n );\n }\n\n /**\n * Calculates `S` from `A`, `v`, `b` and `u` according to the formula\n * ```\n * S = (A * v ^ u % N) ^ b % N\n * ```\n */\n serverS(A: BigInteger, v: BigInteger, u: BigInteger, b: BigInteger) {\n return A.multiply(v.modPow(u, this._params.N)).modPow(b, this._params.N);\n }\n\n /**\n * Calculates the multiplier `k = H(N | g)` according to the SRP-6a specification\n */\n async k(): Promise<BigInteger> {\n return this.H(this._params.N, this._params.g);\n }\n\n /**\n * Calculates the shared key `K = H(S)`\n */\n async K(S: BigInteger): Promise<BigInteger> {\n return this.H(S);\n }\n\n /**\n * Calculates the first verification value `M1 = H(A | B | K)`\n */\n async M1(A: BigInteger, B: BigInteger, K: BigInteger): Promise<BigInteger> {\n return await this.H(A, B, K);\n }\n\n /**\n * Calculates the second verification value `M2 = H(A | M1 | K)`\n */\n async M2(A: BigInteger, M1: BigInteger, K: BigInteger): Promise<BigInteger> {\n return await this.H(A, M1, K);\n }\n\n /**\n * This is used to ensure that values are not zero when mod N.\n */\n isZeroWhenModN(n: BigInteger) {\n return n.mod(this._params.N).equals(BigInteger.ZERO);\n }\n}\n\ntype SRPGroupLength = 3072 | 4096 | 6144 | 8192;\n\ninterface SRPParams {\n length: SRPGroupLength;\n hash: \"SHA-1\" | \"SHA-256\";\n g: BigInteger;\n N: BigInteger;\n}\n\nfunction h2i(hex: string): BigInteger {\n return new BigInteger(hex.replace(\" \", \"\"), 16);\n}\n\nfunction getParams(length: SRPGroupLength): SRPParams {\n switch (length) {\n case 3072:\n return {\n length: 3072,\n hash: \"SHA-256\",\n g: h2i(\"05\"),\n N: h2i(\n \"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF\"\n )\n };\n case 4096:\n return {\n length: 4096,\n hash: \"SHA-256\",\n g: h2i(\"05\"),\n N: h2i(\n \"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA 2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6 287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED 1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34063199 FFFFFFFF FFFFFFFF\"\n )\n };\n case 6144:\n return {\n length: 6144,\n hash: \"SHA-256\",\n g: h2i(\"05\"),\n N: h2i(\n \"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA 2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6 287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED 1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492 36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831 179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF 5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6 D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3 23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328 06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE 12BF2D5B 0B7474D6 E694F91E 6DCC4024 FFFFFFFF FFFFFFFF\"\n )\n };\n case 8192:\n return {\n length: 8192,\n hash: \"SHA-256\",\n g: h2i(\"13\"),\n N: h2i(\n \"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D 670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA 2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6 287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED 1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492 36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831 179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF 5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6 D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3 23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328 06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE 12BF2D5B 0B7474D6 E694F91E 6DBE1159 74A3926F 12FEE5E4 38777CB6 A932DF8C D8BEC4D0 73B931BA 3BC832B6 8D9DD300 741FA7BF 8AFC47ED 2576F693 6BA42466 3AAB639C 5AE4F568 3423B474 2BF1C978 238F16CB E39D652D E3FDB8BE FC848AD9 22222E04 A4037C07 13EB57A8 1A23F0C7 3473FC64 6CEA306B 4BCBC886 2F8385DD FA9D4B7F A2C087E8 79683303 ED5BDD3A 062B3CF5 B3A278A6 6D2A13F8 3F44F82D DF310EE0 74AB6A36 4597E899 A0255DC1 64F31CC5 0846851D F9AB4819 5DED7EA1 B1D510BD 7EE74D73 FAF36BC3 1ECFA268 359046F4 EB879F92 4009438B 481C6CD7 889A002E D5EE382B C9190DA6 FC026E47 9558E447 5677E9AA 9E3050E2 765694DF C81F56E8 80B96E71 60C980DD 98EDD3DF FFFFFFFF FFFFFFFF\"\n )\n };\n\n default:\n throw \"invalid group length\";\n }\n}\n","import { Serializable, AsSerializable, AsDate, AsBytes } from \"./encoding\";\nimport { Server } from \"./server\";\nimport { DeviceInfo } from \"./platform\";\nimport { EventEmitter } from \"./event-target\";\nimport { wait } from \"./util\";\n\n/** Authentication data */\nexport class RequestAuthentication extends Serializable {\n /** The id of the [[Session]] used for authentication */\n session: string = \"\";\n /** A time stamp of the request/response time */\n\n @AsDate()\n time!: Date;\n\n /** The signature used to verify the authentiation */\n @AsBytes()\n signature!: Uint8Array;\n\n constructor(vals: Partial<RequestAuthentication> = {}) {\n super();\n Object.assign(this, vals);\n }\n}\n\n/** RPC request object */\nexport class Request extends Serializable {\n /** Name of the method call */\n method: string = \"\";\n /** Arguments for the method */\n\n params?: any[] = undefined;\n\n /** Data used to authenticate the request */\n @AsSerializable(RequestAuthentication)\n auth?: RequestAuthentication;\n\n /** Info about the device the request is coming from */\n @AsSerializable(DeviceInfo)\n device?: DeviceInfo;\n}\n\n/** RPC response object */\nexport class Response extends Serializable {\n /** The result of the RPC call */\n result: any = null;\n\n /** Error info, if an error occurred while processing the request */\n error?: Error = undefined;\n\n /** Data used to authenticate the response */\n @AsSerializable(RequestAuthentication)\n auth?: RequestAuthentication;\n}\n\n/** Error info */\nexport interface Error {\n /** Error code */\n code: number | string;\n /** Error message */\n message: string;\n}\n\n/** Generic interface for sending [[Request]]s */\nexport interface Sender {\n send(req: Request, progress?: RequestProgress): Promise<Response>;\n}\n\n/** Generic interface for receiving [[Request]]s and processing them into a [[Response]] */\nexport interface Receiver {\n listen(handler: (req: Request) => Promise<Response>): void;\n}\n\n/**\n * Stub implementation of the [[Sender]] interface, passing requests directly\n * into a [[Server]] instance. this is useful for testing, where client and\n * server instances are managed by the same process\n */\nexport class DirectSender implements Sender {\n constructor(private server: Server) {}\n\n async send(req: Request) {\n await wait(10);\n return this.server.handle(req);\n }\n}\n\ninterface Progress {\n loaded: number;\n total: number;\n}\n\nexport class RequestProgress extends EventEmitter {\n completed: Promise<void> = new Promise((resolve, reject) => {\n this._resolveCompleted = resolve;\n this._rejectCompleted = reject;\n });\n\n get uploadProgress() {\n return this._uploadProgress;\n }\n\n set uploadProgress(progress: Progress) {\n this._uploadProgress = progress;\n this.dispatch(\"upload-progress\", progress);\n this.dispatch(\"progress\", this.progress);\n }\n\n get downloadProgress() {\n return this._downloadProgress;\n }\n\n set downloadProgress(progress: Progress) {\n this._downloadProgress = progress;\n this.dispatch(\"download-progress\", progress);\n this.dispatch(\"progress\", this.progress);\n }\n\n get progress() {\n return {\n loaded: this.uploadProgress.loaded + this.downloadProgress.loaded,\n total: this.uploadProgress.total + this.downloadProgress.total\n };\n }\n\n set error(error: Error | undefined) {\n this._error = error;\n if (error) {\n this.dispatch(\"error\", { error });\n this.uploadProgress = this.downloadProgress = { loaded: 0, total: 0 };\n this._rejectCompleted(error);\n }\n }\n\n get error() {\n return this._error;\n }\n\n private _uploadProgress: Progress = { loaded: 0, total: 0 };\n private _downloadProgress: Progress = { loaded: 0, total: 0 };\n\n private _error?: Error;\n\n private _resolveCompleted!: () => void;\n private _rejectCompleted!: (err: Error) => void;\n\n complete() {\n this._resolveCompleted();\n }\n}\n","import { getCryptoProvider as getProvider } from \"./platform\";\nimport { bytesToHex } from \"./encoding\";\n\n/** Generates a random UUID v4 */\nexport async function uuid(): Promise<string> {\n const bytes = await getProvider().randomBytes(16);\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n // Canonical representation\n // XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n return [\n bytesToHex(bytes.slice(0, 4)),\n \"-\",\n bytesToHex(bytes.slice(4, 6)),\n \"-\",\n bytesToHex(bytes.slice(6, 8)),\n \"-\",\n bytesToHex(bytes.slice(8, 10)),\n \"-\",\n bytesToHex(bytes.slice(10, 16))\n ].join(\"\");\n}\n\n/** Caracters, by category */\nexport const chars = {\n numbers: \"0123456789\",\n lower: \"abcdefghijklmnopqrstuvwxyz\",\n upper: \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n other: \"/+()%\\\"=&-!:'*#?;,_.@`~$^[{]}\\\\|<>\"\n};\n\n/** Predefined char sets for generating randing strings */\nexport const charSets = {\n full: chars.numbers + chars.upper + chars.lower + chars.other,\n alphanum: chars.numbers + chars.upper + chars.lower,\n alpha: chars.lower + chars.upper,\n num: chars.numbers,\n hexa: chars.numbers + \"abcdef\"\n};\n\n/** Creates a random string with a given `length`, with characters chosen from a given `charSet` */\nexport async function randomString(length = 32, charSet = charSets.full) {\n const provider = getProvider();\n let str = \"\";\n while (str.length < length) {\n const [rnd] = await provider.randomBytes(1);\n // Prevent modulo bias by rejecting values larger than the highest muliple of `charSet.length`\n if (rnd > 255 - (256 % charSet.length)) {\n continue;\n }\n str += charSet[rnd % charSet.length];\n }\n return str;\n}\n\n/**\n * Generates a random number between `min` and `max`.\n * Taken from https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n */\nexport async function randomNumber(min: number = 0, max: number = 10): Promise<number> {\n if (max < min) {\n throw \"Upper bound must be greater than or equal to lower bound!\";\n }\n\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\n // Fill a byte array with N random numbers\n const byteArray = await getProvider().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 // tslint:disable-next-line\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n}\n\n/**\n * \"Debounces\" a function, making sure it is only called once within a certain\n * time window\n */\nexport function debounce(fn: (...args: any[]) => any, delay: number) {\n let timeout: number;\n\n return function(...args: any[]) {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => fn(...args), delay);\n };\n}\n\n// export function throttle(fn: (...args: any[]) => any, delay: number) {\n// let throttling = false;\n// let lastCall = args: any[];\n//\n// return function(...args: any[]) {\n// if (!throttling) {\n// fn(...args);\n// throttling = true;\n// setTimeout(() => (throttling = false), delay);\n// }\n// };\n// }\n\nexport function throttle(fn: (...args: any[]) => any, delay: number) {\n let lastCall: any;\n let lastRan: number;\n return (...args: any[]) => {\n if (!lastRan) {\n fn(...args);\n lastRan = Date.now();\n } else {\n clearTimeout(lastCall);\n lastCall = setTimeout(() => {\n if (Date.now() - lastRan >= delay) {\n fn(...args);\n lastRan = Date.now();\n }\n }, delay - (Date.now() - lastRan));\n }\n };\n}\n\n/** Returns a promise that resolves after a given `delay`. */\nexport function wait(delay: number): Promise<void> {\n return new Promise<void>(resolve => setTimeout(resolve, delay));\n}\n\n/**\n * Resolves a given locale string to the approprivate available language\n */\nexport function resolveLanguage(locale: string, supportedLanguages: { [lang: string]: any }): string {\n const localeParts = locale.toLowerCase().split(\"-\");\n\n while (localeParts.length) {\n const l = localeParts.join(\"-\");\n if (supportedLanguages[l]) {\n return l;\n }\n\n localeParts.pop();\n }\n\n return Object.keys(supportedLanguages)[0];\n}\n\n/**\n * Applies a number of class `mixins` to a `baseClass`\n */\nexport function applyMixins(baseClass: any, ...mixins: ((cls: any) => any)[]): any {\n return mixins.reduce((cls, mixin) => mixin(cls), baseClass);\n}\n\n/**\n * Escapes all regex special characters within a given string.\n */\nexport function escapeRegex(str: string) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { SharedContainer } from \"./container\";\nimport { Storable } from \"./storage\";\nimport { VaultItemCollection } from \"./collection\";\nimport { Account, AccountID } from \"./account\";\nimport { OrgID } from \"./org\";\nimport { Exclude, AsDate } from \"./encoding\";\nimport { Err } from \"./error\";\n\n/** Unique identifier for [[Vault]] objects */\nexport type VaultID = string;\n\n/**\n * Container for securely storing a collection of [[VaultItem]]s. Vaults can be owned by a single\n * user (\"private\" vaults) or shared between multiple users (\"shared\" vaults). Shared vaults are\n * provisioned and managed through [[Org]]s.\n */\nexport class Vault extends SharedContainer implements Storable {\n /** unique identifier */\n id: VaultID = \"\";\n\n /** The [[Org]] this vault belongs to (if a shared vault) */\n org?: { id: OrgID; name: string; revision?: string } = undefined;\n\n /** Vault name */\n name = \"\";\n\n /** The vault owner (the [[Account]] that created this vault) */\n owner: AccountID = \"\";\n\n /** Time of creation */\n @AsDate()\n created = new Date(0);\n\n /** Time of last update */\n @AsDate()\n updated = new Date(0);\n\n /**\n * Revision id used for ensuring continuity when synchronizing the vault\n * object between client and server\n */\n revision: string = \"\";\n\n /**\n * A collection [[VaultItem]]s representing the senstive data store in this vault\n *\n * @secret\n *\n * **IMPORTANT**: This property is considered **secret**\n * and should never stored or transmitted in plain text\n */\n @Exclude()\n items = new VaultItemCollection();\n\n @Exclude()\n error?: Err;\n\n /**\n * Unlocks the vault with the given `account`, decrypting the data stored in the vault\n * and populating the [[items]] property. For this to be successful, the `account` object\n * needs to be unlocked and the account must have access to this vault.\n */\n async unlock(account: Account) {\n if (!this.accessors.length) {\n await this.updateAccessors([account]);\n await this.commit();\n } else {\n await super.unlock(account);\n this.items.fromBytes(await this.getData());\n }\n }\n\n async lock() {\n await super.lock();\n this.items = new VaultItemCollection();\n }\n\n /**\n * Commit changes to `items` by reencrypting the data.\n */\n async commit() {\n await this.setData(this.items.toBytes());\n }\n\n /**\n * Merges in changes from another `vault`. This requires both vaults to be unlocked.\n *\n * @returns `true` if there have been any \"forward changes\", i.e. if there\n * have been any changes in this vault that may need to be applied to other\n * instances. Specifically, this can be used during synchronization with a [[Server]]\n * to determine whether an update needs to be pushed back.\n */\n merge(vault: Vault) {\n this.items.merge(vault.items);\n this.name = vault.name;\n this.revision = vault.revision;\n this.org = vault.org;\n this.updated = vault.updated;\n }\n\n toString() {\n return this.org ? `${this.org.name} / ${this.name}` : this.name;\n }\n\n clone() {\n const clone = super.clone();\n clone.items = this.items.clone();\n return clone;\n }\n}\n","export const countries = [\n { code: \"AF\", name: \"Afghanistan\" },\n { code: \"AX\", name: \"Åland Islands\" },\n { code: \"AL\", name: \"Albania\" },\n { code: \"DZ\", name: \"Algeria\" },\n { code: \"AD\", name: \"Andorra\" },\n { code: \"AO\", name: \"Angola\" },\n { code: \"AI\", name: \"Anguilla\" },\n { code: \"AQ\", name: \"Antarctica\" },\n { code: \"AG\", name: \"Antigua &amp; Barbuda\" },\n { code: \"AR\", name: \"Argentina\" },\n { code: \"AM\", name: \"Armenia\" },\n { code: \"AW\", name: \"Aruba\" },\n { code: \"AC\", name: \"Ascension Island\" },\n { code: \"AU\", name: \"Australia\" },\n { code: \"AT\", name: \"Austria\" },\n { code: \"AZ\", name: \"Azerbaijan\" },\n { code: \"BS\", name: \"Bahamas\" },\n { code: \"BH\", name: \"Bahrain\" },\n { code: \"BD\", name: \"Bangladesh\" },\n { code: \"BB\", name: \"Barbados\" },\n { code: \"BY\", name: \"Belarus\" },\n { code: \"BE\", name: \"Belgium\" },\n { code: \"BZ\", name: \"Belize\" },\n { code: \"BJ\", name: \"Benin\" },\n { code: \"BM\", name: \"Bermuda\" },\n { code: \"BT\", name: \"Bhutan\" },\n { code: \"BO\", name: \"Bolivia\" },\n { code: \"BA\", name: \"Bosnia &amp; Herzegovina\" },\n { code: \"BW\", name: \"Botswana\" },\n { code: \"BV\", name: \"Bouvet Island\" },\n { code: \"BR\", name: \"Brazil\" },\n { code: \"IO\", name: \"British Indian Ocean Territory\" },\n { code: \"VG\", name: \"British Virgin Islands\" },\n { code: \"BN\", name: \"Brunei\" },\n { code: \"BG\", name: \"Bulgaria\" },\n { code: \"BF\", name: \"Burkina Faso\" },\n { code: \"BI\", name: \"Burundi\" },\n { code: \"KH\", name: \"Cambodia\" },\n { code: \"CM\", name: \"Cameroon\" },\n { code: \"CA\", name: \"Canada\" },\n { code: \"CV\", name: \"Cape Verde\" },\n { code: \"BQ\", name: \"Caribbean Netherlands\" },\n { code: \"KY\", name: \"Cayman Islands\" },\n { code: \"CF\", name: \"Central African Republic\" },\n { code: \"TD\", name: \"Chad\" },\n { code: \"CL\", name: \"Chile\" },\n { code: \"CN\", name: \"China\" },\n { code: \"CO\", name: \"Colombia\" },\n { code: \"KM\", name: \"Comoros\" },\n { code: \"CG\", name: \"Congo - Brazzaville\" },\n { code: \"CD\", name: \"Congo - Kinshasa\" },\n { code: \"CK\", name: \"Cook Islands\" },\n { code: \"CR\", name: \"Costa Rica\" },\n { code: \"CI\", name: \"Côte dIvoire\" },\n { code: \"HR\", name: \"Croatia\" },\n { code: \"CW\", name: \"Curaçao\" },\n { code: \"CY\", name: \"Cyprus\" },\n { code: \"CZ\", name: \"Czechia\" },\n { code: \"DK\", name: \"Denmark\" },\n { code: \"DJ\", name: \"Djibouti\" },\n { code: \"DM\", name: \"Dominica\" },\n { code: \"DO\", name: \"Dominican Republic\" },\n { code: \"EC\", name: \"Ecuador\" },\n { code: \"EG\", name: \"Egypt\" },\n { code: \"SV\", name: \"El Salvador\" },\n { code: \"GQ\", name: \"Equatorial Guinea\" },\n { code: \"ER\", name: \"Eritrea\" },\n { code: \"EE\", name: \"Estonia\" },\n { code: \"ET\", name: \"Ethiopia\" },\n { code: \"FK\", name: \"Falkland Islands\" },\n { code: \"FO\", name: \"Faroe Islands\" },\n { code: \"FJ\", name: \"Fiji\" },\n { code: \"FI\", name: \"Finland\" },\n { code: \"FR\", name: \"France\" },\n { code: \"GF\", name: \"French Guiana\" },\n { code: \"PF\", name: \"French Polynesia\" },\n { code: \"TF\", name: \"French Southern Territories\" },\n { code: \"GA\", name: \"Gabon\" },\n { code: \"GM\", name: \"Gambia\" },\n { code: \"GE\", name: \"Georgia\" },\n { code: \"DE\", name: \"Germany\" },\n { code: \"GH\", name: \"Ghana\" },\n { code: \"GI\", name: \"Gibraltar\" },\n { code: \"GR\", name: \"Greece\" },\n { code: \"GL\", name: \"Greenland\" },\n { code: \"GD\", name: \"Grenada\" },\n { code: \"GP\", name: \"Guadeloupe\" },\n { code: \"GU\", name: \"Guam\" },\n { code: \"GT\", name: \"Guatemala\" },\n { code: \"GG\", name: \"Guernsey\" },\n { code: \"GN\", name: \"Guinea\" },\n { code: \"GW\", name: \"Guinea-Bissau\" },\n { code: \"GY\", name: \"Guyana\" },\n { code: \"HT\", name: \"Haiti\" },\n { code: \"HN\", name: \"Honduras\" },\n { code: \"HK\", name: \"Hong Kong SAR China\" },\n { code: \"HU\", name: \"Hungary\" },\n { code: \"IS\", name: \"Iceland\" },\n { code: \"IN\", name: \"India\" },\n { code: \"ID\", name: \"Indonesia\" },\n { code: \"IR\", name: \"Iran\" },\n { code: \"IQ\", name: \"Iraq\" },\n { code: \"IE\", name: \"Ireland\" },\n { code: \"IM\", name: \"Isle of Man\" },\n { code: \"IL\", name: \"Israel\" },\n { code: \"IT\", name: \"Italy\" },\n { code: \"JM\", name: \"Jamaica\" },\n { code: \"JP\", name: \"Japan\" },\n { code: \"JE\", name: \"Jersey\" },\n { code: \"JO\", name: \"Jordan\" },\n { code: \"KZ\", name: \"Kazakhstan\" },\n { code: \"KE\", name: \"Kenya\" },\n { code: \"KI\", name: \"Kiribati\" },\n { code: \"XK\", name: \"Kosovo\" },\n { code: \"KW\", name: \"Kuwait\" },\n { code: \"KG\", name: \"Kyrgyzstan\" },\n { code: \"LA\", name: \"Laos\" },\n { code: \"LV\", name: \"Latvia\" },\n { code: \"LB\", name: \"Lebanon\" },\n { code: \"LS\", name: \"Lesotho\" },\n { code: \"LR\", name: \"Liberia\" },\n { code: \"LY\", name: \"Libya\" },\n { code: \"LI\", name: \"Liechtenstein\" },\n { code: \"LT\", name: \"Lithuania\" },\n { code: \"LU\", name: \"Luxembourg\" },\n { code: \"MO\", name: \"Macau SAR China\" },\n { code: \"MK\", name: \"Macedonia\" },\n { code: \"MG\", name: \"Madagascar\" },\n { code: \"MW\", name: \"Malawi\" },\n { code: \"MY\", name: \"Malaysia\" },\n { code: \"MV\", name: \"Maldives\" },\n { code: \"ML\", name: \"Mali\" },\n { code: \"MT\", name: \"Malta\" },\n { code: \"MQ\", name: \"Martinique\" },\n { code: \"MR\", name: \"Mauritania\" },\n { code: \"MU\", name: \"Mauritius\" },\n { code: \"YT\", name: \"Mayotte\" },\n { code: \"MX\", name: \"Mexico\" },\n { code: \"MD\", name: \"Moldova\" },\n { code: \"MC\", name: \"Monaco\" },\n { code: \"MN\", name: \"Mongolia\" },\n { code: \"ME\", name: \"Montenegro\" },\n { code: \"MS\", name: \"Montserrat\" },\n { code: \"MA\", name: \"Morocco\" },\n { code: \"MZ\", name: \"Mozambique\" },\n { code: \"MM\", name: \"Myanmar (Burma)\" },\n { code: \"NA\", name: \"Namibia\" },\n { code: \"NR\", name: \"Nauru\" },\n { code: \"NP\", name: \"Nepal\" },\n { code: \"NL\", name: \"Netherlands\" },\n { code: \"NC\", name: \"New Caledonia\" },\n { code: \"NZ\", name: \"New Zealand\" },\n { code: \"NI\", name: \"Nicaragua\" },\n { code: \"NE\", name: \"Niger\" },\n { code: \"NG\", name: \"Nigeria\" },\n { code: \"NU\", name: \"Niue\" },\n { code: \"NO\", name: \"Norway\" },\n { code: \"OM\", name: \"Oman\" },\n { code: \"PK\", name: \"Pakistan\" },\n { code: \"PS\", name: \"Palestinian Territories\" },\n { code: \"PA\", name: \"Panama\" },\n { code: \"PG\", name: \"Papua New Guinea\" },\n { code: \"PY\", name: \"Paraguay\" },\n { code: \"PE\", name: \"Peru\" },\n { code: \"PH\", name: \"Philippines\" },\n { code: \"PN\", name: \"Pitcairn Islands\" },\n { code: \"PL\", name: \"Poland\" },\n { code: \"PT\", name: \"Portugal\" },\n { code: \"PR\", name: \"Puerto Rico\" },\n { code: \"QA\", name: \"Qatar\" },\n { code: \"RE\", name: \"Réunion\" },\n { code: \"RO\", name: \"Romania\" },\n { code: \"RU\", name: \"Russia\" },\n { code: \"RW\", name: \"Rwanda\" },\n { code: \"WS\", name: \"Samoa\" },\n { code: \"SM\", name: \"San Marino\" },\n { code: \"ST\", name: \"São Tomé &amp; Príncipe\" },\n { code: \"SA\", name: \"Saudi Arabia\" },\n { code: \"SN\", name: \"Senegal\" },\n { code: \"RS\", name: \"Serbia\" },\n { code: \"SC\", name: \"Seychelles\" },\n { code: \"SL\", name: \"Sierra Leone\" },\n { code: \"SG\", name: \"Singapore\" },\n { code: \"SX\", name: \"Sint Maarten\" },\n { code: \"SK\", name: \"Slovakia\" },\n { code: \"SI\", name: \"Slovenia\" },\n { code: \"SB\", name: \"Solomon Islands\" },\n { code: \"SO\", name: \"Somalia\" },\n { code: \"ZA\", name: \"South Africa\" },\n { code: \"GS\", name: \"South Georgia &amp; South Sandwich Islands\" },\n { code: \"KR\", name: \"South Korea\" },\n { code: \"SS\", name: \"South Sudan\" },\n { code: \"ES\", name: \"Spain\" },\n { code: \"LK\", name: \"Sri Lanka\" },\n { code: \"BL\", name: \"St. Barthélemy\" },\n { code: \"SH\", name: \"St. Helena\" },\n { code: \"KN\", name: \"St. Kitts &amp; Nevis\" },\n { code: \"LC\", name: \"St. Lucia\" },\n { code: \"MF\", name: \"St. Martin\" },\n { code: \"PM\", name: \"St. Pierre &amp; Miquelon\" },\n { code: \"VC\", name: \"St. Vincent &amp; Grenadines\" },\n { code: \"SR\", name: \"Suriname\" },\n { code: \"SJ\", name: \"Svalbard &amp; Jan Mayen\" },\n { code: \"SZ\", name: \"Swaziland\" },\n { code: \"SE\", name: \"Sweden\" },\n { code: \"CH\", name: \"Switzerland\" },\n { code: \"TW\", name: \"Taiwan\" },\n { code: \"TJ\", name: \"Tajikistan\" },\n { code: \"TZ\", name: \"Tanzania\" },\n { code: \"TH\", name: \"Thailand\" },\n { code: \"TL\", name: \"Timor-Leste\" },\n { code: \"TG\", name: \"Togo\" },\n { code: \"TK\", name: \"Tokelau\" },\n { code: \"TO\", name: \"Tonga\" },\n { code: \"TT\", name: \"Trinidad &amp; Tobago\" },\n { code: \"TA\", name: \"Tristan da Cunha\" },\n { code: \"TN\", name: \"Tunisia\" },\n { code: \"TR\", name: \"Turkey\" },\n { code: \"TM\", name: \"Turkmenistan\" },\n { code: \"TC\", name: \"Turks &amp; Caicos Islands\" },\n { code: \"TV\", name: \"Tuvalu\" },\n { code: \"UG\", name: \"Uganda\" },\n { code: \"UA\", name: \"Ukraine\" },\n { code: \"AE\", name: \"United Arab Emirates\" },\n { code: \"GB\", name: \"United Kingdom\" },\n { code: \"US\", name: \"United States\" },\n { code: \"UY\", name: \"Uruguay\" },\n { code: \"UZ\", name: \"Uzbekistan\" },\n { code: \"VU\", name: \"Vanuatu\" },\n { code: \"VA\", name: \"Vatican City\" },\n { code: \"VE\", name: \"Venezuela\" },\n { code: \"VN\", name: \"Vietnam\" },\n { code: \"WF\", name: \"Wallis &amp; Futuna\" },\n { code: \"EH\", name: \"Western Sahara\" },\n { code: \"YE\", name: \"Yemen\" },\n { code: \"ZM\", name: \"Zambia\" },\n { code: \"ZW\", name: \"Zimbabwe\" }\n];\n","const loadWordListPromises = new Map<string, Promise<string[]>>();\n\nexport async function getWordList(lang: string): Promise<string[]> {\n lang = lang.toLowerCase();\n\n if (loadWordListPromises.has(lang)) {\n return loadWordListPromises.get(lang)!;\n }\n\n const promise = (async () => {\n try {\n const { default: words } = await import(`../res/wordlists/${lang}.json`);\n\n return words;\n } catch (e) {\n const dashIndex = lang.lastIndexOf(\"-\");\n if (dashIndex !== -1) {\n return getWordList(lang.substring(0, dashIndex));\n } else {\n return [];\n }\n }\n })();\n\n loadWordListPromises.set(lang, promise);\n\n return promise;\n}\n\nexport const AVAILABLE_LANGUAGES = [\n { value: \"en\", toString: () => \"English\" },\n { value: \"de\", toString: () => \"Deutsch\" },\n { value: \"es\", toString: () => \"Español\" },\n { value: \"pt\", toString: () => \"Português\" },\n { value: \"fr\", toString: () => \"Français\" }\n];\n"],"names":[],"sourceRoot":""}