From fa400c51eca20b9b7cad5ab01dc559c1a13cd37a Mon Sep 17 00:00:00 2001 From: Valerie Pomerleau Date: Tue, 18 Jul 2023 13:52:01 -0700 Subject: [PATCH] feat(settings): Generate recovery key as PDF Because: * We want to include more information in the recovery key file, and rendering for localized content in .txt format was inconsistent accross apps and platforms. This commit: * Add react-pdf library and associated dependencies for client-side PDF generation * Add DownloadRecoveryKeyPDF component to handle PDF generation and download * Create RecoveryKeyPDF with styling and l10n * Update tests for recovery key * Add pdf-parse library to test PDF content with Playwright * Add font assets to fxa-settings for PDF creation * Remove fonts from CDN assets folder (no longer needed) * Use mono font for account recovery key in React app and PDF to help user differentiate between similar characters such as O and 0 Closes #FXA-7223 --- .github/workflows/upload-assets-to-cdn.yml | 2 - packages/functional-tests/package.json | 1 + .../pages/settings/recoveryKey.ts | 4 +- .../tests/settings/recoveryKey.spec.ts | 61 ++- .../server/lib/amplitude.js | 14 + packages/fxa-react/lib/utils.tsx | 6 + packages/fxa-settings/package.json | 3 + .../ButtonDownloadRecoveryKey/en.ftl | 35 -- .../index.stories.tsx | 65 --- .../ButtonDownloadRecoveryKey/index.tsx | 259 ----------- .../RecoveryKeyPDF.tsx | 216 +++++++++ .../VectorImagesForPdf.tsx | 157 +++++++ .../ButtonDownloadRecoveryKeyPDF/en.ftl | 33 ++ .../fonts/NotoSans-Bold.ttf | Bin .../fonts/NotoSans-Regular.ttf | Bin .../fonts/NotoSans-SemiBold.ttf | Bin .../fonts/NotoSansGeorgian-Bold.ttf | Bin .../fonts/NotoSansGeorgian-Regular.ttf | Bin .../fonts/NotoSansGeorgian-SemiBold.ttf | Bin .../fonts/NotoSansHebrew-Bold.ttf | Bin .../fonts/NotoSansHebrew-Regular.ttf | Bin .../fonts/NotoSansHebrew-SemiBold.ttf | Bin .../fonts/NotoSansJP-Bold.ttf | Bin .../fonts/NotoSansJP-Regular.ttf | Bin .../fonts/NotoSansJP-SemiBold.ttf | Bin .../fonts/NotoSansKR-Bold.otf | Bin .../fonts/NotoSansKR-Medium.otf | Bin .../fonts/NotoSansKR-Regular.otf | Bin .../fonts/NotoSansMono-SemiBold.ttf | Bin 0 -> 403232 bytes .../fonts/NotoSansSC-Bold.otf | Bin .../fonts/NotoSansSC-Medium.otf | Bin .../fonts/NotoSansSC-Regular.otf | Bin .../fonts/NotoSansTC-Bold.otf | Bin .../fonts/NotoSansTC-Medium.otf | Bin .../fonts/NotoSansTC-Regular.otf | Bin .../fonts/NotoSansThai-Bold.ttf | Bin .../fonts/NotoSansThai-Regular.ttf | Bin .../fonts/NotoSansThai-SemiBold.ttf | Bin .../fonts/NotoSerifGurmukhi-Bold.ttf | Bin .../fonts/NotoSerifGurmukhi-Regular.ttf | Bin .../fonts/NotoSerifGurmukhi-SemiBold.ttf | Bin .../fonts/README.md | 9 +- .../fonts/fonts.d.ts | 2 + .../images/firefox-logo-wordmark.png | Bin 0 -> 6715 bytes .../index.stories.tsx | 44 ++ .../index.test.tsx | 98 ++-- .../ButtonDownloadRecoveryKeyPDF/index.tsx | 159 +++++++ .../requiredFont.test.tsx | 68 +++ .../requiredFont.tsx | 288 ++++++++++++ .../Settings/FlowRecoveryKeyDownload/en.ftl | 8 + .../FlowRecoveryKeyDownload/index.test.tsx | 35 +- .../FlowRecoveryKeyDownload/index.tsx | 5 +- .../Settings/FlowRecoveryKeyHint/en.ftl | 7 - .../FlowRecoveryKeyHint/index.test.tsx | 34 +- .../Settings/FlowRecoveryKeyHint/index.tsx | 12 +- .../PageRecoveryKeyCreate/index.test.tsx | 13 +- .../src/pages/Clear/index.stories.tsx | 1 - .../AccountRecoveryConfirmKey/index.tsx | 2 +- packages/fxa-settings/src/setupTests.tsx | 7 + yarn.lock | 429 +++++++++++++++++- 60 files changed, 1586 insertions(+), 491 deletions(-) delete mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/en.ftl delete mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.stories.tsx delete mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.tsx create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/RecoveryKeyPDF.tsx create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/VectorImagesForPdf.tsx create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/en.ftl rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSans-Bold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSans-Regular.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSans-SemiBold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansGeorgian-Bold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansGeorgian-Regular.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansGeorgian-SemiBold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansHebrew-Bold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansHebrew-Regular.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansHebrew-SemiBold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansJP-Bold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansJP-Regular.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansJP-SemiBold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansKR-Bold.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansKR-Medium.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansKR-Regular.otf (100%) create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansMono-SemiBold.ttf rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansSC-Bold.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansSC-Medium.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansSC-Regular.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansTC-Bold.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansTC-Medium.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansTC-Regular.otf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansThai-Bold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansThai-Regular.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSansThai-SemiBold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSerifGurmukhi-Bold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSerifGurmukhi-Regular.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/NotoSerifGurmukhi-SemiBold.ttf (100%) rename {assets => packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF}/fonts/README.md (62%) create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/fonts.d.ts create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/images/firefox-logo-wordmark.png create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.stories.tsx rename packages/fxa-settings/src/components/{ButtonDownloadRecoveryKey => ButtonDownloadRecoveryKeyPDF}/index.test.tsx (61%) create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.tsx create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.test.tsx create mode 100644 packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.tsx diff --git a/.github/workflows/upload-assets-to-cdn.yml b/.github/workflows/upload-assets-to-cdn.yml index 7d24dbb7ebc..eae367af107 100644 --- a/.github/workflows/upload-assets-to-cdn.yml +++ b/.github/workflows/upload-assets-to-cdn.yml @@ -35,7 +35,6 @@ jobs: aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.svg" --include "*.png" assets/product-icons s3://fxa-content-cdn-stage-distbucket-bpquvfnty86g/product-icons aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.svg" --include "*.png" assets/other s3://fxa-content-cdn-stage-distbucket-bpquvfnty86g/other aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.pdf" --content-disposition attachment assets/legal s3://fxa-content-cdn-stage-distbucket-bpquvfnty86g/legal - aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.ttf" --include "*.otf" assets/fonts s3://fxa-content-cdn-stage-distbucket-bpquvfnty86g/other - name: Configure Production AWS credentials uses: aws-actions/configure-aws-credentials@master @@ -49,7 +48,6 @@ jobs: aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.svg" --include "*.png" assets/product-icons s3://fxa-content-cdn-prod-distbucket-gqg70i8xqycy/product-icons aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.svg" --include "*.png" assets/other s3://fxa-content-cdn-prod-distbucket-gqg70i8xqycy/other aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.pdf" --content-disposition attachment assets/legal s3://fxa-content-cdn-prod-distbucket-gqg70i8xqycy/legal - aws s3 sync --cache-control 'public,max-age=86400' --exclude "*" --include "*.ttf" --include "*.otf" assets/fonts s3://fxa-content-cdn-prod-distbucket-gqg70i8xqycy/other - name: "Post to fxa-team Slack channel" uses: slackapi/slack-github-action@v1.24.0 diff --git a/packages/functional-tests/package.json b/packages/functional-tests/package.json index 80bcf6f9f59..1aab56874d0 100644 --- a/packages/functional-tests/package.json +++ b/packages/functional-tests/package.json @@ -17,6 +17,7 @@ "fxa-payments-server": "workspace:*", "fxa-settings": "workspace:*", "jsqr": "^1.4.0", + "pdf-parse": "^1.1.1", "upng-js": "^2.1.0" } } diff --git a/packages/functional-tests/pages/settings/recoveryKey.ts b/packages/functional-tests/pages/settings/recoveryKey.ts index 9591fb5e536..34a4826cd81 100644 --- a/packages/functional-tests/pages/settings/recoveryKey.ts +++ b/packages/functional-tests/pages/settings/recoveryKey.ts @@ -76,7 +76,9 @@ export class RecoveryKeyPage extends SettingsLayout { async clickNext() { return this.page - .getByRole('link', { name: 'Continue without downloading' }) + .getByRole('link', { + name: 'Continue without downloading', + }) .click(); } diff --git a/packages/functional-tests/tests/settings/recoveryKey.spec.ts b/packages/functional-tests/tests/settings/recoveryKey.spec.ts index 49ca6b0022e..89c198daf51 100644 --- a/packages/functional-tests/tests/settings/recoveryKey.spec.ts +++ b/packages/functional-tests/tests/settings/recoveryKey.spec.ts @@ -1,6 +1,7 @@ import { test, expect } from '../../lib/fixtures/standard'; import { EmailHeader, EmailType } from '../../lib/email'; import fs from 'fs'; +import pdfParse from 'pdf-parse'; let status; let key; @@ -258,7 +259,7 @@ test.describe('new recovery key test', () => { } ); - test('can copy and download recovery key', async ({ + test('can copy recovery key', async ({ credentials, pages: { recoveryKey, settings }, }) => { @@ -277,40 +278,58 @@ test.describe('new recovery key test', () => { // Test copy const clipboard = await recoveryKey.clickCopy(); expect(clipboard).toEqual(newKey); + }); + + test('can download recovery key as PDF', async ({ + credentials, + pages: { recoveryKey, settings }, + }) => { + // Create new recovery key + await settings.recoveryKey.clickCreate(); + // View 1/4 info + await recoveryKey.clickStart(); + // View 2/4 confirm password and generate key + await recoveryKey.setPassword(credentials.password); + await recoveryKey.submit(); + + // View 3/4 key download + // Store key to be used later + const newKey = await recoveryKey.getKey(); // Test download const dl = await recoveryKey.clickDownload(); // Verify filename is as expected const date = new Date().toISOString().split('T')[0]; - const suggestedFileName = dl.suggestedFilename(); - expect(suggestedFileName.length).toBeLessThanOrEqual(75); - expect(suggestedFileName).toBe( - `Firefox-Recovery-Key_${date}_${credentials.email}.txt` + const filename = dl.suggestedFilename(); + expect(filename.length).toBeLessThanOrEqual(75); + expect(filename).toBe( + `Firefox-Recovery-Key_${date}_${credentials.email}.pdf` ); // Test uses try/finally to ensure the downloaded file is deleted after tests // whether or not the assertions passed - const filePath = suggestedFileName; try { // Verify file is downloaded - await dl.saveAs(filePath); - expect(fs.existsSync(filePath)).toBeTruthy(); - // Verify downloaded file contains key - const downloadedContent = fs.readFileSync(filePath, 'utf-8'); - expect(downloadedContent).toContain(newKey); + await dl.saveAs(filename); + expect(fs.existsSync(filename)).toBeTruthy(); + + const getPDF = async (file) => { + const readFileSync = fs.readFileSync(file); + try { + const pdfExtract = await pdfParse(readFileSync); + // Verify downloaded file contains key + expect(pdfExtract.text).toContain(newKey); + // Verify the PDF file contains only one page + expect(pdfExtract.numpages).toEqual(1); + } catch (error) { + throw new Error(error); + } + }; + getPDF(filename); } finally { // Delete the downloaded file - await fs.promises.unlink(filePath); + await fs.promises.unlink(filename); } - - // After download, navigated to 'hint' page - const newHint = 'secret key location'; - await recoveryKey.setHint(newHint); - await recoveryKey.clickFinish(); - - // Verify status as 'enabled' - status = await settings.recoveryKey.statusText(); - expect(status).toEqual('Enabled'); }); test('use account recovery key', async ({ diff --git a/packages/fxa-content-server/server/lib/amplitude.js b/packages/fxa-content-server/server/lib/amplitude.js index b6cda8b99be..504d323d1ff 100644 --- a/packages/fxa-content-server/server/lib/amplitude.js +++ b/packages/fxa-content-server/server/lib/amplitude.js @@ -461,6 +461,16 @@ const EVENTS = { group: GROUPS.settings, event: 'account_recovery_option_download', }, + // Recovery key download was successful + 'flow.settings.account-recovery.recovery-key.download-success': { + group: GROUPS.settings, + event: 'account_recovery_download_success', + }, + // An error occured while download the recovery key + 'flow.settings.account-recovery.recovery-key.download-failed': { + group: GROUPS.settings, + event: 'account_recovery_download_failed', + }, // A user on the "download" step of the account recovery flow copies their key to their clipboard 'flow.settings.account-recovery.recovery-key.copy-option': { group: GROUPS.settings, @@ -477,6 +487,10 @@ const EVENTS = { event: 'account_recovery_option_print', }, // Save hint page + 'flow.settings.account-recovery.create-hint.view': { + group: GROUPS.settings, + event: 'account_recovery_create_hint_view', + }, // A user on the "hint" step of the account recovery flow clicks the submit button to save the hint they entered into the text input 'flow.settings.account-recovery.create-hint.submit': { group: GROUPS.settings, diff --git a/packages/fxa-react/lib/utils.tsx b/packages/fxa-react/lib/utils.tsx index f926a1fa406..98c2740b672 100644 --- a/packages/fxa-react/lib/utils.tsx +++ b/packages/fxa-react/lib/utils.tsx @@ -30,6 +30,7 @@ export function hardNavigate(href: string) { export enum LocalizedDateOptions { NumericDate, NumericDateAndTime, + MediumDateStyle, } /** @@ -61,6 +62,11 @@ export const getLocalizedDate = ( minute: 'numeric', }; break; + case LocalizedDateOptions.MediumDateStyle: + options = { + dateStyle: 'medium', + }; + break; default: options = undefined; } diff --git a/packages/fxa-settings/package.json b/packages/fxa-settings/package.json index 5d2cac7af96..5e50c19daf8 100644 --- a/packages/fxa-settings/package.json +++ b/packages/fxa-settings/package.json @@ -74,11 +74,13 @@ "@emotion/styled": "^11.10.4", "@material-ui/core": "v5.0.0-alpha.24", "@reach/router": "^1.3.4", + "@react-pdf/renderer": "^3.1.12", "@types/material-ui": "^0.21.8", "@types/react-webcam": "^3.0.0", "base32-decode": "^1.0.0", "base32-encode": "^1.2.0", "classnames": "^2.3.1", + "file-saver": "^2.0.5", "fxa-auth-client": "workspace:*", "fxa-common-password-list": "^0.0.4", "fxa-crypto-relier": "^2.7.0", @@ -120,6 +122,7 @@ "@testing-library/user-event": "^14.4.3", "@types/babel__core": "7.1.14", "@types/classnames": "^2.3.1", + "@types/file-saver": "^2.0.5", "@types/jest": "^26.0.23", "@types/lodash.groupby": "^4", "@types/node": "^18.14.2", diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/en.ftl b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/en.ftl deleted file mode 100644 index 27b95257127..00000000000 --- a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/en.ftl +++ /dev/null @@ -1,35 +0,0 @@ -## ButtonDownloadRecoveryKey -## Clicking on this button downloads a plain text file that contains the user's account recovery key -## The account recovery key can be used to recover data when users forget their account password - -# Button to download the account recovery key as a plain text file and continue to the next step -# "key" here refers to the "account recovery key" -# .title will displayed as a tooltip on the button -recovery-key-download-button-v3 = Download and continue - .title = Download and continue - -# Heading in the text file. No CSS styling will be applied to the text. -# All caps is used in English to show this is a header. -recovery-key-file-header = SAVE YOUR ACCOUNT RECOVERY KEY - -# Instructions in the text file to prompt the user to keep this information in a secure, easy to remember location. -# Password resets without this account recovery key can result in data loss. -recovery-key-file-instructions = Store this file containing your account recovery key in a place you’ll remember. Or print it and keep a physical copy. Your account recovery key can help you recover { -brand-firefox } data if you forget your password. - -# "Key" here refers to the term "account recovery key", a randomly generated 32-character code -# containing a mix of numbers and letters (excluding I, L, O, U) -recovery-key-file-key-value-v3 = Key: - -# { $email } - The primary email associated with the account -recovery-key-file-user-email-v2 = * { -product-firefox-account }: { $email } - -# Date when the account recovery key was created and this file was downloaded -# "Key" here refers to the term "account recovery key" -# { $downloadDate } is a formatted date in the user's preferred locale -# e.g., "12/11/2012" if run in en-US locale with time zone America/Los_Angeles -recovery-key-file-download-date-v2 = * Key generated: { $downloadDate } - -# Link to get more information and support -# { $supportUrl } will be a URL such as https://mzl.la/3bNrM1I -# The URL will not be hyperlinked and will be presented as plain text in the downloaded file -recovery-key-file-support-v2 = * Learn more about your account recovery key: { $supportURL } diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.stories.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.stories.tsx deleted file mode 100644 index 1cd50818579..00000000000 --- a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.stories.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -import React from 'react'; -import { Meta } from '@storybook/react'; -import AppLayout from '../AppLayout'; -import ButtonDownloadRecoveryKey, { fileContentVariation } from '.'; -import { withLocalization } from 'fxa-react/lib/storybooks'; -import { Account, AppContext } from '../../models'; -import { MOCK_ACCOUNT, mockAppContext } from '../../models/mocks'; - -export default { - title: 'Components/ButtonDownloadRecoveryKey', - component: ButtonDownloadRecoveryKey, - decorators: [withLocalization], -} as Meta; - -const recoveryKeyValue = 'RANDOM CODE RANDOM CODE RANDOM CODE'; -const viewName = 'settings.recovery-key'; - -const account = MOCK_ACCOUNT as unknown as Account; - -const accountWithLongEmail = { - primaryEmail: { - email: - 'supercalifragilisticexpialidocious@marypoppins.superfan.conference.com', - }, -} as unknown as Account; - -const storyWithContext = ( - account: Account, - fileType?: fileContentVariation -) => { - const story = () => ( - - - - - - ); - return story; -}; - -export const Default = storyWithContext(account); - -export const WithVeryLongEmail = storyWithContext(accountWithLongEmail); - -// The following stories are added for testing purposes -export const DetailedDownloadWithBOM = storyWithContext( - account, - fileContentVariation['withBOM'] -); - -export const DetailedDownloadWithCharSet = storyWithContext( - account, - fileContentVariation['withCharSet'] -); - -export const DetailedDownloadWithTextEncoder = storyWithContext( - account, - fileContentVariation['withTextEncoder'] -); diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.tsx deleted file mode 100644 index fead09bb04b..00000000000 --- a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.tsx +++ /dev/null @@ -1,259 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -import React, { useEffect, useState } from 'react'; -import { useAccount, useFtlMsgResolver } from '../../models'; -import { FtlMsg } from 'fxa-react/lib/utils'; -import { logViewEvent } from '../../lib/metrics'; -import { searchParams } from '../../lib/utilities'; - -export enum fileContentVariation { - 'keyOnly', - 'withBOM', - 'withCharSet', - 'withTextEncoder', -} - -interface ButtonDownloadRecoveryKeyProps { - navigateForward?: () => void; - recoveryKeyValue: string; - viewName: string; - // Temporary addition for storybook testing - fileType?: fileContentVariation; -} - -export const ButtonDownloadRecoveryKey = ({ - navigateForward, - recoveryKeyValue, - viewName, - fileType = fileContentVariation['keyOnly'], -}: ButtonDownloadRecoveryKeyProps) => { - const account = useAccount(); - const currentDate = new Date(); - const downloadDateInLocale = currentDate.toLocaleDateString( - navigator.language - ); - const ftlMsgResolver = useFtlMsgResolver(); - const [contentType, setContentType] = useState( - fileContentVariation['keyOnly'] - ); - - // Optional `downloadOption` search param can be used to test - // character encoding options. Related to FXA-7572 - // By default, the downloaded file will only contain the recovery key - // unless one of the following params is added to the URL. - - // The file type can also be defined by passing in a `fileType` prop - // - this is used for storybook. - const params = searchParams(window.location.search); - - useEffect(() => { - if ( - fileType === fileContentVariation['withBOM'] || - params.fileContentType === 'withBOM' - ) { - setContentType(fileContentVariation['withBOM']); - } else if ( - fileType === fileContentVariation['withCharSet'] || - params.fileContentType === 'withCharSet' - ) { - setContentType(fileContentVariation['withCharSet']); - } else if ( - fileType === fileContentVariation['withTextEncoder'] || - params.fileContentType === 'withTextEncoder' - ) { - setContentType(fileContentVariation['withTextEncoder']); - } - }, [fileType, params, setContentType]); - - // Localized strings for detailed file (currently disabled unless `downloadOption` param is added to URL) - const fileHeading = ftlMsgResolver.getMsg( - 'recovery-key-file-header', - 'SAVE YOUR ACCOUNT RECOVERY KEY' - ); - - const fileInstructions = ftlMsgResolver.getMsg( - 'recovery-key-file-instructions', - 'Store this file containing your account recovery key in a place you’ll remember. Or print it and keep a physical copy. Your account recovery key can help you recover Firefox data if you forget your password.' - ); - - const fileKey = ftlMsgResolver.getMsg( - 'recovery-key-file-key-value-v3', - `Key:` - ); - - const fileUserEmail = ftlMsgResolver.getMsg( - 'recovery-key-file-user-email-v2', - `* Firefox account: ${account.primaryEmail.email}`, - { email: account.primaryEmail.email } - ); - - const fileDate = ftlMsgResolver.getMsg( - 'recovery-key-file-download-date-v2', - `* Key generated: ${downloadDateInLocale}`, - { downloadDate: downloadDateInLocale } - ); - - const supportURL = 'https://mzl.la/3bNrM1I'; - - const fileSupport = ftlMsgResolver.getMsg( - 'recovery-key-file-support-v2', - `* Learn more about your account recovery key: ${supportURL}`, - { supportURL } - ); - - // Localized content in the download file is currently *disabled* by default due to an issue with encoding recognition on Android. - // Non-latin text (e.g., Hebrew) may be displayed as jibberish due to incorrect encoding detection. - // In addition, localized strings contain important directionality markers that are hidden on Mac - // but visible on many other devices. On Apple devices, these directionality markers get copied with the key, - // and the key is rejected as invalid during password reset. - - // Adding BOM ahead of detailed file content could possibly force detection of UTF-8 encoding. - // https://learn.microsoft.com/en-us/globalization/encoding/byte-order-mark - // To test, add `downloadOption=withBOM` to the query params when entering the account recovery key creation flow and hit enter to reload - const BOM = new Uint8Array([0xef, 0xbb, 0xbf]); - - const fileContentWithBOM = new Blob( - [ - BOM, - '*WITH BOM*', - '\r\n\r\n', - fileHeading, - '\r\n\r\n', - fileInstructions, - '\r\n\r\n', - fileKey, - '\r\n\r\n', - recoveryKeyValue, - '\r\n\r\n', - fileUserEmail, - '\r\n', - fileDate, - '\r\n', - fileSupport, - ], - { - type: 'text/plain', - } - ); - - // Specifying the char set of the blob might be sufficient - // To test, add `downloadOption=withCharSet` to the query params when entering the account recovery key creation flow and hit enter to reload - const fileContentWithCharSet = new Blob( - [ - '*WITH CHARSET*', - '\r\n\r\n', - fileHeading, - '\r\n\r\n', - fileInstructions, - '\r\n\r\n', - fileKey, - '\r\n\r\n', - recoveryKeyValue, - '\r\n\r\n', - fileUserEmail, - '\r\n', - fileDate, - '\r\n', - fileSupport, - ], - { - type: 'text/plain;charset=UTF-8', - } - ); - - // Using TextEncoder generates a byte stream with UTF-8 encoding - // To test, add `downloadOption=withTextEncoder` to the query params when entering the account recovery key creation flow and hit enter to reload - let encoder = new TextEncoder(); - const fileContentWithTextEncoder = new Blob( - [ - '*WITH TEXT ENCODER*', - '\r\n\r\n', - encoder.encode(fileHeading), - '\r\n\r\n', - encoder.encode(fileInstructions), - '\r\n\r\n', - encoder.encode(fileKey), - '\r\n\r\n', - encoder.encode(recoveryKeyValue), - '\r\n\r\n', - encoder.encode(fileUserEmail), - '\r\n', - encoder.encode(fileDate), - '\r\n', - encoder.encode(fileSupport), - ], - { - type: 'text/plain', - } - ); - - // Default file content - // While investigation into encoding of localized text is ongoing, - // we have reverted to a text file containing only the key. - const fileContentWithKeyOnly = new Blob([recoveryKeyValue], { - type: 'text/plain', - }); - - const getFilename = () => { - const date = currentDate.toISOString().split('T')[0]; - // Windows has a max directory length of 260 characters (including path) - // filename should be kept much shorter (maxLength is arbitrary). - const maxLength = 75; - const prefix = 'Firefox-Recovery-Key'; - let email = account.primaryEmail.email; - let filename = `${prefix}_${date}_${email}.txt`; - - if (filename.length > maxLength) { - const lengthWithoutEmail = filename.length - email.length; - email = email.slice(0, maxLength - lengthWithoutEmail); - filename = `${prefix}_${date}_${email}.txt`; - } - return filename; - }; - - // Get the URL for the selected file content - const getURL = () => { - let fileContent; - switch (contentType) { - case fileContentVariation['withBOM']: { - fileContent = fileContentWithBOM; - break; - } - case fileContentVariation['withCharSet']: { - fileContent = fileContentWithCharSet; - break; - } - case fileContentVariation['withTextEncoder']: { - fileContent = fileContentWithTextEncoder; - break; - } - default: { - fileContent = fileContentWithKeyOnly; - break; - } - } - return URL.createObjectURL(fileContent); - }; - - return ( - - { - logViewEvent(`flow.${viewName}`, `recovery-key.download-option`); - navigateForward && navigateForward(); - }} - > - Download and continue - - - ); -}; - -export default ButtonDownloadRecoveryKey; diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/RecoveryKeyPDF.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/RecoveryKeyPDF.tsx new file mode 100644 index 00000000000..3ef4335a343 --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/RecoveryKeyPDF.tsx @@ -0,0 +1,216 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import React from 'react'; +import { + Document, + Font, + Image, + Link, + Page, + StyleSheet, + Text, + View, +} from '@react-pdf/renderer'; +import { LocalizedRecoveryKeyPdfContent } from '.'; +import { + FolderSvg, + GlobeSvg, + KeySvg, + LockSvg, + PrinterSvg, + SecurityShieldSvg, +} from './VectorImagesForPdf'; +import notoSansMonoSemiBold from './fonts/NotoSansMono-SemiBold.ttf'; +import firefoxLogo from './images/firefox-logo-wordmark.png'; +import { FontData } from './requiredFont'; + +interface RecoveryKeyPDFProps { + recoveryKeyValue: string; + localizedText: LocalizedRecoveryKeyPdfContent; + requiredFont: FontData; + email: string; +} + +export const RecoveryKeyPDF = ({ + recoveryKeyValue, + requiredFont, + email, + localizedText, +}: RecoveryKeyPDFProps) => { + const { family, sources, direction } = requiredFont; + + Font.register({ + family, + fonts: sources, + }); + + Font.register({ + family: 'Noto Sans Mono', + fonts: [ + { + src: notoSansMonoSemiBold, + style: 'normal', + weight: 'semibold', + }, + ], + }); + + // Disable word hyphenation - the default behaviour breaks word without regard to locales' hyphenation rules. + Font.registerHyphenationCallback((word: string) => [word]); + + const styles = StyleSheet.create({ + page: { + flexDirection: 'column', + backgroundColor: '#ffffff', + paddingVertical: '2cm', + paddingHorizontal: '2cm', + fontFamily: family, + textAlign: direction === 'ltr' ? 'left' : 'right', + }, + purpleSection: { + flexDirection: 'column', + marginTop: '56px', + paddingHorizontal: '28px', + paddingBottom: '28px', + borderRadius: 10, + backgroundColor: '#e3dff5', + textAlign: 'center', + }, + whiteSection: { + padding: '16px', + borderRadius: 5, + backgroundColor: '#ffffff', + fontSize: '12px', + gap: '8px', + alignItems: 'flex-start', + }, + heading: { + fontSize: '18px', + fontWeight: 'bold', + marginTop: '10px', + marginBottom: '4px', + }, + subheading: { + fontSize: '12px', + fontWeight: 'semibold', + marginTop: '28px', + marginBottom: '12px', + }, + listItem: { + flexDirection: direction === 'ltr' ? 'row' : 'row-reverse', + gap: '4px', + alignItems: 'center', + flexBasis: '50%', + paddingVertical: '4px', + }, + listItemText: { + fontSize: '10px', + fontWeight: 'normal', + }, + }); + + return ( + + + + + + + + {localizedText.heading} + + {localizedText.dateGenerated} + + + {email} + + + + + + {localizedText.keyLegend} + + + + {recoveryKeyValue} + + + + + + {localizedText.instructions} + + {localizedText.storageHeading} + + + + + {localizedText.storageIdeaFolder} + + + + + + {localizedText.storageIdeaCloud} + + + + + + {localizedText.storageIdeaPrint} + + + + + + {localizedText.storageIdeaPwdManager} + + + + + {localizedText.findOutMoreHeading} + + + https://mzl.la/3bNrM1I + + + + + ); +}; diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/VectorImagesForPdf.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/VectorImagesForPdf.tsx new file mode 100644 index 00000000000..a4082814a1c --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/VectorImagesForPdf.tsx @@ -0,0 +1,157 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import React from 'react'; +import { Svg, Path, Rect } from '@react-pdf/renderer'; + +// To include SVG in PDFs with react-pdf/renderer, SVGs must to be added directly in the format explained in docs. +// This requires modifying the source code of SVGs to match the expected format. +// See docs: https://react-pdf.org/svg + +export const SecurityShieldSvg = () => { + return ( + + + + + + + + + + + ); +}; + +export const FolderSvg = () => { + return ( + + + + ); +}; + +export const GlobeSvg = () => { + return ( + + + + ); +}; + +export const LockSvg = () => { + return ( + + + + + ); +}; + +export const PrinterSvg = () => { + return ( + + + + ); +}; + +export const KeySvg = (props: { direction: 'rtl' | 'ltr' }) => { + const { direction } = props; + return ( + + + + ); +}; diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/en.ftl b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/en.ftl new file mode 100644 index 00000000000..3bb9c477cbf --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/en.ftl @@ -0,0 +1,33 @@ +## ButtonDownloadRecoveryKeyPDF +## Clicking on this button downloads a PDF file that contains the user's account recovery key +## The account recovery key can be used to recover data when users forget their account password + +# Button to download the account recovery key as a PDF file and navigate to the next step +# The next (and final) step is an optional prompt to save a storage hint +# .title will displayed as a tooltip on the button +recovery-key-download-button-v3 = Download and continue + .title = Download and continue + +recovery-key-pdf-heading = Account Recovery Key + +# Date when the account recovery key was created and this file was downloaded +# { $date }: formatted date with 'medium' dateStyle format (e.g., for 'en': Jul 31, 2023) +recovery-key-pdf-download-date = Generated: { $date } + +# Shown directly above recovery key value and preceeded by a key icon +recovery-key-pdf-key-legend = Account Recovery Key + +# Instructions in the text file to prompt the user to keep this information in a secure, easy to remember location. +# Password resets without this account recovery key can result in data loss. +# "key" here refers to "account recovery key" +recovery-key-pdf-instructions = This key allows you to recover your encrypted browser data (including passwords, bookmarks, and history) if you forget your password. Store it in a place you’ll remember. + +# This heading is shown above a list of options for storing the account recovery key +# "key" here refers to "account recovery key" +recovery-key-pdf-storage-ideas-heading = Places to store your key + +# Followed by a link (https://mzl.la/3bNrM1I) to get more information and support +recovery-key-pdf-support = Learn more about your account recovery key + +# Error message displayed in an alert bar if the PDF download failed. +recovery-key-pdf-download-error = Sorry, there was a problem downloading your account recovery key. diff --git a/assets/fonts/NotoSans-Bold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSans-Bold.ttf similarity index 100% rename from assets/fonts/NotoSans-Bold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSans-Bold.ttf diff --git a/assets/fonts/NotoSans-Regular.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSans-Regular.ttf similarity index 100% rename from assets/fonts/NotoSans-Regular.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSans-Regular.ttf diff --git a/assets/fonts/NotoSans-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSans-SemiBold.ttf similarity index 100% rename from assets/fonts/NotoSans-SemiBold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSans-SemiBold.ttf diff --git a/assets/fonts/NotoSansGeorgian-Bold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansGeorgian-Bold.ttf similarity index 100% rename from assets/fonts/NotoSansGeorgian-Bold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansGeorgian-Bold.ttf diff --git a/assets/fonts/NotoSansGeorgian-Regular.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansGeorgian-Regular.ttf similarity index 100% rename from assets/fonts/NotoSansGeorgian-Regular.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansGeorgian-Regular.ttf diff --git a/assets/fonts/NotoSansGeorgian-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansGeorgian-SemiBold.ttf similarity index 100% rename from assets/fonts/NotoSansGeorgian-SemiBold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansGeorgian-SemiBold.ttf diff --git a/assets/fonts/NotoSansHebrew-Bold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansHebrew-Bold.ttf similarity index 100% rename from assets/fonts/NotoSansHebrew-Bold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansHebrew-Bold.ttf diff --git a/assets/fonts/NotoSansHebrew-Regular.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansHebrew-Regular.ttf similarity index 100% rename from assets/fonts/NotoSansHebrew-Regular.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansHebrew-Regular.ttf diff --git a/assets/fonts/NotoSansHebrew-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansHebrew-SemiBold.ttf similarity index 100% rename from assets/fonts/NotoSansHebrew-SemiBold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansHebrew-SemiBold.ttf diff --git a/assets/fonts/NotoSansJP-Bold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansJP-Bold.ttf similarity index 100% rename from assets/fonts/NotoSansJP-Bold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansJP-Bold.ttf diff --git a/assets/fonts/NotoSansJP-Regular.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansJP-Regular.ttf similarity index 100% rename from assets/fonts/NotoSansJP-Regular.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansJP-Regular.ttf diff --git a/assets/fonts/NotoSansJP-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansJP-SemiBold.ttf similarity index 100% rename from assets/fonts/NotoSansJP-SemiBold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansJP-SemiBold.ttf diff --git a/assets/fonts/NotoSansKR-Bold.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansKR-Bold.otf similarity index 100% rename from assets/fonts/NotoSansKR-Bold.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansKR-Bold.otf diff --git a/assets/fonts/NotoSansKR-Medium.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansKR-Medium.otf similarity index 100% rename from assets/fonts/NotoSansKR-Medium.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansKR-Medium.otf diff --git a/assets/fonts/NotoSansKR-Regular.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansKR-Regular.otf similarity index 100% rename from assets/fonts/NotoSansKR-Regular.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansKR-Regular.otf diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansMono-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansMono-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5b899b45f4ee3e9806657003c455dc83d1d1cc59 GIT binary patch literal 403232 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

