1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-02-14 01:01:31 +01:00

Merge remote-tracking branch 'origin/main' into auth/pm-8113/2fa-comps-ui-refresh + merge conflict fixes

This commit is contained in:
Jared Snider 2024-12-19 17:12:02 -05:00
commit 5c49f6edb3
No known key found for this signature in database
GPG Key ID: A149DDD612516286
625 changed files with 29473 additions and 7865 deletions

21
.github/CODEOWNERS vendored
View File

@ -83,6 +83,19 @@ apps/web/src/utils/ @bitwarden/team-platform-dev
apps/web/src/app/core @bitwarden/team-platform-dev
apps/web/src/app/shared @bitwarden/team-platform-dev
apps/web/src/translation-constants.ts @bitwarden/team-platform-dev
# Workflows
.github/workflows/brew-bump-desktop.yml @bitwarden/team-platform-dev
.github/workflows/build-browser.yml @bitwarden/team-platform-dev
.github/workflows/build-cli.yml @bitwarden/team-platform-dev
.github/workflows/build-desktop.yml @bitwarden/team-platform-dev
.github/workflows/build-web.yml @bitwarden/team-platform-dev
.github/workflows/chromatic.yml @bitwarden/team-platform-dev
.github/workflows/lint.yml @bitwarden/team-platform-dev
.github/workflows/locales-lint.yml @bitwarden/team-platform-dev
.github/workflows/repository-management.yml @bitwarden/team-platform-dev
.github/workflows/scan.yml @bitwarden/team-platform-dev
.github/workflows/test.yml @bitwarden/team-platform-dev
.github/workflows/version-auto-bump.yml @bitwarden/team-platform-dev
## Autofill team files ##
apps/browser/src/autofill @bitwarden/team-autofill-dev
@ -92,7 +105,8 @@ apps/desktop/macos/autofill-extension @bitwarden/team-autofill-dev
# DuckDuckGo integration
apps/desktop/native-messaging-test-runner @bitwarden/team-autofill-dev
apps/desktop/src/services/duckduckgo-message-handler.service.ts @bitwarden/team-autofill-dev
# SSH Agent
apps/desktop/desktop_native/core/src/ssh_agent @bitwarden/team-autofill-dev @bitwarden/wg-ssh-keys
## Component Library ##
.storybook @bitwarden/team-design-system
@ -125,9 +139,6 @@ apps/cli/src/locales/en/messages.json
apps/desktop/src/locales/en/messages.json
apps/web/src/locales/en/messages.json
## Ssh agent temporary co-codeowner
apps/desktop/desktop_native/core/src/ssh_agent @bitwarden/team-platform-dev @bitwarden/wg-ssh-keys
## BRE team owns these workflows ##
.github/workflows/brew-bump-desktop.yml @bitwarden/dept-bre
.github/workflows/deploy-web.yml @bitwarden/dept-bre
@ -143,8 +154,6 @@ apps/desktop/desktop_native/core/src/ssh_agent @bitwarden/team-platform-dev @bit
.github/workflows/release-desktop-beta.yml
.github/workflows/release-desktop.yml
.github/workflows/release-web.yml
.github/workflows/version-auto-bump.yml
.github/workflows/version-bump.yml
## Docker files have shared ownership ##
**/Dockerfile

View File

@ -174,6 +174,9 @@ jobs:
build-containers:
name: Build Docker images
runs-on: ubuntu-22.04
permissions:
security-events: write
id-token: write
needs:
- setup
- build-artifacts
@ -270,6 +273,7 @@ jobs:
run: echo "name=$_AZ_REGISTRY/${PROJECT_NAME}:${IMAGE_TAG}" >> $GITHUB_OUTPUT
- name: Build Docker image
id: build-docker
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
with:
context: apps/web
@ -279,11 +283,40 @@ jobs:
tags: ${{ steps.image-name.outputs.name }}
secrets: |
"GH_PAT=${{ steps.retrieve-secret-pat.outputs.github-pat-bitwarden-devops-bot-repo-scope }}"
- name: Install Cosign
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
- name: Sign image with Cosign
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
env:
DIGEST: ${{ steps.build-docker.outputs.digest }}
TAGS: ${{ steps.image-name.outputs.name }}
run: |
IFS="," read -a tags <<< "${TAGS}"
images=""
for tag in "${tags[@]}"; do
images+="${tag}@${DIGEST} "
done
cosign sign --yes ${images}
- name: Scan Docker image
id: container-scan
uses: anchore/scan-action@5ed195cc06065322983cae4bb31e2a751feb86fd # v5.2.0
with:
image: ${{ steps.image-name.outputs.name }}
fail-build: false
output-format: sarif
- name: Upload Grype results to GitHub
uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0
with:
sarif_file: ${{ steps.container-scan.outputs.sarif }}
- name: Log out of Docker
run: docker logout
crowdin-push:
name: Crowdin Push
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'

View File

@ -58,3 +58,31 @@ jobs:
run: |
npm ci
npm run lint
rust:
name: Run Rust lint on ${{ matrix.os }}
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
steps:
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Check Rust version
run: rustup --version
- name: Run cargo fmt
working-directory: ./apps/desktop/desktop_native
run: cargo fmt --check
- name: Run Clippy
working-directory: ./apps/desktop/desktop_native
run: cargo clippy --all-features --tests
env:
RUSTFLAGS: "-D warnings"

View File

