From 1e7d4e23b5fe30c937392d2c6a04afa11955a6b1 Mon Sep 17 00:00:00 2001 From: elizabeth-ilina Date: Thu, 26 Feb 2026 13:20:24 -0500 Subject: [PATCH] chore(fxa): Remove the "Firefox Fortress" service Because: * We don't have a need for Fortress anymore. This commit: * Removes the Firefox Fortress service Closes #PAY-267 --- .dockerignore | 1 - _scripts/ports.txt | 1 - .../firefox-fortress-email-icon.png | Bin 98 -> 0 bytes .../firefox-fortress-web-icon.svg | 1 - ...045-testing-updates-and-recommendations.md | 1 - .../src/layouts/subscription/index.stories.ts | 4 +- .../downloadSubscription/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionCancellation/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionFirstInvoice/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionReactivation/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionReplaced/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 4 +- .../index.stories.ts | 4 +- packages/fortress/.eslintrc.json | 9 - packages/fortress/.nsprc | 8 - packages/fortress/.prettierignore | 8 - packages/fortress/README.md | 21 -- packages/fortress/config-local.json | 5 - packages/fortress/config.js | 12 - packages/fortress/config.json | 5 - packages/fortress/data/index.js | 74 ------ packages/fortress/package.json | 53 ---- packages/fortress/pm2.config.js | 28 -- packages/fortress/server.js | 41 --- .../fonts/Metropolis/Metropolis-Bold.woff2 | Bin 16728 -> 0 bytes .../fonts/Metropolis/Metropolis-Medium.woff2 | Bin 16496 -> 0 bytes .../Metropolis/Metropolis-SemiBold.woff2 | Bin 16576 -> 0 bytes packages/fortress/static/img/favicon.png | Bin 1184 -> 0 bytes packages/fortress/static/img/icon.svg | 1 - packages/fortress/static/main.css | 241 ------------------ packages/fortress/views/choice.ejs | 36 --- packages/fortress/views/default.ejs | 9 - packages/fortress/views/download.ejs | 21 -- packages/fortress/views/footer.ejs | 3 - packages/fortress/views/header.ejs | 19 -- packages/fortress/views/index.ejs | 19 -- packages/fxa-auth-server/config/dev.json | 14 - .../layouts/subscription/index.stories.ts | 4 +- .../downloadSubscription/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionCancellation/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionFirstInvoice/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionReactivation/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../subscriptionReplaced/index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../index.stories.ts | 2 +- .../scripts/write-emails-to-disk.js | 6 +- .../stripe/paymentIntent_succeeded.json | 4 +- .../test/local/senders/emails.ts | 8 +- .../app/tests/spec/lib/glean.js | 4 +- .../server/config/index.js | 2 - yarn.lock | 44 ---- 67 files changed, 47 insertions(+), 724 deletions(-) delete mode 100644 assets/product-icons/firefox-fortress-email-icon.png delete mode 100644 assets/product-icons/firefox-fortress-web-icon.svg delete mode 100644 packages/fortress/.eslintrc.json delete mode 100644 packages/fortress/.nsprc delete mode 100644 packages/fortress/.prettierignore delete mode 100755 packages/fortress/README.md delete mode 100755 packages/fortress/config-local.json delete mode 100755 packages/fortress/config.js delete mode 100755 packages/fortress/config.json delete mode 100644 packages/fortress/data/index.js delete mode 100644 packages/fortress/package.json delete mode 100644 packages/fortress/pm2.config.js delete mode 100755 packages/fortress/server.js delete mode 100644 packages/fortress/static/fonts/Metropolis/Metropolis-Bold.woff2 delete mode 100644 packages/fortress/static/fonts/Metropolis/Metropolis-Medium.woff2 delete mode 100644 packages/fortress/static/fonts/Metropolis/Metropolis-SemiBold.woff2 delete mode 100644 packages/fortress/static/img/favicon.png delete mode 100644 packages/fortress/static/img/icon.svg delete mode 100644 packages/fortress/static/main.css delete mode 100644 packages/fortress/views/choice.ejs delete mode 100644 packages/fortress/views/default.ejs delete mode 100644 packages/fortress/views/download.ejs delete mode 100644 packages/fortress/views/footer.ejs delete mode 100644 packages/fortress/views/header.ejs delete mode 100644 packages/fortress/views/index.ejs diff --git a/.dockerignore b/.dockerignore index b2d771a6e8b..cc230a949b8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -20,7 +20,6 @@ packages/fxa-dev-launcher packages/fxa-content-server/dist packages/fxa-settings/build/dev packages/123done -packages/fortress packages/functional-tests # Ignore generated credentials from google-github-actions/auth diff --git a/_scripts/ports.txt b/_scripts/ports.txt index 49fc2c83505..3e6f69445cd 100644 --- a/_scripts/ports.txt +++ b/_scripts/ports.txt @@ -8,7 +8,6 @@ 9000 # auth-server key server 3030 # content-server 1111 # profile-server -9292 # Fortress 8080 # 123done 10139 # 321done 3031 # payments server diff --git a/assets/product-icons/firefox-fortress-email-icon.png b/assets/product-icons/firefox-fortress-email-icon.png deleted file mode 100644 index 66829839a6f426201310004dc153964973d9acd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^4Is=2Bp6=1#-sr$O-~ockP60RiDL;OAO5p9@&|M! uhA?<2tx(i5c=Nc-B+s2S;mQZL#S9GJS!DmOYdISO((LK#=d#Wzp$Pz%#~e@q diff --git a/assets/product-icons/firefox-fortress-web-icon.svg b/assets/product-icons/firefox-fortress-web-icon.svg deleted file mode 100644 index 3a51044b509..00000000000 --- a/assets/product-icons/firefox-fortress-web-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/adr/0045-testing-updates-and-recommendations.md b/docs/adr/0045-testing-updates-and-recommendations.md index 93de1957436..a69166c9793 100644 --- a/docs/adr/0045-testing-updates-and-recommendations.md +++ b/docs/adr/0045-testing-updates-and-recommendations.md @@ -163,7 +163,6 @@ A. Unify Testing Frameworks 4 db-migrations 3 fxa-geodb 2 fxa-profile-server - 2 fortress 2 123done 1 browserid-verifier diff --git a/libs/accounts/email-renderer/src/layouts/subscription/index.stories.ts b/libs/accounts/email-renderer/src/layouts/subscription/index.stories.ts index 37e95b63f42..3088a18943a 100644 --- a/libs/accounts/email-renderer/src/layouts/subscription/index.stories.ts +++ b/libs/accounts/email-renderer/src/layouts/subscription/index.stories.ts @@ -35,7 +35,7 @@ export const LayoutMultipleProducts = createStory( { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', @@ -49,7 +49,7 @@ export const LayoutMultipleProductsWithBrandMessaging = createStory( { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', diff --git a/libs/accounts/email-renderer/src/templates/downloadSubscription/index.stories.ts b/libs/accounts/email-renderer/src/templates/downloadSubscription/index.stories.ts index e2b03a7d389..2d412acfead 100644 --- a/libs/accounts/email-renderer/src/templates/downloadSubscription/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/downloadSubscription/index.stories.ts @@ -13,7 +13,7 @@ export default { const data = { icon: 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', link: 'http://getfirefox.com/', - productName: 'Firefox Fortress', + productName: '123Done Pro', subscriptionSupportUrl: 'http://localhost:3030/support', playStoreLink: 'https://play.google.com/store/apps/details?id=org.mozilla.firefox', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionAccountDeletion/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionAccountDeletion/index.stories.ts index 5eea2d6154d..4891e20037c 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionAccountDeletion/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionAccountDeletion/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', isCancellationEmail: true, invoiceTotal: '$20', invoiceDateOnly: '11/13/2021', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionCancellation/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionCancellation/index.stories.ts index 7ac5057c3ef..b70785f5d12 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionCancellation/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionCancellation/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', isCancellationEmail: true, invoiceTotal: '$2,000.00', invoiceDateOnly: '11/13/2021', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionEndingReminder/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionEndingReminder/index.stories.ts index eecd8b880aa..4064e6fbe01 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionEndingReminder/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionEndingReminder/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', serviceLastActiveDateOnly: 'July 15, 2025', accountSettingsUrl: 'http://localhost:3030/settings', subscriptionSupportUrlWithUtm: 'http://localhost:3030/support', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionFailedPaymentsCancellation/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionFailedPaymentsCancellation/index.stories.ts index 4a6774ff1a4..403c26de08e 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionFailedPaymentsCancellation/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionFailedPaymentsCancellation/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', isCancellationEmail: true, cancellationSurveyUrl: 'https://survey.alchemer.com/s3/6534408/Privacy-Security-Product-Cancellation-of-Service-Q4-21', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionFirstInvoice/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionFirstInvoice/index.stories.ts index 4fe43411520..f729fc24772 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionFirstInvoice/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionFirstInvoice/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceAmountDue: '$10.00', invoiceAmountDueInCents: 1000, icon: 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionPaymentExpired/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionPaymentExpired/index.stories.ts index 6a66f22871f..53b80fd03d8 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionPaymentExpired/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionPaymentExpired/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', updateBillingUrl: 'http://localhost:3030/subscriptions', subscriptionSupportUrl: 'http://localhost:3030/support', }; diff --git a/libs/accounts/email-renderer/src/templates/subscriptionPaymentFailed/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionPaymentFailed/index.stories.ts index 94281657fb4..4fcb44aea3d 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionPaymentFailed/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionPaymentFailed/index.stories.ts @@ -12,7 +12,7 @@ export default { const data = { icon: 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', - productName: 'Firefox Fortress', + productName: '123Done Pro', subscriptionSupportUrl: 'http://localhost:3030/support', updateBillingUrl: 'http://localhost:3030/subscriptions', }; diff --git a/libs/accounts/email-renderer/src/templates/subscriptionPaymentProviderCancelled/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionPaymentProviderCancelled/index.stories.ts index 5e3d32a9bbc..f777e28b265 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionPaymentProviderCancelled/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionPaymentProviderCancelled/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', subscriptionSupportUrl: 'http://localhost:3030/support', updateBillingUrl: 'http://localhost:3030/subscriptions', }; diff --git a/libs/accounts/email-renderer/src/templates/subscriptionReactivation/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionReactivation/index.stories.ts index ef6c51397ea..401cc52d30b 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionReactivation/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionReactivation/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceTotal: '$20', nextInvoiceDateOnly: '11/13/2021', icon: 'https://placekitten.com/512/512', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionRenewalReminder/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionRenewalReminder/index.stories.ts index 7a01761eb4a..b8c8f344926 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionRenewalReminder/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionRenewalReminder/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', showTax: true, invoiceTotalExcludingTax: '$18.71', invoiceTax: '$1.29', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionReplaced/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionReplaced/index.stories.ts index 3af632b74af..94f33430d43 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionReplaced/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionReplaced/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', }; const createStory = subplatStoryWithProps( diff --git a/libs/accounts/email-renderer/src/templates/subscriptionSubsequentInvoice/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionSubsequentInvoice/index.stories.ts index 11fd3a367a9..8a0a9cb43aa 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionSubsequentInvoice/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionSubsequentInvoice/index.stories.ts @@ -11,7 +11,7 @@ export default { } as Meta; const data = { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceAmountDue: '$10.00', invoiceDateOnly: '12/14/2021', invoiceNumber: '8675309', diff --git a/libs/accounts/email-renderer/src/templates/subscriptionsPaymentExpired/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionsPaymentExpired/index.stories.ts index bcb806b8d00..91960e5d7cf 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionsPaymentExpired/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionsPaymentExpired/index.stories.ts @@ -13,7 +13,7 @@ export default { const data = { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', @@ -23,7 +23,7 @@ const data = { subscriptionSupportUrl: 'http://localhost:3030/support', // Had to add this in! Double check value. - productName: 'Firefox Fortress', + productName: '123Done Pro', }; const createStory = subplatStoryWithProps( diff --git a/libs/accounts/email-renderer/src/templates/subscriptionsPaymentProviderCancelled/index.stories.ts b/libs/accounts/email-renderer/src/templates/subscriptionsPaymentProviderCancelled/index.stories.ts index a036af9ba52..175879449d2 100644 --- a/libs/accounts/email-renderer/src/templates/subscriptionsPaymentProviderCancelled/index.stories.ts +++ b/libs/accounts/email-renderer/src/templates/subscriptionsPaymentProviderCancelled/index.stories.ts @@ -13,7 +13,7 @@ export default { const data = { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', @@ -23,7 +23,7 @@ const data = { updateBillingUrl: 'http://localhost:3030/subscriptions', // Had to add this in. Double check! - productName: 'Firefox Fortress', + productName: '123Done Pro', }; const createStory = subplatStoryWithProps( diff --git a/packages/fortress/.eslintrc.json b/packages/fortress/.eslintrc.json deleted file mode 100644 index 0e2d8009195..00000000000 --- a/packages/fortress/.eslintrc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": ["plugin:fxa/server"], - "plugins": ["fxa"], - "ignorePatterns": [ - "static", - "node_modules" - ], - "root": true -} diff --git a/packages/fortress/.nsprc b/packages/fortress/.nsprc deleted file mode 100644 index d035a321c8b..00000000000 --- a/packages/fortress/.nsprc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "comment_1179": "1179 is prototype pollution in minimist, used by eslint. Doesn't affect us, as we don't pass untrusted external inputs to eslint.", - "comment_1500": "1500 is prototype pollution in yargs-parser, used by rarely-updated browser-sync. Adding an exception while we wait for the package to be updated. Doesn't affect us, as we don't pass untrusted external inputs to browser-sync.", - "exceptions": [ - "https://npmjs.com/advisories/1179", - "https://npmjs.com/advisories/1500" - ] -} diff --git a/packages/fortress/.prettierignore b/packages/fortress/.prettierignore deleted file mode 100644 index a1c846eba65..00000000000 --- a/packages/fortress/.prettierignore +++ /dev/null @@ -1,8 +0,0 @@ -LICENSE -.* -Dockerfile -*.sh -*.ico -*.txt -ansible/* -static/img/* diff --git a/packages/fortress/README.md b/packages/fortress/README.md deleted file mode 100755 index 09ab57ac263..00000000000 --- a/packages/fortress/README.md +++ /dev/null @@ -1,21 +0,0 @@ -## A demo of a subscription flow - -## Running locally - -1. install [git] and [node] -1. get a local copy of the repository: `git clone https://github.com/mozilla/fxa` -1. `cd fxa/packages/fortress` -1. install dependencies: `yarn install` -1. run the server: `yarn dev` -1. visit it in your browser: `http://localhost:9292/` -1. if you want to develop even faster, open a new terminal window and run `yarn ui` -1. now you can go to `http://localhost:5000` and develop without having to ever restart the server or refresh the browser - -[git]: http://git-scm.org -[node]: http://nodejs.org - -## Testing - -This package does not currently have a test suite. - -Run `npm test` to lint the code. diff --git a/packages/fortress/config-local.json b/packages/fortress/config-local.json deleted file mode 100755 index f5c3c9eba46..00000000000 --- a/packages/fortress/config-local.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "client_id": "dcdb5ae7add825d2", - "client_secret": "b93ef8a8f3e553a430d7e5b904c6132b2722633af9f03128029201d24a97f2a8", - "redirect_uri": "http://localhost:9292/download" -} diff --git a/packages/fortress/config.js b/packages/fortress/config.js deleted file mode 100755 index dd021c2645e..00000000000 --- a/packages/fortress/config.js +++ /dev/null @@ -1,12 +0,0 @@ -var path = require('path'); - -var configTarget = process.env.CONFIG_FORTRESS || './config.json'; -var configFile = path.resolve(__dirname, configTarget); - -var now = '[' + new Date().toISOString() + ']'; -console.log(now, 'loading configuration File', configFile); //eslint-disable-line no-console - -var config = require(configFile); -console.log(now, 'config:', JSON.stringify(config, null, 2)); //eslint-disable-line no-console - -module.exports = config; diff --git a/packages/fortress/config.json b/packages/fortress/config.json deleted file mode 100755 index f5c3c9eba46..00000000000 --- a/packages/fortress/config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "client_id": "dcdb5ae7add825d2", - "client_secret": "b93ef8a8f3e553a430d7e5b904c6132b2722633af9f03128029201d24a97f2a8", - "redirect_uri": "http://localhost:9292/download" -} diff --git a/packages/fortress/data/index.js b/packages/fortress/data/index.js deleted file mode 100644 index 7b357fb1254..00000000000 --- a/packages/fortress/data/index.js +++ /dev/null @@ -1,74 +0,0 @@ -const data = { - global: { - title: 'Firefox Fortress', - tagline: 'Achieve your fortress dreams', - planPicker: 'Select your plan', - congrats: 'You are a hero of time and space', - paymentsUrl: '//localhost:3030/subscriptions/products', - }, - products: [ - { - title: 'Pro', - slug: 'pro', - productId: 'prod_HCMYHnbyGyRNJf', - upgradeTo: 1, - sellingPoints: [ - 'Limited breadsticks', - 'Smug sense of superiority', - 'Impress your friends', - 'No electrolytes', - ], - plans: [ - { - title: 'One Month Plan', - cycle: 'monthly', - price: '$5.99', - monthPrice: '$5.99', - planId: 'plan_HCMZcjgOeiSMch', - }, - { - title: 'One Year Plan', - cycle: 'yearly', - price: '$49.99', - monthPrice: '$4.17', - planId: 'plan_HCMZQPj8pn1s8J', - savings: '30%', - base: '$71.88', - popular: true, - }, - ], - }, - { - title: 'Pro Plus', - slug: 'pro-plus', - productId: 'prod_HCQGV1E3N5llAX', - sellingPoints: [ - 'Unlimited breadsticks', - 'Smugger sense of superiority', - 'Impress your friends + enemies', - 'Has electrolytes', - ], - plans: [ - { - title: 'One Month Plan', - cycle: 'monthly', - price: '$10.99', - monthPrice: '$10.99', - planId: 'plan_HCQGYwmhOtIsyk', - }, - { - title: 'One Year Plan', - cycle: 'yearly', - price: '$99.99', - monthPrice: '$8.33', - savings: '35%', - base: '$131.88', - planId: 'plan_HCQHoVGIoB3Hfj', - popular: true, - }, - ], - }, - ], -}; - -exports.data = data; diff --git a/packages/fortress/package.json b/packages/fortress/package.json deleted file mode 100644 index 9ed5f5076b7..00000000000 --- a/packages/fortress/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "fortress", - "description": "A simple tasklist app that demonstrates FxA Sign-In", - "version": "0.0.0", - "author": { - "name": "Mozilla", - "url": "https://mozilla.org/" - }, - "licenses": [ - { - "type": "MPL 2.0", - "url": "https://mozilla.org/MPL/2.0/" - } - ], - "homepage": "http://fortress.firefox.org/", - "bugs": "https://github.com/mozilla/fxa/issues", - "repository": { - "type": "git", - "url": "https://github.com/mozilla/fxa.git" - }, - "private": true, - "dependencies": { - "client-sessions": "0.8.x", - "ejs": "^3.1.10", - "express": "^4.21.2", - "morgan": "^1.10.0" - }, - "devDependencies": { - "audit-filter": "0.5.0", - "eslint": "^7.32.0", - "fxa-shared": "workspace:*", - "pm2": "^6.0.14", - "prettier": "^3.5.3", - "stylelint": "^16.14.1", - "stylelint-config-prettier": "^9.0.3" - }, - "scripts": { - "lint": "yarn lint-eslint", - "audit": "npm audit --json | audit-filter --nsp-config=.nsprc --audit=-", - "lint-eslint": "eslint .", - "lint-style": "stylelint --config ../../_dev/.stylelintrc static/*.css", - "start": "pm2 start pm2.config.js", - "stop": "pm2 stop pm2.config.js", - "restart": "pm2 restart pm2.config.js", - "delete": "pm2 delete pm2.config.js", - "format": "prettier --write --config ../../_dev/.prettierrc '**'" - }, - "nx": { - "tags": [ - "scope:demo" - ] - } -} diff --git a/packages/fortress/pm2.config.js b/packages/fortress/pm2.config.js deleted file mode 100644 index e70956cb863..00000000000 --- a/packages/fortress/pm2.config.js +++ /dev/null @@ -1,28 +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/. */ - -const PATH = process.env.PATH.split(':') - .filter((p) => !p.includes(process.env.TMPDIR)) - .join(':'); - -module.exports = { - apps: [ - { - name: 'fortress', - script: 'node server.js', - cwd: __dirname, - max_restarts: '1', - env: { - CONFIG_FORTRESS: './config-local.json', - NODE_ENV: 'dev', - PORT: '9292', - PATH, - }, - filter_env: ['npm_'], - min_uptime: '2m', - time: true, - watch: ['*.js', 'views'], - }, - ], -}; diff --git a/packages/fortress/server.js b/packages/fortress/server.js deleted file mode 100755 index 84d8e6f04f2..00000000000 --- a/packages/fortress/server.js +++ /dev/null @@ -1,41 +0,0 @@ -const express = require('express'); -const morgan = require('morgan'); -const path = require('path'); - -const config = require('./config'); -const { data } = require('./data'); - -const logger = morgan('short'); - -const app = express(); - -app.use(logger, express.json()); - -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'ejs'); - -app.get('/', (req, res, next) => { - res.render('index', { data }); -}); - -app.get('/download', (req, res, next) => { - res.render('default', { data }); -}); - -data.products.forEach((product, index) => { - const productData = { global: data.global, ...product }; - app.get(`/${product.slug}`, (req, res, next) => { - res.render('choice', { data: productData }); - }); - - app.get(`/download/${product.slug}`, (req, res, next) => { - res.render('download', { data, index }); - }); -}); - -app.use(express.static(path.join(__dirname, 'static'))); - -const port = process.env['PORT'] || config.port || 9292; -app.listen(port, () => { - console.log(`Firefox Fortress started on ${port}`); //eslint-disable-line no-console -}); diff --git a/packages/fortress/static/fonts/Metropolis/Metropolis-Bold.woff2 b/packages/fortress/static/fonts/Metropolis/Metropolis-Bold.woff2 deleted file mode 100644 index 54bb59f65767d35360b16b0a4dd8903dcfd0e725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16728 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 diff --git a/packages/fortress/static/fonts/Metropolis/Metropolis-Medium.woff2 b/packages/fortress/static/fonts/Metropolis/Metropolis-Medium.woff2 deleted file mode 100644 index d5aabb6e99e2d24ea957b07536078147c99f250b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16496 zcmV(_K-9l?Pew9NR8&s@06=g63;+NC09|YV06-o90RR9100000000000000000000 z0000DfrSeifg&4{UK|PrU;v9i0X7081Bqe;1_g+D2Ot}dTs7ip?a1l5wN-_`88nO_ z*Q6|hk~E|2|3Be48AF%>)3WzJsItuw0(CsoSdEF$iHmmV!dl(9KbXke+grHz`J6Y; z0jDyIW*_$*_>{lqtuNw8B5xLpO?G8_RUV&>xlGBFi+?GVQYno-cv(y3w2KoVlaYjD zxG+*acR}SZkcT0;x=+HYQTsJK_b%%DlCvtL1+mJjLMIdm^Ho_ z)W1J?-0Zn8X?&}j1}88Wg+SIzj7ABNVEO+)uiN)9OcLBW_piknEbw=(rBrN)6%_5* zuy?dS6MMsk4hohUJ3*piL0XW~LTegYh-KJ^cP>l-P%t)xdl4+EMbT_qh)Y`uaUsjL znVM;2Om&;=WGc1EAcM|;{)DhY)-mnzKO^%0$2I%TnN4Wl?dJSLPQFZjk}4IaVw5^! zb)@EqZ-I)^^{xta3LORps1MenQh}*C-ueyy&i>7R0RULEX=uWqae?_?G|fsi?(V9c zu=A%vTQNCqz3;;Zq8zM*xM4k0@i z2(v_lX6GP$DGxsW{+(%ilKt*;%M8+EEkY^+;0=7vsRUYh1JCyWasKmjz1g4K6cAon zw-!*A9okAx?#qWaC;7mclqhAKPJvJYJ78F3wd_c^Wg*x3wQ46-(-n~Z??^jE`6;DO zcBa4V696d}fpi0vB2a1Mw+j60?#c9d6QFkiT|uQ$sg$c+%dl_u=w%Gl(8=Mjgz{LT zgM)1Iw3#Pr#GrM=5QGupx4mWF%pOY6ur{?pY>;UXSt#r3~qVjz`{$Ys>`3}Taw@ccN19Qyvv?5&iBDq z#eEAqb)e^i9*8)+K1IzmjP}NnV+Ct5>!D5K&^AijKZZHQvE`HiBTKN zSGvHJXk10ocexHVdytwURK0cwch=~x;XB;x(ZfXd79B+!C(1OSicM}9kIrLgCVLdh z{@LC?@oY(KO|yu<&t71G&yG;AP? zliS)rc-L(0bq{fbl@28n2VL&%u*rWr zNRr}U$;S|-=p0ya89E|_-3(4Loy9UoQG;6+Q5BAP#F;v!M^|Qf1B8EuXL-)&c|jL;QI~cFxA+=w?QOcD8@VA2JN05-!7F{%XY1D>Me1pJnF4ZKLaKv&&(}+~YnEdqT6R=J~h(8gLXGCw{`D8DyF=o4oQbr0`-(Ew_>u)zrE= z>TS4#oi4VtvdXKhifa2a7*D}7r#9iVrazDH`%>(;i;^>27% z+qJ13-pNJJyyT@XYXPOf%5G4HD9}$4q)mXjWPnb((-iID2X4xz^J1S}n`djol!d4P zV)#)C-E8(^u8cH^Cmb2m3^c-`mMaZXyzny}a#a91Qy-JKE>uYtpV{-6hh{5Sy}0AX zf+L0U>*2XR+D^@%vzPuHEE8_DM_Wj#McilDP;LVC^> zh${SrgK-Rnz!Qa}?m$J{bFm($!l4RbPfb2nV=BIqZ*OXh2rN^}TDUTAx7_|RiTX_- zJTY3=A$pCB_}DLTKBlE}LPn0B`@Aeb4e$i%Yel8W$hA|o8VZeeT&0Lvu`rIUf@Bm% zy4`>IY0v%k)?1T@xVTLotwEbZ7pWGE31Ecl6~k>=vufK4dE^W$x7+UfZFv_Hwwks2 zDlUJHmwEQ54CW&0xf4!>|8mBZd*)c-#iAV%1?q+CT=q22<6bhsZvI^lX_L!CksPLl zDNbb@y|ZV?BAB=+CHCg3nwON{RUVeo5`yRD!Qa6s^HkfWlJ(AH7P#dbp z;U!MoIzkfthw2~`a|jACNa8Af_!GS3un191hw99<9tbOIfjaEt3wR~l|J9!g!~!R3xG z!qr#PujByw+P&}&_o|mTEX%M8Aj5Gi1ZGT)WJXEkDTUKa#IzzB50V=LX)P>_SW&Kl zbd5(Xa0edYT1h5X1&2LI0YpK)L5Yob_&c?~RKSM@iPP^9P6d6YCj(rmu?Px;YR1ML zN(H1Wio?;(3?2qXDXjLu=L?YYWGP4M;lXzfbV(t8^& zyXi4cEk(oj7P6WK5ppejAiL_F`OzS_c*F$Q;;TJ?j zAHC-SBH;%*l@4mLr2xRcWLhQNpA5V{iN`M;SV$d@(8z*wrjZka+X&_KyUY9Jy-z3 z@HYjThdSEZ@wtI{Re0IJ%l}>bLIMwTeP7mWx-FxisKTI`8x<0t1{VV|wm^^Oy$tex z&o*|EQ_ygd4>=Ghy!PvJjm639Hcd6NcG0Kn-@ z3hpT((CsHUU`q>rs6P$0Qqb~C)sICB zOWih%$b;m{fVg)*!B;sz+A4&QLyGgYZfq}zcK8ttSG$d1zI7}EXoKb$?A>A`1j9Lm zeYjtNquY7{eFNy}IY+t%!v)^#0HP;Al>Ui6oHNwCR-H(r@o`P86=Sowq7_mfnp1(! z+FQ_zRb!3=wAkMIf>q-_2fBI!2k?T}>%qh?+w>XVQ0FYL#wPj^AV$`AGOEYwk?-!) zCnj%`6UfFHoG-Qm4U^H(6WL$@=cdlM{6CWu6tleFp&T52}g+Saw6 zF1${@U8afV_5wb=0YW5#zer+!hCzIOveWj zwQ%Lu-uAh|-C+AWz{AxdTys5Bhu!FXM?21wSI7Fqn~$|_y5&F9eeMh2PV?&w|IQX; zodAKIFRpmE1-av{d+uj0!FmsD5Nw+e^Se@FNkY5sVJS8W>t<;dc;vAso|aL1nOTI3 z=x*8Nlq*t{XXSZbzUUr%QDH?DS5j%;E9*zr%B#S{!p6a+hKEm`1~Pj^O3XvG5G(-( z9cnQ|1_1^qG2+;9Ktxh2A5E4D*>Yqm=Zp~VtE@U(HK6z`5jMU^l7eEukgY_-gyP{W zB7s*dmSbNnwNi~r%dED_5>-~Hw#M?l^*!qW$hb+z-7sS|9K_4Ekct}{3=?6_^cJ^* z6|G@SYhCwFEn~GuLL_H+j+b_oH+Z}6^0jCQ|H5!VF~OT;@>od^*U7?0tuWTmIIG;? zu*c1_E}-wYd6{OPZ?Qe??>Q`K-Fvm4`?qj~J$w5&FLGY#oZy`4Ts~i2+D7R5_pSyk9nG*^LW@nwy3wnby41)0x(s)DT zxW<)z4SmP;J=7$vNmi3fO=|nEcD-rB_T|ED! zYajp9dCr~mQ*bKI-xr%9Vwf^A*v%>0ncx7I`L9A|g?j58^1Na&>&g0J*|I!0V=Gtr z<@}o+tW2ZhVx_U4C~*WFU5@juxaqUz&h;v&=yI#Cwc{nHc>UF!=e4lqu6pZtVJXX> zeJqGK^Uh{nnhk3Y;XMa7)|P!PYh2g-UDqAqkR6Zjz_ulCUM~ zNb-Q;0}c(iHc%WmX`n}&-EEEzyg2aA!2fGi51QTf)4?9?9=ixG{an1-uW7%j{qFV$ zT~b_5xa7DLxsSF~j$3S&3d@O-W0}V-*_Kn8*348( zwx!v$-6)t4x?Wy_>)QQ)))MBuxh{-s-l@y>u{d=TSLP>#l1&L;7b=CV zu<$Peq%iOKLyUm;ML?Tnu0zP?T~y!XWDzupuw(`oG7+fcXP}XRK;o#mul?<2!Lo~y`UTf&o;Ds_z8A9U8|a_P zpfE94q9gx$)v0T{2@EKA!)Sr3E9%3boU^3);OpWQaHMTbojh`C7Ei4%%g@>J1@F{_ zgdMK{b5KE-g8gy`*w13Cor?D7=fbdY7p4Nz=BC znznHYs>MbA6BR=0#O}+m>Z0GUrlkSKa7x>S7;$=FzL~Veku?@$>H)jHzxl z9w`D}C+=zc+%BO=#F!-0qN!8oEFL3^7+w-8L$+am?)>QQ?LEVPm@Gvimn8?|80gRf z*w-MMgoeNH?X_xB!EU8DS0UMy)zncaKKb6r%5aJJts1Fk4wPBhKGzn{ANK*_1x*^k z)t3XN^}(x;%g*M%ijHY<6eYsm{ex%AvG^;Z>-VP1aWtx1FM!jq3p92m^k^W7e&P-A zJ9cIq+=qzyD^T|-I2&I;#!vR)SwgT(Sk-J`e;T^1YTbj>Dg!!b{;jWs)`Js0c-`JZ z)t}5H;F9sPb}cdowW@^!f#h_Mat*Wg2eo9DGa9OrksjO*jIo6d^NcfCwZ6M?~$GTz479)jUqP8(|#Z$9;*MX1XLNg4# zzQcZXm6j^auNG&9iB9+~<2p0OvGCvoJetRtyvrZE@kLQ}w9S}^F+%&^ONyaJ*s)s# zVypDJ5O)~$<4E6^ti#dqiqKB(M@|E&RgEdc`Rb-1Q1P1sS&+d=#gy-uVV@;;BKG?} zC1NThW2$fKJL9A!^JM4$u12~InN1tC`ENs+Hwg7I>mGar*+$5;BP(XWfd-QNw^b5w z*+k$_XZ4SGuQM>KFo>EpL0YS|z46Z2w{N{!Z2C6**oef5{sM5T*%4BXtLqx>1A?Q= z_n?A)40W!)P77H@jGk*8_p5i*yLag~Zw!N$HF6%KKW6{s>ZB|2TB=DD=gEDQc+=N! z;)p4epGR)ijvAvH7gpw9;4X!1!XkTdx6^;^Cfa#aW~nVeP334=fFF?T@~(Gj;m}{< zdOb>!8l|G@$a3E$;irn83b)cid+iH3v~ka-Et}iJyY2=-537VdyNgSkp67?KMFiP- zS1L5b+pMx`1aH2Iw)YW_%;3eU?wXueD$!M|jwtnJL~&NuneA=tvr9EqhGD3*VM;k>J5`N|mD!c9o-Ws<0&mSE|bC_Ku76^k+3^=sa14vXk+4ar2pzui5 z;;7^;>F!HGW{-a?FPt2&WkJdYR!UdSwS(}xx4SpI)QTq|M=dvQjf!)lwd|BxbA#?J zk?E=BD8sy4Q+(Z)p;p=j#xEH0`{^rC^eg@#EA3NX(*wBLc~D5`J^WkEPD~pSMk^|= znlM;V6Jc>az5c#ySR+D6LPuv33S6WerFQv*0WzABuRxH!HsDs`-G{Q6)b_cbTx^1i zISSH=ya#A;+kc6;j8(6@5bKk)sTSg^0zvGfw*Sr+YFlb--{yLFjGNO@mXdE~(l-8; zFK(=Bz@!r3UrhcG8{0lnr+HsSh9)PM`js&XsgshTebGUJz!kE?DFzK zAl(%4yAXI#>8cOR9R58nCe)*HS1Amdv;S4n%2lan1_ z57O=hu(mAU3EKW(A>B6|oEP6FE^wedZx{Z7#zB{lL*>{LY8 zsPJA%w~_XE!{8RREP#RGSsDfp=3&)Bx+<0semd+APF+pH(T@TF4wfo^M5?S{fZP|G z(Z`#xC=iHayaLCMe24R?>C}ILRxJQ=0xD6l7r-Sdtu%2J3KmV)>dZu-z6PXww}a?) z4bj|9G->;X-ILt*BE00^1AHr1V+`<+KrjV_Dapgo7fZ!d3h3ZDkm4^b8c!e!PwmCU zRqv5SI3S`oFq6L3_%_J)=r7`ebwtb~4MGjM_08mcM7$zAc-4LEJ`aZ-DUR^XI4+NhZ?!h=Y4y z%S&%%i0KuG&4_NENACvW++l~s3lOXP@bI-krMT0(kzW~LJ%J18#-r{`H+XYo1? z9<^eMzcy;Muc43o)QJNgmMpLnw$1V-cC+QR`Heizl(nSD{jW`Ft2-dOrWk}|8SXy{ zR%k}~Oc|_|rU5zlE@ot=TR^=7G;9w+5$9QjX$8Iqx|SRcH~W+X=<7?SLF>)<)(BxW zPPFz?AnPbcX&s86xABOKV^|GE)jRQZjjqE`Xq4uv=+1I^OG&c*+u7)c#_$&Y)ZRh0 znr8)pB6>|5V0(IznXq5Cn`n)&{b9SVnCQMdXejQ+TOCGS)2g_e(j)6ftlgUOQA+&b z|BT#tcYEsglS%)Xw&lJT5{o{qxD=ee)?(ik*|v}p)H0M(ZNPeoB%s3mHM zfIzcyjLJx_lowrf>QIu^7VFu)gU{&ha&W@9+Imhwj1+syv#gW+RW?`+&`^nY6=W8c zfTNIYFavv3{`!d6gjlul#Iy}iYW zcW!YVhwbp(`4cD4X^-fS>2#~$+Sw}?FUrQNuW#MG?<_Jc@pYI5=(&FwZw}30f!E3% zu+sgr0&Pr{Ukg%|lRZ#OzOaqEA0+YyaH14@LkuBz?%(>)0ezs>kf6G~VcFH??t`aI z87TX9eXl6)1@7J%o;FetxV-(Px=M7m&E=`KU0Br!WVx4tRXqWgYl5Km{+ik*=MA))v0Zwc8TpSyeQ&bC__+I;53 z9jlhP&A+|Ipk)PmGMMJN#qJ=-Yjoo^LNLMX;Pr^0gE*#EQ%Avxo~Lotgyl2W%G5?^ zm;N)~%%8G`T7Z^H(H^>e1v2Yw<pzgVmE z%H38!5*`u=@!0tyP~1wY4nV2%Yfl=xUq_f!0Im=}+`B0TA7g5@Q)<(9_#YM4)s2r` zSQd#ACjottgZ8?lc8sY_JC3!K!8F;9T4qVW0UB#@|6?S$&50)MeDPSUqWuHJdoyfl zv)!@0u9)$te&+= zX1S?^cH?csOer5s>1LzfaILsfQ2d-HgGpdYUZ9npAU(JJ*Wwf8ffu2{e+|w)R5>?@ z>vp*`S6UnAe*>850+KtXL{WnHZF_t3OccIR(T2sC-SACNhFe6&dr?<3 z!a{%VCL{>+KGGw8%sZ^Fe9KbxP&5Axt5x?F&I+1w1jgJOA2vt!9;W)CW?roMmqat9D@B6um{2{t);mk9r~(B#TIY51}8C zVQo%zHLqizp$o?NYZK>q7<;=9$Fkh;WRpD7l)IqpLpH!TRDA#KIt00wMP7#^n^9MR z0gJ$lrJd^C^KO^9j54zf+krX^Kniuoj7}f9pnlH0wE~?rN^!x+vut|`0&4?V(V$_* zI(H*l!$9e(19!v`pk>B=7^B29BsZ)458hKh6KYop#eZ-x2BQ()DlN3_c04E)!i*ts z^xHua8@>jMZC?zt+Tp@1dcc}Epe#uuD;*_Km_d35)RycAH zZ6dCUq6$uwvIK@iSMdry$@ksHqYk+UA+!EUgJzg$=*cgW*ZYTRJ&{!}09No}QNkwk z!GLMai9@@oSl-Wd+oFHCNfW!XUd{Z&#Zp~C?|di!@_KE47oMnP{QB4PeW%WuGe%y} zFIvt1-0rga&Tx5B@4OE%q|3{B8o7y}5f;IX#IRuks*}XFx981$0=loXx_-v}s0tqM zC>eSXQlPpN%jGfV$p^Js1#)#FJi^L;T#=~y3_kcP_$d(M!4mC60~fj;P+vEMo(l=Q zdA)_9-C7(GHX}i=4Vcy$rM1AFZ2LmIryVXr(nx^Ib$=aHG{$T>jCiS@9qQ7c8` z*1fm|`Au&qx;L=!2gADo+j$1;Ih5s)v1KjLpZ`M#yrHZ^>0bXdmg;m>iXxOQ$aZ*Q zcS$3yL#x>X9glws*Ltmo+2627R~L=6YRh~Z%jQ>Vm+&nHRg33_Wp_bO4a+?Y_E_l^ zpk_#GLu~JnebCbp`)G09H6k@G4N&1d`ZF-{A~@dS!w%JWRyF0>cGXfX6rm0+tj_-q zX+KcBHwH${SqTtFq6`@WI{@_tx?i`oat95Z2EsW?cpjK>Ebgdo476n}vORPQW^YE< z!WmtVkL?Pa8)0*OC`(8CHqKPu;OGM$MPf68(4q+DNu3_#!{Y*m!CcEob}58;lp+KY zhA81rL`!-NVt1Mv3dy=G7{pS(ElB^VjPlc9?Eg6`(hUr?Xq4ZbWl=luZ#a1)`=)^~ zf@PqgfZI3)O&9$$^n^njVnkG(@{3H^QgSJqTc5y^)&$HHx1Os|Za70rpCT;gASmy$ zi72Wc^Vo}!1(9jO1O1v1b2ouKZ9X_R_k|O{k5o-`I6XXvpQ5}3NhB$v=H6c1`&t$a z4p`KiI7t6$__z~K&-r?;qwfkH>@iqgowwI&)+~Dp+0E@*O- zwTPOl-sX@-cY>*lavyoRcY+0(|3^PeBFTxH(QnU+mgqrPU;4zZyq;y05d6Gc&=EA$ zMJiHw-fZm3!_%YW;_G42|*FhvPVbkDFjhq=wpx?PuoFisDI_)eF#-$z2ntfIMp zXyVJ8FIHTBU_yAfoy5e<2pSWpR{L`$d6%u%otDHN8KxU1-{5!UFQV9)Ppo;N)1!p-U69Sz={b@(O35caxB^niJZ@msX- zFhSw{yu()S7jrkR<;<`050}bMDg)iz7ff=UGu~PpsQHcLe81jZgODsF=^o@L-rnAvLqe*?+){VJ!XYhq{9sj|YmCd3i0 z>1}?)AkiyJo^d&-IZ_p0Ti-Z7V3LVQh?_;)bz-M3s|YybX1!{vth{*ZR@LeNj~SaL zd zg2Q%T?QF~}J*ScUUv7jQAp0#mmAh688p^GVtPZ~~qaEm|KnfxzqKxz7-_alLIIs8j z8%wUXKF#+YmZEv>3|KQ$7O3XWUL2qCw=?^{`TJwtiqFUEkmiiezlptcW1KAlGW8(( zFhAuJzw}S_8-U`}u#tt7DQi|2S*JL8PX3(R0-E|n91DohSt%$}1S zTeqggWNHE}gcF)$53t$6bT~<4Noixll2Q+k#fv>XN*6b3f`gMJb#(ot7*WG=Pe+HO zA{DBba}$ay*Ak6{A|9Q?gwnmm%46jJVJnH`3~?Gn#`>Y{yeV>yjsu zr31qGM9hhtJ5Nn-E%p<)-)w*HrD~Nwm-n*3S|{6W!AlpquMkkOEWSM$YC=lTrx^?3 zl}Q7h`|8#Iu+xieL)(ke^D@+ zuhK#UUbKJ}(BkRB!gr4U3k_A9cB)CObDFy;twuY9>gs*?w`Bgbn(V_NVaKh6nI=<< zl>eQr1v}J`ov~Z}p%)e^_xNpu+o2W8m78~sH;Exw-$2$uB&-{#UTZC5=6<7%yFv}Y z3>)U4O%zEREzkrVf?rVCD+K%KAVtL-0fd$i4o$02@iSr(Agl&`#3UdzgAC|eMJ~HZ z4(TD);d_`=MB0of0CW@OaH&GqDQG|{j~XlXxGA9g+vOvINQF?JLoT z`zDhenqBe&>bRB)C57x{3)Rtjf*C82Edo2hy06%x)mO(Cey|h97E-IWa^l zzToGD&Q8j8lh%(Q!;z(9x82@W7v=|VcZvV?{vc6{M`~FY{gBAJl;Lj$|4yMS^FjZ9 zL)en2%;wWf-iCn}omn$|?0|_HL0Ub?qm7%u?U_&1Yqg@-_+0UO29+Z`wu>-l?*y7nWoE<2yN{%^N_y(F}Lq!{;@=+gK2R^AG>_~@)frmr*51M($b~0 z*sb&46h>9J&jX=P^#NkuS#pmtY3if9j_=&*raQU!q^`$y*dn#i{E|f7$)tJ{NIOrI zkYghaw>T1`6G3UVIe2FTH;Q0zO>tyQhWYCx0geWf57mbP+ zj%MT{)jU3y)kqIckoWAAj1>A^egf?&v6t5w_EVUqBdz3bEETgUV!DX9W@}~?a0y?z zgJ487iijP5|AE3tel(eLq?Q&ZK4fVkf)FxHgfMU<1v03Gg5rQS9>UDi9WzbJE0o%k z(28T3T-Bj#?JD5Ay!ENT?Hg-VXpqya)={VJ^ zI181sLU|QA#hZp&jXaT`EC~!QA;C(fKQFnCqiLA;f%Ao2WHez*8ofX42({H6NRXa3 z9nEXelJ0S9NBM7`D${(n0ul&75**=lEi(uP)TA>t7EWKbDgM}*^ds#VXc?dM-CjTL zT)-NuhfD;*5klg4J2yR`X0Ed)9RO!8OauImz0%154*ml7$nxyZY1~=j^US&(WbpZ0%vZDG>(o zStfI7di8(Ytcihf%cIu)XGzrBy!E!;ulBAx_t5lg_Vr<^XdmD{r$_MhwYkeQv99t<`_pO9LlnfBOO~_(#+|h|6K$1EKd$!RtIxWZDkBFQPJ_g6QL@-8lrn6X1|9tqE7WtVA zm}v5e$L;QErOC^eB0{q47X`*wbFsPBhZd18-HE{XHC>_WsOrp<}FP!XbKDOMp|`#lai9zXi+w!IRcb8ZADsBRjd6B`jsRE1GrH ztKF|7A#_CZOwMY<-7kQ@&C_qut-RW6xh>a!+i&Mh-GMuKF;{c^n)44h3>Psnj4;C* zM?wfEhD5T+r;H`6p@wy|(#;?f?BysYNgmD=jze4~vw*{s=LaMj>- zZnoP2$3140@ur()k#>JfSM5I>6~|63jl^kgOSjB1p8^XlqL>oPuDJ4+R9QpoYOS;G z`WkAxfQ;4*qrLQ#^MP#RQlnfLNE=}^(^@|mt!zR~kR~hY{M8$LbEeBA=tCG%(5yIz zLBZadoSHME=Iy&P2*AM;6mkQNm~gHWhA|DK!K_bj*@9p;%snuS)`W(@fYKGgK+FT)6#{w)6tG=D@C`_)Vdei)0|-SOtZy zt6%KHJ(_Ny(SJBnNa0GT%sxiKI18ZlHx}m(dvPAtGQkhTY)|Fo>}IWt!_Dd^?6!7@-#e8H4-%rd zS83i;LeH}C45kV3yBOpGvjF4c6?n!Y({jKFIqE-jvF$eM7^Pm?XjRz1f7ihzIduEs zjGvE!VEi=(!zf?3$x+d&x;;x84)8AM_(Hr1KPSOEl}>o)+rGQzhWpBbKVaSi zFuiUkpc#;X4GQ(i$Sf{I;t@r>2<~?|&zWIhmrlR6jKPFs3Uoc4i^o4xV6Io>gYh9b zY&5a@#d}pP&naYUI&Nt=j`NDRn(puy7Jum&*oe+!UTAO*Br~|U`8s7@O(_UG{jsI| z{k)8m>->eDVH#lI-N+~MIY1y5d~gsBqGm0z1|bpa6c{!-@gWA+pPKV8fpqr>>A(k- z_MC8-EE%mJ$BTfVJ`*Ts#%>Zg6TSzEY25QSuofaV*_2c>=p{=TL89q}IE{RKdL!KxvkoglLvweV&&~NrT|-9> zYnTNixKxJbm*n5zSA-};2zoRg>iy=>1nk@Ja}DNh{J1T%+>Gu!>Myqq+$k-;r|F0L zJNB6^TVul$;}h#&*TcUnUaUHX_oF&6&> zZcLCePo-yBV$wtBP-lm2O^dQ>;Hn5^3U(JDcq}6Q)VsX7fvcL%J476k;ANMpG;pBj zBN#?N<$%`Oy64a9yhp3BH;KW~b8KwgK^UkyVBq_}Uf2gv{yT#a-TaQmpAmw?>O4$h z8}ts?apE#Ff$W)XKc8ek6^q44=CKcHqT-K0x>N2sx0oNJ|4!O;AQoDO0kILI9}qbDYzanET* zfEVr?5b1>9P=y3OlZQgC6$1nYco>)fF1(Nr3IG90Nws&vJs1y!3_>LakNL z24cY##6uKFj0BJ*r6A=Nfh<*Hfh<=GQm+xDSu04Vagbg1gB)=N5V zy=qo&y4-fLh#Ym_0}(1}u%$zB6n&B-L00ZGj}V-f2Lt4Pe)%^%DiA?cdsp@@fduEY zXi$}E&DlkCE6s%2s^vT3QN6L85aRLFa0SZ4Zw2K(c*P(TED+EstiCg!h!%ZN)`kU8 z=%I+wCTN8oI*}(m2ED*wneovBX&!9i`7Hz{Uc};bzm#Q>DggI_ zvMt#v5;beuhGHG-ZgpUzHiBK-w<9n${?y`@1Z036FL%XSS-FU9e?q@_&;cZ$CN70v zpUd%ysh{Yyp!C7Lz~q!?N2Yr&=LM5~0T&7t1?~k2mv%WMimu|86}r{73R_XnIHNZ17jBTM#VPvumOo#S+2dJ2RDzIU=rO{66c@_?>1rhCUg^Bz&+ zAw4Hm8(WF(qGt=k?BVU`-XLy$)*H<1>$BXnCU17MjM%M@?Rp zx03)EMlf&Md17B+&Ee(*6K}diyOeAbogwE)LVKAY7VbW(3Htda9IMaP8)+_FKp5H;iGsF4o zA(#-t5SFln)9@xBObkS6Mw7s(Il1_|AReXRT-R`d2_X!yi*13B6NuS>BqfoP$YRIc zA+euez%pxye-8dxGdQ7a{vGoC4C` zJtukh9Tp+gEdsD$ZWzZnDFO1K5dTN({0B`}2^56+TCm4{U zGg58B(X9|r|BASn1r$-m*2bB|z|Et^SF^sSmNaeuXCE{S-sR?VSn$J~r=EH4g&8ls z^4c43eex?bQDQ&Ss$Q<2fD0u#dD;x$Mw>8av54Ad@4=I=Kp~>VNR%YqKZk#EfCl}} zRJJnZ7F(`Py(Z1twCl80w|*0LaxmqfBUI#^%NM)pPrCjl0qk3bh(V1tdtq`E$dj)` zu|-y>vdU^}ZLrRIeFh90G-S+CCmeGeAnM`+zH9G*AoCAr3@G6&(MFoI4V)RJ^37zC z58=U=fB8cpap7t_41_==hzwC6DkKEFN(G`J0z?Fu{R<#^VD5>(&guko=+dLlmK|Wu ze4!R-$tY!J8Dx@0hAA>n4wEwq*yjXGgRy0L^&7I?ggy2-7#?CbFL9d7(kaVr6^Fd? z|2L+V-LhHk?DDSt_e$a3`Q3O3rTRJ|}jq2j)W02}dk+({)9m}UqzX(UOSaT@E+FjTu;LPRt zq+yb|JD@<0JSFlKE466B1g<%?VarfUV4? z954`UUlC54`|z3j+3`xRHuksYdZO=Q_mzfDd91^UcL?7Y6HNb0__67mJyXFKT4t%& zOzOSO*B^d)KDLBXP%E$E7ZPf7VUp}OxZi~tmrGRiE<&iI-eCII<;2?dD>&<;`*a& zlWO_5_LWY3^W)!Ql8#$Ak8X9Qc5Z~-JvohqQg59A6fE&#Q|HZpJGqf>FHPgq3Y8jHtHn6Q8!4cRtYPrHfoKQ3 zU`Q+hWyZA;jD0%Z&RoWRC}%xDi=XxU_~2re9c6v`xxBxI)Lvx|5m_Ps z1hV3t#gwDJvUH9oltP@%FUGX@hLF!mpRAVi;>+JWGRFU4j;yoZm!=~mkrG6h}4Pp|26%Fua{(^=td-{P}7p zLZe&S(`YG_a(VOSxA!;V%M%Ztk36uUNsFzAjGEp5V2;E7te4K4j-bgv3C*i7C*_eP z#ajVI0J{IxX#XZ-{tDjwR{e)ts*}QEIvpO+ bzobJFFaj&@=eJ01T*k2v8HXaj761SM#%TxI diff --git a/packages/fortress/static/fonts/Metropolis/Metropolis-SemiBold.woff2 b/packages/fortress/static/fonts/Metropolis/Metropolis-SemiBold.woff2 deleted file mode 100644 index 2ad1a7e00416144da43aa88a23242a38ac44a21c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16576 zcmV(^K-Ir@Pew9NR8&s@06@S13;+NC0A64K06=j70RR9100000000000000000000 z0000Dfrk?sfg&4{E*uI5U;v9i0X7081Bqe;1_g;12Ot}TT{U=Waj~nrs>(LIgOMUg zHmMUqNqSHA|9?j`Wb7WsoLVJPNOZ5+GBe{cr^anrh&u&#)w7}RhFuWCozs*qNIA8a znn~V8om^{~W$V!rpS`Yk_Ax!O=x2fR98d*f0n@+$d;nry==OGxe1QZ=fDGUPet>S5 z@8$pF#sN4$0}22jFM00*Bp@LF0`(~+;?vLt-`_NkGDwmL2!RlYT~G?jA7}so?yeG6 zQ_%BhhO)SpCjcCh6ixp5XTSg7T>IR2-$z_CoS1M&~`bj(?r`=iaS03k$&lo2VRGu(oi+C^CnkhapO7p%oF@-bj3&i+6B`r)~aw z2OM#D+)*V07N7_!Dkd0F-?>ViF4&)|bZIPDrgIgp%ei*pqFp5W-@osCbFV@nZOiqi zKndSx-~o}v=er42B{y&_yTGdLm?p3hPW-C+t0=0y?BDhf@{y8o7)5!6#R((`;}QD* z3{oweNpgGN_Mtp8MW7H81pC{YRT9~GOD)wgM-Fn3cR+qaxTRF3s2kgO1rAW--~8{% zw*PmkJ>9=%S9Mi!-r>K3ni7p0-#MsN<_v%A9S3g{b}yiHhCFA2ILAi*3-<6 zZRa?-OMiEHNhuwq#MvMHWmFy@Nnke#%$_|71tjF0pVat&>dJP8bpVGDI^5yD(;u<# zF~d5Hv=>Gf1-|!Aa-3oBy_GK1wMI@1I565MoB&7G3D%LKbkUaguBr^FOZ4&VizGOr z9cY7WtDBU~-G`AQR)nKcV&K_tZR<;zu`aeUpvCX8D;g!8(r_*dw!$#S3>Ncsh0e_j!#mWsa$~aRku*h<2ZMN4*7hKcksaHPu?(Zy!LqXD1=`&?5 zzSOcStycr9Y*aN(?yJ7*dMRb6ti0-4yINZhdtGPW(jorm2q7tH=~zUFV_+ANR?^UQ z+t)5ik|9r-D$NMGMCVWY6e4LJ`DDyeWO3=T<}KF!63Tc@yyFYba5sS!&b#b6<8&Wv zRou7mXde9c3WFZ5uj0_Lg0+~nX6mZ<`f5z+P}8mbW0n&fTTTfO!%s{bIWRG*kf_houMU zMzGX@Z`d1Trx|FB&%!|$&TEY@m4XwPbcvOI}GYbg@rXpgu9%gLI=&-Zq9k$WD!~os0Q>s#Qwp3oy zdIUiqBnsGQN^@sGFp^PMVa}6j3dX}@qU=x{o=&~b%~Hq*HKFz7#|A=$\a(kO#a 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 DOv4G* diff --git a/packages/fortress/static/img/favicon.png b/packages/fortress/static/img/favicon.png deleted file mode 100644 index f7401c7e5726d33776b086a53d9084aa210a10e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H#=yY1#WFA!$YCrFa(7}_cTVOdkmHgX;hE;^ z%b*2hb1*QrXELyWlmM|55Hm0^FJNR~2GWcmu?0+U*@gwo2sTKeM;}W$0|N_}r;B4q z1>@Vfjd`~WL|hYZ{r_(yecPtd+u-C>%RRqBR%OiEbLV+=|J)@UUu&%9>h0gpU;o!4 z=I8ne_6N_KwVZysQS|xepI>s~ZCd`zZt+{!6&>IIt=7`<{=3|Zi);S~JmUKy9AjMV zb0KWn-S@JGULL9bkZ$yK@)A|kDDHK~k2>#|eQta3_R@=S+rQnNyFmU_?!{|%bsUB4 ze>h|KrIsI$e=O4P{eSHd=?bgq?u)aF_s)O5{#tDRZyoku=WcWSzTdy?`<2>l%!_lj zyX{*3ZnNwSsfXK>82T0V&FOt4@%Fgv21dyVjIsx0Kg<*8XUKoh*ZA+!OWDBpCwks4 z7ksmG@4nnTe_6hTyf&!^GAq2lt(o5%z+Pi85v1e5@`r1(&#ZoaRJda6#mM8C2XxX` z&k1K*rDD4J{8P>wH5xLucb0d4;h*#VTJ~Rk{{}V_k+9mkG0bjlUy3VAYIfC6n-{F$ zyR7Q(L(K_s+rBB;dY{(}kbSu2|5HwjJ#2609?lHf{AHTD19Onc>g(PPUs*2yo34Jq z+%2eO)pdP)R+9x*hcf>QO|XjCd+&4tNH&%^h#jU$^#b`}%$u-e#p4QGEh2nzl!tpPjn-Y1p}hpx1* zRh%p4CEWV|aJ9p)FWbsP=P!LO;vu*yPM`6ru+Q)54Ob4n`g&Tp;D=qp`%)X#)M=>N z_OmSE3tKB-pD*DlyC&|vRDkWlE%lrpKsK^@LI~mge=a9{WdQmg z=ojYI*SUd#arhsrg2{%eoeV%PzKLgWVqQI+G~xIEmL&W-S$k{4MRmUYzkgKyk7cZK z7rQOiaFpqNyEemK)G{_OFL=t@;Ky)HoWX(tS@8b9@`jt|A8uI)(%>M>{F<9VhCx@Kp@eC}K86E~ z7d|mLs56it_*>rj0YgS*ID-{qL_7nC$+$qc;VUZxU&AzU(ggpDzm!P{{C|QUR5&nr My85}Sb4q9e09LpEwg3PC diff --git a/packages/fortress/static/img/icon.svg b/packages/fortress/static/img/icon.svg deleted file mode 100644 index 3a51044b509..00000000000 --- a/packages/fortress/static/img/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/fortress/static/main.css b/packages/fortress/static/main.css deleted file mode 100644 index 7c208e6a7cf..00000000000 --- a/packages/fortress/static/main.css +++ /dev/null @@ -1,241 +0,0 @@ -@font-face { - font-family: 'Metropolis'; - font-style: normal; - font-weight: 700; - src: url('/fonts/Metropolis/Metropolis-Bold.woff2') format('woff2'); -} - -@font-face { - font-family: 'Metropolis'; - font-style: normal; - font-weight: 600; - src: url('/fonts/Metropolis/Metropolis-SemiBold.woff2') format('woff2'); -} - -@font-face { - font-family: 'Metropolis'; - font-style: normal; - font-weight: 500; - src: url('/fonts/Metropolis/Metropolis-Medium.woff2') format('woff2'); -} - -:root { - --key-color: #20123a; - --block-size: 16px; - --highlight: #9059ff; - --wild-gradient: repeating-linear-gradient( - -135deg, - #9059ff, - #d74cf0, - #ffd567, - #ffd567, - #d74cf0, - #9059ff - ); -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -body { - align-items: center; - color: var(--key-color); - display: flex; - flex-direction: column; - font-family: 'Metropolis', sans-serif; - height: 100vh; - justify-content: flex-start; - margin: 0; - padding: 64px 0; -} - -.icon-wrap { - background-color: var(--key-color); - margin: 0 0 calc(2 * var(--block-size)); -} - -.icon { - background: url(/img/icon.svg) center center space; - background-size: calc(3 * var(--block-size)); - height: calc(4 * var(--block-size)); - transition: transform 150ms ease-out; - width: calc(4 * var(--block-size)); -} - -.icon-wrap:hover { - animation: spin 1s linear infinite; - background-image: var(--wild-gradient); - background-size: 200%; -} - -h1 { - font-size: 54px; - margin: 0 0 20px; -} - -h2 { - font-size: 32px; - margin: 0; - opacity: 0.7; -} - -h3 { - font-size: 24px; - margin: 0 0 20px; -} - -h4 { - margin: 0 0 24px; -} - -.cards { - display: flex; - margin: 36px; -} - -.card { - border-radius: 4px; - border: 3px solid var(--key-color); - margin: 0 24px; - padding: 24px; - width: 320px; -} - -.popular { - box-shadow: 0 5px 18px rgba(0, 0, 0, 0.2); -} - -.price-card { - align-items: center; - display: flex; - flex-direction: column; -} - -.price-card h3, -.price-card h4, -.price-card p { - text-align: center; -} - -.price-card h3 { - font-size: 16px; -} - -.price-card h4 { - font-size: 48px; - margin-bottom: 8px; -} - -.price-card p { - margin-top: 0; - font-weight: 500; -} - -.price-card .billed { - margin: 16px 0 24px; -} - -.savings, -.no-savings { - border-radius: 16px; - border: 2px solid var(--key-color); - margin: 24px 0; - padding: 4px 0; -} - -.no-savings { - opacity: 0.5; -} - -.card ul { - margin: 0 0 24px; - padding: 0 0 0 12px; -} - -.card li { - font-size: 16px; - margin: 0 0 12px; -} - -.button { - align-items: center; - border: 3px solid var(--key-color); - color: var(--key-color); - display: flex; - font-weight: 700; - justify-content: center; - padding: 16px; - text-decoration: none; - transition: background-image 250ms; - user-select: none; - width: 100%; -} - -del { - position: relative; - text-decoration: none; -} - -del::after { - content: ''; - height: 2px; - left: 0; - right: 0; - position: absolute; - background: red; - top: calc(50% - 2px); - transform: rotate(20deg); -} - -del::before { - content: ''; - height: 2px; - left: 0; - right: 0; - position: absolute; - background: red; - top: calc(50% - 2px); - transform: rotate(-20deg); -} - -.discount { - position: relative; -} - -.discount::before { - content: ''; - height: 2px; - left: 0; - right: 0; - position: absolute; - background: var(--key-color); - bottom: -2px; -} - -.button:hover { - animation: spin 1s linear infinite; - background-image: var(--wild-gradient); - background-size: 200%; -} - -.highlight { - color: var(--highlight); -} - -.link { - color: (var(--key-color)); - display: block; - font-weight: 700; - margin: 24px 0 0; - text-align: center; - text-decoration: none; -} - -@keyframes spin { - 100% { - background-position: 200% 200%; - } -} diff --git a/packages/fortress/views/choice.ejs b/packages/fortress/views/choice.ejs deleted file mode 100644 index 9d45fd17cdb..00000000000 --- a/packages/fortress/views/choice.ejs +++ /dev/null @@ -1,36 +0,0 @@ - -<%- include('header'); -%> - -

<%= data.global.title %> - <%= data.title %> -

-

<%= data.global.planPicker %>

-
- <% data.plans.forEach(plan => { %> -
"> -

<%= plan.title %>

-
-

<%= plan.monthPrice %>/mo

- <% if (plan.cycle === 'yearly') { %> -

billed <%= plan.base %> <%= plan.price %> yearly

- <% } else { %> -

billed <%= plan.price %> monthly

- <% } %> - <% if (plan.savings) { %> -

- Save <%= plan.savings %> -

- <% } else { %> -

- Save 0% -

- <% } %> -

- - Subscribe - -
- <% }) %> -
- -<%- include('footer'); -%> \ No newline at end of file diff --git a/packages/fortress/views/default.ejs b/packages/fortress/views/default.ejs deleted file mode 100644 index c0db7aac02e..00000000000 --- a/packages/fortress/views/default.ejs +++ /dev/null @@ -1,9 +0,0 @@ -<%- include('header'); -%> - -

<%= data.global.title %>

-

<%= data.global.tagline %>

-
- Home -
- -<%- include('footer'); -%> \ No newline at end of file diff --git a/packages/fortress/views/download.ejs b/packages/fortress/views/download.ejs deleted file mode 100644 index 7a7d41a6f30..00000000000 --- a/packages/fortress/views/download.ejs +++ /dev/null @@ -1,21 +0,0 @@ -<%- include('header'); -%> - -

<%= data.global.title %> - <%= data.products[index].title %> -

-

<%= data.global.congrats %>

-
-
-

Download <%= data.products[index].title %>

- Download - <% if (data.products[index].upgradeTo) { %> - <% var i = data.products[index].upgradeTo %> - - Upgrade to - <%= data.products[i].title %> - - <% } %> -
-
- -<%- include('footer'); -%> \ No newline at end of file diff --git a/packages/fortress/views/footer.ejs b/packages/fortress/views/footer.ejs deleted file mode 100644 index fa43f0c0f9e..00000000000 --- a/packages/fortress/views/footer.ejs +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/fortress/views/header.ejs b/packages/fortress/views/header.ejs deleted file mode 100644 index 7c756c41724..00000000000 --- a/packages/fortress/views/header.ejs +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - <%= data.global.title %> - - - - - - - - - - -
-
- diff --git a/packages/fortress/views/index.ejs b/packages/fortress/views/index.ejs deleted file mode 100644 index 05631675d24..00000000000 --- a/packages/fortress/views/index.ejs +++ /dev/null @@ -1,19 +0,0 @@ -<%- include('header'); -%> - -

<%= data.global.title %>

-

<%= data.global.tagline %>

-
- <% data.products.forEach(product => { %> -
-

<%= product.title %>

-
    - <% product.sellingPoints.forEach(sellingPoint => { %> -
  • <%= sellingPoint %>
  • - <% }) %> -
- Subscribe to <%= product.title %> -
- <% }) %> -
- -<%- include('footer'); -%> \ No newline at end of file diff --git a/packages/fxa-auth-server/config/dev.json b/packages/fxa-auth-server/config/dev.json index eaf4106ec77..f175e4bfe7e 100644 --- a/packages/fxa-auth-server/config/dev.json +++ b/packages/fxa-auth-server/config/dev.json @@ -125,20 +125,6 @@ "amount": 50, "currency": "usd" }, - { - "plan_id": "fortressProMonthly", - "product_id": "fortressProProduct", - "product_name": "Fortress Pro", - "product_metadata": { - "capabilities": "fortress", - "webIconURL": "http://placekitten.com/512/512?image=9", - "emailIconURL": "http://placekitten.com/512/512?image=3", - "successActionButtonURL": "http://localhost:9292/" - }, - "interval": "month", - "amount": 50, - "currency": "usd" - }, { "plan_id": "321doneProWeekly", "product_id": "321doneProProduct", diff --git a/packages/fxa-auth-server/lib/senders/emails/layouts/subscription/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/layouts/subscription/index.stories.ts index 8a51eb59ef7..5f097e432ad 100644 --- a/packages/fxa-auth-server/lib/senders/emails/layouts/subscription/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/layouts/subscription/index.stories.ts @@ -37,7 +37,7 @@ export const LayoutMultipleProducts = createStory( { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', @@ -51,7 +51,7 @@ export const LayoutMultipleProductsWithBrandMessaging = createStory( { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/downloadSubscription/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/downloadSubscription/index.stories.ts index 1cc40b3ecf9..6e078e3f796 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/downloadSubscription/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/downloadSubscription/index.stories.ts @@ -15,7 +15,7 @@ const createStory = subplatStoryWithProps( { icon: 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', link: 'http://getfirefox.com/', - productName: 'Firefox Fortress', + productName: '123Done Pro', subscriptionSupportUrl: 'http://localhost:3030/support', playStoreLink: 'https://play.google.com/store/apps/details?id=org.mozilla.firefox', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionAccountDeletion/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionAccountDeletion/index.stories.ts index 121710d5f79..4002491b981 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionAccountDeletion/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionAccountDeletion/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionAccountDeletion', 'Sent when a user with an active subscription deletes their Mozilla account.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', isCancellationEmail: true, invoiceTotal: '$20', invoiceDateOnly: '11/13/2021', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionCancellation/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionCancellation/index.stories.ts index ae30990ccd7..a6524956779 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionCancellation/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionCancellation/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionCancellation', 'Sent when a user cancels their subscription.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', isCancellationEmail: true, invoiceTotal: '$2,000.00', invoiceDateOnly: '11/13/2021', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionEndingReminder/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionEndingReminder/index.stories.ts index 1590ffb0e30..3d196817d7d 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionEndingReminder/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionEndingReminder/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionEndingReminder', 'Sent to remind a user their subscriptions is expiring soon.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', serviceLastActiveDateOnly: 'July 15, 2025', accountSettingsUrl: 'http://localhost:3030/settings', subscriptionSupportUrlWithUtm: 'http://localhost:3030/support', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFailedPaymentsCancellation/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFailedPaymentsCancellation/index.stories.ts index e34e0172418..16dc0a82119 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFailedPaymentsCancellation/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFailedPaymentsCancellation/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionFailedPaymentsCancellation', 'Sent when failed payments result in cancellation of user subscription.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', isCancellationEmail: true, cancellationSurveryUrl: 'https://survey.alchemer.com/s3/6534408/Privacy-Security-Product-Cancellation-of-Service-Q4-21', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFirstInvoice/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFirstInvoice/index.stories.ts index 385466e3aad..d855b8edf4f 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFirstInvoice/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionFirstInvoice/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionFirstInvoice', 'Sent to inform a user that their first payment is currently being processed.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceAmountDue: '$10.00', icon: 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', invoiceDateOnly: '10/13/2021', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentExpired/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentExpired/index.stories.ts index 34a047700e6..5126138617d 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentExpired/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentExpired/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionPaymentExpired', 'Sent whenever a user has a single subscription and their payment method has expired or will expire at the end of the month, triggered by a Stripe webhook.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', updateBillingUrl: 'http://localhost:3030/subscriptions', subscriptionSupportUrl: 'http://localhost:3030/support', } diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentFailed/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentFailed/index.stories.ts index d780bdb575b..78c1ffa082f 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentFailed/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentFailed/index.stories.ts @@ -14,7 +14,7 @@ const createStory = subplatStoryWithProps( 'Sent when there is a problem with the latest payment.', { icon: 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', - productName: 'Firefox Fortress', + productName: '123Done Pro', subscriptionSupportUrl: 'http://localhost:3030/support', updateBillingUrl: 'http://localhost:3030/subscriptions', } diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentProviderCancelled/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentProviderCancelled/index.stories.ts index c75c9cd1b62..b20203222bd 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentProviderCancelled/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionPaymentProviderCancelled/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionPaymentProviderCancelled', 'Sent when a problem is detected with the payment method.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', subscriptionSupportUrl: 'http://localhost:3030/support', updateBillingUrl: 'http://localhost:3030/subscriptions', } diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReactivation/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReactivation/index.stories.ts index 755420e8214..202bbf235f6 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReactivation/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReactivation/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionReactivation', 'Sent when a user reactivates their subscription.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceTotal: '$20', nextInvoiceDateOnly: '11/13/2021', icon: 'https://placekitten.com/512/512', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionRenewalReminder/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionRenewalReminder/index.stories.ts index f9c14e9d80a..b59de8ff34e 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionRenewalReminder/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionRenewalReminder/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionRenewalReminder', 'Sent to remind a user of an upcoming automatic subscription renewal X days out from charge', { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceTotal: '$20.00', planInterval: 'month', reminderLength: '7', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReplaced/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReplaced/index.stories.ts index 0b75cfeddd9..0f3979c4d41 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReplaced/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionReplaced/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionReplaced', 'Sent when a user has overlapping subscriptions when upgrading to a bundle.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', } ); diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionSubsequentInvoice/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionSubsequentInvoice/index.stories.ts index c76a2a4bc70..0d5fe1c0b1a 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionSubsequentInvoice/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionSubsequentInvoice/index.stories.ts @@ -13,7 +13,7 @@ const createStory = subplatStoryWithProps( 'subscriptionSubsequentInvoice', 'Sent when the latest subscription payment is received.', { - productName: 'Firefox Fortress', + productName: '123Done Pro', invoiceAmountDue: '$10.00', invoiceDateOnly: '12/14/2021', invoiceNumber: '8675309', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentExpired/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentExpired/index.stories.ts index d0d51fd2e28..d28932717f5 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentExpired/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentExpired/index.stories.ts @@ -15,7 +15,7 @@ const createStory = subplatStoryWithProps( { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', diff --git a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentProviderCancelled/index.stories.ts b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentProviderCancelled/index.stories.ts index 1656a7368fe..8415ac6285f 100644 --- a/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentProviderCancelled/index.stories.ts +++ b/packages/fxa-auth-server/lib/senders/emails/templates/subscriptionsPaymentProviderCancelled/index.stories.ts @@ -15,7 +15,7 @@ const createStory = subplatStoryWithProps( { subscriptions: [ { - productName: 'Firefox Fortress', + productName: '123Done Pro', }, { productName: 'Mozilla VPN', diff --git a/packages/fxa-auth-server/scripts/write-emails-to-disk.js b/packages/fxa-auth-server/scripts/write-emails-to-disk.js index c968ba9c096..07ece6b9631 100755 --- a/packages/fxa-auth-server/scripts/write-emails-to-disk.js +++ b/packages/fxa-auth-server/scripts/write-emails-to-disk.js @@ -119,7 +119,7 @@ function sendMail(mailer, messageToSend) { numberRemaining: 2, productId: '0123456789abcdef', planId: 'plan-example', - productName: 'Firefox Fortress', + productName: '123Done Pro', planEmailIconURL: planConfig.urls.emailIcon, planSuccessActionButtonURL: planConfig.urls.download, planInterval: 'week', @@ -175,7 +175,7 @@ function sendMail(mailer, messageToSend) { planId: 'plan-example', productId: '0123456789abcdef', productMetadata, - productName: 'Firefox Fortress', + productName: '123Done Pro', }, subscriptions: [ { @@ -184,7 +184,7 @@ function sendMail(mailer, messageToSend) { planId: 'plan-example', productId: '0123456789abcdef', productMetadata, - productName: 'Firefox Fortress', + productName: '123Done Pro', }, ], planConfig, diff --git a/packages/fxa-auth-server/test/local/payments/fixtures/stripe/paymentIntent_succeeded.json b/packages/fxa-auth-server/test/local/payments/fixtures/stripe/paymentIntent_succeeded.json index 4a7407d5060..4ed66ea36de 100644 --- a/packages/fxa-auth-server/test/local/payments/fixtures/stripe/paymentIntent_succeeded.json +++ b/packages/fxa-auth-server/test/local/payments/fixtures/stripe/paymentIntent_succeeded.json @@ -39,7 +39,7 @@ "name": "BMO", "phone": null }, - "calculated_statement_descriptor": "FIREFOX FORTRESS", + "calculated_statement_descriptor": "123DONE PRO", "captured": true, "created": 1591368350, "currency": "usd", @@ -123,7 +123,7 @@ "tokenization_method": null }, "source_transfer": null, - "statement_descriptor": "Firefox Fortress", + "statement_descriptor": "123Done Pro", "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, diff --git a/packages/fxa-auth-server/test/local/senders/emails.ts b/packages/fxa-auth-server/test/local/senders/emails.ts index 8c08d4d8439..bd7fd80e4ae 100644 --- a/packages/fxa-auth-server/test/local/senders/emails.ts +++ b/packages/fxa-auth-server/test/local/senders/emails.ts @@ -113,7 +113,7 @@ const MESSAGE = { 'https://cdn.accounts.firefox.com/product-icons/mozilla-vpn-email.png', productId: 'wibble', productMetadata, - productName: 'Firefox Fortress', + productName: '123Done Pro', productNameOld: 'Product A', productNameNew: 'Product B', productPaymentCycleNew: 'month', @@ -130,7 +130,7 @@ const MESSAGE = { productId: 'wibble', }, subscriptions: [ - { planId: 'plan-example', productName: 'Firefox Fortress' }, + { planId: 'plan-example', productName: '123Done Pro' }, { planId: 'other-plan', productName: 'Cooking with Foxkeh' }, ], showPaymentMethod: true, @@ -3491,7 +3491,7 @@ const TESTS: [string, any, Record?][] = [ test: 'include', expected: 'Sorry, we’re having trouble with your payment method', }, - { test: 'include', expected: 'Firefox Fortress' }, + { test: 'include', expected: '123Done Pro' }, { test: 'include', expected: 'Cooking with Foxkeh' }, { test: 'include', @@ -3540,7 +3540,7 @@ const TESTS: [string, any, Record?][] = [ test: 'include', expected: 'Sorry, we’re having trouble with your payment method', }, - { test: 'include', expected: 'Firefox Fortress' }, + { test: 'include', expected: '123Done Pro' }, { test: 'include', expected: 'Cooking with Foxkeh' }, { test: 'include', diff --git a/packages/fxa-content-server/app/tests/spec/lib/glean.js b/packages/fxa-content-server/app/tests/spec/lib/glean.js index 1fb85861b8d..fe76abe669e 100644 --- a/packages/fxa-content-server/app/tests/spec/lib/glean.js +++ b/packages/fxa-content-server/app/tests/spec/lib/glean.js @@ -217,7 +217,7 @@ describe('lib/glean', () => { it('sets the metrics values', async () => { mockFlowEventMetadata = { - entrypoint: 'firefox_fortress', + entrypoint: '123done', flowId: '0f0f', utmCampaign: 'quux', utmContent: 'fizz', @@ -228,7 +228,7 @@ describe('lib/glean', () => { entrypointVariation: 'earth', }; mockClientId = '133t'; - mockService = 'fortress'; + mockService = '123done'; mockDeviceType = 'banana_phone'; await GleanMetrics.registration.view(); diff --git a/packages/fxa-payments-server/server/config/index.js b/packages/fxa-payments-server/server/config/index.js index d96264fad9c..1ecbde17f68 100644 --- a/packages/fxa-payments-server/server/config/index.js +++ b/packages/fxa-payments-server/server/config/index.js @@ -248,8 +248,6 @@ const conf = convict({ productRedirectURLs: { default: { '123doneProProduct': 'http://localhost:8080/', - fortressProProduct: 'http://localhost:9292/download', - prod_FUUNYnlDso7FeB: 'https://fortress-latest.dev.lcip.org/', prod_GqM9ToKK62qjkK: 'https://123done-latest.dev.lcip.org/', // todo get new prod_id for 123done stage prod_FfiuDs9u11ESbD: 'https://123done-stage.dev.lcip.org', diff --git a/yarn.lock b/yarn.lock index 24c3a5d3ce8..64a37a7ac2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29005,15 +29005,6 @@ __metadata: languageName: node linkType: hard -"client-sessions@npm:0.8.x": - version: 0.8.0 - resolution: "client-sessions@npm:0.8.0" - dependencies: - cookies: "npm:^0.7.0" - checksum: 10c0/b53995540b212d9c5992d48432eb97aa9a2e8a91c4d487c6a495c3c5b39711789422096b4d24e00b1b3ac41d87a16a4411673fffc2d56f7fb840d15841413b1b - languageName: node - linkType: hard - "cliui@npm:^3.2.0": version: 3.2.0 resolution: "cliui@npm:3.2.0" @@ -29921,16 +29912,6 @@ __metadata: languageName: node linkType: hard -"cookies@npm:^0.7.0": - version: 0.7.3 - resolution: "cookies@npm:0.7.3" - dependencies: - depd: "npm:~1.1.2" - keygrip: "npm:~1.0.3" - checksum: 10c0/ecb29d0cb442e530bf3f5642e542346d747de0f9f94c092bba4eebd44d4d55dfde6d2cf20e58387ae8dc5d2e1f1562c6623a5b1df1e4539df2ca021ae27b802c - languageName: node - linkType: hard - "copy-anything@npm:^2.0.1": version: 2.0.6 resolution: "copy-anything@npm:2.0.6" @@ -35329,24 +35310,6 @@ __metadata: languageName: node linkType: hard -"fortress@workspace:packages/fortress": - version: 0.0.0-use.local - resolution: "fortress@workspace:packages/fortress" - dependencies: - audit-filter: "npm:0.5.0" - client-sessions: "npm:0.8.x" - ejs: "npm:^3.1.10" - eslint: "npm:^7.32.0" - express: "npm:^4.21.2" - fxa-shared: "workspace:*" - morgan: "npm:^1.10.0" - pm2: "npm:^6.0.14" - prettier: "npm:^3.5.3" - stylelint: "npm:^16.14.1" - stylelint-config-prettier: "npm:^9.0.3" - languageName: unknown - linkType: soft - "forwarded-parse@npm:2.1.2": version: 2.1.2 resolution: "forwarded-parse@npm:2.1.2" @@ -43097,13 +43060,6 @@ __metadata: languageName: node linkType: hard -"keygrip@npm:~1.0.3": - version: 1.0.3 - resolution: "keygrip@npm:1.0.3" - checksum: 10c0/2a94700bbdd6f53c3f77932aa2d211ff7f537472a21d257203aa48972c2fdc71c60f82e661415887ea068061ce3c7532c5fdd7e8efd4390ad154d51f1a5932a9 - languageName: node - linkType: hard - "keygrip@npm:~1.1.0": version: 1.1.0 resolution: "keygrip@npm:1.1.0"