i|Bk< 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 )46Fh4PvpBT(f4CW^W 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

b7V?)`9#CUT>`If$J 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ž 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 W%FV&s5EIbkbaw+-N$KyR?EeB@LGi@^ literal 0 HcmV?d00001 diff --git a/assets/fonts/NotoSansSC-Bold.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansSC-Bold.otf similarity index 100% rename from assets/fonts/NotoSansSC-Bold.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansSC-Bold.otf diff --git a/assets/fonts/NotoSansSC-Medium.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansSC-Medium.otf similarity index 100% rename from assets/fonts/NotoSansSC-Medium.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansSC-Medium.otf diff --git a/assets/fonts/NotoSansSC-Regular.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansSC-Regular.otf similarity index 100% rename from assets/fonts/NotoSansSC-Regular.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansSC-Regular.otf diff --git a/assets/fonts/NotoSansTC-Bold.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansTC-Bold.otf similarity index 100% rename from assets/fonts/NotoSansTC-Bold.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansTC-Bold.otf diff --git a/assets/fonts/NotoSansTC-Medium.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansTC-Medium.otf similarity index 100% rename from assets/fonts/NotoSansTC-Medium.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansTC-Medium.otf diff --git a/assets/fonts/NotoSansTC-Regular.otf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansTC-Regular.otf similarity index 100% rename from assets/fonts/NotoSansTC-Regular.otf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansTC-Regular.otf diff --git a/assets/fonts/NotoSansThai-Bold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansThai-Bold.ttf similarity index 100% rename from assets/fonts/NotoSansThai-Bold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansThai-Bold.ttf diff --git a/assets/fonts/NotoSansThai-Regular.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansThai-Regular.ttf similarity index 100% rename from assets/fonts/NotoSansThai-Regular.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansThai-Regular.ttf diff --git a/assets/fonts/NotoSansThai-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansThai-SemiBold.ttf similarity index 100% rename from assets/fonts/NotoSansThai-SemiBold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSansThai-SemiBold.ttf diff --git a/assets/fonts/NotoSerifGurmukhi-Bold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSerifGurmukhi-Bold.ttf similarity index 100% rename from assets/fonts/NotoSerifGurmukhi-Bold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSerifGurmukhi-Bold.ttf diff --git a/assets/fonts/NotoSerifGurmukhi-Regular.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSerifGurmukhi-Regular.ttf similarity index 100% rename from assets/fonts/NotoSerifGurmukhi-Regular.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSerifGurmukhi-Regular.ttf diff --git a/assets/fonts/NotoSerifGurmukhi-SemiBold.ttf b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSerifGurmukhi-SemiBold.ttf similarity index 100% rename from assets/fonts/NotoSerifGurmukhi-SemiBold.ttf rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/NotoSerifGurmukhi-SemiBold.ttf diff --git a/assets/fonts/README.md b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/README.md similarity index 62% rename from assets/fonts/README.md rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/README.md index 636fab8edd5..f7ce519fa59 100644 --- a/assets/fonts/README.md +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/README.md @@ -21,10 +21,9 @@ For most of the locales supported by Firefox accounts (see `supportedLanguages.j ## Adding new fonts/locales for PDF localization -New fonts (e.g., for additional languages or font weights/styles) must be uploaded to the CDN then registered for use by react-pdf. +New fonts (e.g., for additional languages or font weights/styles) must be registered for use by react-pdf. 1. Add required font files to `assets/fonts` -2. Verify if new file types need to be included in the `upload-assets-to-cdn` script. Currently, `*.ttf` and `*.otf` are included - if the fonts have another extension, add it to the upload script. -3. Submit the PR, get it approved and merge to upload the assets. -4. Once upload, font urls will start with `https://accounts-static.cdn.mozilla.net/fonts/` -5. Add a new case to the switch in `ButtonDownloadRecoveryPDF` for the new font(s) (see exisiting examples in the file and consult react-pdf docs: https://react-pdf.org/fonts#register). +2. Verify if new type declarations need to be added for typescript to recognize the font files as valid import modules. Currently, `*.ttf` and `*.otf` are included - if the fonts have another extension, add it to the `fonts.d.ts`. +3. Import the font(s) in `ButtonDownloadRecoveryPDF/index.tsx` +4. Add a new case to the switch in `ButtonDownloadRecoveryPDF/GetRequiredFont.tsx` for the new locale (see exisiting examples in the file and consult react-pdf docs: https://react-pdf.org/fonts#register). diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/fonts.d.ts b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/fonts.d.ts new file mode 100644 index 00000000000..d12c80fb143 --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/fonts/fonts.d.ts @@ -0,0 +1,2 @@ +declare module '*.ttf'; +declare module '*.otf'; diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/images/firefox-logo-wordmark.png b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/images/firefox-logo-wordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..a0db07839207eacfbb5cd41e0a509c66ef30bea3 GIT binary patch literal 6715 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 { + const story = () => ( + + + + + + ); + return story; +}; + +export const Default = storyWithAccount(account); + +export const WithLongEmail = storyWithAccount(accountWithLongEmail); diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.test.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.test.tsx similarity index 61% rename from packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.test.tsx rename to packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.test.tsx index 2aa12557004..4dd9f81ce90 100644 --- a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKey/index.test.tsx +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.test.tsx @@ -6,7 +6,7 @@ import React from 'react'; import { fireEvent, screen } from '@testing-library/react'; import { renderWithLocalizationProvider } from 'fxa-react/lib/test-utils/localizationProvider'; import { Account, AppContext } from '../../models'; -import { ButtonDownloadRecoveryKey } from '.'; +import { ButtonDownloadRecoveryKeyPDF, getFilename } from '.'; import { MOCK_ACCOUNT } from '../../models/mocks'; import { logViewEvent } from '../../lib/metrics'; import { TextEncoder } from 'util'; @@ -20,41 +20,55 @@ const account = { ...MOCK_ACCOUNT, } as unknown as Account; -const accountWithLongEmail = { - ...MOCK_ACCOUNT, - primaryEmail: { - email: - 'supercalifragilisticexpialidocious@marypoppins.superfan.conference.com', - }, -} as unknown as Account; - jest.mock('../../lib/metrics', () => ({ logViewEvent: jest.fn(), })); +jest.mock('@react-pdf/renderer', () => { + return { + pdf: jest.fn().mockResolvedValue({ + toBlob: jest.fn().mockResolvedValue(new Blob()), + updateContainer: jest.fn(), + }), + }; +}); + beforeAll(() => { window.URL.createObjectURL = jest.fn(); }); -describe('ButtonDownloadRecoveryKey', () => { +describe('ButtonDownloadRecoveryKeyPDF', () => { it('renders button as expected', () => { renderWithLocalizationProvider( - + ); screen.getByText('Download and continue'); }); - it('sets the filename as expected with a reasonably-sized email', () => { + // Content of downloaded file is tested in Playwright tests + // including validating that the expected key is included and matches the key in the DataBlock + it('emits a metrics event when the link is clicked', () => { renderWithLocalizationProvider( - + ); - const downloadButtonDownloadAttribute = screen - .getByText('Download and continue') - .getAttribute('download'); + const downloadButton = screen.getByText('Download and continue'); + fireEvent.click(downloadButton); + + expect(logViewEvent).toHaveBeenCalledWith( + `flow.${viewName}`, + 'recovery-key.download-option' + ); + }); +}); + +describe('getFilename function', () => { + it('sets the filename as expected with a reasonably-sized email', () => { + const regularEmail = MOCK_ACCOUNT.primaryEmail.email; + const filename = getFilename(regularEmail); // Test the date formatting const mockDateObject = '2023-05-10T17:00:40.722Z'; @@ -68,48 +82,28 @@ describe('ButtonDownloadRecoveryKey', () => { // Filename should be created from current date const date = new Date().toISOString().split('T')[0]; - expect(downloadButtonDownloadAttribute).toContain( - `Firefox-Recovery-Key_${date}_${account.primaryEmail.email}.txt` + expect(filename).toContain( + `Firefox-Recovery-Key_${date}_${account.primaryEmail.email}.pdf` ); - expect(downloadButtonDownloadAttribute!.length).toBeLessThanOrEqual(75); + expect(filename.length).toBeLessThanOrEqual(75); }); it('sets the filename with a truncated email as expected when the email is very long', () => { - renderWithLocalizationProvider( - - - - ); - const downloadButtonDownloadAttribute = screen - .getByText('Download and continue') - .getAttribute('download'); - const currentDate = new Date(); - const date = currentDate.toISOString().split('T')[0]; - const fullFilename = `Firefox-Recovery-Key_${date}_${accountWithLongEmail.primaryEmail.email}.txt`; - // Full filename would be longer than 75 char if not truncated - expect(fullFilename.length).toBeGreaterThan(75); - // actual filename is truncated - expect(downloadButtonDownloadAttribute!.length).toBeLessThanOrEqual(75); - // filename still contains full prefix and date - expect(downloadButtonDownloadAttribute).toContain('Firefox-Recovery-Key'); - expect(downloadButtonDownloadAttribute).toContain(date); - }); + const longEmail = + 'supercalifragilisticexpialidocious@marypoppins.superfan.conference.com'; + const filename = getFilename(longEmail); - // Content of downloaded file is tested in Playwright tests - // including validating that the expected key is included and matches the key in the DataBlock + // Filename should be created from current date + const date = new Date().toISOString().split('T')[0]; - it('emits a metrics event when the link is clicked', () => { - renderWithLocalizationProvider( - - - - ); - const downloadButton = screen.getByText('Download and continue'); - fireEvent.click(downloadButton); + const fullFilename = `Firefox-Recovery-Key_${date}_${longEmail}.pdf`; + // Full filename would be longer than 75 char if not truncated + expect(fullFilename.length).toBeGreaterThan(75); - expect(logViewEvent).toHaveBeenCalledWith( - `flow.${viewName}`, - 'recovery-key.download-option' - ); + // Actual filename is truncated + expect(filename.length).toBeLessThanOrEqual(75); + // filename still contains full prefix and date + expect(filename).toContain('Firefox-Recovery-Key'); + expect(filename).toContain(date); }); }); diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.tsx new file mode 100644 index 00000000000..ad8d9a813fa --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/index.tsx @@ -0,0 +1,159 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import React from 'react'; +import { useAccount, useAlertBar, useFtlMsgResolver } from '../../models'; +import { pdf } from '@react-pdf/renderer'; +import { saveAs } from 'file-saver'; +import { RecoveryKeyPDF } from '../ButtonDownloadRecoveryKeyPDF/RecoveryKeyPDF'; +import { + FtlMsg, + LocalizedDateOptions, + getLocalizedDate, +} from 'fxa-react/lib/utils'; +import { logViewEvent } from '../../lib/metrics'; +import { FontData, getRequiredFont } from './requiredFont'; + +export interface LocalizedRecoveryKeyPdfContent { + heading: string; + dateGenerated: string; + keyLegend: string; + instructions: string; + storageHeading: string; + storageIdeaFolder: string; + storageIdeaCloud: string; + storageIdeaPrint: string; + storageIdeaPwdManager: string; + findOutMoreHeading: string; +} + +interface ButtonDownloadRecoveryKeyPDFProps { + navigateForward?: () => void; + recoveryKeyValue: string; + viewName: string; +} + +export const getFilename = (email: string) => { + const date = new Date().toISOString().split('T')[0]; + const prefix = 'Firefox-Recovery-Key'; + // Windows has a max directory length of 260 characters (including path) + // filename should be kept much shorter (maxLength is arbitrary). + let filename = `${prefix}_${date}_${email}`.substring(0, 71) + `.pdf`; + + return filename; +}; + +export const ButtonDownloadRecoveryKeyPDF = ({ + navigateForward, + recoveryKeyValue, + viewName, +}: ButtonDownloadRecoveryKeyPDFProps) => { + const account = useAccount(); + const email = account.primaryEmail.email; + const keyCreated = Date.now(); + const currentLanguage = navigator.language; + const ftlMsgResolver = useFtlMsgResolver(); + + const alertBar = useAlertBar(); + + const keyDateFallback = Intl.DateTimeFormat('default', { + dateStyle: 'medium', + }).format(new Date(keyCreated)); + + const keyDateFluent = getLocalizedDate( + keyCreated, + LocalizedDateOptions.MediumDateStyle + ); + + const localizedText: LocalizedRecoveryKeyPdfContent = { + heading: ftlMsgResolver.getMsg( + 'recovery-key-pdf-heading', + 'Account Recovery Key' + ), + dateGenerated: ftlMsgResolver.getMsg( + 'recovery-key-pdf-download-date', + `Generated: ${keyDateFallback}`, + { date: keyDateFluent } + ), + keyLegend: ftlMsgResolver.getMsg( + 'recovery-key-pdf-key-legend', + 'Account Recovery Key' + ), + instructions: ftlMsgResolver.getMsg( + 'recovery-key-pdf-instructions', + 'This key allows you to recover your encrypted browser data (including passwords, bookmarks, and history) if you forget your password. Store it in a place you’ll remember. ' + ), + storageHeading: ftlMsgResolver.getMsg( + 'recovery-key-pdf-storage-ideas-heading', + 'Places to store your key' + ), + storageIdeaFolder: ftlMsgResolver.getMsg( + 'flow-recovery-key-download-storage-ideas-folder-v2', + 'Folder on secure device' + ), + storageIdeaCloud: ftlMsgResolver.getMsg( + 'flow-recovery-key-download-storage-ideas-cloud', + 'Trusted cloud storage' + ), + storageIdeaPrint: ftlMsgResolver.getMsg( + 'flow-recovery-key-download-storage-ideas-print-v2', + 'Printed physical copy' + ), + storageIdeaPwdManager: ftlMsgResolver.getMsg( + 'flow-recovery-key-download-storage-ideas-pwd-manager', + 'Password manager' + ), + findOutMoreHeading: ftlMsgResolver.getMsg( + 'recovery-key-pdf-support', + 'Learn more about your account recovery key' + ), + }; + + const requiredFont: FontData = getRequiredFont(currentLanguage); + + // File download test coverage is provided by Playwright functional test + const downloadFile = async () => { + const doc = ( + + ); + + try { + const asPdf = pdf(); + asPdf.updateContainer(doc); + const blob = await asPdf.toBlob(); + const filename = getFilename(account.primaryEmail.email); + saveAs(blob, filename); + logViewEvent(`flow.${viewName}`, `recovery-key.download-success`); + } catch (e) { + logViewEvent(`flow.${viewName}`, `recovery-key.download-failed`); + alertBar.error( + ftlMsgResolver.getMsg( + 'recovery-key-pdf-download-error', + 'Sorry, there was a problem downloading your account recovery key.' + ) + ); + } + }; + + return ( + <> + + + + + ); +}; + +export default ButtonDownloadRecoveryKeyPDF; diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.test.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.test.tsx new file mode 100644 index 00000000000..acd233d594f --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.test.tsx @@ -0,0 +1,68 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import { getRequiredFont } from './requiredFont'; + +describe('getRequiredFont', () => { + it('returns the default font when the languages is unknown or not recognized', async () => { + const requiredFont = getRequiredFont('unknown'); + expect(requiredFont.family).toEqual('Noto Sans'); + expect(requiredFont.direction).toEqual('ltr'); + }); + + it('returns the expected font data when the language is Chinese (mainland)', async () => { + const requiredFont = getRequiredFont('zh-cn'); + expect(requiredFont.family).toEqual('Noto Sans SC'); + expect(requiredFont.direction).toEqual('ltr'); + }); + + it('returns the expected font data when the language is Chinese (Taiwan)', async () => { + const requiredFont = getRequiredFont('zh-tw'); + expect(requiredFont.family).toEqual('Noto Sans TC'); + expect(requiredFont.direction).toEqual('ltr'); + }); + + it('returns the expected font data when the language is Georgian', async () => { + const requiredFont = getRequiredFont('zh-tw'); + expect(requiredFont.family).toEqual('Noto Sans TC'); + expect(requiredFont.direction).toEqual('ltr'); + }); + + it('returns the expected font data when the language is Hebrew', async () => { + let requiredFont = getRequiredFont('he'); + expect(requiredFont.family).toEqual('Noto Sans Hebrew'); + expect(requiredFont.direction).toEqual('rtl'); + }); + + it('returns the expected font data when the language is Japanese', async () => { + let requiredFont = getRequiredFont('ja'); + expect(requiredFont.family).toEqual('Noto Sans JP'); + expect(requiredFont.direction).toEqual('ltr'); + + // can match if lowercase or uppercase + requiredFont = getRequiredFont('ja-jp'); + expect(requiredFont.family).toEqual('Noto Sans JP'); + + requiredFont = getRequiredFont('ja-JP'); + expect(requiredFont.family).toEqual('Noto Sans JP'); + }); + + it('returns the expected font data when the language is Korean', async () => { + const requiredFont = getRequiredFont('ko'); + expect(requiredFont.family).toEqual('Noto Sans KR'); + expect(requiredFont.direction).toEqual('ltr'); + }); + + it('returns the expected font data when the language is Punjabi', async () => { + const requiredFont = getRequiredFont('pa'); + expect(requiredFont.family).toEqual('Noto Serif Gurmukhi'); + expect(requiredFont.direction).toEqual('rtl'); + }); + + it('returns the expected font data when the language is Thai', async () => { + const requiredFont = getRequiredFont('th'); + expect(requiredFont.family).toEqual('Noto Sans Thai'); + expect(requiredFont.direction).toEqual('ltr'); + }); +}); diff --git a/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.tsx b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.tsx new file mode 100644 index 00000000000..12725e9dedd --- /dev/null +++ b/packages/fxa-settings/src/components/ButtonDownloadRecoveryKeyPDF/requiredFont.tsx @@ -0,0 +1,288 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import notoSansRegular from './fonts/NotoSans-Regular.ttf'; +import notoSansSemibold from './fonts/NotoSans-SemiBold.ttf'; +import notoSansBold from './fonts/NotoSans-Bold.ttf'; +import notoSansGeorgianRegular from './fonts/NotoSansGeorgian-Regular.ttf'; +import notoSansGeorgianSemibold from './fonts/NotoSansGeorgian-SemiBold.ttf'; +import notoSansGeorgianBold from './fonts/NotoSansGeorgian-Bold.ttf'; +import notoSerifGurmukhiRegular from './fonts/NotoSerifGurmukhi-Regular.ttf'; +import notoSerifGurmukhiSemibold from './fonts/NotoSerifGurmukhi-SemiBold.ttf'; +import notoSerifGurmukhiBold from './fonts/NotoSerifGurmukhi-Bold.ttf'; +import notoSansHebrewRegular from './fonts/NotoSansHebrew-Regular.ttf'; +import notoSansHebrewSemibold from './fonts/NotoSansHebrew-SemiBold.ttf'; +import notoSansHebrewBold from './fonts/NotoSansHebrew-Bold.ttf'; +import notoSansJPRegular from './fonts/NotoSansJP-Regular.ttf'; +import notoSansJPSemibold from './fonts/NotoSansJP-SemiBold.ttf'; +import notoSansJPBold from './fonts/NotoSansJP-Bold.ttf'; +import notoSansKRRegular from './fonts/NotoSansKR-Regular.otf'; +import notoSansKRSemibold from './fonts/NotoSansKR-Medium.otf'; +import notoSansKRBold from './fonts/NotoSansKR-Bold.otf'; +import notoSansSCRegular from './fonts/NotoSansSC-Regular.otf'; +import notoSansSCMedium from './fonts/NotoSansSC-Medium.otf'; +import notoSansSCBold from './fonts/NotoSansSC-Bold.otf'; +import notoSansThaiRegular from './fonts/NotoSansThai-Regular.ttf'; +import notoSansThaiSemibold from './fonts/NotoSansThai-SemiBold.ttf'; +import notoSansThaiBold from './fonts/NotoSansThai-Bold.ttf'; +import notoSansTCRegular from './fonts/NotoSansTC-Regular.otf'; +import notoSansTCMedium from './fonts/NotoSansTC-Medium.otf'; +import notoSansTCBold from './fonts/NotoSansTC-Bold.otf'; + +export interface FontSource { + src: string; + style: 'normal' | 'italic' | 'oblique'; + weight: + | 'thin' + | 'ultralight' + | 'light' + | 'normal' + | 'medium' + | 'semibold' + | 'bold' + | 'ultrabold' + | 'heavy' + | number; +} +export interface FontData { + family: string; + sources: FontSource[]; + direction: 'ltr' | 'rtl'; +} + +export const getRequiredFont = (language: string) => { + // Languages supported below based on 'supportedLanguages.json' + // New cases should only be added if additional languages are not supported by the default Noto Sans font + // Specifying the directionality of the language will impact the layout of the PDF + // Fonts should be saved to fxa-settings/src/assets/fonts - see instructions in fxa-settings/src/assets/fonts/README.md + + let requiredFont: FontData; + switch (language.toLowerCase()) { + // Japanese + case 'ja': + case 'ja-jp': + requiredFont = { + family: 'Noto Sans JP', + sources: [ + { + src: notoSansJPRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansJPSemibold, + style: 'normal', + weight: 'semibold', + }, + { + src: notoSansJPBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + // Georgian + case 'ka': + requiredFont = { + family: 'Noto Sans Georgian', + sources: [ + { + src: notoSansGeorgianRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansGeorgianSemibold, + style: 'normal', + weight: 'semibold', + }, + { + src: notoSansGeorgianBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + // Hebrew + case 'he': + requiredFont = { + family: 'Noto Sans Hebrew', + sources: [ + { + src: notoSansHebrewRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansHebrewSemibold, + style: 'normal', + weight: 'semibold', + }, + { + src: notoSansHebrewBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'rtl', + }; + break; + // Korean + case 'ko': + case 'ko-kp': + case 'ko-kr': + requiredFont = { + family: 'Noto Sans KR', + sources: [ + { + src: notoSansKRRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansKRSemibold, + style: 'normal', + weight: 'medium', + }, + { + src: notoSansKRBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + // Punjabi + // Noto Sans variant of this font was not working as expected and was preventing PDF generation + // Replaced with Noto Serif version + case 'pa': + case 'pa-in': + case 'pa-pk': + requiredFont = { + family: 'Noto Serif Gurmukhi', + sources: [ + { + src: notoSerifGurmukhiRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSerifGurmukhiSemibold, + style: 'normal', + weight: 'semibold', + }, + { + src: notoSerifGurmukhiBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'rtl', + }; + break; + // Thai + case 'th': + requiredFont = { + family: 'Noto Sans Thai', + sources: [ + { + src: notoSansThaiRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansThaiSemibold, + style: 'normal', + weight: 'semibold', + }, + { + src: notoSansThaiBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + // Chinese (Mainland) - Simplified Chinese + case 'zh': + case 'zh-cn': + requiredFont = { + family: 'Noto Sans SC', + sources: [ + { + src: notoSansSCRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansSCMedium, + style: 'normal', + weight: 'medium', + }, + { + src: notoSansSCBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + // Chinese (Taiwan) - Traditional Chinese + case 'zh-tw': + requiredFont = { + family: 'Noto Sans TC', + sources: [ + { + src: notoSansTCRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansTCMedium, + style: 'normal', + weight: 'medium', + }, + { + src: notoSansTCBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + default: + requiredFont = { + family: 'Noto Sans', + sources: [ + { + src: notoSansRegular, + style: 'normal', + weight: 'normal', + }, + { + src: notoSansSemibold, + style: 'normal', + weight: 'semibold', + }, + { + src: notoSansBold, + style: 'normal', + weight: 'bold', + }, + ], + direction: 'ltr', + }; + break; + } + + return requiredFont; +}; diff --git a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/en.ftl b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/en.ftl index 4fea555b373..eb316626fd6 100644 --- a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/en.ftl +++ b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/en.ftl @@ -7,3 +7,11 @@ flow-recovery-key-download-heading-v2 = Account recovery key created — Downloa flow-recovery-key-download-info-v2 = This key allows you to recover your data if you forget your password. Download it now and store it somewhere you’ll remember — you won’t be able to return to this page later. # This link allows user to proceed to the next step without clicking the download button flow-recovery-key-download-next-link-v2 = Continue without downloading + +# This heading is shown above a list of options for storing the account recovery key +# "key" here refers to "account recovery key" +flow-recovery-key-download-storage-ideas-heading-v2 = Places to store your key: +flow-recovery-key-download-storage-ideas-folder-v2 = Folder on secure device +flow-recovery-key-download-storage-ideas-cloud = Trusted cloud storage +flow-recovery-key-download-storage-ideas-print-v2 = Printed physical copy +flow-recovery-key-download-storage-ideas-pwd-manager = Password manager diff --git a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.test.tsx b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.test.tsx index e0a94f97a94..1b2e1a2f345 100644 --- a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.test.tsx +++ b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.test.tsx @@ -9,9 +9,6 @@ import { logViewEvent } from '../../../lib/metrics'; import FlowRecoveryKeyDownload from './'; import { renderWithRouter } from '../../../models/mocks'; import { MOCK_RECOVERY_KEY_VALUE } from './mocks'; -import { TextEncoder } from 'util'; - -Object.assign(global, { TextEncoder }); const localizedBackButtonTitle = 'Back to settings'; const localizedPageTitle = 'Account Recovery Key'; @@ -24,6 +21,15 @@ jest.mock('../../../lib/metrics', () => ({ logViewEvent: jest.fn(), })); +jest.mock('@react-pdf/renderer', () => { + return { + pdf: jest.fn().mockResolvedValue({ + toBlob: jest.fn().mockResolvedValue(new Blob()), + updateContainer: jest.fn(), + }), + }; +}); + const renderFlowPage = () => { window.URL.createObjectURL = jest.fn(); renderWithRouter( @@ -69,8 +75,11 @@ describe('FlowRecoveryKeyDownload', () => { const listItems = within(list).getAllByRole('listitem'); expect(listItems.length).toBe(4); - screen.getByText('Download and continue'); - screen.getByRole('link', { name: 'Continue without downloading' }); + screen.getByRole('button', { name: 'Download and continue' }); + + screen.getByRole('link', { + name: 'Continue without downloading', + }); }); it('emits the expected metrics when user copies the recovery key', async () => { @@ -85,27 +94,29 @@ describe('FlowRecoveryKeyDownload', () => { ); }); - it('emits the expected metrics when user downloads the recovery key', () => { + it('emits the expected metrics when user downloads the recovery key', async () => { renderFlowPage(); const downloadButton = screen.getByText('Download and continue'); fireEvent.click(downloadButton); - expect(logViewEvent).toBeCalledWith( - `flow.${viewName}`, - 'recovery-key.download-option' - ); + await waitFor(() => { + expect(logViewEvent).toBeCalledWith( + `flow.${viewName}`, + 'recovery-key.download-option' + ); + }); }); - it('emits the expected metrics when user navigates forward without downloading the key', () => { + it('emits the expected metrics when user navigates forward', () => { renderFlowPage(); const nextPageLink = screen.getByRole('link', { name: 'Continue without downloading', }); fireEvent.click(nextPageLink); - expect(navigateForward).toBeCalledTimes(1); expect(logViewEvent).toBeCalledWith( `flow.${viewName}`, 'recovery-key.skip-download' ); + expect(navigateForward).toBeCalledTimes(1); }); it('emits the expected metrics when user clicks the back arrow', () => { diff --git a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.tsx b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.tsx index afac77d61eb..59fcedd2d57 100644 --- a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.tsx +++ b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyDownload/index.tsx @@ -6,7 +6,6 @@ import React from 'react'; import FlowContainer from '../FlowContainer'; import ProgressBar from '../ProgressBar'; import DataBlock from '../../DataBlock'; -import ButtonDownloadRecoveryKey from '../../ButtonDownloadRecoveryKey'; import { Link } from '@reach/router'; import { FtlMsg } from 'fxa-react/lib/utils'; import { RecoveryKeyImage } from '../../images'; @@ -17,6 +16,7 @@ import { LockIconListItem, PrinterIconListItem, } from '../../IconListItem'; +import ButtonDownloadRecoveryKeyPDF from '../../ButtonDownloadRecoveryKeyPDF'; export type FlowRecoveryKeyDownloadProps = { localizedBackButtonTitle: string; @@ -97,9 +97,10 @@ export const FlowRecoveryKeyDownload = ({ - + { it('emits the expected metrics when the user lands on this step of the flow', () => { renderWithContext(accountWithSuccess); expect(logViewEvent).toBeCalledTimes(1); - expect(logViewEvent).toBeCalledWith(viewName, 'hint-step-view'); + expect(logViewEvent).toBeCalledWith(`flow.${viewName}`, 'create-hint.view'); }); it('saves the hint on submit if the user has entered a valid hint in the text input', async () => { @@ -98,11 +98,17 @@ describe('FlowRecoveryKeyHint', () => { }); fireEvent.click(submitButton); await waitFor(() => { - expect(logViewEvent).toBeCalledWith(viewName, 'create-hint.submit'); + expect(logViewEvent).toBeCalledWith( + `flow.${viewName}`, + 'create-hint.submit' + ); expect(accountWithSuccess.updateRecoveryKeyHint).toBeCalledWith( hintValue ); - expect(logViewEvent).toBeCalledWith(viewName, 'create-hint.success'); + expect(logViewEvent).toBeCalledWith( + `flow.${viewName}`, + 'create-hint.success' + ); expect(navigateForward).toHaveBeenCalledTimes(1); }); }); @@ -126,7 +132,10 @@ describe('FlowRecoveryKeyHint', () => { 'The hint must contain fewer than 255 characters.' ); expect(accountWithSuccess.updateRecoveryKeyHint).not.toBeCalled(); - expect(logViewEvent).not.toBeCalledWith(viewName, 'create-hint.submit'); + expect(logViewEvent).not.toBeCalledWith( + `flow.${viewName}`, + 'create-hint.submit' + ); expect(navigateForward).not.toBeCalled(); }); }); @@ -146,11 +155,14 @@ describe('FlowRecoveryKeyHint', () => { }); fireEvent.click(submitButton); await waitFor(() => { - expect(logViewEvent).toBeCalledWith(viewName, 'create-hint.submit'); + expect(logViewEvent).toBeCalledWith( + `flow.${viewName}`, + 'create-hint.submit' + ); expect(accountWithError.updateRecoveryKeyHint).toBeCalledWith(hintValue); // logs the error expect(logViewEvent).toBeCalledWith( - viewName, + `flow.${viewName}`, 'create-hint.fail', gqlUnexpectedError ); @@ -166,7 +178,10 @@ describe('FlowRecoveryKeyHint', () => { fireEvent.click(submitButton); await waitFor(() => { expect(accountWithSuccess.updateRecoveryKeyHint).not.toBeCalled(); - expect(logViewEvent).toHaveBeenCalledWith(viewName, 'create-hint.skip'); + expect(logViewEvent).toHaveBeenCalledWith( + `flow.${viewName}`, + 'create-hint.skip' + ); expect(navigateForward).toHaveBeenCalledTimes(1); }); }); @@ -175,6 +190,9 @@ describe('FlowRecoveryKeyHint', () => { renderWithContext(accountWithSuccess); fireEvent.click(screen.getByTitle('Back to settings')); expect(navigateBackward).toBeCalledTimes(1); - expect(logViewEvent).toHaveBeenCalledWith(viewName, 'create-hint.skip'); + expect(logViewEvent).toHaveBeenCalledWith( + `flow.${viewName}`, + 'create-hint.skip' + ); }); }); diff --git a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyHint/index.tsx b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyHint/index.tsx index 91f4680ac74..4dbf60b17f5 100644 --- a/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyHint/index.tsx +++ b/packages/fxa-settings/src/components/Settings/FlowRecoveryKeyHint/index.tsx @@ -54,7 +54,7 @@ export const FlowRecoveryKeyHint = ({ }); useEffect(() => { - logViewEvent(viewName, 'hint-step-view'); + logViewEvent(`flow.${viewName}`, 'create-hint.view'); }, [viewName]); const checkForHintError = (hint: string) => { @@ -89,7 +89,7 @@ export const FlowRecoveryKeyHint = ({ const trimmedHint = hint.trim(); if (trimmedHint.length === 0) { - logViewEvent(viewName, 'create-hint.skip'); + logViewEvent(`flow.${viewName}`, 'create-hint.skip'); navigateForwardAndAlertSuccess(); } else { const hintErrorText = checkForHintError(trimmedHint); @@ -98,9 +98,9 @@ export const FlowRecoveryKeyHint = ({ return; } else { try { - logViewEvent(viewName, 'create-hint.submit'); + logViewEvent(`flow.${viewName}`, 'create-hint.submit'); await account.updateRecoveryKeyHint(trimmedHint); - logViewEvent(viewName, 'create-hint.success'); + logViewEvent(`flow.${viewName}`, 'create-hint.success'); navigateForwardAndAlertSuccess(); } catch (e) { let localizedError: string; @@ -118,7 +118,7 @@ export const FlowRecoveryKeyHint = ({ ); } setBannerText(localizedError); - logViewEvent(viewName, 'create-hint.fail', e); + logViewEvent(`flow.${viewName}`, 'create-hint.fail', e); } finally { setIsLoading(false); } @@ -153,7 +153,7 @@ export const FlowRecoveryKeyHint = ({ title={localizedPageTitle} localizedBackButtonTitle={localizedBackButtonTitle} onBackButtonClick={() => { - logViewEvent(viewName, 'create-hint.skip'); + logViewEvent(`flow.${viewName}`, 'create-hint.skip'); navigateBackward(); }} > diff --git a/packages/fxa-settings/src/components/Settings/PageRecoveryKeyCreate/index.test.tsx b/packages/fxa-settings/src/components/Settings/PageRecoveryKeyCreate/index.test.tsx index 2939dcb21c7..d2b871309b1 100644 --- a/packages/fxa-settings/src/components/Settings/PageRecoveryKeyCreate/index.test.tsx +++ b/packages/fxa-settings/src/components/Settings/PageRecoveryKeyCreate/index.test.tsx @@ -12,9 +12,6 @@ import { renderWithRouter, } from '../../../models/mocks'; import { Account, AppContext } from '../../../models'; -import { TextEncoder } from 'util'; - -Object.assign(global, { TextEncoder }); jest.mock('../../../lib/metrics', () => ({ usePageViewEvent: jest.fn(), @@ -27,6 +24,16 @@ jest.mock('@reach/router', () => ({ useNavigate: () => mockNavigate, })); +jest.mock('@react-pdf/renderer', () => ({ + PDFDownloadLink: jest.fn(), + Font: { + register: jest.fn(), + }, + StyleSheet: { + create: jest.fn(), + }, +})); + jest.mock('base32-encode', () => jest.fn().mockReturnValue('00000000000000000000000000000000') ); diff --git a/packages/fxa-settings/src/pages/Clear/index.stories.tsx b/packages/fxa-settings/src/pages/Clear/index.stories.tsx index 33edb2cd0bf..4d604df3a68 100644 --- a/packages/fxa-settings/src/pages/Clear/index.stories.tsx +++ b/packages/fxa-settings/src/pages/Clear/index.stories.tsx @@ -7,7 +7,6 @@ import Clear from '.'; import { Meta } from '@storybook/react'; import { withLocalization } from 'fxa-react/lib/storybooks'; -// This page is only used for testing and does not need the localization decorator export default { title: 'Pages/Clear', component: Clear, diff --git a/packages/fxa-settings/src/pages/ResetPassword/AccountRecoveryConfirmKey/index.tsx b/packages/fxa-settings/src/pages/ResetPassword/AccountRecoveryConfirmKey/index.tsx index 7c0bd7aaaeb..605bc522481 100644 --- a/packages/fxa-settings/src/pages/ResetPassword/AccountRecoveryConfirmKey/index.tsx +++ b/packages/fxa-settings/src/pages/ResetPassword/AccountRecoveryConfirmKey/index.tsx @@ -264,7 +264,7 @@ const AccountRecoveryConfirmKey = ({ autoFocus // Crockford base32 encoding is case insensitive, so visually display as // uppercase here but don't bother transforming the submit data to match - inputOnlyClassName="uppercase" + inputOnlyClassName="font-mono uppercase" className="text-start" anchorPosition="start" autoComplete="off" diff --git a/packages/fxa-settings/src/setupTests.tsx b/packages/fxa-settings/src/setupTests.tsx index 4d73df04076..931d6973ae7 100644 --- a/packages/fxa-settings/src/setupTests.tsx +++ b/packages/fxa-settings/src/setupTests.tsx @@ -6,6 +6,13 @@ import { ReactLocalization } from '@fluent/react'; import '@testing-library/jest-dom/extend-expect'; import { getFtlBundleSync } from 'fxa-react/lib/test-utils'; import { FtlMsgProps } from 'fxa-react/lib/utils'; +import { TextEncoder, TextDecoder } from 'util'; + +// react-pdf required TextEncoder for EncodeStream +// See https://github.com/diegomura/react-pdf/issues/2054#issue-1407270392 +global.TextEncoder = TextEncoder; +// @ts-ignore +global.TextDecoder = TextDecoder; jest.mock('fxa-react/lib/utils', () => { const originalModule = jest.requireActual('fxa-react/lib/utils'); diff --git a/yarn.lock b/yarn.lock index a73d74cbce8..04cf471cbc2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5246,21 +5246,21 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.20.7": - version: 7.21.5 - resolution: "@babel/runtime@npm:7.21.5" +"@babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/runtime@npm:7.22.6" dependencies: regenerator-runtime: ^0.13.11 - checksum: 358f2779d3187f5c67ad302e8f8d435412925d0b991d133c7d4a7b1ddd5a3fda1b6f34537cb64628dfd96a27ae46df105bed3895b8d754b88cacdded8d1129dd + checksum: e585338287c4514a713babf4fdb8fc2a67adcebab3e7723a739fc62c79cfda875b314c90fd25f827afb150d781af97bc16c85bfdbfa2889f06053879a1ddb597 languageName: node linkType: hard -"@babel/runtime@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/runtime@npm:7.22.6" +"@babel/runtime@npm:^7.20.7": + version: 7.21.5 + resolution: "@babel/runtime@npm:7.21.5" dependencies: regenerator-runtime: ^0.13.11 - checksum: e585338287c4514a713babf4fdb8fc2a67adcebab3e7723a739fc62c79cfda875b314c90fd25f827afb150d781af97bc16c85bfdbfa2889f06053879a1ddb597 + checksum: 358f2779d3187f5c67ad302e8f8d435412925d0b991d133c7d4a7b1ddd5a3fda1b6f34537cb64628dfd96a27ae46df105bed3895b8d754b88cacdded8d1129dd languageName: node linkType: hard @@ -11595,6 +11595,172 @@ __metadata: languageName: node linkType: hard +"@react-pdf/fns@npm:2.0.1": + version: 2.0.1 + resolution: "@react-pdf/fns@npm:2.0.1" + dependencies: + "@babel/runtime": ^7.20.13 + checksum: cc56f632862820c7512530c423a5506addcb6aefc46e61d952dd735c0b887fa209dddcc1ec49f89fecc30b6852f44bd2025687898d86d76d8019b35b74d0094b + languageName: node + linkType: hard + +"@react-pdf/font@npm:^2.3.6": + version: 2.3.6 + resolution: "@react-pdf/font@npm:2.3.6" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/types": ^2.3.3 + cross-fetch: ^3.1.5 + fontkit: ^2.0.2 + is-url: ^1.2.4 + checksum: 572e34d416ad645e609afcb582c6b8baabe4017019bbfa696b90dddfcb3931069a9dc71124f1bf9b75652063f8c434880c383b212edc659a66dd2be3879f4213 + languageName: node + linkType: hard + +"@react-pdf/image@npm:^2.2.1": + version: 2.2.1 + resolution: "@react-pdf/image@npm:2.2.1" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/png-js": ^2.2.0 + cross-fetch: ^3.1.5 + checksum: d2b3c9e5b6a23c377724072c875eaeea6389fa513ae0e88ed442d7efb0eaa373b0f195e7c6b9404297ede802d063cf20109800f4d7b951087f66bb64f7c04f1a + languageName: node + linkType: hard + +"@react-pdf/layout@npm:^3.6.2": + version: 3.6.2 + resolution: "@react-pdf/layout@npm:3.6.2" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/fns": 2.0.1 + "@react-pdf/image": ^2.2.1 + "@react-pdf/pdfkit": ^3.0.2 + "@react-pdf/primitives": ^3.0.0 + "@react-pdf/stylesheet": ^4.1.7 + "@react-pdf/textkit": ^4.2.0 + "@react-pdf/types": ^2.3.3 + "@react-pdf/yoga": ^4.1.2 + cross-fetch: ^3.1.5 + emoji-regex: ^10.2.1 + queue: ^6.0.1 + checksum: 15816b14aa7ba8720ea5da88f3cf269070c189a2600959c61c92314aebf04e72c691df6947a1bda04d61a561ee68b046e1c8110960da121ffb63badb3d893d08 + languageName: node + linkType: hard + +"@react-pdf/pdfkit@npm:^3.0.2": + version: 3.0.2 + resolution: "@react-pdf/pdfkit@npm:3.0.2" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/png-js": ^2.2.0 + browserify-zlib: ^0.2.0 + crypto-js: ^4.0.0 + fontkit: ^2.0.2 + vite-compatible-readable-stream: ^3.6.1 + checksum: 8ab264e699751c1eb5245eb712c62c681c916e081fdf21a60bfda993f4f39336b238c799baba20d9b9b642a0819f46edd8e93de8dad5f1ce177b6ea57fee83a4 + languageName: node + linkType: hard + +"@react-pdf/png-js@npm:^2.2.0": + version: 2.2.0 + resolution: "@react-pdf/png-js@npm:2.2.0" + dependencies: + browserify-zlib: ^0.2.0 + checksum: 0f1571f43dcffa93c219ede411210c83f20c81a01f0a0cb39e713c9f066fa4b7b9781602240676e937e89c0218f2940f9acb98f06165e30dc7012897d1ff8d07 + languageName: node + linkType: hard + +"@react-pdf/primitives@npm:^3.0.0": + version: 3.0.1 + resolution: "@react-pdf/primitives@npm:3.0.1" + checksum: c4bea5c6c61a2bbfdc462385def8ec9a36b60320b2008643f694de4e587dd05058ff78c98aa8a5d66bd472bbe09c93a477b15fefd64db58f6e64c122adabbdf1 + languageName: node + linkType: hard + +"@react-pdf/render@npm:^3.2.6": + version: 3.2.6 + resolution: "@react-pdf/render@npm:3.2.6" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/fns": 2.0.1 + "@react-pdf/primitives": ^3.0.0 + "@react-pdf/textkit": ^4.2.0 + "@react-pdf/types": ^2.3.3 + abs-svg-path: ^0.1.1 + color-string: ^1.5.3 + normalize-svg-path: ^1.1.0 + parse-svg-path: ^0.1.2 + svg-arc-to-cubic-bezier: ^3.2.0 + checksum: 9d0bde1e5042db8a251e474092415bd49ed4b01d7d1d404e50e6f7480d282cf59f51ed9fe08deed633aefcdcee424dd955bf4e659471905326e2911e672db925 + languageName: node + linkType: hard + +"@react-pdf/renderer@npm:^3.1.12": + version: 3.1.12 + resolution: "@react-pdf/renderer@npm:3.1.12" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/font": ^2.3.6 + "@react-pdf/layout": ^3.6.2 + "@react-pdf/pdfkit": ^3.0.2 + "@react-pdf/primitives": ^3.0.0 + "@react-pdf/render": ^3.2.6 + "@react-pdf/types": ^2.3.3 + events: ^3.3.0 + object-assign: ^4.1.1 + prop-types: ^15.6.2 + queue: ^6.0.1 + scheduler: ^0.17.0 + peerDependencies: + react: ^16.8.6 || ^17.0.0 || ^18.0.0 + checksum: 7fa9779c8594e8e650fc121de5b89a40268ccab62b89a87c32f110bb4ea97adacd1d0fb2893533e3834613478bed71de2c1161e88e42916862b1523d7f10367e + languageName: node + linkType: hard + +"@react-pdf/stylesheet@npm:^4.1.7": + version: 4.1.7 + resolution: "@react-pdf/stylesheet@npm:4.1.7" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/fns": 2.0.1 + "@react-pdf/types": ^2.3.3 + color-string: ^1.5.3 + hsl-to-hex: ^1.0.0 + media-engine: ^1.0.3 + postcss-value-parser: ^4.1.0 + checksum: f120ebe017fe48db6559105f080619b0f1f37931a87da9d1f3ac64ab75792c320ba08c4ee85e907040546b99e37d62e1571bc2de5e5cbbcf8891a6521b46bd3a + languageName: node + linkType: hard + +"@react-pdf/textkit@npm:^4.2.0": + version: 4.2.0 + resolution: "@react-pdf/textkit@npm:4.2.0" + dependencies: + "@babel/runtime": ^7.20.13 + "@react-pdf/fns": 2.0.1 + hyphen: ^1.6.4 + unicode-properties: ^1.4.1 + checksum: d7fb9b0bbd9ae3da224ab35d5b2bc12e0278c6a3cb8f274d6a573577389bdd18d0f97a7f2ed6af32f28bebb407f05846bbb687e466db2184fb1b267e0fc17e2f + languageName: node + linkType: hard + +"@react-pdf/types@npm:^2.3.3": + version: 2.3.3 + resolution: "@react-pdf/types@npm:2.3.3" + checksum: f4d9e5ba0b8481cb485d17922079f320de469500495f9bbd06161fca7e9deb127ea860c38c34f01d1339c519e032c0d9f63ea681c13eeedee2c8ef5cc0b79d19 + languageName: node + linkType: hard + +"@react-pdf/yoga@npm:^4.1.2": + version: 4.1.2 + resolution: "@react-pdf/yoga@npm:4.1.2" + dependencies: + "@babel/runtime": ^7.20.13 + checksum: e226c8181fc7709c5bfa33fc2c4b4eae08f4a032fdad8b71e43b4f0e6b185152b47f51734a137cd6fe892a1e920d4a0dcec76344abca001c45ff633d0a33a1b0 + languageName: node + linkType: hard + "@remix-run/router@npm:1.7.2": version: 1.7.2 resolution: "@remix-run/router@npm:1.7.2" @@ -14697,6 +14863,15 @@ __metadata: languageName: node linkType: hard +"@swc/helpers@npm:^0.4.2": + version: 0.4.14 + resolution: "@swc/helpers@npm:0.4.14" + dependencies: + tslib: ^2.4.0 + checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 + languageName: node + linkType: hard + "@szmarczak/http-timer@npm:^4.0.5": version: 4.0.5 resolution: "@szmarczak/http-timer@npm:4.0.5" @@ -15540,6 +15715,13 @@ __metadata: languageName: node linkType: hard +"@types/file-saver@npm:^2.0.5": + version: 2.0.5 + resolution: "@types/file-saver@npm:2.0.5" + checksum: a31d6ee2abf99598647139f8f35b37b6e1bacf6c7ddf05c66651b9b0e6e53381aa0e8ed13f37faa6e496e0eb1da87c97e6c70fd589d5b83b0c95c57cb64ce92a + languageName: node + linkType: hard + "@types/find-cache-dir@npm:^3.2.1": version: 3.2.1 resolution: "@types/find-cache-dir@npm:3.2.1" @@ -18307,6 +18489,13 @@ __metadata: languageName: node linkType: hard +"abs-svg-path@npm:^0.1.1": + version: 0.1.1 + resolution: "abs-svg-path@npm:0.1.1" + checksum: af1a167c09e8bdb76c80adca7333f3d828e5b50e37b9702aa03675e271919e7b1eeaa35cce939970ecba14769953b7465ea34c2129ab683ddff9d973a07f164f + languageName: node + linkType: hard + "accept-language-parser@npm:^1.5.0": version: 1.5.0 resolution: "accept-language-parser@npm:1.5.0" @@ -21276,7 +21465,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.5.1": +"base64-js@npm:^1.1.2, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 @@ -21726,6 +21915,15 @@ __metadata: languageName: node linkType: hard +"brotli@npm:^1.3.2": + version: 1.3.3 + resolution: "brotli@npm:1.3.3" + dependencies: + base64-js: ^1.1.2 + checksum: 2c97329f4ccb8e4332cedd2f63b85c2e15ffb305b1cbf046df86201434caf93cb7992ca73c0f7053b6a1417f595069ec7783c26e01510cefc10035a0f466e594 + languageName: node + linkType: hard + "browser-assert@npm:^1.2.1": version: 1.2.1 resolution: "browser-assert@npm:1.2.1" @@ -23460,6 +23658,13 @@ __metadata: languageName: node linkType: hard +"clone@npm:^2.1.2": + version: 2.1.2 + resolution: "clone@npm:2.1.2" + checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d + languageName: node + linkType: hard + "clsx@npm:^1.0.4": version: 1.1.1 resolution: "clsx@npm:1.1.1" @@ -23553,6 +23758,16 @@ __metadata: languageName: node linkType: hard +"color-string@npm:^1.5.3": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + languageName: node + linkType: hard + "color-string@npm:^1.6.0": version: 1.6.0 resolution: "color-string@npm:1.6.0" @@ -24428,6 +24643,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + "cross-spawn-async@npm:2.2.5": version: 2.2.5 resolution: "cross-spawn-async@npm:2.2.5" @@ -24488,7 +24712,7 @@ __metadata: languageName: node linkType: hard -"crypto-js@npm:^4.1.1": +"crypto-js@npm:^4.0.0, crypto-js@npm:^4.1.1": version: 4.1.1 resolution: "crypto-js@npm:4.1.1" checksum: b3747c12ee3a7632fab3b3e171ea50f78b182545f0714f6d3e7e2858385f0f4101a15f2517e033802ce9d12ba50a391575ff4638c9de3dd9b2c4bc47768d5425 @@ -25786,6 +26010,13 @@ __metadata: languageName: node linkType: hard +"dfa@npm:^1.2.0": + version: 1.2.0 + resolution: "dfa@npm:1.2.0" + checksum: 83b954b856a4a0c4282550a35532ac66dfc6362a08500a4b09c0d7a306c6813cbf50cc18d81bf8997d98559fc2675df89f6ece255d92517cc46f6bf8ef5ff727 + languageName: node + linkType: hard + "diacritics@npm:1.3.0": version: 1.3.0 resolution: "diacritics@npm:1.3.0" @@ -26442,6 +26673,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^10.2.1": + version: 10.2.1 + resolution: "emoji-regex@npm:10.2.1" + checksum: 1aa2d16881c56531fdfc03d0b36f5c2b6221cc4097499a5665b88b711dc3fb4d5b8804f0ca6f00c56e5dcf89bac75f0487eee85da1da77df3a33accc6ecbe426 + languageName: node + linkType: hard + "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -28920,6 +29158,13 @@ __metadata: languageName: node linkType: hard +"file-saver@npm:^2.0.5": + version: 2.0.5 + resolution: "file-saver@npm:2.0.5" + checksum: c62d96e5cebc58b4bdf3ae8a60d5cf9607ad82f75f798c33a4ee63435ac2203002584d5256a2a780eda7feb5e19dc3b6351c2212e58b3f529e63d265a7cc79f7 + languageName: node + linkType: hard + "file-sync-cmp@npm:^0.1.0": version: 0.1.1 resolution: "file-sync-cmp@npm:0.1.1" @@ -29336,6 +29581,23 @@ __metadata: languageName: node linkType: hard +"fontkit@npm:^2.0.2": + version: 2.0.2 + resolution: "fontkit@npm:2.0.2" + dependencies: + "@swc/helpers": ^0.4.2 + brotli: ^1.3.2 + clone: ^2.1.2 + dfa: ^1.2.0 + fast-deep-equal: ^3.1.3 + restructure: ^3.0.0 + tiny-inflate: ^1.0.3 + unicode-properties: ^1.4.0 + unicode-trie: ^2.0.0 + checksum: ef5841a46cb46af56496646136a4e61f014360caacb8d69e3a4abfda9d89d66d2a68b0855494c070c4e0675fb57724c9db37154913413609ebb065d35b23838e + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -29898,6 +30160,7 @@ fsevents@~2.1.1: fxa-payments-server: "workspace:*" fxa-settings: "workspace:*" jsqr: ^1.4.0 + pdf-parse: ^1.1.1 upng-js: ^2.1.0 languageName: unknown linkType: soft @@ -30891,6 +31154,7 @@ fsevents@~2.1.1: "@emotion/styled": ^11.10.4 "@material-ui/core": v5.0.0-alpha.24 "@reach/router": ^1.3.4 + "@react-pdf/renderer": ^3.1.12 "@rescripts/cli": 0.0.16 "@sentry/browser": ^6.19.7 "@sentry/integrations": ^6.19.1 @@ -30911,6 +31175,7 @@ fsevents@~2.1.1: "@testing-library/user-event": ^14.4.3 "@types/babel__core": 7.1.14 "@types/classnames": ^2.3.1 + "@types/file-saver": ^2.0.5 "@types/jest": ^26.0.23 "@types/lodash.groupby": ^4 "@types/material-ui": ^0.21.8 @@ -30932,6 +31197,7 @@ fsevents@~2.1.1: eslint-config-react-app: ^6.0.0 eslint-plugin-jest: ^27.2.1 eslint-plugin-react: ^7.32.2 + file-saver: ^2.0.5 fxa-auth-client: "workspace:*" fxa-common-password-list: ^0.0.4 fxa-crypto-relier: ^2.7.0 @@ -33313,6 +33579,22 @@ fsevents@~2.1.1: languageName: node linkType: hard +"hsl-to-hex@npm:^1.0.0": + version: 1.0.0 + resolution: "hsl-to-hex@npm:1.0.0" + dependencies: + hsl-to-rgb-for-reals: ^1.1.0 + checksum: e748cea0d9cdf444727bd3fc3f62515d0c5806ad4b52850730d365e54f6f0ae1e41e2076ab17de8523ab5ebdd30c62323f26b2cdd383529755ad27d1a33965b8 + languageName: node + linkType: hard + +"hsl-to-rgb-for-reals@npm:^1.1.0": + version: 1.1.1 + resolution: "hsl-to-rgb-for-reals@npm:1.1.1" + checksum: b31452617e6c399509c5b8016999d659f9e347e71290da287bf0f536da031609d51b240535dc8eb3dbd7770a7b367d9896ab6a13794db7d16e4cf86e363e156f + languageName: node + linkType: hard + "html-encoding-sniffer@npm:^2.0.1": version: 2.0.1 resolution: "html-encoding-sniffer@npm:2.0.1" @@ -33824,6 +34106,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"hyphen@npm:^1.6.4": + version: 1.6.6 + resolution: "hyphen@npm:1.6.6" + checksum: fe4f9f16da286b29c15b1ab3533e90538274569a0d42ad806977bb2d372ed81b5d946aaf7124c76df14f8b145da39d5abb00ee2bb625849d001cd7c873a9dfac + languageName: node + linkType: hard + "hyphenate-style-name@npm:^1.0.3": version: 1.0.4 resolution: "hyphenate-style-name@npm:1.0.4" @@ -35389,6 +35678,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"is-url@npm:^1.2.4": + version: 1.2.4 + resolution: "is-url@npm:1.2.4" + checksum: 100e74b3b1feab87a43ef7653736e88d997eb7bd32e71fd3ebc413e58c1cbe56269699c776aaea84244b0567f2a7d68dfaa512a062293ed2f9fdecb394148432 + languageName: node + linkType: hard + "is-utf8@npm:^0.2.0": version: 0.2.1 resolution: "is-utf8@npm:0.2.1" @@ -39732,6 +40028,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"media-engine@npm:^1.0.3": + version: 1.0.3 + resolution: "media-engine@npm:1.0.3" + checksum: 3c2834077e7223d95cc137e4d13f777750887748a04b3aa29d1abfb05b35ad483ea074b7798827aedc29a6a6f6da299c5822d1ce99414d6c9c81b4299dbbd85a + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -41869,6 +42172,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"node-ensure@npm:^0.0.0": + version: 0.0.0 + resolution: "node-ensure@npm:0.0.0" + checksum: 1124623beb1dec66889794286ec1761ac3bfac42ce93b8652903efa5af14227edce5bafa06c4e0675cdc850360931d7c9413e3b5406150f05b2c9bf5bb3ccce4 + languageName: node + linkType: hard + "node-environment-flags@npm:1.0.6": version: 1.0.6 resolution: "node-environment-flags@npm:1.0.6" @@ -41886,7 +42196,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"node-fetch@npm:^2.0.0": +"node-fetch@npm:^2.0.0, node-fetch@npm:^2.6.12": version: 2.6.12 resolution: "node-fetch@npm:2.6.12" dependencies: @@ -42313,6 +42623,15 @@ fsevents@~2.1.1: languageName: node linkType: hard +"normalize-svg-path@npm:^1.1.0": + version: 1.1.0 + resolution: "normalize-svg-path@npm:1.1.0" + dependencies: + svg-arc-to-cubic-bezier: ^3.0.0 + checksum: 106e108b2f99e9e222a1c6edfc859523c6c3c2b0a6ba64743ed08af120b23b9bc2c16682bc2ae043a24c011c34c8252376c68525cf11735c6f110b571740eb2e + languageName: node + linkType: hard + "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -43617,6 +43936,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"parse-svg-path@npm:^0.1.2": + version: 0.1.2 + resolution: "parse-svg-path@npm:0.1.2" + checksum: bba7d4b4207fcc9eaf553b0d34db96ea8a1173635bc94528b5b66e1581902d4792d8d6229103764f01af4d839274234e97a4fa1c6f0fe7dcce195383848cec56 + languageName: node + linkType: hard + "parse5-htmlparser2-tree-adapter@npm:^6.0.1": version: 6.0.1 resolution: "parse5-htmlparser2-tree-adapter@npm:6.0.1" @@ -43953,6 +44279,16 @@ fsevents@~2.1.1: languageName: node linkType: hard +"pdf-parse@npm:^1.1.1": + version: 1.1.1 + resolution: "pdf-parse@npm:1.1.1" + dependencies: + debug: ^3.1.0 + node-ensure: ^0.0.0 + checksum: 5d63a8be1b3b8915618b1b76350409513fdd7fe03c77056b2dd7a1c2da28a11e297645e33bb4e953e2c1cd0ae66980f30fd0bed2979877f894347962d9647241 + languageName: node + linkType: hard + "peek-stream@npm:^1.1.0": version: 1.1.3 resolution: "peek-stream@npm:1.1.3" @@ -46458,6 +46794,15 @@ fsevents@~2.1.1: languageName: node linkType: hard +"queue@npm:^6.0.1": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: ~2.0.3 + checksum: ebc23639248e4fe40a789f713c20548e513e053b3dc4924b6cb0ad741e3f264dcff948225c8737834dd4f9ec286dbc06a1a7c13858ea382d9379f4303bcc0916 + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -48525,6 +48870,13 @@ resolve@1.1.7: languageName: node linkType: hard +"restructure@npm:^3.0.0": + version: 3.0.0 + resolution: "restructure@npm:3.0.0" + checksum: 4525b5414ec0f2dc4ad66b5fbcebbc2f49e7ad778c30ce45b8b8f776af67e2c0752eb309748d7a597add6fc064e688df2662c834ffeaaea580af6d43087dc7d3 + languageName: node + linkType: hard + "ret@npm:~0.1.10": version: 0.1.15 resolution: "ret@npm:0.1.15" @@ -49045,6 +49397,16 @@ resolve@1.1.7: languageName: node linkType: hard +"scheduler@npm:^0.17.0": + version: 0.17.0 + resolution: "scheduler@npm:0.17.0" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: 18d1e66cad3d26e3becd99b006d0744cda3556dbb356fc5b30df6d5499c85a308d18ee55353e01595f7c047b526564603ea80ef3d927a325faedc53ede03680c + languageName: node + linkType: hard + "scheduler@npm:^0.20.2": version: 0.20.2 resolution: "scheduler@npm:0.20.2" @@ -51572,6 +51934,13 @@ resolve@1.1.7: languageName: node linkType: hard +"svg-arc-to-cubic-bezier@npm:^3.0.0, svg-arc-to-cubic-bezier@npm:^3.2.0": + version: 3.2.0 + resolution: "svg-arc-to-cubic-bezier@npm:3.2.0" + checksum: 55bf17756d558b9c0daddf636a6c9f2fe01fd5ac412229dfa2d4b29740226a82c980bcd3b5eb09ce311cbea282106c7549d97f8c8dba3a5a7b75f786bcb5e155 + languageName: node + linkType: hard + "svg-parser@npm:^2.0.4": version: 2.0.4 resolution: "svg-parser@npm:2.0.4" @@ -52559,6 +52928,13 @@ resolve@1.1.7: languageName: node linkType: hard +"tiny-inflate@npm:^1.0.0, tiny-inflate@npm:^1.0.3": + version: 1.0.3 + resolution: "tiny-inflate@npm:1.0.3" + checksum: 4086a1f8938dafa4a20c63b099aeb47bf8fef5aca991bf4ea4b35dd2684fa52363b2c19b3e76660311e7613cb7c4f063bc48751b9bdf9555e498d997c30bc2d6 + languageName: node + linkType: hard + "tiny-invariant@npm:^1.3.1": version: 1.3.1 resolution: "tiny-invariant@npm:1.3.1" @@ -53709,6 +54085,16 @@ resolve@1.1.7: languageName: node linkType: hard +"unicode-properties@npm:^1.4.0, unicode-properties@npm:^1.4.1": + version: 1.4.1 + resolution: "unicode-properties@npm:1.4.1" + dependencies: + base64-js: ^1.3.0 + unicode-trie: ^2.0.0 + checksum: 337fba8a3c4707692d662fafbea60718ca9d8dfd2147cb2642bc4a1b5ad11136d848fa9c92818a35f59e6c866674ec7fd140e3e25412aea8fb8817f1b32fc3fe + languageName: node + linkType: hard + "unicode-property-aliases-ecmascript@npm:^1.0.4": version: 1.1.0 resolution: "unicode-property-aliases-ecmascript@npm:1.1.0" @@ -53723,6 +54109,16 @@ resolve@1.1.7: languageName: node linkType: hard +"unicode-trie@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-trie@npm:2.0.0" + dependencies: + pako: ^0.2.5 + tiny-inflate: ^1.0.0 + checksum: 19e637ce20953ec1fbfa9087abef4746a50352679b833be27924e4ba7ad753cc4073b74263747ccfccb5e38b30b17468cbb96f361eb49903ff8602396280b5a4 + languageName: node + linkType: hard + "unified@npm:^10.0.0": version: 10.1.2 resolution: "unified@npm:10.1.2" @@ -54485,6 +54881,17 @@ resolve@1.1.7: languageName: node linkType: hard +"vite-compatible-readable-stream@npm:^3.6.1": + version: 3.6.1 + resolution: "vite-compatible-readable-stream@npm:3.6.1" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: 7fd50738616a7bd012fb936b7036877940a0a83078fbe2584726fa9d1a5d15c934a5883e12e16213d6be54996b4ad7b6368d2897f9867a6c1110d03eacd91302 + languageName: node + linkType: hard + "vizion@npm:~2.2.1": version: 2.2.1 resolution: "vizion@npm:2.2.1"