@ -66,7 +66,7 @@ jobs:
ref: ${{ github.event.pull_request.head.sha }}
- name: Scan with SonarCloud
uses: sonarsource/sonarcloud-github-action@383f7e52eae3ab0510c3cb0e7d9d150bbaeab838 # v3.1.0
uses: sonarsource/sonarcloud-github-action@02ef91109b2d589e757aefcfb2854c2783fd7b19 # v4.0.0
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,6 +1,6 @@
{
"name": "@bitwarden/browser",
"version": "2024.12.0",
"version": "2024.12.3",
"scripts": {
"build": "npm run build:chrome",
"build:chrome": "cross-env BROWSER=chrome MANIFEST_VERSION=3 webpack",

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "هوية التعبئة التلقائية"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "إنشاء كلمة مرور (تم النسخ)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "أدخل رمز التحقق من 6 أرقام من تطبيق المصادقة الخاص بك."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "أدخل رمز التحقق المكون من 6 أرقام الذي تم إرساله إلى $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "عرض جميع خيارات تسجيل الدخول"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "تم إرسال إشعار إلى جهازك."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "ملء بيانات الاعتماد لـ",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -26,7 +26,7 @@
"message": "Keçid açarı ilə giriş et"
},
"useSingleSignOn": {
"message": "Tək daxil olma üsulunu istifadə et"
"message": "Vahid daxil olma üsulunu istifadə et"
},
"welcomeBack": {
"message": "Yenidən xoş gəlmisiniz"
@ -38,7 +38,7 @@
"message": "Bir parol təyin edərək hesabınızı yaratmağı başa çatdırın"
},
"enterpriseSingleSignOn": {
"message": "Müəssisə üçün tək daxil olma"
"message": "Müəssisə üçün vahid daxil olma"
},
"cancel": {
"message": "İmtina"
@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Kimliyi avto-doldur"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Parol yarat (kopyalandı)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Kimlik doğrulayıcı tətbiqindən 6 rəqəmli doğrulama kodunu daxil edin."
},
"authenticationTimeout": {
"message": "Kimlik doğrulama vaxtı bitdi"
},
"authenticationSessionTimedOut": {
"message": "Kimlik doğrulama seansının vaxtı bitdi. Lütfən giriş prosesini yenidən başladın."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ ünvanına göndərilən e-poçtdakı 6 rəqəmli doğrulama kodunu daxil edin.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Bütün giriş seçimlərinə bax"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Bütün giriş seçimlərinə bax"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Hesabınızın kilidini açın, yeni bir pəncərədə açılır",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Kimlik məlumatlarını doldur",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Аўтазапаўненне асабістых даных"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Генерыраваць пароль (з капіяваннем)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Увядзіце 6 лічбаў праверачнага кода з вашай праграмы аўтэнтыфікацыі."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Увядзіце 6 лічбаў праверачнага кода, які быў адпраўлены на $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Паглядзець усе варыянты ўваходу"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Апавяшчэнне было адпраўлена на вашу прыладу."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Самопопълваща се самоличност"
},
"fillVerificationCode": {
"message": "Попълване на кода за потвърждаване"
},
"fillVerificationCodeAria": {
"message": "Попълване на кода за потвърждаване",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Генериране на парола (копирана)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Въведете шестцифрения код за потвърждение от приложението за удостоверяване."
},
"authenticationTimeout": {
"message": "Време на давност за удостоверяването"
},
"authenticationSessionTimedOut": {
"message": "Сесията за удостоверяване е изтекла. Моля, започнете отначало процеса по вписване."
},
"enterVerificationCodeEmail": {
"message": "Въведете шестцифрения код за потвърждение, който е бил изпратен на $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Вижте всички възможности за вписване"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Вижте всички възможности за вписване"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Отклюване на регистрацията, отваря се в нов прозорец",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Код за потвърждение на еднократната времево-ограничена парола",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Оставащо време преди изтичането на текущия код",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Попълване на данните за",
"description": "Screen reader text for when overlay item is in focused"
@ -4884,10 +4905,10 @@
"message": "Генерирана парола"
},
"compactMode": {
"message": "Compact mode"
"message": "Компактен режим"
},
"beta": {
"message": "Beta"
"message": "Бета"
},
"extensionWidth": {
"message": "Ширина на разширението"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "পাসওয়ার্ড তৈরি করুন (অনুলিপিকৃত)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "আপনার প্রমাণীকরণকারী অ্যাপ থেকে ৬ সংখ্যার যাচাইকরণ কোডটি প্রবেশ করুন।"
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ এ ইমেইল করা ৬ সংখ্যার যাচাই কোডটি প্রবেশ করুন।",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Emplena automàticament l'identitat"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Genera contrasenya (copiada)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Introduïu el codi de verificació de 6 dígits de l'aplicació autenticadora."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Introduïu el codi de verificació de 6 dígits que s'ha enviat per correu electrònic a $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Veure totes les opcions d'inici de sessió"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "S'ha enviat una notificació al vostre dispositiu."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Ompliu les credencials per a",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Automaticky vyplnit identitu"
},
"fillVerificationCode": {
"message": "Vyplnit ověřovací kód"
},
"fillVerificationCodeAria": {
"message": "Vyplnit ověřovací kód",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Vygenerovat heslo a zkopírovat do schránky"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Zadejte 6místný kód z ověřovací aplikace."
},
"authenticationTimeout": {
"message": "Časový limit ověření"
},
"authenticationSessionTimedOut": {
"message": "Vypršel časový limit relace ověřování. Restartujte proces přihlášení."
},
"enterVerificationCodeEmail": {
"message": "Zadejte 6místný kód z e-mailu, který byl zaslán na $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Zobrazit všechny volby přihlášení"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Zobrazit všechny volby přihlášení"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Odemknout účet, otevře se v novém okně",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Ověřovací kód TOTP",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Zbývající čas před vypršením aktuálního TOTP",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Vyplnit přihlašovací údaje pro",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Llenwi hunaniaeth"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Cynhyrchu cyfrinair (wedi'i gopïo)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Gweld pob dewis mewngofnodi"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "A notification has been sent to your device."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autoudfyld identitet"
},
"fillVerificationCode": {
"message": "Udfyld bekræftelseskode"
},
"fillVerificationCodeAria": {
"message": "Udfyld bekræftelseskode",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generér adgangskode (kopieret)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Indtast den 6-cifrede verifikationskode fra din autentificerings-app."
},
"authenticationTimeout": {
"message": "Godkendelsestimeout"
},
"authenticationSessionTimedOut": {
"message": "Godkendelsessessionen fik timeout. Genstart loginprocessen."
},
"enterVerificationCodeEmail": {
"message": "Indtast den 6-cifrede verifikationskode, der blev sendt til $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Vis alle indlogningsmuligheder"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Vis alle indlogningsmuligheder"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Oplås kontoen, åbnes i et nyt vindue",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Tidsbaseret engangs adgangskodebekræftelseskode",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Resterende tid før udløb af aktuel TOTP",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Angiv legitimationsoplysninger for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Identität automatisch ausfüllen"
},
"fillVerificationCode": {
"message": "Verifizierungscode eingeben"
},
"fillVerificationCodeAria": {
"message": "Verifizierungscode eingeben",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Passwort generieren (kopiert)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Gib den 6-stelligen Verifizierungscode aus deiner Authenticator App ein."
},
"authenticationTimeout": {
"message": "Authentifizierungs-Timeout"
},
"authenticationSessionTimedOut": {
"message": "Die Authentifizierungssitzung ist abgelaufen. Bitte starte den Anmeldeprozess neu."
},
"enterVerificationCodeEmail": {
"message": "Gib den 6-stelligen Bestätigungscode ein, der an $EMAIL$ gesendet wurde.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Alle Anmeldeoptionen anzeigen"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Alle Anmeldeoptionen anzeigen"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Dein Konto entsperren, öffnet sich in einem neuen Fenster",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Zeitbasierter einmaliger Passwort-Verifizierungscode",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Verbleibende Zeit bis zum Ablauf des aktuellen TOTP",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Zugangsdaten ausfüllen für",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Αυτόματη συμπλήρωση ταυτότητας"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Δημιουργία κωδικού πρόσβασης (αντιγράφηκε)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Εισάγετε τον 6ψήφιο κωδικό από την εφαρμογή επαλήθευσης."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Εισάγετε τον 6ψήφιο κωδικό επαλήθευσης τον οποίο λάβατε στο $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Δείτε όλες τις επιλογές σύνδεσης"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Μια ειδοποίηση έχει σταλεί στη συσκευή σας."
@ -3574,6 +3587,14 @@
"message": "Ξεκλείδωμα του λογαριασμού σας, ανοίγει σε νέο παράθυρο",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Συμπλήρωση στοιχείων για",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -641,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -3173,7 +3177,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3580,6 +3584,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"
@ -4664,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4895,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Auto-fill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -20,7 +20,7 @@
"message": "Crear cuenta"
},
"newToBitwarden": {
"message": "New to Bitwarden?"
"message": "¿Nuevo en Bitwarden?"
},
"logInWithPasskey": {
"message": "Log in with passkey"
@ -29,7 +29,7 @@
"message": "Use single sign-on"
},
"welcomeBack": {
"message": "Welcome back"
"message": "Bienvenido de nuevo"
},
"setAStrongPassword": {
"message": "Establece una contraseña fuerte"
@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autocompletar identidad"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generar contraseña (copiada)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Introduce el código de verificación de 6 dígitos de tu aplicación autenticadora."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Introduce el código de verificación de 6 dígitos que te ha sido enviado por correo electrónico",
"placeholders": {
@ -1472,7 +1485,7 @@
"message": "Display identities as suggestions"
},
"showInlineMenuCardsLabel": {
"message": "Display cards as suggestions"
"message": "Mostrar tarjetas como sugerencias"
},
"showInlineMenuOnIconSelectionLabel": {
"message": "Display suggestions when icon is selected"
@ -1511,7 +1524,7 @@
"message": "Los sitios web vulnerados o no confiables pueden explotar el autorelleno al cargar la página."
},
"learnMoreAboutAutofillOnPageLoadLinkText": {
"message": "Learn more about risks"
"message": "Más información sobre riesgos"
},
"learnMoreAboutAutofill": {
"message": "Más información sobre el relleno automático"
@ -1580,7 +1593,7 @@
"message": "Booleano"
},
"cfTypeCheckbox": {
"message": "Checkbox"
"message": "Casilla de verificación"
},
"cfTypeLinked": {
"message": "Vinculado",
@ -2391,7 +2404,7 @@
"message": "Texto"
},
"sendTypeTextToShare": {
"message": "Text to share"
"message": "Texto a compartir"
},
"sendTypeFile": {
"message": "Archivo"
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Ver todas las opciones de acceso"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Se ha enviado una notificación a tu dispositivo."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Rellenar credenciales para",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Täida identiteet"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Genereeri parool (kopeeritakse)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Sisesta autentimise rakendusest 6 kohaline number."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Sisesta 6 kohaline number, mis saadeti e-posti aadressile $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Vaata kõiki valikuid"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Sinu seadmesse saadeti teavitus."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Auto-bete nortasuna"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Sortu pasahitza (kopiatuta)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Sartu zure autentifikazio aplikazioaren 6 digituko egiaztatze kodea."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Sartu $EMAIL$-era bidalitako 6 digituko egiaztatze-kodea.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Ikusi erregistro guztiak ezarpenetan"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "A notification has been sent to your device."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "پر کردن خودکار هویت"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "ساخت کلمه عبور (کپی شد)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "کد ۶ رقمی تأیید را از برنامه احراز هویت وارد کنید."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "کد ۶ رقمی تأیید را که به $EMAIL$ ایمیل شده را وارد کنید.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "مشاهده همه گزینه‌های ورود به سیستم"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "یک اعلان به دستگاه شما ارسال شده است."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Automaattitäytä henkilöllisyys"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Luo salasana (leikepöydälle)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Syötä todennussovelluksesi näyttämä kuusinumeroinen todennuskoodi."
},
"authenticationTimeout": {
"message": "Todennuksen aikakatkaisu"
},
"authenticationSessionTimedOut": {
"message": "Todennusistunto aikakatkaistiin. Ole hyvä ja aloita kirjautumisprosessi uudelleen."
},
"enterVerificationCodeEmail": {
"message": "Syötä osoitteeseen $EMAIL$ lähetetty kuusinumeroinen todennuskoodi.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Näytä kaikki kirjautumisvaihtoehdot"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Näytä kaikki kirjautumisvaihtoehdot"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Avaa tilisi lukitus. Avautuu uudessa ikkunassa.",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Täytä kirjautumistiedot kohteesta",
"description": "Screen reader text for when overlay item is in focused"
@ -4890,12 +4911,12 @@
"message": "Beta"
},
"extensionWidth": {
"message": "Extension width"
"message": "Laajennuksen leveys"
},
"wide": {
"message": "Wide"
"message": "Leveä"
},
"extraWide": {
"message": "Extra wide"
"message": "Erittäin leveä"
}
}

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Awtomatikong punan ang pagkakakilanlan"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Maglagay ng Password"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Ipasok ang 6 na digit na code ng pagpapatunay mula sa iyong authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Ipasok ang 6 na digit na code na na-email sa $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Tingnan ang lahat ng mga pagpipilian sa pag log in"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Naipadala na ang notification sa iyong device."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Saisie automatique de l'identité"
},
"fillVerificationCode": {
"message": "Remplir le code de vérification"
},
"fillVerificationCodeAria": {
"message": "Remplir le code de vérification",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Générer un mot de passe (copié)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Saisissez le code de vérification à 6 chiffres depuis votre application d'authentification."
},
"authenticationTimeout": {
"message": "Délai d'authentification dépassé"
},
"authenticationSessionTimedOut": {
"message": "La session d'authentification a expiré. Veuillez redémarrer le processus de connexion."
},
"enterVerificationCodeEmail": {
"message": "Saisissez le code de vérification à 6 chiffres qui a été envoyé par courriel à $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Afficher toutes les options de connexion"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Afficher toutes les options de connexion"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Déverrouiller votre compte, s'ouvre dans une nouvelle fenêtre",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Code de vérification de mot de passe unique basé sur le temps",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Temps restant avant l'expiration du TOTP actuel",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Remplir les identifiants pour",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Encher automaticamente identidade"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Xerar contrasinal (copiado)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "מילוי פרטי זיהוי אוטומטית"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "צור סיסמה (העתק)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "הכנס את קוד האימות בן 6 הספרות מאפליקציית האימות שלך."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "הכנס את קוד האימות בן 6 הספרות שנשלח ל-$EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "स्वचालित पहचान विवरण"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate Password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "अपने ऑथेंटिकेटर ऐप से 6 डिजिट वेरिफिकेशन कोड डालें।"
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Auto-ispuna identiteta"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generiraj lozinku (i kopiraj)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Unesi 6-znamenkasti kontrolni kôd iz autentifikatorske aplikacije."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Unesi 6-znamenkasti kontrolni kôd poslan e-poštom na $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Pogledaj sve mogućnosti prijave"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Obavijest je poslana na tvoj uređaj."
@ -3574,6 +3587,14 @@
"message": "Otključaj račun; otvara se u novom prozoru",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Unesi vjerodajnice za",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Automatikus kitöltés személyazonosság"
},
"fillVerificationCode": {
"message": "Ellenőrző kód kitöltése"
},
"fillVerificationCodeAria": {
"message": "Ellenőrző Kód kitöltése",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Jelszó generálás (másolt)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Add meg a 6 számjegyű ellenőrző kódot a hitelesítő alkalmazásodból."
},
"authenticationTimeout": {
"message": "Hitelesítési időkifutás"
},
"authenticationSessionTimedOut": {
"message": "A hitelesítési munkamenet időkifutással lejárt. Indítsuk újra a bejelentkezési folyamatot."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ email címre elküldött 6 számjegyű ellenőrző kód megadása.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Összes bejelentkezési opció megtekintése"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Összes bejelentkezési opció megtekintése"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Oldjuk fel a fiók zárolását, új ablakban nyílik meg.",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Időalapú, egyszeri jelszó ellenőrző kód",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "A jelenlegi TOTP lejártáig hátralévő idő",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Töltse kia hitelesítő adatokat",
"description": "Screen reader text for when overlay item is in focused"

File diff suppressed because it is too large Load Diff

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Riempi automaticamente identità"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Genera password e copiala"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Inserisci il codice di verifica a 6 cifre dalla tua app di autenticazione."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Inserisci il codice di verifica a 6 cifre inviato a $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Visualizza tutte le opzioni di accesso"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Una notifica è stata inviata al tuo dispositivo."
@ -3574,6 +3587,14 @@
"message": "Sblocca il tuo account, apri in una nuova finestra",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Riempi le credenziali per",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "自動入力 ID"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "パスワードを生成 (コピー)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "認証アプリに表示された6桁の認証コードを入力してください。"
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$に送信された6桁の認証コードを入力してください。",
"placeholders": {
@ -1469,10 +1482,10 @@
"message": "フォームフィールドに自動入力の候補を表示する"
},
"showInlineMenuIdentitiesLabel": {
"message": "Display identities as suggestions"
"message": "ID を候補として表示する"
},
"showInlineMenuCardsLabel": {
"message": "Display cards as suggestions"
"message": "カードを候補として表示する"
},
"showInlineMenuOnIconSelectionLabel": {
"message": "アイコンが選択されているときに候補を表示する"
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "すべてのログインオプションを表示"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "デバイスに通知を送信しました。"
@ -3574,6 +3587,14 @@
"message": "アカウントのロックを解除し、新しいウィンドウで開く",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "資格情報を入力:",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ (ನಕಲಿಸಲಾಗಿದೆ)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "ನಿಮ್ಮ ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ 6 ಅಂಕಿಯ ಪರಿಶೀಲನಾ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ಗೆ ಇಮೇಲ್ ಮಾಡಲಾದ 6 ಅಂಕಿಯ ಪರಿಶೀಲನಾ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

File diff suppressed because it is too large Load Diff

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Tapatybės automatinis užpildymas"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Sukurti slaptažodį (nukopijuotas)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Įvesk 6 skaitmenų patvirtinimo kodą iš tavo autentifikavimo aplikacijos."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Įvesk 6 skaitmenų prisijungimo kodą, kuris buvo išsiųstas $EMAIL$ el. paštu.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Atrakinti savo paskyrą, atidaromas naujame lange",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Užpildykite prisijungimo duomenis",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Automātiski aizpildīt identitāti"
},
"fillVerificationCode": {
"message": "Aizpildīt apliecinājuma kodu"
},
"fillVerificationCodeAria": {
"message": "Aizpildīt apliecinājuma kodu",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Izveidot paroli (tiks ievietota starpliktuvē)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Jāievada 6 ciparu apstiprinājuma kods no autentificētāja lietotnes."
},
"authenticationTimeout": {
"message": "Autentificēšanās noildze"
},
"authenticationSessionTimedOut": {
"message": "Iestājās autentificēšanās sesijas noildze. Lūgums sākt pieteikšanos no jauna."
},
"enterVerificationCodeEmail": {
"message": "Jāievada 6 ciparu apstiprinājuma kods, kas tika nosūtīts uz $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Skatīt visas pieteikšanās iespējas"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Skatīt visas pieteikšanās iespējas"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Atslēgt savu kontu, tiks atvērts jaunā logā",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Laikā balstīts vienreizējas izmantošanas paroles apliecināšanas kods",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Atlikušais laiks, pirms beigsies pašreizējā TOTP derīgums",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Aizpildīt pieteikšanās datus",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "പാസ്‌വേഡ് സൃഷ്ടിക്കുക (പകർത്തുക )"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "നിങ്ങളുടെ ഓതന്റിക്കേറ്റർ അപ്ലിക്കേഷനിൽ നിന്ന് 6 അക്ക സ്ഥിരീകരണ കോഡ് നൽകുക."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ൽ ഇമെയിൽ ചെയ്ത 6 അക്ക സ്ഥിരീകരണ കോഡ് നൽകുക",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Auto-utfyll identitet"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generer et passord (kopiert)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Skriv inn den 6-sifrede verifiseringskoden som står på din autentiseringsapp."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Skriv inn den 6-sifrede verifiseringskoden som ble sendt til",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Vis alle innloggingsalternativer"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Et varsel er sendt til enheten din."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Identiteit automatisch invullen"
},
"fillVerificationCode": {
"message": "Verificatiecode invullen"
},
"fillVerificationCodeAria": {
"message": "Verificatiecode invullen",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Wachtwoord genereren (op klembord)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Voer de 6-cijferige verificatiecode uit je authenticatie-app in."
},
"authenticationTimeout": {
"message": "Authenticatie-timeout"
},
"authenticationSessionTimedOut": {
"message": "De verificatiesessie is verlopen. Start het inlogproces opnieuw op."
},
"enterVerificationCodeEmail": {
"message": "Voer de 6-cijferige verificatiecode in die via e-mail is verstuurd naar $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "Alle inlogopties bekijken"
},
"viewAllLoginOptions": {
"message": "Alle loginopties bekijken"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Er is een melding naar je apparaat verzonden."
@ -3574,6 +3587,14 @@
"message": "Je account ontgrendelen, opent in een nieuw venster",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-gebaseerde eenmalige wachtwoord verificatiecode",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Resterende tijd voordat de huidige TOTP vervalt",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Inloggegevens invullen voor",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -177,7 +177,7 @@
"message": "Kopiuj notatki"
},
"fill": {
"message": "Fill",
"message": "Wypełnij",
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
},
"autoFill": {
@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autouzupełnianie tożsamości"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Wygeneruj hasło (do schowka)"
},
@ -999,7 +1006,7 @@
"message": "Pokaż elementy karty na stronie głównej, aby ułatwić autouzupełnianie."
},
"showIdentitiesInVaultView": {
"message": "Pokaż tożsamośći jako sugestie autouzupełniania w widoku sejfu"
"message": "Pokaż tożsamości jako sugestie autouzupełniania w widoku sejfu"
},
"showIdentitiesCurrentTab": {
"message": "Pokaż tożsamości na stronie głównej"
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Wpisz 6-cyfrowy kod weryfikacyjny z aplikacji uwierzytelniającej."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Wpisz 6-cyfrowy kod weryfikacyjny, który został przesłany na adres $EMAIL$.",
"placeholders": {
@ -1765,7 +1778,7 @@
"message": "Tożsamość"
},
"typeSshKey": {
"message": "SSH key"
"message": "Klucz SSH"
},
"newItemHeader": {
"message": "Nowy $TYPE$",
@ -1798,13 +1811,13 @@
"message": "Historia hasła"
},
"generatorHistory": {
"message": "Generator history"
"message": "Historia generatora"
},
"clearGeneratorHistoryTitle": {
"message": "Clear generator history"
"message": "Wyczyść historię generatora"
},
"cleargGeneratorHistoryDescription": {
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
"message": "Jeśli zatwierdzisz, wszystkie wygenerowane hasła zostaną usunięte z historii generatora. Czy chcesz kontynuować mimo to?"
},
"back": {
"message": "Powrót"
@ -1843,7 +1856,7 @@
"message": "Bezpieczne notatki"
},
"sshKeys": {
"message": "SSH Keys"
"message": "Klucze SSH"
},
"clear": {
"message": "Wyczyść",
@ -1926,10 +1939,10 @@
"message": "Wyczyść historię"
},
"nothingToShow": {
"message": "Nothing to show"
"message": "Brak zawartości do pokazania"
},
"nothingGeneratedRecently": {
"message": "You haven't generated anything recently"
"message": "Nic nie zostało wygenerowane przez ciebie w ostatnim czasie"
},
"remove": {
"message": "Usuń"
@ -2884,7 +2897,7 @@
"message": "Generate email"
},
"spinboxBoundariesHint": {
"message": "Value must be between $MIN$ and $MAX$.",
"message": "Wartość musi być pomiędzy $MIN$ a $MAX$.",
"description": "Explains spin box minimum and maximum values to the user",
"placeholders": {
"min": {
@ -2898,7 +2911,7 @@
}
},
"passwordLengthRecommendationHint": {
"message": " Use $RECOMMENDED$ characters or more to generate a strong password.",
"message": " Użyj $RECOMMENDED$ znaków lub więcej, aby wygenerować silne hasło.",
"description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@ -2908,7 +2921,7 @@
}
},
"passphraseNumWordsRecommendationHint": {
"message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.",
"message": " Użyj $RECOMMENDED$ słów lub więcej, aby wygenerować silne hasło.",
"description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Zobacz wszystkie sposoby logowania"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Powiadomienie zostało wysłane na urządzenie."
@ -3574,6 +3587,14 @@
"message": "Odblokuj swoje konto, otwiera się w nowym oknie",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Wypełnij dane logowania dla",
"description": "Screen reader text for when overlay item is in focused"
@ -4665,28 +4686,28 @@
"message": "Do tego ustalenia zastosowano wymogi polityki przedsiębiorstw"
},
"sshPrivateKey": {
"message": "Private key"
"message": "Klucz prywatny"
},
"sshPublicKey": {
"message": "Public key"
"message": "Klucz publiczny"
},
"sshFingerprint": {
"message": "Fingerprint"
},
"sshKeyAlgorithm": {
"message": "Key type"
"message": "Typ klucza"
},
"sshKeyAlgorithmED25519": {
"message": "ED25519"
},
"sshKeyAlgorithmRSA2048": {
"message": "RSA 2048-Bit"
"message": "RSA 2048-Bitowy"
},
"sshKeyAlgorithmRSA3072": {
"message": "RSA 3072-Bit"
"message": "RSA 3072-Bitowy"
},
"sshKeyAlgorithmRSA4096": {
"message": "RSA 4096-Bit"
"message": "RSA 4096-Bitowy"
},
"retry": {
"message": "Powtórz"
@ -4731,7 +4752,7 @@
"message": "Uwierzytelnianie"
},
"fillGeneratedPassword": {
"message": "Fill generated password",
"message": "Uzupełnij wygenerowanym hasłem",
"description": "Heading for the password generator within the inline menu"
},
"passwordRegenerated": {
@ -4884,18 +4905,18 @@
"message": "Generated password"
},
"compactMode": {
"message": "Compact mode"
"message": "Tryb kompaktowy"
},
"beta": {
"message": "Beta"
},
"extensionWidth": {
"message": "Extension width"
"message": "Szerokość rozszerzenia"
},
"wide": {
"message": "Wide"
"message": "Szerokie"
},
"extraWide": {
"message": "Extra wide"
"message": "Bardzo szerokie"
}
}

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Preenchimento automático identidade"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Gerar Senha (copiada)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Insira o código de verificação de 6 dígitos do seu aplicativo de autenticação."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Insira o código de verificação de 6 dígitos que foi enviado por e-mail para $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Ver todas as opções de login"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Uma notificação foi enviada para seu dispositivo."
@ -3574,6 +3587,14 @@
"message": "Desbloqueie sua conta, abra em uma nova janela",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Preencha as credenciais para",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Preencher automaticamente identidade"
},
"fillVerificationCode": {
"message": "Preencher código de verificação"
},
"fillVerificationCodeAria": {
"message": "Preencher código de verificação",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Gerar palavra-passe (copiada)"
},
@ -1269,7 +1276,7 @@
"message": "Pode adquirir uma subscrição Premium no cofre web em bitwarden.com. Pretende visitar o site agora?"
},
"premiumPurchaseAlertV2": {
"message": "Pode adquirir o Premium a partir das definições da sua conta na aplicação Web do Bitwarden."
"message": "Pode adquirir o Premium a partir das definições da sua conta na aplicação Web Bitwarden."
},
"premiumCurrentMember": {
"message": "É um membro Premium!"
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Introduza o código de verificação de 6 dígitos da sua aplicação de autenticação."
},
"authenticationTimeout": {
"message": "Tempo limite de autenticação"
},
"authenticationSessionTimedOut": {
"message": "A sessão de autenticação expirou. Por favor, reinicie o processo de início de sessão."
},
"enterVerificationCodeEmail": {
"message": "Introduza o código de verificação de 6 dígitos que foi enviado por e-mail para $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Ver todas as opções de início de sessão"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Ver todas as opções de início de sessão"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Desbloqueie a sua conta, abre numa nova janela",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Código de verificação de palavra-passe única com base no tempo",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Tempo restante antes da TOTP atual expirar",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Preencher as credenciais para",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autocompletare identitate"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generare parolă (s-a copiat)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Introducere cod de verificare din 6 cifre din aplicația de autentificare."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Introducere cod de verificare din 6 cifre care a fost trimis prin e-mail la $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Afișați toate opțiunile de conectare"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "O notificare a fost trimisă pe dispozitivul dvs."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Автозаполнение личности"
},
"fillVerificationCode": {
"message": "Заполнить код подтверждения"
},
"fillVerificationCodeAria": {
"message": "Заполнить код подтверждения",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Сгенерировать пароль (с копированием)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Введите 6-значный код подтверждения из вашего приложения-аутентификатора."
},
"authenticationTimeout": {
"message": "Таймаут аутентификации"
},
"authenticationSessionTimedOut": {
"message": "Сеанс аутентификации завершился по времени. Пожалуйста, попробуйте войти еще раз."
},
"enterVerificationCodeEmail": {
"message": "Введите 6-значный код подтверждения, который был отправлен на $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Посмотреть все варианты авторизации"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Посмотреть все варианты авторизации"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Разблокируйте ваш аккаунт, откроется в новом окне",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Код подтверждения, основанный на времени",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Время, оставшееся до истечения срока действия текущего TOTP",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Заполнить учетные данные",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "මුරපදය ජනනය (පිටපත්)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "ඔබගේ සත්යාපන යෙදුමෙන් 6 ඉලක්කම් සත්යාපන කේතය ඇතුළත් කරන්න."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$වෙත ඊමේල් කරන ලද 6 ඉලක්කම් සත්යාපන කේතය ඇතුළත් කරන්න.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Automatické vyplnenie identity"
},
"fillVerificationCode": {
"message": "Vyplniť overovací kód"
},
"fillVerificationCodeAria": {
"message": "Vyplniť overovací kód",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Vygenerovať heslo (skopírované)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Zadajte 6-miestny verifikačný kód z vašej overovacej aplikácie."
},
"authenticationTimeout": {
"message": "Časový limit overenia"
},
"authenticationSessionTimedOut": {
"message": "Relácia overovania skončila. Znovu spustite proces prihlásenia."
},
"enterVerificationCodeEmail": {
"message": "Zadajte 6-miestny verifikačný kód, ktorý vám bol zaslaný emailom",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Zobraziť všetky možnosti prihlásenia"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Zobraziť všetky možnosti prihlásenia"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Odomknúť konto v novom okne",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Overovací kód TOTP",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Čas zostávajúci do vypršania aktuálneho TOTP",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Vyplňte prihlasovacie údaje pre",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Samodejno izpolni identiteto"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generiraj geslo (kopirano)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Vnesite 6-mestno verifikacijsko kodo iz svoje aplikacije za avtentikacijo."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Vnesite 6-mestno verifikacijsko kodo, ki vam je bila poslana na $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Ауто-пуњење идентитета"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Генериши Лозинку (копирано)"
},
@ -1126,7 +1133,7 @@
"description": "WARNING (should stay in capitalized letters if the language permits)"
},
"warningCapitalized": {
"message": "Warning",
"message": "Упозорење",
"description": "Warning (should maintain locale-relevant capitalization)"
},
"confirmVaultExport": {
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Унесите шестоцифрени верификациони код из апликације за утврђивање аутентичности."
},
"authenticationTimeout": {
"message": "Истекло је време аутентификације"
},
"authenticationSessionTimedOut": {
"message": "Истекло је време сесије за аутентификацију. Молим вас покрените процес пријаве поново."
},
"enterVerificationCodeEmail": {
"message": "Унесите шестоцифрени верификациони код који је послан на $EMAIL$.",
"placeholders": {
@ -1768,7 +1781,7 @@
"message": "SSH кључ"
},
"newItemHeader": {
"message": "New $TYPE$",
"message": "Нови $TYPE$",
"placeholders": {
"type": {
"content": "$1",
@ -1813,7 +1826,7 @@
"message": "Колекције"
},
"nCollections": {
"message": "$COUNT$ collections",
"message": "$COUNT$ колекција",
"placeholders": {
"count": {
"content": "$1",
@ -1843,7 +1856,7 @@
"message": "Сигурносне белешке"
},
"sshKeys": {
"message": "SSH Keys"
"message": "SSH Кључеви"
},
"clear": {
"message": "Очисти",
@ -2571,7 +2584,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendExpiresInHours": {
"message": "The Send will be available to anyone with the link for the next $HOURS$ hours.",
"message": "Send ће бити доступан свакоме са везом у наредних $HOURS$ часова.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.",
"placeholders": {
"hours": {
@ -2585,7 +2598,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendExpiresInDays": {
"message": "The Send will be available to anyone with the link for the next $DAYS$ days.",
"message": "Send ће бити доступан свакоме са везом у наредних $DAYS$ дана.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.",
"placeholders": {
"days": {
@ -2884,7 +2897,7 @@
"message": "Генеришите имејл"
},
"spinboxBoundariesHint": {
"message": "Value must be between $MIN$ and $MAX$.",
"message": "Вредност мора бити између $MIN$ и $MAX$.",
"description": "Explains spin box minimum and maximum values to the user",
"placeholders": {
"min": {
@ -2898,7 +2911,7 @@
}
},
"passwordLengthRecommendationHint": {
"message": " Use $RECOMMENDED$ characters or more to generate a strong password.",
"message": " Употребити $RECOMMENDED$ знакова или више да бисте генерисали јаку лозинку.",
"description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@ -2908,7 +2921,7 @@
}
},
"passphraseNumWordsRecommendationHint": {
"message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.",
"message": " Употребити $RECOMMENDED$ речи или више да бисте генерисали јаку приступну фразу.",
"description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@ -3165,25 +3178,25 @@
"message": "Поново послати обавештење"
},
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Погледајте сав извештај у опције"
},
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Обавештење је послато на ваш уређај."
},
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
"message": "Обавештење је послато на ваш уређај"
},
"makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
"message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
"message": "Уверите се да је ваш налог откључан и да се фраза отиска подудара на другом уређају"
},
"youWillBeNotifiedOnceTheRequestIsApproved": {
"message": "You will be notified once the request is approved"
"message": "Бићете обавештени када захтев буде одобрен"
},
"needAnotherOptionV1": {
"message": "Need another option?"
"message": "Треба Вам друга опције?"
},
"loginInitiated": {
"message": "Пријава је покренута"
@ -3279,16 +3292,16 @@
"message": "Отвара се у новом прозору"
},
"rememberThisDeviceToMakeFutureLoginsSeamless": {
"message": "Remember this device to make future logins seamless"
"message": "Запамтити овај уређај да би будуће пријаве биле беспрекорне"
},
"deviceApprovalRequired": {
"message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:"
},
"deviceApprovalRequiredV2": {
"message": "Device approval required"
"message": "Потребно је одобрење уређаја"
},
"selectAnApprovalOptionBelow": {
"message": "Select an approval option below"
"message": "Изаберите опцију одобрења у наставку"
},
"rememberThisDevice": {
"message": "Запамти овај уређај"
@ -3364,7 +3377,7 @@
"message": "Недостаје имејл корисника"
},
"activeUserEmailNotFoundLoggingYouOut": {
"message": "Active user email not found. Logging you out."
"message": "Имејл активног корисника није пронађен. Одјављивање."
},
"deviceTrusted": {
"message": "Уређај поуздан"
@ -3574,6 +3587,14 @@
"message": "Откључајте свој налог, отвара се у новом прозору",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Попунити акредитиве за",
"description": "Screen reader text for when overlay item is in focused"
@ -3803,7 +3824,7 @@
"message": "Приступ"
},
"loggedInExclamation": {
"message": "Logged in!"
"message": "Пријављено!"
},
"passkeyNotCopied": {
"message": "Приступни кључ неће бити копиран"
@ -4297,13 +4318,13 @@
"message": "Филтери"
},
"filterVault": {
"message": "Filter vault"
"message": "Филтер сефа"
},
"filterApplied": {
"message": "One filter applied"
"message": "Примењен је један филтер"
},
"filterAppliedPlural": {
"message": "$COUNT$ filters applied",
"message": "Примењени су $COUNT$ филтера",
"placeholders": {
"count": {
"content": "$1",
@ -4775,55 +4796,55 @@
"description": "Represents the % key in screen reader content as a readable word"
},
"caretCharacterDescriptor": {
"message": "Caret",
"message": "Знак за уметање",
"description": "Represents the ^ key in screen reader content as a readable word"
},
"ampersandCharacterDescriptor": {
"message": "Ampersand",
"message": "Знак Ampersand",
"description": "Represents the & key in screen reader content as a readable word"
},
"asteriskCharacterDescriptor": {
"message": "Asterisk",
"message": "Знак звездица",
"description": "Represents the * key in screen reader content as a readable word"
},
"parenLeftCharacterDescriptor": {
"message": "Left parenthesis",
"message": "Отворена заграда",
"description": "Represents the ( key in screen reader content as a readable word"
},
"parenRightCharacterDescriptor": {
"message": "Right parenthesis",
"message": "Затворена заграда",
"description": "Represents the ) key in screen reader content as a readable word"
},
"hyphenCharacterDescriptor": {
"message": "Underscore",
"message": "Доња црта",
"description": "Represents the _ key in screen reader content as a readable word"
},
"underscoreCharacterDescriptor": {
"message": "Hyphen",
"message": "Цртица",
"description": "Represents the - key in screen reader content as a readable word"
},
"plusCharacterDescriptor": {
"message": "Plus",
"message": "Плус",
"description": "Represents the + key in screen reader content as a readable word"
},
"equalsCharacterDescriptor": {
"message": "Equals",
"message": "Једнако",
"description": "Represents the = key in screen reader content as a readable word"
},
"braceLeftCharacterDescriptor": {
"message": "Left brace",
"message": "Лева велика заграда",
"description": "Represents the { key in screen reader content as a readable word"
},
"braceRightCharacterDescriptor": {
"message": "Right brace",
"message": "Десна велика заграда",
"description": "Represents the } key in screen reader content as a readable word"
},
"bracketLeftCharacterDescriptor": {
"message": "Left bracket",
"message": "Лева заграда",
"description": "Represents the [ key in screen reader content as a readable word"
},
"bracketRightCharacterDescriptor": {
"message": "Right bracket",
"message": "Десна заграда",
"description": "Represents the ] key in screen reader content as a readable word"
},
"pipeCharacterDescriptor": {
@ -4831,71 +4852,71 @@
"description": "Represents the | key in screen reader content as a readable word"
},
"backSlashCharacterDescriptor": {
"message": "Back slash",
"message": "Задња коса црта",
"description": "Represents the back slash key in screen reader content as a readable word"
},
"colonCharacterDescriptor": {
"message": "Colon",
"message": "Две тачке",
"description": "Represents the : key in screen reader content as a readable word"
},
"semicolonCharacterDescriptor": {
"message": "Semicolon",
"message": "Тачка-запета",
"description": "Represents the ; key in screen reader content as a readable word"
},
"doubleQuoteCharacterDescriptor": {
"message": "Double quote",
"message": "Двоструки наводници",
"description": "Represents the double quote key in screen reader content as a readable word"
},
"singleQuoteCharacterDescriptor": {
"message": "Single quote",
"message": "Један наводник",
"description": "Represents the ' key in screen reader content as a readable word"
},
"lessThanCharacterDescriptor": {
"message": "Less than",
"message": "Мање од",
"description": "Represents the < key in screen reader content as a readable word"
},
"greaterThanCharacterDescriptor": {
"message": "Greater than",
"message": "Веће од",
"description": "Represents the > key in screen reader content as a readable word"
},
"commaCharacterDescriptor": {
"message": "Comma",
"message": "Зарез",
"description": "Represents the , key in screen reader content as a readable word"
},
"periodCharacterDescriptor": {
"message": "Period",
"message": "Тачка",
"description": "Represents the . key in screen reader content as a readable word"
},
"questionCharacterDescriptor": {
"message": "Question mark",
"message": "Упитник",
"description": "Represents the ? key in screen reader content as a readable word"
},
"forwardSlashCharacterDescriptor": {
"message": "Forward slash",
"message": "Коса црта",
"description": "Represents the / key in screen reader content as a readable word"
},
"lowercaseAriaLabel": {
"message": "Lowercase"
"message": "Мала слова"
},
"uppercaseAriaLabel": {
"message": "Uppercase"
"message": "Велика слова"
},
"generatedPassword": {
"message": "Generated password"
"message": "Генерисана лозинка"
},
"compactMode": {
"message": "Compact mode"
"message": "Компактни режим"
},
"beta": {
"message": "Beta"
"message": "Бета"
},
"extensionWidth": {
"message": "Extension width"
"message": "Ширина додатка"
},
"wide": {
"message": "Wide"
"message": "Широко"
},
"extraWide": {
"message": "Extra wide"
"message": "Врло широко"
}
}

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofyll identitet"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Skapa lösenord (kopierad)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Ange den 6-siffriga verifieringskoden från din autentiseringsapp."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Ange den 6-siffriga verifieringskoden som skickades till $EMAIL$.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "Visa alla inloggningsalternativ"
},
"viewAllLoginOptions": {
"message": "Visa alla inloggningsalternativ"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "En avisering har skickats till din enhet."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fyll i uppgifter för",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Autofill identity"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Generate Password (copied)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Fill credentials for",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Kimliği otomatik doldur"
},
"fillVerificationCode": {
"message": "Doğrulama kodunu doldur"
},
"fillVerificationCodeAria": {
"message": "Doğrulama kodunu doldur",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Parola oluştur (ve kopyala)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Kimlik doğrulama uygulamanızdaki 6 haneli doğrulama kodunu girin."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ adresine e-postayla gönderdiğimiz 6 haneli doğrulama kodunu girin.",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "Tüm giriş seçeneklerini gör"
},
"viewAllLoginOptions": {
"message": "Tüm giriş seçeneklerini gör"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Cihazınıza bir bildirim gönderildi."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Zamana dayalı tek seferlik parola doğrulama kodu",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Geçerli TOTP için kalan süre",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Bilgileri doldur",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Автозаповнення посвідчень"
},
"fillVerificationCode": {
"message": "Заповнити код підтвердження"
},
"fillVerificationCodeAria": {
"message": "Заповнити код підтвердження",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Генерувати пароль (з копіюванням)"
},
@ -1126,7 +1133,7 @@
"description": "WARNING (should stay in capitalized letters if the language permits)"
},
"warningCapitalized": {
"message": "Warning",
"message": "Попередження",
"description": "Warning (should maintain locale-relevant capitalization)"
},
"confirmVaultExport": {
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Введіть 6-значний код підтвердження з програми автентифікації."
},
"authenticationTimeout": {
"message": "Час очікування автентифікації"
},
"authenticationSessionTimedOut": {
"message": "Час очікування сеансу автентифікації завершився. Перезапустіть процес входу в систему."
},
"enterVerificationCodeEmail": {
"message": "Введіть 6-значний код підтвердження, надісланий на $EMAIL$.",
"placeholders": {
@ -1843,7 +1856,7 @@
"message": "Захищені нотатки"
},
"sshKeys": {
"message": "SSH Keys"
"message": "Ключі SSH"
},
"clear": {
"message": "Стерти",
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "Переглянути всі варіанти входу"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "Переглянути всі варіанти входу"
},
"notificationSentDevice": {
@ -3279,16 +3292,16 @@
"message": "Відкривається у новому вікні"
},
"rememberThisDeviceToMakeFutureLoginsSeamless": {
"message": "Remember this device to make future logins seamless"
"message": "Запам'ятайте цей пристрій, щоб спростити майбутні входи в систему"
},
"deviceApprovalRequired": {
"message": "Необхідне підтвердження пристрою. Виберіть варіант підтвердження нижче:"
},
"deviceApprovalRequiredV2": {
"message": "Device approval required"
"message": "Потрібне підтвердження пристрою"
},
"selectAnApprovalOptionBelow": {
"message": "Select an approval option below"
"message": "Виберіть варіант підтвердження нижче"
},
"rememberThisDevice": {
"message": "Запам'ятати цей пристрій"
@ -3364,7 +3377,7 @@
"message": "Немає адреси електронної пошти"
},
"activeUserEmailNotFoundLoggingYouOut": {
"message": "Active user email not found. Logging you out."
"message": "Адресу е-пошти активного користувача не знайдено. Виконується вихід із системи."
},
"deviceTrusted": {
"message": "Довірений пристрій"
@ -3574,6 +3587,14 @@
"message": "Розблокування облікового запису відкриється нове вікно",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Код підтвердження одноразового пароля",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Час, що залишився до завершення чинного TOTP",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Заповнити облікові дані для",
"description": "Screen reader text for when overlay item is in focused"
@ -3803,7 +3824,7 @@
"message": "Доступ"
},
"loggedInExclamation": {
"message": "Logged in!"
"message": "Ви увійшли!"
},
"passkeyNotCopied": {
"message": "Ключ доступу не буде скопійовано"
@ -4890,12 +4911,12 @@
"message": "Бета"
},
"extensionWidth": {
"message": "Extension width"
"message": "Ширина вікна розширення"
},
"wide": {
"message": "Wide"
"message": "Широке"
},
"extraWide": {
"message": "Extra wide"
"message": "Дуже широке"
}
}

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "Tự động điền danh tính"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "Tạo mật khẩu (đã sao chép)"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "Nhập mã xác nhận 6 chữ số từ ứng dụng xác thực của bạn."
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "Nhập mã xác nhận 6 chữ số đã được gửi tới email",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "Xem tất cả tùy chọn đăng nhập"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "Một thông báo đã được gửi đến thiết bị của bạn."
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "Điền thông tin đăng nhập cho",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "自动填充身份"
},
"fillVerificationCode": {
"message": "填写验证码"
},
"fillVerificationCodeAria": {
"message": "填写验证码",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "生成密码(并复制)"
},
@ -345,7 +352,7 @@
"message": "免费 Bitwarden 家庭"
},
"freeBitwardenFamiliesPageDesc": {
"message": "您有资格获得免费的 Bitwarden 家庭。立即在网页应用中兑换此优惠。"
"message": "您有资格获得免费的 Bitwarden 家庭。立即在网页 App 中兑换此优惠。"
},
"version": {
"message": "版本"
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "请输入您的验证器 App 中的 6 位数验证码。"
},
"authenticationTimeout": {
"message": "身份验证超时"
},
"authenticationSessionTimedOut": {
"message": "身份验证会话超时。请重新启动登录过程。"
},
"enterVerificationCodeEmail": {
"message": "请输入发送给电子邮件 $EMAIL$ 的 6 位数验证码。",
"placeholders": {
@ -3167,7 +3180,7 @@
"viewAllLogInOptions": {
"message": "查看所有登录选项"
},
"viewAllLoginOptions": {
"viewAllLoginOptionsV1": {
"message": "查看所有登录选项"
},
"notificationSentDevice": {
@ -3574,6 +3587,14 @@
"message": "解锁您的账户(在新窗口中打开)",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "基于时间的一次性密码验证码",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "TOTP 到期前剩余时间",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "为其填写凭据",
"description": "Screen reader text for when overlay item is in focused"
@ -3705,7 +3726,7 @@
}
},
"duoHealthCheckResultsInNullAuthUrlError": {
"message": "与 Duo 服务连接时出错。请使用不同的两步登录方式或联系 Duo 寻求帮助。"
"message": "与 Duo 服务连接时出错。请使用不同的两步登录方式或联系 Duo 获取协助。"
},
"launchDuoAndFollowStepsToFinishLoggingIn": {
"message": "启动 DUO 并按照步骤完成登录。"

View File

@ -192,6 +192,13 @@
"autoFillIdentity": {
"message": "自動填入身分資訊"
},
"fillVerificationCode": {
"message": "Fill verification code"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
"message": "產生及複製密碼"
},
@ -1319,6 +1326,12 @@
"enterVerificationCodeApp": {
"message": "輸入驗證器應用程式提供的 6 位數驗證碼。"
},
"authenticationTimeout": {
"message": "Authentication timeout"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"enterVerificationCodeEmail": {
"message": "輸入已傳送至 $EMAIL$ 的 6 位數驗證碼。",
"placeholders": {
@ -3167,8 +3180,8 @@
"viewAllLogInOptions": {
"message": "View all log in options"
},
"viewAllLoginOptions": {
"message": "檢視所有登入選項"
"viewAllLoginOptionsV1": {
"message": "View all log in options"
},
"notificationSentDevice": {
"message": "已傳送通知至您的裝置。"
@ -3574,6 +3587,14 @@
"message": "Unlock your account, opens in a new window",
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
"message": "填入登入資訊給",
"description": "Screen reader text for when overlay item is in focused"

View File

@ -30,7 +30,7 @@
<div class="footer">
{{ "loginWithDeviceEnabledInfo" | i18n }}
<a href="#" (click)="back()">{{ "viewAllLoginOptions" | i18n }}</a>
<a href="#" (click)="back()">{{ "viewAllLoginOptionsV1" | i18n }}</a>
</div>
</div>
</ng-container>
@ -53,7 +53,7 @@
<div class="footer">
{{ "troubleLoggingIn" | i18n }}
<a routerLink="/login-initiated">{{ "viewAllLoginOptions" | i18n }}</a>
<a routerLink="/login-initiated">{{ "viewAllLoginOptionsV1" | i18n }}</a>
</div>
</div>
</ng-container>

View File

@ -0,0 +1,67 @@
import { TestBed } from "@angular/core/testing";
import { mock, MockProxy } from "jest-mock-extended";
import { BehaviorSubject } from "rxjs";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import {
EnvironmentService,
Environment,
} from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { BrowserApi } from "../../../platform/browser/browser-api";
import { ExtensionSsoComponentService } from "./extension-sso-component.service";
describe("ExtensionSsoComponentService", () => {
let service: ExtensionSsoComponentService;
const baseUrl = "https://vault.bitwarden.com";
let syncService: MockProxy<SyncService>;
let authService: MockProxy<AuthService>;
let environmentService: MockProxy<EnvironmentService>;
let i18nService: MockProxy<I18nService>;
let logService: MockProxy<LogService>;
beforeEach(() => {
syncService = mock<SyncService>();
authService = mock<AuthService>();
environmentService = mock<EnvironmentService>();
i18nService = mock<I18nService>();
logService = mock<LogService>();
environmentService.environment$ = new BehaviorSubject<Environment>({
getWebVaultUrl: () => baseUrl,
} as Environment);
TestBed.configureTestingModule({
providers: [
{ provide: SyncService, useValue: syncService },
{ provide: AuthService, useValue: authService },
{ provide: EnvironmentService, useValue: environmentService },
{ provide: I18nService, useValue: i18nService },
{ provide: LogService, useValue: logService },
ExtensionSsoComponentService,
],
});
service = TestBed.inject(ExtensionSsoComponentService);
jest.spyOn(BrowserApi, "reloadOpenWindows").mockImplementation();
});
it("creates the service", () => {
expect(service).toBeTruthy();
});
describe("closeWindow", () => {
it("closes window", async () => {
const windowSpy = jest.spyOn(window, "close").mockImplementation();
await service.closeWindow?.();
expect(windowSpy).toHaveBeenCalled();
});
});
});

View File

@ -0,0 +1,34 @@
import { Injectable } from "@angular/core";
import { DefaultSsoComponentService, SsoComponentService } from "@bitwarden/auth/angular";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
/**
* This service is used to handle the SSO login process for the browser extension.
*/
@Injectable()
export class ExtensionSsoComponentService
extends DefaultSsoComponentService
implements SsoComponentService
{
constructor(
protected syncService: SyncService,
protected authService: AuthService,
protected environmentService: EnvironmentService,
protected i18nService: I18nService,
protected logService: LogService,
) {
super();
}
/**
* Closes the popup window after a successful login.
*/
async closeWindow() {
window.close();
}
}

View File

@ -29,9 +29,9 @@ import { BrowserApi } from "../../platform/browser/browser-api";
@Component({
selector: "app-sso",
templateUrl: "sso.component.html",
templateUrl: "sso-v1.component.html",
})
export class SsoComponent extends BaseSsoComponent {
export class SsoComponentV1 extends BaseSsoComponent {
constructor(
ssoLoginService: SsoLoginServiceAbstraction,
loginStrategyService: LoginStrategyServiceAbstraction,

View File

@ -160,6 +160,9 @@ export type InlineMenuCipherData = {
icon: WebsiteIconData;
accountCreationFieldType?: string;
login?: {
totp?: string;
totpField?: boolean;
totpCodeTimeInterval?: number;
username: string;
passkey: {
rpName: string;
@ -262,6 +265,7 @@ export type InlineMenuListPortMessageHandlers = {
updateAutofillInlineMenuListHeight: ({ message, port }: PortOnMessageHandlerParams) => void;
refreshGeneratedPassword: () => Promise<void>;
fillGeneratedPassword: ({ port }: PortConnectionParam) => Promise<void>;
refreshOverlayCiphers: () => Promise<void>;
};
export interface OverlayBackground {

View File

@ -928,6 +928,7 @@ describe("OverlayBackground", () => {
login: {
username: "username-1",
passkey: null,
totpField: false,
},
name: "name-1",
reprompt: loginCipher1.reprompt,
@ -1065,6 +1066,7 @@ describe("OverlayBackground", () => {
login: {
username: loginCipher1.login.username,
passkey: null,
totpField: false,
},
name: loginCipher1.name,
reprompt: loginCipher1.reprompt,
@ -1189,6 +1191,7 @@ describe("OverlayBackground", () => {
rpName: passkeyCipher.login.fido2Credentials[0].rpName,
userName: passkeyCipher.login.fido2Credentials[0].userName,
},
totpField: false,
},
},
{
@ -1207,6 +1210,7 @@ describe("OverlayBackground", () => {
login: {
username: passkeyCipher.login.username,
passkey: null,
totpField: false,
},
},
{
@ -1225,6 +1229,7 @@ describe("OverlayBackground", () => {
login: {
username: loginCipher1.login.username,
passkey: null,
totpField: false,
},
},
],
@ -1272,6 +1277,7 @@ describe("OverlayBackground", () => {
login: {
username: passkeyCipher.login.username,
passkey: null,
totpField: false,
},
},
{
@ -1290,6 +1296,7 @@ describe("OverlayBackground", () => {
login: {
username: loginCipher1.login.username,
passkey: null,
totpField: false,
},
},
],
@ -1337,6 +1344,7 @@ describe("OverlayBackground", () => {
login: {
username: passkeyCipher.login.username,
passkey: null,
totpField: false,
},
},
{
@ -1355,6 +1363,7 @@ describe("OverlayBackground", () => {
login: {
username: loginCipher1.login.username,
passkey: null,
totpField: false,
},
},
],
@ -1400,6 +1409,7 @@ describe("OverlayBackground", () => {
login: {
username: loginCipher1.login.username,
passkey: null,
totpField: false,
},
},
{
@ -1418,6 +1428,7 @@ describe("OverlayBackground", () => {
login: {
username: loginCipher2.login.username,
passkey: null,
totpField: false,
},
},
],

View File

@ -204,6 +204,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
updateAutofillInlineMenuListHeight: ({ message }) => this.updateInlineMenuListHeight(message),
refreshGeneratedPassword: () => this.updateGeneratedPassword(true),
fillGeneratedPassword: ({ port }) => this.fillGeneratedPassword(port),
refreshOverlayCiphers: () => this.updateOverlayCiphers(false),
};
constructor(
@ -464,7 +465,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
this.showPasskeysLabelsWithinInlineMenu = false;
if (this.shouldShowInlineMenuAccountCreation()) {
inlineMenuCipherData = this.buildInlineMenuAccountCreationCiphers(
inlineMenuCipherData = await this.buildInlineMenuAccountCreationCiphers(
inlineMenuCiphersArray,
true,
);
@ -485,7 +486,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
* @param inlineMenuCiphersArray - Array of inline menu ciphers
* @param showFavicons - Identifies whether favicons should be shown
*/
private buildInlineMenuAccountCreationCiphers(
private async buildInlineMenuAccountCreationCiphers(
inlineMenuCiphersArray: [string, CipherView][],
showFavicons: boolean,
) {
@ -497,7 +498,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
if (cipher.type === CipherType.Login) {
accountCreationLoginCiphers.push(
this.buildCipherData({
await this.buildCipherData({
inlineMenuCipherId,
cipher,
showFavicons,
@ -517,7 +518,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
}
inlineMenuCipherData.push(
this.buildCipherData({
await this.buildCipherData({
inlineMenuCipherId,
cipher,
showFavicons,
@ -561,13 +562,13 @@ export class OverlayBackground implements OverlayBackgroundInterface {
if (!passkeysEnabled || !(await this.showCipherAsPasskey(cipher, domainExclusionsSet))) {
inlineMenuCipherData.push(
this.buildCipherData({ inlineMenuCipherId, cipher, showFavicons }),
await this.buildCipherData({ inlineMenuCipherId, cipher, showFavicons }),
);
continue;
}
passkeyCipherData.push(
this.buildCipherData({
await this.buildCipherData({
inlineMenuCipherId,
cipher,
showFavicons,
@ -577,7 +578,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
if (cipher.login?.password && cipher.login.username) {
inlineMenuCipherData.push(
this.buildCipherData({ inlineMenuCipherId, cipher, showFavicons }),
await this.buildCipherData({ inlineMenuCipherId, cipher, showFavicons }),
);
}
}
@ -620,6 +621,23 @@ export class OverlayBackground implements OverlayBackgroundInterface {
return this.inlineMenuFido2Credentials.has(credentialId);
}
private isTotpFieldForCurrentField(): boolean {
if (!this.focusedFieldData) {
return false;
}
const { tabId, frameId } = this.focusedFieldData;
const pageDetailsMap = this.pageDetailsForTab[tabId];
if (!pageDetailsMap || !pageDetailsMap.has(frameId)) {
return false;
}
const pageDetail = pageDetailsMap.get(frameId);
return (
pageDetail?.details?.fields?.every((field) =>
this.inlineMenuFieldQualificationService.isTotpField(field),
) || false
);
}
/**
* Builds the cipher data for the inline menu list.
*
@ -630,14 +648,14 @@ export class OverlayBackground implements OverlayBackgroundInterface {
* @param hasPasskey - Identifies whether the cipher has a FIDO2 credential
* @param identityData - Pre-created identity data
*/
private buildCipherData({
private async buildCipherData({
inlineMenuCipherId,
cipher,
showFavicons,
showInlineMenuAccountCreation,
hasPasskey,
identityData,
}: BuildCipherDataParams): InlineMenuCipherData {
}: BuildCipherDataParams): Promise<InlineMenuCipherData> {
const inlineMenuData: InlineMenuCipherData = {
id: inlineMenuCipherId,
name: cipher.name,
@ -649,8 +667,13 @@ export class OverlayBackground implements OverlayBackgroundInterface {
};
if (cipher.type === CipherType.Login) {
const totpCode = await this.totpService.getCode(cipher.login?.totp);
const totpCodeTimeInterval = this.totpService.getTimeInterval(cipher.login?.totp);
inlineMenuData.login = {
username: cipher.login.username,
totp: totpCode,
totpField: this.isTotpFieldForCurrentField(),
totpCodeTimeInterval: totpCodeTimeInterval,
passkey: hasPasskey
? {
rpName: cipher.login.fido2Credentials[0].rpName,
@ -1980,35 +2003,39 @@ export class OverlayBackground implements OverlayBackgroundInterface {
private getInlineMenuTranslations() {
if (!this.inlineMenuPageTranslations) {
const translationKeys = [
"addNewCardItemAria",
"addNewIdentityItemAria",
"addNewLoginItemAria",
"addNewVaultItem",
"authenticating",
"cardNumberEndsWith",
"fillCredentialsFor",
"fillGeneratedPassword",
"fillVerificationCode",
"fillVerificationCodeAria",
"generatedPassword",
"lowercaseAriaLabel",
"logInWithPasskeyAriaLabel",
"newCard",
"newIdentity",
"newItem",
"newLogin",
"noItemsToShow",
"opensInANewWindow",
"passkeys",
"passwordRegenerated",
"passwords",
"regeneratePassword",
"saveLoginToBitwarden",
"toggleBitwardenVaultOverlay",
"unlockYourAccountToViewAutofillSuggestions",
"totpCodeAria",
"totpSecondsSpanAria",
"unlockAccount",
"unlockAccountAria",
"fillCredentialsFor",
"unlockYourAccountToViewAutofillSuggestions",
"uppercaseAriaLabel",
"username",
"view",
"noItemsToShow",
"newItem",
"addNewVaultItem",
"newLogin",
"addNewLoginItemAria",
"newCard",
"addNewCardItemAria",
"newIdentity",
"addNewIdentityItemAria",
"cardNumberEndsWith",
"passkeys",
"passwords",
"logInWithPasskeyAriaLabel",
"authenticating",
"fillGeneratedPassword",
"regeneratePassword",
"passwordRegenerated",
"saveLoginToBitwarden",
"lowercaseAriaLabel",
"uppercaseAriaLabel",
"generatedPassword",
...Object.values(specialCharacterToKeyMap),
];
this.inlineMenuPageTranslations = translationKeys.reduce(

View File

@ -25,6 +25,7 @@ import { BrowserScriptInjectorService } from "../../../platform/services/browser
import { AbortManager } from "../../../vault/background/abort-manager";
import { Fido2ContentScript, Fido2ContentScriptId } from "../enums/fido2-content-script.enum";
import { Fido2PortName } from "../enums/fido2-port-name.enum";
import { BrowserFido2ParentWindowReference } from "../services/browser-fido2-user-interface.service";
import { Fido2ExtensionMessage } from "./abstractions/fido2.background";
import { Fido2Background } from "./fido2.background";
@ -56,7 +57,7 @@ describe("Fido2Background", () => {
let senderMock!: MockProxy<chrome.runtime.MessageSender>;
let logService!: MockProxy<LogService>;
let fido2ActiveRequestManager: MockProxy<Fido2ActiveRequestManager>;
let fido2ClientService!: MockProxy<Fido2ClientService>;
let fido2ClientService!: MockProxy<Fido2ClientService<BrowserFido2ParentWindowReference>>;
let vaultSettingsService!: MockProxy<VaultSettingsService>;
let scriptInjectorServiceMock!: MockProxy<BrowserScriptInjectorService>;
let configServiceMock!: MockProxy<ConfigService>;
@ -73,7 +74,7 @@ describe("Fido2Background", () => {
});
senderMock = mock<chrome.runtime.MessageSender>({ id: "1", tab: tabMock });
logService = mock<LogService>();
fido2ClientService = mock<Fido2ClientService>();
fido2ClientService = mock<Fido2ClientService<BrowserFido2ParentWindowReference>>();
vaultSettingsService = mock<VaultSettingsService>();
abortManagerMock = mock<AbortManager>();
abortController = mock<AbortController>();

View File

@ -23,10 +23,11 @@ import { ScriptInjectorService } from "../../../platform/services/abstractions/s
import { AbortManager } from "../../../vault/background/abort-manager";
import { Fido2ContentScript, Fido2ContentScriptId } from "../enums/fido2-content-script.enum";
import { Fido2PortName } from "../enums/fido2-port-name.enum";
import { BrowserFido2ParentWindowReference } from "../services/browser-fido2-user-interface.service";
import {
Fido2Background as Fido2BackgroundInterface,
Fido2BackgroundExtensionMessageHandlers,
Fido2Background as Fido2BackgroundInterface,
Fido2ExtensionMessage,
SharedFido2ScriptInjectionDetails,
SharedFido2ScriptRegistrationOptions,
@ -56,7 +57,7 @@ export class Fido2Background implements Fido2BackgroundInterface {
constructor(
private logService: LogService,
private fido2ActiveRequestManager: Fido2ActiveRequestManager,
private fido2ClientService: Fido2ClientService,
private fido2ClientService: Fido2ClientService<BrowserFido2ParentWindowReference>,
private vaultSettingsService: VaultSettingsService,
private scriptInjectorService: ScriptInjectorService,
private configService: ConfigService,

View File

@ -111,11 +111,15 @@ export type BrowserFido2Message = { sessionId: string } & (
}
);
export type BrowserFido2ParentWindowReference = chrome.tabs.Tab;
/**
* Browser implementation of the {@link Fido2UserInterfaceService}.
* The user interface is implemented as a popout and the service uses the browser's messaging API to communicate with it.
*/
export class BrowserFido2UserInterfaceService implements Fido2UserInterfaceServiceAbstraction {
export class BrowserFido2UserInterfaceService
implements Fido2UserInterfaceServiceAbstraction<BrowserFido2ParentWindowReference>
{
constructor(private authService: AuthService) {}
async newSession(

View File

@ -681,10 +681,121 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
class="cipher-container"
>
<button
aria-description="username: username5"
aria-label="fillCredentialsFor website login 5"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon"
>
<div
style="position: relative;"
>
<svg
aria-hidden="true"
viewBox="0 0 29 29"
xmlns="http://www.w3.org/2000/svg"
>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="12.5"
stroke-dasharray="78.5"
stroke-dashoffset="78.5"
stroke-width="3"
style="stroke-dashoffset: NaN;"
transform="rotate(-90 14.5 14.5)"
/>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="14"
stroke-width="1"
/>
</svg>
<span
aria-label=""
bittypography="helper"
class="totp-sec-span"
>
NaN
</span>
</div>
</span>
<div
class="cipher-details"
>
<span
aria-label=""
class="cipher-name"
/>
<span
aria-label=""
class="cipher-subtitle"
data-testid="totp-code"
>
123 456
</span>
</div>
</button>
<button
aria-label="view website login 5, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-description="username: username6"
aria-label="fillCredentialsFor website login 6"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
@ -696,18 +807,420 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
>
<span
class="cipher-name"
title="website login 5"
title="website login 6"
>
website login 5
website login 6
</span>
<span
class="cipher-subtitle"
title="username5"
title="username6"
>
username5
username6
</span>
</span>
</button>
<button
aria-label="view website login 6, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
</ul>
</div>
`;
exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers for an authenticated user creates the view for a totp field 1`] = `
<div
class="inline-menu-list-container theme_light"
>
<ul
class="inline-menu-list-actions"
role="list"
>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-description="username: username1"
aria-label="fillCredentialsFor website login 1"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon"
style="background-image: url(https://jest-testing-website.com/image.png);"
/>
<span
class="cipher-details"
>
<span
class="cipher-name"
title="website login 1"
>
website login 1
</span>
<span
class="cipher-subtitle"
title="username1"
>
username1
</span>
</span>
</button>
<button
aria-label="view website login 1, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-description="username: username2"
aria-label="fillCredentialsFor website login 2"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon bwi bw-icon"
/>
<span
class="cipher-details"
>
<span
class="cipher-name"
title="website login 2"
>
website login 2
</span>
<span
class="cipher-subtitle"
title="username2"
>
username2
</span>
</span>
</button>
<button
aria-label="view website login 2, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-label="fillCredentialsFor "
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon bwi bw-icon"
/>
<span
class="cipher-details"
/>
</button>
<button
aria-label="view , opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-description="username: username4"
aria-label="fillCredentialsFor website login 4"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon"
>
<svg
aria-hidden="true"
fill="none"
height="25"
viewBox="0 0 24 25"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<path
clip-rule="evenodd"
d="M18.026 17.842c-1.418 1.739-3.517 2.84-5.86 2.84a7.364 7.364 0 0 1-3.431-.848l.062-.15.062-.151.063-.157c.081-.203.17-.426.275-.646.133-.28.275-.522.426-.68.026-.028.101-.075.275-.115.165-.037.376-.059.629-.073.138-.008.288-.014.447-.02.399-.016.847-.034 1.266-.092.314-.044.566-.131.755-.271a.884.884 0 0 0 .352-.555c.037-.2.008-.392-.03-.543-.035-.135-.084-.264-.12-.355l-.01-.03a4.26 4.26 0 0 0-.145-.33c-.126-.264-.237-.497-.288-1.085-.03-.344.09-.73.251-1.138l.089-.22c.05-.123.1-.247.14-.355.064-.171.129-.375.129-.566a1.51 1.51 0 0 0-.134-.569 2.573 2.573 0 0 0-.319-.547c-.246-.323-.635-.669-1.093-.669-.44 0-1.006.169-1.487.368-.246.102-.48.216-.68.33-.192.111-.372.235-.492.359-.93.96-1.48 1.239-1.81 1.258-.277.017-.478-.15-.736-.525a9.738 9.738 0 0 1-.19-.29l-.006-.01a11.568 11.568 0 0 0-.198-.305 2.76 2.76 0 0 0-.521-.6 1.39 1.39 0 0 0-1.088-.314 8.302 8.302 0 0 1 1.987-3.936c.055.342.146.626.272.856.23.42.561.64.926.716.406.086.857-.061 1.26-.216.125-.047.248-.097.372-.147.309-.125.618-.25.947-.341.26-.072.581-.057.959.012.264.049.529.118.8.19l.36.091c.379.094.782.178 1.135.148.374-.032.733-.197.934-.623a.874.874 0 0 0 .024-.752c-.087-.197-.24-.355-.35-.47-.26-.267-.412-.427-.412-.685 0-.125.037-.2.09-.263a.982.982 0 0 1 .303-.211c.059-.03.119-.058.183-.089l.036-.016a3.79 3.79 0 0 0 .236-.118c.047-.026.098-.056.148-.093 1.936.747 3.51 2.287 4.368 4.249a7.739 7.739 0 0 0-.031-.004c-.38-.047-.738-.056-1.063.061-.34.123-.603.368-.817.74-.122.211-.284.43-.463.67l-.095.129c-.207.281-.431.595-.58.92-.15.326-.245.705-.142 1.103.104.397.387.738.837 1.036.099.065.225.112.314.145l.02.008c.108.04.195.074.268.117.07.042.106.08.124.114.017.03.037.087.022.206-.047.376-.069.73-.052 1.034.017.292.071.59.218.809.118.174.12.421.108.786v.01a2.46 2.46 0 0 0 .021.518.809.809 0 0 0 .15.35Zm1.357.059a9.654 9.654 0 0 0 1.62-5.386c0-5.155-3.957-9.334-8.836-9.334-4.88 0-8.836 4.179-8.836 9.334 0 3.495 1.82 6.543 4.513 8.142v.093h.161a8.426 8.426 0 0 0 4.162 1.098c2.953 0 5.568-1.53 7.172-3.882a.569.569 0 0 0 .048-.062l-.004-.003ZM8.152 19.495a43.345 43.345 0 0 1 .098-.238l.057-.142c.082-.205.182-.455.297-.698.143-.301.323-.624.552-.864.163-.172.392-.254.602-.302.219-.05.473-.073.732-.088.162-.01.328-.016.495-.023.386-.015.782-.03 1.168-.084.255-.036.392-.099.461-.15.06-.045.076-.084.083-.12a.534.534 0 0 0-.02-.223 2.552 2.552 0 0 0-.095-.278l-.01-.027a3.128 3.128 0 0 0-.104-.232c-.134-.282-.31-.65-.374-1.381-.046-.533.138-1.063.3-1.472.035-.09.069-.172.1-.249.046-.11.086-.21.123-.31.062-.169.083-.264.083-.312a.812.812 0 0 0-.076-.283 1.867 1.867 0 0 0-.23-.394c-.21-.274-.428-.408-.577-.408-.315 0-.788.13-1.246.32a5.292 5.292 0 0 0-.603.293 1.727 1.727 0 0 0-.347.244c-.936.968-1.641 1.421-2.235 1.457-.646.04-1.036-.413-1.31-.813-.07-.103-.139-.21-.203-.311l-.005-.007c-.064-.101-.125-.197-.188-.29a2.098 2.098 0 0 0-.387-.453.748.748 0 0 0-.436-.18c-.1-.006-.22.005-.365.046a8.707 8.707 0 0 0-.056.992c0 2.957 1.488 5.547 3.716 6.98Zm10.362-2.316.003-.192.002-.046c.01-.305.026-.786-.232-1.169-.036-.054-.082-.189-.096-.444-.014-.243.003-.55.047-.9a1.051 1.051 0 0 0-.105-.649.987.987 0 0 0-.374-.374 2.285 2.285 0 0 0-.367-.166h-.003a1.243 1.243 0 0 1-.205-.088c-.369-.244-.505-.46-.549-.629-.044-.168-.015-.364.099-.61.115-.25.297-.511.507-.796l.089-.12c.178-.239.368-.495.512-.745.152-.263.302-.382.466-.441.18-.065.416-.073.77-.03.142.018.275.04.397.063.274.837.423 1.736.423 2.671a8.45 8.45 0 0 1-1.384 4.665Zm-4.632-12.63a7.362 7.362 0 0 0-1.715-.201c-1.89 0-3.621.716-4.965 1.905.025.54.12.887.24 1.105.13.238.295.34.482.38.2.042.484-.027.905-.188l.328-.13c.32-.13.681-.275 1.048-.377.398-.111.833-.075 1.24 0 .289.053.59.132.871.205l.326.084c.383.094.694.151.932.13.216-.017.326-.092.395-.237.039-.083.027-.114.014-.144-.027-.062-.088-.136-.212-.264l-.043-.044c-.218-.222-.567-.578-.567-1.142 0-.305.101-.547.262-.734.137-.159.308-.267.46-.347Z"
fill="#777"
fill-rule="evenodd"
/>
</svg>
</span>
<span
class="cipher-details"
>
<span
class="cipher-name"
title="website login 4"
>
website login 4
</span>
<span
class="cipher-subtitle"
title="username4"
>
username4
</span>
</span>
</button>
<button
aria-label="view website login 4, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-label="fillCredentialsFor website login 5"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon"
>
<div
style="position: relative;"
>
<svg
aria-hidden="true"
viewBox="0 0 29 29"
xmlns="http://www.w3.org/2000/svg"
>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="12.5"
stroke-dasharray="78.5"
stroke-dashoffset="78.5"
stroke-width="3"
style="stroke-dashoffset: NaN;"
transform="rotate(-90 14.5 14.5)"
/>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="14"
stroke-width="1"
/>
</svg>
<span
aria-label=""
bittypography="helper"
class="totp-sec-span"
>
NaN
</span>
</div>
</span>
<div
class="cipher-details"
>
<span
aria-label=""
class="cipher-name"
/>
<span
aria-label=""
class="cipher-subtitle"
data-testid="totp-code"
>
123 456
</span>
</div>
</button>
<button
aria-label="view website login 5, opensInANewWindow"
class="view-cipher-button"
@ -1112,7 +1625,6 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
class="cipher-container"
>
<button
aria-description="username: username5"
aria-label="fillCredentialsFor website login 5"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
@ -1120,24 +1632,66 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
<span
aria-hidden="true"
class="cipher-icon"
style="background-image: url(https://jest-testing-website.com/image.png);"
/>
<span
>
<div
style="position: relative;"
>
<svg
aria-hidden="true"
viewBox="0 0 29 29"
xmlns="http://www.w3.org/2000/svg"
>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="12.5"
stroke-dasharray="78.5"
stroke-dashoffset="78.5"
stroke-width="3"
style="stroke-dashoffset: NaN;"
transform="rotate(-90 14.5 14.5)"
/>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="14"
stroke-width="1"
/>
</svg>
<span
aria-label=""
bittypography="helper"
class="totp-sec-span"
>
NaN
</span>
</div>
</span>
<div
class="cipher-details"
>
<span
aria-label=""
class="cipher-name"
title="website login 5"
>
website login 5
</span>
/>
<span
aria-label=""
class="cipher-subtitle"
title="username5"
data-testid="totp-code"
>
username5
123 456
</span>
</span>
</div>
</button>
<button
aria-label="view website login 5, opensInANewWindow"
@ -1543,7 +2097,6 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
class="cipher-container"
>
<button
aria-description="username: username5"
aria-label="fillCredentialsFor website login 5"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
@ -1551,24 +2104,66 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
<span
aria-hidden="true"
class="cipher-icon"
style="background-image: url(https://jest-testing-website.com/image.png);"
/>
<span
>
<div
style="position: relative;"
>
<svg
aria-hidden="true"
viewBox="0 0 29 29"
xmlns="http://www.w3.org/2000/svg"
>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="12.5"
stroke-dasharray="78.5"
stroke-dashoffset="78.5"
stroke-width="3"
style="stroke-dashoffset: NaN;"
transform="rotate(-90 14.5 14.5)"
/>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="14"
stroke-width="1"
/>
</svg>
<span
aria-label=""
bittypography="helper"
class="totp-sec-span"
>
NaN
</span>
</div>
</span>
<div
class="cipher-details"
>
<span
aria-label=""
class="cipher-name"
title="website login 5"
>
website login 5
</span>
/>
<span
aria-label=""
class="cipher-subtitle"
title="username5"
data-testid="totp-code"
>
username5
123 456
</span>
</span>
</div>
</button>
<button
aria-label="view website login 5, opensInANewWindow"

View File

@ -140,6 +140,31 @@ describe("AutofillInlineMenuList", () => {
expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot();
});
it("creates the view for a totp field", () => {
postWindowMessage(
createInitAutofillInlineMenuListMessageMock({
inlineMenuFillType: CipherType.Login,
ciphers: [
createAutofillOverlayCipherDataMock(5, {
type: CipherType.Login,
login: {
totp: "123456",
totpField: true,
},
}),
],
}),
);
const cipherSubtitleElement = autofillInlineMenuList[
"inlineMenuListContainer"
].querySelector('[data-testid="totp-code"]');
expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot();
expect(cipherSubtitleElement).not.toBeNull();
expect(cipherSubtitleElement.textContent).toBe("123 456");
});
it("creates the views for a list of card ciphers", () => {
postWindowMessage(
createInitAutofillInlineMenuListMessageMock({

View File

@ -1046,6 +1046,64 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
cipherIcon.classList.add("cipher-icon");
cipherIcon.setAttribute("aria-hidden", "true");
if (cipher.login?.totpField && cipher.login?.totp) {
const totpContainer = document.createElement("div");
totpContainer.style.position = "relative";
const svgElement = buildSvgDomElement(`
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 29 29">
<circle fill="none" cx="14.5" cy="14.5" r="12.5"
stroke-width="3" stroke-dasharray="78.5"
stroke-dashoffset="78.5" transform="rotate(-90 14.5 14.5)"></circle>
<circle fill="none" cx="14.5" cy="14.5" r="14" stroke-width="1"></circle>
</svg>
`);
const [innerCircleElement, outerCircleElement] = svgElement.querySelectorAll("circle");
innerCircleElement.classList.add("circle-color");
outerCircleElement.classList.add("circle-color");
totpContainer.appendChild(svgElement);
const totpSecondsSpan = document.createElement("span");
totpSecondsSpan.classList.add("totp-sec-span");
totpSecondsSpan.setAttribute("bitTypography", "helper");
totpSecondsSpan.setAttribute("aria-label", this.getTranslation("totpSecondsSpanAria"));
totpContainer.appendChild(totpSecondsSpan);
cipherIcon.appendChild(totpContainer);
const intervalSeconds = cipher.login.totpCodeTimeInterval;
const updateCountdown = () => {
const epoch = Math.round(Date.now() / 1000);
const mod = epoch % intervalSeconds;
const totpSeconds = intervalSeconds - mod;
totpSecondsSpan.textContent = `${totpSeconds}`;
/**
* Design specifies a seven-second time span as the period where expiry is approaching.
*/
const totpExpiryApproaching = totpSeconds <= 7;
totpSecondsSpan.classList.toggle("totp-sec-span-danger", totpExpiryApproaching);
innerCircleElement.classList.toggle("circle-danger-color", totpExpiryApproaching);
outerCircleElement.classList.toggle("circle-danger-color", totpExpiryApproaching);
innerCircleElement.style.strokeDashoffset = `${((intervalSeconds - totpSeconds) / intervalSeconds) * (2 * Math.PI * 12.5)}`;
if (mod === 0) {
this.postMessageToParent({ command: "refreshOverlayCiphers" });
}
};
updateCountdown();
setInterval(updateCountdown, 1000);
return cipherIcon;
}
if (cipher.icon?.image) {
try {
const url = new URL(cipher.icon.image);
@ -1104,6 +1162,9 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
return this.buildPasskeysCipherDetailsElement(cipher, cipherDetailsElement);
}
if (cipher.login?.totpField && cipher.login?.totp) {
return this.buildTotpElement(cipher.login?.totp);
}
const subTitleText = this.getSubTitleText(cipher);
const cipherSubtitleElement = this.buildCipherSubtitleElement(subTitleText);
if (cipherSubtitleElement) {
@ -1113,6 +1174,38 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
return cipherDetailsElement;
}
/**
* Builds a TOTP element for a given TOTP code.
*
* @param totp - The TOTP code to display.
*/
private buildTotpElement(totpCode: string): HTMLDivElement | null {
if (!totpCode) {
return null;
}
const formattedTotpCode = `${totpCode.substring(0, 3)} ${totpCode.substring(3)}`;
const containerElement = globalThis.document.createElement("div");
containerElement.classList.add("cipher-details");
const totpHeading = document.createElement("span");
totpHeading.classList.add("cipher-name");
totpHeading.textContent = this.getTranslation("fillVerificationCode");
totpHeading.setAttribute("aria-label", this.getTranslation("fillVerificationCodeAria"));
containerElement.appendChild(totpHeading);
const subtitleElement = document.createElement("span");
subtitleElement.classList.add("cipher-subtitle");
subtitleElement.textContent = formattedTotpCode;
subtitleElement.setAttribute("aria-label", this.getTranslation("totpCodeAria"));
subtitleElement.setAttribute("data-testid", "totp-code");
containerElement.appendChild(subtitleElement);
return containerElement;
}
/**
* Builds the name element for a given cipher.
*

View File

@ -350,6 +350,32 @@ body * {
text-align: left;
}
.totp-sec-span {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
@include themify($themes) {
color: themed("textColor");
}
}
.totp-sec-span-danger {
@include themify($themes) {
color: themed("passwordSpecialColor");
}
}
.circle-color {
@include themify($themes) {
stroke: themed("primaryColor");
}
}
.circle-danger-color {
@include themify($themes) {
stroke: themed("passwordSpecialColor");
}
}
.cipher-name,
.cipher-subtitle {
display: block;

View File

@ -50,7 +50,7 @@
<bit-section>
<bit-item>
<a bit-item-content routerLink="/excluded-domains">{{ "excludedDomains" | i18n }}</a>
<i slot="end" class="bwi bwi-angle-right bwi-lg row-sub-icon" aria-hidden="true"></i>
<i slot="end" class="bwi bwi-angle-right row-sub-icon" aria-hidden="true"></i>
</bit-item>
</bit-section>
</div>

View File

@ -45,4 +45,5 @@ export interface InlineMenuFieldQualificationService {
isFieldForIdentityUsername(field: AutofillField): boolean;
isElementLoginSubmitButton(element: Element): boolean;
isElementChangePasswordSubmitButton(element: Element): boolean;
isTotpField(field: AutofillField): boolean;
}

View File

@ -21,7 +21,23 @@ describe("InlineMenuFieldQualificationService", () => {
});
describe("isFieldForLoginForm", () => {
it("disqualifies totp fields", () => {
it("does not disqualify totp fields with flag set to true", () => {
inlineMenuFieldQualificationService["inlineMenuTotpFeatureFlag"] = true;
const field = mock<AutofillField>({
type: "text",
autoCompleteType: "one-time-code",
htmlName: "totp",
htmlID: "totp",
placeholder: "totp",
});
expect(inlineMenuFieldQualificationService.isFieldForLoginForm(field, pageDetails)).toBe(
true,
);
});
it("disqualify totp fields with flag set to false", () => {
inlineMenuFieldQualificationService["inlineMenuTotpFeatureFlag"] = false;
const field = mock<AutofillField>({
type: "text",
autoCompleteType: "one-time-code",

View File

@ -150,12 +150,16 @@ export class InlineMenuFieldQualificationService
]);
private totpFieldAutocompleteValue = "one-time-code";
private inlineMenuFieldQualificationFlagSet = false;
private inlineMenuTotpFeatureFlag = false;
constructor() {
void sendExtensionMessage("getInlineMenuFieldQualificationFeatureFlag").then(
(getInlineMenuFieldQualificationFlag) =>
(this.inlineMenuFieldQualificationFlagSet = !!getInlineMenuFieldQualificationFlag?.result),
);
void Promise.all([
sendExtensionMessage("getInlineMenuFieldQualificationFeatureFlag"),
sendExtensionMessage("getInlineMenuTotpFeatureFlag"),
]).then(([fieldQualificationFlag, totpFeatureFlag]) => {
this.inlineMenuFieldQualificationFlagSet = !!fieldQualificationFlag?.result;
this.inlineMenuTotpFeatureFlag = !!totpFeatureFlag?.result;
});
}
/**
@ -169,8 +173,15 @@ export class InlineMenuFieldQualificationService
return this.isFieldForLoginFormFallback(field);
}
if (this.isTotpField(field)) {
return false;
/**
* Autofill does not fill password type totp input fields
*/
if (this.inlineMenuTotpFeatureFlag) {
const isTotpField = this.isTotpField(field);
const passwordType = field.type === "password";
if (isTotpField && !passwordType) {
return true;
}
}
const isCurrentPasswordField = this.isCurrentPasswordField(field);
@ -987,7 +998,7 @@ export class InlineMenuFieldQualificationService
*
* @param field - The field to validate
*/
private isTotpField = (field: AutofillField): boolean => {
isTotpField = (field: AutofillField): boolean => {
if (this.fieldContainsAutocompleteValues(field, this.totpFieldAutocompleteValue)) {
return true;
}

View File

@ -5,20 +5,34 @@ $dark-icon-themes: "theme_dark", "theme_solarizedDark", "theme_nord";
$font-family-sans-serif: "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
$font-family-source-code-pro: "Source Code Pro", monospace;
$font-size-base: 14px;
$text-color: #212529;
$muted-text-color: #6c747c;
$border-color: #ced4dc;
$text-color-light: #212529;
$muted-text-color-light: #6c747c;
$background-color-light: #ffffff;
$background-offset-color-light: #f0f0f0;
$brand-primary-light: #175ddc;
$password-special-color-light: #b80017;
$password-number-color-light: #1452c1;
$success-color-light: #017e45;
$error-color-light: #c83522;
$text-color-dark: #ffffff;
$muted-text-color-dark: #bac0ce;
$background-color-dark: #2f343d;
$background-offset-color-dark: darken(#2f343d, 2.75%);
$border-color-dark: #ddd;
$brand-primary-dark: #6f9df1;
$password-special-color-dark: #ff8d85;
$password-number-color-dark: #6f9df1;
$success-color-dark: #8db89b;
$error-color-dark: #ee9792;
$muted-blue: #5a6d91;
$muted-grey: #bac0ce;
$border-color: #ced4dc;
$border-radius: 3px;
$focus-outline-color: #1252a3;
$muted-blue: #5a6d91;
$password-special-color: #b80017;
$password-number-color: #1452c1;
$brand-primary: #175ddc;
$background-color: #ffffff;
$background-offset-color: #f0f0f0;
$solarizedDarkBase0: #839496;
$solarizedDarkBase03: #002b36;
@ -28,48 +42,42 @@ $solarizedDarkBase2: #eee8d5;
$solarizedDarkCyan: #2aa198;
$solarizedDarkGreen: #859900;
$success-color-light: #017e45;
$success-color-dark: #8db89b;
$error-color-light: #c83522;
$error-color-dark: #ee9792;
$themes: (
light: (
textColor: $text-color,
mutedTextColor: $muted-text-color,
backgroundColor: $background-color,
backgroundOffsetColor: $background-offset-color,
primaryColor: $brand-primary,
buttonPrimaryColor: $brand-primary,
textContrast: $background-color,
textColor: $text-color-light,
mutedTextColor: $muted-text-color-light,
backgroundColor: $background-color-light,
backgroundOffsetColor: $background-offset-color-light,
primaryColor: $brand-primary-light,
buttonPrimaryColor: $brand-primary-light,
textContrast: $background-color-light,
inputBorderColor: darken($border-color-dark, 2.75%),
inputBackgroundColor: #ffffff,
inputBackgroundColor: $background-color-light,
borderColor: $border-color,
focusOutlineColor: $focus-outline-color,
successColor: $success-color-light,
errorColor: $error-color-light,
passkeysAuthenticating: $muted-blue,
passwordSpecialColor: $password-special-color,
passwordNumberColor: $password-number-color,
passwordSpecialColor: $password-special-color-light,
passwordNumberColor: $password-number-color-light,
),
dark: (
textColor: #ffffff,
mutedTextColor: #bac0ce,
backgroundColor: #2f343d,
backgroundOffsetColor: darken(#2f343d, 2.75%),
buttonPrimaryColor: #6f9df1,
primaryColor: #6f9df1,
textContrast: #2f343d,
textColor: $text-color-dark,
mutedTextColor: $muted-text-color-dark,
backgroundColor: $background-color-dark,
backgroundOffsetColor: $background-offset-color-dark,
buttonPrimaryColor: $brand-primary-dark,
primaryColor: $brand-primary-dark,
textContrast: $background-color-dark,
inputBorderColor: #4c525f,
inputBackgroundColor: #2f343d,
inputBackgroundColor: $background-color-dark,
borderColor: #4c525f,
focusOutlineColor: lighten($focus-outline-color, 25%),
successColor: $success-color-dark,
errorColor: $error-color-dark,
passkeysAuthenticating: #bac0ce,
passwordSpecialColor: #ff8d85,
passwordNumberColor: #6f9df1,
passkeysAuthenticating: $muted-grey,
passwordSpecialColor: $password-special-color-dark,
passwordNumberColor: $password-number-color-dark,
),
nord: (
textColor: $nord5,

View File

@ -241,7 +241,7 @@ export function createInitAutofillInlineMenuListMessageMock(
createAutofillOverlayCipherDataMock(4, {
icon: { imageEnabled: false, image: "", fallbackImage: "", icon: "" },
}),
createAutofillOverlayCipherDataMock(5),
createAutofillOverlayCipherDataMock(5, { login: { totp: "123456", totpField: true } }),
createAutofillOverlayCipherDataMock(6),
createAutofillOverlayCipherDataMock(7),
createAutofillOverlayCipherDataMock(8),

View File

@ -201,11 +201,11 @@ import {
ImportServiceAbstraction,
} from "@bitwarden/importer/core";
import {
DefaultKdfConfigService,
KdfConfigService,
BiometricStateService,
BiometricsService,
DefaultBiometricStateService,
DefaultKdfConfigService,
KdfConfigService,
KeyService as KeyServiceAbstraction,
} from "@bitwarden/key-management";
import {
@ -232,7 +232,10 @@ import { MainContextMenuHandler } from "../autofill/browser/main-context-menu-ha
import LegacyOverlayBackground from "../autofill/deprecated/background/overlay.background.deprecated";
import { Fido2Background as Fido2BackgroundAbstraction } from "../autofill/fido2/background/abstractions/fido2.background";
import { Fido2Background } from "../autofill/fido2/background/fido2.background";
import { BrowserFido2UserInterfaceService } from "../autofill/fido2/services/browser-fido2-user-interface.service";
import {
BrowserFido2ParentWindowReference,
BrowserFido2UserInterfaceService,
} from "../autofill/fido2/services/browser-fido2-user-interface.service";
import { AutofillService as AutofillServiceAbstraction } from "../autofill/services/abstractions/autofill.service";
import AutofillService from "../autofill/services/autofill.service";
import { InlineMenuFieldQualificationService } from "../autofill/services/inline-menu-field-qualification.service";
@ -337,10 +340,10 @@ export default class MainBackground {
policyApiService: PolicyApiServiceAbstraction;
sendApiService: SendApiServiceAbstraction;
userVerificationApiService: UserVerificationApiServiceAbstraction;
fido2UserInterfaceService: Fido2UserInterfaceServiceAbstraction;
fido2AuthenticatorService: Fido2AuthenticatorServiceAbstraction;
fido2UserInterfaceService: Fido2UserInterfaceServiceAbstraction<BrowserFido2ParentWindowReference>;
fido2AuthenticatorService: Fido2AuthenticatorServiceAbstraction<BrowserFido2ParentWindowReference>;
fido2ActiveRequestManager: Fido2ActiveRequestManagerAbstraction;
fido2ClientService: Fido2ClientServiceAbstraction;
fido2ClientService: Fido2ClientServiceAbstraction<BrowserFido2ParentWindowReference>;
avatarService: AvatarServiceAbstraction;
mainContextMenuHandler: MainContextMenuHandler;
cipherContextMenuHandler: CipherContextMenuHandler;
@ -693,7 +696,7 @@ export default class MainBackground {
);
this.domainSettingsService = new DefaultDomainSettingsService(this.stateProvider);
this.fileUploadService = new FileUploadService(this.logService);
this.fileUploadService = new FileUploadService(this.logService, this.apiService);
this.cipherFileUploadService = new CipherFileUploadService(
this.apiService,
this.fileUploadService,
@ -1053,14 +1056,6 @@ export default class MainBackground {
const systemUtilsServiceReloadCallback = async () => {
await this.taskSchedulerService.clearAllScheduledTasks();
if (this.platformUtilsService.isSafari()) {
// If we do `chrome.runtime.reload` on safari they will send an onInstalled reason of install
// and that prompts us to show a new tab, this apparently doesn't happen on sideloaded
// extensions and only shows itself production scenarios. See: https://bitwarden.atlassian.net/browse/PM-12298
self.location.reload();
return;
}
BrowserApi.reloadExtension();
};
@ -1338,7 +1333,7 @@ export default class MainBackground {
return new Promise<void>((resolve) => {
setTimeout(async () => {
await this.refreshBadge();
await this.fullSync(true);
await this.fullSync(false);
this.taskSchedulerService.setInterval(
ScheduledTaskNames.scheduleNextSyncInterval,
5 * 60 * 1000, // check every 5 minutes

View File

@ -73,6 +73,7 @@ export default class RuntimeBackground {
"biometricUnlockAvailable",
"getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag",
"getInlineMenuFieldQualificationFeatureFlag",
"getInlineMenuTotpFeatureFlag",
];
if (messagesWithResponse.includes(msg.command)) {
@ -197,6 +198,9 @@ export default class RuntimeBackground {
case "getInlineMenuFieldQualificationFeatureFlag": {
return await this.configService.getFeatureFlag(FeatureFlag.InlineMenuFieldQualification);
}
case "getInlineMenuTotpFeatureFlag": {
return await this.configService.getFeatureFlag(FeatureFlag.InlineMenuTotp);
}
}
}

View File

@ -2,7 +2,7 @@
"manifest_version": 2,
"name": "__MSG_extName__",
"short_name": "__MSG_appName__",
"version": "2024.12.0",
"version": "2024.12.3",
"description": "__MSG_extDesc__",
"default_locale": "en",
"author": "Bitwarden Inc.",

View File

@ -3,7 +3,7 @@
"minimum_chrome_version": "102.0",
"name": "__MSG_extName__",
"short_name": "__MSG_appName__",
"version": "2024.12.0",
"version": "2024.12.3",
"description": "__MSG_extDesc__",
"default_locale": "en",
"author": "Bitwarden Inc.",

View File

@ -439,6 +439,12 @@ export class BrowserApi {
* Handles reloading the extension using the underlying functionality exposed by the browser API.
*/
static reloadExtension() {
// If we do `chrome.runtime.reload` on safari they will send an onInstalled reason of install
// and that prompts us to show a new tab, this apparently doesn't happen on sideloaded
// extensions and only shows itself production scenarios. See: https://bitwarden.atlassian.net/browse/PM-12298
if (this.isSafariApi) {
self.location.reload();
}
return chrome.runtime.reload();
}

View File

@ -44,6 +44,9 @@ page looks nice when the extension is popped out.
- `above-scroll-area`
- When the page content overflows, this content will be "stuck" to the top of the page upon
scrolling.
- `full-width-notice`
- Similar to `above-scroll-area`, this content will display before `above-scroll-area` without
container margin or padding.
- default
- Whatever content you want in `main`.
@ -108,6 +111,30 @@ Common interactive elements to insert into the `end` slot are:
- "Add" button: this can be accomplished with the Button component and any custom functionality for
that particular page
### Notice
<Canvas>
<Story of={stories.Notice} />
</Canvas>
Common interactive elements to insert into the `full-width-notice` slot are:
- `bit-banner`: shows a full-width notice
Usage example:
```html
<popup-page>
<popup-header slot="header" [pageTitle]="'vault' | i18n"> </popup-header>
<bit-banner slot="full-width-notice" bannerType="info" [showClose]="false">
This is an important note about these ciphers
</bit-banner>
<ng-container slot="above-scroll-area">
<app-vault-header-v2></app-vault-header-v2>
</ng-container>
</popup-page>
```
## Popup footer
Popup footer should be used when the page displays action buttons. It functions similarly to the

View File

@ -11,6 +11,7 @@ import { SendService } from "@bitwarden/common/tools/send/services/send.service.
import {
AvatarModule,
BadgeModule,
BannerModule,
ButtonModule,
I18nMockService,
IconButtonModule,
@ -125,6 +126,18 @@ class MockCurrentAccountComponent {}
})
class MockSearchComponent {}
@Component({
selector: "mock-banner",
template: `
<bit-banner bannerType="info" [showClose]="false">
This is an important note about these ciphers
</bit-banner>
`,
standalone: true,
imports: [BannerModule],
})
class MockBannerComponent {}
@Component({
selector: "mock-vault-page",
template: `
@ -298,6 +311,8 @@ export default {
CommonModule,
RouterModule,
ExtensionContainerComponent,
MockBannerComponent,
MockSearchComponent,
MockVaultSubpageComponent,
MockVaultPageComponent,
MockSendPageComponent,
@ -517,6 +532,22 @@ export const TransparentHeader: Story = {
}),
};
export const Notice: Story = {
render: (args) => ({
props: args,
template: /* HTML */ `
<extension-container>
<popup-page>
<popup-header slot="header" pageTitle="Page Header"></popup-header>
<mock-banner slot="full-width-notice"></mock-banner>
<mock-search slot="above-scroll-area"></mock-search>
<vault-placeholder></vault-placeholder>
</popup-page>
</extension-container>
`,
}),
};
export const WidthOptions: Story = {
render: (args) => ({
props: args,

View File

@ -1,5 +1,6 @@
<ng-content select="[slot=header]"></ng-content>
<main class="tw-flex-1 tw-overflow-hidden tw-flex tw-flex-col tw-relative tw-bg-background-alt">
<ng-content select="[slot=full-width-notice]"></ng-content>
<div
#nonScrollable
class="tw-transition-colors tw-duration-200 tw-border-0 tw-border-b tw-border-solid tw-p-3 bit-compact:tw-p-2"

View File

@ -18,6 +18,7 @@ import {
import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard";
import { extensionRefreshRedirect } from "@bitwarden/angular/utils/extension-refresh-redirect";
import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap";
import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards";
import {
AnonLayoutWrapperComponent,
AnonLayoutWrapperData,
@ -38,12 +39,18 @@ import {
VaultIcon,
LoginDecryptionOptionsComponent,
DevicesIcon,
SsoComponent,
TwoFactorTimeoutIcon,
TwoFactorAuthComponent,
TwoFactorTimeoutComponent,
TwoFactorAuthGuard,
} from "@bitwarden/auth/angular";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
import {
NewDeviceVerificationNoticePageOneComponent,
NewDeviceVerificationNoticePageTwoComponent,
VaultIcons,
} from "@bitwarden/vault";
import { fido2AuthGuard } from "../auth/guards/fido2-auth.guard";
import { AccountSwitcherComponent } from "../auth/popup/account-switching/account-switcher.component";
@ -63,7 +70,7 @@ import { RemovePasswordComponent } from "../auth/popup/remove-password.component
import { SetPasswordComponent } from "../auth/popup/set-password.component";
import { AccountSecurityComponent as AccountSecurityV1Component } from "../auth/popup/settings/account-security-v1.component";
import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component";
import { SsoComponent } from "../auth/popup/sso.component";
import { SsoComponentV1 } from "../auth/popup/sso-v1.component";
import { TwoFactorOptionsComponent } from "../auth/popup/two-factor-options.component";
import { TwoFactorComponentV1 } from "../auth/popup/two-factor-v1.component";
import { UpdateTempPasswordComponent } from "../auth/popup/update-temp-password.component";
@ -90,15 +97,10 @@ import { SendAddEditComponent as SendAddEditV2Component } from "../tools/popup/s
import { SendCreatedComponent } from "../tools/popup/send-v2/send-created/send-created.component";
import { SendV2Component } from "../tools/popup/send-v2/send-v2.component";
import { AboutPageV2Component } from "../tools/popup/settings/about-page/about-page-v2.component";
import { AboutPageComponent } from "../tools/popup/settings/about-page/about-page.component";
import { MoreFromBitwardenPageV2Component } from "../tools/popup/settings/about-page/more-from-bitwarden-page-v2.component";
import { MoreFromBitwardenPageComponent } from "../tools/popup/settings/about-page/more-from-bitwarden-page.component";
import { ExportBrowserV2Component } from "../tools/popup/settings/export/export-browser-v2.component";
import { ExportBrowserComponent } from "../tools/popup/settings/export/export-browser.component";
import { ImportBrowserV2Component } from "../tools/popup/settings/import/import-browser-v2.component";
import { ImportBrowserComponent } from "../tools/popup/settings/import/import-browser.component";
import { SettingsV2Component } from "../tools/popup/settings/settings-v2.component";
import { SettingsComponent } from "../tools/popup/settings/settings.component";
import { clearVaultStateGuard } from "../vault/guards/clear-vault-state.guard";
import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component";
import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component";
@ -230,12 +232,40 @@ const routes: Routes = [
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: { elevation: 1 } satisfies RouteDataProperties,
},
{
path: "sso",
component: SsoComponent,
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: { elevation: 1 } satisfies RouteDataProperties,
},
...unauthUiRefreshSwap(
SsoComponentV1,
ExtensionAnonLayoutWrapperComponent,
{
path: "sso",
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: { elevation: 1 } satisfies RouteDataProperties,
},
{
path: "sso",
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: {
pageIcon: VaultIcon,
pageTitle: {
key: "enterpriseSingleSignOn",
},
pageSubtitle: {
key: "singleSignOnEnterOrgIdentifierText",
},
elevation: 1,
} satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData,
children: [
{ path: "", component: SsoComponent },
{
path: "",
component: EnvironmentSelectorComponent,
outlet: "environment-selector",
data: {
overlayPosition: ExtensionDefaultOverlayPosition,
} satisfies EnvironmentSelectorRouteData,
},
],
},
),
{
path: "set-password",
component: SetPasswordComponent,
@ -321,16 +351,18 @@ const routes: Routes = [
canActivate: [authGuard],
data: { elevation: 1 } satisfies RouteDataProperties,
}),
...extensionRefreshSwap(ImportBrowserComponent, ImportBrowserV2Component, {
{
path: "import",
component: ImportBrowserV2Component,
canActivate: [authGuard],
data: { elevation: 1 } satisfies RouteDataProperties,
}),
...extensionRefreshSwap(ExportBrowserComponent, ExportBrowserV2Component, {
},
{
path: "export",
component: ExportBrowserV2Component,
canActivate: [authGuard],
data: { elevation: 2 } satisfies RouteDataProperties,
}),
},
...extensionRefreshSwap(AutofillV1Component, AutofillComponent, {
path: "autofill",
canActivate: [authGuard],
@ -630,7 +662,18 @@ const routes: Routes = [
},
showReadonlyHostname: true,
showAcctSwitcher: true,
} satisfies ExtensionAnonLayoutWrapperData,
elevation: 1,
/**
* This ensures that in a passkey flow the `/fido2?<queryParams>` URL does not get
* overwritten in the `BrowserRouterService` by the `/lockV2` route. This way, after
* unlocking, the user can be redirected back to the `/fido2?<queryParams>` URL.
*
* Also, this prevents a routing loop when using biometrics to unlock the vault in MV2 (Firefox),
* locking up the browser (https://bitwarden.atlassian.net/browse/PM-16116). This involves the
* `popup-router-cache.service` pushing the `lockV2` route to the history.
*/
doNotSaveUrl: true,
} satisfies ExtensionAnonLayoutWrapperData & RouteDataProperties,
children: [
{
path: "",
@ -666,16 +709,45 @@ const routes: Routes = [
canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh, true, "/")],
data: { elevation: 1 } satisfies RouteDataProperties,
},
...extensionRefreshSwap(AboutPageComponent, AboutPageV2Component, {
{
path: "about",
component: AboutPageV2Component,
canActivate: [authGuard],
data: { elevation: 1 } satisfies RouteDataProperties,
}),
...extensionRefreshSwap(MoreFromBitwardenPageComponent, MoreFromBitwardenPageV2Component, {
},
{
path: "more-from-bitwarden",
component: MoreFromBitwardenPageV2Component,
canActivate: [authGuard],
data: { elevation: 2 } satisfies RouteDataProperties,
}),
},
{
path: "new-device-notice",
component: ExtensionAnonLayoutWrapperComponent,
canActivate: [],
children: [
{
path: "",
component: NewDeviceVerificationNoticePageOneComponent,
data: {
pageIcon: VaultIcons.ExclamationTriangle,
pageTitle: {
key: "importantNotice",
},
},
},
{
path: "setup",
component: NewDeviceVerificationNoticePageTwoComponent,
data: {
pageIcon: VaultIcons.UserLock,
pageTitle: {
key: "setupTwoStepLogin",
},
},
},
],
},
...extensionRefreshSwap(TabsComponent, TabsV2Component, {
path: "tabs",
data: { elevation: 0 } satisfies RouteDataProperties,
@ -695,7 +767,7 @@ const routes: Routes = [
},
...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, {
path: "vault",
canActivate: [authGuard],
canActivate: [authGuard, NewDeviceVerificationNoticeGuard],
canDeactivate: [clearVaultStateGuard],
data: { elevation: 0 } satisfies RouteDataProperties,
}),
@ -704,11 +776,12 @@ const routes: Routes = [
canActivate: [authGuard],
data: { elevation: 0 } satisfies RouteDataProperties,
}),
...extensionRefreshSwap(SettingsComponent, SettingsV2Component, {
{
path: "settings",
component: SettingsV2Component,
canActivate: [authGuard],
data: { elevation: 0 } satisfies RouteDataProperties,
}),
},
...extensionRefreshSwap(SendGroupingsComponent, SendV2Component, {
path: "send",
canActivate: [authGuard],

View File

@ -33,7 +33,7 @@ import { SetPasswordComponent } from "../auth/popup/set-password.component";
import { AccountSecurityComponent as AccountSecurityComponentV1 } from "../auth/popup/settings/account-security-v1.component";
import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component";
import { VaultTimeoutInputComponent } from "../auth/popup/settings/vault-timeout-input.component";
import { SsoComponent } from "../auth/popup/sso.component";
import { SsoComponentV1 } from "../auth/popup/sso-v1.component";
import { TwoFactorOptionsComponent } from "../auth/popup/two-factor-options.component";
import { TwoFactorComponentV1 } from "../auth/popup/two-factor-v1.component";
import { UpdateTempPasswordComponent } from "../auth/popup/update-temp-password.component";
@ -63,7 +63,6 @@ import { SendListComponent } from "../tools/popup/send/components/send-list.comp
import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component";
import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component";
import { SendTypeComponent } from "../tools/popup/send/send-type.component";
import { SettingsComponent } from "../tools/popup/settings/settings.component";
import { ActionButtonsComponent } from "../vault/popup/components/action-buttons.component";
import { CipherRowComponent } from "../vault/popup/components/cipher-row.component";
import { AddEditCustomFieldsComponent } from "../vault/popup/components/vault/add-edit-custom-fields.component";
@ -174,10 +173,9 @@ import "../platform/popup/locales";
SendListComponent,
SendTypeComponent,
SetPasswordComponent,
SettingsComponent,
VaultSettingsComponent,
ShareComponent,
SsoComponent,
SsoComponentV1,
SyncComponent,
TabsComponent,
TabsV2Component,

View File

@ -26,6 +26,7 @@ import {
AnonLayoutWrapperDataService,
LoginComponentService,
LockComponentService,
SsoComponentService,
LoginDecryptionOptionsService,
TwoFactorAuthComponentService,
TwoFactorAuthEmailComponentService,
@ -122,6 +123,7 @@ import { PasswordRepromptService } from "@bitwarden/vault";
import { ForegroundLockService } from "../../auth/popup/accounts/foreground-lock.service";
import { ExtensionAnonLayoutWrapperDataService } from "../../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper-data.service";
import { ExtensionLoginComponentService } from "../../auth/popup/login/extension-login-component.service";
import { ExtensionSsoComponentService } from "../../auth/popup/login/extension-sso-component.service";
import { ExtensionLoginDecryptionOptionsService } from "../../auth/popup/login-decryption-options/extension-login-decryption-options.service";
import { ExtensionTwoFactorAuthComponentService } from "../../auth/services/extension-two-factor-auth-component.service";
import { ExtensionTwoFactorAuthEmailComponentService } from "../../auth/services/extension-two-factor-auth-email-component.service";
@ -612,6 +614,11 @@ const safeProviders: SafeProvider[] = [
useExisting: PopupCompactModeService,
deps: [],
}),
safeProvider({
provide: SsoComponentService,
useClass: ExtensionSsoComponentService,
deps: [SyncService, AuthService, EnvironmentService, I18nServiceAbstraction, LogService],
}),
safeProvider({
provide: LoginDecryptionOptionsService,
useClass: ExtensionLoginDecryptionOptionsService,

View File

@ -1,63 +0,0 @@
<header>
<div class="left">
<button type="button" routerLink="/tabs/settings">
<span class="header-icon"><i class="bwi bwi-angle-left" aria-hidden="true"></i></span>
<span>{{ "back" | i18n }}</span>
</button>
</div>
<h1 class="center">
<span class="title">{{ "about" | i18n }}</span>
</h1>
<div class="right">
<app-pop-out></app-pop-out>
</div>
</header>
<main tabindex="-1">
<div class="box list">
<div class="box-content single-line">
<button
type="button"
class="box-content-row box-content-row-flex text-default"
appStopClick
(click)="about()"
>
<div class="row-main">{{ "aboutBitwarden" | i18n }}</div>
</button>
<button
type="button"
class="box-content-row box-content-row-flex text-default"
appStopClick
(click)="launchHelp()"
>
<div class="row-main">{{ "helpCenter" | i18n }}</div>
<i class="bwi bwi-external-link bwi-lg row-sub-icon" aria-hidden="true"></i>
</button>
<button
type="button"
class="box-content-row box-content-row-flex text-default"
appStopClick
(click)="openWebVault()"
>
<div class="row-main">{{ "bitWebVaultApp" | i18n }}</div>
<i class="bwi bwi-external-link bwi-lg row-sub-icon" aria-hidden="true"></i>
</button>
<button
type="button"
class="box-content-row box-content-row-flex text-default"
routerLink="/more-from-bitwarden"
>
<div class="row-main">{{ "moreFromBitwarden" | i18n }}</div>
<i class="bwi bwi-angle-right bwi-lg row-sub-icon" aria-hidden="true"></i>
</button>
<button
type="button"
class="box-content-row box-content-row-flex text-default"
appStopClick
(click)="rate()"
>
<div class="row-main">{{ "rateExtension" | i18n }}</div>
<i class="bwi bwi-external-link bwi-lg row-sub-icon" aria-hidden="true"></i>
</button>
</div>
</div>
</main>

View File

@ -1,84 +0,0 @@
import { CommonModule } from "@angular/common";
import { Component } from "@angular/core";
import { RouterModule } from "@angular/router";
import { firstValueFrom } from "rxjs";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { DeviceType } from "@bitwarden/common/enums";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { DialogService } from "@bitwarden/components";
import { BrowserApi } from "../../../../platform/browser/browser-api";
import { PopOutComponent } from "../../../../platform/popup/components/pop-out.component";
import { AboutDialogComponent } from "../about-dialog/about-dialog.component";
const RateUrls = {
[DeviceType.ChromeExtension]:
"https://chromewebstore.google.com/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb/reviews",
[DeviceType.FirefoxExtension]:
"https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager/#reviews",
[DeviceType.OperaExtension]:
"https://addons.opera.com/en/extensions/details/bitwarden-free-password-manager/#feedback-container",
[DeviceType.EdgeExtension]:
"https://microsoftedge.microsoft.com/addons/detail/jbkfoedolllekgbhcbcoahefnbanhhlh",
[DeviceType.VivaldiExtension]:
"https://chromewebstore.google.com/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb/reviews",
[DeviceType.SafariExtension]: "https://apps.apple.com/app/bitwarden/id1352778147",
};
@Component({
templateUrl: "about-page.component.html",
standalone: true,
imports: [CommonModule, JslibModule, RouterModule, PopOutComponent],
})
export class AboutPageComponent {
constructor(
private dialogService: DialogService,
private environmentService: EnvironmentService,
private platformUtilsService: PlatformUtilsService,
) {}
about() {
this.dialogService.open(AboutDialogComponent);
}
async launchHelp() {
const confirmed = await this.dialogService.openSimpleDialog({
title: { key: "continueToHelpCenter" },
content: { key: "continueToHelpCenterDesc" },
type: "info",
acceptButtonText: { key: "continue" },
});
if (confirmed) {
await BrowserApi.createNewTab("https://bitwarden.com/help/");
}
}
async openWebVault() {
const confirmed = await this.dialogService.openSimpleDialog({
title: { key: "continueToWebApp" },
content: { key: "continueToWebAppDesc" },
type: "info",
acceptButtonText: { key: "continue" },
});
if (confirmed) {
const env = await firstValueFrom(this.environmentService.environment$);
const url = env.getWebVaultUrl();
await BrowserApi.createNewTab(url);
}
}
async rate() {
const confirmed = await this.dialogService.openSimpleDialog({
title: { key: "continueToBrowserExtensionStore" },
content: { key: "continueToBrowserExtensionStoreDesc" },
type: "info",
acceptButtonText: { key: "continue" },
});
if (confirmed) {
const deviceType = this.platformUtilsService.getDevice();
await BrowserApi.createNewTab((RateUrls as any)[deviceType]);
}
}
}

Some files were not shown because too many files have changed in this diff Show More