diff --git a/README.md b/README.md
index 148ed40ed5..9b57df9f49 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ The Bitwarden browser extension is written using the Web Extension API and Angul
**Requirements**
-- [Node.js](https://nodejs.org) v8.11 or greater
+- [Node.js](https://nodejs.org) v14.17 or greater
- [Gulp](https://gulpjs.com/) (`npm install --global gulp-cli`)
- Chrome (preferred), Opera, or Firefox browser
diff --git a/jslib b/jslib
index ba1a40af4e..306aef73d4 160000
--- a/jslib
+++ b/jslib
@@ -1 +1 @@
-Subproject commit ba1a40af4e93c78b3312a1167e7cc16729910069
+Subproject commit 306aef73d459dfad8a7a06c32442c9ed2d56922e
diff --git a/src/background/main.background.ts b/src/background/main.background.ts
index 5f63542781..02dca56342 100644
--- a/src/background/main.background.ts
+++ b/src/background/main.background.ts
@@ -220,7 +220,8 @@ export default class MainBackground {
this.eventService);
this.containerService = new ContainerService(this.cryptoService);
this.auditService = new AuditService(this.cryptoFunctionService, this.apiService);
- this.exportService = new ExportService(this.folderService, this.cipherService, this.apiService);
+ this.exportService = new ExportService(this.folderService, this.cipherService, this.apiService,
+ this.cryptoService);
this.notificationsService = new NotificationsService(this.userService, this.syncService, this.appIdService,
this.apiService, this.vaultTimeoutService, () => this.logout(true), this.consoleLogService);
this.environmentService = new EnvironmentService(this.apiService, this.storageService,
diff --git a/src/popup/app.component.ts b/src/popup/app.component.ts
index 5f42fa5a8c..6bdda290f5 100644
--- a/src/popup/app.component.ts
+++ b/src/popup/app.component.ts
@@ -238,7 +238,7 @@ export class AppComponent implements OnInit {
iconHtml: iconClasses != null ? `` : undefined,
text: msg.text,
html: msg.html,
- title: msg.title,
+ titleText: msg.title,
showCancelButton: (cancelText != null),
cancelButtonText: cancelText,
showConfirmButton: true,
@@ -256,7 +256,7 @@ export class AppComponent implements OnInit {
const platformUtils = this.platformUtilsService as BrowserPlatformUtilsService;
const result = await Swal.fire({
heightAuto: false,
- title: msg.title,
+ titleText: msg.title,
input: 'password',
text: msg.body,
confirmButtonText: this.i18nService.t('ok'),
diff --git a/src/popup/app.module.ts b/src/popup/app.module.ts
index b428e8e14e..a15a510868 100644
--- a/src/popup/app.module.ts
+++ b/src/popup/app.module.ts
@@ -82,12 +82,14 @@ import {
} from '@angular/common';
import localeBe from '@angular/common/locales/be';
import localeBg from '@angular/common/locales/bg';
+import localeBn from '@angular/common/locales/bn';
import localeCa from '@angular/common/locales/ca';
import localeCs from '@angular/common/locales/cs';
import localeDa from '@angular/common/locales/da';
import localeDe from '@angular/common/locales/de';
import localeEl from '@angular/common/locales/el';
import localeEnGb from '@angular/common/locales/en-GB';
+import localeEnIn from '@angular/common/locales/en-IN';
import localeEs from '@angular/common/locales/es';
import localeEt from '@angular/common/locales/et';
import localeFa from '@angular/common/locales/fa';
@@ -100,6 +102,8 @@ import localeId from '@angular/common/locales/id';
import localeIt from '@angular/common/locales/it';
import localeJa from '@angular/common/locales/ja';
import localeKo from '@angular/common/locales/ko';
+import localeLv from '@angular/common/locales/lv';
+import localeMlIn from '@angular/common/locales/ml-IN';
import localeNb from '@angular/common/locales/nb';
import localeNl from '@angular/common/locales/nl';
import localePl from '@angular/common/locales/pl';
@@ -119,12 +123,14 @@ import localeZhTw from '@angular/common/locales/zh-Hant';
registerLocaleData(localeBe, 'be');
registerLocaleData(localeBg, 'bg');
+registerLocaleData(localeBn, 'bn');
registerLocaleData(localeCa, 'ca');
registerLocaleData(localeCs, 'cs');
registerLocaleData(localeDa, 'da');
registerLocaleData(localeDe, 'de');
registerLocaleData(localeEl, 'el');
registerLocaleData(localeEnGb, 'en-GB');
+registerLocaleData(localeEnIn, 'en-IN');
registerLocaleData(localeEs, 'es');
registerLocaleData(localeEt, 'et');
registerLocaleData(localeFa, 'fa');
@@ -137,6 +143,8 @@ registerLocaleData(localeId, 'id');
registerLocaleData(localeIt, 'it');
registerLocaleData(localeJa, 'ja');
registerLocaleData(localeKo, 'ko');
+registerLocaleData(localeLv, 'lv');
+registerLocaleData(localeMlIn, 'ml-IN');
registerLocaleData(localeNb, 'nb');
registerLocaleData(localeNl, 'nl');
registerLocaleData(localePl, 'pl');
diff --git a/src/popup/settings/settings.component.ts b/src/popup/settings/settings.component.ts
index 298838e890..309df14939 100644
--- a/src/popup/settings/settings.component.ts
+++ b/src/popup/settings/settings.component.ts
@@ -239,7 +239,7 @@ export class SettingsComponent implements OnInit {
const submitted = Swal.fire({
heightAuto: false,
buttonsStyling: false,
- title: this.i18nService.t('awaitDesktop'),
+ titleText: this.i18nService.t('awaitDesktop'),
text: this.i18nService.t('awaitDesktopDesc'),
icon: 'info',
iconHtml: '',
diff --git a/src/services/i18n.service.ts b/src/services/i18n.service.ts
index 542dbb6f35..a8dac854c4 100644
--- a/src/services/i18n.service.ts
+++ b/src/services/i18n.service.ts
@@ -9,8 +9,8 @@ export default class I18nService extends BaseI18nService {
});
this.supportedTranslationLocales = [
- 'en', 'be', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'en-GB', 'es', 'et', 'fa', 'fi', 'fr', 'he', 'hr', 'hu',
- 'id', 'it', 'ja', 'ko', 'nb', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sr', 'sv', 'th', 'tr', 'uk',
+ 'en', 'be', 'bg', 'bn', 'ca', 'cs', 'da', 'de', 'el', 'en-GB', 'en-IN', 'es', 'et', 'fa', 'fi', 'fr', 'he', 'hr', 'hu',
+ 'id', 'it', 'ja', 'ko', 'lv', 'ml-IN', 'nb', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sr', 'sv', 'th', 'tr', 'uk',
'vi', 'zh-CN', 'zh-TW',
];
}