diff --git a/.editorconfig b/.editorconfig index 44e06dc8..b342a112 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,7 +12,7 @@ insert_final_newline = true [*.{js,ts,scss,html}] charset = utf-8 indent_style = space -indent_size = 4 +indent_size = 2 [*.{ts}] quote_type = single diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc16ffbb..50666d6d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,8 +40,7 @@ jobs: - name: Get GitHub sha as version id: version - run: | - echo "::set-output name=value::${GITHUB_SHA:0:7}" + run: echo "::set-output name=value::${GITHUB_SHA:0:7}" build-oss-selfhost: @@ -54,11 +53,7 @@ jobs: - name: Set up Node uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea with: - node-version: '14' - - - name: Update NPM - run: | - npm install -g npm@7 + node-version: '16' - name: Cache npm id: npm-cache @@ -106,11 +101,7 @@ jobs: - name: Set up Node uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea with: - node-version: '14' - - - name: Update NPM - run: | - npm install -g npm@7 + node-version: '16' - name: Cache npm id: npm-cache @@ -158,11 +149,7 @@ jobs: - name: Set up Node uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea with: - node-version: '14' - - - name: Update NPM - run: | - npm install -g npm@7 + node-version: '16' - name: Cache npm id: npm-cache @@ -182,7 +169,7 @@ jobs: echo "GitHub event: $GITHUB_EVENT" - name: Setup DCT - if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/release' + if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix' id: setup-dct uses: bitwarden/gh-actions/setup-docker-trust@a8c384a05a974c05c48374c818b004be221d43ff with: @@ -228,12 +215,12 @@ jobs: if: github.ref == 'refs/heads/master' run: docker tag bitwarden/web bitwarden/web:dev - - name: Tag release branch - if: github.ref == 'refs/heads/release' - run: docker tag bitwarden/web bitwarden/web:latest + - name: Tag hotfix branch + if: github.ref == 'refs/heads/hotfix' + run: docker tag bitwarden/web bitwarden/web:hotfix - name: List Docker images - if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/release' + if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix' run: docker images - name: Push rc image @@ -250,15 +237,15 @@ jobs: DOCKER_CONTENT_TRUST: 1 DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }} - - name: Push latest image - if: github.ref == 'refs/heads/release' - run: docker push bitwarden/web:latest + - name: Push hotfix image + if: github.ref == 'refs/heads/hotfix' + run: docker push bitwarden/web:hotfix env: DOCKER_CONTENT_TRUST: 1 DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }} - name: Log out of Docker - if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/release' + if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix' run: docker logout @@ -269,11 +256,7 @@ jobs: - name: Set up Node uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea with: - node-version: '14' - - - name: Update NPM - run: | - npm install -g npm@7 + node-version: '16' - name: Cache npm id: npm-cache @@ -326,21 +309,21 @@ jobs: docker --version docker build -t bitwardenqa.azurecr.io/web . - - name: Get image tag - id: image-tag - run: | - IMAGE_TAG=$(echo "$GITHUB_REF" | awk '{split($0, a, "/"); print a[3];}') - TAG_EXTENSION=${{ github.event.inputs.custom_tag_extension }} + # - name: Get image tag + # id: image-tag + # run: | + # IMAGE_TAG=$(echo "$GITHUB_REF" | awk '{split($0, a, "/"); print a[3];}') + # TAG_EXTENSION=${{ github.event.inputs.custom_tag_extension }} - if [[ $TAG_EXTENSION ]]; then - IMAGE_TAG=$IMAGE_TAG-$TAG_EXTENSION - fi - echo "::set-output name=value::$IMAGE_TAG" + # if [[ $TAG_EXTENSION ]]; then + # IMAGE_TAG=$IMAGE_TAG-$TAG_EXTENSION + # fi + # echo "::set-output name=value::$IMAGE_TAG" - - name: Tag image - env: - IMAGE_TAG: ${{ steps.image-tag.outputs.value }} - run: docker tag bitwardenqa.azurecr.io/web "bitwardenqa.azurecr.io/web:$IMAGE_TAG" + # - name: Tag image + # env: + # IMAGE_TAG: ${{ steps.image-tag.outputs.value }} + # run: docker tag bitwardenqa.azurecr.io/web "bitwardenqa.azurecr.io/web:$IMAGE_TAG" - name: Tag dev if: github.ref == 'refs/heads/master' @@ -349,10 +332,10 @@ jobs: - name: List Docker images run: docker images - - name: Push image - env: - IMAGE_TAG: ${{ steps.image-tag.outputs.value }} - run: docker push "bitwardenqa.azurecr.io/web:$IMAGE_TAG" + # - name: Push image + # env: + # IMAGE_TAG: ${{ steps.image-tag.outputs.value }} + # run: docker push "bitwardenqa.azurecr.io/web:$IMAGE_TAG" - name: Push dev images if: github.ref == 'refs/heads/master' @@ -384,11 +367,7 @@ jobs: - name: Set up Node uses: actions/setup-node@46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea with: - node-version: '14' - - - name: Update NPM - run: | - npm install -g npm@7 + node-version: '16' - name: Print environment run: | @@ -409,8 +388,8 @@ jobs: - name: Install dependencies run: npm ci - - name: Run linter - run: npm run lint + # - name: Run linter + # run: npm run lint - name: NPM build run: npm run build:bit:cloud diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 843704dc..91843d25 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,6 +54,7 @@ jobs: runs-on: ubuntu-20.04 needs: setup env: + _BRANCH_NAME: ${{ needs.setup.outputs.branch-name }} _RELEASE_VERSION: ${{ needs.setup.outputs.release_version }} steps: - name: Print environment @@ -73,22 +74,24 @@ jobs: - name: Checkout repo uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - - name: Pull latest selfhost Release image - run: docker pull bitwarden/web:latest + - name: Pull latest selfhost image + run: docker pull bitwarden/web:$_BRANCH_NAME - - name: Tag version + - name: Tag version and latest run: | - docker tag bitwarden/web:latest bitwarden/web:$_RELEASE_VERSION + docker tag bitwarden/web:$_BRANCH_NAME bitwarden/web:$_RELEASE_VERSION + docker tag bitwarden/web:$_BRANCH_NAME bitwarden/web:latest - name: List Docker images run: docker images - - name: Push images - run: | - docker push bitwarden/web:$_RELEASE_VERSION + - name: Push version and latest image env: DOCKER_CONTENT_TRUST: 1 DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }} + run: | + docker push bitwarden/web:$_RELEASE_VERSION + docker push bitwarden/web:latest - name: Log out of Docker run: docker logout @@ -116,8 +119,6 @@ jobs: - name: Checkout Repo uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - with: - ref: release - name: Setup git config run: | diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml new file mode 100644 index 00000000..e4071dae --- /dev/null +++ b/.github/workflows/version-bump.yml @@ -0,0 +1,71 @@ +--- +name: Version Bump + +on: + workflow_dispatch: + inputs: + version_number: + description: "New Version" + required: true + +jobs: + bump_props_version: + name: "Create version_bump_${{ github.event.inputs.version_number }} branch" + runs-on: ubuntu-20.04 + steps: + - name: Checkout Branch + uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 + + - name: Create Version Branch + run: | + git switch -c version_bump_${{ github.event.inputs.version_number }} + git push -u origin version_bump_${{ github.event.inputs.version_number }} + + - name: Checkout Version Branch + uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 + with: + ref: version_bump_${{ github.event.inputs.version_number }} + + - name: Bump Version - package.json + uses: bitwarden/gh-actions/version-bump@0c263b3963211ccaf5804313c3b3a0bcc52d4b19 + with: + version: ${{ github.event.inputs.version_number }} + file_path: "./package.json" + + - name: Bump Version - package-lock.json + uses: bitwarden/gh-actions/version-bump@0c263b3963211ccaf5804313c3b3a0bcc52d4b19 + with: + version: ${{ github.event.inputs.version_number }} + file_path: "./package-lock.json" + + - name: Commit files + run: | + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git commit -m "Bumped version to ${{ github.event.inputs.version_number }}" -a + + - name: Push changes + run: git push -u origin version_bump_${{ github.event.inputs.version_number }} + + - name: Create Version PR + env: + PR_BRANCH: "version_bump_${{ github.event.inputs.version_number }}" + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + BASE_BRANCH: master + TITLE: "Bump version to ${{ github.event.inputs.version_number }}" + run: | + gh pr create --title "$TITLE" \ + --base "$BASE" \ + --head "$PR_BRANCH" \ + --label "version update" \ + --label "automated pr" \ + --body " + ## Type of change + - [ ] Bug fix + - [ ] New feature development + - [ ] Tech debt (refactoring, code cleanup, dependency upgrades, etc) + - [ ] Build/deploy pipeline (DevOps) + - [X] Other + + ## Objective + Automated version bump to ${{ github.event.inputs.version_number }}" diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..36af2198 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx lint-staged diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..2a26e8cf --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +# Build directories +build +dist + +jslib + +# External libraries / auto synced locales +src/locales +src/404/*.min.css +src/scripts/u2f.js diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..de753c53 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "printWidth": 100 +} diff --git a/README.md b/README.md index 811c14ac..9c81aa2e 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ ### Requirements -- [Node.js](https://nodejs.org) v14.17 or greater -- NPM v7 +- [Node.js](https://nodejs.org) v16.13.1 or greater +- NPM v8 ### Run the app diff --git a/bitwarden_license/src/app/app.module.ts b/bitwarden_license/src/app/app.module.ts index cd2c628c..204c6d5d 100644 --- a/bitwarden_license/src/app/app.module.ts +++ b/bitwarden_license/src/app/app.module.ts @@ -1,11 +1,11 @@ -import { ToasterModule } from 'angular2-toaster'; -import { InfiniteScrollModule } from 'ngx-infinite-scroll'; - import { DragDropModule } from '@angular/cdk/drag-drop'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { RouterModule } from '@angular/router'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; + +import { BitwardenToastModule } from 'jslib-angular/components/toastr.component'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -25,7 +25,11 @@ import { WildcardRoutingModule } from 'src/app/wildcard-routing.module'; FormsModule, ReactiveFormsModule, ServicesModule, - ToasterModule.forRoot(), + BitwardenToastModule.forRoot({ + maxOpened: 5, + autoDismiss: true, + closeButton: true, + }), InfiniteScrollModule, DragDropModule, AppRoutingModule, diff --git a/bitwarden_license/src/app/organizations/manage/sso.component.html b/bitwarden_license/src/app/organizations/manage/sso.component.html index c5b289de..2af5e09f 100644 --- a/bitwarden_license/src/app/organizations/manage/sso.component.html +++ b/bitwarden_license/src/app/organizations/manage/sso.component.html @@ -83,9 +83,9 @@
@@ -138,8 +138,8 @@
diff --git a/bitwarden_license/src/app/organizations/manage/sso.component.ts b/bitwarden_license/src/app/organizations/manage/sso.component.ts index f92d46d3..d5d8be0e 100644 --- a/bitwarden_license/src/app/organizations/manage/sso.component.ts +++ b/bitwarden_license/src/app/organizations/manage/sso.component.ts @@ -7,8 +7,8 @@ import { ActivatedRoute } from '@angular/router'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { Organization } from 'jslib-common/models/domain/organization'; @@ -81,7 +81,7 @@ export class SsoComponent implements OnInit { constructor(private fb: FormBuilder, private route: ActivatedRoute, private apiService: ApiService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, - private userService: UserService) { } + private organizationService: OrganizationService) { } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { @@ -91,7 +91,7 @@ export class SsoComponent implements OnInit { } async load() { - this.organization = await this.userService.getOrganization(this.organizationId); + this.organization = await this.organizationService.get(this.organizationId); const ssoSettings = await this.apiService.getOrganizationSso(this.organizationId); this.data.patchValue(ssoSettings.data); diff --git a/bitwarden_license/src/app/providers/clients/add-organization.component.ts b/bitwarden_license/src/app/providers/clients/add-organization.component.ts index 099d4d04..dd97c083 100644 --- a/bitwarden_license/src/app/providers/clients/add-organization.component.ts +++ b/bitwarden_license/src/app/providers/clients/add-organization.component.ts @@ -5,22 +5,18 @@ import { OnInit, Output } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; -import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { ValidationService } from 'jslib-angular/services/validation.service'; -import { ProviderService } from '../services/provider.service'; +import { WebProviderService } from '../services/webProvider.service'; import { Organization } from 'jslib-common/models/domain/organization'; import { Provider } from 'jslib-common/models/domain/provider'; -import { PlanType } from 'jslib-common/enums/planType'; - @Component({ selector: 'provider-add-organization', templateUrl: 'add-organization.component.html', @@ -35,10 +31,13 @@ export class AddOrganizationComponent implements OnInit { formPromise: Promise; loading = true; - constructor(private userService: UserService, private providerService: ProviderService, - private toasterService: ToasterService, private i18nService: I18nService, - private platformUtilsService: PlatformUtilsService, private validationService: ValidationService, - private apiService: ApiService) { } + constructor( + private providerService: ProviderService, + private webProviderService: WebProviderService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private validationService: ValidationService + ) { } async ngOnInit() { await this.load(); @@ -49,7 +48,7 @@ export class AddOrganizationComponent implements OnInit { return; } - this.provider = await this.userService.getProvider(this.providerId); + this.provider = await this.providerService.get(this.providerId); this.loading = false; } @@ -68,7 +67,7 @@ export class AddOrganizationComponent implements OnInit { } try { - this.formPromise = this.providerService.addOrganizationToProvider(this.providerId, organization.id); + this.formPromise = this.webProviderService.addOrganizationToProvider(this.providerId, organization.id); await this.formPromise; } catch (e) { this.validationService.showError(e); @@ -77,7 +76,7 @@ export class AddOrganizationComponent implements OnInit { this.formPromise = null; } - this.toasterService.popAsync('success', null, this.i18nService.t('organizationJoinedProvider')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('organizationJoinedProvider')); this.onAddedOrganization.emit(); } } diff --git a/bitwarden_license/src/app/providers/clients/clients.component.ts b/bitwarden_license/src/app/providers/clients/clients.component.ts index dabe0e9a..a20e610f 100644 --- a/bitwarden_license/src/app/providers/clients/clients.component.ts +++ b/bitwarden_license/src/app/providers/clients/clients.component.ts @@ -5,16 +5,16 @@ import { ViewContainerRef } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { first } from 'rxjs/operators'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ModalService } from 'jslib-angular/services/modal.service'; import { ValidationService } from 'jslib-angular/services/validation.service'; @@ -27,7 +27,7 @@ import { ProviderOrganizationOrganizationDetailsResponse } from 'jslib-common/models/response/provider/providerOrganizationResponse'; -import { ProviderService } from '../services/provider.service'; +import { WebProviderService } from '../services/webProvider.service'; import { AddOrganizationComponent } from './add-organization.component'; @@ -55,12 +55,19 @@ export class ClientsComponent implements OnInit { protected actionPromise: Promise; private pagedClientsCount = 0; - constructor(private route: ActivatedRoute, private userService: UserService, - private apiService: ApiService, private searchService: SearchService, - private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, - private toasterService: ToasterService, private validationService: ValidationService, - private providerService: ProviderService, private logService: LogService, - private modalService: ModalService) { } + constructor( + private route: ActivatedRoute, + private providerService: ProviderService, + private apiService: ApiService, + private searchService: SearchService, + private platformUtilsService: PlatformUtilsService, + private i18nService: I18nService, + private validationService: ValidationService, + private webProviderService: WebProviderService, + private logService: LogService, + private modalService: ModalService, + private organizationService: OrganizationService + ) { } async ngOnInit() { this.route.parent.params.subscribe(async params => { @@ -77,8 +84,8 @@ export class ClientsComponent implements OnInit { async load() { const response = await this.apiService.getProviderClients(this.providerId); this.clients = response.data != null && response.data.length > 0 ? response.data : []; - this.manageOrganizations = (await this.userService.getProvider(this.providerId)).type === ProviderUserType.ProviderAdmin; - const candidateOrgs = (await this.userService.getAllOrganizations()).filter(o => o.isOwner && o.providerId == null); + this.manageOrganizations = (await this.providerService.get(this.providerId)).type === ProviderUserType.ProviderAdmin; + const candidateOrgs = (await this.organizationService.getAll()).filter(o => o.isOwner && o.providerId == null); const allowedOrgsIds = await Promise.all(candidateOrgs.map(o => this.apiService.getOrganization(o.id))).then(orgs => orgs.filter(o => !DisallowedPlanTypes.includes(o.planType)) .map(o => o.id)); @@ -146,10 +153,11 @@ export class ClientsComponent implements OnInit { return false; } - this.actionPromise = this.providerService.detachOrganizastion(this.providerId, organization.id); + this.actionPromise = this.webProviderService.detachOrganizastion(this.providerId, organization.id); try { await this.actionPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('detachedOrganization', organization.organizationName)); + this.platformUtilsService.showToast('success', null, + this.i18nService.t('detachedOrganization', organization.organizationName)); await this.load(); } catch (e) { this.validationService.showError(e); diff --git a/bitwarden_license/src/app/providers/manage/accept-provider.component.ts b/bitwarden_license/src/app/providers/manage/accept-provider.component.ts index 1788f67c..5a2585e3 100644 --- a/bitwarden_license/src/app/providers/manage/accept-provider.component.ts +++ b/bitwarden_license/src/app/providers/manage/accept-provider.component.ts @@ -1,14 +1,13 @@ import { Component } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { Toast, ToasterService } from 'angular2-toaster'; import { BaseAcceptComponent } from 'src/app/common/base.accept.component'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ProviderUserAcceptRequest } from 'jslib-common/models/request/provider/providerUserAcceptRequest'; @Component({ @@ -22,9 +21,15 @@ export class AcceptProviderComponent extends BaseAcceptComponent { requiredParameters = ['providerId', 'providerUserId', 'token']; - constructor(router: Router, toasterService: ToasterService, i18nService: I18nService, route: ActivatedRoute, - userService: UserService, stateService: StateService, private apiService: ApiService) { - super(router, toasterService, i18nService, route, userService, stateService); + constructor( + router: Router, + i18nService: I18nService, + route: ActivatedRoute, + stateService: StateService, + private apiService: ApiService, + platformUtilService: PlatformUtilsService, + ) { + super(router, platformUtilService, i18nService, route, stateService); } async authedHandler(qParams: any) { @@ -32,13 +37,8 @@ export class AcceptProviderComponent extends BaseAcceptComponent { request.token = qParams.token; await this.apiService.postProviderUserAccept(qParams.providerId, qParams.providerUserId, request); - const toast: Toast = { - type: 'success', - title: this.i18nService.t('inviteAccepted'), - body: this.i18nService.t('providerInviteAcceptedDesc'), - timeout: 10000, - }; - this.toasterService.popAsync(toast); + this.platformUtilService.showToast('success', this.i18nService.t('inviteAccepted'), + this.i18nService.t('providerInviteAcceptedDesc'), { timeout: 10000 }); this.router.navigate(['/vault']); } diff --git a/bitwarden_license/src/app/providers/manage/bulk/bulk-confirm.component.ts b/bitwarden_license/src/app/providers/manage/bulk/bulk-confirm.component.ts index ddfdd06e..cb6f4bd4 100644 --- a/bitwarden_license/src/app/providers/manage/bulk/bulk-confirm.component.ts +++ b/bitwarden_license/src/app/providers/manage/bulk/bulk-confirm.component.ts @@ -12,7 +12,7 @@ import { BulkConfirmComponent as OrganizationBulkConfirmComponent } from 'src/ap import { BulkUserDetails } from 'src/app/organizations/manage/bulk/bulk-status.component'; @Component({ - templateUrl: '/src/app/organizations/manage/bulk/bulk-confirm.component.html', + templateUrl: '../../../../../../src/app/organizations/manage/bulk/bulk-confirm.component.html', }) export class BulkConfirmComponent extends OrganizationBulkConfirmComponent { diff --git a/bitwarden_license/src/app/providers/manage/bulk/bulk-remove.component.ts b/bitwarden_license/src/app/providers/manage/bulk/bulk-remove.component.ts index 7a0f7cf5..f43302be 100644 --- a/bitwarden_license/src/app/providers/manage/bulk/bulk-remove.component.ts +++ b/bitwarden_license/src/app/providers/manage/bulk/bulk-remove.component.ts @@ -8,7 +8,7 @@ import { ProviderUserBulkRequest } from 'jslib-common/models/request/provider/pr import { BulkRemoveComponent as OrganizationBulkRemoveComponent } from 'src/app/organizations/manage/bulk/bulk-remove.component'; @Component({ - templateUrl: '/src/app/organizations/manage/bulk/bulk-remove.component.html', + templateUrl: '../../../../../../src/app/organizations/manage/bulk/bulk-remove.component.html', }) export class BulkRemoveComponent extends OrganizationBulkRemoveComponent { diff --git a/bitwarden_license/src/app/providers/manage/events.component.ts b/bitwarden_license/src/app/providers/manage/events.component.ts index 2b9ce76d..7b59562e 100644 --- a/bitwarden_license/src/app/providers/manage/events.component.ts +++ b/bitwarden_license/src/app/providers/manage/events.component.ts @@ -3,14 +3,13 @@ import { OnInit, } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { ExportService } from 'jslib-common/abstractions/export.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe'; @@ -31,17 +30,31 @@ export class EventsComponent extends BaseEventsComponent implements OnInit { private providerUsersUserIdMap = new Map(); private providerUsersIdMap = new Map(); - constructor(private apiService: ApiService, private route: ActivatedRoute, eventService: EventService, - i18nService: I18nService, toasterService: ToasterService, private userService: UserService, - exportService: ExportService, platformUtilsService: PlatformUtilsService, private router: Router, - logService: LogService, private userNamePipe: UserNamePipe) { - super(eventService, i18nService, toasterService, exportService, platformUtilsService, logService); + constructor( + private apiService: ApiService, + private route: ActivatedRoute, + eventService: EventService, + i18nService: I18nService, + private providerService: ProviderService, + exportService: ExportService, + platformUtilsService: PlatformUtilsService, + private router: Router, + logService: LogService, + private userNamePipe: UserNamePipe, + ) { + super( + eventService, + i18nService, + exportService, + platformUtilsService, + logService, + ); } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { this.providerId = params.providerId; - const provider = await this.userService.getProvider(this.providerId); + const provider = await this.providerService.get(this.providerId); if (provider == null || !provider.useEvents) { this.router.navigate(['/providers', this.providerId]); return; diff --git a/bitwarden_license/src/app/providers/manage/manage.component.ts b/bitwarden_license/src/app/providers/manage/manage.component.ts index 708f2206..3246892a 100644 --- a/bitwarden_license/src/app/providers/manage/manage.component.ts +++ b/bitwarden_license/src/app/providers/manage/manage.component.ts @@ -4,7 +4,7 @@ import { } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { Provider } from 'jslib-common/models/domain/provider'; @@ -16,11 +16,11 @@ export class ManageComponent implements OnInit { provider: Provider; accessEvents = false; - constructor(private route: ActivatedRoute, private userService: UserService) { } + constructor(private route: ActivatedRoute, private providerService: ProviderService) { } ngOnInit() { this.route.parent.params.subscribe(async params => { - this.provider = await this.userService.getProvider(params.providerId); + this.provider = await this.providerService.get(params.providerId); this.accessEvents = this.provider.useEvents; }); } diff --git a/bitwarden_license/src/app/providers/manage/people.component.ts b/bitwarden_license/src/app/providers/manage/people.component.ts index 1027f38f..1584cd7a 100644 --- a/bitwarden_license/src/app/providers/manage/people.component.ts +++ b/bitwarden_license/src/app/providers/manage/people.component.ts @@ -5,7 +5,6 @@ import { ViewContainerRef } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { first } from 'rxjs/operators'; @@ -14,9 +13,9 @@ import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; import { ValidationService } from 'jslib-angular/services/validation.service'; @@ -59,20 +58,41 @@ export class PeopleComponent extends BasePeopleComponent { this.providerId = params.providerId; - const provider = await this.userService.getProvider(this.providerId); + const provider = await this.providerService.get(this.providerId); if (!provider.canManageUsers) { this.router.navigate(['../'], { relativeTo: this.route }); @@ -164,7 +184,7 @@ export class PeopleComponent extends BasePeopleComponent u.status === ProviderUserStatusType.Invited); if (filteredUsers.length <= 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('noSelectedUsersApplicable')); return; } diff --git a/bitwarden_license/src/app/providers/manage/user-add-edit.component.ts b/bitwarden_license/src/app/providers/manage/user-add-edit.component.ts index 8fdcd47b..487431b7 100644 --- a/bitwarden_license/src/app/providers/manage/user-add-edit.component.ts +++ b/bitwarden_license/src/app/providers/manage/user-add-edit.component.ts @@ -6,8 +6,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -44,8 +42,7 @@ export class UserAddEditComponent implements OnInit { userType = ProviderUserType; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService, - private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { this.editMode = this.loading = this.providerUserId != null; @@ -79,7 +76,7 @@ export class UserAddEditComponent implements OnInit { this.formPromise = this.apiService.postProviderUserInvite(this.providerId, request); } await this.formPromise; - this.toasterService.popAsync('success', null, + this.platformUtilsService.showToast('success', null, this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name)); this.onSavedUser.emit(); } catch (e) { @@ -102,7 +99,7 @@ export class UserAddEditComponent implements OnInit { try { this.deletePromise = this.apiService.deleteProviderUser(this.providerId, this.providerUserId); await this.deletePromise; - this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('removedUserId', this.name)); this.onDeletedUser.emit(); } catch (e) { this.logService.error(e); diff --git a/bitwarden_license/src/app/providers/providers-layout.component.ts b/bitwarden_license/src/app/providers/providers-layout.component.ts index 6bc6ed73..fed1deff 100644 --- a/bitwarden_license/src/app/providers/providers-layout.component.ts +++ b/bitwarden_license/src/app/providers/providers-layout.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { Provider } from 'jslib-common/models/domain/provider'; @@ -14,7 +14,7 @@ export class ProvidersLayoutComponent { provider: Provider; private providerId: string; - constructor(private route: ActivatedRoute, private userService: UserService) { } + constructor(private route: ActivatedRoute, private providerService: ProviderService) { } ngOnInit() { document.body.classList.remove('layout_frontend'); @@ -25,7 +25,7 @@ export class ProvidersLayoutComponent { } async load() { - this.provider = await this.userService.getProvider(this.providerId); + this.provider = await this.providerService.get(this.providerId); } get showMenuBar() { diff --git a/bitwarden_license/src/app/providers/providers.module.ts b/bitwarden_license/src/app/providers/providers.module.ts index 9eddcd24..378ad0d2 100644 --- a/bitwarden_license/src/app/providers/providers.module.ts +++ b/bitwarden_license/src/app/providers/providers.module.ts @@ -7,7 +7,7 @@ import { ModalService } from 'jslib-angular/services/modal.service'; import { ProviderGuardService } from './services/provider-guard.service'; import { ProviderTypeGuardService } from './services/provider-type-guard.service'; -import { ProviderService } from './services/provider.service'; +import { WebProviderService } from './services/webProvider.service'; import { ProvidersLayoutComponent } from './providers-layout.component'; import { ProvidersRoutingModule } from './providers-routing.module'; @@ -57,7 +57,7 @@ import { OssModule } from 'src/app/oss.module'; UserAddEditComponent, ], providers: [ - ProviderService, + WebProviderService, ProviderGuardService, ProviderTypeGuardService, ], diff --git a/bitwarden_license/src/app/providers/services/provider-guard.service.ts b/bitwarden_license/src/app/providers/services/provider-guard.service.ts index 5f1c5fc4..0f3ab8cf 100644 --- a/bitwarden_license/src/app/providers/services/provider-guard.service.ts +++ b/bitwarden_license/src/app/providers/services/provider-guard.service.ts @@ -5,24 +5,27 @@ import { Router, } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { I18nService } from 'jslib-common/abstractions/i18n.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; @Injectable() export class ProviderGuardService implements CanActivate { - constructor(private userService: UserService, private router: Router, - private toasterService: ToasterService, private i18nService: I18nService) { } + constructor( + private router: Router, + private platformUtilsService: PlatformUtilsService, + private i18nService: I18nService, + private providerService: ProviderService, + ) { } async canActivate(route: ActivatedRouteSnapshot) { - const provider = await this.userService.getProvider(route.params.providerId); + const provider = await this.providerService.get(route.params.providerId); if (provider == null) { this.router.navigate(['/']); return false; } if (!provider.isProviderAdmin && !provider.enabled) { - this.toasterService.popAsync('error', null, this.i18nService.t('providerIsDisabled')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('providerIsDisabled')); this.router.navigate(['/']); return false; } diff --git a/bitwarden_license/src/app/providers/services/provider-type-guard.service.ts b/bitwarden_license/src/app/providers/services/provider-type-guard.service.ts index c2f9c3e4..9a104180 100644 --- a/bitwarden_license/src/app/providers/services/provider-type-guard.service.ts +++ b/bitwarden_license/src/app/providers/services/provider-type-guard.service.ts @@ -5,16 +5,16 @@ import { Router, } from '@angular/router'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { Permissions } from 'jslib-common/enums/permissions'; @Injectable() export class ProviderTypeGuardService implements CanActivate { - constructor(private userService: UserService, private router: Router) { } + constructor(private providerService: ProviderService, private router: Router) { } async canActivate(route: ActivatedRouteSnapshot) { - const provider = await this.userService.getProvider(route.params.providerId); + const provider = await this.providerService.get(route.params.providerId); const permissions = route.data == null ? null : route.data.permissions as Permissions[]; if ( diff --git a/bitwarden_license/src/app/providers/services/provider.service.ts b/bitwarden_license/src/app/providers/services/webProvider.service.ts similarity index 97% rename from bitwarden_license/src/app/providers/services/provider.service.ts rename to bitwarden_license/src/app/providers/services/webProvider.service.ts index 2f60fffd..1dc1ec34 100644 --- a/bitwarden_license/src/app/providers/services/provider.service.ts +++ b/bitwarden_license/src/app/providers/services/webProvider.service.ts @@ -7,7 +7,7 @@ import { SyncService } from 'jslib-common/abstractions/sync.service'; import { ProviderAddOrganizationRequest } from 'jslib-common/models/request/provider/providerAddOrganizationRequest'; @Injectable() -export class ProviderService { +export class WebProviderService { constructor(private cryptoService: CryptoService, private syncService: SyncService, private apiService: ApiService) {} async addOrganizationToProvider(providerId: string, organizationId: string) { diff --git a/bitwarden_license/src/app/providers/settings/account.component.ts b/bitwarden_license/src/app/providers/settings/account.component.ts index 7e26eed4..551f9b11 100644 --- a/bitwarden_license/src/app/providers/settings/account.component.ts +++ b/bitwarden_license/src/app/providers/settings/account.component.ts @@ -1,6 +1,5 @@ import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; @@ -26,9 +25,8 @@ export class AccountComponent { private providerId: string; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private route: ActivatedRoute, - private syncService: SyncService, private platformUtilsService: PlatformUtilsService, - private logService: LogService) { } + private route: ActivatedRoute, private syncService: SyncService, + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { this.selfHosted = this.platformUtilsService.isSelfHost(); @@ -54,7 +52,7 @@ export class AccountComponent { return this.syncService.fullSync(true); }); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('providerUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('providerUpdated')); } catch (e) { this.logService.error(`Handled exception: ${e}`); } diff --git a/bitwarden_license/src/app/providers/settings/settings.component.ts b/bitwarden_license/src/app/providers/settings/settings.component.ts index 0b8f2820..c57abaa4 100644 --- a/bitwarden_license/src/app/providers/settings/settings.component.ts +++ b/bitwarden_license/src/app/providers/settings/settings.component.ts @@ -2,19 +2,19 @@ import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; @Component({ selector: 'provider-settings', templateUrl: 'settings.component.html', }) export class SettingsComponent { - constructor(private route: ActivatedRoute, private userService: UserService, + constructor(private route: ActivatedRoute, private providerService: ProviderService, private platformUtilsService: PlatformUtilsService) { } ngOnInit() { this.route.parent.params.subscribe(async params => { - const provider = await this.userService.getProvider(params.providerId); + const provider = await this.providerService.get(params.providerId); }); } } diff --git a/bitwarden_license/src/app/providers/setup/setup.component.ts b/bitwarden_license/src/app/providers/setup/setup.component.ts index edad48ac..e343a1fd 100644 --- a/bitwarden_license/src/app/providers/setup/setup.component.ts +++ b/bitwarden_license/src/app/providers/setup/setup.component.ts @@ -6,10 +6,6 @@ import { ActivatedRoute, Router, } from '@angular/router'; -import { - Toast, - ToasterService, -} from 'angular2-toaster'; import { first } from 'rxjs/operators'; @@ -18,6 +14,7 @@ import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { ValidationService } from 'jslib-angular/services/validation.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; import { ProviderSetupRequest } from 'jslib-common/models/request/provider/providerSetupRequest'; @@ -36,7 +33,7 @@ export class SetupComponent implements OnInit { name: string; billingEmail: string; - constructor(private router: Router, private toasterService: ToasterService, + constructor(private router: Router, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private route: ActivatedRoute, private cryptoService: CryptoService, private apiService: ApiService, private syncService: SyncService, private validationService: ValidationService) { } @@ -47,13 +44,8 @@ export class SetupComponent implements OnInit { const error = qParams.providerId == null || qParams.email == null || qParams.token == null; if (error) { - const toast: Toast = { - type: 'error', - title: null, - body: this.i18nService.t('emergencyInviteAcceptFailed'), - timeout: 10000, - }; - this.toasterService.popAsync(toast); + this.platformUtilsService.showToast('error', null, this.i18nService.t('emergencyInviteAcceptFailed'), + { timeout: 10000 }); this.router.navigate(['/']); return; } @@ -92,7 +84,7 @@ export class SetupComponent implements OnInit { request.key = key; const provider = await this.apiService.postProviderSetup(this.providerId, request); - this.toasterService.popAsync('success', null, this.i18nService.t('providerSetup')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('providerSetup')); await this.syncService.fullSync(true); this.router.navigate(['/providers', provider.id]); diff --git a/bitwarden_license/webpack.config.js b/bitwarden_license/webpack.config.js index 44dfe325..2be18bb6 100644 --- a/bitwarden_license/webpack.config.js +++ b/bitwarden_license/webpack.config.js @@ -1,9 +1,9 @@ -const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin; +const { AngularWebpackPlugin } = require('@ngtools/webpack'); const webpackConfig = require('../webpack.config'); webpackConfig.entry['app/main'] = './bitwarden_license/src/app/main.ts'; -webpackConfig.plugins[webpackConfig.plugins.length -1] = new AngularCompilerPlugin({ +webpackConfig.plugins[webpackConfig.plugins.length -1] = new AngularWebpackPlugin({ tsConfigPath: 'tsconfig.json', entryModule: 'bitwarden_license/src/app/app.module#AppModule', sourceMap: true, diff --git a/config/base.json b/config/base.json index 48ccb339..cef2a056 100644 --- a/config/base.json +++ b/config/base.json @@ -7,6 +7,6 @@ "buttonAction": "https://www.sandbox.paypal.com/cgi-bin/webscr" }, "dev": { - "allowedHosts": [] + "allowedHosts": "auto" } } diff --git a/config/self-hosted.json b/config/selfhosted.json similarity index 100% rename from config/self-hosted.json rename to config/selfhosted.json diff --git a/jslib b/jslib index d02fcd08..512c5c28 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit d02fcd082edd8f94cff30d057644540eb6ccde87 +Subproject commit 512c5c283745c0e2aedaa17fc5d386c60d622064 diff --git a/package-lock.json b/package-lock.json index ab14640e..a29ce7ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,26 @@ { "name": "bitwarden-web", - "version": "2.24.4", + "version": "2.25.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bitwarden-web", - "version": "2.24.4", + "version": "2.25.0", "hasInstallScript": true, "license": "GPL-3.0", "dependencies": { + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@angular/router": "^12.2.13", "@bitwarden/jslib-angular": "file:jslib/angular", "@bitwarden/jslib-common": "file:jslib/common", - "angular2-toaster": "11.0.1", "bootstrap": "4.6.0", "braintree-web-drop-in": "1.30.1", "browser-hrtime": "^1.1.8", @@ -21,46 +29,51 @@ "font-awesome": "4.7.0", "jquery": "3.6.0", "ngx-infinite-scroll": "^10.0.1", + "ngx-toastr": "14.1.4", "popper.js": "1.16.1", "qrious": "4.0.2", + "rxjs": "^7.4.0", "sweetalert2": "^10.16.6", "webcrypto-shim": "0.1.7", "whatwg-fetch": "3.6.2" }, "devDependencies": { - "@angular/compiler-cli": "^11.2.11", - "@ngtools/webpack": "^11.2.10", + "@angular/compiler-cli": "^12.2.13", + "@ngtools/webpack": "^12.2.13", "@types/jquery": "^3.5.5", - "@types/node": "^14.17.2", + "@types/node": "^16.11.12", "@types/webcrypto": "^0.0.28", - "@types/webpack": "^4.4.27", - "clean-webpack-plugin": "^3.0.0", - "copy-webpack-plugin": "^6.4.0", + "@types/webpack": "^5.28.0", + "buffer": "^6.0.3", + "clean-webpack-plugin": "^4.0.0", + "copy-webpack-plugin": "^10.0.0", "cross-env": "^7.0.3", - "css-loader": "^5.2.3", - "del": "^6.0.0", - "file-loader": "^6.2.0", + "css-loader": "^6.5.1", "gh-pages": "^3.1.0", - "html-loader": "^1.3.2", + "html-loader": "^3.0.1", "html-webpack-injector": "1.1.4", - "html-webpack-plugin": "^4.5.1", - "mini-css-extract-plugin": "^1.5.0", + "html-webpack-plugin": "^5.5.0", + "husky": "^7.0.4", + "lint-staged": "^12.1.2", + "mini-css-extract-plugin": "^2.4.5", + "prettier": "2.5.1", + "process": "^0.11.10", "sass": "^1.32.10", - "sass-loader": "^10.1.1", - "style-loader": "^2.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^4.2.3", - "ts-loader": "^8.1.0", + "sass-loader": "^12.4.0", + "style-loader": "^3.3.1", + "terser-webpack-plugin": "^5.2.5", + "ts-loader": "^9.2.5", "tslint": "^6.1.3", "tslint-loader": "^3.5.4", - "typescript": "4.1.5", - "webpack": "^4.46.0", - "webpack-cli": "^4.6.0", - "webpack-dev-server": "^3.11.2" + "typescript": "4.3.5", + "util": "^0.12.4", + "webpack": "^5.64.4", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.6.0" }, "engines": { - "node": "~14", - "npm": "~7" + "node": "~16", + "npm": "~8" } }, "jslib/angular": { @@ -68,25 +81,25 @@ "version": "0.0.0", "license": "GPL-3.0", "dependencies": { - "@angular/animations": "^11.2.11", - "@angular/cdk": "^11.2.10", - "@angular/common": "^11.2.11", - "@angular/compiler": "^11.2.11", - "@angular/core": "^11.2.11", - "@angular/forms": "^11.2.11", - "@angular/platform-browser": "^11.2.11", - "@angular/platform-browser-dynamic": "^11.2.11", - "@angular/router": "^11.2.11", + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@angular/router": "^12.2.13", "@bitwarden/jslib-common": "file:../common", "duo_web_sdk": "git+https://github.com/duosecurity/duo_web_sdk.git", - "rxjs": "6.6.7", + "rxjs": "^7.4.0", "tldjs": "^2.3.1", "zone.js": "0.11.4" }, "devDependencies": { "@types/duo_web_sdk": "^2.7.1", "rimraf": "^3.0.2", - "typescript": "4.1.5" + "typescript": "4.3.5" } }, "jslib/common": { @@ -101,116 +114,81 @@ "lunr": "^2.3.9", "node-forge": "^0.10.0", "papaparse": "^5.3.0", - "rxjs": "6.6.7", + "rxjs": "^7.4.0", "tldjs": "^2.3.1", "zxcvbn": "^4.4.2" }, "devDependencies": { "@types/lunr": "^2.3.3", - "@types/node": "^14.17.1", + "@types/node": "^16.11.12", "@types/node-forge": "^0.9.7", "@types/papaparse": "^5.2.5", "@types/tldjs": "^2.3.0", "@types/zxcvbn": "^4.4.1", "rimraf": "^3.0.2", - "typescript": "4.1.5" + "typescript": "4.3.5" } }, - "node_modules/@angular-devkit/core": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.14.tgz", - "integrity": "sha512-Ad1fHqLxDwhkQgLPqq9i+G65NSOoIHXQx7ILcSPACKurV3XLS1RO9BgP/BDaqHAG+WslUAPbMStaTzzPm+9dNw==", - "dev": true, - "dependencies": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@angular/animations": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.14.tgz", - "integrity": "sha512-Heq/nNrCmb3jbkusu+BQszOecfFI/31Oxxj+CDQkqqYpBcswk6bOJLoEE472o+vmgxaXbgeflU9qbIiCQhpMFA==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.14.tgz", + "integrity": "sha512-1BR5u32auVePvXNNP96DB2008V+Ku0OGqeZQl2h4XA9xzES/Zk5WllIJZXqRmWMRBVARfXsfb0RdMty9gcaVjA==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/core": "11.2.14" + "@angular/core": "12.2.14" } }, "node_modules/@angular/cdk": { - "version": "11.2.13", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.13.tgz", - "integrity": "sha512-FkE4iCwoLbQxLDUOjV1I7M/6hmpyb7erAjEdWgch7nGRNxF1hqX5Bqf1lvLFKPNCbx5NRI5K7YVAdIUQUR8vug==", + "version": "12.2.13", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", + "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" }, "optionalDependencies": { "parse5": "^5.0.0" }, "peerDependencies": { - "@angular/common": "^11.0.0 || ^12.0.0-0", - "@angular/core": "^11.0.0 || ^12.0.0-0" + "@angular/common": "^12.0.0 || ^13.0.0-0", + "@angular/core": "^12.0.0 || ^13.0.0-0", + "rxjs": "^6.5.3 || ^7.0.0" } }, "node_modules/@angular/common": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.2.14.tgz", - "integrity": "sha512-ZSLV/3j7eCTyLf/8g4yBFLWySjiLz3vLJAGWscYoUpnJWMnug1VRu6zoF/COxCbtORgE+Wz6K0uhfS6MziBGVw==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.14.tgz", + "integrity": "sha512-ffYUYdwZETmFJw0AcWY30WsaWBhJxj/zSmFXWjgEGEGZH56zwbbNwfMZOYZ1jz4haAVxGu+TdXsOl2yMGzN7jQ==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/core": "11.2.14", - "rxjs": "^6.5.3" + "@angular/core": "12.2.14", + "rxjs": "^6.5.3 || ^7.0.0" } }, "node_modules/@angular/compiler": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.2.14.tgz", - "integrity": "sha512-XBOK3HgA+/y6Cz7kOX4zcJYmgJ264XnfcbXUMU2cD7Ac+mbNhLPKohWrEiSWalfcjnpf5gRfufQrQP7lpAGu0A==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.14.tgz", + "integrity": "sha512-dwmZi+n66IUzRFlGWu9mjXq170ZEsaDvlNLZzaPgs6vZTa4Kt7PWvIF/Y7TMvnVv/uqNG6kOhfmOkf6rfz1Gjg==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.2.14.tgz", - "integrity": "sha512-A7ltnCp03/EVqK/Q3tVUDsokgz5GHW3dSPGl0Csk7Ys5uBB9ibHTmVt4eiXA4jt0+6Bk+mKxwe5BEDqLvwYFAg==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.14.tgz", + "integrity": "sha512-EktEOF2xnuMsUyanXjZw3hyn7w97NX9h8LJ3O9l27secbjYXhyrao5bmrMILdDTEJNeZSC/OuCga1pvdaJTYmg==", "dev": true, "dependencies": { "@babel/core": "^7.8.6", @@ -218,16 +196,15 @@ "canonical-path": "1.0.0", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", - "dependency-graph": "^0.7.2", - "fs-extra": "4.0.2", + "dependency-graph": "^0.11.0", "magic-string": "^0.25.0", "minimist": "^1.2.0", "reflect-metadata": "^0.1.2", - "semver": "^6.3.0", + "semver": "^7.0.0", "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", - "tslib": "^2.0.0", - "yargs": "^16.2.0" + "tslib": "^2.2.0", + "yargs": "^17.0.0" }, "bin": { "ivy-ngcc": "ngcc/main-ivy-ngcc.js", @@ -236,50 +213,59 @@ "ngcc": "ngcc/main-ngcc.js" }, "engines": { - "node": ">=10.0" + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/compiler": "11.2.14", - "typescript": ">=4.0 <4.2" + "@angular/compiler": "12.2.14", + "typescript": ">=4.2.3 <4.4" } }, "node_modules/@angular/core": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.2.14.tgz", - "integrity": "sha512-vpR4XqBGitk1Faph37CSpemwIYTmJ3pdIVNoHKP6jLonpWu+0azkchf0f7oD8/2ivj2F81opcIw0tcsy/D/5Vg==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.14.tgz", + "integrity": "sha512-dlVk7yqUHL2R/eCmM8LsWuxhEBfzg0y1zHt0UqCuFwlCoiw+IG4HFy4OlZEUw9NUEZJSv0aDv3sWqxLkvK5vvg==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "rxjs": "^6.5.3", - "zone.js": "^0.10.2 || ^0.11.3" + "rxjs": "^6.5.3 || ^7.0.0", + "zone.js": "~0.11.4" } }, "node_modules/@angular/forms": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.2.14.tgz", - "integrity": "sha512-4LWqY6KEIk1AZQFnk+4PJSOCamlD4tumuVN06gO4D0dZo9Cx+GcvW6pM6N0CPubRvPs3sScCnu20WT11HNWC1w==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.14.tgz", + "integrity": "sha512-/9/gSJUBXVRVdRnzgJnALAQZYJATuGDMkFC9ms9DEMG4PMAhe9x4if1lJjN6noz5RAom3qNuVBNWaYAPUxlcBQ==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "11.2.14", - "@angular/core": "11.2.14", - "@angular/platform-browser": "11.2.14", - "rxjs": "^6.5.3" + "@angular/common": "12.2.14", + "@angular/core": "12.2.14", + "@angular/platform-browser": "12.2.14", + "rxjs": "^6.5.3 || ^7.0.0" } }, "node_modules/@angular/platform-browser": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.2.14.tgz", - "integrity": "sha512-fb7b7ss/gRoP8wLAN17W62leMgjynuyjEPU2eUoAAazsG9f2cgM+z3rK29GYncDVyYQxZUZYnjSqvL6GSXx86A==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.14.tgz", + "integrity": "sha512-fWcE2rnJ3ZCISa1oPfsIDV7FBZBoLFEdDuMXAiDYqDPKvF/E5U5nHrS+K4SlLAi094bMobtTOReNWl/Ienniyw==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/animations": "11.2.14", - "@angular/common": "11.2.14", - "@angular/core": "11.2.14" + "@angular/animations": "12.2.14", + "@angular/common": "12.2.14", + "@angular/core": "12.2.14" }, "peerDependenciesMeta": { "@angular/animations": { @@ -288,69 +274,75 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.14.tgz", - "integrity": "sha512-TWTPdFs6iBBcp+/YMsgCRQwdHpWGq8KjeJDJ2tfatGgBD3Gqt2YaHOMST1zPW6RkrmupytTejuVqXzeaKWFxuw==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.14.tgz", + "integrity": "sha512-0NPF7mS91Tct8rBmOLZPmnLSuS4kbLHXo6eTgrg80OC0vlzBiQwGDVW4X3KncCoX9CpevaGJCdSMc+uPNsFOUQ==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "11.2.14", - "@angular/compiler": "11.2.14", - "@angular/core": "11.2.14", - "@angular/platform-browser": "11.2.14" + "@angular/common": "12.2.14", + "@angular/compiler": "12.2.14", + "@angular/core": "12.2.14", + "@angular/platform-browser": "12.2.14" } }, "node_modules/@angular/router": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.2.14.tgz", - "integrity": "sha512-3aYBmj+zrEL9yf/ntIQxHIYaWShZOBKP3U07X2mX+TPMpGlvHDnR7L6bWhQVZwewzMMz7YVR16ldg50IFuAlfA==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.14.tgz", + "integrity": "sha512-yP5grSnqBvc4vNhtYdcxDgDYIebUKs5f0xyFkUJM5030UnQ0CV45tBsSxHMkQbPZucIfOuxpRy8xy5+4GizuwQ==", "dependencies": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "11.2.14", - "@angular/core": "11.2.14", - "@angular/platform-browser": "11.2.14", - "rxjs": "^6.5.3" + "@angular/common": "12.2.14", + "@angular/core": "12.2.14", + "@angular/platform-browser": "12.2.14", + "rxjs": "^6.5.3 || ^7.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.15.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", - "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.5", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -366,6 +358,15 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/core/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -376,12 +377,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -399,14 +400,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", + "browserslist": "^4.17.5", "semver": "^6.3.0" }, "engines": { @@ -416,133 +417,142 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz", - "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "dependencies": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -567,26 +577,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", "dev": true, "dependencies": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -595,9 +605,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", - "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -607,32 +617,32 @@ } }, "node_modules/@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -641,12 +651,12 @@ } }, "node_modules/@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -710,20 +720,14 @@ "integrity": "sha512-UIrJB+AfKU0CCfbMoWrsGpd2D/hBpY/SGgFI6WRHPOwhaZ3g9rz1weiJ6eb6L9KgVyunT7s2tckcPkbHw+NzeA==" }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true, "engines": { "node": ">=10.0.0" } }, - "node_modules/@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true - }, "node_modules/@microsoft/signalr": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-5.0.10.tgz", @@ -745,25 +749,28 @@ "msgpack5": "^4.5.0" } }, - "node_modules/@ngtools/webpack": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.14.tgz", - "integrity": "sha512-6q57tEWtUJRsxfTKE19L20iXvNesfVy8hrVdyzVk64DZQh0lIl4/xZT4d5bJCWOuQQDaAeZK4YbEFcYJn7k1yw==", - "dev": true, + "node_modules/@microsoft/signalr/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dependencies": { - "@angular-devkit/core": "11.2.14", - "enhanced-resolve": "5.7.0", - "webpack-sources": "2.2.0" - }, + "async-limiter": "~1.0.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.14.tgz", + "integrity": "sha512-dla6JgLWKAo7k4K3O+ouo104wO3BFs+MIOCXoGF4Lp/1pKPSt0orYmvZFBkDZPmyBFYRw9wpL2WHnAAyip40Cw==", + "dev": true, "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^11.0.0 || ^11.2.0-next", - "typescript": "~4.0.0 || ~4.1.0", - "webpack": "^4.0.0" + "@angular/compiler-cli": "^12.0.0", + "typescript": "~4.2.3 || ~4.3.2", + "webpack": "^5.30.0" } }, "node_modules/@nodelib/fs.scandir": { @@ -801,44 +808,6 @@ "node": ">= 8" } }, - "node_modules/@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@scarf/scarf": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz", @@ -851,10 +820,36 @@ "integrity": "sha512-DePanZjFww36yGSxXwC8B3AsjrrDuPxEcufeh4gTqVsUMpCYByxjX4PERiYZdW0typzKSt9E4I14PPp+PrSIQA==", "dev": true }, + "node_modules/@types/eslint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", + "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, "node_modules/@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -862,15 +857,24 @@ } }, "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, + "node_modules/@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/jquery": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.6.tgz", - "integrity": "sha512-SmgCQRzGPId4MZQKDj9Hqc6kSXFNWZFHpELkyK8AQhf8Zr6HKfCzFv9ZC1Fv3FyQttJZOlap3qYb12h61iZAIg==", + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.9.tgz", + "integrity": "sha512-B8pDk+sH/tSv/HKdx6EQER6BfUOb2GtKs0LOmozziS4h7cbe8u/eYySfUAeTwD+J09SqV3man7AMWIA5mgzCBA==", "dev": true, "dependencies": { "@types/sizzle": "*" @@ -895,9 +899,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz", - "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==", + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", "dev": true }, "node_modules/@types/node-forge": { @@ -910,47 +914,32 @@ } }, "node_modules/@types/papaparse": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.2.6.tgz", - "integrity": "sha512-xGKSd0UTn58N1h0+zf8mW863Rv8BvXcGibEgKFtBIXZlcDXAmX/T4RdDO2mwmrmOypUDt5vRgo2v32a78JdqUA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.1.tgz", + "integrity": "sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, "node_modules/@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, "node_modules/@types/tldjs": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/tldjs/-/tldjs-2.3.1.tgz", "integrity": "sha512-BQR04zLE0ve2eNrqxXw/Qp/f6LxvNrj/4A8ZgdQi3SzbBqxFhleI7N4DS/mSjDnODrUaEGgoWg4grAZR1kVj8w==", "dev": true }, - "node_modules/@types/uglify-js": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, "node_modules/@types/webcrypto": { "version": "0.0.28", "resolved": "https://registry.npmjs.org/@types/webcrypto/-/webcrypto-0.0.28.tgz", @@ -958,37 +947,14 @@ "dev": true }, "node_modules/@types/webpack": { - "version": "4.41.31", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", - "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w==", "dev": true, "dependencies": { "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" + "tapable": "^2.2.0", + "webpack": "^5" } }, "node_modules/@types/zxcvbn": { @@ -998,180 +964,187 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -1209,9 +1182,9 @@ } }, "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1220,6 +1193,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -1249,15 +1231,45 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, "peerDependencies": { - "ajv": ">=5.0.0" + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -1267,33 +1279,34 @@ "ajv": "^6.9.1" } }, - "node_modules/angular2-toaster": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/angular2-toaster/-/angular2-toaster-11.0.1.tgz", - "integrity": "sha512-IRXE5zujPMNOhckcp+Hk2n+UrKSrlAviz55wGvSd9ECrqsSRjgh148UEtgsqkcYQ8leKcybZ4d0lrueDuQofNA==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^11.0.0", - "@angular/compiler": "^11.0.0", - "@angular/core": "^11.0.0", - "rxjs": "^6.5.3" - } - }, "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" @@ -1303,12 +1316,12 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -1336,12 +1349,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1351,33 +1358,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -1402,65 +1382,13 @@ "node": ">=0.10.0" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/async": { @@ -1472,27 +1400,21 @@ "lodash": "^4.17.14" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "node_modules/async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "bin": { - "atob": "bin/atob.js" - }, "engines": { - "node": ">= 4.5.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/babel-runtime": { @@ -1517,36 +1439,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1599,16 +1491,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", @@ -1618,18 +1500,6 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -1767,99 +1637,38 @@ "promise-polyfill": "8.2.0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, "node_modules/browser-hrtime": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/browser-hrtime/-/browser-hrtime-1.1.8.tgz", "integrity": "sha512-kzXheikaJsBtzUBlyVtPIY5r0soQePzjwVwT4IlDpU2RvfB5Py52gpU98M77rgqMCheoSSZvrcrdj3t6cZ3suA==" }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", "dev": true, "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">= 6" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -1874,49 +1683,10 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, + ], "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz", - "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001259", - "electron-to-chromium": "^1.3.846", - "escalade": "^3.1.1", - "nanocolors": "^0.1.5", - "node-releases": "^1.1.76" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "node_modules/buffer-from": { @@ -1931,12 +1701,6 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -1946,12 +1710,6 @@ "node": ">=0.10.0" } }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -1961,55 +1719,6 @@ "node": ">= 0.8" } }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -2033,19 +1742,10 @@ "tslib": "^2.0.3" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001261", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001261.tgz", - "integrity": "sha512-vM8D9Uvp7bHIN0fZ2KQ4wnmYFpJo/Etb4Vwsuc+ka0tfGDHvOPrFm6S/7CCNLSOkAUjenT2HnUPESdOIL91FaA==", + "version": "1.0.30001285", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz", + "integrity": "sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q==", "dev": true, "funding": { "type": "opencollective", @@ -2101,15 +1801,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -2119,124 +1810,16 @@ "node": ">=6.0" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", "dev": true, "dependencies": { "source-map": "~0.6.0" }, "engines": { - "node": ">= 4.0" + "node": ">= 10.0" } }, "node_modules/clean-stack": { @@ -2249,19 +1832,18 @@ } }, "node_modules/clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", "dev": true, "dependencies": { - "@types/webpack": "^4.4.31", "del": "^4.1.1" }, "engines": { - "node": ">=8.9.0" + "node": ">=10.0.0" }, "peerDependencies": { - "webpack": "*" + "webpack": ">=4.0.0 <6.0.0" } }, "node_modules/clean-webpack-plugin/node_modules/array-union": { @@ -2340,6 +1922,96 @@ "rimraf": "bin.js" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", + "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "dev": true, + "dependencies": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2351,27 +2023,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -2386,19 +2037,6 @@ "node": ">=6" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2415,9 +2053,9 @@ "dev": true }, "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "node_modules/commander": { @@ -2432,12 +2070,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -2489,21 +2121,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -2513,18 +2130,6 @@ "node": ">=0.8" } }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, "node_modules/content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -2570,96 +2175,143 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.0.0.tgz", + "integrity": "sha512-tuCVuFMBbRsb7IH0q1CUb50/Skv+7a6c7DJ+xi4fAbOzNLTYVMUTPnf8uGvKPtmqTvzYBrfEFo7YgP4TsUWmtg==", "dev": true, "dependencies": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.20.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", + "dev": true, + "dependencies": { + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/core-js": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.1.tgz", - "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz", + "integrity": "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -2671,49 +2323,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/credit-card-type": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz", @@ -2751,69 +2360,30 @@ "node": ">= 8" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", + "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", "semver": "^7.3.5" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "webpack": "^5.0.0" } }, "node_modules/css-select": { @@ -2833,9 +2403,9 @@ } }, "node_modules/css-select/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -2848,9 +2418,9 @@ } }, "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, "engines": { "node": ">= 6" @@ -2871,12 +2441,6 @@ "node": ">=4" } }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, "node_modules/date-input-polyfill": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/date-input-polyfill/-/date-input-polyfill-2.14.0.tgz", @@ -2886,9 +2450,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2902,24 +2466,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -2938,134 +2484,24 @@ } }, "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "execa": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">= 10" } }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node": ">=8" } }, "node_modules/define-properties": { @@ -3080,19 +2516,6 @@ "node": ">= 0.4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -3125,24 +2548,14 @@ } }, "node_modules/dependency-graph": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, "engines": { "node": ">= 0.6.0" } }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -3164,23 +2577,6 @@ "node": ">=0.3.1" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3242,9 +2638,9 @@ } }, "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -3256,16 +2652,6 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, "node_modules/domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", @@ -3278,21 +2664,6 @@ } ] }, - "node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -3308,9 +2679,9 @@ } }, "node_modules/domutils/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -3337,18 +2708,6 @@ "resolved": "git+ssh://git@github.com/duosecurity/duo_web_sdk.git#378e855ce4a1de1d1b2f7fd60465e564b3e9fbda", "license": "SEE LICENSE IN LICENSE" }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3356,30 +2715,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.851", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.851.tgz", - "integrity": "sha512-Ak970eGtRSoHTaJkoDjdkeXYetbwm5Bl9pN/nPOQ3QzLfw1EWRjReOlWUra6o58SVgxfpwOT9U2P1BUXoJ57dw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.12.tgz", + "integrity": "sha512-zjfhG9Us/hIy8AlQ5OzfbR/C4aBv1Dg/ak4GX35CELYlJ4tDAtoEcQivXvyBdqdNQ+R6PhlgQqV8UNPJmhkJog==", "dev": true }, "node_modules/email-addresses": { @@ -3412,19 +2750,10 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3434,13 +2763,16 @@ "node": ">=10.13.0" } }, - "node_modules/enhanced-resolve/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, "engines": { - "node": ">=6" + "node": ">=8.6" } }, "node_modules/entities": { @@ -3464,22 +2796,10 @@ "node": ">=4" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -3493,7 +2813,9 @@ "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", + "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -3508,6 +2830,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3555,16 +2883,16 @@ } }, "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" } }, "node_modules/esprima": { @@ -3593,9 +2921,9 @@ } }, "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -3653,16 +2981,6 @@ "node": ">=0.12.0" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3686,143 +3004,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -3885,71 +3066,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4014,39 +3130,6 @@ "tough-cookie": "^2.3.3" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -4148,20 +3231,10 @@ "node": ">=8" } }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", "dev": true, "funding": [ { @@ -4186,14 +3259,11 @@ "node": ">=0.10.3" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true }, "node_modules/forwarded": { "version": "0.2.0", @@ -4204,18 +3274,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/framebus": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/framebus/-/framebus-5.1.2.tgz", @@ -4233,50 +3291,25 @@ "node": ">= 0.6" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, "node_modules/fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6 <7 || >=8" } }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", @@ -4364,15 +3397,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gh-pages": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", @@ -4407,20 +3431,6 @@ "node": ">=0.10.0" } }, - "node_modules/gh-pages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "node_modules/gh-pages/node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -4478,6 +3488,12 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -4576,127 +3592,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -4706,17 +3601,6 @@ "he": "bin/he" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -4730,61 +3614,65 @@ } }, "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", "dev": true }, "node_modules/html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-3.0.1.tgz", + "integrity": "sha512-90Sxg9FhTkQEzmmHT2KOAQniTZgC72aifcfR0fZsuo1PJz0K4EXiTwxejTUombF8XShLj5RaZKYsUJhxR6G2dA==", "dev": true, "dependencies": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "html-minifier-terser": "^6.0.2", + "parse5": "^6.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" } }, + "node_modules/html-loader/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", "he": "^1.2.0", - "param-case": "^3.0.3", + "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^4.6.3" + "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=12" } }, "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 12" } }, "node_modules/html-webpack-injector": { @@ -4794,64 +3682,26 @@ "dev": true }, "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "engines": { - "node": ">=6.9" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/html-webpack-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" + "webpack": "^5.20.0" } }, "node_modules/http-deceiver": { @@ -4883,9 +3733,9 @@ "dev": true }, "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", "dev": true }, "node_modules/http-proxy": { @@ -4903,156 +3753,21 @@ } }, "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=12.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5062,6 +3777,21 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5106,25 +3836,25 @@ } ] }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, "engines": { "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -5137,15 +3867,6 @@ "node": ">=8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -5155,12 +3876,6 @@ "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5181,19 +3896,6 @@ "resolved": "https://registry.npmjs.org/inject-stylesheet/-/inject-stylesheet-4.0.0.tgz", "integrity": "sha512-EULSmN+gdAMR4w9kk57HJ1Lz6Xp+9OGgTbxpNV2QSncG+LWlihH1d/Clm8ui6b+LAqmIVcrtWfwDrMEgDiUpjg==" }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -5223,43 +3925,13 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, "node_modules/is-arguments": { @@ -5318,12 +3990,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -5337,9 +4003,9 @@ } }, "node_modules/is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -5348,18 +4014,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -5375,30 +4029,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -5419,10 +4062,25 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz", - "integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -5509,6 +4167,18 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5537,6 +4207,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -5579,22 +4258,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/isarray": { @@ -5618,14 +4322,14 @@ } }, "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz", + "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" @@ -5641,15 +4345,18 @@ } }, "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jquery": { @@ -5700,12 +4407,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -5730,12 +4431,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -5746,35 +4441,172 @@ } }, "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true, "engines": { "node": ">= 8" } }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", "dev": true, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=10" } }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "node_modules/lint-staged": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.2.tgz", + "integrity": "sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.3", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.0", + "string-argv": "^0.3.1", + "supports-color": "^9.0.2", + "yaml": "^1.10.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=8.9.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", + "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" } }, "node_modules/locate-path": { @@ -5795,17 +4627,86 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=10" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/lower-case": { @@ -5858,36 +4759,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "bin": { + "semver": "bin/semver.js" } }, "node_modules/media-typer": { @@ -5899,14 +4777,16 @@ "node": ">= 0.6" } }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "node_modules/memfs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", + "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", "dev": true, "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/merge-descriptors": { @@ -5952,25 +4832,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -5984,35 +4845,26 @@ } }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "dependencies": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -6023,34 +4875,75 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.5.tgz", + "integrity": "sha512-oEIhRucyn1JbT/1tU2BhnwO6ft1jjH1iCX9Gc59WFMg0n5773rQU0oyQ0zzeYFFuBfONaRbQJyGoPtuNseMxjA==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" + "webpack": "^5.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/minimalistic-assert": { @@ -6059,12 +4952,6 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -6083,151 +4970,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6264,23 +5006,10 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "node_modules/nanocolors": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", - "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==", - "dev": true - }, "node_modules/nanoid": { - "version": "3.1.28", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz", - "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -6289,28 +5018,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6336,11 +5043,18 @@ "opencollective-postinstall": "^2.0.2" } }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "node_modules/ngx-toastr": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.1.4.tgz", + "integrity": "sha512-t1/9r+pOXm65LIl0gevvFat6XIl0g3tMA8UOArFjI4ta/nGwDe/14J/f4cZvOBDcomedvjvGAWi+d/2URdSTBg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/common": ">=12.0.0-0", + "@angular/core": ">=12.0.0-0", + "@angular/platform-browser": ">=12.0.0-0" + } }, "node_modules/no-case": { "version": "3.0.4", @@ -6353,9 +5067,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -6371,47 +5085,10 @@ "node": ">= 6.0.0" } }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, "node_modules/node-releases": { - "version": "1.1.76", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz", - "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "node_modules/normalize-path": { @@ -6456,95 +5133,10 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6575,18 +5167,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -6605,35 +5185,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -6685,6 +5236,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/opencollective-postinstall": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", @@ -6693,18 +5261,6 @@ "opencollective-postinstall": "index.js" } }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -6713,36 +5269,6 @@ "url-parse": "^1.4.3" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -6786,15 +5312,16 @@ } }, "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "dependencies": { - "retry": "^0.12.0" + "@types/retry": "^0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-try": { @@ -6806,28 +5333,11 @@ "node": ">=6" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, "node_modules/papaparse": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.1.tgz", "integrity": "sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA==" }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -6838,19 +5348,6 @@ "tslib": "^2.0.3" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "node_modules/parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -6876,27 +5373,6 @@ "tslib": "^2.0.3" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6951,21 +5427,11 @@ "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.0", @@ -7066,24 +5532,15 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { - "version": "8.3.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz", - "integrity": "sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA==", + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", "dev": true, "dependencies": { - "nanocolors": "^0.2.2", - "nanoid": "^3.1.25", - "source-map-js": "^0.6.2" + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7166,25 +5623,31 @@ } }, "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postcss/node_modules/nanocolors": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.11.tgz", - "integrity": "sha512-83ttyvfJj66dKMadWfBkEUOEDFfRc8FpzTJvh1MySR/pzWFmFikTQZGOV6kHZRz7yR/heiQ1y/MHBBN5P/e7WQ==", - "dev": true + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } }, "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "dependencies": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^3.0.0" } }, "node_modules/process": { @@ -7201,12 +5664,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "node_modules/promise-polyfill": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz", @@ -7225,68 +5682,20 @@ "node": ">= 0.10" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -7319,15 +5728,6 @@ "node": ">=0.4.x" } }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -7362,16 +5762,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -7419,14 +5809,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7462,19 +5844,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -7500,29 +5869,23 @@ "node": ">= 0.10" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" + "strip-ansi": "^6.0.1" } }, "node_modules/renderkid/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -7553,24 +5916,6 @@ "entities": "^2.0.0" } }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7580,11 +5925,14 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/requires-port": { "version": "1.0.0", @@ -7625,12 +5973,18 @@ "node": ">=8" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } }, "node_modules/restricted-input": { "version": "3.0.3", @@ -7640,19 +5994,10 @@ "@braintree/browser-detection": "^1.10.0" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "engines": { "node": ">= 4" @@ -7668,6 +6013,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7683,16 +6034,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7716,45 +6057,24 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "~2.1.0" } }, "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7762,12 +6082,13 @@ "dev": true }, "node_modules/sass": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.42.1.tgz", - "integrity": "sha512-/zvGoN8B7dspKc5mC6HlaygyCBRvnyzzgD5khiaCfglWztY99cYoiTUksVx11NlnemrcfH5CEaCpsUKoW0cQqg==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz", + "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==", "dev": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0" }, "bin": { "sass": "sass.js" @@ -7777,19 +6098,16 @@ } }, "node_modules/sass-loader": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.0.tgz", - "integrity": "sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, "dependencies": { "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" + "neo-async": "^2.6.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -7797,9 +6115,9 @@ }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "fibers": { @@ -7813,21 +6131,6 @@ } } }, - "node_modules/sass-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -7862,12 +6165,18 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { @@ -7916,9 +6225,9 @@ "dev": true }, "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -7999,73 +6308,12 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, "node_modules/setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -8114,9 +6362,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", - "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "node_modules/slash": { @@ -8128,243 +6376,57 @@ "node": ">=8" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "node": ">=12" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" + "engines": { + "node": ">=12" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "dependencies": { - "kind-of": "^3.2.0" + "engines": { + "node": ">=12" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "dependencies": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8375,43 +6437,24 @@ } }, "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -8462,132 +6505,12 @@ "node": ">= 6" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -8597,73 +6520,22 @@ "node": ">= 0.6" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "engines": { + "node": ">=0.6.19" + } }, "node_modules/string-width": { "version": "4.2.3", @@ -8679,27 +6551,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -8727,24 +6578,15 @@ } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-final-newline": { @@ -8769,23 +6611,19 @@ } }, "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/supports-color": { @@ -8809,79 +6647,18 @@ } }, "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dev": true, - "dependencies": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -8893,9 +6670,51 @@ }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } } }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { + "node_modules/terser-webpack-plugin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", + "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "dev": true, + "dependencies": { + "jest-worker": "^27.0.6", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", @@ -8904,25 +6723,11 @@ "node": ">= 8" } }, - "node_modules/terser-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "node_modules/thunky": { "version": "1.1.0", @@ -8930,18 +6735,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tldjs": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.3.1.tgz", @@ -8959,12 +6752,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -8974,45 +6761,6 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -9064,23 +6812,22 @@ } }, "node_modules/ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", + "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" }, "peerDependencies": { "typescript": "*", - "webpack": "*" + "webpack": "^5.0.0" } }, "node_modules/ts-loader/node_modules/ansi-styles": { @@ -9132,20 +6879,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/ts-loader/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/ts-loader/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9155,34 +6888,6 @@ "node": ">=8" } }, - "node_modules/ts-loader/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-loader/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9345,11 +7050,17 @@ "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/type-is": { "version": "1.6.18", @@ -9364,16 +7075,10 @@ "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "node_modules/typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -9398,48 +7103,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -9458,64 +7121,6 @@ "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -9525,13 +7130,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -9557,22 +7155,18 @@ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "dependencies": { - "inherits": "2.0.3" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, "node_modules/util-deprecate": { @@ -9580,22 +7174,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -9612,21 +7190,14 @@ } }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9636,302 +7207,17 @@ "node": ">= 0.8" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/wbuf": { @@ -9954,40 +7240,41 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "node_modules/webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", + "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" }, "bin": { "webpack": "bin/webpack.js" }, "engines": { - "node": ">=6.11.5" + "node": ">=10.13.0" }, "funding": { "type": "opencollective", @@ -9996,30 +7283,26 @@ "peerDependenciesMeta": { "webpack-cli": { "optional": true - }, - "webpack-command": { - "optional": true } } }, "node_modules/webpack-cli": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.8.0.tgz", - "integrity": "sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.4", - "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.2", - "colorette": "^1.2.1", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "bin": { @@ -10046,42 +7329,6 @@ } } }, - "node_modules/webpack-cli/node_modules/@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/webpack-cli/node_modules/@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/webpack-cli/node_modules/@webpack-cli/serve": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz", - "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/webpack-cli/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -10091,54 +7338,122 @@ "node": ">= 10" } }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "node_modules/webpack-dev-middleware": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz", + "integrity": "sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==", "dev": true, "dependencies": { - "ansi-html": "0.0.7", + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz", + "integrity": "sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", - "chokidar": "^2.1.8", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", + "default-gateway": "^6.0.3", + "del": "^6.0.0", "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^1.10.11", "serve-index": "^1.9.1", "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", + "strip-ansi": "^7.0.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" + "webpack-dev-middleware": "^5.2.1", + "ws": "^8.1.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 6.11.5" + "node": ">= 12.13.0" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^4.37.0 || ^5.0.0" }, "peerDependenciesMeta": { "webpack-cli": { @@ -10146,656 +7461,84 @@ } } }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack-dev-server/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/webpack-dev-server/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" + "fast-deep-equal": "^3.1.3" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "ajv": "^8.8.2" } }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/webpack-merge": { @@ -10811,450 +7554,15 @@ "node": ">=10.0.0" } }, - "node_modules/webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/webpack/node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/webpack/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/webpack/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/webpack/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -11323,11 +7631,25 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "node_modules/which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/wildcard": { "version": "2.0.0", @@ -11335,15 +7657,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11361,15 +7674,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11403,18 +7707,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -11422,20 +7714,24 @@ "dev": true }, "node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", "dev": true, "engines": { - "node": ">=0.4" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/y18n": { @@ -11453,43 +7749,40 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "dev": true, "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, "node_modules/zone.js": { @@ -11507,79 +7800,43 @@ } }, "dependencies": { - "@angular-devkit/core": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.14.tgz", - "integrity": "sha512-Ad1fHqLxDwhkQgLPqq9i+G65NSOoIHXQx7ILcSPACKurV3XLS1RO9BgP/BDaqHAG+WslUAPbMStaTzzPm+9dNw==", - "dev": true, - "requires": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "@angular/animations": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.14.tgz", - "integrity": "sha512-Heq/nNrCmb3jbkusu+BQszOecfFI/31Oxxj+CDQkqqYpBcswk6bOJLoEE472o+vmgxaXbgeflU9qbIiCQhpMFA==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.14.tgz", + "integrity": "sha512-1BR5u32auVePvXNNP96DB2008V+Ku0OGqeZQl2h4XA9xzES/Zk5WllIJZXqRmWMRBVARfXsfb0RdMty9gcaVjA==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/cdk": { - "version": "11.2.13", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.13.tgz", - "integrity": "sha512-FkE4iCwoLbQxLDUOjV1I7M/6hmpyb7erAjEdWgch7nGRNxF1hqX5Bqf1lvLFKPNCbx5NRI5K7YVAdIUQUR8vug==", + "version": "12.2.13", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", + "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", "requires": { "parse5": "^5.0.0", - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/common": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.2.14.tgz", - "integrity": "sha512-ZSLV/3j7eCTyLf/8g4yBFLWySjiLz3vLJAGWscYoUpnJWMnug1VRu6zoF/COxCbtORgE+Wz6K0uhfS6MziBGVw==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.14.tgz", + "integrity": "sha512-ffYUYdwZETmFJw0AcWY30WsaWBhJxj/zSmFXWjgEGEGZH56zwbbNwfMZOYZ1jz4haAVxGu+TdXsOl2yMGzN7jQ==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/compiler": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.2.14.tgz", - "integrity": "sha512-XBOK3HgA+/y6Cz7kOX4zcJYmgJ264XnfcbXUMU2cD7Ac+mbNhLPKohWrEiSWalfcjnpf5gRfufQrQP7lpAGu0A==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.14.tgz", + "integrity": "sha512-dwmZi+n66IUzRFlGWu9mjXq170ZEsaDvlNLZzaPgs6vZTa4Kt7PWvIF/Y7TMvnVv/uqNG6kOhfmOkf6rfz1Gjg==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/compiler-cli": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.2.14.tgz", - "integrity": "sha512-A7ltnCp03/EVqK/Q3tVUDsokgz5GHW3dSPGl0Csk7Ys5uBB9ibHTmVt4eiXA4jt0+6Bk+mKxwe5BEDqLvwYFAg==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.14.tgz", + "integrity": "sha512-EktEOF2xnuMsUyanXjZw3hyn7w97NX9h8LJ3O9l27secbjYXhyrao5bmrMILdDTEJNeZSC/OuCga1pvdaJTYmg==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -11587,88 +7844,87 @@ "canonical-path": "1.0.0", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", - "dependency-graph": "^0.7.2", - "fs-extra": "4.0.2", + "dependency-graph": "^0.11.0", "magic-string": "^0.25.0", "minimist": "^1.2.0", "reflect-metadata": "^0.1.2", - "semver": "^6.3.0", + "semver": "^7.0.0", "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", - "tslib": "^2.0.0", - "yargs": "^16.2.0" + "tslib": "^2.2.0", + "yargs": "^17.0.0" } }, "@angular/core": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.2.14.tgz", - "integrity": "sha512-vpR4XqBGitk1Faph37CSpemwIYTmJ3pdIVNoHKP6jLonpWu+0azkchf0f7oD8/2ivj2F81opcIw0tcsy/D/5Vg==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.14.tgz", + "integrity": "sha512-dlVk7yqUHL2R/eCmM8LsWuxhEBfzg0y1zHt0UqCuFwlCoiw+IG4HFy4OlZEUw9NUEZJSv0aDv3sWqxLkvK5vvg==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/forms": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.2.14.tgz", - "integrity": "sha512-4LWqY6KEIk1AZQFnk+4PJSOCamlD4tumuVN06gO4D0dZo9Cx+GcvW6pM6N0CPubRvPs3sScCnu20WT11HNWC1w==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.14.tgz", + "integrity": "sha512-/9/gSJUBXVRVdRnzgJnALAQZYJATuGDMkFC9ms9DEMG4PMAhe9x4if1lJjN6noz5RAom3qNuVBNWaYAPUxlcBQ==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/platform-browser": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.2.14.tgz", - "integrity": "sha512-fb7b7ss/gRoP8wLAN17W62leMgjynuyjEPU2eUoAAazsG9f2cgM+z3rK29GYncDVyYQxZUZYnjSqvL6GSXx86A==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.14.tgz", + "integrity": "sha512-fWcE2rnJ3ZCISa1oPfsIDV7FBZBoLFEdDuMXAiDYqDPKvF/E5U5nHrS+K4SlLAi094bMobtTOReNWl/Ienniyw==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/platform-browser-dynamic": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.14.tgz", - "integrity": "sha512-TWTPdFs6iBBcp+/YMsgCRQwdHpWGq8KjeJDJ2tfatGgBD3Gqt2YaHOMST1zPW6RkrmupytTejuVqXzeaKWFxuw==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.14.tgz", + "integrity": "sha512-0NPF7mS91Tct8rBmOLZPmnLSuS4kbLHXo6eTgrg80OC0vlzBiQwGDVW4X3KncCoX9CpevaGJCdSMc+uPNsFOUQ==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@angular/router": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.2.14.tgz", - "integrity": "sha512-3aYBmj+zrEL9yf/ntIQxHIYaWShZOBKP3U07X2mX+TPMpGlvHDnR7L6bWhQVZwewzMMz7YVR16ldg50IFuAlfA==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.14.tgz", + "integrity": "sha512-yP5grSnqBvc4vNhtYdcxDgDYIebUKs5f0xyFkUJM5030UnQ0CV45tBsSxHMkQbPZucIfOuxpRy8xy5+4GizuwQ==", "requires": { - "tslib": "^2.0.0" + "tslib": "^2.2.0" } }, "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" } }, "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", "dev": true }, "@babel/core": { - "version": "7.15.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", - "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.5", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -11677,6 +7933,12 @@ "source-map": "^0.5.0" }, "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -11686,12 +7948,12 @@ } }, "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -11705,117 +7967,125 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", "dev": true, "requires": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", + "browserslist": "^4.17.5", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz", - "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "requires": { - "@babel/types": "^7.15.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { @@ -11831,90 +8101,90 @@ "dev": true }, "@babel/helpers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", "dev": true, "requires": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", - "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", "dev": true }, "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, "@bitwarden/jslib-angular": { "version": "file:jslib/angular", "requires": { - "@angular/animations": "^11.2.11", - "@angular/cdk": "^11.2.10", - "@angular/common": "^11.2.11", - "@angular/compiler": "^11.2.11", - "@angular/core": "^11.2.11", - "@angular/forms": "^11.2.11", - "@angular/platform-browser": "^11.2.11", - "@angular/platform-browser-dynamic": "^11.2.11", - "@angular/router": "^11.2.11", + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@angular/router": "^12.2.13", "@bitwarden/jslib-common": "file:../common", "@types/duo_web_sdk": "^2.7.1", "duo_web_sdk": "git+https://github.com/duosecurity/duo_web_sdk.git", "rimraf": "^3.0.2", - "rxjs": "6.6.7", + "rxjs": "^7.4.0", "tldjs": "^2.3.1", - "typescript": "4.1.5", + "typescript": "4.3.5", "zone.js": "0.11.4" } }, @@ -11924,7 +8194,7 @@ "@microsoft/signalr": "5.0.10", "@microsoft/signalr-protocol-msgpack": "5.0.10", "@types/lunr": "^2.3.3", - "@types/node": "^14.17.1", + "@types/node": "^16.11.12", "@types/node-forge": "^0.9.7", "@types/papaparse": "^5.2.5", "@types/tldjs": "^2.3.0", @@ -11935,9 +8205,9 @@ "node-forge": "^0.10.0", "papaparse": "^5.3.0", "rimraf": "^3.0.2", - "rxjs": "6.6.7", + "rxjs": "^7.4.0", "tldjs": "^2.3.1", - "typescript": "4.1.5", + "typescript": "4.3.5", "zxcvbn": "^4.4.2" } }, @@ -11990,15 +8260,9 @@ "integrity": "sha512-UIrJB+AfKU0CCfbMoWrsGpd2D/hBpY/SGgFI6WRHPOwhaZ3g9rz1weiJ6eb6L9KgVyunT7s2tckcPkbHw+NzeA==" }, "@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true - }, - "@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true }, "@microsoft/signalr": { @@ -12011,6 +8275,16 @@ "fetch-cookie": "^0.7.3", "node-fetch": "^2.6.0", "ws": "^6.0.0" + }, + "dependencies": { + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "requires": { + "async-limiter": "~1.0.0" + } + } } }, "@microsoft/signalr-protocol-msgpack": { @@ -12023,15 +8297,11 @@ } }, "@ngtools/webpack": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.14.tgz", - "integrity": "sha512-6q57tEWtUJRsxfTKE19L20iXvNesfVy8hrVdyzVk64DZQh0lIl4/xZT4d5bJCWOuQQDaAeZK4YbEFcYJn7k1yw==", + "version": "12.2.14", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.14.tgz", + "integrity": "sha512-dla6JgLWKAo7k4K3O+ouo104wO3BFs+MIOCXoGF4Lp/1pKPSt0orYmvZFBkDZPmyBFYRw9wpL2WHnAAyip40Cw==", "dev": true, - "requires": { - "@angular-devkit/core": "11.2.14", - "enhanced-resolve": "5.7.0", - "webpack-sources": "2.2.0" - } + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -12059,37 +8329,6 @@ "fastq": "^1.6.0" } }, - "@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, "@scarf/scarf": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz", @@ -12101,10 +8340,36 @@ "integrity": "sha512-DePanZjFww36yGSxXwC8B3AsjrrDuPxEcufeh4gTqVsUMpCYByxjX4PERiYZdW0typzKSt9E4I14PPp+PrSIQA==", "dev": true }, + "@types/eslint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", + "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, "@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -12112,15 +8377,24 @@ } }, "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, + "@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/jquery": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.6.tgz", - "integrity": "sha512-SmgCQRzGPId4MZQKDj9Hqc6kSXFNWZFHpELkyK8AQhf8Zr6HKfCzFv9ZC1Fv3FyQttJZOlap3qYb12h61iZAIg==", + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.9.tgz", + "integrity": "sha512-B8pDk+sH/tSv/HKdx6EQER6BfUOb2GtKs0LOmozziS4h7cbe8u/eYySfUAeTwD+J09SqV3man7AMWIA5mgzCBA==", "dev": true, "requires": { "@types/sizzle": "*" @@ -12145,9 +8419,9 @@ "dev": true }, "@types/node": { - "version": "14.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz", - "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==", + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", "dev": true }, "@types/node-forge": { @@ -12160,47 +8434,32 @@ } }, "@types/papaparse": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.2.6.tgz", - "integrity": "sha512-xGKSd0UTn58N1h0+zf8mW863Rv8BvXcGibEgKFtBIXZlcDXAmX/T4RdDO2mwmrmOypUDt5vRgo2v32a78JdqUA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.1.tgz", + "integrity": "sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g==", "dev": true, "requires": { "@types/node": "*" } }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, "@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, "@types/tldjs": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/tldjs/-/tldjs-2.3.1.tgz", "integrity": "sha512-BQR04zLE0ve2eNrqxXw/Qp/f6LxvNrj/4A8ZgdQi3SzbBqxFhleI7N4DS/mSjDnODrUaEGgoWg4grAZR1kVj8w==", "dev": true }, - "@types/uglify-js": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, "@types/webcrypto": { "version": "0.0.28", "resolved": "https://registry.npmjs.org/@types/webcrypto/-/webcrypto-0.0.28.tgz", @@ -12208,36 +8467,14 @@ "dev": true }, "@types/webpack": { - "version": "4.41.31", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", - "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w==", "dev": true, "requires": { "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "tapable": "^2.2.0", + "webpack": "^5" } }, "@types/zxcvbn": { @@ -12247,180 +8484,174 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true, + "requires": {} + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -12452,11 +8683,18 @@ } }, "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -12479,12 +8717,34 @@ "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "requires": {} + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } }, "ajv-keywords": { "version": "3.5.2", @@ -12493,30 +8753,31 @@ "dev": true, "requires": {} }, - "angular2-toaster": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/angular2-toaster/-/angular2-toaster-11.0.1.tgz", - "integrity": "sha512-IRXE5zujPMNOhckcp+Hk2n+UrKSrlAviz55wGvSd9ECrqsSRjgh148UEtgsqkcYQ8leKcybZ4d0lrueDuQofNA==", - "requires": { - "tslib": "^2.0.0" - } - }, "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -12538,12 +8799,6 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -12553,24 +8808,6 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -12589,63 +8826,10 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -12657,21 +8841,15 @@ "lodash": "^4.17.14" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, "babel-runtime": { @@ -12696,32 +8874,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -12751,16 +8903,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", @@ -12770,18 +8912,6 @@ "safe-buffer": "^5.1.1" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -12905,131 +9035,32 @@ "promise-polyfill": "8.2.0" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, "browser-hrtime": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/browser-hrtime/-/browser-hrtime-1.1.8.tgz", "integrity": "sha512-kzXheikaJsBtzUBlyVtPIY5r0soQePzjwVwT4IlDpU2RvfB5Py52gpU98M77rgqMCheoSSZvrcrdj3t6cZ3suA==" }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, "browserslist": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz", - "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001259", - "electron-to-chromium": "^1.3.846", + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", "escalade": "^3.1.1", - "nanocolors": "^0.1.5", - "node-releases": "^1.1.76" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" } }, "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "buffer-from": { @@ -13044,73 +9075,18 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -13131,16 +9107,10 @@ "tslib": "^2.0.3" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "caniuse-lite": { - "version": "1.0.30001261", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001261.tgz", - "integrity": "sha512-vM8D9Uvp7bHIN0fZ2KQ4wnmYFpJo/Etb4Vwsuc+ka0tfGDHvOPrFm6S/7CCNLSOkAUjenT2HnUPESdOIL91FaA==", + "version": "1.0.30001285", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz", + "integrity": "sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q==", "dev": true }, "canonical-path": { @@ -13184,112 +9154,16 @@ "readdirp": "~3.6.0" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -13302,12 +9176,11 @@ "dev": true }, "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", "dev": true, "requires": { - "@types/webpack": "^4.4.31", "del": "^4.1.1" }, "dependencies": { @@ -13373,6 +9246,65 @@ } } }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "string-width": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", + "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "dev": true, + "requires": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -13382,23 +9314,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "clone-deep": { @@ -13412,16 +9327,6 @@ "shallow-clone": "^3.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -13438,9 +9343,9 @@ "dev": true }, "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "commander": { @@ -13455,12 +9360,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -13508,36 +9407,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -13574,132 +9449,106 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "copy-webpack-plugin": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.0.0.tgz", + "integrity": "sha512-tuCVuFMBbRsb7IH0q1CUb50/Skv+7a6c7DJ+xi4fAbOzNLTYVMUTPnf8uGvKPtmqTvzYBrfEFo7YgP4TsUWmtg==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "glob": "^7.1.3" + "fast-deep-equal": "^3.1.3" } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + }, + "array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "is-glob": "^4.0.3" } + }, + "globby": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", + "dev": true, + "requires": { + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true } } }, "core-js": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.1.tgz", - "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==" + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz", + "integrity": "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g==" }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "credit-card-type": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz", @@ -13725,52 +9574,20 @@ "which": "^2.0.1" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", + "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", "dev": true, "requires": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "css-select": { @@ -13787,9 +9604,9 @@ }, "dependencies": { "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -13798,9 +9615,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "cssesc": { @@ -13809,12 +9626,6 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, "date-input-polyfill": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/date-input-polyfill/-/date-input-polyfill-2.14.0.tgz", @@ -13824,26 +9635,14 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -13859,105 +9658,20 @@ } }, "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "execa": "^5.0.0" } }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -13967,16 +9681,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -14000,21 +9704,11 @@ "dev": true }, "dependency-graph": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -14033,25 +9727,6 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -14107,9 +9782,9 @@ }, "dependencies": { "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -14117,27 +9792,12 @@ } } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1" - } - }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -14150,9 +9810,9 @@ }, "dependencies": { "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -14174,18 +9834,6 @@ "version": "git+ssh://git@github.com/duosecurity/duo_web_sdk.git#378e855ce4a1de1d1b2f7fd60465e564b3e9fbda", "from": "duo_web_sdk@git+https://github.com/duosecurity/duo_web_sdk.git" }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -14193,34 +9841,11 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.851", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.851.tgz", - "integrity": "sha512-Ak970eGtRSoHTaJkoDjdkeXYetbwm5Bl9pN/nPOQ3QzLfw1EWRjReOlWUra6o58SVgxfpwOT9U2P1BUXoJ57dw==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.12.tgz", + "integrity": "sha512-zjfhG9Us/hIy8AlQ5OzfbR/C4aBv1Dg/ak4GX35CELYlJ4tDAtoEcQivXvyBdqdNQ+R6PhlgQqV8UNPJmhkJog==", "dev": true }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "email-addresses": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", @@ -14245,31 +9870,23 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" - }, - "dependencies": { - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" } }, "entities": { @@ -14284,19 +9901,10 @@ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -14310,7 +9918,9 @@ "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", + "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -14319,6 +9929,12 @@ "unbox-primitive": "^1.0.1" } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -14354,12 +9970,12 @@ "dev": true }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -14379,9 +9995,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -14423,16 +10039,6 @@ "original": "^1.0.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -14450,119 +10056,6 @@ "strip-final-newline": "^2.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -14624,58 +10117,6 @@ } } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -14734,29 +10175,6 @@ "tough-cookie": "^2.3.3" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -14836,20 +10254,10 @@ "path-exists": "^4.0.0" } }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, "follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", "dev": true }, "font-awesome": { @@ -14857,10 +10265,10 @@ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "forwarded": { @@ -14869,15 +10277,6 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "framebus": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/framebus/-/framebus-5.1.2.tgz", @@ -14892,47 +10291,22 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, "fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, "fs.realpath": { "version": "1.0.0", @@ -14992,12 +10366,6 @@ "get-intrinsic": "^1.1.1" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "gh-pages": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", @@ -15022,17 +10390,6 @@ "array-uniq": "^1.0.1" } }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -15077,6 +10434,12 @@ "is-glob": "^4.0.1" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -15145,115 +10508,12 @@ "has-symbols": "^1.0.2" } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -15267,42 +10527,48 @@ } }, "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", "dev": true }, "html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-3.0.1.tgz", + "integrity": "sha512-90Sxg9FhTkQEzmmHT2KOAQniTZgC72aifcfR0fZsuo1PJz0K4EXiTwxejTUombF8XShLj5RaZKYsUJhxR6G2dA==", "dev": true, "requires": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "html-minifier-terser": "^6.0.2", + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } } }, "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", "he": "^1.2.0", - "param-case": "^3.0.3", + "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^4.6.3" + "terser": "^5.10.0" }, "dependencies": { "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true } } @@ -15314,54 +10580,16 @@ "dev": true }, "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" } }, "http-deceiver": { @@ -15392,9 +10620,9 @@ } }, "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", "dev": true }, "http-proxy": { @@ -15409,140 +10637,30 @@ } }, "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "dev": true, "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -15565,46 +10683,34 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", "dev": true }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -15625,16 +10731,6 @@ "resolved": "https://registry.npmjs.org/inject-stylesheet/-/inject-stylesheet-4.0.0.tgz", "integrity": "sha512-EULSmN+gdAMR4w9kk57HJ1Lz6Xp+9OGgTbxpNV2QSncG+LWlihH1d/Clm8ui6b+LAqmIVcrtWfwDrMEgDiUpjg==" }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -15658,33 +10754,12 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -15723,12 +10798,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -15736,23 +10805,14 @@ "dev": true }, "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -15762,25 +10822,11 @@ "has-tostringtag": "^1.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -15794,10 +10840,19 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz", - "integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -15856,6 +10911,12 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -15875,6 +10936,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -15899,17 +10966,36 @@ "has-symbols": "^1.0.2" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + } + }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } }, "isarray": { "version": "1.0.0", @@ -15929,14 +11015,14 @@ "dev": true }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz", + "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "dependencies": { "has-flag": { @@ -15946,9 +11032,9 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -15995,12 +11081,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -16019,12 +11099,6 @@ "graceful-fs": "^4.1.6" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -16032,28 +11106,122 @@ "dev": true }, "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "lilconfig": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", "dev": true }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "lint-staged": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.2.tgz", + "integrity": "sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.3", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.0", + "string-argv": "^0.3.1", + "supports-color": "^9.0.2", + "yaml": "^1.10.2" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "supports-color": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", + "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "dev": true + } } }, + "listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -16069,11 +11237,65 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } }, "lower-case": { "version": "2.0.2", @@ -16114,32 +11336,14 @@ "dev": true, "requires": { "semver": "^6.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "media-typer": { @@ -16148,14 +11352,13 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "memfs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", + "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "fs-monkey": "1.0.3" } }, "merge-descriptors": { @@ -16192,24 +11395,6 @@ "picomatch": "^2.2.3" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -16217,26 +11402,18 @@ "dev": true }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.49.0" - }, - "dependencies": { - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true - } + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -16246,24 +11423,51 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.5.tgz", + "integrity": "sha512-oEIhRucyn1JbT/1tU2BhnwO6ft1jjH1iCX9Gc59WFMg0n5773rQU0oyQ0zzeYFFuBfONaRbQJyGoPtuNseMxjA==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "dependencies": { - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } @@ -16274,12 +11478,6 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -16295,120 +11493,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -16442,44 +11526,12 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "nanocolors": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", - "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==", - "dev": true - }, "nanoid": { - "version": "3.1.28", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.28.tgz", - "integrity": "sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw==", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -16501,11 +11553,13 @@ "opencollective-postinstall": "^2.0.2" } }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "ngx-toastr": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.1.4.tgz", + "integrity": "sha512-t1/9r+pOXm65LIl0gevvFat6XIl0g3tMA8UOArFjI4ta/nGwDe/14J/f4cZvOBDcomedvjvGAWi+d/2URdSTBg==", + "requires": { + "tslib": "^2.2.0" + } }, "no-case": { "version": "3.0.4", @@ -16518,9 +11572,9 @@ } }, "node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "requires": { "whatwg-url": "^5.0.0" } @@ -16530,49 +11584,10 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "node-releases": { - "version": "1.1.76", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz", - "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "normalize-path": { @@ -16605,78 +11620,10 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", "dev": true }, "object-is": { @@ -16695,15 +11642,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -16716,26 +11654,6 @@ "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -16775,20 +11693,22 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "opencollective-postinstall": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -16797,27 +11717,6 @@ "url-parse": "^1.4.3" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -16848,12 +11747,13 @@ } }, "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "requires": { - "retry": "^0.12.0" + "@types/retry": "^0.12.0", + "retry": "^0.13.1" } }, "p-try": { @@ -16862,28 +11762,11 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, "papaparse": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.1.tgz", "integrity": "sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA==" }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -16894,19 +11777,6 @@ "tslib": "^2.0.3" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -16929,24 +11799,6 @@ "tslib": "^2.0.3" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -16989,18 +11841,11 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "picomatch": { "version": "2.3.0", @@ -17074,29 +11919,15 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "postcss": { - "version": "8.3.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz", - "integrity": "sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA==", + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", "dev": true, "requires": { - "nanocolors": "^0.2.2", - "nanoid": "^3.1.25", - "source-map-js": "^0.6.2" - }, - "dependencies": { - "nanocolors": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.11.tgz", - "integrity": "sha512-83ttyvfJj66dKMadWfBkEUOEDFfRc8FpzTJvh1MySR/pzWFmFikTQZGOV6kHZRz7yR/heiQ1y/MHBBN5P/e7WQ==", - "dev": true - } + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" } }, "postcss-modules-extract-imports": { @@ -17146,19 +11977,25 @@ } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "requires": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^3.0.0" } }, "process": { @@ -17172,12 +12009,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "promise-polyfill": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz", @@ -17191,74 +12022,21 @@ "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -17281,12 +12059,6 @@ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -17307,16 +12079,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -17355,16 +12117,6 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "readdirp": { @@ -17396,16 +12148,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -17422,29 +12164,23 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" + "strip-ansi": "^6.0.1" }, "dependencies": { "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -17464,28 +12200,16 @@ } } }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "requires-port": { @@ -17518,11 +12242,15 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } }, "restricted-input": { "version": "3.0.3", @@ -17532,16 +12260,10 @@ "@braintree/browser-detection": "^1.10.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, "reusify": { @@ -17550,6 +12272,12 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -17559,16 +12287,6 @@ "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -17578,27 +12296,18 @@ "queue-microtask": "^1.2.2" } }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", "requires": { - "tslib": "^1.9.0" + "tslib": "~2.1.0" }, "dependencies": { "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" } } }, @@ -17607,15 +12316,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -17623,36 +12323,23 @@ "dev": true }, "sass": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.42.1.tgz", - "integrity": "sha512-/zvGoN8B7dspKc5mC6HlaygyCBRvnyzzgD5khiaCfglWztY99cYoiTUksVx11NlnemrcfH5CEaCpsUKoW0cQqg==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz", + "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==", "dev": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0" } }, "sass-loader": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.0.tgz", - "integrity": "sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, "requires": { "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "neo-async": "^2.6.2" } }, "schema-utils": { @@ -17682,10 +12369,13 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "send": { "version": "0.17.1", @@ -17734,9 +12424,9 @@ } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -17810,63 +12500,12 @@ "send": "0.17.1" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -17903,9 +12542,9 @@ } }, "signal-exit": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", - "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "slash": { @@ -17914,210 +12553,41 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", "dev": true }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } } } }, "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -18125,40 +12595,21 @@ "dev": true }, "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -18205,170 +12656,32 @@ } } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "safe-buffer": "~5.1.0" } }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -18378,23 +12691,6 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } } }, "string.prototype.trimend": { @@ -18418,20 +12714,14 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18448,14 +12738,11 @@ } }, "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } + "requires": {} }, "supports-color": { "version": "5.5.0", @@ -18472,109 +12759,55 @@ "integrity": "sha512-oNe+md5tmmS3fGfVHa7gVPlun7Td2oANSacnZCeghnrr3OHBi6UPVPU+GFrymwaDqwQspACilLRmRnM7aTjNPA==" }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" }, "dependencies": { - "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true } } }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "terser-webpack-plugin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", + "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "jest-worker": "^27.0.6", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" } }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, "tldjs": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.3.1.tgz", @@ -18590,50 +12823,12 @@ } } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -18673,14 +12868,13 @@ } }, "ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", "dev": true, "requires": { "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", + "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4" }, @@ -18719,42 +12913,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18883,10 +13047,10 @@ } } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, "type-is": { @@ -18899,16 +13063,10 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true }, "unbox-primitive": { @@ -18923,44 +13081,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -18973,52 +13093,6 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -19028,12 +13102,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -19061,27 +13129,18 @@ "requires-port": "^1.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, "util-deprecate": { @@ -19089,16 +13148,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -19112,15 +13161,9 @@ "dev": true }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "vary": { @@ -19129,259 +13172,14 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, "wbuf": { @@ -19404,437 +13202,65 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", + "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" }, "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", "dev": true } } }, "webpack-cli": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.8.0.tgz", - "integrity": "sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.4", - "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.2", - "colorette": "^1.2.1", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { - "@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz", - "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==", - "dev": true, - "requires": {} - }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -19843,568 +13269,147 @@ } } }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "webpack-dev-middleware": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz", + "integrity": "sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==", "dev": true, "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "webpack-dev-server": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz", + "integrity": "sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg==", "dev": true, "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^1.10.11", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^5.2.1", + "ws": "^8.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "webpack-merge": { @@ -20417,16 +13422,6 @@ "wildcard": "^2.0.0" } }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -20480,11 +13475,19 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + } }, "wildcard": { "version": "2.0.0", @@ -20492,15 +13495,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -20512,12 +13506,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -20541,15 +13529,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } } } }, @@ -20560,18 +13539,11 @@ "dev": true }, "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "dev": true, + "requires": {} }, "y18n": { "version": "5.0.8", @@ -20585,31 +13557,31 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "dev": true }, "zone.js": { diff --git a/package.json b/package.json index 8bbc3675..de6eb659 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bitwarden-web", - "version": "2.24.4", + "version": "2.25.0", "license": "GPL-3.0", "repository": "https://github.com/bitwarden/web", "scripts": { @@ -30,43 +30,56 @@ "deploy": "npm run dist:bit && gh-pages -d build", "deploy:dev": "npm run dist:bit && gh-pages -d build -r git@github.com:kspearrin/bitwarden-web-dev.git", "lint": "tslint 'src/**/*.ts' 'bitwarden_license/src/**/*.ts'", - "lint:fix": "tslint 'src/**/*.ts' 'bitwarden_license/src/**/*.ts' --fix" + "lint:fix": "tslint 'src/**/*.ts' 'bitwarden_license/src/**/*.ts' --fix", + "prettier": "prettier --write .", + "prepare": "husky install" }, "devDependencies": { - "@angular/compiler-cli": "^11.2.11", - "@ngtools/webpack": "^11.2.10", + "@angular/compiler-cli": "^12.2.13", + "@ngtools/webpack": "^12.2.13", "@types/jquery": "^3.5.5", - "@types/node": "^14.17.2", + "@types/node": "^16.11.12", "@types/webcrypto": "^0.0.28", - "@types/webpack": "^4.4.27", - "clean-webpack-plugin": "^3.0.0", - "copy-webpack-plugin": "^6.4.0", + "@types/webpack": "^5.28.0", + "buffer": "^6.0.3", + "clean-webpack-plugin": "^4.0.0", + "copy-webpack-plugin": "^10.0.0", "cross-env": "^7.0.3", - "css-loader": "^5.2.3", - "del": "^6.0.0", - "file-loader": "^6.2.0", + "css-loader": "^6.5.1", "gh-pages": "^3.1.0", - "html-loader": "^1.3.2", + "html-loader": "^3.0.1", "html-webpack-injector": "1.1.4", - "html-webpack-plugin": "^4.5.1", - "mini-css-extract-plugin": "^1.5.0", + "html-webpack-plugin": "^5.5.0", + "husky": "^7.0.4", + "lint-staged": "^12.1.2", + "mini-css-extract-plugin": "^2.4.5", + "prettier": "2.5.1", + "process": "^0.11.10", "sass": "^1.32.10", - "sass-loader": "^10.1.1", - "style-loader": "^2.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^4.2.3", - "ts-loader": "^8.1.0", + "sass-loader": "^12.4.0", + "style-loader": "^3.3.1", + "terser-webpack-plugin": "^5.2.5", + "ts-loader": "^9.2.5", "tslint": "^6.1.3", "tslint-loader": "^3.5.4", - "typescript": "4.1.5", - "webpack": "^4.46.0", - "webpack-cli": "^4.6.0", - "webpack-dev-server": "^3.11.2" + "typescript": "4.3.5", + "util": "^0.12.4", + "webpack": "^5.64.4", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.6.0" }, "dependencies": { + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@angular/router": "^12.2.13", "@bitwarden/jslib-angular": "file:jslib/angular", "@bitwarden/jslib-common": "file:jslib/common", - "angular2-toaster": "11.0.1", "bootstrap": "4.6.0", "braintree-web-drop-in": "1.30.1", "browser-hrtime": "^1.1.8", @@ -75,14 +88,19 @@ "font-awesome": "4.7.0", "jquery": "3.6.0", "ngx-infinite-scroll": "^10.0.1", + "ngx-toastr": "14.1.4", "popper.js": "1.16.1", "qrious": "4.0.2", + "rxjs": "^7.4.0", "sweetalert2": "^10.16.6", "webcrypto-shim": "0.1.7", "whatwg-fetch": "3.6.2" }, "engines": { - "node": "~14", - "npm": "~7" + "node": "~16", + "npm": "~8" + }, + "lint-staged": { + "*.{js,ts,css,scss,md}": "prettier --write" } } diff --git a/src/404.html b/src/404.html index eba36375..e67809ce 100644 --- a/src/404.html +++ b/src/404.html @@ -27,7 +27,7 @@
  - bitwarden + bitwarden
diff --git a/src/app/accounts/accept-emergency.component.ts b/src/app/accounts/accept-emergency.component.ts index 5caba800..4c395ce3 100644 --- a/src/app/accounts/accept-emergency.component.ts +++ b/src/app/accounts/accept-emergency.component.ts @@ -4,15 +4,10 @@ import { Router, } from '@angular/router'; -import { - Toast, - ToasterService, -} from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { EmergencyAccessAcceptRequest } from 'jslib-common/models/request/emergencyAccessAcceptRequest'; import { BaseAcceptComponent } from '../common/base.accept.component'; @@ -28,11 +23,21 @@ export class AcceptEmergencyComponent extends BaseAcceptComponent { protected failedShortMessage = 'emergencyInviteAcceptFailedShort'; protected failedMessage = 'emergencyInviteAcceptFailed'; - constructor(router: Router, toasterService: ToasterService, - i18nService: I18nService, route: ActivatedRoute, - private apiService: ApiService, userService: UserService, - stateService: StateService) { - super(router, toasterService, i18nService, route, userService, stateService); + constructor( + router: Router, + platformUtilsService: PlatformUtilsService, + i18nService: I18nService, + route: ActivatedRoute, + private apiService: ApiService, + stateService: StateService + ) { + super( + router, + platformUtilsService, + i18nService, + route, + stateService + ); } async authedHandler(qParams: any): Promise { @@ -40,13 +45,8 @@ export class AcceptEmergencyComponent extends BaseAcceptComponent { request.token = qParams.token; this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request); await this.actionPromise; - const toast: Toast = { - type: 'success', - title: this.i18nService.t('inviteAccepted'), - body: this.i18nService.t('emergencyInviteAcceptedDesc'), - timeout: 10000, - }; - this.toasterService.popAsync(toast); + this.platformUtilService.showToast('success', this.i18nService.t('inviteAccepted'), + this.i18nService.t('emergencyInviteAcceptedDesc'), {timeout: 10000}); this.router.navigate(['/vault']); } diff --git a/src/app/accounts/accept-organization.component.ts b/src/app/accounts/accept-organization.component.ts index 267ce840..3b4dc83e 100644 --- a/src/app/accounts/accept-organization.component.ts +++ b/src/app/accounts/accept-organization.component.ts @@ -4,18 +4,13 @@ import { Router, } from '@angular/router'; -import { - Toast, - ToasterService, -} from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { OrganizationUserAcceptRequest } from 'jslib-common/models/request/organizationUserAcceptRequest'; import { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest'; @@ -33,12 +28,24 @@ export class AcceptOrganizationComponent extends BaseAcceptComponent { protected requiredParameters: string[] = ['organizationId', 'organizationUserId', 'token']; - constructor(router: Router, toasterService: ToasterService, - i18nService: I18nService, route: ActivatedRoute, - private apiService: ApiService, userService: UserService, - stateService: StateService, private cryptoService: CryptoService, - private policyService: PolicyService, private logService: LogService) { - super(router, toasterService, i18nService, route, userService, stateService); + constructor( + router: Router, + platformUtilsService: PlatformUtilsService, + i18nService: I18nService, + route: ActivatedRoute, + private apiService: ApiService, + stateService: StateService, + private cryptoService: CryptoService, + private policyService: PolicyService, + private logService: LogService + ) { + super( + router, + platformUtilsService, + i18nService, + route, + stateService + ); } async authedHandler(qParams: any): Promise { @@ -64,10 +71,7 @@ export class AcceptOrganizationComponent extends BaseAcceptComponent { const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest(); resetRequest.resetPasswordKey = encryptedKey.encryptedString; - // Get User Id - const userId = await this.userService.getUserId(); - - return this.apiService.putOrganizationUserResetPasswordEnrollment(qParams.organizationId, userId, resetRequest); + return this.apiService.putOrganizationUserResetPasswordEnrollment(qParams.organizationId, await this.stateService.getUserId(), resetRequest); }); } else { this.actionPromise = this.apiService.postOrganizationUserAccept(qParams.organizationId, @@ -75,15 +79,10 @@ export class AcceptOrganizationComponent extends BaseAcceptComponent { } await this.actionPromise; - const toast: Toast = { - type: 'success', - title: this.i18nService.t('inviteAccepted'), - body: this.i18nService.t('inviteAcceptedDesc'), - timeout: 10000, - }; - this.toasterService.popAsync(toast); + this.platformUtilService.showToast('success', this.i18nService.t('inviteAccepted'), + this.i18nService.t('inviteAcceptedDesc'), {timeout: 10000}); - await this.stateService.remove('orgInvitation'); + await this.stateService.setOrganizationInvitation(null); this.router.navigate(['/vault']); } @@ -93,7 +92,7 @@ export class AcceptOrganizationComponent extends BaseAcceptComponent { // Fix URL encoding of space issue with Angular this.orgName = this.orgName.replace(/\+/g, ' '); } - await this.stateService.save('orgInvitation', qParams); + await this.stateService.setOrganizationInvitation(qParams); } private async performResetPasswordAutoEnroll(qParams: any): Promise { diff --git a/src/app/accounts/lock.component.ts b/src/app/accounts/lock.component.ts index 5cb83878..68914c24 100644 --- a/src/app/accounts/lock.component.ts +++ b/src/app/accounts/lock.component.ts @@ -1,4 +1,7 @@ -import { Component } from '@angular/core'; +import { + Component, + NgZone, +} from '@angular/core'; import { Router } from '@angular/router'; import { ApiService } from 'jslib-common/abstractions/api.service'; @@ -10,8 +13,6 @@ import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; import { RouterService } from '../services/router.service'; @@ -25,19 +26,18 @@ import { LockComponent as BaseLockComponent } from 'jslib-angular/components/loc export class LockComponent extends BaseLockComponent { constructor(router: Router, i18nService: I18nService, platformUtilsService: PlatformUtilsService, messagingService: MessagingService, - userService: UserService, cryptoService: CryptoService, - storageService: StorageService, vaultTimeoutService: VaultTimeoutService, + cryptoService: CryptoService, vaultTimeoutService: VaultTimeoutService, environmentService: EnvironmentService, private routerService: RouterService, stateService: StateService, apiService: ApiService, logService: LogService, - keyConnectorService: KeyConnectorService) { - super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService, - storageService, vaultTimeoutService, environmentService, stateService, apiService, logService, - keyConnectorService); + keyConnectorService: KeyConnectorService, ngZone: NgZone) { + super(router, i18nService, platformUtilsService, messagingService, cryptoService, + vaultTimeoutService, environmentService, stateService, apiService, logService, + keyConnectorService, ngZone); } async ngOnInit() { await super.ngOnInit(); - this.onSuccessfulSubmit = () => { + this.onSuccessfulSubmit = async () => { const previousUrl = this.routerService.getPreviousUrl(); if (previousUrl !== '/' && previousUrl.indexOf('lock') === -1) { this.successRoute = previousUrl; diff --git a/src/app/accounts/login.component.ts b/src/app/accounts/login.component.ts index 44a16baa..a83a14e9 100644 --- a/src/app/accounts/login.component.ts +++ b/src/app/accounts/login.component.ts @@ -1,4 +1,7 @@ -import { Component } from '@angular/core'; +import { + Component, + NgZone, +} from '@angular/core'; import { ActivatedRoute, Router, @@ -16,7 +19,6 @@ import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGen import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; import { LoginComponent as BaseLoginComponent } from 'jslib-angular/components/login.component'; @@ -31,16 +33,16 @@ export class LoginComponent extends BaseLoginComponent { showResetPasswordAutoEnrollWarning = false; constructor(authService: AuthService, router: Router, - i18nService: I18nService, private route: ActivatedRoute, - storageService: StorageService, stateService: StateService, + i18nService: I18nService, private route: ActivatedRoute, stateService: StateService, platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService, passwordGenerationService: PasswordGenerationService, cryptoFunctionService: CryptoFunctionService, - private apiService: ApiService, private policyService: PolicyService, logService: LogService) { + private apiService: ApiService, private policyService: PolicyService, logService: LogService, + ngZone: NgZone) { super(authService, router, platformUtilsService, i18nService, stateService, environmentService, passwordGenerationService, cryptoFunctionService, - storageService, logService); + logService, ngZone); this.onSuccessfulLoginNavigate = this.goAfterLogIn; } @@ -50,16 +52,16 @@ export class LoginComponent extends BaseLoginComponent { this.email = qParams.email; } if (qParams.premium != null) { - this.stateService.save('loginRedirect', { route: '/settings/premium' }); + this.stateService.setLoginRedirect({ route: '/settings/premium' }); } else if (qParams.org != null) { - this.stateService.save('loginRedirect', + this.stateService.setLoginRedirect( { route: '/settings/create-organization', qParams: { plan: qParams.org } }); } // Are they coming from an email for sponsoring a families organization if (qParams.sponsorshipToken != null) { // After logging in redirect them to setup the families sponsorship - this.stateService.save('loginRedirect', { + this.stateService.setLoginRedirect({ route: '/setup/families-for-enterprise', qParams: { token: qParams.sponsorshipToken }, }); @@ -67,7 +69,7 @@ export class LoginComponent extends BaseLoginComponent { await super.ngOnInit(); }); - const invite = await this.stateService.get('orgInvitation'); + const invite = await this.stateService.getOrganizationInvitation(); if (invite != null) { let policyList: Policy[] = null; try { @@ -87,10 +89,10 @@ export class LoginComponent extends BaseLoginComponent { } async goAfterLogIn() { - const loginRedirect = await this.stateService.get('loginRedirect'); + const loginRedirect = await this.stateService.getLoginRedirect(); if (loginRedirect != null) { this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams }); - await this.stateService.remove('loginRedirect'); + await this.stateService.setLoginRedirect(null); } else { this.router.navigate([this.successRoute]); } diff --git a/src/app/accounts/recover-delete.component.ts b/src/app/accounts/recover-delete.component.ts index aaf53cb7..26308df4 100644 --- a/src/app/accounts/recover-delete.component.ts +++ b/src/app/accounts/recover-delete.component.ts @@ -1,11 +1,10 @@ import { Component } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { DeleteRecoverRequest } from 'jslib-common/models/request/deleteRecoverRequest'; @@ -18,7 +17,7 @@ export class RecoverDeleteComponent { formPromise: Promise; constructor(private router: Router, private apiService: ApiService, - private toasterService: ToasterService, private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private logService: LogService) { } @@ -28,7 +27,7 @@ export class RecoverDeleteComponent { request.email = this.email.trim().toLowerCase(); this.formPromise = this.apiService.postAccountRecoverDelete(request); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('deleteRecoverEmailSent')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('deleteRecoverEmailSent')); this.router.navigate(['/']); } catch (e) { this.logService.error(e); diff --git a/src/app/accounts/recover-two-factor.component.ts b/src/app/accounts/recover-two-factor.component.ts index 4d7263d1..e0403745 100644 --- a/src/app/accounts/recover-two-factor.component.ts +++ b/src/app/accounts/recover-two-factor.component.ts @@ -1,13 +1,12 @@ import { Component } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { AuthService } from 'jslib-common/abstractions/auth.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { TwoFactorRecoveryRequest } from 'jslib-common/models/request/twoFactorRecoveryRequest'; @@ -22,7 +21,7 @@ export class RecoverTwoFactorComponent { formPromise: Promise; constructor(private router: Router, private apiService: ApiService, - private toasterService: ToasterService, private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private cryptoService: CryptoService, private authService: AuthService, private logService: LogService) { } @@ -35,7 +34,7 @@ export class RecoverTwoFactorComponent { request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key); this.formPromise = this.apiService.postTwoFactorRecover(request); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('twoStepRecoverDisabled')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('twoStepRecoverDisabled')); this.router.navigate(['/']); } catch (e) { this.logService.error(e); diff --git a/src/app/accounts/register.component.ts b/src/app/accounts/register.component.ts index 29d2ec40..d0a93771 100644 --- a/src/app/accounts/register.component.ts +++ b/src/app/accounts/register.component.ts @@ -53,11 +53,11 @@ export class RegisterComponent extends BaseRegisterComponent { this.email = qParams.email; } if (qParams.premium != null) { - this.stateService.save('loginRedirect', { route: '/settings/premium' }); + this.stateService.setLoginRedirect({ route: '/settings/premium' }); } else if (qParams.org != null) { this.showCreateOrgMessage = true; this.referenceData.flow = qParams.org; - this.stateService.save('loginRedirect', + this.stateService.setLoginRedirect( { route: '/settings/create-organization', qParams: { plan: qParams.org } }); } if (qParams.layout != null) { @@ -71,7 +71,7 @@ export class RegisterComponent extends BaseRegisterComponent { // Are they coming from an email for sponsoring a families organization if (qParams.sponsorshipToken != null) { // After logging in redirect them to setup the families sponsorship - this.stateService.save('loginRedirect', { + this.stateService.setLoginRedirect({ route: '/setup/families-for-enterprise', qParams: { token: qParams.sponsorshipToken }, }); @@ -80,7 +80,7 @@ export class RegisterComponent extends BaseRegisterComponent { this.referenceData.id = null; } }); - const invite = await this.stateService.get('orgInvitation'); + const invite = await this.stateService.getOrganizationInvitation(); if (invite != null) { try { const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token, diff --git a/src/app/accounts/set-password.component.ts b/src/app/accounts/set-password.component.ts index 39543213..fe8387e6 100644 --- a/src/app/accounts/set-password.component.ts +++ b/src/app/accounts/set-password.component.ts @@ -11,8 +11,8 @@ import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { SetPasswordComponent as BaseSetPasswordComponent, @@ -25,10 +25,10 @@ import { export class SetPasswordComponent extends BaseSetPasswordComponent { constructor(apiService: ApiService, i18nService: I18nService, cryptoService: CryptoService, messagingService: MessagingService, - userService: UserService, passwordGenerationService: PasswordGenerationService, - platformUtilsService: PlatformUtilsService, policyService: PolicyService, router: Router, - syncService: SyncService, route: ActivatedRoute) { - super(i18nService, cryptoService, messagingService, userService, passwordGenerationService, - platformUtilsService, policyService, router, apiService, syncService, route); + passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService, + policyService: PolicyService, router: Router, + syncService: SyncService, route: ActivatedRoute, stateService: StateService) { + super(i18nService, cryptoService, messagingService, passwordGenerationService, + platformUtilsService, policyService, router, apiService, syncService, route, stateService); } } diff --git a/src/app/accounts/sso.component.ts b/src/app/accounts/sso.component.ts index 76914ea2..90d2afff 100644 --- a/src/app/accounts/sso.component.ts +++ b/src/app/accounts/sso.component.ts @@ -15,12 +15,9 @@ import { LogService } from 'jslib-common/abstractions/log.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; import { SsoComponent as BaseSsoComponent } from 'jslib-angular/components/sso.component'; -const IdentifierStorageKey = 'ssoOrgIdentifier'; - @Component({ selector: 'app-sso', templateUrl: 'sso.component.html', @@ -28,11 +25,11 @@ const IdentifierStorageKey = 'ssoOrgIdentifier'; export class SsoComponent extends BaseSsoComponent { constructor(authService: AuthService, router: Router, i18nService: I18nService, route: ActivatedRoute, - storageService: StorageService, stateService: StateService, - platformUtilsService: PlatformUtilsService, apiService: ApiService, - cryptoFunctionService: CryptoFunctionService, environmentService: EnvironmentService, - passwordGenerationService: PasswordGenerationService, logService: LogService) { - super(authService, router, i18nService, route, storageService, stateService, platformUtilsService, + stateService: StateService, platformUtilsService: PlatformUtilsService, + apiService: ApiService, cryptoFunctionService: CryptoFunctionService, + environmentService: EnvironmentService, passwordGenerationService: PasswordGenerationService, + logService: LogService) { + super(authService, router, i18nService, route, stateService, platformUtilsService, apiService, cryptoFunctionService, environmentService, passwordGenerationService, logService); this.redirectUri = window.location.origin + '/sso-connector.html'; this.clientId = 'web'; @@ -44,7 +41,7 @@ export class SsoComponent extends BaseSsoComponent { if (qParams.identifier != null) { this.identifier = qParams.identifier; } else { - const storedIdentifier = await this.storageService.get(IdentifierStorageKey); + const storedIdentifier = await this.stateService.getSsoOrgIdentifier(); if (storedIdentifier != null) { this.identifier = storedIdentifier; } @@ -53,7 +50,7 @@ export class SsoComponent extends BaseSsoComponent { } async submit() { - await this.storageService.save(IdentifierStorageKey, this.identifier); + await this.stateService.setSsoOrganizationIdentifier(this.identifier); if (this.clientId === 'browser') { document.cookie = `ssoHandOffMessage=${this.i18nService.t('ssoHandOff')};SameSite=strict`; } diff --git a/src/app/accounts/two-factor.component.ts b/src/app/accounts/two-factor.component.ts index 75363b3d..db29a0be 100644 --- a/src/app/accounts/two-factor.component.ts +++ b/src/app/accounts/two-factor.component.ts @@ -13,9 +13,9 @@ import { ApiService } from 'jslib-common/abstractions/api.service'; import { AuthService } from 'jslib-common/abstractions/auth.service'; import { EnvironmentService } from 'jslib-common/abstractions/environment.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -23,7 +23,6 @@ import { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType' import { TwoFactorComponent as BaseTwoFactorComponent } from 'jslib-angular/components/two-factor.component'; -import { LogService } from 'jslib-common/abstractions/log.service'; import { TwoFactorOptionsComponent } from './two-factor-options.component'; @Component({ @@ -37,9 +36,9 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { i18nService: I18nService, apiService: ApiService, platformUtilsService: PlatformUtilsService, stateService: StateService, environmentService: EnvironmentService, private modalService: ModalService, - storageService: StorageService, route: ActivatedRoute, logService: LogService) { + route: ActivatedRoute, logService: LogService) { super(authService, router, i18nService, apiService, platformUtilsService, window, environmentService, - stateService, storageService, route, logService); + stateService, route, logService); this.onSuccessfulLoginNavigate = this.goAfterLogIn; } @@ -57,10 +56,10 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { } async goAfterLogIn() { - const loginRedirect = await this.stateService.get('loginRedirect'); + const loginRedirect = await this.stateService.getLoginRedirect(); if (loginRedirect != null) { this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams }); - await this.stateService.remove('loginRedirect'); + await this.stateService.setLoginRedirect(null); } else { this.router.navigate([this.successRoute], { queryParams: { diff --git a/src/app/accounts/update-temp-password.component.ts b/src/app/accounts/update-temp-password.component.ts index f1767ffd..5d4d9c29 100644 --- a/src/app/accounts/update-temp-password.component.ts +++ b/src/app/accounts/update-temp-password.component.ts @@ -9,9 +9,9 @@ import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGen import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from 'jslib-angular/components/update-temp-password.component'; +import { StateService } from 'jslib-common/abstractions/state.service'; @Component({ selector: 'app-update-temp-password', @@ -21,10 +21,9 @@ import { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from ' export class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent { constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService, passwordGenerationService: PasswordGenerationService, policyService: PolicyService, - cryptoService: CryptoService, userService: UserService, - messagingService: MessagingService, apiService: ApiService, - syncService: SyncService, logService: LogService) { + cryptoService: CryptoService, messagingService: MessagingService, + apiService: ApiService, logService: LogService, stateService: StateService, syncService: SyncService) { super(i18nService, platformUtilsService, passwordGenerationService, policyService, cryptoService, - userService, messagingService, apiService, syncService, logService); + messagingService, apiService, stateService, syncService, logService); } } diff --git a/src/app/accounts/verify-email-token.component.ts b/src/app/accounts/verify-email-token.component.ts index aac7bac7..c588a983 100644 --- a/src/app/accounts/verify-email-token.component.ts +++ b/src/app/accounts/verify-email-token.component.ts @@ -9,12 +9,11 @@ import { import { first } from 'rxjs/operators'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { VerifyEmailRequest } from 'jslib-common/models/request/verifyEmailRequest'; @@ -23,10 +22,15 @@ import { VerifyEmailRequest } from 'jslib-common/models/request/verifyEmailReque templateUrl: 'verify-email-token.component.html', }) export class VerifyEmailTokenComponent implements OnInit { - constructor(private router: Router, private toasterService: ToasterService, - private i18nService: I18nService, private route: ActivatedRoute, - private apiService: ApiService, private userService: UserService, - private logService: LogService) { } + constructor( + private router: Router, + private platformUtilsService: PlatformUtilsService, + private i18nService: I18nService, + private route: ActivatedRoute, + private apiService: ApiService, + private logService: LogService, + private stateService: StateService + ) { } ngOnInit() { this.route.queryParams.pipe(first()).subscribe(async qParams => { @@ -34,18 +38,17 @@ export class VerifyEmailTokenComponent implements OnInit { try { await this.apiService.postAccountVerifyEmailToken( new VerifyEmailRequest(qParams.userId, qParams.token)); - const authed = await this.userService.isAuthenticated(); - if (authed) { + if (await this.stateService.getIsAuthenticated()) { await this.apiService.refreshIdentityToken(); } - this.toasterService.popAsync('success', null, this.i18nService.t('emailVerified')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('emailVerified')); this.router.navigate(['/']); return; } catch (e) { this.logService.error(e); } } - this.toasterService.popAsync('error', null, this.i18nService.t('emailVerifiedFailed')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('emailVerifiedFailed')); this.router.navigate(['/']); }); } diff --git a/src/app/accounts/verify-recover-delete.component.ts b/src/app/accounts/verify-recover-delete.component.ts index 524eaf32..a6f20b5b 100644 --- a/src/app/accounts/verify-recover-delete.component.ts +++ b/src/app/accounts/verify-recover-delete.component.ts @@ -9,11 +9,10 @@ import { import { first } from 'rxjs/operators'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { VerifyDeleteRecoverRequest } from 'jslib-common/models/request/verifyDeleteRecoverRequest'; @@ -29,7 +28,7 @@ export class VerifyRecoverDeleteComponent implements OnInit { private token: string; constructor(private router: Router, private apiService: ApiService, - private toasterService: ToasterService, private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private route: ActivatedRoute, private logService: LogService) { } @@ -50,7 +49,7 @@ export class VerifyRecoverDeleteComponent implements OnInit { const request = new VerifyDeleteRecoverRequest(this.userId, this.token); this.formPromise = this.apiService.postAccountRecoverDeleteToken(request); await this.formPromise; - this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'), + this.platformUtilsService.showToast('success', this.i18nService.t('accountDeleted'), this.i18nService.t('accountDeletedDesc')); this.router.navigate(['/']); } catch (e) { diff --git a/src/app/app.component.html b/src/app/app.component.html index 9d5a7a3e..0680b43f 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,2 +1 @@ - diff --git a/src/app/app.component.ts b/src/app/app.component.ts index f01ecb69..3129ba84 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,13 +1,3 @@ -import * as jq from 'jquery'; -import Swal from 'sweetalert2'; - -import { - BodyOutputType, - Toast, - ToasterConfig, - ToasterService, -} from 'angular2-toaster'; - import { Component, NgZone, @@ -20,12 +10,12 @@ import { NavigationEnd, Router, } from '@angular/router'; - -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; - -import { StorageService } from 'jslib-common/abstractions/storage.service'; +import * as jq from 'jquery'; +import { IndividualConfig, ToastrService } from 'ngx-toastr'; +import Swal from 'sweetalert2'; import { AuthService } from 'jslib-common/abstractions/auth.service'; +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; @@ -40,13 +30,11 @@ import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; import { SettingsService } from 'jslib-common/abstractions/settings.service'; import { StateService } from 'jslib-common/abstractions/state.service'; +import { StorageService } from 'jslib-common/abstractions/storage.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; import { TokenService } from 'jslib-common/abstractions/token.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; -import { ConstantsService } from 'jslib-common/services/constants.service'; - import { PolicyListService } from './services/policy-list.service'; import { RouterService } from './services/router.service'; @@ -69,32 +57,37 @@ const IdleTimeout = 60000 * 10; // 10 minutes }) export class AppComponent implements OnDestroy, OnInit { - toasterConfig: ToasterConfig = new ToasterConfig({ - showCloseButton: true, - mouseoverTimerStop: true, - animation: 'flyRight', - limit: 5, - }); - private lastActivity: number = null; private idleTimer: number = null; private isIdle = false; constructor( - private broadcasterService: BroadcasterService, private userService: UserService, - private tokenService: TokenService, private folderService: FolderService, - private settingsService: SettingsService, private syncService: SyncService, - private passwordGenerationService: PasswordGenerationService, private cipherService: CipherService, - private authService: AuthService, private router: Router, - private toasterService: ToasterService, private i18nService: I18nService, - private platformUtilsService: PlatformUtilsService, private ngZone: NgZone, - private vaultTimeoutService: VaultTimeoutService, private storageService: StorageService, - private cryptoService: CryptoService, private collectionService: CollectionService, - private sanitizer: DomSanitizer, private searchService: SearchService, - private notificationsService: NotificationsService, private routerService: RouterService, - private stateService: StateService, private eventService: EventService, - private policyService: PolicyService, protected policyListService: PolicyListService, - private keyConnectorService: KeyConnectorService) { } + private broadcasterService: BroadcasterService, + private tokenService: TokenService, + private folderService: FolderService, + private settingsService: SettingsService, + private syncService: SyncService, + private passwordGenerationService: PasswordGenerationService, + private cipherService: CipherService, + private authService: AuthService, + private router: Router, + private toastrService: ToastrService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private ngZone: NgZone, + private vaultTimeoutService: VaultTimeoutService, + private cryptoService: CryptoService, + private collectionService: CollectionService, + private sanitizer: DomSanitizer, + private searchService: SearchService, + private notificationsService: NotificationsService, + private routerService: RouterService, + private stateService: StateService, + private eventService: EventService, + private policyService: PolicyService, + protected policyListService: PolicyListService, + private keyConnectorService: KeyConnectorService + ) { } ngOnInit() { this.ngZone.runOutsideAngular(() => { @@ -209,31 +202,29 @@ export class AppComponent implements OnDestroy, OnInit { private async logOut(expired: boolean) { await this.eventService.uploadEvents(); - const userId = await this.userService.getUserId(); - + const userId = await this.stateService.getUserId(); await Promise.all([ this.eventService.clearEvents(), this.syncService.setLastSync(new Date(0)), this.tokenService.clearToken(), this.cryptoService.clearKeys(), - this.userService.clear(), this.settingsService.clear(userId), this.cipherService.clear(userId), this.folderService.clear(userId), this.collectionService.clear(userId), this.policyService.clear(userId), this.passwordGenerationService.clear(), - this.stateService.purge(), this.keyConnectorService.clear(), ]); this.searchService.clearIndex(); this.authService.logOut(async () => { if (expired) { - this.toasterService.popAsync('warning', this.i18nService.t('loggedOut'), + this.platformUtilsService.showToast('warning', this.i18nService.t('loggedOut'), this.i18nService.t('loginExpired')); } + await this.stateService.clean({ userId: userId }); Swal.close(); this.router.navigate(['/']); }); @@ -246,8 +237,7 @@ export class AppComponent implements OnDestroy, OnInit { } this.lastActivity = now; - this.storageService.save(ConstantsService.lastActiveKey, now); - + this.stateService.setLastActive(now); // Idle states if (this.isIdle) { this.isIdle = false; @@ -266,30 +256,29 @@ export class AppComponent implements OnDestroy, OnInit { } private showToast(msg: any) { - const toast: Toast = { - type: msg.type, - title: msg.title, - }; + let message = ''; + + const options: Partial = {}; + if (typeof (msg.text) === 'string') { - toast.body = msg.text; + message = msg.text; } else if (msg.text.length === 1) { - toast.body = msg.text[0]; + message = msg.text[0]; } else { - let message = ''; msg.text.forEach((t: string) => message += ('

' + this.sanitizer.sanitize(SecurityContext.HTML, t) + '

')); - toast.body = message; - toast.bodyOutputType = BodyOutputType.TrustedHtml; + options.enableHtml = true; } if (msg.options != null) { if (msg.options.trustedHtml === true) { - toast.bodyOutputType = BodyOutputType.TrustedHtml; + options.enableHtml = true; } if (msg.options.timeout != null && msg.options.timeout > 0) { - toast.timeout = msg.options.timeout; + options.timeOut = msg.options.timeout; } } - this.toasterService.popAsync(toast); + + this.toastrService.show(message, msg.title, options, 'toast-' + msg.type); } private idleStateChanged() { @@ -301,7 +290,7 @@ export class AppComponent implements OnDestroy, OnInit { } private async setFullWidth() { - const enableFullWidth = await this.storageService.get('enableFullWidth'); + const enableFullWidth = await this.stateService.getEnableFullWidth(); if (enableFullWidth) { document.body.classList.add('full-width'); } else { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5ad3b62f..a39ac073 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,4 +1,3 @@ -import { ToasterModule } from 'angular2-toaster'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { DragDropModule } from '@angular/cdk/drag-drop'; @@ -6,6 +5,8 @@ import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { BitwardenToastModule } from 'jslib-angular/components/toastr.component'; + import { AppComponent } from './app.component'; import { OssRoutingModule } from './oss-routing.module'; import { OssModule } from './oss.module'; @@ -18,7 +19,11 @@ import { WildcardRoutingModule } from './wildcard-routing.module'; BrowserAnimationsModule, FormsModule, ServicesModule, - ToasterModule.forRoot(), + BitwardenToastModule.forRoot({ + maxOpened: 5, + autoDismiss: true, + closeButton: true, + }), InfiniteScrollModule, DragDropModule, OssRoutingModule, diff --git a/src/app/common/base.accept.component.ts b/src/app/common/base.accept.component.ts index f18cfcff..0e246488 100644 --- a/src/app/common/base.accept.component.ts +++ b/src/app/common/base.accept.component.ts @@ -7,16 +7,11 @@ import { Router, } from '@angular/router'; -import { - Toast, - ToasterService, -} from 'angular2-toaster'; - import { first } from 'rxjs/operators'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; @Directive() export abstract class BaseAcceptComponent implements OnInit { @@ -29,21 +24,20 @@ export abstract class BaseAcceptComponent implements OnInit { protected failedShortMessage = 'inviteAcceptFailedShort'; protected failedMessage = 'inviteAcceptFailed'; - constructor(protected router: Router, protected toasterService: ToasterService, + constructor(protected router: Router, protected platformUtilService: PlatformUtilsService, protected i18nService: I18nService, protected route: ActivatedRoute, - protected userService: UserService, protected stateService: StateService) { } + protected stateService: StateService) { } abstract authedHandler(qParams: any): Promise; abstract unauthedHandler(qParams: any): Promise; ngOnInit() { this.route.queryParams.pipe(first()).subscribe(async qParams => { - await this.stateService.remove('loginRedirect'); - + await this.stateService.setLoginRedirect(null); let error = this.requiredParameters.some(e => qParams?.[e] == null || qParams[e] === ''); let errorMessage: string = null; if (!error) { - this.authed = await this.userService.isAuthenticated(); + this.authed = await this.stateService.getIsAuthenticated(); if (this.authed) { try { @@ -53,7 +47,7 @@ export abstract class BaseAcceptComponent implements OnInit { errorMessage = e.message; } } else { - await this.stateService.save('loginRedirect', { + await this.stateService.setLoginRedirect({ route: this.getRedirectRoute(), qParams: qParams, }); @@ -64,14 +58,9 @@ export abstract class BaseAcceptComponent implements OnInit { } if (error) { - const toast: Toast = { - type: 'error', - title: null, - body: errorMessage != null ? this.i18nService.t(this.failedShortMessage, errorMessage) : - this.i18nService.t(this.failedMessage), - timeout: 10000, - }; - this.toasterService.popAsync(toast); + const message = errorMessage != null ? this.i18nService.t(this.failedShortMessage, errorMessage) : + this.i18nService.t(this.failedMessage); + this.platformUtilService.showToast('error', null, message, {timeout: 10000}); this.router.navigate(['/']); } diff --git a/src/app/common/base.events.component.ts b/src/app/common/base.events.component.ts index 5b22d9c7..07392cd5 100644 --- a/src/app/common/base.events.component.ts +++ b/src/app/common/base.events.component.ts @@ -1,5 +1,4 @@ import { Directive } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; import { ExportService } from 'jslib-common/abstractions/export.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; @@ -29,8 +28,8 @@ export abstract class BaseEventsComponent { abstract readonly exportFileName: string; constructor(protected eventService: EventService, protected i18nService: I18nService, - protected toasterService: ToasterService, protected exportService: ExportService, - protected platformUtilsService: PlatformUtilsService, protected logService: LogService) { + protected exportService: ExportService, protected platformUtilsService: PlatformUtilsService, + protected logService: LogService) { const defaultDates = this.eventService.getDefaultDateFilters(); this.start = defaultDates[0]; this.end = defaultDates[1]; @@ -129,7 +128,7 @@ export abstract class BaseEventsComponent { try { dates = this.eventService.formatDateFilters(this.start, this.end); } catch (e) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('invalidDateRange')); return null; } diff --git a/src/app/common/base.people.component.ts b/src/app/common/base.people.component.ts index 6e769817..2f89989d 100644 --- a/src/app/common/base.people.component.ts +++ b/src/app/common/base.people.component.ts @@ -3,20 +3,17 @@ import { ViewChild, ViewContainerRef } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; -import { ValidationService } from 'jslib-angular/services/validation.service'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; - -import { ConstantsService } from 'jslib-common/services/constants.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; +import { ValidationService } from 'jslib-angular/services/validation.service'; import { SearchPipe } from 'jslib-angular/pipes/search.pipe'; import { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe'; @@ -89,12 +86,19 @@ export abstract class BasePeopleComponent>; @@ -190,7 +194,8 @@ export abstract class BasePeopleComponent(ConstantsService.autoConfirmFingerprints); + const autoConfirm = await this.stateService.getAutoConfirmFingerPrints(); if (autoConfirm == null || !autoConfirm) { const [modal] = await this.modalService.openViewRef(UserConfirmComponent, this.confirmModalRef, comp => { comp.name = this.userNamePipe.transform(user); diff --git a/src/app/layouts/navbar.component.ts b/src/app/layouts/navbar.component.ts index ec1f72d4..1c9341d8 100644 --- a/src/app/layouts/navbar.component.ts +++ b/src/app/layouts/navbar.component.ts @@ -5,9 +5,9 @@ import { import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; import { TokenService } from 'jslib-common/abstractions/token.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { Provider } from 'jslib-common/models/domain/provider'; @@ -22,7 +22,7 @@ export class NavbarComponent implements OnInit { providers: Provider[] = []; constructor(private messagingService: MessagingService, private platformUtilsService: PlatformUtilsService, - private tokenService: TokenService, private userService: UserService, private syncService: SyncService) { + private tokenService: TokenService, private providerService: ProviderService, private syncService: SyncService) { this.selfHosted = this.platformUtilsService.isSelfHost(); } @@ -37,7 +37,7 @@ export class NavbarComponent implements OnInit { if (await this.syncService.getLastSync() == null) { await this.syncService.fullSync(false); } - this.providers = await this.userService.getAllProviders(); + this.providers = await this.providerService.getAll(); } lock() { diff --git a/src/app/layouts/organization-layout.component.ts b/src/app/layouts/organization-layout.component.ts index bb7a4880..1f90abf1 100644 --- a/src/app/layouts/organization-layout.component.ts +++ b/src/app/layouts/organization-layout.component.ts @@ -7,9 +7,8 @@ import { import { ActivatedRoute } from '@angular/router'; -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; - -import { UserService } from 'jslib-common/abstractions/user.service'; +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { Organization } from 'jslib-common/models/domain/organization'; @@ -24,7 +23,7 @@ export class OrganizationLayoutComponent implements OnInit, OnDestroy { businessTokenPromise: Promise; private organizationId: string; - constructor(private route: ActivatedRoute, private userService: UserService, + constructor(private route: ActivatedRoute, private organizationService: OrganizationService, private broadcasterService: BroadcasterService, private ngZone: NgZone) { } ngOnInit() { @@ -49,7 +48,7 @@ export class OrganizationLayoutComponent implements OnInit, OnDestroy { } async load() { - this.organization = await this.userService.getOrganization(this.organizationId); + this.organization = await this.organizationService.get(this.organizationId); } get showMenuBar() { diff --git a/src/app/organizations/manage/collection-add-edit.component.ts b/src/app/organizations/manage/collection-add-edit.component.ts index c4c66e6e..df7fdf1b 100644 --- a/src/app/organizations/manage/collection-add-edit.component.ts +++ b/src/app/organizations/manage/collection-add-edit.component.ts @@ -6,14 +6,12 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { EncString } from 'jslib-common/models/domain/encString'; import { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey'; @@ -47,13 +45,17 @@ export class CollectionAddEditComponent implements OnInit { private orgKey: SymmetricCryptoKey; - constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService, - private cryptoService: CryptoService, private userService: UserService, - private logService: LogService) { } + constructor( + private apiService: ApiService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private cryptoService: CryptoService, + private logService: LogService, + private organizationService: OrganizationService + ) { } async ngOnInit() { - const organization = await this.userService.getOrganization(this.organizationId); + const organization = await this.organizationService.get(this.organizationId); this.accessGroups = organization.useGroups; this.editMode = this.loading = this.collectionId != null; if (this.accessGroups) { @@ -128,7 +130,7 @@ export class CollectionAddEditComponent implements OnInit { this.formPromise = this.apiService.postCollection(this.organizationId, request); } await this.formPromise; - this.toasterService.popAsync('success', null, + this.platformUtilsService.showToast('success', null, this.i18nService.t(this.editMode ? 'editedCollectionId' : 'createdCollectionId', this.name)); this.onSavedCollection.emit(); } catch (e) { @@ -151,7 +153,7 @@ export class CollectionAddEditComponent implements OnInit { try { this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId); await this.deletePromise; - this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', this.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedCollectionId', this.name)); this.onDeletedCollection.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/manage/collections.component.ts b/src/app/organizations/manage/collections.component.ts index 14171cd1..c3120026 100644 --- a/src/app/organizations/manage/collections.component.ts +++ b/src/app/organizations/manage/collections.component.ts @@ -5,7 +5,6 @@ import { ViewContainerRef, } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { first } from 'rxjs/operators'; @@ -13,9 +12,9 @@ import { ApiService } from 'jslib-common/abstractions/api.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -54,11 +53,17 @@ export class CollectionsComponent implements OnInit { private pagedCollectionsCount = 0; - constructor(private apiService: ApiService, private route: ActivatedRoute, - private collectionService: CollectionService, private modalService: ModalService, - private toasterService: ToasterService, private i18nService: I18nService, - private platformUtilsService: PlatformUtilsService, private userService: UserService, - private searchService: SearchService, private logService: LogService) { } + constructor( + private apiService: ApiService, + private route: ActivatedRoute, + private collectionService: CollectionService, + private modalService: ModalService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private searchService: SearchService, + private logService: LogService, + private organizationService: OrganizationService, + ) { } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { @@ -71,7 +76,7 @@ export class CollectionsComponent implements OnInit { } async load() { - this.organization = await this.userService.getOrganization(this.organizationId); + this.organization = await this.organizationService.get(this.organizationId); this.canCreate = this.organization.canCreateNewCollections; const decryptCollections = async (r: ListResponse) => { @@ -119,7 +124,7 @@ export class CollectionsComponent implements OnInit { const canDelete = collection != null && this.canDelete(collection); if (!(canCreate || canEdit || canDelete)) { - this.toasterService.popAsync('error', null, this.i18nService.t('missingPermissions')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('missingPermissions')); return; } @@ -153,11 +158,11 @@ export class CollectionsComponent implements OnInit { try { await this.apiService.deleteCollection(this.organizationId, collection.id); - this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', collection.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedCollectionId', collection.name)); this.removeCollection(collection); } catch (e) { this.logService.error(e); - this.toasterService.popAsync('error', null, this.i18nService.t('missingPermissions')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('missingPermissions')); } } diff --git a/src/app/organizations/manage/entity-events.component.ts b/src/app/organizations/manage/entity-events.component.ts index ceadd483..f451a4a7 100644 --- a/src/app/organizations/manage/entity-events.component.ts +++ b/src/app/organizations/manage/entity-events.component.ts @@ -4,8 +4,6 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -14,6 +12,7 @@ import { EventService } from '../../services/event.service'; import { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { EventResponse } from 'jslib-common/models/response/eventResponse'; import { ListResponse } from 'jslib-common/models/response/listResponse'; @@ -42,7 +41,7 @@ export class EntityEventsComponent implements OnInit { private orgUsersIdMap = new Map(); constructor(private apiService: ApiService, private i18nService: I18nService, - private eventService: EventService, private toasterService: ToasterService, + private eventService: EventService, private platformUtilsService: PlatformUtilsService, private userNamePipe: UserNamePipe, private logService: LogService) { } async ngOnInit() { @@ -74,7 +73,7 @@ export class EntityEventsComponent implements OnInit { try { dates = this.eventService.formatDateFilters(this.start, this.end); } catch (e) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('invalidDateRange')); return; } diff --git a/src/app/organizations/manage/entity-users.component.ts b/src/app/organizations/manage/entity-users.component.ts index 999e8cf3..094f1158 100644 --- a/src/app/organizations/manage/entity-users.component.ts +++ b/src/app/organizations/manage/entity-users.component.ts @@ -6,8 +6,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -17,6 +15,7 @@ import { OrganizationUserType } from 'jslib-common/enums/organizationUserType'; import { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest'; import { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { Utils } from 'jslib-common/misc/utils'; @Component({ @@ -42,7 +41,7 @@ export class EntityUsersComponent implements OnInit { private allUsers: OrganizationUserUserDetailsResponse[] = []; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { await this.loadUsers(); @@ -129,7 +128,7 @@ export class EntityUsersComponent implements OnInit { this.formPromise = this.apiService.putCollectionUsers(this.organizationId, this.entityId, selections); } await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('updatedUsers')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('updatedUsers')); this.onEditedUsers.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/manage/events.component.ts b/src/app/organizations/manage/events.component.ts index d428c5e1..92bff2e3 100644 --- a/src/app/organizations/manage/events.component.ts +++ b/src/app/organizations/manage/events.component.ts @@ -3,7 +3,6 @@ import { OnInit, } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe'; @@ -11,8 +10,9 @@ import { ApiService } from 'jslib-common/abstractions/api.service'; import { ExportService } from 'jslib-common/abstractions/export.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { Organization } from 'jslib-common/models/domain/organization'; import { EventResponse } from 'jslib-common/models/response/eventResponse'; @@ -32,17 +32,32 @@ export class EventsComponent extends BaseEventsComponent implements OnInit { private orgUsersUserIdMap = new Map(); - constructor(private apiService: ApiService, private route: ActivatedRoute, eventService: EventService, - i18nService: I18nService, toasterService: ToasterService, private userService: UserService, - exportService: ExportService, platformUtilsService: PlatformUtilsService, private router: Router, - logService: LogService, private userNamePipe: UserNamePipe) { - super(eventService, i18nService, toasterService, exportService, platformUtilsService, logService); + constructor( + private apiService: ApiService, + private route: ActivatedRoute, + eventService: EventService, + i18nService: I18nService, + exportService: ExportService, + platformUtilsService: PlatformUtilsService, + private router: Router, + logService: LogService, + private userNamePipe: UserNamePipe, + private organizationService: OrganizationService, + private providerService: ProviderService, + ) { + super( + eventService, + i18nService, + exportService, + platformUtilsService, + logService + ); } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { this.organizationId = params.organizationId; - this.organization = await this.userService.getOrganization(this.organizationId); + this.organization = await this.organizationService.get(this.organizationId); if (this.organization == null || !this.organization.useEvents) { this.router.navigate(['/organizations', this.organizationId]); return; @@ -61,8 +76,8 @@ export class EventsComponent extends BaseEventsComponent implements OnInit { if (this.organization.providerId != null) { try { - const provider = await this.userService.getProvider(this.organization.providerId); - if (provider != null && (await this.userService.getProvider(this.organization.providerId)).canManageUsers) { + const provider = await this.providerService.get(this.organization.providerId); + if (provider != null && (await this.providerService.get(this.organization.providerId)).canManageUsers) { const providerUsersResponse = await this.apiService.getProviderUsers(this.organization.providerId); providerUsersResponse.data.forEach(u => { const name = this.userNamePipe.transform(u); diff --git a/src/app/organizations/manage/group-add-edit.component.ts b/src/app/organizations/manage/group-add-edit.component.ts index 991e9744..cd6be83a 100644 --- a/src/app/organizations/manage/group-add-edit.component.ts +++ b/src/app/organizations/manage/group-add-edit.component.ts @@ -6,8 +6,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; @@ -42,7 +40,7 @@ export class GroupAddEditComponent implements OnInit { deletePromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private collectionService: CollectionService, + private collectionService: CollectionService, private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { @@ -112,7 +110,7 @@ export class GroupAddEditComponent implements OnInit { this.formPromise = this.apiService.postGroup(this.organizationId, request); } await this.formPromise; - this.toasterService.popAsync('success', null, + this.platformUtilsService.showToast('success', null, this.i18nService.t(this.editMode ? 'editedGroupId' : 'createdGroupId', this.name)); this.onSavedGroup.emit(); } catch (e) { @@ -135,7 +133,7 @@ export class GroupAddEditComponent implements OnInit { try { this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId); await this.deletePromise; - this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', this.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedGroupId', this.name)); this.onDeletedGroup.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/manage/groups.component.ts b/src/app/organizations/manage/groups.component.ts index 65ab870e..9d792459 100644 --- a/src/app/organizations/manage/groups.component.ts +++ b/src/app/organizations/manage/groups.component.ts @@ -11,14 +11,12 @@ import { import { first } from 'rxjs/operators'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -48,16 +46,22 @@ export class GroupsComponent implements OnInit { private pagedGroupsCount = 0; - constructor(private apiService: ApiService, private route: ActivatedRoute, - private i18nService: I18nService, private modalService: ModalService, - private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService, - private userService: UserService, private router: Router, - private searchService: SearchService, private logService: LogService) { } + constructor( + private apiService: ApiService, + private route: ActivatedRoute, + private i18nService: I18nService, + private modalService: ModalService, + private platformUtilsService: PlatformUtilsService, + private router: Router, + private searchService: SearchService, + private logService: LogService, + private organizationService: OrganizationService, + ) { } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { this.organizationId = params.organizationId; - const organization = await this.userService.getOrganization(this.organizationId); + const organization = await this.organizationService.get(this.organizationId); if (organization == null || !organization.useGroups) { this.router.navigate(['/organizations', this.organizationId]); return; @@ -123,7 +127,7 @@ export class GroupsComponent implements OnInit { try { await this.apiService.deleteGroup(this.organizationId, group.id); - this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', group.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedGroupId', group.name)); this.removeGroup(group); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/manage/manage.component.ts b/src/app/organizations/manage/manage.component.ts index fc760f63..19cbbe47 100644 --- a/src/app/organizations/manage/manage.component.ts +++ b/src/app/organizations/manage/manage.component.ts @@ -4,7 +4,7 @@ import { } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { Organization } from 'jslib-common/models/domain/organization'; @@ -19,11 +19,11 @@ export class ManageComponent implements OnInit { accessEvents: boolean = false; accessSso: boolean = false; - constructor(private route: ActivatedRoute, private userService: UserService) {} + constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {} ngOnInit() { this.route.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); this.accessPolicies = this.organization.usePolicies; this.accessSso = this.organization.useSso; this.accessEvents = this.organization.useEvents; diff --git a/src/app/organizations/manage/people.component.ts b/src/app/organizations/manage/people.component.ts index 40a398c2..3e38b6b2 100644 --- a/src/app/organizations/manage/people.component.ts +++ b/src/app/organizations/manage/people.component.ts @@ -12,20 +12,18 @@ import { Router, } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ValidationService } from 'jslib-angular/services/validation.service'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -80,21 +78,43 @@ export class PeopleComponent extends BasePeopleComponent { this.organizationId = params.organizationId; - const organization = await this.userService.getOrganization(this.organizationId); + const organization = await this.organizationService.get(this.organizationId); if (!organization.canManageUsers) { this.router.navigate(['../collections'], { relativeTo: this.route }); return; @@ -239,7 +259,7 @@ export class PeopleComponent extends BasePeopleComponent u.status === OrganizationUserStatusType.Invited); if (filteredUsers.length <= 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('noSelectedUsersApplicable')); return; } diff --git a/src/app/organizations/manage/policies.component.ts b/src/app/organizations/manage/policies.component.ts index 8b667952..c4bbff52 100644 --- a/src/app/organizations/manage/policies.component.ts +++ b/src/app/organizations/manage/policies.component.ts @@ -14,7 +14,7 @@ import { first } from 'rxjs/operators'; import { PolicyType } from 'jslib-common/enums/policyType'; import { ApiService } from 'jslib-common/abstractions/api.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -43,13 +43,13 @@ export class PoliciesComponent implements OnInit { private policiesEnabledMap: Map = new Map(); constructor(private apiService: ApiService, private route: ActivatedRoute, - private modalService: ModalService, private userService: UserService, + private modalService: ModalService, private organizationService: OrganizationService, private policyListService: PolicyListService, private router: Router) { } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { this.organizationId = params.organizationId; - this.organization = await this.userService.getOrganization(this.organizationId); + this.organization = await this.organizationService.get(this.organizationId); if (this.organization == null || !this.organization.usePolicies) { this.router.navigate(['/organizations', this.organizationId]); return; diff --git a/src/app/organizations/manage/policy-edit.component.ts b/src/app/organizations/manage/policy-edit.component.ts index c4105aae..e9066cc8 100644 --- a/src/app/organizations/manage/policy-edit.component.ts +++ b/src/app/organizations/manage/policy-edit.component.ts @@ -9,11 +9,10 @@ import { ViewContainerRef, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyType } from 'jslib-common/enums/policyType'; @@ -45,7 +44,7 @@ export class PolicyEditComponent { private policyResponse: PolicyResponse; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private componentFactoryResolver: ComponentFactoryResolver, + private platformUtilsService: PlatformUtilsService, private componentFactoryResolver: ComponentFactoryResolver, private cdr: ChangeDetectorRef, private logService: LogService) { } @@ -78,14 +77,14 @@ export class PolicyEditComponent { try { request = await this.policyComponent.buildRequest(this.policiesEnabledMap); } catch (e) { - this.toasterService.pop('error', null, e); + this.platformUtilsService.showToast('error', null, e); return; } try { this.formPromise = this.apiService.putPolicy(this.organizationId, this.policy.type, request); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('editedPolicyId', this.i18nService.t(this.policy.name))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('editedPolicyId', this.i18nService.t(this.policy.name))); this.onSavedPolicy.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/manage/user-add-edit.component.ts b/src/app/organizations/manage/user-add-edit.component.ts index 0ea8d609..20a8b871 100644 --- a/src/app/organizations/manage/user-add-edit.component.ts +++ b/src/app/organizations/manage/user-add-edit.component.ts @@ -6,8 +6,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; @@ -86,7 +84,7 @@ export class UserAddEditComponent implements OnInit { } constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private collectionService: CollectionService, + private collectionService: CollectionService, private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { @@ -181,7 +179,7 @@ export class UserAddEditComponent implements OnInit { this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request); } await this.formPromise; - this.toasterService.popAsync('success', null, + this.platformUtilsService.showToast('success', null, this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name)); this.onSavedUser.emit(); } catch (e) { @@ -205,7 +203,7 @@ export class UserAddEditComponent implements OnInit { try { this.deletePromise = this.apiService.deleteOrganizationUser(this.organizationId, this.organizationUserId); await this.deletePromise; - this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('removedUserId', this.name)); this.onDeletedUser.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/manage/user-confirm.component.ts b/src/app/organizations/manage/user-confirm.component.ts index 2c7dbab3..6bcd2927 100644 --- a/src/app/organizations/manage/user-confirm.component.ts +++ b/src/app/organizations/manage/user-confirm.component.ts @@ -6,11 +6,9 @@ import { Output, } from '@angular/core'; -import { ConstantsService } from 'jslib-common/services/constants.service'; - import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { LogService } from 'jslib-common/abstractions/log.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; @Component({ selector: 'app-user-confirm', @@ -27,8 +25,8 @@ export class UserConfirmComponent implements OnInit { fingerprint: string; formPromise: Promise; - constructor(private cryptoService: CryptoService, private storageService: StorageService, - private logService: LogService) { } + constructor(private cryptoService: CryptoService, private logService: LogService, + private stateService: StateService) { } async ngOnInit() { try { @@ -50,7 +48,7 @@ export class UserConfirmComponent implements OnInit { } if (this.dontAskAgain) { - await this.storageService.save(ConstantsService.autoConfirmFingerprints, true); + await this.stateService.setAutoConfirmFingerprints(true); } this.onConfirmedUser.emit(); diff --git a/src/app/organizations/manage/user-groups.component.ts b/src/app/organizations/manage/user-groups.component.ts index 5b71c598..98d2085c 100644 --- a/src/app/organizations/manage/user-groups.component.ts +++ b/src/app/organizations/manage/user-groups.component.ts @@ -6,11 +6,10 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { OrganizationUserUpdateGroupsRequest } from 'jslib-common/models/request/organizationUserUpdateGroupsRequest'; import { GroupResponse } from 'jslib-common/models/response/groupResponse'; @@ -32,7 +31,7 @@ export class UserGroupsComponent implements OnInit { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { const groupsResponse = await this.apiService.getGroups(this.organizationId); @@ -77,7 +76,7 @@ export class UserGroupsComponent implements OnInit { this.formPromise = this.apiService.putOrganizationUserGroups(this.organizationId, this.organizationUserId, request); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('editedGroupsForUser', this.name)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('editedGroupsForUser', this.name)); this.onSavedUser.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/policies/master-password.component.ts b/src/app/organizations/policies/master-password.component.ts index 2f2b2299..4fbb837d 100644 --- a/src/app/organizations/policies/master-password.component.ts +++ b/src/app/organizations/policies/master-password.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PolicyType } from 'jslib-common/enums/policyType'; @@ -33,7 +33,7 @@ export class MasterPasswordPolicyComponent extends BasePolicyComponent { passwordScores: { name: string; value: number; }[]; showKeyConnectorInfo: boolean = false; - constructor(private fb: FormBuilder, i18nService: I18nService, private userService: UserService) { + constructor(private fb: FormBuilder, i18nService: I18nService, private organizationService: OrganizationService) { super(); this.passwordScores = [ @@ -48,7 +48,7 @@ export class MasterPasswordPolicyComponent extends BasePolicyComponent { async ngOnInit() { super.ngOnInit(); - const organization = await this.userService.getOrganization(this.policyResponse.organizationId); + const organization = await this.organizationService.get(this.policyResponse.organizationId); this.showKeyConnectorInfo = organization.keyConnectorEnabled; } } diff --git a/src/app/organizations/policies/reset-password.component.ts b/src/app/organizations/policies/reset-password.component.ts index 0c3ee267..a7000cb4 100644 --- a/src/app/organizations/policies/reset-password.component.ts +++ b/src/app/organizations/policies/reset-password.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { FormBuilder } from '@angular/forms'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PolicyType } from 'jslib-common/enums/policyType'; @@ -32,13 +32,13 @@ export class ResetPasswordPolicyComponent extends BasePolicyComponent { defaultTypes: { name: string; value: string; }[]; showKeyConnectorInfo: boolean = false; - constructor(private fb: FormBuilder, private userService: UserService) { + constructor(private fb: FormBuilder, private organizationService: OrganizationService) { super(); } async ngOnInit() { super.ngOnInit(); - const organization = await this.userService.getOrganization(this.policyResponse.organizationId); + const organization = await this.organizationService.get(this.policyResponse.organizationId); this.showKeyConnectorInfo = organization.keyConnectorEnabled; } } diff --git a/src/app/organizations/settings/account.component.ts b/src/app/organizations/settings/account.component.ts index 03c2db81..49cebc0e 100644 --- a/src/app/organizations/settings/account.component.ts +++ b/src/app/organizations/settings/account.component.ts @@ -9,7 +9,6 @@ import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { ModalService } from 'jslib-angular/services/modal.service'; import { ApiService } from 'jslib-common/abstractions/api.service'; @@ -52,7 +51,7 @@ export class AccountComponent { constructor(private modalService: ModalService, private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private route: ActivatedRoute, + private route: ActivatedRoute, private syncService: SyncService, private platformUtilsService: PlatformUtilsService, private cryptoService: CryptoService, private logService: LogService, private router: Router) { } @@ -90,7 +89,7 @@ export class AccountComponent { return this.syncService.fullSync(true); }); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('organizationUpdated')); } catch (e) { this.logService.error(e); } @@ -99,7 +98,7 @@ export class AccountComponent { async submitTaxInfo() { this.taxFormPromise = this.taxInfo.submitTaxInfo(); await this.taxFormPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('taxInfoUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('taxInfoUpdated')); } async deleteOrganization() { diff --git a/src/app/organizations/settings/adjust-subscription.component.ts b/src/app/organizations/settings/adjust-subscription.component.ts index 0a477f20..c84f6f72 100644 --- a/src/app/organizations/settings/adjust-subscription.component.ts +++ b/src/app/organizations/settings/adjust-subscription.component.ts @@ -5,11 +5,10 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { OrganizationSubscriptionUpdateRequest } from 'jslib-common/models/request/organizationSubscriptionUpdateRequest'; @@ -31,7 +30,7 @@ export class AdjustSubscription { newMaxSeats: number; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } ngOnInit() { this.limitSubscription = this.maxAutoscaleSeats != null; @@ -47,7 +46,7 @@ export class AdjustSubscription { await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('subscriptionUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('subscriptionUpdated')); } catch (e) { this.logService.error(e); } diff --git a/src/app/organizations/settings/delete-organization.component.ts b/src/app/organizations/settings/delete-organization.component.ts index a468c2e4..98985ac7 100644 --- a/src/app/organizations/settings/delete-organization.component.ts +++ b/src/app/organizations/settings/delete-organization.component.ts @@ -4,13 +4,12 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { Verification } from 'jslib-common/types/verification'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { UserVerificationService } from 'jslib-common/abstractions/userVerification.service'; @Component({ @@ -26,7 +25,7 @@ export class DeleteOrganizationComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private userVerificationService: UserVerificationService, + private platformUtilsService: PlatformUtilsService, private userVerificationService: UserVerificationService, private logService: LogService) { } async submit() { @@ -34,7 +33,7 @@ export class DeleteOrganizationComponent { this.formPromise = this.userVerificationService.buildRequest(this.masterPassword) .then(request => this.apiService.deleteOrganization(this.organizationId, request)); await this.formPromise; - this.toasterService.popAsync('success', this.i18nService.t('organizationDeleted'), + this.platformUtilsService.showToast('success', this.i18nService.t('organizationDeleted'), this.i18nService.t('organizationDeletedDesc')); this.onSuccess.emit(); } catch (e) { diff --git a/src/app/organizations/settings/organization-billing.component.ts b/src/app/organizations/settings/organization-billing.component.ts index 8666888c..5c278a05 100644 --- a/src/app/organizations/settings/organization-billing.component.ts +++ b/src/app/organizations/settings/organization-billing.component.ts @@ -4,8 +4,6 @@ import { } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -18,10 +16,10 @@ import { UserBillingComponent } from '../../settings/user-billing.component'; templateUrl: '../../settings/user-billing.component.html', }) export class OrganizationBillingComponent extends UserBillingComponent implements OnInit { - constructor(apiService: ApiService, i18nService: I18nService, toasterService: ToasterService, + constructor(apiService: ApiService, i18nService: I18nService, private route: ActivatedRoute, platformUtilsService: PlatformUtilsService, logService: LogService) { - super(apiService, i18nService, toasterService, platformUtilsService, logService); + super(apiService, i18nService, platformUtilsService, logService); } async ngOnInit() { diff --git a/src/app/organizations/settings/organization-subscription.component.ts b/src/app/organizations/settings/organization-subscription.component.ts index f8a15e62..2fda26f9 100644 --- a/src/app/organizations/settings/organization-subscription.component.ts +++ b/src/app/organizations/settings/organization-subscription.component.ts @@ -3,7 +3,6 @@ import { OnInit, } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; import { Organization } from 'jslib-common/models/domain/organization'; import { OrganizationSubscriptionResponse } from 'jslib-common/models/response/organizationSubscriptionResponse'; @@ -12,8 +11,8 @@ import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { PlanType } from 'jslib-common/enums/planType'; @@ -43,9 +42,9 @@ export class OrganizationSubscriptionComponent implements OnInit { reinstatePromise: Promise; constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService, - private i18nService: I18nService, private toasterService: ToasterService, + private i18nService: I18nService, private messagingService: MessagingService, private route: ActivatedRoute, - private userService: UserService, private logService: LogService) { + private organizationService: OrganizationService, private logService: LogService) { this.selfHosted = platformUtilsService.isSelfHost(); } @@ -63,7 +62,7 @@ export class OrganizationSubscriptionComponent implements OnInit { } this.loading = true; - this.userOrg = await this.userService.getOrganization(this.organizationId); + this.userOrg = await this.organizationService.get(this.organizationId); this.sub = await this.apiService.getOrganizationSubscription(this.organizationId); this.loading = false; } @@ -82,7 +81,7 @@ export class OrganizationSubscriptionComponent implements OnInit { try { this.reinstatePromise = this.apiService.postOrganizationReinstate(this.organizationId); await this.reinstatePromise; - this.toasterService.popAsync('success', null, this.i18nService.t('reinstated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('reinstated')); this.load(); } catch (e) { this.logService.error(e); @@ -103,7 +102,7 @@ export class OrganizationSubscriptionComponent implements OnInit { try { this.cancelPromise = this.apiService.postOrganizationCancel(this.organizationId); await this.cancelPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('canceledSubscription')); this.load(); } catch (e) { this.logService.error(e); @@ -170,7 +169,7 @@ export class OrganizationSubscriptionComponent implements OnInit { try { this.removeSponsorshipPromise = this.apiService.deleteRemoveSponsorship(this.organizationId); await this.removeSponsorshipPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('removeSponsorshipSuccess')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('removeSponsorshipSuccess')); await this.load(); } catch (e) { this.logService.error(e); diff --git a/src/app/organizations/settings/settings.component.ts b/src/app/organizations/settings/settings.component.ts index 5caafd11..9c973155 100644 --- a/src/app/organizations/settings/settings.component.ts +++ b/src/app/organizations/settings/settings.component.ts @@ -1,8 +1,8 @@ import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; @Component({ selector: 'app-org-settings', @@ -12,13 +12,13 @@ export class SettingsComponent { access2fa = false; selfHosted: boolean; - constructor(private route: ActivatedRoute, private userService: UserService, + constructor(private route: ActivatedRoute, private organizationService: OrganizationService, private platformUtilsService: PlatformUtilsService) { } ngOnInit() { this.route.parent.params.subscribe(async params => { this.selfHosted = await this.platformUtilsService.isSelfHost(); - const organization = await this.userService.getOrganization(params.organizationId); + const organization = await this.organizationService.get(params.organizationId); this.access2fa = organization.use2fa; }); } diff --git a/src/app/organizations/settings/two-factor-setup.component.ts b/src/app/organizations/settings/two-factor-setup.component.ts index d2969266..8fab3e8b 100644 --- a/src/app/organizations/settings/two-factor-setup.component.ts +++ b/src/app/organizations/settings/two-factor-setup.component.ts @@ -4,7 +4,7 @@ import { ActivatedRoute } from '@angular/router'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -18,10 +18,10 @@ import { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from '../../se templateUrl: '../../settings/two-factor-setup.component.html', }) export class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent { - constructor(apiService: ApiService, userService: UserService, + constructor(apiService: ApiService, modalService: ModalService, messagingService: MessagingService, - policyService: PolicyService, private route: ActivatedRoute) { - super(apiService, userService, modalService, messagingService, policyService); + policyService: PolicyService, private route: ActivatedRoute, stateService: StateService) { + super(apiService, modalService, messagingService, policyService, stateService); } async ngOnInit() { diff --git a/src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts b/src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts index d8923a15..f48d1a37 100644 --- a/src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts +++ b/src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts @@ -8,10 +8,6 @@ import { ActivatedRoute, Router, } from '@angular/router'; -import { - Toast, - ToasterService, -} from 'angular2-toaster'; import { first } from 'rxjs/operators'; @@ -20,8 +16,8 @@ import { ValidationService } from 'jslib-angular/services/validation.service'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { PlanSponsorshipType } from 'jslib-common/enums/planSponsorshipType'; import { PlanType } from 'jslib-common/enums/planType'; @@ -33,6 +29,7 @@ import { OrganizationSponsorshipRedeemRequest } from 'jslib-common/models/reques import { DeleteOrganizationComponent } from 'src/app/organizations/settings/delete-organization.component'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { OrganizationPlansComponent } from 'src/app/settings/organization-plans.component'; @Component({ @@ -65,10 +62,10 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit { _organizationPlansComponent: OrganizationPlansComponent; _selectedFamilyOrganizationId: string = ''; - constructor(private router: Router, private toasterService: ToasterService, + constructor(private router: Router, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private route: ActivatedRoute, private apiService: ApiService, private syncService: SyncService, - private validationService: ValidationService, private userService: UserService, + private validationService: ValidationService, private organizationService: OrganizationService, private modalService: ModalService) { } async ngOnInit() { @@ -76,13 +73,8 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit { this.route.queryParams.pipe(first()).subscribe(async qParams => { const error = qParams.token == null; if (error) { - const toast: Toast = { - type: 'error', - title: null, - body: this.i18nService.t('sponsoredFamiliesAcceptFailed'), - timeout: 10000, - }; - this.toasterService.popAsync(toast); + this.platformUtilsService.showToast('error', null, this.i18nService.t('sponsoredFamiliesAcceptFailed'), + { timeout: 10000 }); this.router.navigate(['/']); return; } @@ -93,7 +85,7 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit { this.badToken = !await this.apiService.postPreValidateSponsorshipToken(this.token); this.loading = false; - this.existingFamilyOrganizations = (await this.userService.getAllOrganizations()) + this.existingFamilyOrganizations = (await this.organizationService.getAll()) .filter(o => o.planProductType === ProductType.Families); if (this.existingFamilyOrganizations.length === 0) { @@ -124,7 +116,7 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit { request.sponsoredOrganizationId = organizationId; await this.apiService.postRedeemSponsorship(this.token, request); - this.toasterService.popAsync('success', null, this.i18nService.t('sponsoredFamiliesOfferRedeemed')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('sponsoredFamiliesOfferRedeemed')); await this.syncService.fullSync(true); this.router.navigate(['/']); diff --git a/src/app/organizations/tools/exposed-passwords-report.component.ts b/src/app/organizations/tools/exposed-passwords-report.component.ts index f49a11e2..6cbf8f2e 100644 --- a/src/app/organizations/tools/exposed-passwords-report.component.ts +++ b/src/app/organizations/tools/exposed-passwords-report.component.ts @@ -4,8 +4,9 @@ import { ActivatedRoute } from '@angular/router'; import { AuditService } from 'jslib-common/abstractions/audit.service'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -16,6 +17,7 @@ import { import { Cipher } from 'jslib-common/models/domain/cipher'; import { CipherView } from 'jslib-common/models/view/cipherView'; + @Component({ selector: 'app-exposed-passwords-report', templateUrl: '../../tools/exposed-passwords-report.component.html', @@ -24,16 +26,19 @@ export class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportC manageableCiphers: Cipher[]; constructor(cipherService: CipherService, auditService: AuditService, - modalService: ModalService, messagingService: MessagingService, - userService: UserService, passwordRepromptService: PasswordRepromptService, private route: ActivatedRoute) { - super(cipherService, auditService, modalService, messagingService, userService, passwordRepromptService); + modalService: ModalService, messagingService: MessagingService, stateService: StateService, + private organizationService: OrganizationService, private route: ActivatedRoute, + passwordRepromptService: PasswordRepromptService) { + super(cipherService, auditService, modalService, messagingService, stateService, passwordRepromptService); } ngOnInit() { + const dynamicSuper = Object.getPrototypeOf(this.constructor.prototype); this.route.parent.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); this.manageableCiphers = await this.cipherService.getAll(); - super.ngOnInit(); + // TODO: We should do something about this, calling super in an async function is bad + dynamicSuper.ngOnInit(); }); } diff --git a/src/app/organizations/tools/import.component.ts b/src/app/organizations/tools/import.component.ts index 6e3d8655..c90feea7 100644 --- a/src/app/organizations/tools/import.component.ts +++ b/src/app/organizations/tools/import.component.ts @@ -4,14 +4,12 @@ import { Router, } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { ImportService } from 'jslib-common/abstractions/import.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ImportComponent as BaseImportComponent } from '../../tools/import.component'; @@ -22,11 +20,24 @@ import { ImportComponent as BaseImportComponent } from '../../tools/import.compo export class ImportComponent extends BaseImportComponent { organizationName: string; - constructor(i18nService: I18nService, toasterService: ToasterService, - importService: ImportService, router: Router, private route: ActivatedRoute, - platformUtilsService: PlatformUtilsService, policyService: PolicyService, - private userService: UserService, logService: LogService) { - super(i18nService, toasterService, importService, router, platformUtilsService, policyService, logService); + constructor( + i18nService: I18nService, + importService: ImportService, + router: Router, + private route: ActivatedRoute, + platformUtilsService: PlatformUtilsService, + policyService: PolicyService, + private organizationService: OrganizationService, + logService: LogService + ) { + super( + i18nService, + importService, + router, + platformUtilsService, + policyService, + logService + ); } async ngOnInit() { @@ -36,7 +47,7 @@ export class ImportComponent extends BaseImportComponent { await super.ngOnInit(); this.importBlockedByPolicy = false; }); - const organization = await this.userService.getOrganization(this.organizationId); + const organization = await this.organizationService.get(this.organizationId); this.organizationName = organization.name; } diff --git a/src/app/organizations/tools/inactive-two-factor-report.component.ts b/src/app/organizations/tools/inactive-two-factor-report.component.ts index 8ee65303..37cecb7d 100644 --- a/src/app/organizations/tools/inactive-two-factor-report.component.ts +++ b/src/app/organizations/tools/inactive-two-factor-report.component.ts @@ -4,8 +4,9 @@ import { ActivatedRoute } from '@angular/router'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -15,20 +16,22 @@ import { import { CipherView } from 'jslib-common/models/view/cipherView'; + @Component({ selector: 'app-inactive-two-factor-report', templateUrl: '../../tools/inactive-two-factor-report.component.html', }) export class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent { constructor(cipherService: CipherService, modalService: ModalService, - messagingService: MessagingService, userService: UserService, - private route: ActivatedRoute, logService: LogService, passwordRepromptService: PasswordRepromptService) { - super(cipherService, modalService, messagingService, userService, logService, passwordRepromptService); + messagingService: MessagingService, stateService: StateService, + private route: ActivatedRoute, logService: LogService, passwordRepromptService: PasswordRepromptService, + private organizationService: OrganizationService) { + super(cipherService, modalService, messagingService, stateService, logService, passwordRepromptService); } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); await super.ngOnInit(); }); } diff --git a/src/app/organizations/tools/reused-passwords-report.component.ts b/src/app/organizations/tools/reused-passwords-report.component.ts index b9a18f1e..3a46b33e 100644 --- a/src/app/organizations/tools/reused-passwords-report.component.ts +++ b/src/app/organizations/tools/reused-passwords-report.component.ts @@ -3,8 +3,9 @@ import { ActivatedRoute } from '@angular/router'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -24,14 +25,15 @@ export class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportCom manageableCiphers: Cipher[]; constructor(cipherService: CipherService, modalService: ModalService, - messagingService: MessagingService, userService: UserService, passwordRepromptService: PasswordRepromptService, - private route: ActivatedRoute) { - super(cipherService, modalService, messagingService, userService, passwordRepromptService); + messagingService: MessagingService, stateService: StateService, + private route: ActivatedRoute, private organizationService: OrganizationService, + passwordRepromptService: PasswordRepromptService) { + super(cipherService, modalService, messagingService, stateService, passwordRepromptService); } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); this.manageableCiphers = await this.cipherService.getAll(); await super.ngOnInit(); }); diff --git a/src/app/organizations/tools/tools.component.ts b/src/app/organizations/tools/tools.component.ts index 91f67eb0..436e8e27 100644 --- a/src/app/organizations/tools/tools.component.ts +++ b/src/app/organizations/tools/tools.component.ts @@ -4,7 +4,7 @@ import { ActivatedRoute } from '@angular/router'; import { Organization } from 'jslib-common/models/domain/organization'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; @Component({ selector: 'app-org-tools', @@ -15,12 +15,12 @@ export class ToolsComponent { accessReports = false; loading = true; - constructor(private route: ActivatedRoute, private userService: UserService, + constructor(private route: ActivatedRoute, private organizationService: OrganizationService, private messagingService: MessagingService) { } ngOnInit() { this.route.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now // since all paid plans include useTotp this.accessReports = this.organization.useTotp; diff --git a/src/app/organizations/tools/unsecured-websites-report.component.ts b/src/app/organizations/tools/unsecured-websites-report.component.ts index 081c8839..907099f7 100644 --- a/src/app/organizations/tools/unsecured-websites-report.component.ts +++ b/src/app/organizations/tools/unsecured-websites-report.component.ts @@ -3,8 +3,9 @@ import { ActivatedRoute } from '@angular/router'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -20,14 +21,15 @@ import { CipherView } from 'jslib-common/models/view/cipherView'; }) export class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent { constructor(cipherService: CipherService, modalService: ModalService, - messagingService: MessagingService, userService: UserService, passwordRepromptService: PasswordRepromptService, - private route: ActivatedRoute) { - super(cipherService, modalService, messagingService, userService, passwordRepromptService); + messagingService: MessagingService, stateService: StateService, + private route: ActivatedRoute, private organizationService: OrganizationService, + passwordRepromptService: PasswordRepromptService) { + super(cipherService, modalService, messagingService, stateService, passwordRepromptService); } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); await super.ngOnInit(); }); } diff --git a/src/app/organizations/tools/weak-passwords-report.component.ts b/src/app/organizations/tools/weak-passwords-report.component.ts index f58623a4..16cab63b 100644 --- a/src/app/organizations/tools/weak-passwords-report.component.ts +++ b/src/app/organizations/tools/weak-passwords-report.component.ts @@ -3,9 +3,10 @@ import { ActivatedRoute } from '@angular/router'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -26,14 +27,14 @@ export class WeakPasswordsReportComponent extends BaseWeakPasswordsReportCompone constructor(cipherService: CipherService, passwordGenerationService: PasswordGenerationService, modalService: ModalService, messagingService: MessagingService, - userService: UserService, passwordRepromptService: PasswordRepromptService, private route: ActivatedRoute) { - super(cipherService, passwordGenerationService, modalService, messagingService, userService, - passwordRepromptService); + stateService: StateService, private route: ActivatedRoute, + private organizationService: OrganizationService, passwordRepromptService: PasswordRepromptService) { + super(cipherService, passwordGenerationService, modalService, messagingService, stateService, passwordRepromptService); } async ngOnInit() { this.route.parent.parent.params.subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); this.manageableCiphers = await this.cipherService.getAll(); await super.ngOnInit(); }); diff --git a/src/app/organizations/vault/add-edit.component.ts b/src/app/organizations/vault/add-edit.component.ts index 2c335e3a..956e8bc3 100644 --- a/src/app/organizations/vault/add-edit.component.ts +++ b/src/app/organizations/vault/add-edit.component.ts @@ -9,13 +9,13 @@ import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { StateService } from 'jslib-common/abstractions/state.service'; import { TotpService } from 'jslib-common/abstractions/totp.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { CipherData } from 'jslib-common/models/data/cipherData'; import { Cipher } from 'jslib-common/models/domain/cipher'; @@ -36,14 +36,14 @@ export class AddEditComponent extends BaseAddEditComponent { constructor(cipherService: CipherService, folderService: FolderService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, auditService: AuditService, stateService: StateService, - userService: UserService, collectionService: CollectionService, - totpService: TotpService, passwordGenerationService: PasswordGenerationService, - private apiService: ApiService, messagingService: MessagingService, - eventService: EventService, policyService: PolicyService, logService: LogService, - passwordRepromptService: PasswordRepromptService) { + collectionService: CollectionService, totpService: TotpService, + passwordGenerationService: PasswordGenerationService, private apiService: ApiService, + messagingService: MessagingService, eventService: EventService, + policyService: PolicyService, logService: LogService, + passwordRepromptService: PasswordRepromptService, organizationService: OrganizationService) { super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService, - userService, collectionService, totpService, passwordGenerationService, messagingService, - eventService, policyService, passwordRepromptService, logService); + collectionService, totpService, passwordGenerationService, messagingService, + eventService, policyService, organizationService, logService, passwordRepromptService); } protected allowOwnershipAssignment() { diff --git a/src/app/organizations/vault/attachments.component.ts b/src/app/organizations/vault/attachments.component.ts index c3ce87fc..5b914da0 100644 --- a/src/app/organizations/vault/attachments.component.ts +++ b/src/app/organizations/vault/attachments.component.ts @@ -6,7 +6,7 @@ import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { CipherData } from 'jslib-common/models/data/cipherData'; import { Cipher } from 'jslib-common/models/domain/cipher'; @@ -25,11 +25,9 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { organization: Organization; constructor(cipherService: CipherService, i18nService: I18nService, - cryptoService: CryptoService, userService: UserService, - platformUtilsService: PlatformUtilsService, apiService: ApiService, - logService: LogService) { - super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, - logService); + cryptoService: CryptoService, stateService: StateService, + platformUtilsService: PlatformUtilsService, apiService: ApiService, logService: LogService) { + super(cipherService, i18nService, cryptoService, stateService, platformUtilsService, apiService, logService); } protected async reupload(attachment: AttachmentView) { diff --git a/src/app/organizations/vault/ciphers.component.ts b/src/app/organizations/vault/ciphers.component.ts index 5b87408b..5aea9737 100644 --- a/src/app/organizations/vault/ciphers.component.ts +++ b/src/app/organizations/vault/ciphers.component.ts @@ -4,8 +4,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { EventService } from 'jslib-common/abstractions/event.service'; @@ -14,10 +12,11 @@ import { LogService } from 'jslib-common/abstractions/log.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { TotpService } from 'jslib-common/abstractions/totp.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { Organization } from 'jslib-common/models/domain/organization'; + import { CipherView } from 'jslib-common/models/view/cipherView'; import { CiphersComponent as BaseCiphersComponent } from '../../vault/ciphers.component'; @@ -34,13 +33,29 @@ export class CiphersComponent extends BaseCiphersComponent { protected allCiphers: CipherView[] = []; - constructor(searchService: SearchService, toasterService: ToasterService, i18nService: I18nService, - platformUtilsService: PlatformUtilsService, cipherService: CipherService, - private apiService: ApiService, eventService: EventService, totpService: TotpService, - userService: UserService, passwordRepromptService: PasswordRepromptService, - logService: LogService) { - super(searchService, toasterService, i18nService, platformUtilsService, cipherService, - eventService, totpService, userService, passwordRepromptService, logService); + constructor( + searchService: SearchService, + i18nService: I18nService, + platformUtilsService: PlatformUtilsService, + cipherService: CipherService, + private apiService: ApiService, + eventService: EventService, + totpService: TotpService, + passwordRepromptService: PasswordRepromptService, + logService: LogService, + stateService: StateService, + ) { + super( + searchService, + i18nService, + platformUtilsService, + cipherService, + eventService, + totpService, + stateService, + passwordRepromptService, + logService + ); } async load(filter: (cipher: CipherView) => boolean = null) { diff --git a/src/app/organizations/vault/groupings.component.ts b/src/app/organizations/vault/groupings.component.ts index fc9dc8d0..d0f6fcd1 100644 --- a/src/app/organizations/vault/groupings.component.ts +++ b/src/app/organizations/vault/groupings.component.ts @@ -4,8 +4,7 @@ import { ApiService } from 'jslib-common/abstractions/api.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { CollectionData } from 'jslib-common/models/data/collectionData'; import { Collection } from 'jslib-common/models/domain/collection'; @@ -23,9 +22,9 @@ export class GroupingsComponent extends BaseGroupingsComponent { organization: Organization; constructor(collectionService: CollectionService, folderService: FolderService, - storageService: StorageService, userService: UserService, - private apiService: ApiService, private i18nService: I18nService) { - super(collectionService, folderService, storageService, userService); + stateService: StateService, private apiService: ApiService, + private i18nService: I18nService) { + super(collectionService, folderService, stateService); } async loadCollections() { @@ -52,8 +51,8 @@ export class GroupingsComponent extends BaseGroupingsComponent { this.nestedCollections = await this.collectionService.getAllNested(this.collections); } - collapse(grouping: CollectionView) { - super.collapse(grouping, 'org_'); + async collapse(grouping: CollectionView) { + await super.collapse(grouping, 'org_'); } isCollapsed(grouping: CollectionView) { diff --git a/src/app/organizations/vault/vault.component.ts b/src/app/organizations/vault/vault.component.ts index 715453fd..ac819128 100644 --- a/src/app/organizations/vault/vault.component.ts +++ b/src/app/organizations/vault/vault.component.ts @@ -14,13 +14,13 @@ import { import { first } from 'rxjs/operators'; +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; import { ModalService } from 'jslib-angular/services/modal.service'; import { Organization } from 'jslib-common/models/domain/organization'; @@ -55,7 +55,7 @@ export class VaultComponent implements OnInit, OnDestroy { deleted: boolean = false; trashCleanupWarning: string = null; - constructor(private route: ActivatedRoute, private userService: UserService, + constructor(private route: ActivatedRoute, private organizationService: OrganizationService, private router: Router, private changeDetectorRef: ChangeDetectorRef, private syncService: SyncService, private i18nService: I18nService, private modalService: ModalService, private messagingService: MessagingService, @@ -66,9 +66,8 @@ export class VaultComponent implements OnInit, OnDestroy { this.trashCleanupWarning = this.i18nService.t( this.platformUtilsService.isSelfHost() ? 'trashCleanupWarningSelfHosted' : 'trashCleanupWarning' ); - this.route.parent.params.pipe(first()).subscribe(async params => { - this.organization = await this.userService.getOrganization(params.organizationId); + this.organization = await this.organizationService.get(params.organizationId); this.groupingsComponent.organization = this.organization; this.ciphersComponent.organization = this.organization; diff --git a/src/app/oss.module.ts b/src/app/oss.module.ts index 88790771..6b14f13d 100644 --- a/src/app/oss.module.ts +++ b/src/app/oss.module.ts @@ -7,9 +7,8 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; - -import { ToasterModule } from 'angular2-toaster'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { ToastrModule } from 'ngx-toastr'; import { NestedCheckboxComponent } from './components/nested-checkbox.component'; import { PasswordRepromptComponent } from './components/password-reprompt.component'; @@ -181,6 +180,7 @@ import { ProvidersComponent } from './providers/providers.component'; import { AvatarComponent } from 'jslib-angular/components/avatar.component'; import { CalloutComponent } from 'jslib-angular/components/callout.component'; import { IconComponent } from 'jslib-angular/components/icon.component'; +import { BitwardenToast } from 'jslib-angular/components/toastr.component'; import { VerifyMasterPasswordComponent } from 'jslib-angular/components/verify-master-password.component'; import { A11yTitleDirective } from 'jslib-angular/directives/a11y-title.directive'; @@ -295,7 +295,7 @@ registerLocaleData(localeZhTw, 'zh-TW'); FormsModule, InfiniteScrollModule, DragDropModule, - ToasterModule.forChild(), + ToastrModule, ReactiveFormsModule, RouterModule, ], diff --git a/src/app/providers/providers.component.ts b/src/app/providers/providers.component.ts index 3a08ca30..af05cb6e 100644 --- a/src/app/providers/providers.component.ts +++ b/src/app/providers/providers.component.ts @@ -5,7 +5,7 @@ import { } from '@angular/core'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; import { Provider } from 'jslib-common/models/domain/provider'; @@ -22,7 +22,7 @@ export class ProvidersComponent implements OnInit { loaded: boolean = false; actionPromise: Promise; - constructor(private userService: UserService, private i18nService: I18nService) { } + constructor(private providerService: ProviderService, private i18nService: I18nService) { } async ngOnInit() { document.body.classList.remove('layout_frontend'); @@ -30,7 +30,7 @@ export class ProvidersComponent implements OnInit { } async load() { - const providers = await this.userService.getAllProviders(); + const providers = await this.providerService.getAll(); providers.sort(Utils.getSortFunction(this.i18nService, 'name')); this.providers = providers; this.loaded = true; diff --git a/src/app/send/add-edit.component.ts b/src/app/send/add-edit.component.ts index abdfee89..21ffc7a0 100644 --- a/src/app/send/add-edit.component.ts +++ b/src/app/send/add-edit.component.ts @@ -4,14 +4,14 @@ import { Component } from '@angular/core'; import { EnvironmentService } from 'jslib-common/abstractions/environment.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SendService } from 'jslib-common/abstractions/send.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/send/add-edit.component'; -import { LogService } from 'jslib-common/abstractions/log.service'; @Component({ selector: 'app-send-add-edit', @@ -20,11 +20,11 @@ import { LogService } from 'jslib-common/abstractions/log.service'; export class AddEditComponent extends BaseAddEditComponent { constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService, datePipe: DatePipe, - sendService: SendService, userService: UserService, + sendService: SendService, stateService: StateService, messagingService: MessagingService, policyService: PolicyService, logService: LogService) { - super(i18nService, platformUtilsService, environmentService, datePipe, sendService, userService, - messagingService, policyService, logService); + super(i18nService, platformUtilsService, environmentService, datePipe, sendService, + messagingService, policyService, logService, stateService); } async copyLinkToClipboard(link: string): Promise { diff --git a/src/app/send/send.component.ts b/src/app/send/send.component.ts index f9d42d8c..a104e86a 100644 --- a/src/app/send/send.component.ts +++ b/src/app/send/send.component.ts @@ -11,6 +11,7 @@ import { SendComponent as BaseSendComponent } from 'jslib-angular/components/sen import { AddEditComponent } from './add-edit.component'; +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; import { EnvironmentService } from 'jslib-common/abstractions/environment.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -18,9 +19,7 @@ import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.se import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; import { SendService } from 'jslib-common/abstractions/send.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; import { ModalService } from 'jslib-angular/services/modal.service'; const BroadcasterSubscriptionId = 'SendComponent'; @@ -34,11 +33,11 @@ export class SendComponent extends BaseSendComponent { constructor(sendService: SendService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService, - ngZone: NgZone, searchService: SearchService, policyService: PolicyService, userService: UserService, - private modalService: ModalService, private broadcasterService: BroadcasterService, - logService: LogService) { + ngZone: NgZone, searchService: SearchService, + policyService: PolicyService, private modalService: ModalService, + private broadcasterService: BroadcasterService, logService: LogService) { super(sendService, i18nService, platformUtilsService, environmentService, ngZone, searchService, - policyService, userService, logService); + policyService, logService); } async ngOnInit() { diff --git a/src/app/services/organization-guard.service.ts b/src/app/services/organization-guard.service.ts index c9ed989d..ccea704c 100644 --- a/src/app/services/organization-guard.service.ts +++ b/src/app/services/organization-guard.service.ts @@ -5,24 +5,27 @@ import { Router, } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { I18nService } from 'jslib-common/abstractions/i18n.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; @Injectable() export class OrganizationGuardService implements CanActivate { - constructor(private userService: UserService, private router: Router, - private toasterService: ToasterService, private i18nService: I18nService) { } + constructor( + private router: Router, + private platformUtilsService: PlatformUtilsService, + private i18nService: I18nService, + private organizationService: OrganizationService, + ) { } async canActivate(route: ActivatedRouteSnapshot) { - const org = await this.userService.getOrganization(route.params.organizationId); + const org = await this.organizationService.get(route.params.organizationId); if (org == null) { this.router.navigate(['/']); return false; } if (!org.isOwner && !org.enabled) { - this.toasterService.popAsync('error', null, this.i18nService.t('organizationIsDisabled')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('organizationIsDisabled')); this.router.navigate(['/']); return false; } diff --git a/src/app/services/organization-type-guard.service.ts b/src/app/services/organization-type-guard.service.ts index 2f490f29..6aa62777 100644 --- a/src/app/services/organization-type-guard.service.ts +++ b/src/app/services/organization-type-guard.service.ts @@ -5,16 +5,16 @@ import { Router, } from '@angular/router'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { Permissions } from 'jslib-common/enums/permissions'; @Injectable() export class OrganizationTypeGuardService implements CanActivate { - constructor(private userService: UserService, private router: Router) { } + constructor(private organizationService: OrganizationService, private router: Router) { } async canActivate(route: ActivatedRouteSnapshot) { - const org = await this.userService.getOrganization(route.params.organizationId); + const org = await this.organizationService.get(route.params.organizationId); const permissions = route.data == null ? null : route.data.permissions as Permissions[]; if ( diff --git a/src/app/services/services.module.ts b/src/app/services/services.module.ts index 9064202e..248f2b6f 100644 --- a/src/app/services/services.module.ts +++ b/src/app/services/services.module.ts @@ -1,65 +1,34 @@ import { APP_INITIALIZER, - LOCALE_ID, + Injector, NgModule, } from '@angular/core'; - -import { ToasterModule } from 'angular2-toaster'; +import { ToastrModule } from 'ngx-toastr'; import { BroadcasterMessagingService } from '../../services/broadcasterMessaging.service'; import { HtmlStorageService } from '../../services/htmlStorage.service'; import { I18nService } from '../../services/i18n.service'; import { MemoryStorageService } from '../../services/memoryStorage.service'; -import { PasswordRepromptService } from '../../services/passwordReprompt.service'; import { WebPlatformUtilsService } from '../../services/webPlatformUtils.service'; import { EventService } from './event.service'; +import { ModalService } from './modal.service'; import { OrganizationGuardService } from './organization-guard.service'; import { OrganizationTypeGuardService } from './organization-type-guard.service'; import { PolicyListService } from './policy-list.service'; import { RouterService } from './router.service'; -import { AuthGuardService } from 'jslib-angular/services/auth-guard.service'; -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; -import { LockGuardService } from 'jslib-angular/services/lock-guard.service'; +import { JslibServicesModule } from 'jslib-angular/services/jslib-services.module'; import { ModalService as ModalServiceAbstraction } from 'jslib-angular/services/modal.service'; -import { UnauthGuardService } from 'jslib-angular/services/unauth-guard.service'; -import { ValidationService } from 'jslib-angular/services/validation.service'; -import { ApiService } from 'jslib-common/services/api.service'; -import { AppIdService } from 'jslib-common/services/appId.service'; -import { AuditService } from 'jslib-common/services/audit.service'; import { AuthService } from 'jslib-common/services/auth.service'; -import { CipherService } from 'jslib-common/services/cipher.service'; -import { CollectionService } from 'jslib-common/services/collection.service'; -import { ConsoleLogService } from 'jslib-common/services/consoleLog.service'; -import { ConstantsService } from 'jslib-common/services/constants.service'; import { ContainerService } from 'jslib-common/services/container.service'; import { CryptoService } from 'jslib-common/services/crypto.service'; -import { EnvironmentService } from 'jslib-common/services/environment.service'; import { EventService as EventLoggingService } from 'jslib-common/services/event.service'; -import { ExportService } from 'jslib-common/services/export.service'; -import { FileUploadService } from 'jslib-common/services/fileUpload.service'; -import { FolderService } from 'jslib-common/services/folder.service'; import { ImportService } from 'jslib-common/services/import.service'; -import { KeyConnectorService } from 'jslib-common/services/keyConnector.service'; -import { NotificationsService } from 'jslib-common/services/notifications.service'; -import { PasswordGenerationService } from 'jslib-common/services/passwordGeneration.service'; -import { PolicyService } from 'jslib-common/services/policy.service'; -import { SearchService } from 'jslib-common/services/search.service'; -import { SendService } from 'jslib-common/services/send.service'; -import { SettingsService } from 'jslib-common/services/settings.service'; -import { StateService } from 'jslib-common/services/state.service'; -import { SyncService } from 'jslib-common/services/sync.service'; -import { TokenService } from 'jslib-common/services/token.service'; -import { TotpService } from 'jslib-common/services/totp.service'; -import { UserService } from 'jslib-common/services/user.service'; -import { UserVerificationService } from 'jslib-common/services/userVerification.service'; import { VaultTimeoutService } from 'jslib-common/services/vaultTimeout.service'; -import { WebCryptoFunctionService } from 'jslib-common/services/webCryptoFunction.service'; import { ApiService as ApiServiceAbstraction } from 'jslib-common/abstractions/api.service'; -import { AuditService as AuditServiceAbstraction } from 'jslib-common/abstractions/audit.service'; import { AuthService as AuthServiceAbstraction } from 'jslib-common/abstractions/auth.service'; import { CipherService as CipherServiceAbstraction } from 'jslib-common/abstractions/cipher.service'; import { CollectionService as CollectionServiceAbstraction } from 'jslib-common/abstractions/collection.service'; @@ -67,96 +36,27 @@ import { CryptoService as CryptoServiceAbstraction } from 'jslib-common/abstract import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from 'jslib-common/abstractions/cryptoFunction.service'; import { EnvironmentService as EnvironmentServiceAbstraction, Urls } from 'jslib-common/abstractions/environment.service'; import { EventService as EventLoggingServiceAbstraction } from 'jslib-common/abstractions/event.service'; -import { ExportService as ExportServiceAbstraction } from 'jslib-common/abstractions/export.service'; -import { FileUploadService as FileUploadServiceAbstraction } from 'jslib-common/abstractions/fileUpload.service'; import { FolderService as FolderServiceAbstraction } from 'jslib-common/abstractions/folder.service'; import { I18nService as I18nServiceAbstraction } from 'jslib-common/abstractions/i18n.service'; import { ImportService as ImportServiceAbstraction } from 'jslib-common/abstractions/import.service'; -import { KeyConnectorService as KeyConnectorServiceAbstraction } from 'jslib-common/abstractions/keyConnector.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService as MessagingServiceAbstraction } from 'jslib-common/abstractions/messaging.service'; import { NotificationsService as NotificationsServiceAbstraction } from 'jslib-common/abstractions/notifications.service'; -import { - PasswordGenerationService as PasswordGenerationServiceAbstraction, -} from 'jslib-common/abstractions/passwordGeneration.service'; -import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from 'jslib-common/abstractions/passwordReprompt.service'; import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from 'jslib-common/abstractions/platformUtils.service'; -import { PolicyService as PolicyServiceAbstraction } from 'jslib-common/abstractions/policy.service'; -import { SearchService as SearchServiceAbstraction } from 'jslib-common/abstractions/search.service'; -import { SendService as SendServiceAbstraction } from 'jslib-common/abstractions/send.service'; -import { SettingsService as SettingsServiceAbstraction } from 'jslib-common/abstractions/settings.service'; import { StateService as StateServiceAbstraction } from 'jslib-common/abstractions/state.service'; import { StorageService as StorageServiceAbstraction } from 'jslib-common/abstractions/storage.service'; -import { SyncService as SyncServiceAbstraction } from 'jslib-common/abstractions/sync.service'; -import { TokenService as TokenServiceAbstraction } from 'jslib-common/abstractions/token.service'; -import { TotpService as TotpServiceAbstraction } from 'jslib-common/abstractions/totp.service'; -import { UserService as UserServiceAbstraction } from 'jslib-common/abstractions/user.service'; -import { UserVerificationService as UserVerificationServiceAbstraction } from 'jslib-common/abstractions/userVerification.service'; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from 'jslib-common/abstractions/vaultTimeout.service'; -import { ModalService } from './modal.service'; import { ThemeType } from 'jslib-common/enums/themeType'; -const i18nService = new I18nService(window.navigator.language, 'locales'); -const stateService = new StateService(); -const broadcasterService = new BroadcasterService(); -const messagingService = new BroadcasterMessagingService(broadcasterService); -const consoleLogService = new ConsoleLogService(false); -const platformUtilsService = new WebPlatformUtilsService(i18nService, messagingService, consoleLogService, () => storageService); -const storageService: StorageServiceAbstraction = new HtmlStorageService(platformUtilsService); -const secureStorageService: StorageServiceAbstraction = new MemoryStorageService(); -const cryptoFunctionService: CryptoFunctionServiceAbstraction = new WebCryptoFunctionService(window, - platformUtilsService); -const cryptoService = new CryptoService(storageService, - platformUtilsService.isDev() ? storageService : secureStorageService, cryptoFunctionService, platformUtilsService, - consoleLogService); -const tokenService = new TokenService(storageService); -const appIdService = new AppIdService(storageService); -const environmentService = new EnvironmentService(storageService); -const apiService = new ApiService(tokenService, platformUtilsService, environmentService, - async (expired: boolean) => messagingService.send('logout', { expired: expired })); -const userService = new UserService(tokenService, storageService); -const settingsService = new SettingsService(userService, storageService); -export let searchService: SearchService = null; -const fileUploadService = new FileUploadService(consoleLogService, apiService); -const cipherService = new CipherService(cryptoService, userService, settingsService, - apiService, fileUploadService, storageService, i18nService, () => searchService, consoleLogService); -const folderService = new FolderService(cryptoService, userService, apiService, storageService, - i18nService, cipherService); -const collectionService = new CollectionService(cryptoService, userService, storageService, i18nService); -searchService = new SearchService(cipherService, consoleLogService, i18nService); -const policyService = new PolicyService(userService, storageService, apiService); -const sendService = new SendService(cryptoService, userService, apiService, fileUploadService, storageService, - i18nService, cryptoFunctionService); -const keyConnectorService = new KeyConnectorService(storageService, userService, cryptoService, apiService, - tokenService, consoleLogService); -const vaultTimeoutService = new VaultTimeoutService(cipherService, folderService, collectionService, - cryptoService, platformUtilsService, storageService, messagingService, searchService, userService, tokenService, - policyService, keyConnectorService, null, async () => messagingService.send('logout', { expired: false })); -const syncService = new SyncService(userService, apiService, settingsService, - folderService, cipherService, cryptoService, collectionService, storageService, messagingService, policyService, - sendService, consoleLogService, tokenService, keyConnectorService, - async (expired: boolean) => messagingService.send('logout', { expired: expired })); -const passwordGenerationService = new PasswordGenerationService(cryptoService, storageService, policyService); -const totpService = new TotpService(storageService, cryptoFunctionService, consoleLogService); -const containerService = new ContainerService(cryptoService); -const authService = new AuthService(cryptoService, apiService, - userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService, vaultTimeoutService, - consoleLogService, cryptoFunctionService, environmentService, keyConnectorService); -const exportService = new ExportService(folderService, cipherService, apiService, cryptoService); -const importService = new ImportService(cipherService, folderService, apiService, i18nService, collectionService, - platformUtilsService, cryptoService); -const notificationsService = new NotificationsService(userService, syncService, appIdService, apiService, vaultTimeoutService, - environmentService, async () => messagingService.send('logout', { expired: true }), consoleLogService); -const auditService = new AuditService(cryptoFunctionService, apiService); -const eventLoggingService = new EventLoggingService(storageService, apiService, userService, cipherService, consoleLogService); -const userVerificationService = new UserVerificationService(cryptoService, i18nService, apiService); - -containerService.attachToWindow(window); - -export function initFactory(): Function { +export function initFactory(window: Window, storageService: StorageServiceAbstraction, + environmentService: EnvironmentServiceAbstraction, notificationsService: NotificationsServiceAbstraction, + vaultTimeoutService: VaultTimeoutService, i18nService: I18nService, eventLoggingService: EventLoggingService, + authService: AuthService, stateService: StateServiceAbstraction, + platformUtilsService: PlatformUtilsServiceAbstraction, cryptoService: CryptoServiceAbstraction): Function { return async () => { await (storageService as HtmlStorageService).init(); + await stateService.init(); const urls = process.env.URLS as Urls; urls.base ??= window.location.origin; @@ -165,7 +65,7 @@ export function initFactory(): Function { setTimeout(() => notificationsService.init(), 3000); vaultTimeoutService.init(true); - const locale = await storageService.get(ConstantsService.localeKey); + const locale = await stateService.getLocale(); await i18nService.init(locale); eventLoggingService.init(true); authService.init(); @@ -174,80 +74,91 @@ export function initFactory(): Function { // Initial theme is set in index.html which must be updated if there are any changes to theming logic platformUtilsService.onDefaultSystemThemeChange(async sysTheme => { - const bwTheme = await storageService.get(ConstantsService.themeKey); + const bwTheme = await stateService.getTheme(); if (bwTheme === ThemeType.System) { htmlEl.classList.remove('theme_' + ThemeType.Light, 'theme_' + ThemeType.Dark); htmlEl.classList.add('theme_' + sysTheme); } }); - stateService.save(ConstantsService.disableFaviconKey, - await storageService.get(ConstantsService.disableFaviconKey)); - stateService.save('enableGravatars', await storageService.get('enableGravatars')); + const containerService = new ContainerService(cryptoService); + containerService.attachToWindow(window); }; } @NgModule({ imports: [ - ToasterModule, + ToastrModule, + JslibServicesModule, ], declarations: [], providers: [ - ValidationService, - AuthGuardService, - OrganizationGuardService, - OrganizationTypeGuardService, - UnauthGuardService, - RouterService, - EventService, - LockGuardService, - PolicyListService, - { provide: ModalServiceAbstraction, useClass: ModalService }, - { provide: AuditServiceAbstraction, useValue: auditService }, - { provide: AuthServiceAbstraction, useValue: authService }, - { provide: CipherServiceAbstraction, useValue: cipherService }, - { provide: FolderServiceAbstraction, useValue: folderService }, - { provide: LogService, useValue: consoleLogService }, - { provide: CollectionServiceAbstraction, useValue: collectionService }, - { provide: EnvironmentServiceAbstraction, useValue: environmentService }, - { provide: TotpServiceAbstraction, useValue: totpService }, - { provide: TokenServiceAbstraction, useValue: tokenService }, - { provide: I18nServiceAbstraction, useValue: i18nService }, - { provide: CryptoServiceAbstraction, useValue: cryptoService }, - { provide: PlatformUtilsServiceAbstraction, useValue: platformUtilsService }, - { provide: PasswordGenerationServiceAbstraction, useValue: passwordGenerationService }, - { provide: ApiServiceAbstraction, useValue: apiService }, - { provide: FileUploadServiceAbstraction, useValue: fileUploadService }, - { provide: SyncServiceAbstraction, useValue: syncService }, - { provide: UserServiceAbstraction, useValue: userService }, - { provide: MessagingServiceAbstraction, useValue: messagingService }, - { provide: BroadcasterService, useValue: broadcasterService }, - { provide: SettingsServiceAbstraction, useValue: settingsService }, - { provide: VaultTimeoutServiceAbstraction, useValue: vaultTimeoutService }, - { provide: StorageServiceAbstraction, useValue: storageService }, - { provide: StateServiceAbstraction, useValue: stateService }, - { provide: ExportServiceAbstraction, useValue: exportService }, - { provide: SearchServiceAbstraction, useValue: searchService }, - { provide: ImportServiceAbstraction, useValue: importService }, - { provide: NotificationsServiceAbstraction, useValue: notificationsService }, - { provide: CryptoFunctionServiceAbstraction, useValue: cryptoFunctionService }, - { provide: EventLoggingServiceAbstraction, useValue: eventLoggingService }, - { provide: PolicyServiceAbstraction, useValue: policyService }, - { provide: SendServiceAbstraction, useValue: sendService }, - { provide: KeyConnectorServiceAbstraction, useValue: keyConnectorService }, - { provide: UserVerificationServiceAbstraction, useValue: userVerificationService }, - { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService }, - { provide: LogService, useValue: consoleLogService }, { provide: APP_INITIALIZER, useFactory: initFactory, - deps: [], + deps: [ + 'WINDOW', + StorageServiceAbstraction, + EnvironmentServiceAbstraction, + NotificationsServiceAbstraction, + VaultTimeoutServiceAbstraction, + I18nServiceAbstraction, + EventLoggingServiceAbstraction, + AuthServiceAbstraction, + StateServiceAbstraction, + PlatformUtilsServiceAbstraction, + CryptoServiceAbstraction, + ], multi: true, }, + OrganizationGuardService, + OrganizationTypeGuardService, + RouterService, + EventService, + PolicyListService, { - provide: LOCALE_ID, - useFactory: () => i18nService.translationLocale, - deps: [], + provide: I18nServiceAbstraction, + useFactory: (window: Window) => new I18nService(window.navigator.language, 'locales'), + deps: [ 'WINDOW' ], + }, + { provide: StorageServiceAbstraction, useClass: HtmlStorageService }, + { provide: 'SECURE_STORAGE', useClass: MemoryStorageService }, + { + provide: PlatformUtilsServiceAbstraction, + useFactory: (i18nService: I18nServiceAbstraction, messagingService: MessagingServiceAbstraction, + logService: LogService, stateService: StateServiceAbstraction) => new WebPlatformUtilsService(i18nService, + messagingService, logService, stateService), + deps: [ + I18nServiceAbstraction, + MessagingServiceAbstraction, + LogService, + StateServiceAbstraction, + ], + }, + { provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService }, + { provide: ModalServiceAbstraction, useClass: ModalService }, + { + provide: ImportServiceAbstraction, + useClass: ImportService, + deps: [ + CipherServiceAbstraction, + FolderServiceAbstraction, + ApiServiceAbstraction, + I18nServiceAbstraction, + CollectionServiceAbstraction, + PlatformUtilsServiceAbstraction, + CryptoServiceAbstraction, + ], + }, + { + provide: CryptoServiceAbstraction, + useClass: CryptoService, + deps: [ + CryptoFunctionServiceAbstraction, + PlatformUtilsServiceAbstraction, + LogService, + StateServiceAbstraction, + ], }, ], }) diff --git a/src/app/settings/account.component.ts b/src/app/settings/account.component.ts index cef60b7f..2054e714 100644 --- a/src/app/settings/account.component.ts +++ b/src/app/settings/account.component.ts @@ -11,7 +11,7 @@ import { PurgeVaultComponent } from './purge-vault.component'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -31,7 +31,7 @@ export class AccountComponent { showChangeEmail = true; constructor(private modalService: ModalService, private apiService: ApiService, - private userService: UserService, private keyConnectorService: KeyConnectorService) { } + private keyConnectorService: KeyConnectorService, private stateService: StateService) { } async ngOnInit() { this.showChangeEmail = this.showChangeKdf = this.showChangePassword = @@ -51,7 +51,7 @@ export class AccountComponent { } async viewUserApiKey() { - const entityId = await this.userService.getUserId(); + const entityId = await this.stateService.getUserId(); await this.modalService.openViewRef(ApiKeyComponent, this.viewUserApiKeyModalRef, comp => { comp.keyType = 'user'; comp.entityId = entityId; @@ -65,7 +65,7 @@ export class AccountComponent { } async rotateUserApiKey() { - const entityId = await this.userService.getUserId(); + const entityId = await this.stateService.getUserId(); await this.modalService.openViewRef(ApiKeyComponent, this.rotateUserApiKeyModalRef, comp => { comp.keyType = 'user'; comp.isRotation = true; diff --git a/src/app/settings/add-credit.component.ts b/src/app/settings/add-credit.component.ts index 68f2f157..4b351d5c 100644 --- a/src/app/settings/add-credit.component.ts +++ b/src/app/settings/add-credit.component.ts @@ -11,8 +11,9 @@ import { import { ApiService } from 'jslib-common/abstractions/api.service'; import { PayPalConfig } from 'jslib-common/abstractions/environment.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { PaymentMethodType } from 'jslib-common/enums/paymentMethodType'; @@ -45,8 +46,9 @@ export class AddCreditComponent implements OnInit { private name: string; private email: string; - constructor(private userService: UserService, private apiService: ApiService, - private platformUtilsService: PlatformUtilsService, private logService: LogService) { + constructor(private stateService: StateService, private apiService: ApiService, + private platformUtilsService: PlatformUtilsService, private organizationService: OrganizationService, + private logService: LogService) { const payPalConfig = process.env.PAYPAL_CONFIG as PayPalConfig; this.ppButtonFormAction = payPalConfig.buttonAction; this.ppButtonBusinessId = payPalConfig.businessId; @@ -58,7 +60,7 @@ export class AddCreditComponent implements OnInit { this.creditAmount = '20.00'; } this.ppButtonCustomField = 'organization_id:' + this.organizationId; - const org = await this.userService.getOrganization(this.organizationId); + const org = await this.organizationService.get(this.organizationId); if (org != null) { this.subject = org.name; this.name = org.name; @@ -67,8 +69,8 @@ export class AddCreditComponent implements OnInit { if (this.creditAmount == null) { this.creditAmount = '10.00'; } - this.userId = await this.userService.getUserId(); - this.subject = await this.userService.getEmail(); + this.userId = await this.stateService.getUserId(); + this.subject = await this.stateService.getEmail(); this.email = this.subject; this.ppButtonCustomField = 'user_id:' + this.userId; } diff --git a/src/app/settings/adjust-payment.component.ts b/src/app/settings/adjust-payment.component.ts index 3a48e819..ebb26445 100644 --- a/src/app/settings/adjust-payment.component.ts +++ b/src/app/settings/adjust-payment.component.ts @@ -6,11 +6,10 @@ import { ViewChild, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PaymentRequest } from 'jslib-common/models/request/paymentRequest'; @@ -36,7 +35,7 @@ export class AdjustPaymentComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async submit() { try { @@ -59,7 +58,7 @@ export class AdjustPaymentComponent { } }); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('updatedPaymentMethod')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('updatedPaymentMethod')); this.onAdjusted.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/adjust-storage.component.ts b/src/app/settings/adjust-storage.component.ts index d4aede05..bd622bca 100644 --- a/src/app/settings/adjust-storage.component.ts +++ b/src/app/settings/adjust-storage.component.ts @@ -11,11 +11,10 @@ import { Router, } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StorageRequest } from 'jslib-common/models/request/storageRequest'; @@ -41,7 +40,7 @@ export class AdjustStorageComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private router: Router, + private platformUtilsService: PlatformUtilsService, private router: Router, private activatedRoute: ActivatedRoute, private logService: LogService) { } async submit() { @@ -73,14 +72,11 @@ export class AdjustStorageComponent { await this.formPromise; this.onAdjusted.emit(this.storageAdjustment); if (paymentFailed) { - this.toasterService.popAsync({ - body: this.i18nService.t('couldNotChargeCardPayInvoice'), - type: 'warning', - timeout: 10000, - }); + this.platformUtilsService.showToast('warning', null, + this.i18nService.t('couldNotChargeCardPayInvoice'), { timeout: 10000 }); this.router.navigate(['../billing'], { relativeTo: this.activatedRoute }); } else { - this.toasterService.popAsync('success', null, + this.platformUtilsService.showToast('success', null, this.i18nService.t('adjustedStorage', request.storageGbAdjustment.toString())); } } catch (e) { diff --git a/src/app/settings/change-email.component.ts b/src/app/settings/change-email.component.ts index 421c05b8..653b8749 100644 --- a/src/app/settings/change-email.component.ts +++ b/src/app/settings/change-email.component.ts @@ -3,14 +3,13 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { EmailRequest } from 'jslib-common/models/request/emailRequest'; import { EmailTokenRequest } from 'jslib-common/models/request/emailTokenRequest'; @@ -30,10 +29,15 @@ export class ChangeEmailComponent implements OnInit { formPromise: Promise; - constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private cryptoService: CryptoService, - private messagingService: MessagingService, private userService: UserService, - private logService: LogService) { } + constructor( + private apiService: ApiService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private cryptoService: CryptoService, + private messagingService: MessagingService, + private logService: LogService, + private stateService: StateService, + ) { } async ngOnInit() { const twoFactorProviders = await this.apiService.getTwoFactorProviders(); @@ -44,7 +48,7 @@ export class ChangeEmailComponent implements OnInit { async submit() { const hasEncKey = await this.cryptoService.hasEncKey(); if (!hasEncKey) { - this.toasterService.popAsync('error', null, this.i18nService.t('updateKey')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('updateKey')); return; } @@ -65,8 +69,8 @@ export class ChangeEmailComponent implements OnInit { request.token = this.token; request.newEmail = this.newEmail; request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null); - const kdf = await this.userService.getKdf(); - const kdfIterations = await this.userService.getKdfIterations(); + const kdf = await this.stateService.getKdfType(); + const kdfIterations = await this.stateService.getKdfIterations(); const newKey = await this.cryptoService.makeKey(this.masterPassword, this.newEmail, kdf, kdfIterations); request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey); const newEncKey = await this.cryptoService.remakeEncKey(newKey); @@ -75,7 +79,7 @@ export class ChangeEmailComponent implements OnInit { this.formPromise = this.apiService.postEmail(request); await this.formPromise; this.reset(); - this.toasterService.popAsync('success', this.i18nService.t('emailChanged'), + this.platformUtilsService.showToast('success', this.i18nService.t('emailChanged'), this.i18nService.t('logBackIn')); this.messagingService.send('logout'); } catch (e) { diff --git a/src/app/settings/change-kdf.component.ts b/src/app/settings/change-kdf.component.ts index 94227a3f..c4d4aded 100644 --- a/src/app/settings/change-kdf.component.ts +++ b/src/app/settings/change-kdf.component.ts @@ -3,14 +3,13 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { KdfRequest } from 'jslib-common/models/request/kdfRequest'; @@ -27,24 +26,29 @@ export class ChangeKdfComponent implements OnInit { kdfOptions: any[] = []; formPromise: Promise; - constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private cryptoService: CryptoService, - private messagingService: MessagingService, private userService: UserService, - private logService: LogService) { + constructor( + private apiService: ApiService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private cryptoService: CryptoService, + private messagingService: MessagingService, + private logService: LogService, + private stateService: StateService, + ) { this.kdfOptions = [ { name: 'PBKDF2 SHA-256', value: KdfType.PBKDF2_SHA256 }, ]; } async ngOnInit() { - this.kdf = await this.userService.getKdf(); - this.kdfIterations = await this.userService.getKdfIterations(); + this.kdf = await this.stateService.getKdfType(); + this.kdfIterations = await this.stateService.getKdfIterations(); } async submit() { const hasEncKey = await this.cryptoService.hasEncKey(); if (!hasEncKey) { - this.toasterService.popAsync('error', null, this.i18nService.t('updateKey')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('updateKey')); return; } @@ -52,7 +56,7 @@ export class ChangeKdfComponent implements OnInit { request.kdf = this.kdf; request.kdfIterations = this.kdfIterations; request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null); - const email = await this.userService.getEmail(); + const email = await this.stateService.getEmail(); const newKey = await this.cryptoService.makeKey(this.masterPassword, email, this.kdf, this.kdfIterations); request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey); const newEncKey = await this.cryptoService.remakeEncKey(newKey); @@ -60,7 +64,7 @@ export class ChangeKdfComponent implements OnInit { try { this.formPromise = this.apiService.postAccountKdf(request); await this.formPromise; - this.toasterService.popAsync('success', this.i18nService.t('encKeySettingsChanged'), + this.platformUtilsService.showToast('success', this.i18nService.t('encKeySettingsChanged'), this.i18nService.t('logBackIn')); this.messagingService.send('logout'); } catch (e) { diff --git a/src/app/settings/change-password.component.ts b/src/app/settings/change-password.component.ts index e76f5c6f..f5f773d3 100644 --- a/src/app/settings/change-password.component.ts +++ b/src/app/settings/change-password.component.ts @@ -6,12 +6,13 @@ import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SendService } from 'jslib-common/abstractions/send.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { ChangePasswordComponent as BaseChangePasswordComponent, @@ -41,12 +42,13 @@ export class ChangePasswordComponent extends BaseChangePasswordComponent { constructor(i18nService: I18nService, cryptoService: CryptoService, messagingService: MessagingService, - userService: UserService, passwordGenerationService: PasswordGenerationService, + stateService: StateService, passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService, policyService: PolicyService, private folderService: FolderService, private cipherService: CipherService, - private syncService: SyncService, private apiService: ApiService, private sendService: SendService) { - super(i18nService, cryptoService, messagingService, userService, passwordGenerationService, - platformUtilsService, policyService); + private syncService: SyncService, private apiService: ApiService, + private sendService: SendService, private organizationService: OrganizationService) { + super(i18nService, cryptoService, messagingService, passwordGenerationService, + platformUtilsService, policyService, stateService); } async rotateEncKeyClicked() { @@ -206,7 +208,7 @@ export class ChangePasswordComponent extends BaseChangePasswordComponent { } private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey) { - const orgs = await this.userService.getAllOrganizations(); + const orgs = await this.organizationService.getAll(); for (const org of orgs) { // If not already enrolled, skip diff --git a/src/app/settings/deauthorize-sessions.component.ts b/src/app/settings/deauthorize-sessions.component.ts index 05301f49..4efb61dd 100644 --- a/src/app/settings/deauthorize-sessions.component.ts +++ b/src/app/settings/deauthorize-sessions.component.ts @@ -1,11 +1,10 @@ import { Component } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { UserVerificationService } from 'jslib-common/abstractions/userVerification.service'; import { Verification } from 'jslib-common/types/verification'; @@ -19,7 +18,7 @@ export class DeauthorizeSessionsComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private userVerificationService: UserVerificationService, + private platformUtilsService: PlatformUtilsService, private userVerificationService: UserVerificationService, private messagingService: MessagingService, private logService: LogService) { } async submit() { @@ -27,7 +26,7 @@ export class DeauthorizeSessionsComponent { this.formPromise = this.userVerificationService.buildRequest(this.masterPassword) .then(request => this.apiService.postSecurityStamp(request)); await this.formPromise; - this.toasterService.popAsync('success', this.i18nService.t('sessionsDeauthorized'), + this.platformUtilsService.showToast('success', this.i18nService.t('sessionsDeauthorized'), this.i18nService.t('logBackIn')); this.messagingService.send('logout'); } catch (e) { diff --git a/src/app/settings/delete-account.component.ts b/src/app/settings/delete-account.component.ts index af489082..6f3ff687 100644 --- a/src/app/settings/delete-account.component.ts +++ b/src/app/settings/delete-account.component.ts @@ -1,11 +1,10 @@ import { Component } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { UserVerificationService } from 'jslib-common/abstractions/userVerification.service'; import { Verification } from 'jslib-common/types/verification'; @@ -19,7 +18,7 @@ export class DeleteAccountComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private userVerificationService: UserVerificationService, + private platformUtilsService: PlatformUtilsService, private userVerificationService: UserVerificationService, private messagingService: MessagingService, private logService: LogService) { } async submit() { @@ -27,7 +26,7 @@ export class DeleteAccountComponent { this.formPromise = this.userVerificationService.buildRequest(this.masterPassword) .then(request => this.apiService.deleteAccount(request)); await this.formPromise; - this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'), + this.platformUtilsService.showToast('success', this.i18nService.t('accountDeleted'), this.i18nService.t('accountDeletedDesc')); this.messagingService.send('logout'); } catch (e) { diff --git a/src/app/settings/domain-rules.component.ts b/src/app/settings/domain-rules.component.ts index 8e0c8b40..d42ae2cb 100644 --- a/src/app/settings/domain-rules.component.ts +++ b/src/app/settings/domain-rules.component.ts @@ -3,11 +3,10 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { UpdateDomainsRequest } from 'jslib-common/models/request/updateDomainsRequest'; @@ -22,7 +21,7 @@ export class DomainRulesComponent implements OnInit { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { const response = await this.apiService.getSettingsDomains(); @@ -74,7 +73,7 @@ export class DomainRulesComponent implements OnInit { try { this.formPromise = this.apiService.putSettingsDomains(request); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('domainsUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('domainsUpdated')); } catch (e) { this.logService.error(e); } diff --git a/src/app/settings/emergency-access-add-edit.component.ts b/src/app/settings/emergency-access-add-edit.component.ts index 53417ef2..a117a1dc 100644 --- a/src/app/settings/emergency-access-add-edit.component.ts +++ b/src/app/settings/emergency-access-add-edit.component.ts @@ -6,11 +6,10 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { EmergencyAccessType } from 'jslib-common/enums/emergencyAccessType'; import { EmergencyAccessInviteRequest } from 'jslib-common/models/request/emergencyAccessInviteRequest'; @@ -40,7 +39,7 @@ export class EmergencyAccessAddEditComponent implements OnInit { waitTime: number; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { this.editMode = this.loading = this.emergencyAccessId != null; @@ -90,7 +89,7 @@ export class EmergencyAccessAddEditComponent implements OnInit { } await this.formPromise; - this.toasterService.popAsync('success', null, + this.platformUtilsService.showToast('success', null, this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name)); this.onSaved.emit(); } catch (e) { diff --git a/src/app/settings/emergency-access-attachments.component.ts b/src/app/settings/emergency-access-attachments.component.ts index ad69500d..fa35d197 100644 --- a/src/app/settings/emergency-access-attachments.component.ts +++ b/src/app/settings/emergency-access-attachments.component.ts @@ -6,7 +6,7 @@ import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { AttachmentView } from 'jslib-common/models/view/attachmentView'; @@ -21,11 +21,9 @@ export class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponen canAccessAttachments = true; constructor(cipherService: CipherService, i18nService: I18nService, - cryptoService: CryptoService, userService: UserService, - platformUtilsService: PlatformUtilsService, apiService: ApiService, - logService: LogService) { - super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window, - logService); + cryptoService: CryptoService, stateService: StateService, + platformUtilsService: PlatformUtilsService, apiService: ApiService, logService: LogService) { + super(cipherService, i18nService, cryptoService, platformUtilsService, apiService, window, logService, stateService); } protected async init() { diff --git a/src/app/settings/emergency-access-confirm.component.ts b/src/app/settings/emergency-access-confirm.component.ts index 2be2bb79..c5c7acad 100644 --- a/src/app/settings/emergency-access-confirm.component.ts +++ b/src/app/settings/emergency-access-confirm.component.ts @@ -6,12 +6,10 @@ import { Output, } from '@angular/core'; -import { ConstantsService } from 'jslib-common/services/constants.service'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { LogService } from 'jslib-common/abstractions/log.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { Utils } from 'jslib-common/misc/utils'; @@ -31,7 +29,7 @@ export class EmergencyAccessConfirmComponent implements OnInit { fingerprint: string; constructor(private apiService: ApiService, private cryptoService: CryptoService, - private storageService: StorageService, private logService: LogService) { } + private stateService: StateService, private logService: LogService) { } async ngOnInit() { try { @@ -55,7 +53,7 @@ export class EmergencyAccessConfirmComponent implements OnInit { } if (this.dontAskAgain) { - await this.storageService.save(ConstantsService.autoConfirmFingerprints, true); + await this.stateService.setAutoConfirmFingerprints(true); } try { diff --git a/src/app/settings/emergency-access-takeover.component.ts b/src/app/settings/emergency-access-takeover.component.ts index 3875f040..9153bb26 100644 --- a/src/app/settings/emergency-access-takeover.component.ts +++ b/src/app/settings/emergency-access-takeover.component.ts @@ -6,8 +6,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; @@ -16,7 +14,7 @@ import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { KdfType } from 'jslib-common/enums/kdfType'; import { PolicyData } from 'jslib-common/models/data/policyData'; @@ -41,13 +39,26 @@ export class EmergencyAccessTakeoverComponent extends ChangePasswordComponent im formPromise: Promise; - constructor(i18nService: I18nService, cryptoService: CryptoService, - messagingService: MessagingService, userService: UserService, + constructor( + i18nService: I18nService, + cryptoService: CryptoService, + messagingService: MessagingService, + stateService: StateService, passwordGenerationService: PasswordGenerationService, - platformUtilsService: PlatformUtilsService, policyService: PolicyService, - private apiService: ApiService, private toasterService: ToasterService, private logService: LogService) { - super(i18nService, cryptoService, messagingService, userService, passwordGenerationService, - platformUtilsService, policyService); + platformUtilsService: PlatformUtilsService, + policyService: PolicyService, + private apiService: ApiService, + private logService: LogService + ) { + super( + i18nService, + cryptoService, + messagingService, + passwordGenerationService, + platformUtilsService, + policyService, + stateService, + ); } async ngOnInit() { @@ -56,7 +67,7 @@ export class EmergencyAccessTakeoverComponent extends ChangePasswordComponent im const policies = response.data.map((policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse))); this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(policies); } - } + } async submit() { if (!await this.strongPassword()) { @@ -69,7 +80,7 @@ export class EmergencyAccessTakeoverComponent extends ChangePasswordComponent im const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer); if (oldEncKey == null) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), this.i18nService.t('unexpectedError')); + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('unexpectedError')); return; } diff --git a/src/app/settings/emergency-access.component.ts b/src/app/settings/emergency-access.component.ts index de88015b..1cc0f4ac 100644 --- a/src/app/settings/emergency-access.component.ts +++ b/src/app/settings/emergency-access.component.ts @@ -4,23 +4,23 @@ import { ViewChild, ViewContainerRef } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; + +import { EmergencyAccessConfirmRequest } from 'jslib-common/models/request/emergencyAccessConfirmRequest'; + +import { EmergencyAccessGranteeDetailsResponse, EmergencyAccessGrantorDetailsResponse } from 'jslib-common/models/response/emergencyAccessResponse'; import { EmergencyAccessStatusType } from 'jslib-common/enums/emergencyAccessStatusType'; import { EmergencyAccessType } from 'jslib-common/enums/emergencyAccessType'; import { Utils } from 'jslib-common/misc/utils'; -import { EmergencyAccessConfirmRequest } from 'jslib-common/models/request/emergencyAccessConfirmRequest'; -import { EmergencyAccessGranteeDetailsResponse, EmergencyAccessGrantorDetailsResponse } from 'jslib-common/models/response/emergencyAccessResponse'; -import { ConstantsService } from 'jslib-common/services/constants.service'; import { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe'; @@ -36,7 +36,7 @@ import { ModalService } from 'jslib-angular/services/modal.service'; }) export class EmergencyAccessComponent implements OnInit { @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef; - @ViewChild('takeoverTemplate', { read: ViewContainerRef, static: true}) takeoverModalRef: ViewContainerRef; + @ViewChild('takeoverTemplate', { read: ViewContainerRef, static: true }) takeoverModalRef: ViewContainerRef; @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef; canAccessPremium: boolean; @@ -47,16 +47,22 @@ export class EmergencyAccessComponent implements OnInit { actionPromise: Promise; isOrganizationOwner: boolean; - constructor(private apiService: ApiService, private i18nService: I18nService, - private modalService: ModalService, private platformUtilsService: PlatformUtilsService, - private toasterService: ToasterService, private cryptoService: CryptoService, - private storageService: StorageService, private userService: UserService, - private messagingService: MessagingService, private userNamePipe: UserNamePipe, - private logService: LogService) { } + constructor( + private apiService: ApiService, + private i18nService: I18nService, + private modalService: ModalService, + private platformUtilsService: PlatformUtilsService, + private cryptoService: CryptoService, + private messagingService: MessagingService, + private userNamePipe: UserNamePipe, + private logService: LogService, + private stateService: StateService, + private organizationService: OrganizationService, + ) { } async ngOnInit() { - this.canAccessPremium = await this.userService.canAccessPremium(); - const orgs = await this.userService.getAllOrganizations(); + this.canAccessPremium = await this.stateService.getCanAccessPremium(); + const orgs = await this.organizationService.getAll(); this.isOrganizationOwner = orgs.some(o => o.isOwner); this.load(); } @@ -99,7 +105,7 @@ export class EmergencyAccessComponent implements OnInit { } this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id); await this.actionPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', contact.email)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('hasBeenReinvited', contact.email)); this.actionPromise = null; } @@ -112,7 +118,7 @@ export class EmergencyAccessComponent implements OnInit { return; } - const autoConfirm = await this.storageService.get(ConstantsService.autoConfirmFingerprints); + const autoConfirm = await this.stateService.getAutoConfirmFingerPrints(); if (autoConfirm == null || !autoConfirm) { const [modal] = await this.modalService.openViewRef(EmergencyAccessConfirmComponent, this.confirmModalRef, comp => { comp.name = this.userNamePipe.transform(contact); @@ -125,7 +131,7 @@ export class EmergencyAccessComponent implements OnInit { await comp.formPromise; updateUser(); - this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(contact))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(contact))); }); }); return; @@ -135,7 +141,7 @@ export class EmergencyAccessComponent implements OnInit { await this.actionPromise; updateUser(); - this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(contact))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(contact))); this.actionPromise = null; } @@ -149,7 +155,7 @@ export class EmergencyAccessComponent implements OnInit { try { await this.apiService.deleteEmergencyAccess(details.id); - this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.userNamePipe.transform(details))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('removedUserId', this.userNamePipe.transform(details))); if (details instanceof EmergencyAccessGranteeDetailsResponse) { this.removeGrantee(details); @@ -177,7 +183,7 @@ export class EmergencyAccessComponent implements OnInit { await this.apiService.postEmergencyAccessInitiate(details.id); details.status = EmergencyAccessStatusType.RecoveryInitiated; - this.toasterService.popAsync('success', null, this.i18nService.t('requestSent', this.userNamePipe.transform(details))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('requestSent', this.userNamePipe.transform(details))); } async approve(details: EmergencyAccessGranteeDetailsResponse) { @@ -198,14 +204,14 @@ export class EmergencyAccessComponent implements OnInit { await this.apiService.postEmergencyAccessApprove(details.id); details.status = EmergencyAccessStatusType.RecoveryApproved; - this.toasterService.popAsync('success', null, this.i18nService.t('emergencyApproved', this.userNamePipe.transform(details))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('emergencyApproved', this.userNamePipe.transform(details))); } async reject(details: EmergencyAccessGranteeDetailsResponse) { await this.apiService.postEmergencyAccessReject(details.id); details.status = EmergencyAccessStatusType.Confirmed; - this.toasterService.popAsync('success', null, this.i18nService.t('emergencyRejected', this.userNamePipe.transform(details))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('emergencyRejected', this.userNamePipe.transform(details))); } async takeover(details: EmergencyAccessGrantorDetailsResponse) { @@ -216,7 +222,7 @@ export class EmergencyAccessComponent implements OnInit { comp.onDone.subscribe(() => { modal.close(); - this.toasterService.popAsync('success', null, this.i18nService.t('passwordResetFor', this.userNamePipe.transform(details))); + this.platformUtilsService.showToast('success', null, this.i18nService.t('passwordResetFor', this.userNamePipe.transform(details))); }); }); } diff --git a/src/app/settings/emergency-add-edit.component.ts b/src/app/settings/emergency-add-edit.component.ts index 69ed4074..32fec6d2 100644 --- a/src/app/settings/emergency-add-edit.component.ts +++ b/src/app/settings/emergency-add-edit.component.ts @@ -8,13 +8,13 @@ import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { StateService } from 'jslib-common/abstractions/state.service'; import { TotpService } from 'jslib-common/abstractions/totp.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { Cipher } from 'jslib-common/models/domain/cipher'; @@ -30,14 +30,14 @@ export class EmergencyAddEditComponent extends BaseAddEditComponent { constructor(cipherService: CipherService, folderService: FolderService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, - auditService: AuditService, stateService: StateService, - userService: UserService, collectionService: CollectionService, + auditService: AuditService, stateService: StateService, collectionService: CollectionService, totpService: TotpService, passwordGenerationService: PasswordGenerationService, - messagingService: MessagingService, eventService: EventService, policyService: PolicyService, - logService: LogService, passwordRepromptService: PasswordRepromptService) { + messagingService: MessagingService, eventService: EventService, + policyService: PolicyService, passwordRepromptService: PasswordRepromptService, + organizationService: OrganizationService, logService: LogService) { super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService, - userService, collectionService, totpService, passwordGenerationService, messagingService, - eventService, policyService, passwordRepromptService, logService); + collectionService, totpService, passwordGenerationService, messagingService, + eventService, policyService, organizationService, logService, passwordRepromptService); } async load() { diff --git a/src/app/settings/link-sso.component.ts b/src/app/settings/link-sso.component.ts index 6beb833e..e762d3d6 100644 --- a/src/app/settings/link-sso.component.ts +++ b/src/app/settings/link-sso.component.ts @@ -14,7 +14,6 @@ import { LogService } from 'jslib-common/abstractions/log.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; import { SsoComponent } from 'jslib-angular/components/sso.component'; @@ -32,11 +31,9 @@ export class LinkSsoComponent extends SsoComponent implements AfterContentInit { apiService: ApiService, authService: AuthService, router: Router, route: ActivatedRoute, cryptoFunctionService: CryptoFunctionService, passwordGenerationService: PasswordGenerationService, - storageService: StorageService, stateService: StateService, environmentService: EnvironmentService, - logService: LogService) { + stateService: StateService, environmentService: EnvironmentService, logService: LogService) { super(authService, router, - i18nService, route, - storageService, stateService, + i18nService, route, stateService, platformUtilsService, apiService, cryptoFunctionService, environmentService, passwordGenerationService, logService); diff --git a/src/app/settings/options.component.ts b/src/app/settings/options.component.ts index b218cf81..952abe4d 100644 --- a/src/app/settings/options.component.ts +++ b/src/app/settings/options.component.ts @@ -4,17 +4,12 @@ import { } from '@angular/core'; import { FormControl } from '@angular/forms'; -import { ToasterService } from 'angular2-toaster'; - import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { StateService } from 'jslib-common/abstractions/state.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; -import { ConstantsService } from 'jslib-common/services/constants.service'; - import { ThemeType } from 'jslib-common/enums/themeType'; import { Utils } from 'jslib-common/misc/utils'; @@ -38,10 +33,13 @@ export class OptionsComponent implements OnInit { private startingLocale: string; private startingTheme: string; - constructor(private storageService: StorageService, private stateService: StateService, - private i18nService: I18nService, private toasterService: ToasterService, - private vaultTimeoutService: VaultTimeoutService, private platformUtilsService: PlatformUtilsService, - private messagingService: MessagingService) { + constructor( + private stateService: StateService, + private i18nService: I18nService, + private vaultTimeoutService: VaultTimeoutService, + private platformUtilsService: PlatformUtilsService, + private messagingService: MessagingService + ) { this.vaultTimeouts = [ { name: i18nService.t('oneMinute'), value: 1 }, { name: i18nService.t('fiveMinutes'), value: 5 }, @@ -67,7 +65,7 @@ export class OptionsComponent implements OnInit { localeOptions.splice(0, 0, { name: i18nService.t('default'), value: null }); this.localeOptions = localeOptions; this.themeOptions = [ - { name: i18nService.t('themeLight'), value: null }, + { name: i18nService.t('themeLight'), value: ThemeType.Light }, { name: i18nService.t('themeDark'), value: ThemeType.Dark }, { name: i18nService.t('themeSystem'), value: ThemeType.System }, ]; @@ -75,40 +73,38 @@ export class OptionsComponent implements OnInit { async ngOnInit() { this.vaultTimeout.setValue(await this.vaultTimeoutService.getVaultTimeout()); - this.vaultTimeoutAction = await this.storageService.get(ConstantsService.vaultTimeoutActionKey); - this.disableIcons = await this.storageService.get(ConstantsService.disableFaviconKey); - this.enableGravatars = await this.storageService.get('enableGravatars'); - this.enableFullWidth = await this.storageService.get('enableFullWidth'); - this.locale = this.startingLocale = await this.storageService.get(ConstantsService.localeKey); - this.theme = this.startingTheme = await this.storageService.get(ConstantsService.themeKey); + this.vaultTimeoutAction = await this.stateService.getVaultTimeoutAction(); + this.disableIcons = await this.stateService.getDisableFavicon(); + this.enableGravatars = await this.stateService.getEnableGravitars(); + this.enableFullWidth = await this.stateService.getEnableFullWidth(); + this.locale = await this.stateService.getLocale() ?? this.startingLocale; + this.theme = await this.stateService.getTheme() ?? this.startingTheme; } async submit() { if (!this.vaultTimeout.valid) { - this.toasterService.popAsync('error', null, this.i18nService.t('vaultTimeoutToLarge')); + this.platformUtilsService.showToast('error', null, this.i18nService.t('vaultTimeoutToLarge')); return; } await this.vaultTimeoutService.setVaultTimeoutOptions(this.vaultTimeout.value, this.vaultTimeoutAction); - await this.storageService.save(ConstantsService.disableFaviconKey, this.disableIcons); - await this.stateService.save(ConstantsService.disableFaviconKey, this.disableIcons); - await this.storageService.save('enableGravatars', this.enableGravatars); - await this.stateService.save('enableGravatars', this.enableGravatars); - await this.storageService.save('enableFullWidth', this.enableFullWidth); + await this.stateService.setDisableFavicon(this.disableIcons); + await this.stateService.setEnableGravitars(this.enableGravatars); + await this.stateService.setEnableFullWidth(this.enableFullWidth); this.messagingService.send('setFullWidth'); if (this.theme !== this.startingTheme) { - await this.storageService.save(ConstantsService.themeKey, this.theme); + await this.stateService.setTheme(this.theme); this.startingTheme = this.theme; const effectiveTheme = await this.platformUtilsService.getEffectiveTheme(); const htmlEl = window.document.documentElement; htmlEl.classList.remove('theme_' + ThemeType.Light, 'theme_' + ThemeType.Dark); htmlEl.classList.add('theme_' + effectiveTheme); } - await this.storageService.save(ConstantsService.localeKey, this.locale); + await this.stateService.setLocale(this.locale); if (this.locale !== this.startingLocale) { window.location.reload(); } else { - this.toasterService.popAsync('success', null, this.i18nService.t('optionsUpdated')); + this.platformUtilsService.showToast('success', null, [this.i18nService.t('optionsUpdated'), this.i18nService.t('optionsUpdated')]); } } diff --git a/src/app/settings/organization-plans.component.ts b/src/app/settings/organization-plans.component.ts index 52c44c54..144280b4 100644 --- a/src/app/settings/organization-plans.component.ts +++ b/src/app/settings/organization-plans.component.ts @@ -8,16 +8,14 @@ import { } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { PaymentComponent } from './payment.component'; import { TaxInfoComponent } from './tax-info.component'; @@ -73,9 +71,9 @@ export class OrganizationPlansComponent implements OnInit { plans: PlanResponse[]; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, platformUtilsService: PlatformUtilsService, + private platformUtilsService: PlatformUtilsService, private cryptoService: CryptoService, private router: Router, private syncService: SyncService, - private policyService: PolicyService, private userService: UserService, private logService: LogService) { + private policyService: PolicyService, private organizationService: OrganizationService, private logService: LogService) { this.selfHosted = platformUtilsService.isSelfHost(); } @@ -271,10 +269,10 @@ export class OrganizationPlansComponent implements OnInit { orgId = await this.createCloudHosted(key, collectionCt, orgKeys, shareKey[1]); } - this.toasterService.popAsync('success', this.i18nService.t('organizationCreated'), this.i18nService.t('organizationReadyToGo')); + this.platformUtilsService.showToast('success', this.i18nService.t('organizationCreated'), this.i18nService.t('organizationReadyToGo')); } else { orgId = await this.updateOrganization(orgId); - this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpgraded')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('organizationUpgraded')); } await this.apiService.refreshIdentityToken(); @@ -309,7 +307,7 @@ export class OrganizationPlansComponent implements OnInit { request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode; // Retrieve org info to backfill pub/priv key if necessary - const org = await this.userService.getOrganization(this.organizationId); + const org = await this.organizationService.get(this.organizationId); if (!org.hasPublicAndPrivateKeys) { const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId); const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey); diff --git a/src/app/settings/organizations.component.ts b/src/app/settings/organizations.component.ts index 1d893e41..b9c53dbe 100644 --- a/src/app/settings/organizations.component.ts +++ b/src/app/settings/organizations.component.ts @@ -4,16 +4,14 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { Organization } from 'jslib-common/models/domain/organization'; import { Policy } from 'jslib-common/models/domain/policy'; @@ -36,9 +34,9 @@ export class OrganizationsComponent implements OnInit { loaded: boolean = false; actionPromise: Promise; - constructor(private userService: UserService, private platformUtilsService: PlatformUtilsService, + constructor(private organizationService: OrganizationService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private apiService: ApiService, - private toasterService: ToasterService, private syncService: SyncService, + private syncService: SyncService, private cryptoService: CryptoService, private policyService: PolicyService, private logService: LogService) { } @@ -50,7 +48,7 @@ export class OrganizationsComponent implements OnInit { } async load() { - const orgs = await this.userService.getAllOrganizations(); + const orgs = await this.organizationService.getAll(); orgs.sort(Utils.getSortFunction(this.i18nService, 'name')); this.organizations = orgs; this.policies = await this.policyService.getAll(PolicyType.ResetPassword); @@ -85,7 +83,7 @@ export class OrganizationsComponent implements OnInit { return this.syncService.fullSync(true); }); await this.actionPromise; - this.toasterService.popAsync('success', null, 'Unlinked SSO'); + this.platformUtilsService.showToast('success', null, 'Unlinked SSO'); await this.load(); } catch (e) { this.logService.error(e); @@ -105,7 +103,7 @@ export class OrganizationsComponent implements OnInit { return this.syncService.fullSync(true); }); await this.actionPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('leftOrganization')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('leftOrganization')); await this.load(); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/premium.component.ts b/src/app/settings/premium.component.ts index 089b08b4..e48db609 100644 --- a/src/app/settings/premium.component.ts +++ b/src/app/settings/premium.component.ts @@ -5,16 +5,14 @@ import { } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; import { TokenService } from 'jslib-common/abstractions/token.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { PaymentComponent } from './payment.component'; import { TaxInfoComponent } from './tax-info.component'; @@ -36,15 +34,15 @@ export class PremiumComponent implements OnInit { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, platformUtilsService: PlatformUtilsService, + private platformUtilsService: PlatformUtilsService, private tokenService: TokenService, private router: Router, private messagingService: MessagingService, private syncService: SyncService, - private userService: UserService, private logService: LogService) { + private logService: LogService, private stateService: StateService) { this.selfHosted = platformUtilsService.isSelfHost(); } async ngOnInit() { - this.canAccessPremium = await this.userService.canAccessPremium(); + this.canAccessPremium = await this.stateService.getCanAccessPremium(); const premium = await this.tokenService.getPremium(); if (premium) { this.router.navigate(['/settings/subscription']); @@ -58,7 +56,7 @@ export class PremiumComponent implements OnInit { const fileEl = document.getElementById('file') as HTMLInputElement; files = fileEl.files; if (files == null || files.length === 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('selectFile')); return; } @@ -67,7 +65,7 @@ export class PremiumComponent implements OnInit { try { if (this.selfHosted) { if (!this.tokenService.getEmailVerified()) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('verifyEmailFirst')); return; } @@ -106,7 +104,7 @@ export class PremiumComponent implements OnInit { async finalizePremium() { await this.apiService.refreshIdentityToken(); await this.syncService.fullSync(true); - this.toasterService.popAsync('success', null, this.i18nService.t('premiumUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('premiumUpdated')); this.messagingService.send('purchasedPremium'); this.router.navigate(['/settings/subscription']); } diff --git a/src/app/settings/profile.component.ts b/src/app/settings/profile.component.ts index 49c713d7..37a6c98c 100644 --- a/src/app/settings/profile.component.ts +++ b/src/app/settings/profile.component.ts @@ -3,14 +3,13 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service'; import { LogService } from 'jslib-common/abstractions/log.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { UpdateProfileRequest } from 'jslib-common/models/request/updateProfileRequest'; @@ -28,15 +27,20 @@ export class ProfileComponent implements OnInit { formPromise: Promise; - constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private userService: UserService, - private cryptoService: CryptoService, private logService: LogService, - private keyConnectorService: KeyConnectorService) { } + constructor( + private apiService: ApiService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private cryptoService: CryptoService, + private logService: LogService, + private keyConnectorService: KeyConnectorService, + private stateService: StateService, + ) { } async ngOnInit() { this.profile = await this.apiService.getProfile(); this.loading = false; - const fingerprint = await this.cryptoService.getFingerprint(await this.userService.getUserId()); + const fingerprint = await this.cryptoService.getFingerprint(await this.stateService.getUserId()); if (fingerprint != null) { this.fingerprint = fingerprint.join('-'); } @@ -48,7 +52,7 @@ export class ProfileComponent implements OnInit { const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint); this.formPromise = this.apiService.putProfile(request); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('accountUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('accountUpdated')); } catch (e) { this.logService.error(e); } diff --git a/src/app/settings/purge-vault.component.ts b/src/app/settings/purge-vault.component.ts index 14c9f9c8..b6a99934 100644 --- a/src/app/settings/purge-vault.component.ts +++ b/src/app/settings/purge-vault.component.ts @@ -4,11 +4,10 @@ import { } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { UserVerificationService } from 'jslib-common/abstractions/userVerification.service'; import { Verification } from 'jslib-common/types/verification'; @@ -24,7 +23,7 @@ export class PurgeVaultComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private userVerificationService: UserVerificationService, + private platformUtilsService: PlatformUtilsService, private userVerificationService: UserVerificationService, private router: Router, private logService: LogService) { } async submit() { @@ -32,7 +31,7 @@ export class PurgeVaultComponent { this.formPromise = this.userVerificationService.buildRequest(this.masterPassword) .then(request => this.apiService.postPurgeCiphers(request, this.organizationId)); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('vaultPurged')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('vaultPurged')); if (this.organizationId != null) { this.router.navigate(['organizations', this.organizationId, 'vault']); } else { diff --git a/src/app/settings/settings.component.ts b/src/app/settings/settings.component.ts index 4f89fe9a..26ef7c97 100644 --- a/src/app/settings/settings.component.ts +++ b/src/app/settings/settings.component.ts @@ -5,11 +5,10 @@ import { OnInit, } from '@angular/core'; +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { TokenService } from 'jslib-common/abstractions/token.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; - -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; const BroadcasterSubscriptionId = 'SettingsComponent'; @@ -24,7 +23,7 @@ export class SettingsComponent implements OnInit, OnDestroy { constructor(private tokenService: TokenService, private broadcasterService: BroadcasterService, private ngZone: NgZone, private platformUtilsService: PlatformUtilsService, - private userService: UserService) { } + private organizationService: OrganizationService) { } async ngOnInit() { this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => { @@ -48,6 +47,6 @@ export class SettingsComponent implements OnInit, OnDestroy { async load() { this.premium = await this.tokenService.getPremium(); - this.hasFamilySponsorshipAvailable = await this.userService.canManageSponsorships(); + this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships(); } } diff --git a/src/app/settings/sponsored-families.component.html b/src/app/settings/sponsored-families.component.html index 6d1c3899..8ca5d8b2 100644 --- a/src/app/settings/sponsored-families.component.html +++ b/src/app/settings/sponsored-families.component.html @@ -24,7 +24,6 @@ - {{'sponsoredFamiliesLeaveCopy' | i18n}}
@@ -36,20 +35,23 @@
-
- - - - - - - - - - - - - -
{{'recipient' | i18n}}{{'sponsoringOrg' | i18n}}
-
+ +
+ + + + + + + + + + + + + +
{{'recipient' | i18n}}{{'sponsoringOrg' | i18n}}
+
+ {{'sponsoredFamiliesLeaveCopy' | i18n}} +
diff --git a/src/app/settings/sponsored-families.component.ts b/src/app/settings/sponsored-families.component.ts index afa45bd3..25319bd3 100644 --- a/src/app/settings/sponsored-families.component.ts +++ b/src/app/settings/sponsored-families.component.ts @@ -2,11 +2,12 @@ import { Component, OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; + import { PlanSponsorshipType } from 'jslib-common/enums/planSponsorshipType'; import { Organization } from 'jslib-common/models/domain/organization'; @@ -25,9 +26,13 @@ export class SponsoredFamiliesComponent implements OnInit { // Conditional display properties formPromise: Promise; - constructor(private userService: UserService, private apiService: ApiService, - private i18nService: I18nService, private toasterService: ToasterService, - private syncService: SyncService) { } + constructor( + private apiService: ApiService, + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, + private syncService: SyncService, + private organizationService: OrganizationService, + ) { } async ngOnInit() { await this.load(); @@ -41,7 +46,7 @@ export class SponsoredFamiliesComponent implements OnInit { }); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('sponsorshipCreated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('sponsorshipCreated')); this.formPromise = null; this.resetForm(); await this.load(true); @@ -57,7 +62,7 @@ export class SponsoredFamiliesComponent implements OnInit { await this.syncService.fullSync(true); } - const allOrgs = await this.userService.getAllOrganizations(); + const allOrgs = await this.organizationService.getAll(); this.availableSponsorshipOrgs = allOrgs.filter(org => org.familySponsorshipAvailable); this.activeSponsorshipOrgs = allOrgs.filter(org => org.familySponsorshipFriendlyName !== null); diff --git a/src/app/settings/sponsoring-org-row.component.html b/src/app/settings/sponsoring-org-row.component.html index 497abe5c..6aceee2d 100644 --- a/src/app/settings/sponsoring-org-row.component.html +++ b/src/app/settings/sponsoring-org-row.component.html @@ -3,16 +3,24 @@ {{sponsoringOrg.name}} - - + diff --git a/src/app/settings/sponsoring-org-row.component.ts b/src/app/settings/sponsoring-org-row.component.ts index ff774666..f656a239 100644 --- a/src/app/settings/sponsoring-org-row.component.ts +++ b/src/app/settings/sponsoring-org-row.component.ts @@ -4,7 +4,6 @@ import { Input, Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -24,7 +23,7 @@ export class SponsoringOrgRowComponent { revokeSponsorshipPromise: Promise; resendEmailPromise: Promise; - constructor(private toasterService: ToasterService, private apiService: ApiService, + constructor(private apiService: ApiService, private i18nService: I18nService, private logService: LogService, private platformUtilsService: PlatformUtilsService) { } @@ -32,8 +31,6 @@ export class SponsoringOrgRowComponent { try { this.revokeSponsorshipPromise = this.doRevokeSponsorship(); await this.revokeSponsorshipPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('reclaimedFreePlan')); - this.sponsorshipRemoved.emit(); } catch (e) { this.logService.error(e); } @@ -44,7 +41,7 @@ export class SponsoringOrgRowComponent { async resendEmail() { this.resendEmailPromise = this.apiService.postResendSponsorshipOffer(this.sponsoringOrg.id); await this.resendEmailPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('emailSent')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('emailSent')); this.resendEmailPromise = null; } @@ -59,5 +56,7 @@ export class SponsoringOrgRowComponent { } await this.apiService.deleteRevokeSponsorship(this.sponsoringOrg.id); + this.platformUtilsService.showToast('success', null, this.i18nService.t('reclaimedFreePlan')); + this.sponsorshipRemoved.emit(); } } diff --git a/src/app/settings/two-factor-authenticator.component.ts b/src/app/settings/two-factor-authenticator.component.ts index 6010b854..0f8eb46d 100644 --- a/src/app/settings/two-factor-authenticator.component.ts +++ b/src/app/settings/two-factor-authenticator.component.ts @@ -4,13 +4,11 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { UserVerificationService } from 'jslib-common/abstractions/userVerification.service'; import { UpdateTwoFactorAuthenticatorRequest } from 'jslib-common/models/request/updateTwoFactorAuthenticatorRequest'; @@ -32,11 +30,21 @@ export class TwoFactorAuthenticatorComponent extends TwoFactorBaseComponent impl private qrScript: HTMLScriptElement; - constructor(apiService: ApiService, i18nService: I18nService, - toasterService: ToasterService, userVerificationService: UserVerificationService, - platformUtilsService: PlatformUtilsService, logService: LogService, - private userService: UserService) { - super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService); + constructor( + apiService: ApiService, + i18nService: I18nService, + userVerificationService: UserVerificationService, + platformUtilsService: PlatformUtilsService, + logService: LogService, + private stateService: StateService + ) { + super( + apiService, + i18nService, + platformUtilsService, + logService, + userVerificationService + ); this.qrScript = window.document.createElement('script'); this.qrScript.src = 'scripts/qrious.min.js'; this.qrScript.async = true; @@ -79,7 +87,7 @@ export class TwoFactorAuthenticatorComponent extends TwoFactorBaseComponent impl this.token = null; this.enabled = response.enabled; this.key = response.key; - const email = await this.userService.getEmail(); + const email = await this.stateService.getEmail(); window.setTimeout(() => { const qr = new (window as any).QRious({ element: document.getElementById('qr'), diff --git a/src/app/settings/two-factor-base.component.ts b/src/app/settings/two-factor-base.component.ts index 8544ab8f..fd9bef04 100644 --- a/src/app/settings/two-factor-base.component.ts +++ b/src/app/settings/two-factor-base.component.ts @@ -4,8 +4,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -32,7 +30,7 @@ export abstract class TwoFactorBaseComponent { protected verificationType: VerificationType; constructor(protected apiService: ApiService, protected i18nService: I18nService, - protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService, + protected platformUtilsService: PlatformUtilsService, protected logService: LogService, protected userVerificationService: UserVerificationService) { } protected auth(authResponse: any) { @@ -67,7 +65,7 @@ export abstract class TwoFactorBaseComponent { } await promise; this.enabled = false; - this.toasterService.popAsync('success', null, this.i18nService.t('twoStepDisabled')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('twoStepDisabled')); this.onUpdated.emit(false); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/two-factor-duo.component.ts b/src/app/settings/two-factor-duo.component.ts index acce4cf5..e38cf176 100644 --- a/src/app/settings/two-factor-duo.component.ts +++ b/src/app/settings/two-factor-duo.component.ts @@ -1,7 +1,5 @@ import { Component } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -26,9 +24,9 @@ export class TwoFactorDuoComponent extends TwoFactorBaseComponent { formPromise: Promise; constructor(apiService: ApiService, i18nService: I18nService, - toasterService: ToasterService, platformUtilsService: PlatformUtilsService, + platformUtilsService: PlatformUtilsService, logService: LogService, userVerificationService: UserVerificationService) { - super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService); + super(apiService, i18nService, platformUtilsService, logService, userVerificationService); } auth(authResponse: any) { diff --git a/src/app/settings/two-factor-email.component.ts b/src/app/settings/two-factor-email.component.ts index 8e5ad39a..2215ea4d 100644 --- a/src/app/settings/two-factor-email.component.ts +++ b/src/app/settings/two-factor-email.component.ts @@ -1,12 +1,10 @@ import { Component } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { UserVerificationService } from 'jslib-common/abstractions/userVerification.service'; import { TwoFactorEmailRequest } from 'jslib-common/models/request/twoFactorEmailRequest'; @@ -29,11 +27,21 @@ export class TwoFactorEmailComponent extends TwoFactorBaseComponent { formPromise: Promise; emailPromise: Promise; - constructor(apiService: ApiService, i18nService: I18nService, - toasterService: ToasterService, platformUtilsService: PlatformUtilsService, - logService: LogService, userVerificationService: UserVerificationService, - private userService: UserService) { - super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService); + constructor( + apiService: ApiService, + i18nService: I18nService, + platformUtilsService: PlatformUtilsService, + logService: LogService, + userVerificationService: UserVerificationService, + private stateService: StateService, + ) { + super( + apiService, + i18nService, + platformUtilsService, + logService, + userVerificationService + ); } auth(authResponse: any) { @@ -78,7 +86,7 @@ export class TwoFactorEmailComponent extends TwoFactorBaseComponent { this.email = response.email; this.enabled = response.enabled; if (!this.enabled && (this.email == null || this.email === '')) { - this.email = await this.userService.getEmail(); + this.email = await this.stateService.getEmail(); } } } diff --git a/src/app/settings/two-factor-setup.component.ts b/src/app/settings/two-factor-setup.component.ts index b6b5aef5..4722d956 100644 --- a/src/app/settings/two-factor-setup.component.ts +++ b/src/app/settings/two-factor-setup.component.ts @@ -9,7 +9,7 @@ import { import { ApiService } from 'jslib-common/abstractions/api.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { TwoFactorProviders } from 'jslib-common/services/auth.service'; @@ -46,12 +46,12 @@ export class TwoFactorSetupComponent implements OnInit { loading = true; modal: ModalRef; - constructor(protected apiService: ApiService, protected userService: UserService, - protected modalService: ModalService, protected messagingService: MessagingService, - protected policyService: PolicyService) { } + constructor(protected apiService: ApiService, protected modalService: ModalService, + protected messagingService: MessagingService, protected policyService: PolicyService, + private stateService: StateService) { } async ngOnInit() { - this.canAccessPremium = await this.userService.canAccessPremium(); + this.canAccessPremium = await this.stateService.getCanAccessPremium(); for (const key in TwoFactorProviders) { if (!TwoFactorProviders.hasOwnProperty(key)) { diff --git a/src/app/settings/two-factor-verify.component.ts b/src/app/settings/two-factor-verify.component.ts index 1e9f3948..de2a38a4 100644 --- a/src/app/settings/two-factor-verify.component.ts +++ b/src/app/settings/two-factor-verify.component.ts @@ -66,7 +66,7 @@ export class TwoFactorVerifyComponent { private apiCall(request: SecretVerificationRequest): Promise { switch (this.type) { - case -1: + case -1 as TwoFactorProviderType: return this.apiService.getTwoFactorRecover(request); case TwoFactorProviderType.Duo: case TwoFactorProviderType.OrganizationDuo: diff --git a/src/app/settings/two-factor-webauthn.component.ts b/src/app/settings/two-factor-webauthn.component.ts index 1246e179..f7e42a24 100644 --- a/src/app/settings/two-factor-webauthn.component.ts +++ b/src/app/settings/two-factor-webauthn.component.ts @@ -3,8 +3,6 @@ import { NgZone, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -40,9 +38,9 @@ export class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent { formPromise: Promise; constructor(apiService: ApiService, i18nService: I18nService, - toasterService: ToasterService, platformUtilsService: PlatformUtilsService, + platformUtilsService: PlatformUtilsService, private ngZone: NgZone, logService: LogService, userVerificationService: UserVerificationService) { - super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService); + super(apiService, i18nService, platformUtilsService, logService, userVerificationService); } auth(authResponse: any) { diff --git a/src/app/settings/two-factor-yubikey.component.ts b/src/app/settings/two-factor-yubikey.component.ts index a655981e..a888cf26 100644 --- a/src/app/settings/two-factor-yubikey.component.ts +++ b/src/app/settings/two-factor-yubikey.component.ts @@ -1,7 +1,5 @@ import { Component } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -28,9 +26,9 @@ export class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent { disablePromise: Promise; constructor(apiService: ApiService, i18nService: I18nService, - toasterService: ToasterService, platformUtilsService: PlatformUtilsService, + platformUtilsService: PlatformUtilsService, logService: LogService, userVerificationService: UserVerificationService) { - super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService); + super(apiService, i18nService, platformUtilsService, logService, userVerificationService); } auth(authResponse: any) { @@ -51,7 +49,7 @@ export class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent { this.formPromise = this.apiService.putTwoFactorYubiKey(request); const response = await this.formPromise; await this.processResponse(response); - this.toasterService.popAsync('success', null, this.i18nService.t('yubikeysUpdated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('yubikeysUpdated')); }); } diff --git a/src/app/settings/update-key.component.ts b/src/app/settings/update-key.component.ts index a2638c4c..ed465e50 100644 --- a/src/app/settings/update-key.component.ts +++ b/src/app/settings/update-key.component.ts @@ -1,10 +1,5 @@ import { Component } from '@angular/core'; -import { - Toast, - ToasterService, -} from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; @@ -12,6 +7,7 @@ import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; import { EncString } from 'jslib-common/models/domain/encString'; @@ -29,7 +25,7 @@ export class UpdateKeyComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private cryptoService: CryptoService, + private platformUtilsService: PlatformUtilsService, private cryptoService: CryptoService, private messagingService: MessagingService, private syncService: SyncService, private folderService: FolderService, private cipherService: CipherService, private logService: LogService) { } @@ -41,7 +37,7 @@ export class UpdateKeyComponent { } if (this.masterPassword == null || this.masterPassword === '') { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('masterPassRequired')); return; } @@ -51,13 +47,8 @@ export class UpdateKeyComponent { return this.apiService.postAccountKey(request); }); await this.formPromise; - const toast: Toast = { - type: 'success', - title: this.i18nService.t('keyUpdated'), - body: this.i18nService.t('logBackInOthersToo'), - timeout: 15000, - }; - this.toasterService.popAsync(toast); + this.platformUtilsService.showToast('success', this.i18nService.t('keyUpdated'), + this.i18nService.t('logBackInOthersToo'), { timeout: 15000 }); this.messagingService.send('logout'); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/update-license.component.ts b/src/app/settings/update-license.component.ts index 89106965..f8ab1082 100644 --- a/src/app/settings/update-license.component.ts +++ b/src/app/settings/update-license.component.ts @@ -5,11 +5,10 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; @Component({ selector: 'app-update-license', @@ -23,13 +22,13 @@ export class UpdateLicenseComponent { formPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async submit() { const fileEl = document.getElementById('file') as HTMLInputElement; const files = fileEl.files; if (files == null || files.length === 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('selectFile')); return; } @@ -50,7 +49,7 @@ export class UpdateLicenseComponent { }); await this.formPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('updatedLicense')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('updatedLicense')); this.onUpdated.emit(); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/user-billing.component.ts b/src/app/settings/user-billing.component.ts index f242df00..1fc5a4da 100644 --- a/src/app/settings/user-billing.component.ts +++ b/src/app/settings/user-billing.component.ts @@ -3,8 +3,6 @@ import { OnInit, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { BillingResponse } from 'jslib-common/models/response/billingResponse'; import { ApiService } from 'jslib-common/abstractions/api.service'; @@ -35,7 +33,7 @@ export class UserBillingComponent implements OnInit { verifyBankPromise: Promise; constructor(protected apiService: ApiService, protected i18nService: I18nService, - protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService, + protected platformUtilsService: PlatformUtilsService, private logService: LogService) { } async ngOnInit() { @@ -67,7 +65,7 @@ export class UserBillingComponent implements OnInit { request.amount2 = this.verifyAmount2; this.verifyBankPromise = this.apiService.postOrganizationVerifyBank(this.organizationId, request); await this.verifyBankPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('verifiedBankAccount')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('verifiedBankAccount')); this.load(); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/user-subscription.component.ts b/src/app/settings/user-subscription.component.ts index 5ed63db5..15e86c06 100644 --- a/src/app/settings/user-subscription.component.ts +++ b/src/app/settings/user-subscription.component.ts @@ -4,8 +4,6 @@ import { } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { SubscriptionResponse } from 'jslib-common/models/response/subscriptionResponse'; import { ApiService } from 'jslib-common/abstractions/api.service'; @@ -32,7 +30,7 @@ export class UserSubscriptionComponent implements OnInit { constructor(private tokenService: TokenService, private apiService: ApiService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, - private toasterService: ToasterService, private router: Router, private logService: LogService) { + private router: Router, private logService: LogService) { this.selfHosted = platformUtilsService.isSelfHost(); } @@ -77,7 +75,7 @@ export class UserSubscriptionComponent implements OnInit { try { this.reinstatePromise = this.apiService.postReinstatePremium(); await this.reinstatePromise; - this.toasterService.popAsync('success', null, this.i18nService.t('reinstated')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('reinstated')); this.load(); } catch (e) { this.logService.error(e); @@ -104,7 +102,7 @@ export class UserSubscriptionComponent implements OnInit { try { this.cancelPromise = this.apiService.postCancelPremium(); await this.cancelPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('canceledSubscription')); this.load(); } catch (e) { this.logService.error(e); diff --git a/src/app/settings/verify-email.component.ts b/src/app/settings/verify-email.component.ts index 76d1167d..f2b5e153 100644 --- a/src/app/settings/verify-email.component.ts +++ b/src/app/settings/verify-email.component.ts @@ -1,10 +1,9 @@ import { Component } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { ApiService } from 'jslib-common/abstractions/api.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; @Component({ selector: 'app-verify-email', @@ -14,7 +13,7 @@ export class VerifyEmailComponent { actionPromise: Promise; constructor(private apiService: ApiService, private i18nService: I18nService, - private toasterService: ToasterService, private logService: LogService) { } + private platformUtilsService: PlatformUtilsService, private logService: LogService) { } async send() { if (this.actionPromise != null) { @@ -23,7 +22,7 @@ export class VerifyEmailComponent { try { this.actionPromise = this.apiService.postAccountVerifyEmail(); await this.actionPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('checkInboxForVerification')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('checkInboxForVerification')); } catch (e) { this.logService.error(e); } diff --git a/src/app/tools/breach-report.component.ts b/src/app/tools/breach-report.component.ts index a7a0bee3..a4d75bc0 100644 --- a/src/app/tools/breach-report.component.ts +++ b/src/app/tools/breach-report.component.ts @@ -4,7 +4,7 @@ import { } from '@angular/core'; import { AuditService } from 'jslib-common/abstractions/audit.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { BreachAccountResponse } from 'jslib-common/models/response/breachAccountResponse'; @Component({ @@ -18,10 +18,10 @@ export class BreachReportComponent implements OnInit { breachedAccounts: BreachAccountResponse[] = []; formPromise: Promise; - constructor(private auditService: AuditService, private userService: UserService) { } + constructor(private auditService: AuditService, private stateService: StateService) { } async ngOnInit() { - this.username = await this.userService.getEmail(); + this.username = await this.stateService.getEmail(); } async submit() { diff --git a/src/app/tools/cipher-report.component.ts b/src/app/tools/cipher-report.component.ts index 5dd05283..1384123f 100644 --- a/src/app/tools/cipher-report.component.ts +++ b/src/app/tools/cipher-report.component.ts @@ -11,11 +11,11 @@ import { Organization } from 'jslib-common/models/domain/organization'; import { AddEditComponent as OrgAddEditComponent } from '../organizations/vault/add-edit.component'; import { AddEditComponent } from '../vault/add-edit.component'; -import { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType'; - import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; + +import { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -28,9 +28,9 @@ export class CipherReportComponent { ciphers: CipherView[] = []; organization: Organization; - constructor(private modalService: ModalService, protected userService: UserService, - protected messagingService: MessagingService, protected passwordRepromptService: PasswordRepromptService, - public requiresPaid: boolean) { } + constructor(private modalService: ModalService, protected messagingService: MessagingService, + public requiresPaid: boolean, private stateService: StateService, + protected passwordRepromptService: PasswordRepromptService) { } async load() { this.loading = true; @@ -80,7 +80,7 @@ export class CipherReportComponent { return false; } } else { - const accessPremium = await this.userService.canAccessPremium(); + const accessPremium = await this.stateService.getCanAccessPremium(); if (this.requiresPaid && !accessPremium) { this.messagingService.send('premiumRequired'); this.loading = false; diff --git a/src/app/tools/exposed-passwords-report.component.ts b/src/app/tools/exposed-passwords-report.component.ts index af5c8e3a..44c7bf0d 100644 --- a/src/app/tools/exposed-passwords-report.component.ts +++ b/src/app/tools/exposed-passwords-report.component.ts @@ -7,7 +7,7 @@ import { AuditService } from 'jslib-common/abstractions/audit.service'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -26,8 +26,8 @@ export class ExposedPasswordsReportComponent extends CipherReportComponent imple constructor(protected cipherService: CipherService, protected auditService: AuditService, modalService: ModalService, messagingService: MessagingService, - userService: UserService, passwordRepromptService: PasswordRepromptService) { - super(modalService, userService, messagingService, passwordRepromptService, true); + stateService: StateService, passwordRepromptService: PasswordRepromptService) { + super(modalService, messagingService, true, stateService, passwordRepromptService); } ngOnInit() { diff --git a/src/app/tools/import.component.ts b/src/app/tools/import.component.ts index 9126c368..5b194871 100644 --- a/src/app/tools/import.component.ts +++ b/src/app/tools/import.component.ts @@ -4,8 +4,6 @@ import { } from '@angular/core'; import { Router } from '@angular/router'; -import { ToasterService } from 'angular2-toaster'; - import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { ImportOption, ImportService } from 'jslib-common/abstractions/import.service'; import { LogService } from 'jslib-common/abstractions/log.service'; @@ -32,7 +30,7 @@ export class ImportComponent implements OnInit { protected organizationId: string = null; protected successNavigate: any[] = ['vault']; - constructor(protected i18nService: I18nService, protected toasterService: ToasterService, + constructor(protected i18nService: I18nService, protected importService: ImportService, protected router: Router, protected platformUtilsService: PlatformUtilsService, protected policyService: PolicyService, private logService: LogService) { } @@ -68,7 +66,7 @@ export class ImportComponent implements OnInit { const importer = this.importService.getImporter(this.format, this.organizationId); if (importer === null) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('selectFormat')); this.loading = false; return; @@ -77,7 +75,7 @@ export class ImportComponent implements OnInit { const fileEl = document.getElementById('file') as HTMLInputElement; const files = fileEl.files; if ((files == null || files.length === 0) && (this.fileContents == null || this.fileContents === '')) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('selectFile')); this.loading = false; return; @@ -96,7 +94,7 @@ export class ImportComponent implements OnInit { } if (fileContents == null || fileContents === '') { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('selectFile')); this.loading = false; return; @@ -110,7 +108,7 @@ export class ImportComponent implements OnInit { this.loading = false; return; } - this.toasterService.popAsync('success', null, this.i18nService.t('importSuccess')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('importSuccess')); this.router.navigate(this.successNavigate); } catch (e) { this.logService.error(e); diff --git a/src/app/tools/inactive-two-factor-report.component.ts b/src/app/tools/inactive-two-factor-report.component.ts index 3ec41367..d7e913a2 100644 --- a/src/app/tools/inactive-two-factor-report.component.ts +++ b/src/app/tools/inactive-two-factor-report.component.ts @@ -7,7 +7,7 @@ import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -28,9 +28,9 @@ export class InactiveTwoFactorReportComponent extends CipherReportComponent impl cipherDocs = new Map(); constructor(protected cipherService: CipherService, modalService: ModalService, - messagingService: MessagingService, userService: UserService, private logService: LogService, + messagingService: MessagingService, stateService: StateService, private logService: LogService, passwordRepromptService: PasswordRepromptService) { - super(modalService, userService, messagingService, passwordRepromptService, true); + super(modalService, messagingService, true, stateService, passwordRepromptService); } async ngOnInit() { diff --git a/src/app/tools/reused-passwords-report.component.ts b/src/app/tools/reused-passwords-report.component.ts index d699699f..fc19660d 100644 --- a/src/app/tools/reused-passwords-report.component.ts +++ b/src/app/tools/reused-passwords-report.component.ts @@ -6,7 +6,7 @@ import { import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -24,9 +24,9 @@ export class ReusedPasswordsReportComponent extends CipherReportComponent implem passwordUseMap: Map; constructor(protected cipherService: CipherService, modalService: ModalService, - messagingService: MessagingService, userService: UserService, + messagingService: MessagingService, stateService: StateService, passwordRepromptService: PasswordRepromptService) { - super(modalService, userService, messagingService, passwordRepromptService, true); + super(modalService, messagingService, true, stateService, passwordRepromptService); } async ngOnInit() { diff --git a/src/app/tools/tools.component.ts b/src/app/tools/tools.component.ts index f4b5edf0..f917169c 100644 --- a/src/app/tools/tools.component.ts +++ b/src/app/tools/tools.component.ts @@ -4,7 +4,7 @@ import { } from '@angular/core'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; @Component({ selector: 'app-tools', @@ -13,10 +13,10 @@ import { UserService } from 'jslib-common/abstractions/user.service'; export class ToolsComponent implements OnInit { canAccessPremium = false; - constructor(private userService: UserService, private messagingService: MessagingService) { } + constructor(private stateService: StateService, private messagingService: MessagingService) { } async ngOnInit() { - this.canAccessPremium = await this.userService.canAccessPremium(); + this.canAccessPremium = await this.stateService.getCanAccessPremium(); } premiumRequired() { diff --git a/src/app/tools/unsecured-websites-report.component.ts b/src/app/tools/unsecured-websites-report.component.ts index 8715cdc8..82991e10 100644 --- a/src/app/tools/unsecured-websites-report.component.ts +++ b/src/app/tools/unsecured-websites-report.component.ts @@ -6,7 +6,7 @@ import { import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -22,8 +22,9 @@ import { CipherReportComponent } from './cipher-report.component'; }) export class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit { constructor(protected cipherService: CipherService, modalService: ModalService, - messagingService: MessagingService, userService: UserService, passwordRepromptService: PasswordRepromptService) { - super(modalService, userService, messagingService, passwordRepromptService, true); + messagingService: MessagingService, stateService: StateService, + passwordRepromptService: PasswordRepromptService) { + super(modalService, messagingService, true, stateService, passwordRepromptService); } async ngOnInit() { diff --git a/src/app/tools/weak-passwords-report.component.ts b/src/app/tools/weak-passwords-report.component.ts index 39fed5fc..8ccde8ce 100644 --- a/src/app/tools/weak-passwords-report.component.ts +++ b/src/app/tools/weak-passwords-report.component.ts @@ -7,7 +7,7 @@ import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -28,9 +28,9 @@ export class WeakPasswordsReportComponent extends CipherReportComponent implemen private passwordStrengthCache = new Map(); constructor(protected cipherService: CipherService, protected passwordGenerationService: PasswordGenerationService, - modalService: ModalService, messagingService: MessagingService, userService: UserService, - passwordRepromptService: PasswordRepromptService) { - super(modalService, userService, messagingService, passwordRepromptService, true); + modalService: ModalService, messagingService: MessagingService, + stateService: StateService, passwordRepromptService: PasswordRepromptService) { + super(modalService, messagingService, true, stateService, passwordRepromptService); } async ngOnInit() { diff --git a/src/app/vault/add-edit.component.ts b/src/app/vault/add-edit.component.ts index 36e1aaa1..6d5d4542 100644 --- a/src/app/vault/add-edit.component.ts +++ b/src/app/vault/add-edit.component.ts @@ -11,13 +11,13 @@ import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { StateService } from 'jslib-common/abstractions/state.service'; import { TotpService } from 'jslib-common/abstractions/totp.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/add-edit.component'; import { LoginUriView } from 'jslib-common/models/view/loginUriView'; @@ -43,14 +43,12 @@ export class AddEditComponent extends BaseAddEditComponent { constructor(cipherService: CipherService, folderService: FolderService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, auditService: AuditService, stateService: StateService, - userService: UserService, collectionService: CollectionService, - protected totpService: TotpService, protected passwordGenerationService: PasswordGenerationService, - protected messagingService: MessagingService, eventService: EventService, - protected policyService: PolicyService, passwordRepromptService: PasswordRepromptService, - logService: LogService) { + collectionService: CollectionService, protected totpService: TotpService, + protected passwordGenerationService: PasswordGenerationService, protected messagingService: MessagingService, + eventService: EventService, protected policyService: PolicyService, organizationService: OrganizationService, logService: LogService, + passwordRepromptService: PasswordRepromptService) { super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService, - userService, collectionService, messagingService, eventService, policyService, passwordRepromptService, - logService); + collectionService, messagingService, eventService, policyService, logService, passwordRepromptService, organizationService); } async ngOnInit() { @@ -60,7 +58,7 @@ export class AddEditComponent extends BaseAddEditComponent { this.hasPasswordHistory = this.cipher.hasPasswordHistory; this.cleanUp(); - this.canAccessPremium = await this.userService.canAccessPremium(); + this.canAccessPremium = await this.stateService.getCanAccessPremium(); if (this.cipher.type === CipherType.Login && this.cipher.login.totp && (this.cipher.organizationUseTotp || this.canAccessPremium)) { await this.totpUpdateCode(); diff --git a/src/app/vault/attachments.component.ts b/src/app/vault/attachments.component.ts index 28da5ab6..0d8d5372 100644 --- a/src/app/vault/attachments.component.ts +++ b/src/app/vault/attachments.component.ts @@ -6,7 +6,7 @@ import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { AttachmentView } from 'jslib-common/models/view/attachmentView'; @@ -20,11 +20,10 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { viewOnly = false; constructor(cipherService: CipherService, i18nService: I18nService, - cryptoService: CryptoService, userService: UserService, - platformUtilsService: PlatformUtilsService, apiService: ApiService, - logService: LogService) { - super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window, - logService); + cryptoService: CryptoService, stateService: StateService, + platformUtilsService: PlatformUtilsService, apiService: ApiService, logService: LogService) { + super(cipherService, i18nService, cryptoService, platformUtilsService, apiService, window, logService, + stateService); } protected async reupload(attachment: AttachmentView) { diff --git a/src/app/vault/bulk-actions.component.ts b/src/app/vault/bulk-actions.component.ts index 8f65bd6d..45abaaee 100644 --- a/src/app/vault/bulk-actions.component.ts +++ b/src/app/vault/bulk-actions.component.ts @@ -4,10 +4,10 @@ import { ViewChild, ViewContainerRef, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType'; import { ModalService } from 'jslib-angular/services/modal.service'; @@ -34,7 +34,7 @@ export class BulkActionsComponent { @ViewChild('bulkMoveTemplate', { read: ViewContainerRef, static: true }) bulkMoveModalRef: ViewContainerRef; @ViewChild('bulkShareTemplate', { read: ViewContainerRef, static: true }) bulkShareModalRef: ViewContainerRef; - constructor(private toasterService: ToasterService, private i18nService: I18nService, + constructor(private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private modalService: ModalService, private passwordRepromptService: PasswordRepromptService) { } async bulkDelete() { @@ -44,7 +44,7 @@ export class BulkActionsComponent { const selectedIds = this.ciphersComponent.getSelectedIds(); if (selectedIds.length === 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('nothingSelected')); return; } @@ -67,7 +67,7 @@ export class BulkActionsComponent { const selectedIds = this.ciphersComponent.getSelectedIds(); if (selectedIds.length === 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('nothingSelected')); return; } @@ -88,7 +88,7 @@ export class BulkActionsComponent { const selectedCiphers = this.ciphersComponent.getSelected(); if (selectedCiphers.length === 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('nothingSelected')); return; } @@ -109,7 +109,7 @@ export class BulkActionsComponent { const selectedIds = this.ciphersComponent.getSelectedIds(); if (selectedIds.length === 0) { - this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), + this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('nothingSelected')); return; } diff --git a/src/app/vault/bulk-delete.component.ts b/src/app/vault/bulk-delete.component.ts index 403e3144..a5707ecb 100644 --- a/src/app/vault/bulk-delete.component.ts +++ b/src/app/vault/bulk-delete.component.ts @@ -4,11 +4,11 @@ import { Input, Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { Organization } from 'jslib-common/models/domain/organization'; import { CipherBulkDeleteRequest } from 'jslib-common/models/request/cipherBulkDeleteRequest'; @@ -25,7 +25,7 @@ export class BulkDeleteComponent { formPromise: Promise; - constructor(private cipherService: CipherService, private toasterService: ToasterService, + constructor(private cipherService: CipherService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private apiService: ApiService) { } async submit() { @@ -38,7 +38,7 @@ export class BulkDeleteComponent { await this.formPromise; this.onDeleted.emit(); - this.toasterService.popAsync('success', null, this.i18nService.t(this.permanent ? 'permanentlyDeletedItems' + this.platformUtilsService.showToast('success', null, this.i18nService.t(this.permanent ? 'permanentlyDeletedItems' : 'deletedItems')); } diff --git a/src/app/vault/bulk-move.component.ts b/src/app/vault/bulk-move.component.ts index bee6528e..243742ed 100644 --- a/src/app/vault/bulk-move.component.ts +++ b/src/app/vault/bulk-move.component.ts @@ -6,11 +6,10 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { FolderService } from 'jslib-common/abstractions/folder.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { FolderView } from 'jslib-common/models/view/folderView'; @@ -26,7 +25,7 @@ export class BulkMoveComponent implements OnInit { folders: FolderView[] = []; formPromise: Promise; - constructor(private cipherService: CipherService, private toasterService: ToasterService, + constructor(private cipherService: CipherService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private folderService: FolderService) { } async ngOnInit() { @@ -38,6 +37,6 @@ export class BulkMoveComponent implements OnInit { this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId); await this.formPromise; this.onMoved.emit(); - this.toasterService.popAsync('success', null, this.i18nService.t('movedItems')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('movedItems')); } } diff --git a/src/app/vault/bulk-restore.component.ts b/src/app/vault/bulk-restore.component.ts index e18fdb7e..8e6c6f3c 100644 --- a/src/app/vault/bulk-restore.component.ts +++ b/src/app/vault/bulk-restore.component.ts @@ -5,10 +5,9 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; @Component({ selector: 'app-vault-bulk-restore', @@ -20,13 +19,13 @@ export class BulkRestoreComponent { formPromise: Promise; - constructor(private cipherService: CipherService, private toasterService: ToasterService, + constructor(private cipherService: CipherService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService) { } async submit() { this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds); await this.formPromise; this.onRestored.emit(); - this.toasterService.popAsync('success', null, this.i18nService.t('restoredItems')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('restoredItems')); } } diff --git a/src/app/vault/bulk-share.component.ts b/src/app/vault/bulk-share.component.ts index 21b244bf..3a801ea0 100644 --- a/src/app/vault/bulk-share.component.ts +++ b/src/app/vault/bulk-share.component.ts @@ -6,13 +6,12 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; +import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { CipherView } from 'jslib-common/models/view/cipherView'; import { CollectionView } from 'jslib-common/models/view/collectionView'; @@ -36,16 +35,16 @@ export class BulkShareComponent implements OnInit { private writeableCollections: CollectionView[] = []; - constructor(private cipherService: CipherService, private toasterService: ToasterService, + constructor(private cipherService: CipherService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private collectionService: CollectionService, - private userService: UserService, private logService: LogService) { } + private organizationService: OrganizationService, private logService: LogService) { } async ngOnInit() { this.shareableCiphers = this.ciphers.filter(c => !c.hasOldAttachments && c.organizationId == null); this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length; const allCollections = await this.collectionService.getAllDecrypted(); this.writeableCollections = allCollections.filter(c => !c.readOnly); - this.organizations = await this.userService.getAllOrganizations(); + this.organizations = await this.organizationService.getAll(); if (this.organizationId == null && this.organizations.length > 0) { this.organizationId = this.organizations[0].id; } @@ -73,7 +72,7 @@ export class BulkShareComponent implements OnInit { await this.formPromise; this.onShared.emit(); const orgName = this.organizations.find(o => o.id === this.organizationId)?.name ?? this.i18nService.t('organization'); - this.toasterService.popAsync('success', null, this.i18nService.t('movedItemsToOrg', orgName)); + this.platformUtilsService.showToast('success', null, this.i18nService.t('movedItemsToOrg', orgName)); } catch (e) { this.logService.error(e); } diff --git a/src/app/vault/ciphers.component.ts b/src/app/vault/ciphers.component.ts index a5cf1eff..0d494a57 100644 --- a/src/app/vault/ciphers.component.ts +++ b/src/app/vault/ciphers.component.ts @@ -6,8 +6,6 @@ import { Output, } from '@angular/core'; -import { ToasterService } from 'angular2-toaster'; - import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { EventService } from 'jslib-common/abstractions/event.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; @@ -15,8 +13,8 @@ import { LogService } from 'jslib-common/abstractions/log.service'; import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { SearchService } from 'jslib-common/abstractions/search.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { TotpService } from 'jslib-common/abstractions/totp.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { CiphersComponent as BaseCiphersComponent } from 'jslib-angular/components/ciphers.component'; @@ -49,16 +47,16 @@ export class CiphersComponent extends BaseCiphersComponent implements OnDestroy private pagedCiphersCount = 0; private refreshing = false; - constructor(searchService: SearchService, protected toasterService: ToasterService, + constructor(searchService: SearchService, protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, protected cipherService: CipherService, protected eventService: EventService, - protected totpService: TotpService, protected userService: UserService, + protected totpService: TotpService, protected stateService: StateService, protected passwordRepromptService: PasswordRepromptService, private logService: LogService) { super(searchService); } async ngOnInit() { - this.userHasPremiumAccess = await this.userService.canAccessPremium(); + this.userHasPremiumAccess = await this.stateService.getCanAccessPremium(); } ngOnDestroy() { @@ -156,7 +154,7 @@ export class CiphersComponent extends BaseCiphersComponent implements OnDestroy try { this.actionPromise = this.deleteCipher(c.id, permanent); await this.actionPromise; - this.toasterService.popAsync('success', null, this.i18nService.t(permanent ? 'permanentlyDeletedItem' + this.platformUtilsService.showToast('success', null, this.i18nService.t(permanent ? 'permanentlyDeletedItem' : 'deletedItem')); this.refresh(); } catch (e) { @@ -180,7 +178,7 @@ export class CiphersComponent extends BaseCiphersComponent implements OnDestroy try { this.actionPromise = this.cipherService.restoreWithServer(c.id); await this.actionPromise; - this.toasterService.popAsync('success', null, this.i18nService.t('restoredItem')); + this.platformUtilsService.showToast('success', null, this.i18nService.t('restoredItem')); this.refresh(); } catch (e) { this.logService.error(e); @@ -204,7 +202,7 @@ export class CiphersComponent extends BaseCiphersComponent implements OnDestroy } this.platformUtilsService.copyToClipboard(value, { window: window }); - this.toasterService.popAsync('info', null, + this.platformUtilsService.showToast('info', null, this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey))); if (typeI18nKey === 'password' || typeI18nKey === 'verificationCodeTotp') { diff --git a/src/app/vault/groupings.component.ts b/src/app/vault/groupings.component.ts index b9bd8ee8..5c46a079 100644 --- a/src/app/vault/groupings.component.ts +++ b/src/app/vault/groupings.component.ts @@ -6,8 +6,7 @@ import { import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { FolderService } from 'jslib-common/abstractions/folder.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { GroupingsComponent as BaseGroupingsComponent } from 'jslib-angular/components/groupings.component'; @@ -22,8 +21,8 @@ export class GroupingsComponent extends BaseGroupingsComponent { searchPlaceholder: string = null; constructor(collectionService: CollectionService, folderService: FolderService, - storageService: StorageService, userService: UserService) { - super(collectionService, folderService, storageService, userService); + stateService: StateService) { + super(collectionService, folderService, stateService); } searchTextChanged() { diff --git a/src/app/vault/share.component.ts b/src/app/vault/share.component.ts index 63d0aa84..95aa7c22 100644 --- a/src/app/vault/share.component.ts +++ b/src/app/vault/share.component.ts @@ -6,8 +6,8 @@ import { import { CipherService } from 'jslib-common/abstractions/cipher.service'; import { CollectionService } from 'jslib-common/abstractions/collection.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; import { CollectionView } from 'jslib-common/models/view/collectionView'; @@ -20,10 +20,10 @@ import { LogService } from 'jslib-common/abstractions/log.service'; }) export class ShareComponent extends BaseShareComponent implements OnDestroy { constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService, - i18nService: I18nService, userService: UserService, - cipherService: CipherService, logService: LogService) { - super(collectionService, platformUtilsService, i18nService, userService, cipherService, - logService); + i18nService: I18nService, cipherService: CipherService, + organizationService: OrganizationService, logService: LogService) { + super(collectionService, platformUtilsService, i18nService, cipherService, + logService, organizationService); } ngOnDestroy() { diff --git a/src/app/vault/vault.component.ts b/src/app/vault/vault.component.ts index d91211eb..2b7b57b3 100644 --- a/src/app/vault/vault.component.ts +++ b/src/app/vault/vault.component.ts @@ -28,15 +28,17 @@ import { FolderAddEditComponent } from './folder-add-edit.component'; import { GroupingsComponent } from './groupings.component'; import { ShareComponent } from './share.component'; +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; +import { OrganizationService } from 'jslib-common/abstractions/organization.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { ProviderService } from 'jslib-common/abstractions/provider.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; import { SyncService } from 'jslib-common/abstractions/sync.service'; import { TokenService } from 'jslib-common/abstractions/token.service'; -import { UserService } from 'jslib-common/abstractions/user.service'; -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; import { ModalService } from 'jslib-angular/services/modal.service'; const BroadcasterSubscriptionId = 'VaultComponent'; @@ -74,9 +76,10 @@ export class VaultComponent implements OnInit, OnDestroy { private router: Router, private changeDetectorRef: ChangeDetectorRef, private i18nService: I18nService, private modalService: ModalService, private tokenService: TokenService, private cryptoService: CryptoService, - private messagingService: MessagingService, private userService: UserService, - private platformUtilsService: PlatformUtilsService, private broadcasterService: BroadcasterService, - private ngZone: NgZone) { } + private messagingService: MessagingService, private platformUtilsService: PlatformUtilsService, + private broadcasterService: BroadcasterService, private ngZone: NgZone, + private stateService: StateService, private organizationService: OrganizationService, + private providerService: ProviderService) { } async ngOnInit() { this.showVerifyEmail = !(await this.tokenService.getEmailVerified()); @@ -88,20 +91,20 @@ export class VaultComponent implements OnInit, OnDestroy { this.route.queryParams.pipe(first()).subscribe(async params => { await this.syncService.fullSync(false); - this.showUpdateKey = !(await this.cryptoService.hasEncKey()); - const canAccessPremium = await this.userService.canAccessPremium(); + const canAccessPremium = await this.stateService.getCanAccessPremium(); this.showPremiumCallout = !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost(); - this.showProviders = (await this.userService.getAllProviders()).length > 0; + this.showProviders = (await this.providerService.getAll()).length > 0; - const allOrgs = await this.userService.getAllOrganizations(); + const allOrgs = await this.organizationService.getAll(); this.showRedeemSponsorship = allOrgs.some(o => o.familySponsorshipAvailable) && !allOrgs.some(o => o.familySponsorshipFriendlyName != null); await Promise.all([ this.groupingsComponent.load(), this.organizationsComponent.load(), ]); + this.showUpdateKey = !(await this.cryptoService.hasEncKey()); if (params == null) { this.groupingsComponent.selectedAll = true; @@ -215,12 +218,12 @@ export class VaultComponent implements OnInit, OnDestroy { } async editCipherAttachments(cipher: CipherView) { - const canAccessPremium = await this.userService.canAccessPremium(); + const canAccessPremium = await this.stateService.getCanAccessPremium(); if (cipher.organizationId == null && !canAccessPremium) { this.messagingService.send('premiumRequired'); return; } else if (cipher.organizationId != null) { - const org = await this.userService.getOrganization(cipher.organizationId); + const org = await this.organizationService.get(cipher.organizationId); if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) { this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId }); return; diff --git a/src/connectors/sso.html b/src/connectors/sso.html index 2a8fe5be..300cd7fb 100644 --- a/src/connectors/sso.html +++ b/src/connectors/sso.html @@ -8,11 +8,11 @@ Bitwarden - - - - - + + + + + diff --git a/src/connectors/webauthn.ts b/src/connectors/webauthn.ts index 78372444..5aa04e78 100644 --- a/src/connectors/webauthn.ts +++ b/src/connectors/webauthn.ts @@ -83,7 +83,7 @@ function parseParametersV2() { btnText: string; btnReturnText: string; callbackUri?: string; - mobile?: boolean + mobile?: boolean; } = null; try { dataObj = JSON.parse(b64Decode(getQsParam('data'))); diff --git a/src/locales/af/messages.json b/src/locales/af/messages.json index cf0d3a78..eeabce06 100644 --- a/src/locales/af/messages.json +++ b/src/locales/af/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Is u seker u wil hierdie gebruiker verwyder?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Eksterne ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Stuur weer uitnodiging" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ is weer uitgenooi.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/az/messages.json b/src/locales/az/messages.json index 85e4559e..736876f3 100644 --- a/src/locales/az/messages.json +++ b/src/locales/az/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Bu istifadəçini çıxartmaq istədiyinizə əminsiniz?" }, + "removeUserConfirmationKeyConnector": { + "message": "Xəbərdarlıq! Bu istifadəçi, şifrələmələrini idarə etmək üçün Açar Bağlayıcı tələb edir. Bu istifadəçini təşkilatınızdan silsəniz, hesabı birdəfəlik sıradan çıxarılacaq. Bu əməliyyatın geri dönüşü yoxdur. Davam etmək istəyirsiniz?" + }, "externalId": { "message": "Xarici kimlik" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Dəvəti yenidən göndər" }, + "resendEmail": { + "message": "E-poçtu təkrar göndər" + }, "hasBeenReinvited": { "message": "$USER$ yenidən dəvət edildi.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Abunəliyiniz cəmi $COUNT$ istifadəçiyə icazə verir. Planınız, sponsorludur və xarici bir təşkilata ödənilir.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Abunəliyinizə edilən düzəlişlər, faktura cəminizdə nisbətli dəyişikliklərlə nəticələnəcək. Abunəlik yerlərinizi artırmadan $COUNT$ istifadəçidən çoxunu dəvət edə bilməzsiniz.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$, ilk dəfə Sso istifadə edərək giriş etdi", "placeholders": { "id": { "content": "$1", @@ -4396,22 +4411,22 @@ "message": "İstifadəçi məlumatı uc nöqtəsindən iddia edin" }, "additionalScopes": { - "message": "Additional/Custom Scopes (comma delimited)" + "message": "Əlavə/Özəl əhatə dairələri (vergüllə ayrıldı)" }, "additionalUserIdClaimTypes": { - "message": "Additional/Custom User ID Claim Types (comma delimited)" + "message": "Əlavə/Özəl istifadəçi kimliyi tələb növləri (vergüllə ayrıldı)" }, "additionalEmailClaimTypes": { - "message": "Additional/Custom Email Claim Types (comma delimited)" + "message": "Əlavə/Özəl e-poçt tələb növləri (vergüllə ayrıldı)" }, "additionalNameClaimTypes": { - "message": "Additional/Custom Name Claim Types (comma delimited)" + "message": "Əlavə/Özəl ad tələb növləri (vergüllə ayrıldı)" }, "acrValues": { - "message": "Requested Authentication Context Class Reference values (acr_values)" + "message": "Tələb edilən kimlik təsdiqləmə kontekst istinad dəyərləri (acr_values)" }, "expectedReturnAcrValue": { - "message": "Expected \"acr\" Claim Value In Response (acr validation)" + "message": "Cavab olaraq gözlənilən \"acr\" tələb dəyəri (acr təsdiqləməsi)" }, "spEntityId": { "message": "SP Varlıq Kimliyi" @@ -4473,26 +4488,143 @@ "ssoSettingsSaved": { "message": "Tək daxil olma konfiqurasiyası saxlanıldı." }, + "sponsoredFamilies": { + "message": "Ödənişsiz Bitwarden Ailələri" + }, + "sponsoredFamiliesEligible": { + "message": "Siz və ailəniz Ödənişsiz Bitwarden Ailələri üçün uyğunsunuz. İşdə olmadığınız vaxtlarda belə verilənlərinizi güvənli saxlamaq üçün özəl e-poçtunuzu istifadə edin." + }, + "sponsoredFamiliesEligibleCard": { + "message": "İşdə olmadığınız vaxtlarda belə verilənlərinizi güvənli saxlamaq üçün Ailələr üçün nəzərdə tutulan Ödənişsiz Bitwarden planını bu gün istifadə edin." + }, + "sponsoredFamiliesInclude": { + "message": "Ailələr üçün Bitwarden planı bunları ehtiva edir" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "6 istifadəçiyə qədər Premium müraciət" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Ailə sirləri üçün paylaşılan kolleksiyalar" + }, + "badToken": { + "message": "Bağlantı artıq etibarlı deyil. Zəhmət olmasa sponsorun təklifi yenidən göndərməsini təmin edin." + }, + "reclaimedFreePlan": { + "message": "Geri alınmış ödənişsiz plan" + }, + "redeem": { + "message": "İstifadə et" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Sponsor olmasını istədiyiniz təşkilatı seçin" + }, + "familiesSponsoringOrgSelect": { + "message": "Hansı Ödənişsiz Ailələr təklifindən faydalanmaq istəyirsiniz?" + }, + "sponsoredFamiliesEmail": { + "message": "\"Bitwarden Ailələri\"ni istifadə etmək üçün özəl e-poçtunuzu daxil edin" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Bu təşkilatı tərk etsəniz və ya bu təşkilatdan çıxarılsanız, Ailələr planınızın istifadə müddəti faktura dövrünün sonunda başa çatacaq." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Mövcud bir təşkilat üçün bir təklifi qəbul edin və ya yeni bir Ailələr təşkilatını yaradın." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Sizə ödənişsiz bir Bitwarden Ailələr Planı Təşkilatı təklif edildi. Davam etmək üçün, təklifi alan hesaba giriş etməlisiniz." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Təklif qəbul edilə bilmir. Zəhmət olmasa müəssisə hesabınızdan təklif e-poçtunu təkrar göndərib yenidən sınayın." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Təklif qəbul edilə bilmir. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "\"Ödənişsiz Bitwarden Ailələri\"ni qəbul et" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Ödənişsiz Bitwarden Ailələri təklifi uğurla istifadə edildi" + }, + "redeemed": { + "message": "İstifadə edildi" + }, + "redeemedAccount": { + "message": "İstifadə edilən hesab" + }, + "revokeAccount": { + "message": "$NAME$ hesabını ləğv et", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Sponsorluq e-poçtunu $NAME$ sponsorluğuna təkrar göndər", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Ödənişsiz Ailələr Planı" + }, + "redeemNow": { + "message": "İndi istifadə et" + }, + "recipient": { + "message": "Alıcı" + }, + "removeSponsorship": { + "message": "Sponsorluğu sil" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { - "message": "Unable to reach the Key Connector, try again later." + "message": "Açar Bağlayıcı əlçatmazdır, daha sonra yenidən sınayın." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "Açar Bağlayıcı URL-si" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "E-poçtunuza bir təsdiqləmə kodu göndərin" }, "sendCode": { - "message": "Send Code" + "message": "Kod göndər" }, "codeSent": { - "message": "Code Sent" + "message": "Kod göndərildi" }, "verificationCode": { "message": "Təsdiqləmə kodu" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Davam etmək üçün kimliyinizi təsdiqləyin." }, "verificationCodeRequired": { "message": "Təsdiq kodu lazımdır." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Açar Bağlayıcıya daşındı" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Uğurlu! Açar Bağlayıcı əlçatandır." + }, + "keyConnectorTestFail": { + "message": "Açar Bağlayıcıya müraciət edilə bilmir. URL-ni yoxlayın." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/be/messages.json b/src/locales/be/messages.json index 66db3195..18e853c9 100644 --- a/src/locales/be/messages.json +++ b/src/locales/be/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/bg/messages.json b/src/locales/bg/messages.json index c6862aca..f4b044e4 100644 --- a/src/locales/bg/messages.json +++ b/src/locales/bg/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Сигурни ли сте, че искате да изтриете този потребител?" }, + "removeUserConfirmationKeyConnector": { + "message": "Внимание! Този потребител има нужда от конектор за ключове, за да управлява шифроването си. Ако премахнете потребителя от организацията, ще заключите завинаги достъпа му до неговата регистрация. Това действие е необратимо. Наистина ли искате да продължите?" + }, "externalId": { "message": "Външен идентификатор" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Изпращане на поканата наново" }, + "resendEmail": { + "message": "Повторно изпращане на писмото" + }, "hasBeenReinvited": { "message": "$USER$ потребители са поканени.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Абонаментът Ви позволява не повече от $COUNT$ потребители. Планът Ви е спонсориран и се плаща от външна организация.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Промените в абонамента Ви ще предизвикат пропорционални промени в сумата, която плащате. Не можете да поканите повече от $COUNT$ потребители, без да увеличите ограничението в абонамента си.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ се вписа за първи път с еднократно удостоверяване", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Настройката на еднократната идентификация е запазена." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "Семейният план на Битуорден включва" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Споделени колекции за семейни тайни" + }, + "badToken": { + "message": "Връзката е с изтекла давност. Помолете спонсора да изпрати отново предложението." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "От кое предложение за безплатен семеен план искате да се възползвате?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Безплатен семеен план" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Получател" + }, + "removeSponsorship": { + "message": "Премахване на спонсорирането" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Писмото е изпратено" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Конекторът за ключове е недостъпен. Опитайте отново по-късно." }, @@ -4480,19 +4612,19 @@ "message": "Адрес на конектора за ключове" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Изпращане на код за потвърждаване до Вашата ел. поща" }, "sendCode": { - "message": "Send Code" + "message": "Изпращане на кода" }, "codeSent": { - "message": "Code Sent" + "message": "Кодът е изпратен" }, "verificationCode": { "message": "Код за потвърждаване" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Потвърдете самоличността си, за да продължите." }, "verificationCodeRequired": { "message": "Кодът за потвърждение е задължителен." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Приемане на предложението" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Тест" + }, + "keyConnectorTestSuccess": { + "message": "Успешно свързване! Конекторът за ключове е достъпен." + }, + "keyConnectorTestFail": { + "message": "Конекторът за ключове е недостъпен. Проверете адреса." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "БЕЗПЛАТНО чрез спонсориране" } } diff --git a/src/locales/bn/messages.json b/src/locales/bn/messages.json index ed1ac870..d98bebe5 100644 --- a/src/locales/bn/messages.json +++ b/src/locales/bn/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/ca/messages.json b/src/locales/ca/messages.json index d33a2bd2..627c06e9 100644 --- a/src/locales/ca/messages.json +++ b/src/locales/ca/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Esteu segur que voleu suprimir aquest usuari?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Id extern" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Tornar a enviar invitació" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "S'ha reconvidat a $USER$.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Els ajustos a la vostra subscripció donaran lloc a canvis prorratejats als vostres totals de facturació. No podeu convidar més de $COUNT$ usuaris sense augmentar les vostres places de subscripció.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "S'ha guardat la configuració de l'inici de sessió únic." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/cs/messages.json b/src/locales/cs/messages.json index e81d52f7..c4496c9c 100644 --- a/src/locales/cs/messages.json +++ b/src/locales/cs/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Opravdu chcete tohoto uživatele smazat?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Externí ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Znovu poslat pozvánku" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "Uživatel $USER$ byl znovu pozván.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/da/messages.json b/src/locales/da/messages.json index 6e5fca06..a93c14f5 100644 --- a/src/locales/da/messages.json +++ b/src/locales/da/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Er du sikker på, at du vil fjerne denne bruger?" }, + "removeUserConfirmationKeyConnector": { + "message": "Advarsel! Denne bruger behøver Key Connector til krypteringshåndtering. Fjernes brugeren fra din organisation, deaktiveres vedkommendes konto permanent. Denne handling kan ikke fortrydes. Vil du fortsætte?" + }, "externalId": { "message": "Eksternt id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Send invitation igen" }, + "resendEmail": { + "message": "Send e-mail igen" + }, "hasBeenReinvited": { "message": "$USER$ er blevet inviteret igen.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Dit abonnement giver mulighed for i alt $COUNT$ brugere. Dit abonnement er sponsoreret og faktureret til en ekstern organisation.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Justeringer af dit abonnement vil resultere i forholdsmæssige ændringer af dine faktureringstotaler. Du kan ikke invitere flere end $COUNT$ brugere uden at øge dine abonnementspladser.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logget ind vha. SSO for første gang", + "message": "$ID$ loggede ind med SSO for første gang", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On opsætning blev gemt." }, + "sponsoredFamilies": { + "message": "Gratis Bitwarden Familier" + }, + "sponsoredFamiliesEligible": { + "message": "Du og din familie er berettiget til gratis Bitwarden Familier. Indløs med din personlige e-mail for at holde dine data sikre, selv når du ikke er på arbejde." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Indløs dit gratis Bitwarden til Familier-abonnement i dag for at sikre dine data, selv når du ikke er på arbejde." + }, + "sponsoredFamiliesInclude": { + "message": "Bitwarden til Familier-abonnementet omfatter" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium-adgang for op til 6 brugere" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Delte samlinger til Familiehemmeligheder" + }, + "badToken": { + "message": "Linket er ikke længere gyldigt. Bed sponsoren sende et nyt tilbud." + }, + "reclaimedFreePlan": { + "message": "Konvertér til gratis abonnement" + }, + "redeem": { + "message": "Indløs" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Vælg den organisation, du gerne vil have sponsoreret" + }, + "familiesSponsoringOrgSelect": { + "message": "Hvilket gratis Familier-tilbud vil du gerne indløse?" + }, + "sponsoredFamiliesEmail": { + "message": "Angiv din personlige e-mail for at indløse Bitwarden Familier" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Forlader eller fjernes du fra sponsororganisationen, udløber dit Familier-abonnement ved faktureringsperiodens udløb." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Acceptér tilbud for en eksisterende organisation, eller opret en ny Familier-organisation." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Du er blevet tilbudt en gratis Bitwarden Familier-abonnement organisation. For at fortsætte skal du logge ind på den konto, der modtog tilbuddet." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Tilbuddet kan ikke accepteres. Gensend venligst tilbudsmailen fra din virksomhedskonto, og forsøg igen." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Kan ikke acceptere tilbud. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Acceptér gratis Bitwarden Familier" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Gratis Bitwarden Familier-tilbud er blevet indløst" + }, + "redeemed": { + "message": "Indløst" + }, + "redeemedAccount": { + "message": "Indløst konto" + }, + "revokeAccount": { + "message": "Ophæv kontoen $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Gensend sponsorat-e-mail til $NAME$ sponsorat", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Gratis Familier-abonnement" + }, + "redeemNow": { + "message": "Indløs nu" + }, + "recipient": { + "message": "Modtager" + }, + "removeSponsorship": { + "message": "Fjern sponsorat" + }, + "removeSponsorshipConfirmation": { + "message": "Efter at have fjernet et sponsorat, vil du være ansvarlig for dette abonnement og relaterede fakturaer. Er du sikker på, at du vil fortsætte?" + }, + "sponsorshipCreated": { + "message": "Sponsorat oprettet" + }, + "revoke": { + "message": "Tilbagekald" + }, + "emailSent": { + "message": "E-mail sendt" + }, + "revokeSponsorshipConfirmation": { + "message": "Efter at have fjernet denne konto, vil Familier-organisationens ejer være ansvarlig for dette abonnement og relaterede fakturaer. Er du sikker på, at du vil fortsætte?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsoratet fjernet" + }, "ssoKeyConnectorUnavailable": { "message": "Kan ikke kontakte Key Connector, forsøg igen senere." }, @@ -4529,7 +4661,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpLink": { - "message": "SSO-politikken", + "message": "SSO-godkendelsespolitik", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { @@ -4537,7 +4669,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { - "message": "Opsætning af Key Connector-dekryptering kræver SSO Authentication og Single Organization-politikker." + "message": "SSO-godkendelse og Enkel organisation-politikker er påkrævet for at konfigurere Key Connector-dekryptering." }, "memberDecryptionOption": { "message": "Medlemsdekrypteringsindstillinger" @@ -4549,7 +4681,7 @@ "message": "Key Connector" }, "memberDecryptionKeyConnectorDesc": { - "message": "Forbind Login med SSO til din selv-hostede dekrypteringsnøgleserver. Ved at bruge denne mulighed behøver medlemmer ikke at bruge deres hovedadgangskode til at dekryptere boksdata." + "message": "Forbind Login med SSO til din selv-hostede dekrypteringsnøgleserver. Ved at bruge denne mulighed behøver medlemmer ikke at bruge deres hovedadgangskoder til at dekryptere boksdata. Kontakt Bitwarden support for at få hjælp til opsætning." }, "keyConnectorPolicyRestriction": { "message": "\"Login med SSO og Key Connector-dekryptering\" er aktiveret. Denne politik omfatter kun ejere og Admins." @@ -4567,9 +4699,39 @@ "message": "Key Connector deaktiveret" }, "keyConnectorWarning": { - "message": "Når først Key Connector er opsat, kan medlemsdekrypteringsindstillingerne ikke ændres." + "message": "Når medlemmer begynder at bruge Key Connector, kan din organisation ikke vende tilbage til hovedadgangskode-dekryptering. Fortsæt kun, hvis du er fortrolig med at implementere og administrere en nøgleserver." }, "migratedKeyConnector": { "message": "Migreret til Key Connector" + }, + "paymentSponsored": { + "message": "Angiv en betalingsmetode der skal tilknyttes organisationen. Bare rolig, vi vil ikke opkræve dig noget, medmindre du vælger yderligere funktioner, eller dit sponsorat udløber." + }, + "orgCreatedSponsorshipInvalid": { + "message": "Sponsortilbuddet er udløbet. Du kan slette den organisation, du har oprettet, for at undgå en opkrævning ved udløbet af din 7-dages prøveperiode. Ellers kan du lukke denne prompt for at beholde organisationen og påtage dig faktureringsansvaret." + }, + "newFamiliesOrganization": { + "message": "Ny Familier-organisation" + }, + "acceptOffer": { + "message": "Acceptér tilbud" + }, + "sponsoringOrg": { + "message": "Sponsorerende organisation" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Succes! Key Connector nået." + }, + "keyConnectorTestFail": { + "message": "Key Connector kan ikke nås. Tjek URL'en." + }, + "sponsorshipTokenHasExpired": { + "message": "Sponsortilbuddet er udløbet." + }, + "freeWithSponsorship": { + "message": "GRATIS med sponsorat" } } diff --git a/src/locales/de/messages.json b/src/locales/de/messages.json index 7d664738..0d1eaf37 100644 --- a/src/locales/de/messages.json +++ b/src/locales/de/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Sind Sie sich sicher, dass Sie diesen Benutzer löschen wollen?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warnung! Dieser Benutzer benötigt Key Connector, um seine Verschlüsselung zu verwalten. Das Entfernen dieses Benutzers aus deiner Organisation wird sein Konto dauerhaft deaktivieren. Diese Aktion kann nicht rückgängig gemacht werden. Möchtest du fortfahren?" + }, "externalId": { "message": "Externe ID" }, @@ -2213,7 +2216,7 @@ "message": "Benutzer einladen" }, "inviteUserDesc": { - "message": "Laden Sie einen neuen Benutzer zu Ihrer Organisation ein, indem Sie deren Bitwarden-Konto-Email eintragen. Falls dieser noch kein Bitwarden-Konto besitzt, wird er/sie zur Erstellung eines neuen Kontos aufgefordert." + "message": "Lade einen neuen Benutzer zu deinem Anbieter ein, indem du die E-Mail-Adresse seines Bitwarden-Kontos unten einträgst. Falls dieser noch kein Bitwarden-Konto besitzt, wird er/sie zur Erstellung eines neuen Kontos aufgefordert." }, "inviteMultipleEmailDesc": { "message": "Sie können bis zu $COUNT$ Benutzer auf einmal einladen, indem Sie eine Liste von E-Mail-Adressen mit je einem Komma trennen.", @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Einladung erneut versenden" }, + "resendEmail": { + "message": "E-Mail erneut senden" + }, "hasBeenReinvited": { "message": "$USER$ wurde erneut eingeladen.", "placeholders": { @@ -2726,7 +2732,7 @@ "message": "Organisation beitreten" }, "joinOrganizationDesc": { - "message": "Sie wurden eingeladen, der oben genannten Organisation beizutreten. Um die Einladung anzunehmen, müssen Sie ein Bitwarden-Konto erstellen oder sich mit Ihrem bestehenden Konto anmelden." + "message": "Du wurdest eingeladen, dem oben genannten Anbieter beizutreten. Um die Einladung anzunehmen, musst du ein Bitwarden-Konto erstellen, oder dich mit deinem bestehenden Bitwarden-Konto anmelden." }, "inviteAccepted": { "message": "Einladung angenommen" @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Dein Abo erlaubt insgesamt $COUNT$ Benutzer. Dein Abo wird gefördert und von einer externen Organisation bezahlt.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Anpassungen an deinem Abo führen zu anteiligen Änderungen an deiner Rechnungssumme. Du kannst nicht mehr als $COUNT$ Benutzer einladen ohne deine Abo-Benutzerplätze zu erhöhen.", "placeholders": { @@ -3160,7 +3175,7 @@ "message": "API-Schlüssel" }, "apiKeyDesc": { - "message": "Ihr API-Schlüssel kann zur Authentifizierung für die öffentlichen Bitwarden-API benutzt werden." + "message": "Dein API-Schlüssel kann zur Authentifizierung für die öffentlichen Bitwarden-API benutzt werden." }, "apiKeyRotateDesc": { "message": "Mit der Erneuerung des API-Schlüssels wird der bisherige Schlüssel ungültig. Sie können Ihren API-Schlüssel erneuern, wenn die sichere Verwendung Ihres aktuellen Schlüssel nicht mehr gewährleistet ist." @@ -3493,7 +3508,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendConfirmation": { - "message": "Sind Sie sicher, dass Sie dieses Send löschen möchten?", + "message": "Bist du sicher, dass du dieses Send löschen möchtest?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "whatTypeOfSend": { @@ -3599,7 +3614,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "noSendsInList": { - "message": "Es gibt keine Sends aufzulisten.", + "message": "Keine Sends zu finden.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "emergencyAccess": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On Konfiguration wurde gespeichert." }, + "sponsoredFamilies": { + "message": "Kostenloses Bitwarden Familienabo" + }, + "sponsoredFamiliesEligible": { + "message": "Du und deine Familie haben Anspruch auf ein kostenloses Bitwarden Familienabo. Mit deiner persönlichen E-Mail einlösen, um deine Daten zu schützen, auch wenn du nicht am Arbeitsplatz bist." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Löse dein kostenloses Bitwarden für Familien Abo heute ein, um deine Daten zu schützen, auch wenn du nicht am Arbeitsplatz bist." + }, + "sponsoredFamiliesInclude": { + "message": "Das Bitwarden für Familien Abo beinhaltet" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium-Zugang für bis zu 6 Benutzer" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Gemeinsame Sammlungen für Familiengeheimnisse" + }, + "badToken": { + "message": "Der Link ist nicht mehr gültig. Bitte lasse dir vom Förderer das Angebot erneut senden." + }, + "reclaimedFreePlan": { + "message": "Kostenloses Abo zurückgefordert" + }, + "redeem": { + "message": "Einlösen" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Wähle die Organisation aus, die du gerne fördern möchtest" + }, + "familiesSponsoringOrgSelect": { + "message": "Welches kostenlose Familienangebot möchtest du einlösen?" + }, + "sponsoredFamiliesEmail": { + "message": "Gebe deine persönliche E-Mail ein, um Bitwarden Familien einlösen zu können" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Wenn du diese Organisation verlässt oder aus ihr entfernt wirst, läuft dein Familien-Abo am Ende des Abrechnungszeitraums ab." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Angebot für eine bestehende Organisation akzeptieren oder eine neue Familien-Organisation erstellen." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Dir wurde ein kostenloses Bitwarden Familien-Organisationsabo angeboten. Um fortzufahren, musst du dich in das Konto einloggen, das das Angebot erhalten hat." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Angebot kann nicht angenommen werden. Bitte sende die Angebotsmail von deinem Unternehmenskonto erneut und versuche es noch einmal." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Angebot kann nicht angenommen werden. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Kostenloses Bitwarden Familien-Organisationsangebot einlösen" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Kostenloses Bitwarden Familien-Angebot erfolgreich eingelöst" + }, + "redeemed": { + "message": "Eingelöst" + }, + "redeemedAccount": { + "message": "Eingelöstes Konto" + }, + "revokeAccount": { + "message": "Konto $NAME$ zurückziehen", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Sponsoring-E-Mail erneut an $NAME$ Sponsoring senden", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Kostenloses Familien Abo" + }, + "redeemNow": { + "message": "Jetzt einlösen" + }, + "recipient": { + "message": "Empfänger" + }, + "removeSponsorship": { + "message": "Sponsoring entfernen" + }, + "removeSponsorshipConfirmation": { + "message": "Nachdem du eine Förderung entfernt hast, bist du für dieses Abo und die damit verbundenen Rechnungen verantwortlich. Bist du sicher, dass du fortfahren möchtest?" + }, + "sponsorshipCreated": { + "message": "Förderung erstellt" + }, + "revoke": { + "message": "Zurückziehen" + }, + "emailSent": { + "message": "E-Mail gesendet" + }, + "revokeSponsorshipConfirmation": { + "message": "Nach dem Entfernen dieses Kontos ist der Besitzer der Familienorganisation für dieses Abo und die damit verbundenen Rechnungen verantwortlich. Bist du sicher, dass du fortfahren möchtest?" + }, + "removeSponsorshipSuccess": { + "message": "Förderung entfernt" + }, "ssoKeyConnectorUnavailable": { "message": "Der Key Connector konnte nicht erreicht werden. Versuche es später erneut." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Zum Key Connector migriert" + }, + "paymentSponsored": { + "message": "Bitte gib eine Zahlungsmethode an, die mit der Organisation verbunden wird. Keine Sorge, wir werden dir nichts berechnen, es sei denn, du wählst zusätzliche Funktionen aus oder deine Förderung läuft ab. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "Das Förderangebot ist abgelaufen. Du kannst die Organisation, die du erstellt hast, löschen, um eine Gebühr am Ende deiner 7-Tage-Testversion zu vermeiden. Andernfalls kannst du diese Meldung schließen, um die Organisation zu behalten und die Rechnungsverantwortung zu übernehmen." + }, + "newFamiliesOrganization": { + "message": "Neue Familien-Organisation" + }, + "acceptOffer": { + "message": "Angebot annehmen" + }, + "sponsoringOrg": { + "message": "Förderorganisation" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Erfolg! Key Connector erreicht." + }, + "keyConnectorTestFail": { + "message": "Key Connector nicht erreichbar. URL überprüfen." + }, + "sponsorshipTokenHasExpired": { + "message": "Das Förderangebot ist abgelaufen." + }, + "freeWithSponsorship": { + "message": "KOSTENLOS mit Förderung" } } diff --git a/src/locales/el/messages.json b/src/locales/el/messages.json index d3612671..8d8dc621 100644 --- a/src/locales/el/messages.json +++ b/src/locales/el/messages.json @@ -167,7 +167,7 @@ "message": "Δυαδικό" }, "cfTypeLinked": { - "message": "Linked", + "message": "Συνδεδεμένο", "description": "This describes a field that is 'linked' (related) to another field." }, "remove": { @@ -316,7 +316,7 @@ "message": "Επώνυμο" }, "fullName": { - "message": "Full Name" + "message": "Ονοματεπώνυμο" }, "address1": { "message": "Διεύθυνση 1" @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτό τον χρήστη;" }, + "removeUserConfirmationKeyConnector": { + "message": "Προσοχή! Αυτός ο χρήστης απαιτεί σύνδεση κλειδιού για τη διαχείριση της κρυπτογράφησης του. Η αφαίρεση αυτού του χρήστη από τον οργανισμό σας θα απενεργοποιήσει οριστικά τον λογαριασμό του. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Θέλετε να συνεχίσετε;" + }, "externalId": { "message": "Εξωτερικό ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Αποστολή Πρόσκλησης Ξανά" }, + "resendEmail": { + "message": "Επαναποστολή e-mail" + }, "hasBeenReinvited": { "message": "$USER$ έχει ξανα-προσκληθεί.", "placeholders": { @@ -2933,7 +2939,7 @@ } }, "subscriptionFreePlan": { - "message": "You cannot invite more than $COUNT$ users without upgrading your plan.", + "message": "Δεν μπορείτε να προσκαλέσετε περισσότερους από $COUNT$ χρήστες χωρίς αναβάθμιση του σχεδίου σας.", "placeholders": { "count": { "content": "$1", @@ -2942,7 +2948,16 @@ } }, "subscriptionFamiliesPlan": { - "message": "You cannot invite more than $COUNT$ users without upgrading your plan. Please contact Customer Support to upgrade.", + "message": "Δεν μπορείτε να προσκαλέσετε περισσότερους από $COUNT$ χρήστες χωρίς αναβάθμιση του προγράμματός σας. Επικοινωνήστε με την Υποστήριξη πελατών για αναβάθμιση.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Η συνδρομή σας επιτρέπει συνολικά $COUNT$ χρήστες. Το πρόγραμμα σας χορηγείται και χρεώνεται σε εξωτερικό οργανισμό.", "placeholders": { "count": { "content": "$1", @@ -3830,7 +3845,7 @@ "message": "Αναφορές Πρόσβασης" }, "missingPermissions": { - "message": "You lack the necessary permissions to perform this action." + "message": "Δεν έχετε τα απαραίτητα δικαιώματα για να εκτελέσετε αυτήν την ενέργεια." }, "manageAllCollections": { "message": "Διαχείριση Όλων Των Συλλογών" @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ συνδέθηκε χρησιμοποιώντας το Sso για πρώτη φορά", "placeholders": { "id": { "content": "$1", @@ -4473,35 +4488,152 @@ "ssoSettingsSaved": { "message": "Οι ρυθμίσεις για απλή σύνδεση αποθηκεύτηκαν." }, + "sponsoredFamilies": { + "message": "Δωρεάν Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "Εσείς και η οικογένεια σας έχετε δικαίωμα για Δωρεάν Bitwarden Families. Εξαργυρώστε με το προσωπικό σας email για να διατηρείτε τα δεδομένα σας ασφαλή ακόμα και όταν δεν εργάζεστε." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Εξαργυρώστε το Δωρεάν Bitwarden Families σήμερα για να διατηρήσουν τα δεδομένα σας ασφαλή ακόμα και όταν δεν είστε στη δουλειά." + }, + "sponsoredFamiliesInclude": { + "message": "Το πλάνο Bitwarden Families περιλαμβάνει" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium πρόσβαση για έως 6 χρήστες" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Κοινές συλλογές για οικογενειακά μυστικά" + }, + "badToken": { + "message": "Ο σύνδεσμος δεν είναι πλέον έγκυρος. Παρακαλώ στείλτε ξανά την προσφορά." + }, + "reclaimedFreePlan": { + "message": "Επαναλαμβανόμενο ελεύθερο πλάνο" + }, + "redeem": { + "message": "Εξαργύρωση" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Επιλέξτε τον οργανισμό που θα θέλατε" + }, + "familiesSponsoringOrgSelect": { + "message": "Ποια Free Families προσφορά θα θέλατε να εξαργυρώσετε;" + }, + "sponsoredFamiliesEmail": { + "message": "Εισάγετε το προσωπικό σας email για να εξαργυρώσετε το Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Αν φύγετε ή απομακρυνθείτε από αυτόν τον οργανισμό, το πλάνο Families θα λήξει στο τέλος της περιόδου τιμολόγησης." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Αποδοχή προσφοράς για έναν υπάρχοντα οργανισμό ή δημιουργία ενός νέου οργανισμού οικογενειών." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Έχετε προσφερθεί έναn δωρεάν οργανισμό πλάνου Bitwarden Families. Για να συνεχίσετε, πρέπει να συνδεθείτε στο λογαριασμό που έλαβε την προσφορά." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Δεν είναι δυνατή η αποδοχή προσφοράς. Παρακαλώ στείλτε ξανά το email προσφοράς από τον λογαριασμό επιχείρησής σας και προσπαθήστε ξανά." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Αδυναμία αποδοχής προσφοράς. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Αποδοχή Δωρεάν Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "H Δωρεάν προσφορά Bitwarden Families, εξαργυρώθηκε με επιτυχία" + }, + "redeemed": { + "message": "Εξαργυρώθηκε" + }, + "redeemedAccount": { + "message": "Εξαργυρωμένος Λογαριασμός" + }, + "revokeAccount": { + "message": "Ανάκληση λογαριασμού $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Επαναποστολή email χορηγίας σε $NAME$ χορηγία", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Δωρεάν Πλάνο Families" + }, + "redeemNow": { + "message": "Εξαργυρώστε Τώρα" + }, + "recipient": { + "message": "Παραλήπτης" + }, + "removeSponsorship": { + "message": "Αφαίρεση Χορηγίας" + }, + "removeSponsorshipConfirmation": { + "message": "Μετά την αφαίρεση μιας χορηγίας, θα είστε υπεύθυνοι για αυτή τη συνδρομή και τα σχετικά τιμολόγια. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;" + }, + "sponsorshipCreated": { + "message": "Χορηγία Δημιουργήθηκε" + }, + "revoke": { + "message": "Ανάκληση" + }, + "emailSent": { + "message": "Το Email Εστάλη" + }, + "revokeSponsorshipConfirmation": { + "message": "Μετά την αφαίρεση αυτού του λογαριασμού, ο ιδιοκτήτης του οργανισμού families θα είναι υπεύθυνος για αυτή τη συνδρομή και τα σχετικά τιμολόγια. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;" + }, + "removeSponsorshipSuccess": { + "message": "Χορηγία Αφαιρέθηκε" + }, "ssoKeyConnectorUnavailable": { - "message": "Unable to reach the Key Connector, try again later." + "message": "Δεν είναι δυνατή η πρόσβαση στον σύνδεσμο κλειδιού, προσπαθήστε ξανά αργότερα." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "URL Σύνδεσης Κλειδιού" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Στείλτε έναν κωδικό επαλήθευσης στο email σας" }, "sendCode": { - "message": "Send Code" + "message": "Αποστολή Κωδικού" }, "codeSent": { - "message": "Code Sent" + "message": "Ο Κωδικός Στάλθηκε" }, "verificationCode": { - "message": "Verification Code" + "message": "Κωδικός Επαλήθευσης" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Επιβεβαιώστε την ταυτότητα σας για να συνεχίσετε." }, "verificationCodeRequired": { - "message": "Verification code is required." + "message": "Απαιτείται ο κωδικός επαλήθευσης." }, "invalidVerificationCode": { - "message": "Invalid verification code" + "message": "Μη έγκυρος κωδικός επαλήθευσης" }, "convertOrganizationEncryptionDesc": { - "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "message": "$ORGANIZATION$ χρησιμοποιεί SSO με έναν αυτοεξυπηρετητή κλειδιών. Ένας κύριος κωδικός πρόσβασης δεν απαιτείται πλέον για να συνδεθείτε για τα μέλη αυτού του οργανισμού.", "placeholders": { "organization": { "content": "$1", @@ -4510,66 +4642,96 @@ } }, "leaveOrganization": { - "message": "Leave Organization" + "message": "Αποχώρηση από τον οργανισμό" }, "removeMasterPassword": { - "message": "Remove Master Password" + "message": "Αφαίρεση Κύριου Κωδικού Πρόσβασης" }, "removedMasterPassword": { - "message": "Master password removed." + "message": "Ο κύριος κωδικός αφαιρέθηκε." }, "allowSso": { - "message": "Allow SSO authentication" + "message": "Να επιτρέπεται έλεγχος ταυτότητας SSO" }, "allowSsoDesc": { - "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." + "message": "Μόλις συσταθεί, οι ρυθμίσεις σας θα αποθηκευτούν και τα μέλη θα είναι σε θέση να πιστοποιήσουν τον έλεγχο ταυτότητας χρησιμοποιώντας τα διαπιστευτήρια του παρόχου ταυτότητας." }, "ssoPolicyHelpStart": { - "message": "Enable the", + "message": "Ενεργοποίηση του", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpLink": { - "message": "SSO Authentication policy", + "message": "Πολιτική ελέγχου ταυτότητας SSO", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { - "message": "to require all members to log in with SSO.", + "message": "για να απαιτήσει από όλα τα μέλη να συνδεθούν με SSO.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { - "message": "SSO Authentication and Single Organization policies are required to set up Key Connector decryption." + "message": "Απαιτούνται πολιτικές ελέγχου ταυτότητας και ενιαίου οργανισμού για τη δημιουργία αποκρυπτογράφησης κλειδιών σύνδεσης." }, "memberDecryptionOption": { - "message": "Member Decryption Options" + "message": "Επιλογές Αποκρυπτογράφησης Μελών" }, "memberDecryptionPassDesc": { - "message": "Once authenticated, members will decrypt vault data using their Master Passwords." + "message": "Μόλις ελεγχθεί, τα μέλη θα αποκρυπτογραφήσουν τα δεδομένα vault χρησιμοποιώντας τους Κύριους Κωδικούς Πρόσβασης." }, "keyConnector": { - "message": "Key Connector" + "message": "Σύνδεσμος Κλειδιού" }, "memberDecryptionKeyConnectorDesc": { - "message": "Connect Login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their Master Passwords to decrypt vault data. Contact Bitwarden Support for set up assistance." + "message": "Συνδεθείτε με SSO στον αυτο-φιλοξενημένο διακομιστή κλειδιών αποκρυπτογράφησης. Χρησιμοποιώντας αυτή την επιλογή, τα μέλη δεν θα χρειαστεί να χρησιμοποιήσουν τους Κύριους κωδικούς πρόσβασης τους για να αποκρυπτογραφήσουν τα δεδομένα θησαυ/κιου." }, "keyConnectorPolicyRestriction": { - "message": "\"Login with SSO and Key Connector Decryption\" is enabled. This policy will only apply to Owners and Admins." + "message": "\"Σύνδεση με αποκρυπτογράφηση SSO και Key Connector \" είναι ενεργοποιημένη. Αυτή η πολιτική θα ισχύει μόνο για Ιδιοκτήτες και Διαχειριστές." }, "enabledSso": { - "message": "Enabled SSO" + "message": "Ενεργοποιημένο SSO" }, "disabledSso": { - "message": "Disabled SSO" + "message": "Απενεργοποιημένο SSO" }, "enabledKeyConnector": { - "message": "Enabled Key Connector" + "message": "Ενεργοποιημένος Σύνδεσμος Κλειδιών" }, "disabledKeyConnector": { - "message": "Disabled Key Connector" + "message": "Απενεργοποιημένη Σύνδεση Κλειδιών" }, "keyConnectorWarning": { - "message": "Once members begin using Key Connector, your Organization cannot revert to Master Password decryption. Proceed only if you are comfortable deploying and managing a key server." + "message": "Μόλις τα μέλη αρχίσουν να χρησιμοποιούν το Key Connector, ο Οργανισμός σας δεν μπορεί να επανέλθει στην αποκρυπτογράφηση Master Password. Προχωρήστε μόνο εάν είστε άνετοι στην ανάπτυξη και διαχείριση ενός εξυπηρετητή κλειδιών." }, "migratedKeyConnector": { - "message": "Migrated to Key Connector" + "message": "Μετεγκατάσταση στον σύνδεσμο κλειδιού" + }, + "paymentSponsored": { + "message": "Παρακαλώ δώστε μια μέθοδο πληρωμής για να συσχετίσετε με τον οργανισμό. Μην ανησυχείτε, δεν θα σας χρεώσουμε τίποτα, εκτός αν επιλέξετε πρόσθετες λειτουργίες ή η εγγυοδοσία σας λήξει. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "Η προσφορά χορηγίας έχει λήξει. Μπορείτε να διαγράψετε τον οργανισμό που δημιουργήσατε για να αποφύγετε μια χρέωση στο τέλος της δοκιμής 7 ημερών. Διαφορετικά, μπορείτε να κλείσετε αυτή την προτροπή για να κρατήσει την οργάνωση και να αναλάβει την ευθύνη χρέωσης." + }, + "newFamiliesOrganization": { + "message": "Νέος Οργανισμός Families" + }, + "acceptOffer": { + "message": "Αποδοχή Προσφοράς" + }, + "sponsoringOrg": { + "message": "Χορηγούμενος Οργανισμός" + }, + "keyConnectorTest": { + "message": "Δοκιμή" + }, + "keyConnectorTestSuccess": { + "message": "Επιτυχία! Η σύνδεση με τα πλήκτρα έφτασε." + }, + "keyConnectorTestFail": { + "message": "Αδύνατη η πρόσβαση στον σύνδεσμο κλειδιού. Ελέγξτε το URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Η προσφορά χορηγίας έχει λήξει." + }, + "freeWithSponsorship": { + "message": "ΔΩΡΕΑΝ με χορηγία" } } diff --git a/src/locales/en/messages.json b/src/locales/en/messages.json index 8b117d23..74d61382 100644 --- a/src/locales/en/messages.json +++ b/src/locales/en/messages.json @@ -4525,7 +4525,7 @@ "message": "Enter your personal email to redeem Bitwarden Families" }, "sponsoredFamiliesLeaveCopy": { - "message": "If you leave or are removed from this organization, your Families plan will expire at the end of the billing period." + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." }, "acceptBitwardenFamiliesHelp": { "message": "Accept offer for an existing organization or create a new Families organization." diff --git a/src/locales/en_GB/messages.json b/src/locales/en_GB/messages.json index 40550451..23c591cd 100644 --- a/src/locales/en_GB/messages.json +++ b/src/locales/en_GB/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/en_IN/messages.json b/src/locales/en_IN/messages.json index 00b4bd4f..771c908e 100644 --- a/src/locales/en_IN/messages.json +++ b/src/locales/en_IN/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/eo/messages.json b/src/locales/eo/messages.json index 2283dba3..80d53b4a 100644 --- a/src/locales/eo/messages.json +++ b/src/locales/eo/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Ĉu vi certe volas forigi ĉi tiun uzanton?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Ekstera identigilo" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resendi Inviton" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ estis reenvitita.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/es/messages.json b/src/locales/es/messages.json index 33377d86..c319a900 100644 --- a/src/locales/es/messages.json +++ b/src/locales/es/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "¿Estás seguro de que deseas eliminar a este usuario?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Id externo" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Reenviar invitación" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "El usuario $USER$ ha sido reinvitado.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Los ajustes de tu suscripción darán como resultado cambios prorrateados en tus facturación total. No puedes invitar a más de $COUNT$ usuarios sin aumentar tus asientos de suscripción.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/et/messages.json b/src/locales/et/messages.json index 0a6348de..5e9c7698 100644 --- a/src/locales/et/messages.json +++ b/src/locales/et/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Tahad kindlasti selle kasutaja eemaldada?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Väline ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Saada kutse uuesti" }, + "resendEmail": { + "message": "Saada e-kiri uuesti" + }, "hasBeenReinvited": { "message": "$USER$ on uuesti kutsutud.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ logis esimest korda läbi SSO sisse", "placeholders": { "id": { "content": "$1", @@ -4473,26 +4488,143 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "E-kiri on saadetud" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { - "message": "Unable to reach the Key Connector, try again later." + "message": "Ühenduse loomine Key Connectoriga ebaõnnestus. Proovi hiljem uuesti." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "Key Connectori URL" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Saada kinnituskood oma e-postile" }, "sendCode": { - "message": "Send Code" + "message": "Saada kood" }, "codeSent": { - "message": "Code Sent" + "message": "Kood on saadetud" }, "verificationCode": { "message": "Verification Code" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Jätkamiseks kinnita oma identiteet." }, "verificationCodeRequired": { "message": "Verification code is required." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Testi" + }, + "keyConnectorTestSuccess": { + "message": "Õnnestus! Key Connectoriga saadi ühendust." + }, + "keyConnectorTestFail": { + "message": "Key Connectoriga ei saa ühendust. Kontrolli URL-i." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/fi/messages.json b/src/locales/fi/messages.json index 986b6e61..46a49c76 100644 --- a/src/locales/fi/messages.json +++ b/src/locales/fi/messages.json @@ -904,7 +904,7 @@ "message": "Vaihda sähköpostiosoite" }, "changeEmailTwoFactorWarning": { - "message": "Jatko vaihtaa tilisi sähköpostiosoitteen, muttei kaksivaiheiseen tunnistamiseen käytettävää osoitetta. Tämän osoitteen voit vaihtaa kaksivaiheisen tunnistautumisen asetuksista." + "message": "Jatkamalla tilisi sähköpostiosoite vaihtuu, muttei kaksivaiheiseen kirjautumiseen käytettävä osoite. Sen voit vaihtaa kaksivaiheisen kirjautumisen asetuksista." }, "newEmail": { "message": "Uusi sähköpostiosoite" @@ -1129,16 +1129,16 @@ "message": "Oletus" }, "domainRules": { - "message": "Verkkotunnusten säännöt" + "message": "Verkkotunnusten vastaavuudet" }, "domainRulesDesc": { "message": "Jos kirjautumistietosi ovat samat useille verkkotunnuksille, voit merkata sivustot vastaavanlaisiksi. Bitwarden on luonut sinulle valmiiksi joitakin globaaleja verkkotunnuksia." }, "globalEqDomains": { - "message": "Globaalit vastaavat verkkotunnukset" + "message": "Globaalit verkkotunnusten vastaavuudet" }, "customEqDomains": { - "message": "Omat vastaavat verkkotunnukset" + "message": "Omat verkkotunnusten vastaavuudet" }, "exclude": { "message": "Älä käytä sääntöä" @@ -1884,7 +1884,7 @@ "message": "Poistettava tallennustila, Gt" }, "storageAddNote": { - "message": "Tallennuskapasiteetin lisäys muuttaa kokonaislaskutustasi ja korotus veloitetaan tilillesi tallennetulta maksutavalta välittömästi. Ensimmäinen veloitus sovitetaan tämänhetkisen laskutusjaksosi jäljellä olevalle ajalle." + "message": "Tallennuskapasiteetin lisäys muuttaa kokonaislaskutustasi ja korotus veloitetaan tilillesi tallennetulta maksutavalta välittömästi. Ensimmäinen veloitus sovitetaan nykyisen laskutuskautesi jäljellä olevalle ajalle." }, "storageRemoveNote": { "message": "Tallennuskapasiteetin vähennys muuttaa kokonaislaskutustasi ja tämä huomioidaan seuraavan veloituksen yhteydessä." @@ -1991,7 +1991,7 @@ } }, "planNameFamilies": { - "message": "Perheet" + "message": "Perheille" }, "planDescFamilies": { "message": "Henkilökohtaiseen käyttöön, jaettavaksi perheen ja ystävien kanssa." @@ -2123,10 +2123,10 @@ "message": "Organisaatiosi tilausta on päivitetty." }, "leave": { - "message": "Poistu" + "message": "Eroa" }, "leaveOrganizationConfirmation": { - "message": "Haluatko varmasti poistua tästä organisaatiosta?" + "message": "Haluatko varmasti erota organisaatiosta?" }, "leftOrganization": { "message": "Olet poistunut organisaatiosta." @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Haluatko varmasti poistaa käyttäjän?" }, + "removeUserConfirmationKeyConnector": { + "message": "Varoitus! Tämä käyttäjä tarvitsee salauksensa hallintaan Key Connectoria. Käyttäjän poistaminen organisaatiostasi poistaa heidän tilinsä käytöstä pysvästi. Toimenpide on pysyvä, eikä sen peruminen ole mahdollista. Haluatko jatkaa?" + }, "externalId": { "message": "Ulkoinen ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Lähetä kutsu uudelleen" }, + "resendEmail": { + "message": "Lähetä sähköposti uudelleen" + }, "hasBeenReinvited": { "message": "$USER$ on kutsuttu uudelleen.", "placeholders": { @@ -2738,7 +2744,7 @@ "message": "Kutsun hyväksyntä ei onnistu. Pyydä organisaation ylläpitäjää lähettämään uusi kutsu." }, "inviteAcceptFailedShort": { - "message": "Kutsun hyväksyntä ei onnistunut. $DESCRIPTION$", + "message": "Kutsua ei voitu hyväksyä. $DESCRIPTION$", "placeholders": { "description": { "content": "$1", @@ -2798,7 +2804,7 @@ "message": "Yhdysvalloissa olevilta asiakkailta vaaditaan postinumero myyntiverotuksen vaatimusten vuoksi. Muiden maiden asiakkaat voivat halutessaan toimittaa verotunnistenumeron (ALV/GST) ja/tai osoitteen, joka kirjataan laskuihin." }, "billingPlan": { - "message": "Tilautyyppi", + "message": "Tilaustyyppi", "description": "A billing plan/package. For example: families, teams, enterprise, etc." }, "changeBillingPlan": { @@ -2897,7 +2903,7 @@ "message": "Tilausmuutokset aiheuttavat muutoksia laskutukseesi. Jos hiljattain kutsuttujen käyttäjien määrä ylittää tilauksesi käyttäjäpaikkojen enimmäismäärän, veloitetaan suhteutettu hinta uusista käyttäjistä välittömästi." }, "subscriptionUserSeats": { - "message": "Tilauksesi sallii yhteensä $COUNT$ käyttäjää.", + "message": "Tilauksesi kattaa kaikkiaan $COUNT$ käyttäjää.", "placeholders": { "count": { "content": "$1", @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Tilauksesi kattaa kaikkiaan $COUNT$ käyttäjää. Tilauksesi on sponsoroitu ja se laskutetaan ulkoiselta organisaatiolta.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Tilausmuutokset johtavat suhteutettuihin muutoksiin laskutuksessasi. Voit kutsua enintään $COUNT$ käyttäjää kasvattamatta tilauksesi käyttäjäpaikkojen määrää.", "placeholders": { @@ -2966,7 +2981,7 @@ "message": "Poistettavat käyttäjäpaikat" }, "seatsAddNote": { - "message": "Käyttäjäpaikkojen lisäys muuttaa kokonaislaskutustasi ja korotus veloitetaan tilillesi tallennetulta maksutavalta välittömästi. Ensimmäinen veloitus sovitetaan tämänhetkisen laskutusjaksosi jäljellä olevalle ajalle." + "message": "Käyttäjäpaikkojen lisäys muuttaa kokonaislaskutustasi ja korotus veloitetaan tilillesi tallennetulta maksutavalta välittömästi. Ensimmäinen veloitus sovitetaan nykyisen laskutuskautesi jäljellä olevalle ajalle." }, "seatsRemoveNote": { "message": "Käyttäjäpaikkojen vähennys muuttaa kokonaislaskutustasi ja tämä huomioidaan seuraavan veloituksen yhteydessä." @@ -3678,7 +3693,7 @@ "message": "Kutsun hyväksyntä ei onnistu. Pyydä käyttäjää lähettämään uusi kutsu." }, "emergencyInviteAcceptFailedShort": { - "message": "Kutsun hyväksyntä ei onnistunut. $DESCRIPTION$", + "message": "Kutsua ei voitu hyväksyä. $DESCRIPTION$", "placeholders": { "description": { "content": "$1", @@ -4435,7 +4450,7 @@ "message": "Pienin sallittu Incoming Signing -algoritmi" }, "spWantAssertionsSigned": { - "message": "Vaadi Assertion-lähetysten allekirjoitus" + "message": "Vaadi Assertion-lähetykset allekirjoitettuina" }, "spValidateCertificates": { "message": "Vahvista varmenteet" @@ -4468,13 +4483,130 @@ "message": "Poista Outbound Logout -pyynnöt käytöstä" }, "idpWantAuthnRequestsSigned": { - "message": "Vaadi Authentication-pyyntöjen allekirjoitus" + "message": "Vaadi Authentication-pyynnöt allekirjoitettuina" }, "ssoSettingsSaved": { "message": "Kertakirjautumisen (SSO) määritykset tallennettiin." }, + "sponsoredFamilies": { + "message": "Ilmainen Bitwarden Perheille" + }, + "sponsoredFamiliesEligible": { + "message": "Sinä ja perheesi olette oikeutettuja ilmaiseen Bitwarden Perheille -tilaukseen. Lunasta tarjous henkilökohtaisella sähköpostillasi suojataksesi tietosi myös töiden ulkopuolella." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Lunasta ilmainen Bitwarden Perheille -tilauksesi tänään suojataksesi tietosi myös töiden ulkopuolella." + }, + "sponsoredFamiliesInclude": { + "message": "Bitwarden Perheille -tilaus sisältää" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium-käyttöoikeuden 6 käyttäjälle" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Jaetut kokoelmat perheen salaisuuksille" + }, + "badToken": { + "message": "Linkki ei ole enää voimassa. Pyydä sponsoria lähettämään tarjous uudelleen." + }, + "reclaimedFreePlan": { + "message": "Lunastettu Ilmaistilaus" + }, + "redeem": { + "message": "Lunasta" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Valitse organisaatio, jota haluat sponsoroida" + }, + "familiesSponsoringOrgSelect": { + "message": "Minkä ilmaisen Perheille-tilauksen tarjouksen haluaisit lunastaa?" + }, + "sponsoredFamiliesEmail": { + "message": "Syötä henkilökohtainen sähköpostiosoitteesi lunastaaksesi Bitwarden Perheille -tilauksen" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Jos eroat tai sinut erotetaan sponsoroivasta organisaatiosta, päättyy Perheille-tilauksesi kuluvan laskutuskauden lopussa." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Hyväksy tarjous olemassa olevalla organisaatiolla tai luo uusi Perheille-organisaatio." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Sinulle on tarjottu ilmaista Bitwarden Perheille -organisaatiota. Jatkaaksesi sinun on kirjauduttava tarjouksen saaneelle tilille." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Tarjousta ei voida hyväksyä. Lähetä tarjoussähköposti uudestaan yritystililtäsi ja yritä uudelleen." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Tarjousta ei voida hyväksyä. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Hyväksy ilmainen Bitwarden Perheille" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Ilmainen Bitwarden Perheille -tarjous on lunastettu" + }, + "redeemed": { + "message": "Lunastettu" + }, + "redeemedAccount": { + "message": "Lunastettu tili" + }, + "revokeAccount": { + "message": "Irtisano tili $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Lähetä sponsorointisähköposti uudelleen edunsaajalle $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Ilmainen Perheille-tilaus" + }, + "redeemNow": { + "message": "Lunasta nyt" + }, + "recipient": { + "message": "Vastaanottaja" + }, + "removeSponsorship": { + "message": "Poista sponsorointi" + }, + "removeSponsorshipConfirmation": { + "message": "Sponsoroinnin poiston jälkeen olet vastuussa tilauksesta ja siihen liittyvistä laskuista. Haluatko varmasti jatkaa?" + }, + "sponsorshipCreated": { + "message": "Sponsorointi on luotu" + }, + "revoke": { + "message": "Irtisano" + }, + "emailSent": { + "message": "Sähköposti on lähetetty" + }, + "revokeSponsorshipConfirmation": { + "message": "Tämän tilin poiston jälkeen, on Perheille-organisaation omistaja jatkossa vastuussa tilauksesta ja siihen liittyvistä laskuista. Haluatko varmasti jatkaa?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorointi on poistettu" + }, "ssoKeyConnectorUnavailable": { - "message": "Key Connector -agenttia ei tavoiteta. Yritä myöhemmin uudelleen." + "message": "Key Connectoria ei tavoiteta. Yritä myöhemmin uudelleen." }, "keyConnectorUrl": { "message": "Key Connector URL" @@ -4510,7 +4642,7 @@ } }, "leaveOrganization": { - "message": "Poistu organisaatiosta" + "message": "Eroa organisaatiosta" }, "removeMasterPassword": { "message": "Poista pääsalasana" @@ -4537,7 +4669,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { - "message": "\"SSO-todennus\" ja \"Yksittäinen organisaatio\" -käytännöt vaaditaan, jotta Key Connector -agentilla tapahtuva salauksenpurku voidaan määrittää." + "message": "\"SSO-todennus\" ja \"Yksittäinen organisaatio\" -käytännöt vaaditaan Key Connector -salauksenpurun määritykseen." }, "memberDecryptionOption": { "message": "Jäsenen salauksenpurkuvalinnat" @@ -4549,10 +4681,10 @@ "message": "Key Connector" }, "memberDecryptionKeyConnectorDesc": { - "message": "Liitä SSO-kirjautuminen omaan salauksenpurkuavainpalvelimeesi. Tätä valintaa käyttämällä jäsenten ei tarvitse käyttää pääsalasanojaan holvin salauksen purkuun. Ota yhtettä Bitwardenin tukeen saadaksesi apua määritykseen." + "message": "Liitä kertakirjautuminen (SSO) omaan salauksenpurkuavainpalvelimeesi. Tätä valintaa käyttämällä jäsenten ei tarvitse käyttää pääsalasanojaan holvin salauksen purkuun. Ota yhtettä Bitwardenin tukeen saadaksesi apua määritykseen." }, "keyConnectorPolicyRestriction": { - "message": "\"SSO-kirjautuminen Key Connector -agentin salauksenpurulla\" on käytössä. Käytäntö vaikuttaa vain omistajiin ja ylläpitäjiin." + "message": "Kertakirjautuminen (SSO) Key Connector -salauksenpurulla on käytössä. Käytäntö vaikuttaa vain omistajiin ja ylläpitäjiin." }, "enabledSso": { "message": "SSO otettiin käyttöön" @@ -4567,9 +4699,39 @@ "message": "Key Connector poistettiin käytöstä" }, "keyConnectorWarning": { - "message": "Kun käyttäjät alkavat käyttämään Key Connector -agenttia, organisaatiosi ei voi palata takaisin pääsalasanalla tapahtuvaan salauksenpurkuun. Jatka ainoastaan siinä tapauksessa, jos olet valmis määrittämään avainpalvelimen ja myös ylläpitämään sitä." + "message": "Kun käyttäjät alkavat käyttämään Key Connectoria, organisaatiosi ei voi palata takaisin pääsalasanalla tapahtuvaan salauksenpurkuun. Jatka ainoastaan siinä tapauksessa, jos olet valmis määrittämään avainpalvelimen ja myös ylläpitämään sitä." }, "migratedKeyConnector": { - "message": "Siirretty käyttämään Key Connector -agenttia" + "message": "Siirretty käyttämään Key Connectoria" + }, + "paymentSponsored": { + "message": "Ilmoita organisaatioon liitettävä maksutapa. Voit olla huoletta, sillä emme veloita sinulta mitään, ellet itse valitse lisäominaisuuksia tai sponsorointisi pääty." + }, + "orgCreatedSponsorshipInvalid": { + "message": "Sponsorointitarjous on päättynyt. Voit poistaa luomasi organisaation välttääksesi veloituksen 7- päivän kokeilujaksosi päättyessä. Muussa tapauksessa voit sulkea ilmoituksen, jolloin organisaatio säilyy sinulla ja vastaat jatkossa siihen liittyvistä laskuista." + }, + "newFamiliesOrganization": { + "message": "Uusi Perheille-organisaatio" + }, + "acceptOffer": { + "message": "Hyväksy tarjous" + }, + "sponsoringOrg": { + "message": "Sponsoroiva organisaatio" + }, + "keyConnectorTest": { + "message": "Testaa" + }, + "keyConnectorTestSuccess": { + "message": "Onnistui! Key Connectori tavoitettiin." + }, + "keyConnectorTestFail": { + "message": "Key Connectoria ei tavoiteta. Tarkista URL-osoite." + }, + "sponsorshipTokenHasExpired": { + "message": "Sponsorointitarjous on päättynyt." + }, + "freeWithSponsorship": { + "message": "ILMAINEN sponsoroinnilla" } } diff --git a/src/locales/fil/messages.json b/src/locales/fil/messages.json index 8fb02c20..93421fa7 100644 --- a/src/locales/fil/messages.json +++ b/src/locales/fil/messages.json @@ -13,7 +13,7 @@ "message": "What type of item is this?" }, "name": { - "message": "Name" + "message": "Pangalan" }, "uri": { "message": "URl" @@ -68,7 +68,7 @@ "message": "Identity Name" }, "company": { - "message": "Company" + "message": "Kumpanya" }, "ssn": { "message": "Social Security Number" @@ -83,7 +83,7 @@ "message": "Email" }, "phone": { - "message": "Phone" + "message": "Telepono" }, "january": { "message": "Enero" @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/fr/messages.json b/src/locales/fr/messages.json index 408d43f3..5ac4da0b 100644 --- a/src/locales/fr/messages.json +++ b/src/locales/fr/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Êtes-vous sûr de vouloir retirer cet utilisateur ?" }, + "removeUserConfirmationKeyConnector": { + "message": "Attention ! Cet utilisateur a besoin de Key Connector pour gérer son chiffrement. Supprimer cet utilisateur de votre organisation désactivera définitivement son compte. Cette action ne peut pas être annulée. Voulez-vous continuer?" + }, "externalId": { "message": "Identifiant externe" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Renvoyer l'invitation" }, + "resendEmail": { + "message": "Renvoyer le Courriel" + }, "hasBeenReinvited": { "message": "$USER$ a été réinvité.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Votre abonnement permet un total de $COUNT$ utilisateurs. Votre abonnement est parrainé et facturé à une organisation externe.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Les ajustements apportés à votre abonnement entraîneront des modifications au prorata de vos totaux de facturation. Vous ne pouvez pas inviter plus de $COUNT$ utilisateurs sans augmenter votre nombre de licences.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ s'est connecté avec Sso pour la première fois", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "La configuration de l'Authentification Unique a été enregistrée." }, + "sponsoredFamilies": { + "message": "Bitwarden Familles Gratuit" + }, + "sponsoredFamiliesEligible": { + "message": "Vous et votre famille êtes éligibles pour Bitwarden Familles Gratuit. Réclamez-le avec votre courriel personnel pour garder vos données en sécurité même lorsque vous n'êtes pas au travail." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Réclamez votre abonnement Bitwarden pour les Familles Gratuit aujourd'hui pour garder vos données en sécurité même lorsque vous n'êtes pas au travail." + }, + "sponsoredFamiliesInclude": { + "message": "L'abonnement Bitwarden pour les Familles inclut" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Accès premium pour un maximum de 6 utilisateurs" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Collections partagées pour les secrets de Famille" + }, + "badToken": { + "message": "Le lien n'est plus valide. Merci de renvoyer l'offre au parrain." + }, + "reclaimedFreePlan": { + "message": "Abonnement gratuit réclamé" + }, + "redeem": { + "message": "Réclamer" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Sélectionnez l'organisation que vous souhaiteriez voir parrainée" + }, + "familiesSponsoringOrgSelect": { + "message": "Quelle offre de Familles Gratuites aimeriez-vous réclamer?" + }, + "sponsoredFamiliesEmail": { + "message": "Entrez votre adresse courriel personnelle pour réclamer Bitwarden Familles" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Si vous quittez ou que vous êtes retiré de cette organisation, votre forfait Familles expirera à la fin de la période de facturation." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accepter une offre pour une organisation existante ou créer une nouvelle organisation Familles." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Vous avez reçu une offre gratuite pour une Organisation de l'Abonnement Familles de Bitwarden. Pour continuer, vous devez vous connecter au compte qui a reçu l'offre." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Impossible d'accepter l'offre. Veuillez renvoyer le courriel de l'offre de votre compte d'entreprise et réessayer." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Impossible d'accepter l'offre. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Réclamez l'Offre Gratuite de l'Organisation Bitwarden Familles" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "L'offre gratuite de Bitwarden Familles a été réclamée avec succès" + }, + "redeemed": { + "message": "Réclamée" + }, + "redeemedAccount": { + "message": "Compte Réclamé" + }, + "revokeAccount": { + "message": "Révoquer le compte $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Renvoyer le courriel de Parrainage au parrain $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Abonnement Gratuit à Familles" + }, + "redeemNow": { + "message": "Réclamer Maintenant" + }, + "recipient": { + "message": "Bénéficiaire" + }, + "removeSponsorship": { + "message": "Supprimer le Parrainage" + }, + "removeSponsorshipConfirmation": { + "message": "Après avoir supprimé un parrainage, vous serez responsable de cet abonnement et des factures associées. Êtes-vous sûr de vouloir continuer ?" + }, + "sponsorshipCreated": { + "message": "Parrainage Créé" + }, + "revoke": { + "message": "Révoquer" + }, + "emailSent": { + "message": "Courriel Envoyé" + }, + "revokeSponsorshipConfirmation": { + "message": "Après avoir supprimé ce compte, le propriétaire de l'organisation Familles sera responsable de cet abonnement et des factures associées. Êtes-vous sûr de vouloir continuer ?" + }, + "removeSponsorshipSuccess": { + "message": "Parrainage Supprimé" + }, "ssoKeyConnectorUnavailable": { "message": "Impossible de contacter Key Connector, réessayez plus tard." }, @@ -4480,19 +4612,19 @@ "message": "URL de Key Connector" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Envoyer un code de vérification à votre adresse email" }, "sendCode": { - "message": "Send Code" + "message": "Envoyer le code" }, "codeSent": { - "message": "Code Sent" + "message": "Code envoyé" }, "verificationCode": { "message": "Code de Vérification" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Confirmez votre identité pour continuer." }, "verificationCodeRequired": { "message": "Le code de vérification est requis." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migration vers Key Connector" + }, + "paymentSponsored": { + "message": "Veuillez fournir un moyen de paiement à associer à l'organisation. Ne vous inquiétez pas, nous ne vous facturerons rien à moins que vous sélectionniez des fonctionnalités supplémentaires ou que votre parrainage expire. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "L'offre de parrainage a expiré, vous pouvez supprimer l'organisation que vous avez créée pour éviter d'être chargé à la fin de votre essai de 7 jours. Dans le cas contraire, vous pouvez fermer cette avis pour conserver l'organisation et assumer la responsabilité de la facturation." + }, + "newFamiliesOrganization": { + "message": "Nouvelle Organisation Familles" + }, + "acceptOffer": { + "message": "Accepter l'Offre" + }, + "sponsoringOrg": { + "message": "Organisation Parrainant" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Succès! Key Connector rejoint." + }, + "keyConnectorTestFail": { + "message": "Key Connector ne peut être contacté. Vérifiez l'URL." + }, + "sponsorshipTokenHasExpired": { + "message": "L'offre de parrainage a expirée." + }, + "freeWithSponsorship": { + "message": "GRATUIT avec le parrainage" } } diff --git a/src/locales/he/messages.json b/src/locales/he/messages.json index 70e4e76c..6765456a 100644 --- a/src/locales/he/messages.json +++ b/src/locales/he/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "האם אתה בטוח שברצונך להסיר משתמש זה?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "מזהה חיצוני" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "שלח הזמנה מחדש" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ הוזמן מחדש.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/hi/messages.json b/src/locales/hi/messages.json index 7f58d6b3..35304d51 100644 --- a/src/locales/hi/messages.json +++ b/src/locales/hi/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/hr/messages.json b/src/locales/hr/messages.json index bf704745..a9ac1bf4 100644 --- a/src/locales/hr/messages.json +++ b/src/locales/hr/messages.json @@ -167,7 +167,7 @@ "message": "Boolean" }, "cfTypeLinked": { - "message": "Linked", + "message": "Povezano", "description": "This describes a field that is 'linked' (related) to another field." }, "remove": { @@ -316,7 +316,7 @@ "message": "Prezime" }, "fullName": { - "message": "Full Name" + "message": "Ime i prezime" }, "address1": { "message": "Adresa 1" @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Sigurno želiš ukoniti ovog korisnika?" }, + "removeUserConfirmationKeyConnector": { + "message": "Upozorenje! Ovaj korisnik koristi konektor za ključ kako bi upravljao svojim šifriranjem. Uklanjanjem korisnika iz tvoje organizacije korisnički će račun biti trajno onemogućen. Ovu opciju nije moguće opozvati. Sigurno želiš nastaviti?" + }, "externalId": { "message": "Vanjski Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Ponovno slanje pozivnice" }, + "resendEmail": { + "message": "Ponovno slanje e-pošte" + }, "hasBeenReinvited": { "message": "$USER$ je ponovno pozvan.", "placeholders": { @@ -2894,7 +2900,7 @@ "description": "Seat = User Seat" }, "subscriptionDesc": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users." + "message": "Promjene na pretplati rezultirati će proporcionalnim izmjenama ukupnog zaduženja. Ako novopozvanim korisnikom prekoračiš broj licenci, odmah će biti naplaćeno proporcionalno uvećanje za nove korisnike." }, "subscriptionUserSeats": { "message": "Tvoja pretplata uključuje $COUNT$ korisnika.", @@ -2921,10 +2927,10 @@ "message": "Za dodatnu pomoć u upravljanju pretplatom, kontaktiraj korisničku podršku." }, "subscriptionUserSeatsUnlimitedAutoscale": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users." + "message": "Promjene na pretplati rezultirati će proporcionalnim izmjenama ukupnog zaduženja. Ako novopozvanim korisnikom prekoračiš broj licenci, odmah će biti naplaćeno proporcionalno uvećanje za nove korisnike." }, "subscriptionUserSeatsLimitedAutoscale": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users until your $MAX$ seat limit is reached.", + "message": "Promjene na pretplati rezultirati će proporcionalnim izmjenama ukupnog zaduženja. Ako novopozvanim korisnikom prekoračiš broj licenci, odmah će biti naplaćeno proporcionalno uvećanje za nove korisnike dok se ne dosegne krajnji broj licenci ($MAX$).", "placeholders": { "max": { "content": "$1", @@ -2933,7 +2939,7 @@ } }, "subscriptionFreePlan": { - "message": "You cannot invite more than $COUNT$ users without upgrading your plan.", + "message": "Nije moguće pozvati više od $COUNT$ korisnika bez nadogradnje plana.", "placeholders": { "count": { "content": "$1", @@ -2942,7 +2948,16 @@ } }, "subscriptionFamiliesPlan": { - "message": "You cannot invite more than $COUNT$ users without upgrading your plan. Please contact Customer Support to upgrade.", + "message": "Nije moguće pozvati više od $COUNT$ korisnika bez promjene plana. Kontaktiraj podršku za nadogradnju.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Tvoja pretplata dozvoljava najviše $COUNT$ korisnika. Tvoj plan je sponzoriran i naplaćuje se vanjskoj organizaciji.", "placeholders": { "count": { "content": "$1", @@ -2951,7 +2966,7 @@ } }, "subscriptionMaxReached": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", + "message": "Promjene na pretplati rezultirati će proporcionalnim izmjenama ukupnog zaduženja. Nećeš moći pozvati više od $COUNT$ novih korisnika bez prethodne promjene broja licenci.", "placeholders": { "count": { "content": "$1", @@ -2966,7 +2981,7 @@ "message": "Licence za ukloniti" }, "seatsAddNote": { - "message": "Dodavanje korisničkih licenci rezultirati će povećanjem ukupnog zaduženja i trenutnim terećenjem spremljenog sredstva plaćanja. Iznos će btii umanjen proporcionlano ostatku tekuđeg obračunskog razdoblja. " + "message": "Dodavanje korisničkih licenci rezultirati će povećanjem ukupnog zaduženja i trenutnim terećenjem spremljenog sredstva plaćanja. Iznos će biti umanjen proporcionalno ostatku tekućeg obračunskog razdoblja." }, "seatsRemoveNote": { "message": "Uklanjanje korisničkih licenci rezultirati će smanjenjem ukupnog zaduženja. Iznos će biti umanjen proporcionalno ostatku tekućeg razdoblja i iskorišten kao umanjenje kod sljedeće naplate." @@ -3830,7 +3845,7 @@ "message": "Pristup izvještajima" }, "missingPermissions": { - "message": "You lack the necessary permissions to perform this action." + "message": "Nedostaju ti potrebna dopuštenja za izvođenje ove radnje." }, "manageAllCollections": { "message": "Upravljanje svim zbirkama" @@ -3881,7 +3896,7 @@ "message": "Pravila organizacije utječu na tvoje mogućnosti vlasništva." }, "personalOwnershipPolicyInEffectImports": { - "message": "An organization policy has disabled importing items into your personal vault." + "message": "Organizacijsko pravilo onemogućuje uvoz stavki u tvoj osobni trezor." }, "personalOwnershipCheckboxDesc": { "message": "Onemogući osobno vlasnišvo za organizacijske korisnike" @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "Prva prijava korisnika $ID$ koristeći SSO", "placeholders": { "id": { "content": "$1", @@ -4323,7 +4338,7 @@ "message": "sat(i)" }, "minutes": { - "message": "Minutes" + "message": "min." }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed Vault Timeout is $HOURS$ hour(s) and $MINUTES$ minute(s)", @@ -4342,34 +4357,34 @@ "message": "Osobni istek trezora" }, "vaultTimeoutToLarge": { - "message": "Your vault timeout exceeds the restriction set by your organization." + "message": "Vrijeme isteka premašuje ograničenje koju je postavila tvoja organizacija." }, "disablePersonalVaultExport": { - "message": "Disable Personal Vault Export" + "message": "Onemogući izvoz osobnog trezora" }, "disablePersonalVaultExportDesc": { - "message": "Prohibits users from exporting their private vault data." + "message": "Onemogućuje korisnike da izvezu svoj osobni trezor." }, "vaultExportDisabled": { - "message": "Vault Export Disabled" + "message": "Izvoz trezora onemogućen" }, "personalVaultExportPolicyInEffect": { - "message": "One or more organization policies prevents you from exporting your personal vault." + "message": "Jedno ili više pravila organizacija onemogućuje izvoz osobnog trezora." }, "selectType": { - "message": "Select SSO Type" + "message": "Odaberi vrstu SSO" }, "type": { "message": "Vrsta" }, "openIdConnectConfig": { - "message": "OpenID Connect Configuration" + "message": "Konfiguracija OpenID connect" }, "samlSpConfig": { - "message": "SAML Service Provider Configuration" + "message": "Konfiguracija SAML Service Provider" }, "samlIdpConfig": { - "message": "SAML Identity Provider Configuration" + "message": "Konfiguracija SAML Identity Provider" }, "callbackPath": { "message": "Callback Path" @@ -4473,35 +4488,152 @@ "ssoSettingsSaved": { "message": "Konfiguracija za jedinstvenu prijavu (SSO) je spremljena." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "Bitwarden plan za obitelji uključuje" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium pristup do 6 korisnika" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Dijeljene zbirke za obiteljske tajne" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Nije moguće prihvatiti ponudu. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Opozovi" + }, + "emailSent": { + "message": "e-pošta poslana" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponzorstvo uklonjeno" + }, "ssoKeyConnectorUnavailable": { - "message": "Unable to reach the Key Connector, try again later." + "message": "Nije moguće spajanje s konektorom za ključ, pokušaj kasnije." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "URL konektora za ključ" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Slanje verifikacijskog kôda e-poštom" }, "sendCode": { - "message": "Send Code" + "message": "Pošalji kôd" }, "codeSent": { - "message": "Code Sent" + "message": "Kôd poslan" }, "verificationCode": { - "message": "Verification Code" + "message": "Kôd za provjeru" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Potvrdite lozinku za nastavak." }, "verificationCodeRequired": { - "message": "Verification code is required." + "message": "Potvrdni kôd je obavezan." }, "invalidVerificationCode": { - "message": "Invalid verification code" + "message": "Nevažeći kôd za provjeru" }, "convertOrganizationEncryptionDesc": { - "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "message": "$ORGANIZATION$ koristi jedinstvenu prijavu SSO s vlastitim poslužiteljem. Članovima organizacije glavna lozinka više nije potrebna.", "placeholders": { "organization": { "content": "$1", @@ -4510,43 +4642,43 @@ } }, "leaveOrganization": { - "message": "Leave Organization" + "message": "Napusti organizaciju" }, "removeMasterPassword": { - "message": "Remove Master Password" + "message": "Ukloni glavnu lozinku" }, "removedMasterPassword": { - "message": "Master password removed." + "message": "Glavna lozinka uklonjena." }, "allowSso": { - "message": "Allow SSO authentication" + "message": "Dopusti jedinstvenu SSO autentifikaciju" }, "allowSsoDesc": { "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." }, "ssoPolicyHelpStart": { - "message": "Enable the", + "message": "Omogući", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpLink": { - "message": "SSO Authentication policy", + "message": "SSO autentifikaciju", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { - "message": "to require all members to log in with SSO.", + "message": "kako bi se svi članovi mogli prijaviti sa SSO.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { "message": "SSO Authentication and Single Organization policies are required to set up Key Connector decryption." }, "memberDecryptionOption": { - "message": "Member Decryption Options" + "message": "Opcije dešifriranja za članove" }, "memberDecryptionPassDesc": { - "message": "Once authenticated, members will decrypt vault data using their Master Passwords." + "message": "Članovi će moći dešifrirati podatke u trezoru koristeći svoje glavne lozinke." }, "keyConnector": { - "message": "Key Connector" + "message": "Konektor za ključ" }, "memberDecryptionKeyConnectorDesc": { "message": "Connect Login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their Master Passwords to decrypt vault data. Contact Bitwarden Support for set up assistance." @@ -4555,21 +4687,51 @@ "message": "\"Login with SSO and Key Connector Decryption\" is enabled. This policy will only apply to Owners and Admins." }, "enabledSso": { - "message": "Enabled SSO" + "message": "SSO omogućen" }, "disabledSso": { - "message": "Disabled SSO" + "message": "SSO onemogućen" }, "enabledKeyConnector": { - "message": "Enabled Key Connector" + "message": "Konektor za ključ omogućen" }, "disabledKeyConnector": { - "message": "Disabled Key Connector" + "message": "Konektor za ključ onemogućen" }, "keyConnectorWarning": { "message": "Once members begin using Key Connector, your Organization cannot revert to Master Password decryption. Proceed only if you are comfortable deploying and managing a key server." }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "Nova obiteljska organizacija" + }, + "acceptOffer": { + "message": "Prihvati ponudu" + }, + "sponsoringOrg": { + "message": "Organizacija sponzor" + }, + "keyConnectorTest": { + "message": "Testiraj" + }, + "keyConnectorTestSuccess": { + "message": "Uspjeh! Konektor za ključ spojen." + }, + "keyConnectorTestFail": { + "message": "Nije moguće spojiti se na konektor za ključ. Provjeri URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Ponuda za sponzorstvo je istekla." + }, + "freeWithSponsorship": { + "message": "BESPLATNO sa sponzorstvom" } } diff --git a/src/locales/hu/messages.json b/src/locales/hu/messages.json index d0c24fb2..e6a3f5d5 100644 --- a/src/locales/hu/messages.json +++ b/src/locales/hu/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Biztosan eltávolításra kerüljön ez a felhasználó?" }, + "removeUserConfirmationKeyConnector": { + "message": "Figyelem! Ennek a felhasználónak kulcskapcsolóra van szüksége a titkosítás kezeléséhez. Ha eltávolítjuk ezt a felhasználót a szervezetből, azzal véglegesen letiltjuk a fiókját. Ez a művelet nem visszavonható. Folytatás?" + }, "externalId": { "message": "Külső azonosító" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Meghívás újraküldése" }, + "resendEmail": { + "message": "Email újraküldése" + }, "hasBeenReinvited": { "message": "$USER$ ismételten meghívásra került.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Az előfizetés összesen $COUNT$ felhasználót tesz lehetővé. A csomagot egy külső szervezet szponzorálja és számlázza ki.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Az előfizetés módosítása a számlázási összegek arányos módosítását eredményezi. Nem hívhatunk meg több, mint $COUNT$ felhasználót az előfizetői helyek növelése nélkül.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ első alkalommal jelentkezett be Sso szolgáltatássl.", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Az egyszeri bejelentkezés konfigurációja mentésre került." }, + "sponsoredFamilies": { + "message": "Díjmentes Bitwarden családi csomag" + }, + "sponsoredFamiliesEligible": { + "message": "A felhasználó és családja jogosult az ingyenes Bitwarden családok programra. Váltsuk ezt be személyes email címmel, hogy az adatok biztonságban legyenek még akkor is, amikor éppen nem dolgozunk." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Váltsuk be ingyenes Bitwarden családoknak előfizetést még ma, hogy az adatok biztonságban legyenek, még akkor is, amikor éppen nem dolgozunk." + }, + "sponsoredFamiliesInclude": { + "message": "A Bitwarden családoknak csomag tartalmazza:" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Prémium hozzáférés legfeljebb 6 felhasználónak" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Megosztott gyűjtemények a családi titkoknak" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Visszaállás díjmentes csomagra" + }, + "redeem": { + "message": "Beváltás" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Válasszuk ki a szponzorálni kívánt szervezetet." + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "A Bitwarden családok beváltásához adjuk meg a személyes email címünket." + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Ha kilépünk ebből a szervezetből vagy eltávolítás történik, a Családi csomag a számlázási időszak végén lejár." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Meglévő szervezet ajánlatának elfogadása vagy új Családi szervezet létrehozása." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Ingyenes Bitwarden Családi csomag szervezetet ajánlottak fel. A folytatáshoz be kell jelentkezni az ajánlatot fogadó fiókba." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Nem sikerült elfogadni az ajánlatot. Küldjük el ismét az ajánlati emailt a vállalati fiókból és próbáljuk újra." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Az ajánlatot nem lehet elfogadni. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Váltsuk be az ingyenes Bitwarden családi szervezet ajánlatot" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Az ingyenes Bitwarden családi szervezet ajánlat beváltásra került." + }, + "redeemed": { + "message": "Beváltva" + }, + "redeemedAccount": { + "message": "Beváltott fiók" + }, + "revokeAccount": { + "message": "$NAME$ fiók visszavonása", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Szponzorálási email ismételt elküldése $NAME$ szponzorációnak", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Díjmentes családi csomag" + }, + "redeemNow": { + "message": "Beváltás most" + }, + "recipient": { + "message": "Címzett" + }, + "removeSponsorship": { + "message": "Szponzoráció eltávolítása" + }, + "removeSponsorshipConfirmation": { + "message": "A szponzorálás eltávolítása után felelősséget vállalunk az előfizetésért és a kapcsolódó számlákért. Biztosan folytatjuk?" + }, + "sponsorshipCreated": { + "message": "A szponzoráció létrejött." + }, + "revoke": { + "message": "Visszavonás" + }, + "emailSent": { + "message": "Az email elküldésre került." + }, + "revokeSponsorshipConfirmation": { + "message": "A fiók eltávolítása után a Családok szervezetének tulajdonosa lesz felelős az előfizetésért és a kapcsolódó számlákért. Biztosan folytatjuk?" + }, + "removeSponsorshipSuccess": { + "message": "A szponzoráció eltávolításra került." + }, "ssoKeyConnectorUnavailable": { "message": "Nem érhető el a kulcskapcsoló. Próbáljuk újra később." }, @@ -4480,19 +4612,19 @@ "message": "Kulcskapcsoló webcím" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Ellenőrző kód elküldése a saját email címre" }, "sendCode": { - "message": "Send Code" + "message": "Kód küldése" }, "codeSent": { - "message": "Code Sent" + "message": "A kód elküldésre került." }, "verificationCode": { "message": "Ellenőrző kód" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "A folytatáshoz meg kell erősíteni a személyazonosságot." }, "verificationCodeRequired": { "message": "Az ellenőrző kód kötelező." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Áttérve kulcskapcsolóra" + }, + "paymentSponsored": { + "message": "Adjunk meg egy, a szervezethez társítandó fizetési módot. Nem kell aggódni, nem kerül semmi felszámításra, hacsak nem választunk további funkciókat vagy ha szponzorálás lejár. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "A szponzorálási ajánlat lejárt, törölhető a létrehozott szervezet a 7 napos próbaidőszak végén jelentkező díj elkerüléséért. Ellenkező esetben bezárhatjuk ezt az üzenetet a szervezet megtartásához és a számlázási felelősség vállalásához." + }, + "newFamiliesOrganization": { + "message": "Új családi szervezet" + }, + "acceptOffer": { + "message": "Ajánlat elfogadása" + }, + "sponsoringOrg": { + "message": "Szponzoráló szervezet" + }, + "keyConnectorTest": { + "message": "Teszt" + }, + "keyConnectorTestSuccess": { + "message": "A művelet sikeres. A kulcskapcsoló elérésre került." + }, + "keyConnectorTestFail": { + "message": "Nem érhető el a kulcskapcsoló. Ellenőrizzük a webcímet." + }, + "sponsorshipTokenHasExpired": { + "message": "A szponzorálási ajánlat lejárt." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/id/messages.json b/src/locales/id/messages.json index 15ba8d8a..89278b84 100644 --- a/src/locales/id/messages.json +++ b/src/locales/id/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Apakah Anda yakin ingin menghapus pengguna ini?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Id Eksternal" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Mengirim kembali undangan" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ telah diundang.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/it/messages.json b/src/locales/it/messages.json index 511fcfe6..676e04e9 100644 --- a/src/locales/it/messages.json +++ b/src/locales/it/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Confermi di voler rimuovere questo utente?" }, + "removeUserConfirmationKeyConnector": { + "message": "Attenzione! Questo utente richiede Key Connector per gestire la crittografia. Rimuovere questo utente dalla propria organizzazione disabiliterà definitivamente l'account. Questa azione non può essere annullata. Vuoi procedere?" + }, "externalId": { "message": "Id esterno" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Invia nuovamente l'invito" }, + "resendEmail": { + "message": "Invia nuovamente l'email" + }, "hasBeenReinvited": { "message": "$USER$ è stato invitato.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Il tuo abbonamento consente un totale di $COUNT$ utenti. Il tuo piano è sponsorizzato e addebitato a un'organizzazione esterna.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Le modifiche apportate al tuo abbonamento comporteranno corrispondenti cambi al totale in fattura. Non è possibile invitare più di $COUNT$ utenti senza aumentare gli slot dell'abbonamento.", "placeholders": { @@ -2996,7 +3011,7 @@ "message": "Siamo passati a chiavi di cifratura più grandi che forniscono maggiore sicurezza e accesso alle funzionalità più recenti. Aggiornare la chiave di cifratura è semplice e veloce. Basta digitare la password principale qui sotto. Questo aggiornamento diventerà obbligatorio in futuro." }, "updateEncryptionKeyWarning": { - "message": "Dopo aver aggiornato la chiave di cifratura, ti sarà richiesto di disconnetterti e connetterti in tutte le applicazioni Bitwarden che stai utilizzando (come l'applicazione mobile o l'estensione del browser). Non effettuando la disconnessione e la riconnessione (per scaricare la nuova chiave di cifratura) potrà risultare in dati danneggiati, Cercheremo di disconnetterti automaticamente, ma potrà esserci un ritardo." + "message": "Dopo aver aggiornato la chiave di cifratura, ti sarà richiesto di disconnetterti e connetterti in tutte le applicazioni Bitwarden che stai utilizzando (come l'applicazione mobile o l'estensione del browser). La mancata disconnessione e successiva riconnessione (per scaricare la nuova chiave di cifratura) potrebbe condurre al danneggiamento dei dati. Cercheremo di disconnetterti automaticamente, ma potrebbe esserci un ritardo." }, "updateEncryptionKeyExportWarning": { "message": "Anche le esportazioni cifrate che hai salvato non saranno più valide." @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "La configurazione del Single Sign-On è stata salvata." }, + "sponsoredFamilies": { + "message": "Bitwarden Families gratuito" + }, + "sponsoredFamiliesEligible": { + "message": "Tu e la tua famiglia siete eleggibili per Bitwarden Families gratis. Aderisci all'offerta con la tua mail personale e mantieni i tuoi dati al sicuro anche quando non sei a lavoro." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Riscatta oggi il tuo piano Bitwarden per famiglie gratuito per mantenere i tuoi dati al sicuro anche quando non sei al lavoro." + }, + "sponsoredFamiliesInclude": { + "message": "Il piano Bitwarden Families include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Accesso premium fino a 6 utenti" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Raccolte condivise per segreti di famiglia" + }, + "badToken": { + "message": "Il link non è più valido. Per favore chiedi allo sponsor di inviare nuovamente l'offerta." + }, + "reclaimedFreePlan": { + "message": "Piano gratuito riscattato" + }, + "redeem": { + "message": "Riscatta" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Seleziona l'organizzazione che desideri sponsorizzare" + }, + "familiesSponsoringOrgSelect": { + "message": "Quale offerta gratis per famiglie vorresti riscattare?" + }, + "sponsoredFamiliesEmail": { + "message": "Digita la tua email personale per riscattare Bitwarden per famiglie" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Se lasci o sei rimosso da questa organizzazione, il piano Famiglie scadrà alla fine del periodo di fatturazione." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accetta l'offerta per un'organizzazione esistente o crea una nuova organizzazione Famiglie." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Ti è stato offerto un piano gratuito per Bitwarden per famiglie. Per continuare, devi accedere all'account che ha ricevuto l'offerta." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Impossibile accettare l'offerta. Invia nuovamente l'email di offerta dal tuo account aziendale e riprova." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Impossibile accettare l'offerta. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Riscatta l'offerta di Bitwarden Families (Organizzazione)" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Offerta gratuita di Bitwarden per famiglie riscattata correttamente" + }, + "redeemed": { + "message": "Riscattato" + }, + "redeemedAccount": { + "message": "Account riscattato" + }, + "revokeAccount": { + "message": "Revoca l'account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Reinvia l'email sponsor allo sponsor $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Piano Families gratis" + }, + "redeemNow": { + "message": "Riscatta ora" + }, + "recipient": { + "message": "Destinatario" + }, + "removeSponsorship": { + "message": "Rimuovi sponsorizzazione" + }, + "removeSponsorshipConfirmation": { + "message": "Dopo aver rimosso una sponsorizzazione, sarai responsabile di questo abbonamento e delle relative fatture. Sei sicuro di voler continuare?" + }, + "sponsorshipCreated": { + "message": "Sponsorizzazione creata" + }, + "revoke": { + "message": "Revoca" + }, + "emailSent": { + "message": "Email inviata" + }, + "revokeSponsorshipConfirmation": { + "message": "Dopo aver rimosso questo account, il proprietario dell'organizzazione Famiglie sarà responsabile di questo abbonamento e delle relative fatture. Sei sicuro di voler continuare?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorizzazione rimossa" + }, "ssoKeyConnectorUnavailable": { "message": "Impossibile raggiungere il key connector, riprova più tardi." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrato al key connector" + }, + "paymentSponsored": { + "message": "Fornisci un metodo di pagamento da associare all'organizzazione. Non ti preoccupare, non ti addebiteremo nulla a meno che non selezioni funzionalità aggiuntive o la tua sponsorizzazione scada. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "L'offerta di sponsorizzazione è scaduta e puoi eliminare l'organizzazione creata per evitare un addebito al termine della prova di 7 giorni. Altrimenti puoi chiudere questa richiesta per mantenere l'organizzazione e assumerti la responsabilità della fatturazione." + }, + "newFamiliesOrganization": { + "message": "Nuova organizzazione Famiglie" + }, + "acceptOffer": { + "message": "Accetta l'offerta" + }, + "sponsoringOrg": { + "message": "Organizzazione sponsor" + }, + "keyConnectorTest": { + "message": "Prova" + }, + "keyConnectorTestSuccess": { + "message": "Key connector raggiunto!" + }, + "keyConnectorTestFail": { + "message": "Impossibile raggiungere il Key Connector. Controlla l'URL." + }, + "sponsorshipTokenHasExpired": { + "message": "L'offerta di sponsorizzazione è scaduta." + }, + "freeWithSponsorship": { + "message": "GRATUITO con sponsorizzazione" } } diff --git a/src/locales/ja/messages.json b/src/locales/ja/messages.json index 8485c867..44b77fff 100644 --- a/src/locales/ja/messages.json +++ b/src/locales/ja/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "本当にこのユーザーを削除してもよろしいですか?" }, + "removeUserConfirmationKeyConnector": { + "message": "警告! このユーザーは暗号化を管理するためにキー コネクタが必要です。 このユーザーを組織から削除すると、アカウントが完全に無効になります。この操作は元に戻せません。続行しますか?" + }, "externalId": { "message": "外部ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "招待を再送信" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$が再招待されました。", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "受信者" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "キーコネクターに到達できません。後でもう一度お試しください。" }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "キーコネクターに移行しました" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "テスト" + }, + "keyConnectorTestSuccess": { + "message": "成功!キーコネクタに到達しました。" + }, + "keyConnectorTestFail": { + "message": "キーコネクタに接続できません。URLを確認してください。" + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/ka/messages.json b/src/locales/ka/messages.json index feb79c77..edb44cf2 100644 --- a/src/locales/ka/messages.json +++ b/src/locales/ka/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/kn/messages.json b/src/locales/kn/messages.json index 112a1b0c..c9a0fc3f 100644 --- a/src/locales/kn/messages.json +++ b/src/locales/kn/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "ಈ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "ಬಾಹ್ಯ ಐಡಿ" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "ಆಹ್ವಾನವನ್ನು ಮರುಹೊಂದಿಸಿ" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ ಅನ್ನು ಮರುಸೃಷ್ಟಿಸಲಾಗಿದೆ.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/ko/messages.json b/src/locales/ko/messages.json index dacaaceb..97513273 100644 --- a/src/locales/ko/messages.json +++ b/src/locales/ko/messages.json @@ -167,7 +167,7 @@ "message": "참 / 거짓" }, "cfTypeLinked": { - "message": "Linked", + "message": "연결됨", "description": "This describes a field that is 'linked' (related) to another field." }, "remove": { @@ -316,7 +316,7 @@ "message": "성" }, "fullName": { - "message": "Full Name" + "message": "전체 이름" }, "address1": { "message": "주소 1" @@ -1006,7 +1006,7 @@ "message": "삭제 된 조직 보관함" }, "vaultAccessedByProvider": { - "message": "Vault accessed by provider." + "message": "보관함에 제공자가 액세스했습니다." }, "purgeVaultDesc": { "message": "보관함 내의 모든 항목과 폴더를 삭제하려면 다음 단계로 나아가십시오. 조직에 속한 공유 항목들은 삭제되지 않습니다." @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "정말 이 사용자를 제거하시겠습니까?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "외부 ID" }, @@ -2246,7 +2249,7 @@ "message": "확인됨" }, "clientOwnerEmail": { - "message": "Client Owner Email" + "message": "클라이언트 소유자 이메일" }, "owner": { "message": "소유자" @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "초대장 다시 보내기" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$가 다시 초대되었습니다.", "placeholders": { @@ -2879,7 +2885,7 @@ "message": "Set a seat limit for your subscription. Once this limit is reached, you will not be able to invite new users." }, "maxSeatLimit": { - "message": "Maximum Seat Limit (optional)", + "message": "최대 시트 제한 (선택)", "description": "Upper limit of seats to allow through autoscaling" }, "maxSeatCost": { @@ -2906,16 +2912,16 @@ } }, "limitSubscription": { - "message": "Limit Subscription (Optional)" + "message": "구독 제한 (선택)" }, "subscriptionSeats": { - "message": "Subscription Seats" + "message": "구독 시트" }, "subscriptionUpdated": { - "message": "Subscription updated" + "message": "구독 업데이트됨" }, "additionalOptions": { - "message": "Additional Options" + "message": "추가 옵션" }, "additionalOptionsDesc": { "message": "구독과 관련하여 추가적인 도움이 필요한 경우 고객 지원에 문의하십시오." @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -3836,22 +3851,22 @@ "message": "모든 컬렉션 관리" }, "createNewCollections": { - "message": "Create New Collections" + "message": "새 컬렉션 만들기" }, "editAnyCollection": { - "message": "Edit Any Collection" + "message": "아무 컬렉션 편집" }, "deleteAnyCollection": { - "message": "Delete Any Collection" + "message": "아무 컬렉션 삭제" }, "manageAssignedCollections": { "message": "할당된 컬렉션 관리" }, "editAssignedCollections": { - "message": "Edit Assigned Collections" + "message": "할당된 컬렉션 수정" }, "deleteAssignedCollections": { - "message": "Delete Assigned Collections" + "message": "할당된 컬렉션 삭제" }, "manageGroups": { "message": "그룹 관리" @@ -4040,7 +4055,7 @@ } }, "eventResetSsoLink": { - "message": "Reset Sso link for user $ID$", + "message": "사용자 $ID$ SSO 링크 초기화", "placeholders": { "id": { "content": "$1", @@ -4181,7 +4196,7 @@ "message": "비밀번호 재설정 관리 권한으로 사용자 관리도 활성화해야 합니다" }, "setupProvider": { - "message": "Provider Setup" + "message": "공급자 설정" }, "setupProviderLoginDesc": { "message": "You've been invited to setup a new provider. To continue, you need to log in or create a new Bitwarden account." @@ -4190,22 +4205,22 @@ "message": "Please enter the details below to complete the provider setup. Contact Customer Support if you have any questions." }, "providerName": { - "message": "Provider Name" + "message": "공급자 이름" }, "providerSetup": { "message": "The provider has been set up." }, "clients": { - "message": "Clients" + "message": "클라이언트" }, "providerAdmin": { - "message": "Provider Admin" + "message": "공급자 관리자" }, "providerAdminDesc": { "message": "The highest access user that can manage all aspects of your provider as well as access and manage client organizations." }, "serviceUser": { - "message": "Service User" + "message": "서비스 사용자" }, "serviceUserDesc": { "message": "Service users can access and manage all client organizations." @@ -4214,7 +4229,7 @@ "message": "Invite a new user to your provider by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." }, "joinProvider": { - "message": "Join Provider" + "message": "공급자 참가" }, "joinProviderDesc": { "message": "You've been invited to join the provider listed above. To accept the invitation, you need to log in or create a new Bitwarden account." @@ -4229,19 +4244,19 @@ "message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the provider until they are confirmed." }, "provider": { - "message": "Provider" + "message": "공급자" }, "newClientOrganization": { - "message": "New Client Organization" + "message": "새 클라이언트 조직" }, "newClientOrganizationDesc": { "message": "Create a new client organization that will be associated with you as the provider. You will be able to access and manage this organization." }, "addExistingOrganization": { - "message": "Add Existing Organization" + "message": "이미 있는 조직 추가" }, "myProvider": { - "message": "My Provider" + "message": "내 공급자" }, "addOrganizationConfirmation": { "message": "Are you sure you want to add $ORGANIZATION$ as a client to $PROVIDER$?", @@ -4269,10 +4284,10 @@ } }, "providerIsDisabled": { - "message": "Provider is disabled." + "message": "공급자가 비활성화되었습니다." }, "providerUpdated": { - "message": "Provider updated" + "message": "공급자 업데이트됨" }, "yourProviderIs": { "message": "Your provider is $PROVIDER$. They have administrative and billing privileges for your organization.", @@ -4296,25 +4311,25 @@ "message": "Are you sure you want to detach this organization? The organization will continue to exist but will no longer be managed by the provider." }, "add": { - "message": "Add" + "message": "추가" }, "updatedMasterPassword": { - "message": "Updated Master Password" + "message": "마스터 비밀번호 변경됨" }, "updateMasterPassword": { - "message": "Update Master Password" + "message": "마스터 비밀번호 변경" }, "updateMasterPasswordWarning": { "message": "Your Master Password was recently changed by an administrator in your organization. In order to access the vault, you must update your Master Password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." }, "maximumVaultTimeout": { - "message": "Vault Timeout" + "message": "보관함 시간 제한" }, "maximumVaultTimeoutDesc": { "message": "Configure a maximum vault timeout for all users." }, "maximumVaultTimeoutLabel": { - "message": "Maximum Vault Timeout" + "message": "최대 보관함 시간 제한" }, "invalidMaximumVaultTimeout": { "message": "Invalid Maximum Vault Timeout." @@ -4339,31 +4354,31 @@ } }, "customVaultTimeout": { - "message": "Custom Vault Timeout" + "message": "사용자 지정 보관함 시간 제한" }, "vaultTimeoutToLarge": { "message": "Your vault timeout exceeds the restriction set by your organization." }, "disablePersonalVaultExport": { - "message": "Disable Personal Vault Export" + "message": "개인 보관함 내보내기 비활성화" }, "disablePersonalVaultExportDesc": { "message": "Prohibits users from exporting their private vault data." }, "vaultExportDisabled": { - "message": "Vault Export Disabled" + "message": "보관함 내보내기 비활성화됨" }, "personalVaultExportPolicyInEffect": { "message": "One or more organization policies prevents you from exporting your personal vault." }, "selectType": { - "message": "Select SSO Type" + "message": "SSO 유형 선택" }, "type": { "message": "유형" }, "openIdConnectConfig": { - "message": "OpenID Connect Configuration" + "message": "OpenID 연결 설정" }, "samlSpConfig": { "message": "SAML Service Provider Configuration" @@ -4372,25 +4387,25 @@ "message": "SAML Identity Provider Configuration" }, "callbackPath": { - "message": "Callback Path" + "message": "콜백 경로" }, "signedOutCallbackPath": { - "message": "Signed Out Callback Path" + "message": "로그아웃 콜백 경로" }, "authority": { - "message": "Authority" + "message": "기관" }, "clientId": { - "message": "Client ID" + "message": "클라이언트 ID" }, "clientSecret": { - "message": "Client Secret" + "message": "클라이언트 비밀" }, "metadataAddress": { - "message": "Metadata Address" + "message": "메타데이터 액세스" }, "oidcRedirectBehavior": { - "message": "OIDC Redirect Behavior" + "message": "OIDC 리다이렉트 동작" }, "getClaimsFromUserInfoEndpoint": { "message": "Get Claims From User Info Endpoint" @@ -4399,10 +4414,10 @@ "message": "Additional/Custom Scopes (comma delimited)" }, "additionalUserIdClaimTypes": { - "message": "Additional/Custom User ID Claim Types (comma delimited)" + "message": "추가/사용자 지정 사용자 ID 클레임 유형 (쉼표로 구분됨)" }, "additionalEmailClaimTypes": { - "message": "Additional/Custom Email Claim Types (comma delimited)" + "message": "추가/사용자 지정 이메일 클레임 유형 (쉼표로 구분됨)" }, "additionalNameClaimTypes": { "message": "Additional/Custom Name Claim Types (comma delimited)" @@ -4414,52 +4429,52 @@ "message": "Expected \"acr\" Claim Value In Response (acr validation)" }, "spEntityId": { - "message": "SP Entity ID" + "message": "SP 엔티티 ID" }, "spMetadataUrl": { - "message": "SAML 2.0 Metadata URL" + "message": "SAML 2.0 메타데이터 URL" }, "spAcsUrl": { "message": "Assertion Consumer Service (ACS) URL" }, "spNameIdFormat": { - "message": "Name ID Format" + "message": "이름 ID 형식" }, "spOutboundSigningAlgorithm": { - "message": "Outbound Signing Algorithm" + "message": "아웃바운드 서명 알고리즘" }, "spSigningBehavior": { - "message": "Signing Behavior" + "message": "로그인 동작" }, "spMinIncomingSigningAlgorithm": { "message": "Minimum Incoming Signing Algorithm" }, "spWantAssertionsSigned": { - "message": "Want Assertions Signed" + "message": "어써션 서명 필요" }, "spValidateCertificates": { - "message": "Validate Certificates" + "message": "인증서 확인" }, "idpEntityId": { - "message": "Entity ID" + "message": "엔티티 ID" }, "idpBindingType": { - "message": "Binding Type" + "message": "바인딩 유형" }, "idpSingleSignOnServiceUrl": { - "message": "Single Sign On Service URL" + "message": "SSO 서비스 URL" }, "idpSingleLogoutServiceUrl": { - "message": "Single Log Out Service URL" + "message": "SLO 서비스 URL" }, "idpArtifactResolutionServiceUrl": { "message": "Artifact Resolution Service URL" }, "idpX509PublicCert": { - "message": "X509 Public Certificate" + "message": "X509 공개 인증서" }, "idpOutboundSigningAlgorithm": { - "message": "Outbound Signing Algorithm" + "message": "아웃바운드 서명 알고리즘" }, "idpAllowUnsolicitedAuthnResponse": { "message": "Allow Unsolicited Authentication Response" @@ -4473,32 +4488,149 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "키 커넥터 URL" }, "sendVerificationCode": { "message": "Send a verification code to your email" }, "sendCode": { - "message": "Send Code" + "message": "코드 전송" }, "codeSent": { - "message": "Code Sent" + "message": "코드 전송됨" }, "verificationCode": { - "message": "Verification Code" + "message": "인증 코드" }, "confirmIdentity": { "message": "Confirm your identity to continue." }, "verificationCodeRequired": { - "message": "Verification code is required." + "message": "인증 코드는 반드시 입력해야 합니다." }, "invalidVerificationCode": { - "message": "Invalid verification code" + "message": "유효하지 않은 확인 코드" }, "convertOrganizationEncryptionDesc": { "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", @@ -4510,26 +4642,26 @@ } }, "leaveOrganization": { - "message": "Leave Organization" + "message": "조직 나가기" }, "removeMasterPassword": { - "message": "Remove Master Password" + "message": "마스터 비밀번호 제거" }, "removedMasterPassword": { - "message": "Master password removed." + "message": "마스터 비밀번호가 제거되었습니다." }, "allowSso": { - "message": "Allow SSO authentication" + "message": "SSO 인증 허용" }, "allowSsoDesc": { "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." }, "ssoPolicyHelpStart": { - "message": "Enable the", + "message": "활성화:", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpLink": { - "message": "SSO Authentication policy", + "message": "SSO 인증 정책", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { @@ -4540,13 +4672,13 @@ "message": "SSO Authentication and Single Organization policies are required to set up Key Connector decryption." }, "memberDecryptionOption": { - "message": "Member Decryption Options" + "message": "멤버 복호화 옵션" }, "memberDecryptionPassDesc": { "message": "Once authenticated, members will decrypt vault data using their Master Passwords." }, "keyConnector": { - "message": "Key Connector" + "message": "키 커넥터" }, "memberDecryptionKeyConnectorDesc": { "message": "Connect Login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their Master Passwords to decrypt vault data. Contact Bitwarden Support for set up assistance." @@ -4555,21 +4687,51 @@ "message": "\"Login with SSO and Key Connector Decryption\" is enabled. This policy will only apply to Owners and Admins." }, "enabledSso": { - "message": "Enabled SSO" + "message": "SSO 활성화됨" }, "disabledSso": { - "message": "Disabled SSO" + "message": "SSO 비활성화됨" }, "enabledKeyConnector": { - "message": "Enabled Key Connector" + "message": "키 커넥터 활성화됨" }, "disabledKeyConnector": { - "message": "Disabled Key Connector" + "message": "키 커넥터 비활성화됨" }, "keyConnectorWarning": { "message": "Once members begin using Key Connector, your Organization cannot revert to Master Password decryption. Proceed only if you are comfortable deploying and managing a key server." }, "migratedKeyConnector": { - "message": "Migrated to Key Connector" + "message": "키 커넥터로 마이그레이션됨" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "테스트" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/lv/messages.json b/src/locales/lv/messages.json index d03b1220..e12f981e 100644 --- a/src/locales/lv/messages.json +++ b/src/locales/lv/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Vai tiešām noņemt šo lietotāju?" }, + "removeUserConfirmationKeyConnector": { + "message": "Uzmanību! Šim lietotājam ir nepieciešams Key Connector, lai pārvaldītu šifrēšanu. Lietotāja noņemšana no apvienības neatgriezeniski atspējos viņa kontu. Šī darbība nevar tikt atdarīta. Vai turpināt?" + }, "externalId": { "message": "Ārējais ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Atkārtoti nosūtīt uzaicinājumu" }, + "resendEmail": { + "message": "Atkārtoti nosūtīt e-pastu" + }, "hasBeenReinvited": { "message": "$USER$ tika atkārtoti uzaicināts.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Abonements pieļauj $COUNT$ lietotāju(s). Plānu ir apmaksāts un norēķinus veic ārēja apvienība.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Abonementa pielāgojumi izvērtīsies attiecīgās izmaiņās kopējā rēķinā. Nav iespējams uzaicināt vairāk kā $COUNT$ lietotājus bez abonementu vietu skaita palielināšanas.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ pirmo reizi pierakstījās izmantojot vienoto pieteikšanos", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Vienotās pieteikšanās uzstādījumi tika saglabāti." }, + "sponsoredFamilies": { + "message": "Bezmaksas Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "Tu un Tava ģimene esat atbilstīgi bezmaksas Bitwarden Families. Piesakies ar personīgo e-pasta adresi, lai turētu datus drošībā pat tad, kad neesi darbā!" + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium piekļuve līdz 6 lietotājiem" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Ģimenes noslēpumu kopīgotie krājumi" + }, + "badToken": { + "message": "Saite vairs nav derīga. Lūdz pabalstītāju atkārtoti nosūtīt piedāvājumu!" + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Izmantot" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Kuru bezmaksas ģimeņu piedāvājumu Tu vēlies izmantot?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Nav iespējams apstiprināt piedāvājumu. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Izmantots" + }, + "redeemedAccount": { + "message": "Izmantots konts" + }, + "revokeAccount": { + "message": "Atsaukt kontu $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Noņemt pabalstītājdarbību" + }, + "removeSponsorshipConfirmation": { + "message": "Pēc pabalstītājdarbības noņemšanas Tu būsi atbildīgs par šo abonementu un saistītajiem rēķiniem. Vai tiešām turpināt?" + }, + "sponsorshipCreated": { + "message": "Izveidota pabalstītājdarbība" + }, + "revoke": { + "message": "Atsaukt" + }, + "emailSent": { + "message": "E-pasts nosūtīts" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Noņemta pabalstītājdarbība" + }, "ssoKeyConnectorUnavailable": { "message": "Nav iespējams sasniegt Key Connector, tāpēc vēlāk jāmēģina atkal." }, @@ -4480,19 +4612,19 @@ "message": "Key Connector URL" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Sūtīt apstiprinājuma kodu uz e-pastu" }, "sendCode": { - "message": "Send Code" + "message": "Nosūtīt kodu" }, "codeSent": { - "message": "Code Sent" + "message": "Kods nosūtīts" }, "verificationCode": { "message": "Apstiprinājuma kods" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Apstiprināt identitāti, lai turpinātu." }, "verificationCodeRequired": { "message": "Ir nepieciešams apstiprinājuma kods." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Pāriets uz Key Connector" + }, + "paymentSponsored": { + "message": "Lūgums norādīt maksājumu veidu, ko piesaistīt apvienībai. Satraukties nevajag, jo iemaksa netiks ieturēta, ja vien netiks izvēlētas papildu iespējas vai izbeidzas pabalstītājdarbība. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "Jauna ģimeņu apvienība" + }, + "acceptOffer": { + "message": "Pieņemt piedāvājumu" + }, + "sponsoringOrg": { + "message": "Atbalstoša apvienība" + }, + "keyConnectorTest": { + "message": "Pārbaude" + }, + "keyConnectorTestSuccess": { + "message": "Panākums! Key Connector sasniegts." + }, + "keyConnectorTestFail": { + "message": "Nav iespējams sasniegt Key Connector. Jāpārbauda URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Atbalsta piedāvājums ir beidzies." + }, + "freeWithSponsorship": { + "message": "Bezmaksas ar pabalstītājdarbību" } } diff --git a/src/locales/ml/messages.json b/src/locales/ml/messages.json index b95482a5..d986ec95 100644 --- a/src/locales/ml/messages.json +++ b/src/locales/ml/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "ഈ ഉപയോക്താവിനെ നീക്കംചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "ബാഹ്യ Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "ക്ഷണം വീണ്ടും അയയ്‌ക്കുക" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$-നെ വീണ്ടും ക്ഷണിച്ചു.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/nb/messages.json b/src/locales/nb/messages.json index f178139d..c6abbdec 100644 --- a/src/locales/nb/messages.json +++ b/src/locales/nb/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Er du sikker på at du vil slette denne brukeren?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Ekstern ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Send invitasjonen på nytt" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ har blitt invitert på nytt.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/nl/messages.json b/src/locales/nl/messages.json index 997dd81c..b3732143 100644 --- a/src/locales/nl/messages.json +++ b/src/locales/nl/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Weet je zeker dat je deze gebruiker wilt verwijderen?" }, + "removeUserConfirmationKeyConnector": { + "message": "Waarschuwing! Deze gebruiker vereist de Key Connector om de versleuteling te beheren. Als je deze gebruiker uit je organisatie verwijdert, wordt zijn account permanent uitgeschakeld. Deze actie kan niet ongedaan worden gemaakt. Wil je doorgaan?" + }, "externalId": { "message": "Externe ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Uitnodiging opnieuw versturen" }, + "resendEmail": { + "message": "E-mail opnieuw versturen" + }, "hasBeenReinvited": { "message": "$USER$ is opnieuw uitgenodigd.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Je abonnement staat $COUNT$ gebruikers toe. Je abonnement wordt gesponsord en gefactureerd aan een externe organisatie.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Aanpassingen aan je abonnement leiden tot evenredige wijzigingen in uw factuurtotaal. Je kunt niet meer dan $COUNT$ gebruikers uitnodigen zonder je abonnementsplaatsen te verhogen.", "placeholders": { @@ -4473,8 +4488,125 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuratie is opgeslagen." }, + "sponsoredFamilies": { + "message": "Gratis Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "Jij en je familie komen in aanmerking voor gratis Bitwarden Families. Verzilver met je persoonlijke e-mail om je gegevens veilig te houden, zelfs als je niet op het werk bent." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Verzilver je gratis Bitwarden Families vandaag om je gegevens veilig te houden, zelfs wanneer je niet aan het werk bent." + }, + "sponsoredFamiliesInclude": { + "message": "Bitwarden Families omvat" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium-toegang voor maximaal 6 gebruikers" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Gedeelde collecties voor familiegeheimen" + }, + "badToken": { + "message": "De link is niet langer geldig. Zorg ervoor dat de sponsors de uitnodiging opnieuw versturen." + }, + "reclaimedFreePlan": { + "message": "Gratis abonnement hergebruikt" + }, + "redeem": { + "message": "Verzilveren" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Selecteer de organisatie die je wilt sponsoren" + }, + "familiesSponsoringOrgSelect": { + "message": "Welke gratis Families wil je inwisselen?" + }, + "sponsoredFamiliesEmail": { + "message": "Voer je persoonlijke e-mailadres in om Bitwarden Families te verzilveren" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Als je vertrekt of verwijderd wordt uit deze organisatie, vervalt je Families-plan aan het einde van de factureringsperiode." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accepteer aanbod voor een bestaande organisatie of maak een nieuwe Families-organisatie aan." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Je hebt een gratis Bitwarden Families Plan-organisatie aangeboden gekregen. Om door te gaan, moet je inloggen op het account dat de aanbieding heeft ontvangen." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Kan aanbieding niet accepteren. Verstuur de aanbieding opnieuw via je bedrijfsaccount en probeer het opnieuw." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Kan aanbieding niet accepteren. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Gratis Bitwarden Families-organisatieaanbod verzilveren" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Gratis Bitwarden Families-aanbod succesvol verzilverd" + }, + "redeemed": { + "message": "Verzilverd" + }, + "redeemedAccount": { + "message": "Account verzilverd" + }, + "revokeAccount": { + "message": "Account $NAME$ intrekken", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Sponsoring e-mail opnieuw verzenden naar $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Gratis Families Plan" + }, + "redeemNow": { + "message": "Nu verzilveren" + }, + "recipient": { + "message": "Ontvanger" + }, + "removeSponsorship": { + "message": "Sponsoring verwijderen" + }, + "removeSponsorshipConfirmation": { + "message": "Na het verwijderen van sponsoring ben je verantwoordelijk voor dit abonnement en de bijbehorende facturen. Weet je zeker dat je wilt doorgaan?" + }, + "sponsorshipCreated": { + "message": "Sponsoring aangemaakt" + }, + "revoke": { + "message": "Intrekken" + }, + "emailSent": { + "message": "E-mail verzonden" + }, + "revokeSponsorshipConfirmation": { + "message": "Als je dit account verwijderd is de eigenaar van de Families-organisatie verantwoordelijk voor dit abonnement en de bijbehorende facturen. Weet je zeker dat je wilt doorgaan?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsoring verwijderd" + }, "ssoKeyConnectorUnavailable": { - "message": "Kan de sleutelconnector niet bereiken, probeer het later opnieuw." + "message": "Kan de Key Connector niet bereiken, probeer het later opnieuw." }, "keyConnectorUrl": { "message": "Key Connector URL" @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Gemigreerd naar Key Connector" + }, + "paymentSponsored": { + "message": "Geef een betalingsmethode om aan de organisatie te koppelen. Maak je geen zorgen, we brengen niets in rekening tenzij je aanvullende functies kiest of je sponsoring verloopt. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "De sponsoring is verlopen. Je kunt de organisatie die je hebt aangemaakt verwijderen om kosten aan het einde van je proefperiode van 7 dagen te voorkomen. Anders kun je deze pop-up sluiten om de organisatie te behouden en factureringsverantwoordelijkheid te nemen." + }, + "newFamiliesOrganization": { + "message": "Nieuwe Families-oganisatie" + }, + "acceptOffer": { + "message": "Aanbod accepteren" + }, + "sponsoringOrg": { + "message": "Sponsoringorganisatie" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Gelukt! Key Connector bereikt." + }, + "keyConnectorTestFail": { + "message": "Kan Key Connector niet bereiken. Controleer de URL." + }, + "sponsorshipTokenHasExpired": { + "message": "De sponsoring is verlopen." + }, + "freeWithSponsorship": { + "message": "GRATIS met sponsoring" } } diff --git a/src/locales/nn/messages.json b/src/locales/nn/messages.json index e03fb9ff..6677a89f 100644 --- a/src/locales/nn/messages.json +++ b/src/locales/nn/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/pl/messages.json b/src/locales/pl/messages.json index 1f6a7a67..a8f5f528 100644 --- a/src/locales/pl/messages.json +++ b/src/locales/pl/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Czy na pewno chcesz usunąć tego użytkownika?" }, + "removeUserConfirmationKeyConnector": { + "message": "Uwaga! Ten użytkownik wymaga połączenia kluczy do zarządzania szyfrowaniem. Usunięcie tego użytkownika z Twojej organizacji spowoduje trwałe wyłączenie jego konta. Tej czynności nie można cofnąć. Czy chcesz kontynuować?" + }, "externalId": { "message": "Identyfikator zewnętrzny" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Wyślij ponownie zaproszenie" }, + "resendEmail": { + "message": "Wyślij e-mail ponownie" + }, "hasBeenReinvited": { "message": "Użytkownik $USER$ został ponownie zaproszony.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Twoja subskrypcja pozwala na utworzenie $COUNT$ użytkowników. Twój plan jest sponsorowany i opłacany przez zewnętrzną organizację.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Zmiany w subskrypcji spowodują proporcjonalne zmiany w rozliczeniach. Nie można zaprosić więcej niż $COUNT$ użytkowników bez zwiększenia liczby stanowisk w subskrypcji.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ zalogował się przy użyciu SSO po raz pierwszy", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Konfiguracja logowania jednokrotnego została zapisana." }, + "sponsoredFamilies": { + "message": "Darmowe rodziny Bitwarden" + }, + "sponsoredFamiliesEligible": { + "message": "Ty i Twoja rodzina kwalifikujecie się do bezpłatnych rodzin Bitwarden. Otrzymaj dostęp wykorzystując swój osobisty e-mail, aby zabezpieczyć swoje dane nawet wtedy, gdy nie jesteś w pracy." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Zrealizuj swój darmowy Bitwarden dla Rodzin, aby zapewnić bezpieczeństwo swoich danych nawet wtedy, gdy nie jesteś w pracy." + }, + "sponsoredFamiliesInclude": { + "message": "Plan Rodziny Bitwarden zawiera" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Dostęp premium dla maksymalnie 6 użytkowników" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Udostępnione kolekcje dla sekretów rodziny" + }, + "badToken": { + "message": "Link nie jest już ważny. Prosimy o ponowne wysłanie oferty przez sponsora." + }, + "reclaimedFreePlan": { + "message": "Odzyskano bezpłatny plan" + }, + "redeem": { + "message": "Wykup" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Wybierz organizację, którą chcesz za sponsorować" + }, + "familiesSponsoringOrgSelect": { + "message": "Którą z darmowych ofert rodzinnych chciałbyś użyć?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Wykupione" + }, + "redeemedAccount": { + "message": "Konto wykupione" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Darmowy plan rodzin" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Wiadomość została wysłana" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Nie można nawiązać połączenia z serwerem Key Connector. Spróbuj ponownie później." }, @@ -4480,7 +4612,7 @@ "message": "Adres URL serwera Key Connector" }, "sendVerificationCode": { - "message": "Wyślij kod weryfikacyjny na mój adres e-mail" + "message": "Wyślij kod weryfikacyjny na adres e-mail" }, "sendCode": { "message": "Wyślij kod" @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Przeniesiony do serwera Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "Nowa organizacja rodzin" + }, + "acceptOffer": { + "message": "Zaakceptuj ofertę" + }, + "sponsoringOrg": { + "message": "Organizacja sponsorska" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Połączenie z serwerem Key Connector zostało nawiązane." + }, + "keyConnectorTestFail": { + "message": "Nie można nawiązać połączenia z serwerem Key Connector. Sprawdź adres URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Oferta sponsorowania wygasła." + }, + "freeWithSponsorship": { + "message": "DARMOWA ze sponsorowaniem" } } diff --git a/src/locales/pt_BR/messages.json b/src/locales/pt_BR/messages.json index 9dd26c9f..4d0d3488 100644 --- a/src/locales/pt_BR/messages.json +++ b/src/locales/pt_BR/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Você tem certeza que deseja remover este(a) usuário(a)?" }, + "removeUserConfirmationKeyConnector": { + "message": "Aviso! Este usuário precisa do Conector de Chave para gerenciar sua criptografia. Remover este usuário de sua organização desativará permanentemente sua conta. Essa ação não pode ser desfeita. Você quer prosseguir?" + }, "externalId": { "message": "ID externa" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Reenviar o Convite" }, + "resendEmail": { + "message": "Reenviar E-mail" + }, "hasBeenReinvited": { "message": "$USER$ foi convidado(a).", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Sua assinatura permite um total de $COUNT$ usuários. Seu plano é patrocinado e cobrado por uma organização externa.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Ajustes em sua assinatura resultarão em alterações rateadas em seus totais de cobrança. Você não pode convidar mais de $COUNT$ usuários sem aumentar suas vagas de assinatura.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Configuração de logon único foi salva." }, + "sponsoredFamilies": { + "message": "Bitwarden Families Gratuito" + }, + "sponsoredFamiliesEligible": { + "message": "Você e sua família estão elegíveis para o Bitwarden Families Gratuito. Resgate com seu e-mail pessoal para manter seus dados seguros mesmo quando você não estiver no trabalho." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Resgate o seu plano Bitwarden for Families Grátis hoje para manter seus dados seguros mesmo quando você não estiver no trabalho." + }, + "sponsoredFamiliesInclude": { + "message": "O plano Bitwarden Families inclui" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Acesso premium para até 6 usuários" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Coleções compartilhadas de segredos de Família" + }, + "badToken": { + "message": "O link não é mais válido. Peça ao patrocinador para reenviar a oferta." + }, + "reclaimedFreePlan": { + "message": "Plano gratuito recuperado" + }, + "redeem": { + "message": "Resgatar" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Selecione a organização que você gostaria de patrocinar" + }, + "familiesSponsoringOrgSelect": { + "message": "Qual oferta do Families Grátis você gostaria de resgatar?" + }, + "sponsoredFamiliesEmail": { + "message": "Digite seu e-mail pessoal para resgatar o Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Se você sair ou for removido desta organização, seu plano de Familiares irá expirar no final do período de cobrança." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Aceite a oferta de uma organização existente ou crie uma nova organização de Famílias." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Foi oferecida a você uma Organização do Plano Bitwarden Families gratuita. Para continuar, você precisa entrar na conta que recebeu a oferta." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Não é possível aceitar a oferta. Reenvie o e-mail da oferta da conta corporativa e tente novamente." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Não é possível aceitar a oferta. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Resgatar Oferta de Organização do Bitwarden Families Gratuita" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "A Oferta Gratuita do Bitwarden Families foi resgatada com sucesso" + }, + "redeemed": { + "message": "Resgatado" + }, + "redeemedAccount": { + "message": "Conta Resgatada" + }, + "revokeAccount": { + "message": "Revogar conta $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Reenviar e-mail de Patrocínio para $NAME$ patrocínio", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Plano Familiar Gratuito" + }, + "redeemNow": { + "message": "Resgatar Agora" + }, + "recipient": { + "message": "Destinatário" + }, + "removeSponsorship": { + "message": "Remover Patrocínio" + }, + "removeSponsorshipConfirmation": { + "message": "Depois de remover um patrocínio, você será responsável por essa assinatura e faturas relacionadas. Tem certeza de que quer continuar?" + }, + "sponsorshipCreated": { + "message": "Patrocínio Criado" + }, + "revoke": { + "message": "Revogar" + }, + "emailSent": { + "message": "E-mail Enviado" + }, + "revokeSponsorshipConfirmation": { + "message": "Depois de remover esta conta, o proprietário da organização das Famílias será responsável por essa assinatura e faturas relacionadas. Tem certeza de que quer continuar?" + }, + "removeSponsorshipSuccess": { + "message": "Patrocínio Removido" + }, "ssoKeyConnectorUnavailable": { "message": "Não foi possível acessar o Conector de Chave, tente novamente mais tarde." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrado para o Conector de Chave" + }, + "paymentSponsored": { + "message": "Por favor, forneça uma forma de pagamento para associar à organização. Não se preocupe, não cobraremos nada, a menos que você selecione recursos adicionais ou seu patrocínio expire. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "A oferta de patrocínio expirou, você pode excluir a organização que criou para evitar uma cobrança no final do seu teste de 7 dias. Caso contrário, você pode fechar este alerta para manter a organização e assumir a responsabilidade pela cobrança." + }, + "newFamiliesOrganization": { + "message": "Nova Organização de Famílias" + }, + "acceptOffer": { + "message": "Aceitar Oferta" + }, + "sponsoringOrg": { + "message": "Organização Patrocinadora" + }, + "keyConnectorTest": { + "message": "Testar" + }, + "keyConnectorTestSuccess": { + "message": "Sucesso! Conector de Chave acessado." + }, + "keyConnectorTestFail": { + "message": "Não foi possível acessar o Conector de Chave. Verifique a URL." + }, + "sponsorshipTokenHasExpired": { + "message": "A oferta de patrocínio expirou." + }, + "freeWithSponsorship": { + "message": "GRÁTIS com patrocínio" } } diff --git a/src/locales/pt_PT/messages.json b/src/locales/pt_PT/messages.json index 1c7a129c..99fa3a91 100644 --- a/src/locales/pt_PT/messages.json +++ b/src/locales/pt_PT/messages.json @@ -316,7 +316,7 @@ "message": "Último nome" }, "fullName": { - "message": "Full Name" + "message": "Nome Completo" }, "address1": { "message": "Endereço 1" @@ -841,7 +841,7 @@ "message": "Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account." }, "export": { - "message": "Export" + "message": "Exportar" }, "exportVault": { "message": "Exportar cofre" @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Tem a certeza de que pretende remover este utilizador?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Id externo" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Reenviar convite" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ foi novamente convidado.", "placeholders": { @@ -2915,7 +2921,7 @@ "message": "Subscription updated" }, "additionalOptions": { - "message": "Additional Options" + "message": "Opções Adicionais" }, "additionalOptionsDesc": { "message": "For additional help in managing your subscription, please contact Customer Support." @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/ro/messages.json b/src/locales/ro/messages.json index e967b39c..56564fdb 100644 --- a/src/locales/ro/messages.json +++ b/src/locales/ro/messages.json @@ -1991,7 +1991,7 @@ } }, "planNameFamilies": { - "message": "Familii" + "message": "Familiile" }, "planDescFamilies": { "message": "Pentru uz personal, pentru a partaja cu familia și prietenii." @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Sigur doriți să eliminați acest utilizator?" }, + "removeUserConfirmationKeyConnector": { + "message": "Avertisment! Acest utilizator are nevoie de Conector Cheie pentru a-și gestiona criptarea. Eliminarea acestui utilizator din organizația dvs., îi va dezactiva permanent contul. Această acțiune nu poate fi anulată. Doriți să continuați?" + }, "externalId": { "message": "Id Extern" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Retrimitere invitație" }, + "resendEmail": { + "message": "Retrimitere e-mail" + }, "hasBeenReinvited": { "message": "$USER$ a fost invitat din nou.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Abonamentul dvs. permite un total de $COUNT$ utilizatori. Planul dvs. este sponsorizat și facturat unei organizații externe.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Ajustările abonamentului dvs. vor avea ca rezultat modificări proporționale ale totalurilor dvs. de facturare. Nu puteți invita mai mult de $COUNT$ utilizatori fără a vă mări numărul de licențe ale abonamentului.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ s-a autentificat folosind SSO pentru prima data", "placeholders": { "id": { "content": "$1", @@ -4473,26 +4488,143 @@ "ssoSettingsSaved": { "message": "Configurația de conectare unică a fost salvată." }, + "sponsoredFamilies": { + "message": "Planul Bitwarden Familiile gratuit" + }, + "sponsoredFamiliesEligible": { + "message": "Dumneavoastră și familia dvs., sunteți eligibili pentru planul Bitwarden Familiile gratuit. Revendicați-l cu e-mailul personal pentru a vă păstra datele în siguranță chiar și atunci când nu sunteți la locul de muncă." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Schimbați-vă astăzi planul Bitwarden Gratuit pentru Familiile, pentru a vă păstra datele dvs. sigure, chiar și atunci când nu sunteți la locul de muncă." + }, + "sponsoredFamiliesInclude": { + "message": "Planul Bitwarden Familiile include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Acces Premium pentru până la 6 utilizatori" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Colecții partajate pentru secrete familiale" + }, + "badToken": { + "message": "Linkul nu mai este valabil. Vă rugăm să cereți sponsorului să retrimită oferta." + }, + "reclaimedFreePlan": { + "message": "Planul gratuit revendicat" + }, + "redeem": { + "message": "Revendicare" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Selectați organizația pe care doriți să o sponsorizați" + }, + "familiesSponsoringOrgSelect": { + "message": "Ce ofertă Gratuită Familiile ați dori să revendicați?" + }, + "sponsoredFamiliesEmail": { + "message": "Introduceți e-mailul dvs. personal pentru a revendica planul Bitwarden Familiile" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Dacă părăsiți sau sunteți exclus din organizația sponsor, planul dvs. Familiile va expira la sfârșitul perioadei de facturare." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Acceptați oferta pentru o organizație existentă sau creați o nouă organizație Familiile." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Vi s-a oferit gratuit un plan de Organizație Bitwarden Familiile. Pentru a continua, trebuie să vă conectați la contul care a primit oferta." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Imposibil de acceptat oferta. Vă rugăm să retrimiteți e-mailul ofertei din contul dvs. de întreprindere și încercați din nou." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Imposibil de acceptat oferta. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Acceptați planul Bitwarden Familiile gratuit" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Oferta gratuită Bitwarden Familiile a fost revendicată cu succes" + }, + "redeemed": { + "message": "Revendicată" + }, + "redeemedAccount": { + "message": "Cont revendicat" + }, + "revokeAccount": { + "message": "Revocare cont $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Retrimiteți e-mailul de sponsorizare către sponsorul $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Planul Familiile gratuit" + }, + "redeemNow": { + "message": "Revendicați acum" + }, + "recipient": { + "message": "Beneficiar" + }, + "removeSponsorship": { + "message": "Eliminare sponsorizare" + }, + "removeSponsorshipConfirmation": { + "message": "După eliminarea unei sponsorizări, veți fi responsabil pentru acest abonament și facturile conexe. Sigur doriți să continuați?" + }, + "sponsorshipCreated": { + "message": "Sponsorizare creată" + }, + "revoke": { + "message": "Revocare" + }, + "emailSent": { + "message": "E-mail trimis" + }, + "revokeSponsorshipConfirmation": { + "message": "După eliminarea acestui cont, proprietarul organizației Familiile va fi responsabil pentru acest abonament și facturile aferente. Sigur doriți să continuați?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorizare eliminată" + }, "ssoKeyConnectorUnavailable": { - "message": "Nu se poate accesa Conectorul de chei. Vă rugăm să încercați din nou mai târziu." + "message": "Nu se poate accesa Conectorul Cheie. Vă rugăm să încercați din nou mai târziu." }, "keyConnectorUrl": { - "message": "Conectorul de chei URL" + "message": "URL de Conector Cheie" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Trimite un cod de verificare la adresa dvs. de e-mail" }, "sendCode": { - "message": "Send Code" + "message": "Trimitere cod" }, "codeSent": { - "message": "Code Sent" + "message": "Cod trimis" }, "verificationCode": { "message": "Cod de verificare" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Confirmați-vă identitatea pentru a continua." }, "verificationCodeRequired": { "message": "Este necesar codul de verificare." @@ -4537,7 +4669,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { - "message": "Autentificarea SSO și politicile Organizației Unice sunt necesare pentru a configura decriptarea cu conectorul de chei." + "message": "Autentificarea SSO și politicile Organizației Unice sunt necesare pentru a configura decriptarea cu Conectorul Cheie." }, "memberDecryptionOption": { "message": "Opțiuni de decriptare ale membrilor" @@ -4546,13 +4678,13 @@ "message": "Odată autentificați, membrii vor decripta datele seifului folosind parolele lor principale." }, "keyConnector": { - "message": "Conector de chei" + "message": "Conector Cheie" }, "memberDecryptionKeyConnectorDesc": { - "message": "Conectează Autentificarea cu SSO la serverul dvs. de chei de decriptare auto-găzduit. Folosind această opțiune, membrii nu vor trebui să folosească parolele lor principale pentru a decripta datele seifului. Contactați asistența Bitwarden pentru ajutor la configurare." + "message": "Conectează Autentificarea cu SSO la serverul dvs. cheie de decriptare auto-găzduit. Folosind această opțiune, membrii nu vor trebui să folosească parolele lor principale pentru a decripta datele seifului. Contactați asistența Bitwarden pentru ajutor la configurare." }, "keyConnectorPolicyRestriction": { - "message": "„Autentificarea cu SSO și Decriptarea conectorului cheii” este activată. Această politică se va aplica numai proprietarilor și administratorilor." + "message": "„Autentificarea cu SSO și Decriptarea cu Conectorul Cheie” este activată. Această politică se va aplica numai proprietarilor și administratorilor." }, "enabledSso": { "message": "SSO activat" @@ -4561,15 +4693,45 @@ "message": "SSO dezactivat" }, "enabledKeyConnector": { - "message": "Conector de chei activat" + "message": "Conector Cheie activat" }, "disabledKeyConnector": { - "message": "Conector de chei dezactivat" + "message": "Conector Cheie dezactivat" }, "keyConnectorWarning": { - "message": "Odată ce conectorul de chei a fost configurat, organizația dvs. nu mai poate reveni la decriptarea cu parola principală. Continuați numai dacă vă simțiți confortabil să implementați și să gestionați un server de chei." + "message": "Odată ce membrii încep să utilizeze Conectorul Cheie, organizația dvs. nu mai poate reveni la decriptarea cu Parola Principală. Continuați numai dacă vă simțiți confortabil să implementați și să gestionați un server cheie." }, "migratedKeyConnector": { - "message": "Migrat la conectorul de chei" + "message": "Migrat la Conectorul Cheie" + }, + "paymentSponsored": { + "message": "Vă rugăm să furnizați o metodă de plată pentru a asocia cu organizația. Nu vă faceți griji, nu vă vom percepe nimic decât dacă selectați caracteristici suplimentare sau dacă sponsorizarea dvs. expiră. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "Oferta de sponsorizare a expirat. Puteți șterge organizația pe care ați creat-o pentru a evita o taxă la sfârșitul perioadei de încercare de 7 zile. În caz contrar, puteți închide această solicitare pentru a păstra organizația și pentru a vă asuma responsabilitatea de facturare." + }, + "newFamiliesOrganization": { + "message": "Nouă Organizație Familiile" + }, + "acceptOffer": { + "message": "Acceptare ofertă" + }, + "sponsoringOrg": { + "message": "Organizația de sponsorizare" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Succes! Conectorul Cheie a fost accesat." + }, + "keyConnectorTestFail": { + "message": "Conectorul Cheie nu este accesibil. Verificați adresa URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Oferta de sponsorizare a expirat." + }, + "freeWithSponsorship": { + "message": "GRATUIT cu sponsorizare" } } diff --git a/src/locales/ru/messages.json b/src/locales/ru/messages.json index ddd44a4f..a1b9fa2a 100644 --- a/src/locales/ru/messages.json +++ b/src/locales/ru/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Вы действительно хотите удалить этого пользователя?" }, + "removeUserConfirmationKeyConnector": { + "message": "Внимание! Этому пользователю необходим соединитель ключей для управления шифрованием. Удаление этого пользователя из вашей организации приведет к окончательному отключению его учетной записи. Это действие нельзя отменить. Вы хотите продолжить?" + }, "externalId": { "message": "Внешний ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Пригласить повторно" }, + "resendEmail": { + "message": "Отправить email повторно" + }, "hasBeenReinvited": { "message": "$USER$ был приглашен повторно.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Ваша подписка разрешена в общей сложности для $COUNT$ пользователей. Ваш план спонсируется и оплачивается внешней организацией.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Изменения в вашей подписке приведут к пропорциональным изменениям в сумме счетов. Без увеличения числа мест подписки количество приглашаемых пользователей - не более $COUNT$.", "placeholders": { @@ -4001,10 +4016,10 @@ "message": "Записаться на сброс пароля" }, "enrolledPasswordReset": { - "message": "Записано на сброс пароля" + "message": "Запрос на сброс пароля зарегистрирован" }, "withdrawPasswordReset": { - "message": "Отменить сброс пароля" + "message": "Отписаться от сброса пароля" }, "enrollPasswordResetSuccess": { "message": "Регистрация успешна!" @@ -4022,7 +4037,7 @@ } }, "eventWithdrawPasswordReset": { - "message": "Пользователь $ID$ отменил помощь по сбросу пароля.", + "message": "Пользователь $ID$ отказался от помощи по сбросу пароля.", "placeholders": { "id": { "content": "$1", @@ -4088,19 +4103,19 @@ "message": "Разрешить администраторам организации сбрасывать мастер-пароль пользователей организации." }, "resetPasswordPolicyWarning": { - "message": "Пользователи в организации должны самостоятельно зарегистрироваться или быть автоматически зарегистрированными, чтобы администраторы могли сбросить их мастер-пароль." + "message": "Пользователи организации должны зарегистрироваться самостоятельно или быть зарегистрированными автоматически, чтобы администраторы могли сбросить их мастер-пароль." }, "resetPasswordPolicyAutoEnroll": { "message": "Автоматическая регистрация" }, "resetPasswordPolicyAutoEnrollDescription": { - "message": "Все пользователи будут автоматически зачислены на сброс пароля после того, как их приглашение будет принято." + "message": "Все пользователи будут автоматически записаны на сброс пароля, после того как их приглашение будет принято, и им не будет разрешено отказаться от его выполнения." }, "resetPasswordPolicyAutoEnrollWarning": { - "message": "Пользователи, уже входящие в организацию, не будут задним числом зачислены на сброс пароля. Им придется зарегистрироваться самостоятельно, чтобы администраторы могли сбросить их мастер-пароль." + "message": "Пользователи, уже входящие в организацию, не смогут записаться на сброс пароля задним числом. Они должны будут зарегистрироваться самостоятельно, прежде чем администраторы смогут сбросить их мастер-пароль." }, "resetPasswordPolicyAutoEnrollCheckbox": { - "message": "Автоматически регистрировать новых пользователей" + "message": "Автоматически записывать новых пользователей" }, "resetPasswordAutoEnrollInviteWarning": { "message": "В этой организации действует корпоративная политика, которая автоматически зарегистрирует вас на сброс пароля. Регистрация позволит администраторам организации изменить ваш мастер-пароль." @@ -4408,7 +4423,7 @@ "message": "Дополнительные/пользовательские типы требований к имени (разделенные запятыми)" }, "acrValues": { - "message": "Запрошенные справочные значения класса контекста аутентификации (acr_values)" + "message": "Запрашиваемый контекст аутентификации 'Класс справочных значений' (acr_values)" }, "expectedReturnAcrValue": { "message": "Ожидаемый \"acr\" Значение утверждения в ответе (проверка acr)" @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Конфигурация единого входа сохранена." }, + "sponsoredFamilies": { + "message": "Бесплатные семьи Bitwarden" + }, + "sponsoredFamiliesEligible": { + "message": "Вы и ваша семья имеют право на бесплатные семьи Bitwarden. Используйте свой личный адрес электронной почты, чтобы защитить данные даже тогда, когда вы не на работе." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Воспользуйтесь бесплатным планом Bit warden для семей сегодня, чтобы обеспечить безопасность ваших данных, даже когда вы не на работе." + }, + "sponsoredFamiliesInclude": { + "message": "План Bitwarden для Семей включает" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Премиум-доступ для 6 пользователей" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Общие коллекции для Семейных секретов" + }, + "badToken": { + "message": "Ссылка больше не действительна. Пожалуйста, попросите спонсора повторно отправить предложение." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Выберите организацию, которую вы хотите спонсировать" + }, + "familiesSponsoringOrgSelect": { + "message": "Какое бесплатное Семейное предложение вы хотели бы использовать?" + }, + "sponsoredFamiliesEmail": { + "message": "Введите свой личный адрес электронной почты, чтобы активировать Семейный Bitwarden" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Если вы покинете или откажетесь от организации со спонсорским предложением, срок действия вашего семейного плана истечет в конце расчетного периода." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Примите предложение существующей организации или создайте новую Семейную организацию." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Вам предложили бесплатный Семейный план Bitwarden. Чтобы продолжить, вам необходимо войти в учетную запись, в которую поступило предложение." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Не удается принять предложение. Отправьте письмо с предложением еще раз из своей корпоративной учетной записи и повторите попытку." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Невозможно принять предложение. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Принять бесплатный Семейный план Bitwarden" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Бесплатное Семейное предложение Bitwarden успешно активировано" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Активированный аккаунт" + }, + "revokeAccount": { + "message": "Отозвать активацию аккаунта $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Бесплатный Семейный план" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Получатель" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "После удаления спонсорства вы будете нести ответственность за эту подписку и связанные с ней счета. Вы уверены что хотите продолжить?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Отозвать" + }, + "emailSent": { + "message": "Письмо отправлено" + }, + "revokeSponsorshipConfirmation": { + "message": "После удаления этой учетной записи владелец организации Семейства будет нести ответственность за эту подписку и связанные счета. Вы уверены что хотите продолжить?" + }, + "removeSponsorshipSuccess": { + "message": "Спонсорство удалено" + }, "ssoKeyConnectorUnavailable": { "message": "Не удается подключиться к соединителю ключей, повторите попытку позже." }, @@ -4529,7 +4661,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpLink": { - "message": "политику SSO", + "message": "Политика аутентификации SSO", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Выполнена миграция на соединитель ключей" + }, + "paymentSponsored": { + "message": "Укажите способ оплаты для сопоставления с организацией. Не волнуйтесь, мы не будем ничего взимать с вас, если вы не выберете дополнительные функции или ваше спонсорское предложение не истечет. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "Срок действия спонсорского предложения истек. Вы можете удалить созданную вами организацию, чтобы избежать списания средств по истечении 7-дневного пробного периода. В противном случае вы можете закрыть эту подсказку, чтобы сохранить организацию и принять на себя платежные обязательства." + }, + "newFamiliesOrganization": { + "message": "Новая Семейная организация" + }, + "acceptOffer": { + "message": "Принять предложение" + }, + "sponsoringOrg": { + "message": "Спонсорская организация" + }, + "keyConnectorTest": { + "message": "Тест" + }, + "keyConnectorTestSuccess": { + "message": "Успешно! Соединитель ключей проверен." + }, + "keyConnectorTestFail": { + "message": "Не удается связаться с соединителем ключей. Проверьте URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Срок действия спонсорского предложения истек." + }, + "freeWithSponsorship": { + "message": "БЕСПЛАТНО при спонсорской поддержке" } } diff --git a/src/locales/si/messages.json b/src/locales/si/messages.json index 5a79550a..4ba36841 100644 --- a/src/locales/si/messages.json +++ b/src/locales/si/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/sk/messages.json b/src/locales/sk/messages.json index b06b3052..af401ff0 100644 --- a/src/locales/sk/messages.json +++ b/src/locales/sk/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Skutočne chcete odobrať tohto užívateľa?" }, + "removeUserConfirmationKeyConnector": { + "message": "Upozornenie! Tento používateľ potrebuje na správu svojho šifrovania aplikáciu Key Connector. Odstránením tohto používateľa z vašej organizácie sa jeho účet natrvalo deaktivuje. Túto akciu nie je možné vrátiť späť. Chcete pokračovať?" + }, "externalId": { "message": "Externá id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Znovu poslať pozvánku" }, + "resendEmail": { + "message": "Znovu poslať e-mail" + }, "hasBeenReinvited": { "message": "$USER$ bol znovu pozvaný.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Úprava predplatného bude mať za následok proporcionálnu zmenu celkového účtu. Bez zvýšenia počtu miest na predplatné nemôžete pozvať viac ako $COUNT$ používateľov.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4480,19 +4612,19 @@ "message": "Key Connector URL" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Poslať overovací kód na váš e-mail" }, "sendCode": { - "message": "Send Code" + "message": "Odoslať kód" }, "codeSent": { - "message": "Code Sent" + "message": "Kód bol odoslaný" }, "verificationCode": { "message": "Overovací kód" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Ak chcete pokračovať, potvrďte svoju identitu." }, "verificationCodeRequired": { "message": "Overovací kód je povinný." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Úspešné! Key Connector je dostupný." + }, + "keyConnectorTestFail": { + "message": "Key Connector je nedostupný. Skontrolujte adresu URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/sl/messages.json b/src/locales/sl/messages.json index 02807da0..23162632 100644 --- a/src/locales/sl/messages.json +++ b/src/locales/sl/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/sr/messages.json b/src/locales/sr/messages.json index 2093e22c..2f8a6233 100644 --- a/src/locales/sr/messages.json +++ b/src/locales/sr/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/sv/messages.json b/src/locales/sv/messages.json index dfb5ba26..fd2719f4 100644 --- a/src/locales/sv/messages.json +++ b/src/locales/sv/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Är du säker på att du vill ta bort denna användare?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "Externt ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Skicka inbjudan igen" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ har bjudits in igen.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Lös in" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Välj den organisation som du vill sponsra" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Lös in nu" + }, + "recipient": { + "message": "Mottagare" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Återkalla" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4480,19 +4612,19 @@ "message": "Key Connector URL" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Skicka en verifieringskod till din e-post" }, "sendCode": { - "message": "Send Code" + "message": "Skicka kod" }, "codeSent": { - "message": "Code Sent" + "message": "Kod har skickats" }, "verificationCode": { "message": "Verification Code" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Bekräfta din identitet för att fortsätta." }, "verificationCodeRequired": { "message": "Verification code is required." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/tr/messages.json b/src/locales/tr/messages.json index 328cf391..6152a725 100644 --- a/src/locales/tr/messages.json +++ b/src/locales/tr/messages.json @@ -803,7 +803,7 @@ } }, "moveSelectedItemsCountDesc": { - "message": "$COUNT$ nesneyi seçtiniz. $MOVEABLE_COUNT$ nesne bir kuruluşa taşınabilir, $NONMOVEABLE_COUNT$ taşınamaz.", + "message": "$COUNT$ kayıt seçtiniz. $MOVEABLE_COUNT$ kayıt bir kuruluşa taşınabilir, $NONMOVEABLE_COUNT$ kayıt taşınamaz.", "placeholders": { "count": { "content": "$1", @@ -904,7 +904,7 @@ "message": "E-postayı değiştir" }, "changeEmailTwoFactorWarning": { - "message": "Proceeding will change your account email address. It will not change the email address used for two-factor authentication. You can change this email address in the Two-Step Login settings." + "message": "Devam etmek hesabınızın e-posta adresini değiştirecek. 2 adımlı doğrulama için kullandığınız e-posta adresiniz değiştirmeyecek. Onu 2 adımlı doğrulama ayarlarından değiştirebilirsiniz." }, "newEmail": { "message": "Yeni e-posta" @@ -994,7 +994,7 @@ "message": "Başka bir cihazda oturum açtığınızdan endişeli misiniz? Daha önce kullandığınız tüm cihazlardan oturumu kapatmak için aşağıdan ilerleyin. Bu güvenlik aşaması, halka açık bir bilgisayar kullandıysanız veya sahibi olmadığınız bir cihazda parolanızı kaydettiyseniz önerilir. Bu aşama aynı zamanda iki aşamalı giriş kullanılan oturumları da temizleyecektir." }, "deauthorizeSessionsWarning": { - "message": "Devam etmek ayrıca geçerli oturumunuzu sonlandıracaktır, bu da tekrar oturum açmanızı gerektirecektir. Ayrıca, eğer etkinleştirildiyse, tekrardan iki adımlı giriş yapmanız istenecektir. Diğer cihazlardaki aktif oturumlar bir saat kadar aktif kalmaya devam edebilir." + "message": "Devam ederseniz geçerli oturumunuz da sonlanacak ve yeniden oturum açmanız gerekecek. İki aşamalı girişi etkinleştirdiyseniz onu da tamamlamanız gerekecek. Diğer cihazlardaki aktif oturumlar bir saate kadar aktif kalabilir." }, "sessionsDeauthorized": { "message": "Tüm oturumlar kapatıldı" @@ -1006,7 +1006,7 @@ "message": "Kuruluş kasası silindi." }, "vaultAccessedByProvider": { - "message": "Vault accessed by provider." + "message": "Sağlayıcı tarafından erişilen kasa." }, "purgeVaultDesc": { "message": "Kasanızdaki tüm kayıtları ve klasörleri silmek için aşağıdan devam edin. Kuruluşa ait kayıtlar silinmeyecektir." @@ -1132,7 +1132,7 @@ "message": "Alan adı kuralları" }, "domainRulesDesc": { - "message": "Birden fazla farklı web sitesi alan adında aynı giriş bilgisine sahipseniz, web sitesini \"eşdeğer\" olarak işaretleyebilirsiniz. \"Global\" alan adları, sizin için Bitwarden tarafından oluşturulmuş olanlardır." + "message": "Farklı web sitesi alan adlarında aynı hesap bilgisine sahipseniz web sitesini \"eşdeğer\" olarak işaretleyebilirsiniz. \"Global\" alan adları, sizin için Bitwarden tarafından oluşturulmuş olanlardır." }, "globalEqDomains": { "message": "Global eşdeğer alan adları" @@ -1153,7 +1153,7 @@ "message": "Yeni özel alan adı" }, "newCustomDomainDesc": { - "message": "Virgülle ayrılmış alan adları listesi giriniz. Sadece ana alan adlarına izin verilmektedir. Alt alan adları girmeyiniz. Örneğin, \"www.google.com\" yerine \"google.com\" giriniz. Bir android uygulamasını diğer web sitesi alan adları ile eşleştirmek için \"androiduygulaması://paket.ismi\" girebilirsiniz." + "message": "Alan adları listesini virgülle ayırarak girin. Sadece ana alan adlarına izin verilir. Alt alan adları girmeyin. Örneğin, \"www.google.com\" yerine \"google.com\" yazmalısınız. Bir Android uygulamasını diğer web sitesi alan adlarıyla eşleştirmek için \"androiduygulaması://paket.ismi\" girebilirsiniz." }, "customDomainX": { "message": "Özel alan adı: $INDEX$", @@ -1174,7 +1174,7 @@ "message": "Oturum açarken ek bir adım talep ederek hesabınızı güvenceye alabilirsiniz." }, "twoStepLoginOrganizationDesc": { - "message": "Kurum düzeyinde sağlayıcıları düzenleyerek kurumuzun kullanıcılarına iki aşamalı girişi zorunlu kılın." + "message": "Kuruluş düzeyinde sağlayıcıları düzenleyerek kuruluşunuzun kullanıcılarına iki aşamalı girişi zorunlu kılabilirsiniz." }, "twoStepLoginRecoveryWarning": { "message": "İki aşamalı girişi etkinleştirmek, Bitwarden hesabınızı kalıcı olarak kilitleyebilir. Kurtarma kodunuz, iki aşamalı giriş sağlayıcınızı kullanamamanız durumunda hesabınıza erişmenize olanak sağlar (ör. cihazınızı kaybedersiniz). Hesabınıza erişiminizi kaybederseniz Bitwarden destek ekibi size yardımcı olamaz. Kurtarma kodunu not almanızı veya yazdırmanızı ve güvenli bir yerde saklamanızı öneririz." @@ -1284,7 +1284,7 @@ "message": "Web kasası, masaüstü uygulaması, CLI ve YubiKey'inizi kabul edebilecek bir USB bağlantı noktasına sahip bir cihazdaki tüm tarayıcı uzantıları." }, "twoFactorYubikeySupportMobile": { - "message": "Mobile apps on a device with NFC capabilities or a data port that can accept your YubiKey." + "message": "NFC özellikli bir cihazdaki mobil uygulamalar veya YubiKey'inizi kabul edebilen bir veri bağlantı noktası." }, "yubikeyX": { "message": "YubiKey $INDEX$", @@ -1404,7 +1404,7 @@ "message": "Bitwarden iki aşamalı giriş kurtarma kodunuz" }, "twoFactorRecoveryNoCode": { - "message": "Henüz herhangi bir iki adımlı giriş sağlayıcısını etkinleştirmediniz. İki adımlı giriş sağlayıcısını etkinleştirdikten sonra kurtarma kodunuzu almak için burayı tekrar kontrol edebilirsiniz." + "message": "Henüz herhangi bir iki aşamalı giriş sağlayıcısını etkinleştirmediniz. İki aşamalı giriş sağlayıcısını etkinleştirdikten sonra kurtarma kodunuzu almak için burayı tekrar kontrol edebilirsiniz." }, "printCode": { "message": "Kodu yazdır", @@ -1423,7 +1423,7 @@ "message": "Güvensiz web siteleri bulundu" }, "unsecuredWebsitesFoundDesc": { - "message": "Kasanızda güvenli olmayan URI'ye sahip $COUNT$ öge bulduk. Web sitesi izin veriyorsa, URI şemasını https:// olarak değiştirmelisiniz.", + "message": "Kasanızda güvenli olmayan URI'ye sahip $COUNT$ kayıt bulduk. Web sitesi izin veriyorsa URI şemasını https:// olarak değiştirmelisiniz.", "placeholders": { "count": { "content": "$1", @@ -1438,13 +1438,13 @@ "message": "2FA raporu pasif" }, "inactive2faReportDesc": { - "message": "İki adımlı kimlik doğrulama (2FA), hesaplarınızı güvenceye almanıza yardımcı olan önemli bir güvenlik ayarıdır. Web sitesi sunduğu takdirde, her zaman iki adımlı kimlik doğrulamayı etkinleştirmelisiniz." + "message": "İki aşamalı kimlik doğrulama (2FA), hesaplarınızı güvenceye almanızı sağlayan önemli bir güvenlik ayarıdır. İki aşamalı kimlik doğrulamayı destekleyen sitelerde bu ayarı her zaman etkinleştirmenizi öneririz." }, "inactive2faFound": { - "message": "2FA Olmayan Hesaplar Bulundu" + "message": "2FA olmayan hesaplar bulundu" }, "inactive2faFoundDesc": { - "message": "Kasanızda iki adımlı kimlik doğrulaması ile yapılandırılmamış olabilecek $COUNT$ web sitesi bulduk (twofactorauth.org’a göre). Bu hesapları daha fazla korumak için iki adımlı kimlik doğrulamasını etkinleştirmelisiniz.", + "message": "Kasanızda iki aşamalı kimlik doğrulaması kullanmıyor olabilecek $COUNT$ web sitesi bulduk (2fa.directory’ye göre). Bu hesapları daha iyi korumak için iki aşamalı kimlik doğrulamasını etkinleştirmelisiniz.", "placeholders": { "count": { "content": "$1", @@ -1453,7 +1453,7 @@ } }, "noInactive2fa": { - "message": "Kasanızda iki adımlı kimlik doğrulama yapılandırması eksik olan web sitesi bulunamadı." + "message": "Kasanızda iki aşamalı kimlik doğrulama yapılandırması eksik olan web sitesi bulunamadı." }, "instructions": { "message": "Yönergeler" @@ -1676,7 +1676,7 @@ "message": "Premium erişim" }, "premiumAccessDesc": { - "message": "Kuruluşunuzda bulunan tüm üyelerine premium erişim ekleyebilirsiniz: $PRICE$ /$INTERVAL$.", + "message": "Kuruluşunuzdaki tüm üyelerine $PRICE$ /$INTERVAL$ fiyatla premium erişim ekleyebilirsiniz.", "placeholders": { "price": { "content": "$1", @@ -1923,13 +1923,13 @@ "message": "Hesabınızı premium üyeliğe yükseltmek için geçerli bir lisans dosyası yüklemelisiniz." }, "uploadLicenseFileOrg": { - "message": "To create an on-premises hosted organization you need to upload a valid license file." + "message": "Şirket içi barındırılan bir organizasyon oluşturmak için geçerli olan bir lisans dosyası yüklemeniz gerekir." }, "accountEmailMustBeVerified": { "message": "Hesabınızın e-posta adresi doğrulanmalıdır." }, "newOrganizationDesc": { - "message": "Organizations allow you to share parts of your vault with others as well as manage related users for a specific entity such as a family, small team, or large company." + "message": "Organizasyonlar, kasanızın bölümlerini başkalarıyla paylaşmanıza; aile, küçük ekip veya büyük şirket gibi belirli bir alandaki ilgili kullanıcıları yönetmenize olanak tanır." }, "generalInformation": { "message": "Genel bilgiler" @@ -1962,7 +1962,7 @@ "message": "Kullanıcı sayısı" }, "userSeatsAdditionalDesc": { - "message": "Your plan comes with $BASE_SEATS$ user seats. You can add additional users for $SEAT_PRICE$ per user /month.", + "message": "Planınız $BASE_SEATS$ kullanıcı ile gelir. Kullanıcı/ay başına $SEAT_PRICE$ kullanıcı daha ekleyebilirsiniz.", "placeholders": { "base_seats": { "content": "$1", @@ -1982,7 +1982,7 @@ "description": "Free as in 'free beer'." }, "planDescFree": { - "message": "For testing or personal users to share with $COUNT$ other user.", + "message": "Test amaçlı ya da kişisel kullanıcıların diğer $COUNT$ kullanıcıyla paylaşması için.", "placeholders": { "count": { "content": "$1", @@ -2051,7 +2051,7 @@ } }, "addShareLimitedUsers": { - "message": "Add and share with up to $COUNT$ users", + "message": "$COUNT$ kullanıcıya kadar ekleyin ve paylaşın", "placeholders": { "count": { "content": "$1", @@ -2060,7 +2060,7 @@ } }, "addShareUnlimitedUsers": { - "message": "Add and share with unlimited users" + "message": "Sonsuz sayıda kullanıcı ekleyin ve paylaşın" }, "createUnlimitedCollections": { "message": "Sınırsız koleksiyon oluşturma" @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Bu kullanıcıyı silmek istediğinizden emin misiniz?" }, + "removeUserConfirmationKeyConnector": { + "message": "Uyarı! Bu kullanıcı, şifrelemelerini yönetmek için Anahtar Bağlayıcı'ya ihtiyaç duyuyor. Bu kullanıcıyı kuruluşunuzdan çıkarmak, hesabını kalıcı olarak devre dışı bırakacaktır. Bu işlem geri alınamaz. Devam etmek istiyor musunuz?" + }, "externalId": { "message": "Harici kimlik" }, @@ -2213,7 +2216,7 @@ "message": "Kullanıcı davet et" }, "inviteUserDesc": { - "message": "Invite a new user to your organization by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." + "message": "Aşağıya Bitwarden hesabının e-posta adresini girerek kuruluşunuza yeni bir kullanıcı davet edin. Halihazırda bir Bitwarden hesabı yoksa yeni bir hesap oluşturması istenecektir." }, "inviteMultipleEmailDesc": { "message": "E-posta listesini virgülle ayırarak bir seferde en fazla $COUNT$ kullanıcıyı davet edebilirsiniz.", @@ -2252,10 +2255,10 @@ "message": "Sahip" }, "ownerDesc": { - "message": "The highest access user that can manage all aspects of your organization." + "message": "Kuruluşunuzun tüm alanlarını yönetebilen en yüksek erişimli kullanıcı." }, "clientOwnerDesc": { - "message": "This user should be independent of the Provider. If the Provider is disassociated with the organization, this user will maintain ownership of the organization." + "message": "Bu kullanıcı Sağlayıcıdan bağımsız olmalıdır. Sağlayıcının kuruluşla ilişkisi kesilirse, bu kullanıcı kuruluşun sahipliğini sürdürür." }, "admin": { "message": "Yönetici" @@ -2267,7 +2270,7 @@ "message": "Kullanıcı" }, "userDesc": { - "message": "A regular user with access to assigned collections in your organization." + "message": "Kuruluşunuzda atanmış alanlara erişimi olan normal bir kullanıcı." }, "manager": { "message": "Yönetici" @@ -2591,7 +2594,7 @@ } }, "createdOrganizationId": { - "message": "Created organization $ID$.", + "message": "$ID$ organizasyonu oluşturuldu.", "placeholders": { "id": { "content": "$1", @@ -2600,7 +2603,7 @@ } }, "addedOrganizationId": { - "message": "Added organization $ID$.", + "message": "$ID$ organizasyonu eklendi.", "placeholders": { "id": { "content": "$1", @@ -2609,7 +2612,7 @@ } }, "removedOrganizationId": { - "message": "Removed organization $ID$.", + "message": "$ID$ organizasyonu kaldırıldı.", "placeholders": { "id": { "content": "$1", @@ -2618,7 +2621,7 @@ } }, "accessedClientVault": { - "message": "Accessed $ID$ organization vault.", + "message": "$ID$ organizasyonu kasasına erişildi.", "placeholders": { "id": { "content": "$1", @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Daveti yeniden gönder" }, + "resendEmail": { + "message": "E-postayı yeniden gönder" + }, "hasBeenReinvited": { "message": "$USER$ yeniden davet edildi.", "placeholders": { @@ -2732,10 +2738,10 @@ "message": "Davet kabul edildi" }, "inviteAcceptedDesc": { - "message": "Bir yönetici üyeliğinizi onayladığı zaman organizasyona erişebilirsiniz. Bu olduğunda bir e-posta göndereceğiz." + "message": "Yöneticiler üyeliğinizi onayladıktan sonra kuruluşa erişebilirsiniz. Üyeliğiniz onaylandığında size e-posta göndereceğiz." }, "inviteAcceptFailed": { - "message": "Davet kabul edilmedi. Yeni bir davetiye göndermesi için organizasyon yöneticisine başvurun." + "message": "Davet kabul edilemedi. Kuruluş yöneticisinden yeni bir davet göndermesini isteyin." }, "inviteAcceptFailedShort": { "message": "Davet kabul edilemedi. $DESCRIPTION$", @@ -2777,7 +2783,7 @@ "message": "Kuruluşu sil" }, "deleteOrganizationDesc": { - "message": "Bu organizasyonu ve ilişkili tüm verileri silmek için aşağıya devam ediniz. Kişisel kullanıcı hesapları kalacak, fakat bu organizasyon ile ilişkisi kesilecektir. " + "message": "Bu kuruluşu ve ilişkili tüm verileri silmek için aşağıdan devam edin. Kullanıcı hesapları kalacak fakat bu kuruluşla ilişkileri kesilecektir. " }, "deleteOrganizationWarning": { "message": "Kuruluşu silmek kalıcıdır. Bu işlem geri alınamaz." @@ -2829,13 +2835,13 @@ "message": "Banka hesabını doğrula" }, "verifyBankAccountDesc": { - "message": "Banka hesabınıza iki tane mikro para yatırma işlemi yaptık (gösterilmesi 1-2 iş günü sürebilir). Banka hesabını doğrulamak için bu tutarları girin." + "message": "Banka hesabınıza iki mikro para yatırma işlemi yaptık. (Ulaşmaları 1-2 iş günü sürebilir.) Banka hesabını doğrulamak için bu tutarları girin." }, "verifyBankAccountInitialDesc": { "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make two micro-deposits within the next 1-2 business days. Enter these amounts on the organization's billing page to verify the bank account." }, "verifyBankAccountFailureWarning": { - "message": "Banka hesabının doğrulanamaması, ödemenin yapılamamasına ve aboneliğinizin devre dışı bırakılmasına neden olur." + "message": "Banka hesabınız doğrulanmazsa ödeme yapılamaz ve aboneliğiniz devre dışı bırakılır." }, "verifiedBankAccount": { "message": "Banka hesabınız doğrulandı." @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -3119,37 +3134,37 @@ "message": "Seçtiğiniz ana parola zayıf. Bitwarden hesabınızı korumak için daha güçlü bir ana parola seçmenizi öneririz. Bu ana parolayı kullanmak istediğinizden emin misiniz?" }, "rotateAccountEncKey": { - "message": "Ayrıca hesabımın şifreleme anahtarını da döndür" + "message": "Hesabımın şifreleme anahtarını da yenile" }, "rotateEncKeyTitle": { - "message": "Rotate Encryption Key" + "message": "Şifreleme anahtarını değiştir" }, "rotateEncKeyConfirmation": { - "message": "Hesabınızın şifreleme anahtarını döndürmek istediğinizden emin misiniz?" + "message": "Hesabınızın şifreleme anahtarını yenilemek istediğinizden emin misiniz?" }, "attachmentsNeedFix": { "message": "Bu kayıtta düzeltilmesi gereken eski dosya ekleri bulunuyor." }, "attachmentFixDesc": { - "message": "Bu düzeltilmesi gereken eski bir dosya eki. Daha fazla bilgi edinmek için tıklayın." + "message": "Bu eski dosya ekinin düzeltmesi gerekiyor. Daha fazla bilgi için tıklayın." }, "fix": { "message": "Düzelt", "description": "This is a verb. ex. 'Fix The Car'" }, "oldAttachmentsNeedFixDesc": { - "message": "Hesabınızın şifreleme anahtarını döndürmeden önce, kasanızda düzeltilmesi gereken eski dosya ekleri bulunmaktadır." + "message": "Hesabınızın şifreleme anahtarını yenilemeden önce kasanızdaki eski dosya eklerini düzeltilmeniz gerekiyor." }, "yourAccountsFingerprint": { "message": "Hesabınızın parmak izi ifadesi", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "fingerprintEnsureIntegrityVerify": { - "message": "Şifreleme anahtarlarınızın bütünlüğünü sağlamak için, devam etmeden önce lütfen kullanıcının parmak izi şifresini doğrulayın.", + "message": "Şifreleme anahtarlarınızın bütünlüğünü sağlamak için, devam etmeden önce lütfen kullanıcının parmak izi ifadesini doğrulayın.", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "dontAskFingerprintAgain": { - "message": "Don't ask to verify fingerprint phrase again", + "message": "Parmak izi ifadesini doğrulamamı bir daha isteme", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "free": { @@ -3160,7 +3175,7 @@ "message": "API anahtarı" }, "apiKeyDesc": { - "message": "Your API key can be used to authenticate to the Bitwarden public API." + "message": "API anahtarınız, Bitwarden API'sinde kimlik doğrulama için kullanılabilir." }, "apiKeyRotateDesc": { "message": "API anahtarını döndürmek önceki anahtarı geçersiz kılacaktır. Geçerli anahtarın artık güvenli olmadığına inanıyorsanız API anahtarınızı döndürebilirsiniz." @@ -3209,13 +3224,13 @@ "message": "Ana parola gücü için minimum gereksinimleri ayarlayın." }, "twoStepLoginPolicyDesc": { - "message": "Kullanıcılardan hesaplarında iki adımlı oturum açma özelliğini kullanmalarını isteyin." + "message": "Kullanıcıların hesaplarında iki aşamalı giriş kullanmalarını zorunlu tutun." }, "twoStepLoginPolicyWarning": { "message": "Organization members who are not Owners or Administrators and do not have two-step login enabled for their personal account will be removed from the organization and will receive an email notifying them about the change." }, "twoStepLoginPolicyUserWarning": { - "message": "İki adımlı oturum açmanın etkinleştirilmesi gereken bir kuruluşun üyesisiniz. İki adımlı oturum açma sağlayıcılarının tümünü devre dışı bırakırsanız, bu kuruluşlardan otomatik olarak kaldırılırsınız." + "message": "İki aşamalı girişin etkinleştirilmesi gereken bir kuruluşa üyesisiniz. İki aşamalı giriş sağlayıcılarının tümünü devre dışı bırakırsanız bu kuruluşlardan otomatik olarak kaldırılırsınız." }, "passwordGeneratorPolicyDesc": { "message": "Parola üreticisi ayarları için minimum gereksinimleri ayarlayın." @@ -3298,7 +3313,7 @@ "message": "Kalıcı olarak sil" }, "permanentlyDeleteSelected": { - "message": "Seçileni Kalıcı Olarak Sil" + "message": "Seçilenleri kalıcı olarak sil" }, "permanentlyDeleteItem": { "message": "Kaydı kalıcı olarak sil" @@ -3322,7 +3337,7 @@ } }, "permanentlyDeletedItemId": { - "message": "Permanently Deleted item $ID$.", + "message": "$ID$ kaydı kalıcı olarak silindi.", "placeholders": { "id": { "content": "$1", @@ -3334,7 +3349,7 @@ "message": "Geri yükle" }, "restoreSelected": { - "message": "Seçilileri Geri Yükle" + "message": "Seçilenleri geri yükle" }, "restoreItem": { "message": "Kaydı geri yükle" @@ -3352,7 +3367,7 @@ "message": "Kayıtları geri yükle" }, "restoreSelectedItemsDesc": { - "message": "Geri yüklenmesi için $COUNT$ öge seçtiniz. Bu ögelerin tamamını geri yüklemek istediğinizden emin misiniz?", + "message": "Geri yüklenmesi için $COUNT$ kayıt seçtiniz. Bu kayıtların tamamını geri yüklemek istediğinizden emin misiniz?", "placeholders": { "count": { "content": "$1", @@ -3361,7 +3376,7 @@ } }, "restoredItemId": { - "message": "Geri yüklenmiş öge: $ID$.", + "message": "$ID$ kaydı geri yüklendi.", "placeholders": { "id": { "content": "$1", @@ -3370,7 +3385,7 @@ } }, "vaultTimeoutLogOutConfirmation": { - "message": "Oturumu kapatmak kasanıza olan tüm erişiminizi kaldırır ve zaman aşımından sonra çevrimiçi kimlik doğrulaması gerektirir. Bu ayarı kullanmak istediğinizden emin misiniz?" + "message": "Çıkış yaptığınızda kasanıza erişiminiz tamamen sonlanacak ve zaman aşımının ardından çevrimiçi kimlik doğrulaması yapmanız gerekecek. Bu ayarı kullanmak istediğinizden emin misiniz?" }, "vaultTimeoutLogOutConfirmationTitle": { "message": "Zaman Aşımı Eylem Onayı" @@ -3379,10 +3394,10 @@ "message": "Parolaları gizle" }, "countryPostalCodeRequiredDesc": { - "message": "Bu bilgiyi sadece satış vergisi hesaplama ve mali raporlama için istiyoruz." + "message": "Bu bilgileri sadece satış vergisi hesaplama ve mali raporlama için istiyoruz." }, "includeVAT": { - "message": "KDV Bilgisi Ekle (opsiyonel)" + "message": "KDV bilgisi ekle (tercihe bağlı)" }, "taxIdNumber": { "message": "KDV Vergi Kimlik Numarası" @@ -3394,7 +3409,7 @@ "message": "Ana parolayı belirle" }, "ssoCompleteRegistration": { - "message": "Tek Oturum Açma (SSO) ile oturum açmayı tamamlamak için lütfen kasanıza erişebilmek ve onu korumak için bir ana parola ayarlayın." + "message": "SSO ile girişinizi tamamlamak için lütfen kasanıza erişirken kullanacağınız ana parolayı belirleyin." }, "identifier": { "message": "Tanımlayıcı" @@ -3403,64 +3418,64 @@ "message": "Kuruluş tanımlayıcı" }, "ssoLogInWithOrgIdentifier": { - "message": "Kuruluşunuzun tek oturum açma (SSO) portalını kullanarak oturum açın. Başlamak için lütfen kuruluşunuzun tanımlayıcısını girin." + "message": "Kuruluşunuzun tek oturum açma portalını kullanarak giriş yapabilirsiniz. Başlamak için lütfen kuruluşunuzun tanımlayıcısını girin." }, "enterpriseSingleSignOn": { "message": "Kurumsal tek oturum açma" }, "ssoHandOff": { - "message": "Şimdi bu sekmeyi kapatabilir ve uzantıya devam edebilirsiniz." + "message": "Şimdi bu sekmeyi kapatıp uzantı üzerinden devam edebilirsiniz." }, "includeAllTeamsFeatures": { "message": "Tüm Takımlar özellikleri, artı:" }, "includeSsoAuthentication": { - "message": "SAML2.0 ve OpenID Connect ile Tek Oturum Açma (SSO) Doğrulaması" + "message": "SAML2.0 ve OpenID Connect ile SSO doğrulaması" }, "includeEnterprisePolicies": { "message": "Kuruluş ilkeleri" }, "ssoValidationFailed": { - "message": "Tek Oturum Açma (SSO) Doğrulaması Başarısız Oldu" + "message": "SSO doğrulaması başarısız oldu" }, "ssoIdentifierRequired": { - "message": "Organizasyon Tanımlayıcısı gereklidir." + "message": "Kuruluş tanımlayıcısı gereklidir." }, "unlinkSso": { - "message": "Tek Oturum Açma (SSO) Bağlantısını Kaldır" + "message": "SSO bağlantısını kes" }, "linkSso": { - "message": "Tek Oturum Açma (SSO) Bağlantısı Oluştur" + "message": "SSO bağla" }, "singleOrg": { - "message": "Tek Organizasyon" + "message": "Tek kuruluş" }, "singleOrgDesc": { "message": "Kullanıcıların diğer kuruluşlara katılmasını kısıtlayın." }, "singleOrgBlockCreateMessage": { - "message": "Mevcut kuruluşunuzun, birden fazla kuruluşa katılmanıza izin vermeyen bir politikası var. Lütfen kuruluş yöneticilerinizle iletişime geçin veya farklı bir Bitwarden hesabından kaydolun." + "message": "Mevcut kuruluşunuzun birden fazla kuruluşa katılmanıza izin vermeyen bir ilkesi var. Lütfen kuruluş yöneticilerinizle iletişime geçin veya farklı bir Bitwarden hesabı açın." }, "singleOrgPolicyWarning": { - "message": "Sahip veya Yönetici olmayan ve zaten başka bir kuruluşun üyesi olan kuruluş üyeleri, kuruluşunuzdan kaldırılır." + "message": "Sahip veya yönetici olmayan ve zaten başka bir kuruluşun üyesi olan kuruluş üyeleri kuruluşunuzdan kaldırılır." }, "requireSso": { - "message": "Tek Oturum Açma Kimlik Doğrulaması" + "message": "Tek oturum açma kimlik doğrulaması" }, "requireSsoPolicyDesc": { - "message": "Kullanıcıların Kurumsal olarak Tek Oturum Açma yöntemiyle oturum açmasını zorunlu kılın." + "message": "Kullanıcıların kurumsal tek oturum açma (SSO) yöntemiyle oturum açmasını zorunlu kılın." }, "prerequisite": { "message": "Önkoşul" }, "requireSsoPolicyReq": { - "message": "Bu politikayı etkinleştirmeden önce Tek Kuruluş kurumsal politikası etkinleştirilmelidir." + "message": "Bu ilkeyi etkinleştirmeden önce tek kuruluş kurumsal ilkesi etkinleştirilmelidir." }, "requireSsoPolicyReqError": { - "message": "Tek Kuruluş politikası etkinleştirilmedi." + "message": "Tek kuruluş ilkesi etkin değil." }, "requireSsoExemption": { - "message": "Kuruluş Sahipleri ve Yöneticiler bu politika uygulamasından muaftır." + "message": "Kuruluş sahipleri ve yöneticileri bu ilkenin uygulanmasından muaf tutulur." }, "sendTypeFile": { "message": "Dosya" @@ -3576,11 +3591,11 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendProtectedPassword": { - "message": "Bu Gönderim bir şifre ile korunmaktadır. Devam etmek için lütfen şifreyi aşağıya yazın.", + "message": "Bu Send parola ile korunuyor. Devam etmek için lütfen parolayı yazın.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendProtectedPasswordDontKnow": { - "message": "Şifreyi bilmiyor musunuz? Gönderen'den bu Gönderime erişmek için gereken parolayı isteyin.", + "message": "Parolayı bilmiyor musunuz? Bu Send'e erişmek için gereken parolayı dosyayı gönderen kişiye sorabilirsiniz.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendHiddenByDefault": { @@ -3603,19 +3618,19 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "emergencyAccess": { - "message": "Acil Erişim" + "message": "Acil durum erişimi" }, "emergencyAccessDesc": { "message": "Güvenilen kişiler için acil erişim izni ver ve yönet. Güvenilen kişiler acil bir durumda hesabınızı görmek veya devralmak için talepte bulunabilirler. Sıfır bilgi ispatı ile paylaşımının nasıl çalıştığı ile ilgili detaylar için yardım sayfamızı ziyaret edin." }, "emergencyAccessOwnerWarning": { - "message": "Bir ya da birden fazla organizasyonun sahibisiniz. Acil durum kişisine hak devralma yetkisi verirseniz, devralma işleminden sonra sahip olduğunuz tüm hakları kullanabilir." + "message": "Bir veya daha fazla kuruluşun sahibisiniz. Acil durum kişisine devralma yetkisi verirseniz devralma işleminden sonra bu kişi sahip olduğunuz tüm hakları kullanabilir." }, "trustedEmergencyContacts": { "message": "Güvenilen acil durum kişileri" }, "noTrustedContacts": { - "message": "Henüz herhangi bir acil durum kişisi eklemediniz, başlamak için güvenilen bir kişiyi davet edin." + "message": "Henüz hiç acil durum kişisi eklemediniz. Başlamak için güvendiğiniz birini davet edin." }, "addEmergencyContact": { "message": "Acil durum kişisi ekle" @@ -3636,10 +3651,10 @@ "message": "Aşağıya Bitwarden hesabının email adresini girerek yeni bir acil durum kişisini davet edebilirsiniz. Eğer halihazırda bir Bitwarden hesapları yoksa, yeni bir hesap oluşturmaları istenecektir." }, "emergencyAccessRecoveryInitiated": { - "message": "Acil Durum Erişimi Başlatıldı" + "message": "Acil durum erişimi başlatıldı" }, "emergencyAccessRecoveryApproved": { - "message": "Acil Durum Erişimi Onaylandı" + "message": "Acil durum erişimi onaylandı" }, "viewDesc": { "message": "Kasanızdaki tüm kayıtları görebilir." @@ -3672,7 +3687,7 @@ "message": "Kullanıcı davet edildi." }, "acceptEmergencyAccess": { - "message": "Yukarıdaki kullanıcı için bir acil durum kişisi olmaya davet edildiniz. Daveti kabul etmek için, giriş yapmanız veya yeni bir Bitwarden hesabı oluşturmanız gerekir." + "message": "Yukarıdaki kullanıcı için acil durum kişisi olmaya davet edildiniz. Daveti kabul etmek için giriş yapmanız veya yeni bir Bitwarden hesabı oluşturmanız gerekir." }, "emergencyInviteAcceptFailed": { "message": "Davet kabul edilemedi. Kullanıcıdan yeni bir davet göndermesini isteyin." @@ -3687,13 +3702,13 @@ } }, "emergencyInviteAcceptedDesc": { - "message": "Kimliğiniz doğrulandıktan sonra bu kullanıcı için acil durum seçeneklerine erişebilirsiniz. Bu gerçekleştiğinde size bir e posta göndereceğiz." + "message": "Kimliğiniz doğrulandıktan sonra bu kullanıcı için acil durum seçeneklerine erişebilirsiniz. Bu gerçekleştiğinde size e-posta göndereceğiz." }, "requestAccess": { - "message": "Erişim Talep Et" + "message": "Erişim talep et" }, "requestAccessConfirmation": { - "message": "Erişim talep etmek istediğinizden emin misiniz? Kullanıcı talebi elle kabul ettikten veya $WAITTIME$ gün geçtikten sonra erişim izni alacaksınız.", + "message": "Erişim talep etmek istediğinizden emin misiniz? Kullanıcı talebi kabul ettikten veya $WAITTIME$ gün geçtikten sonra erişim izni alacaksınız.", "placeholders": { "waittime": { "content": "$1", @@ -3702,7 +3717,7 @@ } }, "requestSent": { - "message": "$USER$ için acil durum erişimi isteğinde bulunuldu. Devam etmek mümkün olduğunda size e posta ile haber vereceğiz.", + "message": "$USER$ için acil durum erişimi isteğinde bulunuldu. Devam etmeniz mümkün hale geldiğinde size e-posta ile haber vereceğiz.", "placeholders": { "user": { "content": "$1", @@ -3745,26 +3760,26 @@ } }, "personalOwnership": { - "message": "Kişisel Sahiplik" + "message": "Kişisel sahiplik" }, "personalOwnershipPolicyDesc": { - "message": "Kişisel sahiplik seçeneğini kaldırarak kullanıcıların kasa öğelerini bir kuruma kaydetmesini zorunlu kılın." + "message": "Kişisel sahiplik seçeneğini kapatarak kullanıcıların kasadaki kayıtlarını bir kuruluşa kaydetmesini zorunlu kılabilirsiniz." }, "personalOwnershipExemption": { - "message": "Kurum Sahipleri ve Yöneticiler bu politikanın uygulanmasından muaf tutulurlar." + "message": "Kuruluş sahipleri ve yöneticileri bu ilkenin uygulanmasından muaf tutulur." }, "personalOwnershipSubmitError": { - "message": "Bir Kurumsal Politika nedeniyle, kişisel kasanıza öğeleri kaydetmeniz kısıtlanmıştır. Sahiplik seçeneğini bir kuruluş olarak değiştirin ve mevcut Koleksiyonlar arasından seçim yapın." + "message": "Bir kuruluş ilkesi nedeniyle kişisel kasanıza hesap kaydetmeniz kısıtlanmış. Sahip seçeneğini bir kuruluş olarak değiştirin ve mevcut koleksiyonlar arasından seçim yapın." }, "disableSend": { "message": "Send'i devre dışı bırak" }, "disableSendPolicyDesc": { - "message": "Kullanıcıların bir Bitwarden Send oluşturmasını veya düzenlemesine izin verme. Varolan bir Send'i silmeye gene de izin verilir.", + "message": "Kullanıcıların Bitwarden Send oluşturmasına veya düzenlemesine izin verme. Mevcut Send'leri silmeye yine de izin verilir.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disableSendExemption": { - "message": "Kurum ilkelerini yönetebilen kullanıcılar bu ilkenin uygulanmasından muaf tutulurlar." + "message": "Kuruluş ilkelerini yönetebilen kullanıcılar bu ilkenin uygulanmasından muaf tutulur." }, "sendDisabled": { "message": "Send devre dışı", @@ -3783,7 +3798,7 @@ "description": "'Sends' is a plural noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptionsExemption": { - "message": "Kuruluş ilkelerini yönetebilen kullanıcılar bu ilkenin uygulanmasından muaf tutulurlar." + "message": "Kuruluş ilkelerini yönetebilen kullanıcılar bu ilkenin uygulanmasından muaf tutulur." }, "disableHideEmail": { "message": "Kullanıcıların Send oluştururken veya düzenlerken alıcılardan e-posta adreslerini gizlemelerini yasakla.", @@ -3793,7 +3808,7 @@ "message": "Şu anda yürüklükte olan kuruluş ilkeleri:" }, "sendDisableHideEmailInEffect": { - "message": "Kullanıcıların Send oluştururken veya düzenlerken alıcılardan e-posta adreslerini gizlemeleri yasaklandı.", + "message": "Kullanıcıların Send oluştururken veya düzenlerken alıcılardan e-posta adreslerini gizlemelerine izin verilmiyor.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "modifiedPolicyId": { @@ -3821,55 +3836,55 @@ "message": "İzinler" }, "accessEventLogs": { - "message": "Olay Günlüklerine Erişim" + "message": "Olay günlüklerine erişme" }, "accessImportExport": { - "message": "İçe/Dışa Aktarıma Erişim" + "message": "İçe/dışa aktarıma erişme" }, "accessReports": { - "message": "Raporlara Erişim" + "message": "Raporlara erişme" }, "missingPermissions": { - "message": "You lack the necessary permissions to perform this action." + "message": "Bu eylemi gerçekleştirmek için gereken izinlere sahip değilsiniz." }, "manageAllCollections": { - "message": "Tüm Koleksiyonları Yönetme" + "message": "Tüm koleksiyonları yönetme" }, "createNewCollections": { - "message": "Yeni Koleksiyon Oluştur" + "message": "Yeni koleksiyon oluşturma" }, "editAnyCollection": { - "message": "Edit Any Collection" + "message": "Tüm koleksiyonları düzenleme" }, "deleteAnyCollection": { - "message": "Delete Any Collection" + "message": "Tüm koleksiyonları silme" }, "manageAssignedCollections": { - "message": "Atanmış Koleksiyonları Yönetme" + "message": "Atanmış koleksiyonları yönetme" }, "editAssignedCollections": { - "message": "Edit Assigned Collections" + "message": "Atanmış koleksiyonları düzenleme" }, "deleteAssignedCollections": { - "message": "Delete Assigned Collections" + "message": "Atanmış koleksiyonları silme" }, "manageGroups": { - "message": "Grupları Yönetme" + "message": "Grupları yönetme" }, "managePolicies": { - "message": "İlkeleri Yönetme" + "message": "İlkeleri yönetme" }, "manageSso": { - "message": "SSO Yönetme" + "message": "SSO'yu yönetme" }, "manageUsers": { - "message": "Kullanıcıları Yönetme" + "message": "Kullanıcıları yönetme" }, "manageResetPassword": { - "message": "Parola Sıfırlamayı Yönet" + "message": "Parola sıfırlamayı yönetme" }, "disableRequiredError": { - "message": "You must manually disable the $POLICYNAME$ policy before this policy can be disabled.", + "message": "Bu ilke devre dışı bırakılmadan önce $POLICYNAME$ ilkesini elle devre dışı bırakmanız gerekir.", "placeholders": { "policyName": { "content": "$1", @@ -3884,10 +3899,10 @@ "message": "An organization policy has disabled importing items into your personal vault." }, "personalOwnershipCheckboxDesc": { - "message": "Kurum kullanıcıları için kişisel sahipliği kapat" + "message": "Kuruluş kullanıcıları için kişisel sahipliği kapatma" }, "textHiddenByDefault": { - "message": "Send'e erişirken, varsayılan olarak yazıyı gizle", + "message": "Send'e erişirken varsayılan olarak metni gizle", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNameDesc": { @@ -3964,7 +3979,7 @@ } }, "viewSendHiddenEmailWarning": { - "message": "Bu Send'i oluşturmuş olan Bitwarden kullanıcısı e-posta adresini gizlemeyi seçti. Kullanmadan veya içeriğini indirmeden önce bu bağlantının kaynağının güvenilir olduğundan emin olun.", + "message": "Bu Send'i oluşturan Bitwarden kullanıcısı e-posta adresini gizlemeyi seçti. Kullanmadan veya içeriğini indirmeden önce bu bağlantının kaynağının güvenilir olduğundan emin olun.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDateIsInvalid": { @@ -3983,7 +3998,7 @@ "message": "Silinme ve son kullanma tarihleriniz kaydedilirken bir hata oluştu." }, "webAuthnFallbackMsg": { - "message": "İki aşamalı doğrulamayı teyit etmek için lütfen aşağıdaki düğmeye basın." + "message": "İki aşamalı doğrulamanızı onaylamak için aşağıdaki düğmeye tıklayın." }, "webAuthnAuthenticate": { "message": "WebAutn ile doğrula" @@ -4031,7 +4046,7 @@ } }, "eventAdminPasswordReset": { - "message": "$ID$ kullanıcısı için ana parola sıfırlandı.", + "message": "$ID$ kullanıcısının ana parolası sıfırlandı.", "placeholders": { "id": { "content": "$1", @@ -4103,19 +4118,19 @@ "message": "Yeni kullanıcıları otomatik ekle" }, "resetPasswordAutoEnrollInviteWarning": { - "message": "Bu kuruluşun sizi otomatik olarak parola sıfırlamaya ekleyen bir ilkesi bulunmakta. Eklenmek kuruluş yöneticilerinin ana parolanızı değiştirebilmesini sağlar." + "message": "Bu kuruluşun sizi otomatik olarak parola sıfırlamaya ekleyen bir ilkesi bulunmakta. Bu ilkeye eklenmek, kuruluş yöneticilerinin ana parolanızı değiştirebilmesini sağlar." }, "resetPasswordOrgKeysError": { - "message": "Kuruluş Anahtarları yanıtı boş" + "message": "Kuruluş anahtarları yanıtı boş" }, "resetPasswordDetailsError": { - "message": "Parola Sıfırlama Detayları yanıtı boş" + "message": "Parola sıfırlama detayları yanıtı boş" }, "trashCleanupWarning": { - "message": "30 günden uzun süre çöp kutusunda duran nesneler otomatik olarak silinecekler." + "message": "30 günden uzun süre çöp kutusunda duran kayıtlar otomatik olarak silinecektir." }, "trashCleanupWarningSelfHosted": { - "message": "Bir süre çöp kutusunda durmuş olan nesneler otomatik olarak silinecek." + "message": "Bir süre çöp kutusunda duran kayıtlar otomatik olarak silinecektir." }, "passwordPrompt": { "message": "Ana parolayı yeniden iste" @@ -4130,7 +4145,7 @@ "message": "Davetleri yeniden gönder" }, "noSelectedUsersApplicable": { - "message": "Bu eylem seçilen kullanıcılardan hiçbirine uygulanabilir değil." + "message": "Bu eylem seçilen kullanıcılardan hiçbirine uygulanamıyor." }, "removeUsersWarning": { "message": "Aşağıdaki kullanıcıları kaldırmak istediğinize emin misiniz? İşlemin tamamlanması birkaç saniye sürer ve durdurulamaz veya iptal edilemez." @@ -4160,7 +4175,7 @@ "message": "Başarıyla onaylandı." }, "bulkReinviteMessage": { - "message": "Yeniden davet etme başarılı." + "message": "Yeniden davet edildi." }, "bulkRemovedMessage": { "message": "Başarıyla kaldırıldı" @@ -4181,7 +4196,7 @@ "message": "Parola Sıfırlamayı Yönet izniyle birlikte Kullanıcıları Yönet de açılmak zorundadır" }, "setupProvider": { - "message": "Provider Setup" + "message": "Sağlayıcı kurulumu" }, "setupProviderLoginDesc": { "message": "You've been invited to setup a new provider. To continue, you need to log in or create a new Bitwarden account." @@ -4199,13 +4214,13 @@ "message": "Clients" }, "providerAdmin": { - "message": "Provider Admin" + "message": "Sağlayıcı yöneticisi" }, "providerAdminDesc": { "message": "The highest access user that can manage all aspects of your provider as well as access and manage client organizations." }, "serviceUser": { - "message": "Service User" + "message": "Hizmet kullanıcısı" }, "serviceUserDesc": { "message": "Service users can access and manage all client organizations." @@ -4214,7 +4229,7 @@ "message": "Invite a new user to your provider by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." }, "joinProvider": { - "message": "Join Provider" + "message": "Sağlayıcıya katıl" }, "joinProviderDesc": { "message": "You've been invited to join the provider listed above. To accept the invitation, you need to log in or create a new Bitwarden account." @@ -4363,13 +4378,13 @@ "message": "Tür" }, "openIdConnectConfig": { - "message": "OpenID Connect Configuration" + "message": "OpenID Connect Yapılandırması" }, "samlSpConfig": { - "message": "SAML Service Provider Configuration" + "message": "SAML Servis Sağlayıcı Yapılandırması" }, "samlIdpConfig": { - "message": "SAML Identity Provider Configuration" + "message": "SAML Kimlik Sağlayıcı Yapılandırması" }, "callbackPath": { "message": "Callback Path" @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Kullan" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Teklif kabul edilemedi. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Kullanıldı" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Şimdi kullan" + }, + "recipient": { + "message": "Alıcı" + }, + "removeSponsorship": { + "message": "Sponsorluğu kaldır" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorluk oluştur" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "E-posta gönderildi" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorluk kaldırdıldı" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4519,7 +4651,7 @@ "message": "Ana parola kaldırıldı." }, "allowSso": { - "message": "Allow SSO authentication" + "message": "SSO doğrulamasına izin ver" }, "allowSsoDesc": { "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." @@ -4555,10 +4687,10 @@ "message": "\"Login with SSO and Key Connector Decryption\" is enabled. This policy will only apply to Owners and Admins." }, "enabledSso": { - "message": "Enabled SSO" + "message": "SSO etkinleştirildi" }, "disabledSso": { - "message": "Disabled SSO" + "message": "SSO kapatıldı" }, "enabledKeyConnector": { "message": "Enabled Key Connector" @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Teklifi kabul et" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Başarılı! Key Connector'a ulaşıldı." + }, + "keyConnectorTestFail": { + "message": "Key Connector 'e ulaşılamadı. URL 'i kontrol edin." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/uk/messages.json b/src/locales/uk/messages.json index 911a4637..c73ccf03 100644 --- a/src/locales/uk/messages.json +++ b/src/locales/uk/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Ви справді хочете вилучити цього користувача?" }, + "removeUserConfirmationKeyConnector": { + "message": "Попередження! Цей користувач потребує Key Connector для керування шифруванням. Вилучення цього користувача з вашої організації остаточно вимкне його обліковий запис. Цю дію неможливо скасувати. Ви хочете продовжити?" + }, "externalId": { "message": "Зовнішній ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Повторно надіслати запрошення" }, + "resendEmail": { + "message": "Надіслати лист повторно" + }, "hasBeenReinvited": { "message": "$USER$ було повторно запрошено.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Ваша передплата дозволяє всього $COUNT$ користувачів. Ваш тарифний план спонсорується та оплачується сторонньою організацією.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Коригування вашої передплати призведе до відповідних змін у ваших рахунках. Ви не можете запросити понад $COUNT$ користувачів без збільшення передплачених місць.", "placeholders": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ вперше виконує вхід з використанням SSO", "placeholders": { "id": { "content": "$1", @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Конфігурацію єдиного входу збережено." }, + "sponsoredFamilies": { + "message": "Bitwarden Families безплатно" + }, + "sponsoredFamiliesEligible": { + "message": "Ви та ваша сім'я маєте право на Bitwarden Families безплатно. Активуйте доступ з особистою електронною адресою, щоб зберігати свої дані захищеними навіть коли ви не на роботі." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Активуйте сьогодні безплатний тарифний план Bitwarden Families, щоб зберігати свої дані захищеними, навіть коли ви не на роботі." + }, + "sponsoredFamiliesInclude": { + "message": "Тариф Bitwarden Families включає" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Преміум-доступ до 6 користувачів" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Спільні збірки для обміну паролями" + }, + "badToken": { + "message": "Посилання більше не дійсне. Попросіть спонсора повторно надіслати пропозицію." + }, + "reclaimedFreePlan": { + "message": "Безплатний тариф відновлено" + }, + "redeem": { + "message": "Активувати" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Оберіть організацію, від якої ви бажаєте бути спонсорованими" + }, + "familiesSponsoringOrgSelect": { + "message": "Яку безплатну сімейну пропозицію ви бажаєте активувати?" + }, + "sponsoredFamiliesEmail": { + "message": "Введіть особисту електронну адресу для активації Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "Якщо ви покинете цю організацію, ваш доступ до тарифного плану Bitwarden Families завершиться в кінці оплаченого періоду." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Прийняти пропозицію для наявної організації або створити нову сімейну організацію." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "Вам запропоновано безплатний тарифний план Bitwarden Families від організації. Щоб продовжити, вам необхідно увійти в обліковий запис, на який вам прийшла пропозиція." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Не вдалося прийняти пропозицію. Будь ласка, повторно надішліть лист з пропозицією зі свого корпоративного облікового запису та спробуйте знову." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Не вдалося прийняти пропозицію. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Прийняти безплатно Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Пропозицію безплатного доступу Bitwarden Families успішно активовано" + }, + "redeemed": { + "message": "Активовано" + }, + "redeemedAccount": { + "message": "Обліковий запис активовано" + }, + "revokeAccount": { + "message": "Відкликати обліковий запис $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Повторно надіслати лист про спонсорування до $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Безплатний сімейний план" + }, + "redeemNow": { + "message": "Активувати зараз" + }, + "recipient": { + "message": "Отримувач" + }, + "removeSponsorship": { + "message": "Вилучити спонсорування" + }, + "removeSponsorshipConfirmation": { + "message": "Після вилучення спонсорування, ви будете відповідальні за цю передплату та пов'язані рахунки. Ви дійсно хочете продовжити?" + }, + "sponsorshipCreated": { + "message": "Спонсорування створено" + }, + "revoke": { + "message": "Відкликати" + }, + "emailSent": { + "message": "Лист надіслано" + }, + "revokeSponsorshipConfirmation": { + "message": "Після вилучення цього облікового запису, власники сімейної організації будуть відповідальними за цю передплату та пов'язані рахунки. Ви дійсно хочете продовжити?" + }, + "removeSponsorshipSuccess": { + "message": "Спонсорування вилучено" + }, "ssoKeyConnectorUnavailable": { "message": "Не вдається отримати доступ до Key Connector. Спробуйте знову пізніше." }, @@ -4480,19 +4612,19 @@ "message": "URL-адреса Key Connector" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Надіслати код підтвердження е-поштою" }, "sendCode": { - "message": "Send Code" + "message": "Надіслати код" }, "codeSent": { - "message": "Code Sent" + "message": "Код надіслано" }, "verificationCode": { "message": "Код підтвердження" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Підтвердьте свої облікові дані для продовження." }, "verificationCodeRequired": { "message": "Потрібний код підтвердження." @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Виконано перехід на Key Connector" + }, + "paymentSponsored": { + "message": "Будь ласка, вкажіть спосіб оплати для організації. Не хвилюйтеся, гроші не списуватимуться доки ви не виберете додаткові функції чи не завершиться термін дії передплати. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "Термін дії спонсорської пропозиції завершився. Ви можете видалити створену організацію, щоб уникнути списання грошей після завершення 7 днів пробного періоду. Або ж ви можете закрити цей запит, щоб зберегти організацію та прийняти відповідальність за сплату рахунків." + }, + "newFamiliesOrganization": { + "message": "Нова сімейна організація" + }, + "acceptOffer": { + "message": "Прийняти пропозицію" + }, + "sponsoringOrg": { + "message": "Організація спонсорування" + }, + "keyConnectorTest": { + "message": "Тест" + }, + "keyConnectorTestSuccess": { + "message": "Успішно! Key Connector під'єднано." + }, + "keyConnectorTestFail": { + "message": "Неможливо під'єднатися до Key Connector. Перевірте URL." + }, + "sponsorshipTokenHasExpired": { + "message": "Термін дії пропозиції спонсорування завершилась." + }, + "freeWithSponsorship": { + "message": "БЕЗПЛАТНО зі спонсоруванням" } } diff --git a/src/locales/vi/messages.json b/src/locales/vi/messages.json index e3e244b5..acf199ea 100644 --- a/src/locales/vi/messages.json +++ b/src/locales/vi/messages.json @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, "externalId": { "message": "External Id" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "Resend Invitation" }, + "resendEmail": { + "message": "Resend Email" + }, "hasBeenReinvited": { "message": "$USER$ has been reinvited.", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", "placeholders": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "Single Sign-On configuration was saved." }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you leave or are removed from the sponsoring organization, your Families plan will expire at the end of the billing period." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families organization owner will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, "ssoKeyConnectorUnavailable": { "message": "Unable to reach the Key Connector, try again later." }, @@ -4571,5 +4703,35 @@ }, "migratedKeyConnector": { "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" } } diff --git a/src/locales/zh_CN/messages.json b/src/locales/zh_CN/messages.json index 6e86cd99..59928fd8 100644 --- a/src/locales/zh_CN/messages.json +++ b/src/locales/zh_CN/messages.json @@ -158,16 +158,16 @@ "message": "拖动排序" }, "cfTypeText": { - "message": "文本" + "message": "文本型" }, "cfTypeHidden": { - "message": "隐藏" + "message": "隐藏型" }, "cfTypeBoolean": { - "message": "布尔" + "message": "布尔型" }, "cfTypeLinked": { - "message": "已链接", + "message": "链接型", "description": "This describes a field that is 'linked' (related) to another field." }, "remove": { @@ -1263,7 +1263,7 @@ "message": "此两步登录提供程序已禁用。" }, "twoFactorYubikeyAdd": { - "message": "将一个新的 YubiKey 设备添加到您的帐户" + "message": "将新的 YubiKey 添加到您的帐户" }, "twoFactorYubikeyPlugIn": { "message": "将 YubiKey 插入您电脑的 USB 端口。" @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "您确实要删除此用户吗?" }, + "removeUserConfirmationKeyConnector": { + "message": "警告!此用户需要 Key Connector 来管理他们的加密。从您的组织中移除此用户将永久禁用他们的帐户。此操作无法撤消。您要继续吗?" + }, "externalId": { "message": "外部 ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "重新发送邀请" }, + "resendEmail": { + "message": "重新发送电子邮件" + }, "hasBeenReinvited": { "message": "已重新邀请 $USER$。", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "您的订阅允许总共 $COUNT$ 位用户。您的计划由一个外部组织赞助和支付费用。", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "调整订阅将导致按比例调整您的账单总额。如果不增加订阅席位,您将不能邀请超过 $COUNT$ 位用户。", "placeholders": { @@ -3394,7 +3409,7 @@ "message": "设置主密码" }, "ssoCompleteRegistration": { - "message": "要使用单点登录(SSO)功能,请设置一个主密码以访问和保护您的密码库。" + "message": "要完成 SSO 登录配置,请设置一个主密码以访问和保护您的密码库。" }, "identifier": { "message": "标识符" @@ -3511,14 +3526,14 @@ "message": "过期日期" }, "expirationDateDesc": { - "message": "如果设置了,此 Send 的访问将在指定的日期和时间后过期。", + "message": "设置后,对此 Send 的访问将在指定的日期和时间后过期。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCount": { "message": "最大访问次数" }, "maxAccessCountDesc": { - "message": "如果设置,达到最大访问次数后用户将无法访问此 Send。", + "message": "设置后,当达到最大访问次数时用户将不再能够访问此 Send。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "currentAccessCount": { @@ -4049,7 +4064,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ 首次使用 SSO 登录", "placeholders": { "id": { "content": "$1", @@ -4473,26 +4488,143 @@ "ssoSettingsSaved": { "message": "单点登录配置已保存。" }, + "sponsoredFamilies": { + "message": "免费 Bitwarden 家庭" + }, + "sponsoredFamiliesEligible": { + "message": "您和您的家人可使用免费的 Bitwarden 家庭版计划。即使您不在公司上班,您也可以使用个人电子邮件兑换此计划,以保护您的数据安全。" + }, + "sponsoredFamiliesEligibleCard": { + "message": "立即兑换免费的 Bitwarden 家庭版计划,即使您不在公司上班也能确保您的数据安全。" + }, + "sponsoredFamiliesInclude": { + "message": "Bitwarden 家庭版计划包含" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "最多 6 个用户的高级访问权限" + }, + "sponsoredFamiliesSharedCollections": { + "message": "用于家庭账号密码共享的集合" + }, + "badToken": { + "message": "链接已失效。请让赞助方重新发送邀请。" + }, + "reclaimedFreePlan": { + "message": "已回收免费计划" + }, + "redeem": { + "message": "兑换" + }, + "sponsoredFamiliesSelectOffer": { + "message": "选择您想要赞助的组织" + }, + "familiesSponsoringOrgSelect": { + "message": "您想兑换哪一个免费家庭邀请?" + }, + "sponsoredFamiliesEmail": { + "message": "输入您的个人电子邮件以兑换 Bitwarden 家庭" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "如果您离开或被从这个组织中移除,您的家庭计划将在计费周期结束时到期。" + }, + "acceptBitwardenFamiliesHelp": { + "message": "接受现有组织的邀请或创建一个新的家庭组织。" + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "您已被邀请加入 Bitwarden 家庭计划组织。要继续,您需要登录到接受邀请的账户。" + }, + "sponsoredFamiliesAcceptFailed": { + "message": "无法接受邀请。请重新发送来自您企业帐户的邀请邮件,然后重试。" + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "无法接受邀请。$DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "接受免费的 Bitwarden 家庭组织" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "免费 Bitwarden 家庭邀请已成功兑换" + }, + "redeemed": { + "message": "已兑换" + }, + "redeemedAccount": { + "message": "已兑换账户" + }, + "revokeAccount": { + "message": "撤销账户 $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "重新发送赞助邮件到 $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "免费家庭计划" + }, + "redeemNow": { + "message": "立即兑换" + }, + "recipient": { + "message": "收件人" + }, + "removeSponsorship": { + "message": "移除赞助" + }, + "removeSponsorshipConfirmation": { + "message": "移除赞助后,将由您自己负责此订阅及其相关的账单。您确定要继续吗?" + }, + "sponsorshipCreated": { + "message": "赞助已创建" + }, + "revoke": { + "message": "撤销" + }, + "emailSent": { + "message": "电子邮件已发送" + }, + "revokeSponsorshipConfirmation": { + "message": "移除这个帐户后,家庭组织的所有者将负责此订阅及其相关的账单。您确定要继续吗?" + }, + "removeSponsorshipSuccess": { + "message": "赞助已移除" + }, "ssoKeyConnectorUnavailable": { - "message": "无法连接到密钥连接器,请稍后再试。" + "message": "无法连接到 Key Connector,请稍后再试。" }, "keyConnectorUrl": { - "message": "密钥连接器 URL" + "message": "Key Connector URL" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "发送验证码到您的电子邮箱" }, "sendCode": { - "message": "Send Code" + "message": "发送验证码" }, "codeSent": { - "message": "Code Sent" + "message": "验证码已发送" }, "verificationCode": { "message": "验证码" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "确认您的身份以继续。" }, "verificationCodeRequired": { "message": "必须填写验证码。" @@ -4537,7 +4669,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { - "message": "需要先设置密钥连接器解密,然后才能启用 SSO 身份验证和单一组织策略。" + "message": "需要先设置 Key Connector 解密,然后才能启用 SSO 身份验证和单一组织策略。" }, "memberDecryptionOption": { "message": "成员解密选项" @@ -4546,13 +4678,13 @@ "message": "验证后,成员将使用他们的主密码来解密密码库数据。" }, "keyConnector": { - "message": "密钥连接器" + "message": "Key Connector" }, "memberDecryptionKeyConnectorDesc": { - "message": "连接 SSO 登录到您的自托管解密密钥服务器。使用此选项,成员将不再需要使用他们的主密码来解密密码库数据。联系 Bitwarden 支持以获取设置指导。" + "message": "连接 SSO 登录到您的自托管解密密钥服务器。使用此选项后,成员将不再需要使用他们的主密码来解密密码库数据。联系 Bitwarden 支持以获取设置指导。" }, "keyConnectorPolicyRestriction": { - "message": "“SSO 登录和密钥连接器解密”已启用。此策略仅适用于所有者和管理员。" + "message": "「SSO 登录和 Key Connector 解密」已启用。此策略仅适用于所有者和管理员。" }, "enabledSso": { "message": "已启用 SSO" @@ -4561,15 +4693,45 @@ "message": "已禁用 SSO" }, "enabledKeyConnector": { - "message": "已启用密钥连接器" + "message": "已启用 Key Connector" }, "disabledKeyConnector": { - "message": "已禁用密钥连接器" + "message": "已禁用 Key Connector" }, "keyConnectorWarning": { - "message": "一旦成员开始使用 密钥连接器,您的组织就无法恢复到主密码解密。 仅当您对部署和管理密钥服务器感到满意时才继续。" + "message": "一旦成员开始使用 Key Connector,您的组织就无法恢复到使用主密码解密。仅当您可以轻松地部署和管理密钥服务器时才继续。" }, "migratedKeyConnector": { - "message": "已迁移到密钥连接器" + "message": "已迁移到 Key Connector" + }, + "paymentSponsored": { + "message": "请提供一个与组织关联的付款方式。无需担心,我们不会向您收取任何费用,除非您选择附加功能或您的赞助到期。 " + }, + "orgCreatedSponsorshipInvalid": { + "message": "赞助邀请已过期,您可以删除您创建的组织,以避免 7 天试用期结束时收取费用。您也可以关闭这个提示,以保留此组织并承担计费责任。" + }, + "newFamiliesOrganization": { + "message": "新的家庭组织" + }, + "acceptOffer": { + "message": "接受邀请" + }, + "sponsoringOrg": { + "message": "赞助组织" + }, + "keyConnectorTest": { + "message": "测试" + }, + "keyConnectorTestSuccess": { + "message": "成功!已连接 Key Connector。" + }, + "keyConnectorTestFail": { + "message": "无法连接 Key Connector。请检查 URL。" + }, + "sponsorshipTokenHasExpired": { + "message": "此赞助邀请已过期。" + }, + "freeWithSponsorship": { + "message": "免费赞助" } } diff --git a/src/locales/zh_TW/messages.json b/src/locales/zh_TW/messages.json index 2d4bb9f5..dd4204e7 100644 --- a/src/locales/zh_TW/messages.json +++ b/src/locales/zh_TW/messages.json @@ -158,16 +158,16 @@ "message": "透過拖曳來排序" }, "cfTypeText": { - "message": "文字" + "message": "文字型" }, "cfTypeHidden": { - "message": "隱藏" + "message": "隱藏型" }, "cfTypeBoolean": { "message": "布林值" }, "cfTypeLinked": { - "message": "已連結", + "message": "連結型", "description": "This describes a field that is 'linked' (related) to another field." }, "remove": { @@ -2176,6 +2176,9 @@ "removeUserConfirmation": { "message": "您確定要移除該使用者?" }, + "removeUserConfirmationKeyConnector": { + "message": "警告!這位使用者需要 Key Connector 管理他們的加密方式。從您的組織中移除這位使用者,會永久停用他們的帳戶。此操作無法撤銷,是否繼續?" + }, "externalId": { "message": "外部 ID" }, @@ -2656,6 +2659,9 @@ "resendInvitation": { "message": "重新傳送邀請" }, + "resendEmail": { + "message": "重寄電子郵件" + }, "hasBeenReinvited": { "message": "$USER$ 已被重新邀請。", "placeholders": { @@ -2950,6 +2956,15 @@ } } }, + "subscriptionSponsoredFamiliesPlan": { + "message": "您的訂閱允許總共 $COUNT$ 位使用者。您的方案由外部組織贊助和支付費用。", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, "subscriptionMaxReached": { "message": "對您的訂閱進行調整將導致按比例變更您的帳單總額。在不增加訂閱席位的情況下,您不能邀請超過 $COUNT$ 個使用者。", "placeholders": { @@ -3394,7 +3409,7 @@ "message": "設定主密碼" }, "ssoCompleteRegistration": { - "message": "要完成 SSO 登入,請設定一個主密碼以存取和保護您的密碼庫。" + "message": "要完成 SSO 登入配置,請設定一個主密碼以存取和保護您的密碼庫。" }, "identifier": { "message": "識別符" @@ -3511,14 +3526,14 @@ "message": "逾期日期" }, "expirationDateDesc": { - "message": "如果設定了,對此 Send 的存取將在指定的日期和時間后逾期。", + "message": "如果設定此選項,對此 Send 的存取將在指定的日期和時間後逾期。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCount": { "message": "最大存取次數" }, "maxAccessCountDesc": { - "message": "如果設定了,達到最大存取次數后,使用者將無法存取此 Send。", + "message": "如果設定此選項,當達到最大存取次數時,使用者將無法再次存取此 Send。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "currentAccessCount": { @@ -3887,7 +3902,7 @@ "message": "為組織使用者禁用個人擁有權。" }, "textHiddenByDefault": { - "message": "存取此 Send 時,預設將隱藏文本", + "message": "存取此 Send 時,預設將隱藏文字", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNameDesc": { @@ -4473,6 +4488,123 @@ "ssoSettingsSaved": { "message": "單一登入配置已儲存。" }, + "sponsoredFamilies": { + "message": "免費的 Bitwarden 家庭" + }, + "sponsoredFamiliesEligible": { + "message": "您與家庭成員可使用免費的 Bitwarden 家庭方案。以即使您不在公司上班,也可以使用您的私人電子郵件來兌換此方案,以保護您的資料安全。" + }, + "sponsoredFamiliesEligibleCard": { + "message": "立即兌換您的免費 Bitwarden 家庭方案,以保護您的資料安全,即使您不在公司上班也可以。" + }, + "sponsoredFamiliesInclude": { + "message": "Bitwarden 家庭方案內容包含" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "最多 6 位使用者的付費方案存取權限" + }, + "sponsoredFamiliesSharedCollections": { + "message": "用於家庭間共享帳號密碼的集合" + }, + "badToken": { + "message": "連結已經失效。請讓贊助人重寄邀請。" + }, + "reclaimedFreePlan": { + "message": "已回收免費方案" + }, + "redeem": { + "message": "兌換" + }, + "sponsoredFamiliesSelectOffer": { + "message": "選擇您希望被贊助的組織" + }, + "familiesSponsoringOrgSelect": { + "message": "您想兌換哪一個免費家庭邀請呢?" + }, + "sponsoredFamiliesEmail": { + "message": "輸入您的私人電子郵件以兌換 Bitwarden 家庭" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "如果您離開或被從該組織中移除,您的家庭方案將在計費周期結束時逾期。" + }, + "acceptBitwardenFamiliesHelp": { + "message": "接受現有組織的邀請或創建一個新的家庭組織。" + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "您被邀請加入一個免費的 Bitwarden 家庭方案組織。若要繼續,您需要登入到接受邀請的帳戶。" + }, + "sponsoredFamiliesAcceptFailed": { + "message": "無法接受邀請。請透過您的企業帳戶重寄邀請電子郵件,然後重試。" + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "無法接受邀請。$DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "接受免費 Bitwarden 家庭" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "免費 Bitwarden 家庭邀請已成功兌換" + }, + "redeemed": { + "message": "已兌換" + }, + "redeemedAccount": { + "message": "已兌換帳戶" + }, + "revokeAccount": { + "message": "撤銷帳戶 $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "重寄贊助郵件到 $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "免費家庭方案" + }, + "redeemNow": { + "message": "現在就兌換" + }, + "recipient": { + "message": "收件人" + }, + "removeSponsorship": { + "message": "移除贊助" + }, + "removeSponsorshipConfirmation": { + "message": "移除贊助後,您將自己負責此訂閱和相關的賬單。您確定要繼續嗎?" + }, + "sponsorshipCreated": { + "message": "贊助已創建" + }, + "revoke": { + "message": "撤銷" + }, + "emailSent": { + "message": "郵件已寄出" + }, + "revokeSponsorshipConfirmation": { + "message": "移除此帳戶後,家庭組織的所有者將負責此訂閱和相關的賬單。您確定要繼續嗎?" + }, + "removeSponsorshipSuccess": { + "message": "贊助已移除" + }, "ssoKeyConnectorUnavailable": { "message": "無法連線到 Key Connector。請稍後再試。" }, @@ -4486,7 +4618,7 @@ "message": "傳送驗證碼" }, "codeSent": { - "message": "已送出驗證碼" + "message": "驗證碼已送出" }, "verificationCode": { "message": "驗證碼" @@ -4567,9 +4699,39 @@ "message": "已停用 Key Connector" }, "keyConnectorWarning": { - "message": "一旦成員開始使用 Key Connector,您的組織將無法復原為主密碼解謎。僅當您願意部署和託管金輪伺服器時再繼續。" + "message": "一旦成員開始使用 Key Connector,您的組織將無法復原為使用主密碼解密。僅當您可以輕鬆地部署和管理金輪伺服器時再繼續。" }, "migratedKeyConnector": { "message": "已移轉到 Key Connector" + }, + "paymentSponsored": { + "message": "請提供一個與此組織關聯的付款方式。別擔心,我們不會向您收取任何費用,除非您選擇進階功能或您的贊助到期。 " + }, + "orgCreatedSponsorshipInvalid": { + "message": "贊助邀請已逾期,您可以删除您創建的組織,以避免在 7 天試用期結束時收取費用。 您也可以關閉此提示以保留該組織並承擔計費責任。" + }, + "newFamiliesOrganization": { + "message": "新的家庭組織" + }, + "acceptOffer": { + "message": "接受邀請" + }, + "sponsoringOrg": { + "message": "贊助組織" + }, + "keyConnectorTest": { + "message": "測試" + }, + "keyConnectorTestSuccess": { + "message": "成功!Key Connector 已連接。" + }, + "keyConnectorTestFail": { + "message": "無法連接 Key Connector。請檢查 URL。" + }, + "sponsorshipTokenHasExpired": { + "message": "此贊助邀請已逾期。" + }, + "freeWithSponsorship": { + "message": "免費贊助" } } diff --git a/src/scss/styles.scss b/src/scss/styles.scss index 45a91fe1..481eb855 100644 --- a/src/scss/styles.scss +++ b/src/scss/styles.scss @@ -40,7 +40,7 @@ @import "~bootstrap/scss/_utilities"; @import "~bootstrap/scss/_print"; -@import "~angular2-toaster/toaster"; +@import '~ngx-toastr/toastr'; @import "~font-awesome/scss/font-awesome.scss"; @import "~sweetalert2/src/sweetalert2.scss"; diff --git a/src/scss/toasts.scss b/src/scss/toasts.scss index 5d4c2034..64915ae7 100644 --- a/src/scss/toasts.scss +++ b/src/scss/toasts.scss @@ -1,40 +1,34 @@ .toast-container { - &.toast-top-right { - top: 76px; - } - .toast-close-button { font-size: 18px; margin-right: 4px; } - .toast { + .ngx-toastr { align-items: center; background-image: none !important; border-radius: $border-radius; box-shadow: 0 0 8px rgba(0, 0, 0, 0.35); display: flex; - opacity: 1 !important; + padding: 15px; + + .toast-close-button { + position: absolute; + right: 5px; + top: 0; + } &:hover { box-shadow: 0 0 10px rgba(0, 0, 0, 0.6); } - &:before { - color: #FFFFFF; + .icon i::before { float: left; + font-style: normal; font-family: FontAwesome; font-size: 25px; line-height: 20px; - margin: auto 0 auto 15px; - } - - .toast-content { - padding: 15px; - } - - .toaster-icon { - display: none; + padding-right: 15px; } .toast-message { @@ -48,7 +42,6 @@ } &.toast-danger, &.toast-error { - background-image: none !important; @include themify($themes) { background-color: themed('danger'); } @@ -59,13 +52,12 @@ } } - &:before { + .icon i::before { content: "\f0e7"; } } &.toast-warning { - background-image: none !important; @include themify($themes) { background-color: themed('warning'); } @@ -76,13 +68,12 @@ } } - &:before { + .icon i::before { content: "\f071"; } } &.toast-info { - background-image: none !important; @include themify($themes) { background-color: themed('info'); } @@ -93,13 +84,12 @@ } } - &:before { + .icon i:before { content: "\f05a"; } } &.toast-success { - background-image: none !important; @include themify($themes) { background-color: themed('success'); } @@ -110,16 +100,9 @@ } } - &:before { + .icon i:before { content: "\f00C"; } } } - .layout_frontend .toast-top-right { - top: 20px; - } -} - -.layout_frontend .toast-top-right { - top: 20px; } diff --git a/src/services/broadcasterMessaging.service.ts b/src/services/broadcasterMessaging.service.ts index 6cb22362..f6c675d5 100644 --- a/src/services/broadcasterMessaging.service.ts +++ b/src/services/broadcasterMessaging.service.ts @@ -1,7 +1,9 @@ +import { Injectable } from '@angular/core'; + +import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; -import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; - +@Injectable() export class BroadcasterMessagingService implements MessagingService { constructor(private broadcasterService: BroadcasterService) { } diff --git a/src/services/htmlStorage.service.ts b/src/services/htmlStorage.service.ts index d1516987..00546c03 100644 --- a/src/services/htmlStorage.service.ts +++ b/src/services/htmlStorage.service.ts @@ -1,42 +1,40 @@ -import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { Injectable } from '@angular/core'; + import { StorageService } from 'jslib-common/abstractions/storage.service'; -import { ConstantsService } from 'jslib-common/services/constants.service'; +import { HtmlStorageLocation } from 'jslib-common/enums/htmlStorageLocation'; + +import { GlobalState } from 'jslib-common/models/domain/globalState'; +import { State } from 'jslib-common/models/domain/state'; +import { StorageOptions } from 'jslib-common/models/domain/storageOptions'; + +@Injectable() export class HtmlStorageService implements StorageService { - private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', 'passwordGenerationOptions', - ConstantsService.disableFaviconKey, 'rememberEmail', 'enableGravatars', 'enableFullWidth', - ConstantsService.localeKey, ConstantsService.autoConfirmFingerprints, - ConstantsService.vaultTimeoutKey, ConstantsService.vaultTimeoutActionKey, ConstantsService.ssoCodeVerifierKey, - ConstantsService.ssoStateKey, 'ssoOrgIdentifier', ConstantsService.themeKey]); - private localStorageStartsWithKeys = ['twoFactorToken_', ConstantsService.collapsedGroupingsKey + '_']; - private memoryStorageStartsWithKeys = ['ciphers_', 'folders_', 'collections_', 'settings_', 'lastSync_']; - private memoryStorage = new Map(); - constructor(private platformUtilsService: PlatformUtilsService) { } - - async init() { - // LockOption -> VaultTimeout (uses the same legacy string value for backwards compat) - const vaultTimeout = await this.get(ConstantsService.vaultTimeoutKey); - if (vaultTimeout == null && !this.platformUtilsService.isDev()) { - await this.save(ConstantsService.vaultTimeoutKey, 15); - } - - // Default Action to lock - const vaultTimeoutAction = await this.get(ConstantsService.vaultTimeoutActionKey); - if (vaultTimeoutAction == null) { - await this.save(ConstantsService.vaultTimeoutActionKey, 'lock'); - } + get defaultOptions(): StorageOptions { + return { htmlStorageLocation: HtmlStorageLocation.Session }; } - get(key: string): Promise { + async init() { + const state = await this.get('state', { htmlStorageLocation: HtmlStorageLocation.Local }) ?? new State(); + state.globals = state.globals ?? new GlobalState(); + state.globals.vaultTimeout = state.globals.vaultTimeout ?? 15; + state.globals.vaultTimeoutAction = state.globals.vaultTimeoutAction ?? 'lock'; + await this.save('state', state, { htmlStorageLocation: HtmlStorageLocation.Local }); + } + + get(key: string, options: StorageOptions = this.defaultOptions): Promise { let json: string = null; - if (this.isLocalStorage(key)) { - json = window.localStorage.getItem(key); - } else if (this.isMemoryStorage(key)) { - json = this.memoryStorage.get(key); - } else { - json = window.sessionStorage.getItem(key); + switch (options.htmlStorageLocation) { + case HtmlStorageLocation.Local: + json = window.localStorage.getItem(key); + break; + case HtmlStorageLocation.Session: + default: + json = window.sessionStorage.getItem(key); + break; } + if (json != null) { const obj = JSON.parse(json); return Promise.resolve(obj as T); @@ -44,13 +42,13 @@ export class HtmlStorageService implements StorageService { return Promise.resolve(null); } - async has(key: string): Promise { - return await this.get(key) != null; + async has(key: string, options: StorageOptions = this.defaultOptions): Promise { + return await this.get(key, options) != null; } - save(key: string, obj: any): Promise { + save(key: string, obj: any, options: StorageOptions = this.defaultOptions): Promise { if (obj == null) { - return this.remove(key); + return this.remove(key, options); } if (obj instanceof Set) { @@ -58,45 +56,28 @@ export class HtmlStorageService implements StorageService { } const json = JSON.stringify(obj); - if (this.isLocalStorage(key)) { - window.localStorage.setItem(key, json); - } else if (this.isMemoryStorage(key)) { - this.memoryStorage.set(key, json); - } else { - window.sessionStorage.setItem(key, json); + switch (options.htmlStorageLocation) { + case HtmlStorageLocation.Local: + window.localStorage.setItem(key, json); + break; + case HtmlStorageLocation.Session: + default: + window.sessionStorage.setItem(key, json); + break; } return Promise.resolve(); } - remove(key: string): Promise { - if (this.isLocalStorage(key)) { - window.localStorage.removeItem(key); - } else if (this.isMemoryStorage(key)) { - this.memoryStorage.delete(key); - } else { - window.sessionStorage.removeItem(key); + remove(key: string, options: StorageOptions = this.defaultOptions): Promise { + switch (options.htmlStorageLocation) { + case HtmlStorageLocation.Local: + window.localStorage.removeItem(key); + break; + case HtmlStorageLocation.Session: + default: + window.sessionStorage.removeItem(key); + break; } return Promise.resolve(); } - - private isLocalStorage(key: string): boolean { - if (this.localStorageKeys.has(key)) { - return true; - } - for (const swKey of this.localStorageStartsWithKeys) { - if (key.startsWith(swKey)) { - return true; - } - } - return false; - } - - private isMemoryStorage(key: string): boolean { - for (const swKey of this.memoryStorageStartsWithKeys) { - if (key.startsWith(swKey)) { - return true; - } - } - return false; - } } diff --git a/src/services/webPlatformUtils.service.ts b/src/services/webPlatformUtils.service.ts index 13f754c0..dd7d81a0 100644 --- a/src/services/webPlatformUtils.service.ts +++ b/src/services/webPlatformUtils.service.ts @@ -7,9 +7,7 @@ import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { LogService } from 'jslib-common/abstractions/log.service'; import { MessagingService } from 'jslib-common/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; -import { StorageService } from 'jslib-common/abstractions/storage.service'; - -import { ConstantsService } from 'jslib-common/services/constants.service'; +import { StateService } from 'jslib-common/abstractions/state.service'; export class WebPlatformUtilsService implements PlatformUtilsService { identityClientId: string = 'web'; @@ -18,7 +16,7 @@ export class WebPlatformUtilsService implements PlatformUtilsService { private prefersColorSchemeDark = window.matchMedia('(prefers-color-scheme: dark)'); constructor(private i18nService: I18nService, private messagingService: MessagingService, - private logService: LogService, private storageService: () => StorageService) { } + private logService: LogService, private stateService: StateService) { } getDevice(): DeviceType { if (this.browserCache != null) { @@ -293,7 +291,7 @@ export class WebPlatformUtilsService implements PlatformUtilsService { } async getEffectiveTheme(): Promise { - const theme = await this.storageService().get(ConstantsService.themeKey); + const theme = await this.stateService.getTheme(); if (theme === ThemeType.Dark) { return ThemeType.Dark; } else if (theme === ThemeType.System) { diff --git a/src/theme.js b/src/theme.js index 9e0aa407..f1171ab5 100644 --- a/src/theme.js +++ b/src/theme.js @@ -6,17 +6,20 @@ const htmlEl = document.documentElement; let theme = defaultTheme; - const savedTheme = window.localStorage.getItem('theme'); - if (savedTheme != null) { - if (savedTheme.indexOf('system') > -1) { - theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; - } else if (savedTheme.indexOf('dark') > -1) { - theme = 'dark'; + const stateJson = window.localStorage.getItem('state'); + if (stateJson != null) { + const globals = JSON.parse(stateJson).globals; + if (globals != null && globals.theme != null) { + if (globals.theme.indexOf('system') > -1) { + theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } else if (globals.theme.indexOf('dark') > -1) { + theme = 'dark'; + } + } + + if (!htmlEl.classList.contains('theme_' + theme)) { + htmlEl.classList.remove('theme_' + defaultTheme); + htmlEl.classList.add('theme_' + theme); } } - - if (!htmlEl.classList.contains('theme_' + theme)) { - htmlEl.classList.remove('theme_' + defaultTheme); - htmlEl.classList.add('theme_' + theme); - } })(); diff --git a/tsconfig.json b/tsconfig.json index 16f8f67b..ca00d86f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "module": "commonjs", - "target": "es5", + "target": "es2015", "lib": [ "es5", "es6", @@ -37,6 +37,6 @@ "bitwarden_license/src/app/main.ts" ], "include": [ - "src/connectors/*.ts", + "src/connectors/*.ts" ] } diff --git a/tslint.json b/tslint.json index c087001b..fbeb4f85 100644 --- a/tslint.json +++ b/tslint.json @@ -38,7 +38,6 @@ "object-literal-sort-keys": false, "object-literal-shorthand": [ true, "never" ], "prefer-for-of": false, - "quotemark": [ true, "single" ], "whitespace": [ true, "check-branch", @@ -50,10 +49,6 @@ "check-type" ], "max-classes-per-file": false, - "semicolon": [ - true, - "always" - ], "trailing-comma": [ true, { @@ -67,9 +62,6 @@ } ], "ordered-imports": true, - "arrow-parens": [ - true, - "ban-single-arg-parens" - ] + "arrow-parens": [true] } } diff --git a/webfonts.list b/webfonts.list deleted file mode 100644 index 1818dc4a..00000000 --- a/webfonts.list +++ /dev/null @@ -1 +0,0 @@ -Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i&subset=cyrillic,cyrillic-ext,greek,greek-ext,latin-ext \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index df028968..136b09a6 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,7 +7,7 @@ const HtmlWebpackInjector = require('html-webpack-injector'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const TerserPlugin = require('terser-webpack-plugin'); -const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin; +const { AngularWebpackPlugin } = require('@ngtools/webpack'); const pjson = require('./package.json'); const config = require('./config.js'); @@ -30,43 +30,29 @@ const moduleRules = [ { test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/, exclude: /loading(|-white).svg/, - use: [{ - loader: 'file-loader', - options: { - name: '[name].[ext]', - outputPath: 'fonts/', - }, - }], + generator: { + filename: 'fonts/[name].[ext]', + }, + type: 'asset/resource', }, { test: /\.(jpe?g|png|gif|svg)$/i, exclude: /.*(fontawesome-webfont)\.svg/, - use: [{ - loader: 'file-loader', - options: { - name: '[name].[ext]', - outputPath: 'images/', - }, - }], + generator: { + filename: 'images/[name].[ext]', + }, + type: 'asset/resource', }, { test: /\.scss$/, use: [ { loader: MiniCssExtractPlugin.loader, - options: { - publicPath: '../', - }, }, 'css-loader', 'sass-loader', ], }, - // Hide System.import warnings. ref: https://github.com/angular/angular/issues/21560 - { - test: /[\/\\]@angular[\/\\].+\.js$/, - parser: { system: true }, - }, { test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/, loader: '@ngtools/webpack', @@ -152,8 +138,8 @@ const plugins = [ ], }), new MiniCssExtractPlugin({ - filename: '[name].[hash].css', - chunkFilename: '[id].[hash].css', + filename: '[name].[contenthash].css', + chunkFilename: '[id].[contenthash].css', }), new webpack.EnvironmentPlugin({ 'ENV': ENV, @@ -165,7 +151,10 @@ const plugins = [ 'BRAINTREE_KEY': envConfig['braintreeKey'] ?? '', 'PAYPAL_CONFIG': envConfig['paypal'] ?? {}, }), - new AngularCompilerPlugin({ + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + new AngularWebpackPlugin({ tsConfigPath: 'tsconfig.json', entryModule: 'src/app/app.module#AppModule', sourceMap: true, @@ -175,9 +164,12 @@ const plugins = [ // ref: https://webpack.js.org/configuration/dev-server/#devserver let certSuffix = fs.existsSync('dev-server.local.pem') ? '.local' : '.shared'; const devServer = NODE_ENV !== 'development' ? {} : { - https: { - key: fs.readFileSync('dev-server' + certSuffix + '.pem'), - cert: fs.readFileSync('dev-server' + certSuffix + '.pem'), + server: { + type: 'https', + options: { + key: fs.readFileSync('dev-server' + certSuffix + '.pem'), + cert: fs.readFileSync('dev-server' + certSuffix + '.pem'), + }, }, // host: '192.168.1.9', proxy: { @@ -207,7 +199,13 @@ const devServer = NODE_ENV !== 'development' ? {} : { }, }, hot: false, - allowedHosts: envConfig.dev?.allowedHosts, + allowedHosts: envConfig.dev?.allowedHosts ?? 'auto', + client: { + overlay: { + errors: true, + warnings: false, + }, + }, }; const webpackConfig = { @@ -246,7 +244,6 @@ const webpackConfig = { terserOptions: { safari10: true, }, - sourceMap: true, }), ], }, @@ -254,9 +251,14 @@ const webpackConfig = { extensions: ['.ts', '.js'], symlinks: false, modules: [path.resolve('node_modules')], + fallback: { + "buffer": false, + "util": require.resolve("util/"), + "assert": false, + }, }, output: { - filename: '[name].[hash].js', + filename: '[name].[contenthash].js', path: path.resolve(__dirname, 'build'), }, module: { rules: moduleRules },