diff --git a/Dockerfile b/Dockerfile index e74920d..a19fa9d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,8 +23,8 @@ RUN node --version && npm --version # Can be a tag, release, but prefer a commit hash because it's not changeable # https://github.com/bitwarden/clients/commit/${VAULT_VERSION} # -# Using https://github.com/bitwarden/clients/releases/tag/web-v2024.11.2 -ARG VAULT_VERSION=3b71950c55f9524fbf6e6801b2a1daf9ac71a792 +# Using https://github.com/bitwarden/clients/releases/tag/web-v2024.12.0 +ARG VAULT_VERSION=e0c8f2ced997fc279c8ded903471ca3fa0fe5e94 ENV VAULT_VERSION=$VAULT_VERSION ENV VAULT_FOLDER=bw_clients ENV CHECKOUT_TAGS=false diff --git a/patches/v2024.12.0.patch b/patches/v2024.12.0.patch new file mode 100644 index 0000000..5282c17 --- /dev/null +++ b/patches/v2024.12.0.patch @@ -0,0 +1,783 @@ +diff --git a/apps/web/config/base.json b/apps/web/config/base.json +index e64ef6ebeb..b41ca4219d 100644 +--- a/apps/web/config/base.json ++++ b/apps/web/config/base.json +@@ -1,11 +1,5 @@ + { + "urls": {}, +- "stripeKey": "pk_test_KPoCfZXu7mznb9uSCPZ2JpTD", +- "braintreeKey": "sandbox_r72q8jq6_9pnxkwm75f87sdc2", +- "paypal": { +- "businessId": "AD3LAUZSNVPJY", +- "buttonAction": "https://www.sandbox.paypal.com/cgi-bin/webscr" +- }, + "dev": { + "port": 8080, + "allowedHosts": "auto" +diff --git a/apps/web/src/app/admin-console/organizations/create/organization-information.component.html b/apps/web/src/app/admin-console/organizations/create/organization-information.component.html +index e0a8006081..789efd9264 100644 +--- a/apps/web/src/app/admin-console/organizations/create/organization-information.component.html ++++ b/apps/web/src/app/admin-console/organizations/create/organization-information.component.html +@@ -12,7 +12,7 @@ + + + +- {{ "billingEmail" | i18n }} ++ {{ "email" | i18n }} + + + +diff --git a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts +index a15882f42d..39958cb881 100644 +--- a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts ++++ b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.ts +@@ -127,6 +127,7 @@ export class OrganizationLayoutComponent implements OnInit { + } + + canShowBillingTab(organization: Organization): boolean { ++ return false; // disable billing tab in Vaultwarden + return canAccessBillingTab(organization); + } + +diff --git a/apps/web/src/app/admin-console/organizations/members/members.component.ts b/apps/web/src/app/admin-console/organizations/members/members.component.ts +index 3e61ec2a20..445f813d17 100644 +--- a/apps/web/src/app/admin-console/organizations/members/members.component.ts ++++ b/apps/web/src/app/admin-console/organizations/members/members.component.ts +@@ -191,11 +191,7 @@ export class MembersComponent extends BaseMembersComponent + .find((p) => p.organizationId === this.organization.id); + this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled; + +- const billingMetadata = await this.billingApiService.getOrganizationBillingMetadata( +- this.organization.id, +- ); +- +- this.orgIsOnSecretsManagerStandalone = billingMetadata.isOnSecretsManagerStandalone; ++ this.orgIsOnSecretsManagerStandalone = false; // don't get billing metadata + + await this.load(); + +diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.html b/apps/web/src/app/admin-console/organizations/settings/account.component.html +index b3fac56c0b..796a1a817a 100644 +--- a/apps/web/src/app/admin-console/organizations/settings/account.component.html ++++ b/apps/web/src/app/admin-console/organizations/settings/account.component.html +@@ -16,7 +16,7 @@ + + + +- {{ "billingEmail" | i18n }} ++ {{ "email" | i18n }} + + + +diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.ts b/apps/web/src/app/admin-console/organizations/settings/account.component.ts +index 5182406564..859a7d86f0 100644 +--- a/apps/web/src/app/admin-console/organizations/settings/account.component.ts ++++ b/apps/web/src/app/admin-console/organizations/settings/account.component.ts +@@ -84,7 +84,7 @@ export class AccountComponent implements OnInit, OnDestroy { + ) {} + + async ngOnInit() { +- this.selfHosted = this.platformUtilsService.isSelfHost(); ++ this.selfHosted = false; // set to false so we can rename organizations + + this.route.params + .pipe( +@@ -177,6 +177,7 @@ export class AccountComponent implements OnInit, OnDestroy { + }; + + submitCollectionManagement = async () => { ++ return; // flexible collections are not supported by Vaultwarden + const request = new OrganizationCollectionManagementUpdateRequest(); + request.limitCollectionCreation = + this.collectionManagementFormGroup.value.limitCollectionCreation; +diff --git a/apps/web/src/app/app.component.html b/apps/web/src/app/app.component.html +index a39c045e0e..9d72e609b4 100644 +--- a/apps/web/src/app/app.component.html ++++ b/apps/web/src/app/app.component.html +@@ -3,7 +3,7 @@ + when the body has the layout_frontend class. Having this match the index allows for a duplicative yet seamless + loading state here for process reloading. --> +
+- Bitwarden ++ Vaultwarden +
+ + +- +- +diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts +index a018710391..c37847a474 100644 +--- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts ++++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts +@@ -187,11 +187,11 @@ export class TwoFactorSetupAuthenticatorComponent + new window.QRious({ + element: document.getElementById("qr"), + value: +- "otpauth://totp/Bitwarden:" + ++ "otpauth://totp/Vaultwarden:" + + Utils.encodeRFC3986URIComponent(email) + + "?secret=" + + encodeURIComponent(this.key) + +- "&issuer=Bitwarden", ++ "&issuer=Vaultwarden", + size: 160, + }); + } +diff --git a/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts b/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts +index 30ae39d481..37e2db43d2 100644 +--- a/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts ++++ b/apps/web/src/app/billing/organizations/organization-billing-history-view.component.ts +@@ -52,6 +52,7 @@ export class OrgBillingHistoryViewComponent implements OnInit, OnDestroy { + + this.loading = true; + ++ /* disable billing history + const openInvoicesPromise = this.organizationBillingApiService.getBillingInvoices( + this.organizationId, + "open", +@@ -85,6 +86,7 @@ export class OrgBillingHistoryViewComponent implements OnInit, OnDestroy { + openInvoices.length <= pageSize || + paidInvoices.length <= pageSize || + transactions.length <= pageSize; ++ */ + + this.loading = false; + } +diff --git a/apps/web/src/app/billing/organizations/organization-plans.component.html b/apps/web/src/app/billing/organizations/organization-plans.component.html +index e1b74abea7..aff83361b6 100644 +--- a/apps/web/src/app/billing/organizations/organization-plans.component.html ++++ b/apps/web/src/app/billing/organizations/organization-plans.component.html +@@ -6,7 +6,7 @@ + > + {{ "loading" | i18n }} + +- ++ + +

{{ "uploadLicenseFileOrg" | i18n }}

+
+@@ -40,12 +40,7 @@ + (onLicenseFileUploaded)="onLicenseFileUploaded($event)" + /> + +- ++ + + !!plan.PasswordManager); +@@ -216,6 +217,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + this.plan = providerDefaultPlan.type; + this.productTier = providerDefaultPlan.productTier; + } ++ end of asking /api/plans in Vaultwarden */ + + if (!this.createOrganization) { + this.upgradeFlowPrefillForm(); +@@ -290,6 +292,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + } + + get selectableProducts() { ++ return null; // there are no products to select in Vaultwarden + if (this.acceptingSponsorship) { + const familyPlan = this.passwordManagerPlans.find( + (plan) => plan.type === PlanType.FamiliesAnnually, +@@ -321,6 +324,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + } + + get selectablePlans() { ++ return null; // no plans to select in Vaultwarden + const selectedProductTierType = this.formGroup.controls.productTier.value; + const result = + this.passwordManagerPlans?.filter( +@@ -462,6 +466,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + } + + get planOffersSecretsManager() { ++ return false; // no support for secrets manager in Vaultwarden + return this.selectedSecretsManagerPlan != null; + } + +@@ -470,6 +475,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + } + + changedProduct() { ++ return; // no choice of products in Vaultwarden + const selectedPlan = this.selectablePlans[0]; + + this.setPlanType(selectedPlan.type); +@@ -605,11 +611,8 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + const collectionCt = collection.encryptedString; + const orgKeys = await this.keyService.makeKeyPair(orgKey[1]); + +- if (this.selfHosted) { +- orgId = await this.createSelfHosted(key, collectionCt, orgKeys); +- } else { +- orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]); +- } ++ // always use createCloudHosted() to disable license file upload ++ orgId = await this.createCloudHosted(key, collectionCt, orgKeys, orgKey[1]); + + this.toastService.showToast({ + variant: "success", +@@ -715,7 +718,9 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + request.billingEmail = this.formGroup.controls.billingEmail.value; + request.initiationPath = "New organization creation in-product"; + request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString); ++ request.planType = PlanType.Free; // always select the free plan in Vaultwarden + ++ /* there is no plan to select in Vaultwarden + if (this.selectedPlan.type === PlanType.Free) { + request.planType = PlanType.Free; + } else { +@@ -749,6 +754,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + + // Secrets Manager + this.buildSecretsManagerRequest(request); ++ end plan selection and no support for secret manager in Vaultwarden */ + + if (this.hasProvider) { + const providerRequest = new ProviderOrganizationCreateRequest( +@@ -828,6 +834,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { + } + + private upgradeFlowPrefillForm() { ++ return; // Vaultwarden only supports free plan + if (this.acceptingSponsorship) { + this.formGroup.controls.productTier.setValue(ProductTierType.Families); + this.changedProduct(); +diff --git a/apps/web/src/app/core/router.service.ts b/apps/web/src/app/core/router.service.ts +index 0790162848..5728616cc8 100644 +--- a/apps/web/src/app/core/router.service.ts ++++ b/apps/web/src/app/core/router.service.ts +@@ -59,7 +59,7 @@ export class RouterService { + .subscribe((event: NavigationEnd) => { + this.currentUrl = event.url; + +- let title = i18nService.t("bitWebVault"); ++ let title = "Vaultwarden Web"; + + if (this.currentUrl.includes("/sm/")) { + title = i18nService.t("bitSecretsManager"); +diff --git a/apps/web/src/app/core/web-platform-utils.service.ts b/apps/web/src/app/core/web-platform-utils.service.ts +index dbd0ef593d..3452567592 100644 +--- a/apps/web/src/app/core/web-platform-utils.service.ts ++++ b/apps/web/src/app/core/web-platform-utils.service.ts +@@ -133,14 +133,17 @@ export class WebPlatformUtilsService implements PlatformUtilsService { + } + + isDev(): boolean { ++ return false; // treat Vaultwarden as production ready + return process.env.NODE_ENV === "development"; + } + + isSelfHost(): boolean { ++ return true; // treat Vaultwarden as self hosted + return WebPlatformUtilsService.isSelfHost(); + } + + static isSelfHost(): boolean { ++ return true; // treat Vaultwarden as self hosted + return process.env.ENV.toString() === "selfhosted"; + } + +diff --git a/apps/web/src/app/layouts/frontend-layout.component.html b/apps/web/src/app/layouts/frontend-layout.component.html +index 72f0f1f1da..cea0867131 100644 +--- a/apps/web/src/app/layouts/frontend-layout.component.html ++++ b/apps/web/src/app/layouts/frontend-layout.component.html +@@ -1,6 +1,11 @@ + +
+- +- © {{ year }} Bitwarden Inc.
++ Vaultwarden Web
+ {{ "versionNumber" | i18n: version }} ++

++
++ A modified version of the Bitwarden® Web Vault for Vaultwarden (an unofficial rewrite of the ++ Bitwarden® server).
++ Vaultwarden is not associated with the Bitwarden® project nor Bitwarden Inc. ++
+
+diff --git a/apps/web/src/app/layouts/header/web-header.component.html b/apps/web/src/app/layouts/header/web-header.component.html +index 7cba19b29a..024b14daad 100644 +--- a/apps/web/src/app/layouts/header/web-header.component.html ++++ b/apps/web/src/app/layouts/header/web-header.component.html +@@ -61,7 +61,12 @@ + + {{ "accountSettings" | i18n }} + +- ++ + + {{ "getHelp" | i18n }} + +diff --git a/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html b/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html +index 08195d95bf..f51a216a14 100644 +--- a/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html ++++ b/apps/web/src/app/layouts/product-switcher/navigation-switcher/navigation-switcher.component.html +@@ -10,10 +10,7 @@ + > + + +-
++
+ {{ "moreFromBitwarden" | i18n }} + + +diff --git a/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html b/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html +index 41346675bb..d366fdf7d7 100644 +--- a/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html ++++ b/apps/web/src/app/layouts/product-switcher/product-switcher-content.component.html +@@ -30,7 +30,7 @@ + + +
+ {{ "moreFromBitwarden" | i18n }} +diff --git a/apps/web/src/app/layouts/user-layout.component.ts b/apps/web/src/app/layouts/user-layout.component.ts +index 88096c9b95..515f1149e6 100644 +--- a/apps/web/src/app/layouts/user-layout.component.ts ++++ b/apps/web/src/app/layouts/user-layout.component.ts +@@ -1,7 +1,7 @@ + import { CommonModule } from "@angular/common"; + import { Component, OnInit } from "@angular/core"; + import { RouterModule } from "@angular/router"; +-import { Observable, concatMap, combineLatest } from "rxjs"; ++import { Observable, of } from "rxjs"; + + import { JslibModule } from "@bitwarden/angular/jslib.module"; + import { ApiService } from "@bitwarden/common/abstractions/api.service"; +@@ -47,24 +47,8 @@ export class UserLayoutComponent implements OnInit { + + await this.syncService.fullSync(false); + +- // We want to hide the subscription menu for organizations that provide premium. +- // Except if the user has premium personally or has a billing history. +- this.showSubscription$ = combineLatest([ +- this.billingAccountProfileStateService.hasPremiumPersonally$, +- this.billingAccountProfileStateService.hasPremiumFromAnyOrganization$, +- ]).pipe( +- concatMap(async ([hasPremiumPersonally, hasPremiumFromOrg]) => { +- const isCloud = !this.platformUtilsService.isSelfHost(); +- +- let billing = null; +- if (isCloud) { +- // TODO: We should remove the need to call this! +- billing = await this.apiService.getUserBillingHistory(); +- } +- +- const cloudAndBillingHistory = isCloud && !billing?.hasNoHistory; +- return hasPremiumPersonally || !hasPremiumFromOrg || cloudAndBillingHistory; +- }), +- ); ++ this.hasFamilySponsorshipAvailable$ = of(false); // disable family Sponsorships in Vaultwarden ++ this.showSponsoredFamilies$ = of(false); // disable family Sponsorships in Vaultwarden ++ this.showSubscription$ = of(false); // always hide subscriptions in Vaultwarden + } + } +diff --git a/apps/web/src/app/platform/web-environment.service.ts b/apps/web/src/app/platform/web-environment.service.ts +index ebddc7491b..7e12389a4a 100644 +--- a/apps/web/src/app/platform/web-environment.service.ts ++++ b/apps/web/src/app/platform/web-environment.service.ts +@@ -36,7 +36,17 @@ export class WebEnvironmentService extends DefaultEnvironmentService { + super(stateProvider, accountService, additionalRegionConfigs); + + // The web vault always uses the current location as the base url +- envUrls.base ??= this.win.location.origin; ++ // If the base URL is `https://vaultwarden.example.com/base/path/`, ++ // `window.location.href` should have one of the following forms: ++ // ++ // - `https://vaultwarden.example.com/base/path/` ++ // - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]` ++ // - `https://vaultwarden.example.com/base/path/?queryParam=...` ++ // ++ // We want to get to just `https://vaultwarden.example.com/base/path`. ++ let baseUrl = this.win.location.href; ++ baseUrl = baseUrl.replace(/(\/+|\/*#.*|\/*\?.*)$/, ""); // Strip off trailing `/`, `#`, `?` and everything after. ++ envUrls.base ??= baseUrl; + + // Find the region + const currentHostname = new URL(this.win.location.href).hostname; +diff --git a/apps/web/src/app/tools/send/add-edit.component.html b/apps/web/src/app/tools/send/add-edit.component.html +index 7eade18a7c..b8f865faa7 100644 +--- a/apps/web/src/app/tools/send/add-edit.component.html ++++ b/apps/web/src/app/tools/send/add-edit.component.html +@@ -230,7 +230,12 @@ + {{ "password" | i18n }} + {{ "newPassword" | i18n }} + +- ++ + + {{ "sendPasswordDesc" | i18n }} + +diff --git a/apps/web/src/app/tools/send/send-access-explainer.component.html b/apps/web/src/app/tools/send/send-access-explainer.component.html +index e8090cb850..284b916514 100644 +--- a/apps/web/src/app/tools/send/send-access-explainer.component.html ++++ b/apps/web/src/app/tools/send/send-access-explainer.component.html +@@ -1,18 +1,5 @@ +
+

+ {{ "sendAccessTaglineProductDesc" | i18n }} +- {{ "sendAccessTaglineLearnMore" | i18n }} +- Bitwarden Send +- {{ "sendAccessTaglineOr" | i18n }} +- {{ +- "sendAccessTaglineSignUp" | i18n +- }} +- {{ "sendAccessTaglineTryToday" | i18n }} +

+
+diff --git a/apps/web/src/index.html b/apps/web/src/index.html +index 0b8ea86491..5d98411f46 100644 +--- a/apps/web/src/index.html ++++ b/apps/web/src/index.html +@@ -5,19 +5,21 @@ + + + +- Bitwarden Web vault ++ Vaultwarden Web + + + + + + ++ ++ + + + + +
+- Bitwarden ++ Vaultwarden +
+ /apps/cli/jest.config.js", + "/apps/desktop/jest.config.js", + "/apps/web/jest.config.js", +- "/bitwarden_license/bit-web/jest.config.js", +- "/bitwarden_license/bit-cli/jest.config.js", +- "/bitwarden_license/bit-common/jest.config.js", + + "/libs/admin-console/jest.config.js", + "/libs/angular/jest.config.js", +diff --git a/libs/angular/src/auth/components/register.component.ts b/libs/angular/src/auth/components/register.component.ts +index ec78a1692a..ce2539585a 100644 +--- a/libs/angular/src/auth/components/register.component.ts ++++ b/libs/angular/src/auth/components/register.component.ts +@@ -110,6 +110,14 @@ export class RegisterComponent extends CaptchaProtectedComponent implements OnIn + } + + async submit(showToast = true) { ++ if (typeof crypto.subtle === "undefined") { ++ this.platformUtilsService.showToast( ++ "error", ++ "This browser requires HTTPS to use the web vault", ++ "Check the Vaultwarden wiki for details on how to enable it", ++ ); ++ return; ++ } + let email = this.formGroup.value.email; + email = email.trim().toLowerCase(); + let name = this.formGroup.value.name; +diff --git a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts +index f805da0700..c720671812 100644 +--- a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts ++++ b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.component.ts +@@ -6,6 +6,8 @@ import { AnonLayoutComponent } from "@bitwarden/auth/angular"; + import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; + import { Icon, Translation } from "@bitwarden/components"; + ++import { BitwardenShield } from "../icons"; ++ + import { AnonLayoutWrapperDataService } from "./anon-layout-wrapper-data.service"; + + export interface AnonLayoutWrapperData { +@@ -152,7 +154,7 @@ export class AnonLayoutWrapperComponent implements OnInit, OnDestroy { + private resetPageData() { + this.pageTitle = null; + this.pageSubtitle = null; +- this.pageIcon = null; ++ this.pageIcon = BitwardenShield; + this.showReadonlyHostname = null; + this.maxWidth = null; + } +diff --git a/libs/auth/src/angular/anon-layout/anon-layout.component.html b/libs/auth/src/angular/anon-layout/anon-layout.component.html +index 3323b6eca0..7be291e7f7 100644 +--- a/libs/auth/src/angular/anon-layout/anon-layout.component.html ++++ b/libs/auth/src/angular/anon-layout/anon-layout.component.html +@@ -8,7 +8,7 @@ + + + +@@ -52,8 +52,14 @@ + + + +-
© {{ year }} Bitwarden Inc.
+-
{{ version }}
++
Vaultwarden Web
++
Version {{ version }}
++
++
++ A modified version of the Bitwarden® Web Vault for Vaultwarden (an unofficial rewrite of ++ the Bitwarden® server).
++ Vaultwarden is not associated with the Bitwarden® project nor Bitwarden Inc. ++
+
+ + +diff --git a/libs/components/src/tw-theme.css b/libs/components/src/tw-theme.css +index 0a5a66337a..af5f0fb57a 100644 +--- a/libs/components/src/tw-theme.css ++++ b/libs/components/src/tw-theme.css +@@ -7,13 +7,13 @@ + --color-background: 255 255 255; + --color-background-alt: 243 246 249; + --color-background-alt2: 23 92 219; +- --color-background-alt3: 26 65 172; +- --color-background-alt4: 2 15 102; ++ --color-background-alt3: 33 37 41; /* bg of menu panel */ ++ --color-background-alt4: 16 18 21; /* bg of active menu item */ + + --color-primary-100: 219 229 246; +- --color-primary-300: 121 161 233; +- --color-primary-600: 23 93 220; +- --color-primary-700: 26 65 172; ++ --color-primary-300: 108 117 125; /* hover of menu items */ ++ --color-primary-600: 18 82 163; /* color of links and buttons */ ++ --color-primary-700: 13 60 119; /* hover of links and buttons */ + + --color-secondary-100: 230 233 239; + --color-secondary-300: 168 179 200; +@@ -49,7 +49,7 @@ + --color-text-alt2: 255 255 255; + --color-text-code: 192 17 118; + +- --color-marketing-logo: 23 93 220; ++ --color-marketing-logo: 15 15 15; /* The Vaultwarden Logo */ + + --tw-ring-offset-color: #ffffff; + } +diff --git a/libs/components/tailwind.config.js b/libs/components/tailwind.config.js +index 7a53c82ec5..9d0a337bd2 100644 +--- a/libs/components/tailwind.config.js ++++ b/libs/components/tailwind.config.js +@@ -6,7 +6,6 @@ config.content = [ + "libs/auth/src/**/*.{html,ts,mdx}", + "apps/web/src/**/*.{html,ts,mdx}", + "apps/browser/src/**/*.{html,ts,mdx}", +- "bitwarden_license/bit-web/src/**/*.{html,ts,mdx}", + ".storybook/preview.tsx", + ]; + config.safelist = [ +diff --git a/tailwind.config.js b/tailwind.config.js +index 637c28a54e..7afcea4e65 100644 +--- a/tailwind.config.js ++++ b/tailwind.config.js +@@ -10,7 +10,6 @@ config.content = [ + "./libs/tools/send/send-ui/src/*.{html,ts,mdx}", + "./libs/vault/src/**/*.{html,ts,mdx}", + "./apps/web/src/**/*.{html,ts,mdx}", +- "./bitwarden_license/bit-web/src/**/*.{html,ts,mdx}", + "./.storybook/preview.js", + ]; + config.safelist = [ +diff --git a/tsconfig.json b/tsconfig.json +index 225321663c..7a7dde454f 100644 +--- a/tsconfig.json ++++ b/tsconfig.json +@@ -37,8 +37,7 @@ + "@bitwarden/tools-card": ["./libs/tools/card/src"], + "@bitwarden/node/*": ["./libs/node/src/*"], + "@bitwarden/web-vault/*": ["./apps/web/src/*"], +- "@bitwarden/vault": ["./libs/vault/src"], +- "@bitwarden/bit-common/*": ["./bitwarden_license/bit-common/src/*"] ++ "@bitwarden/vault": ["./libs/vault/src"] + }, + "plugins": [ + { +@@ -52,9 +51,7 @@ + "apps/browser/src/**/*", + "libs/*/src/**/*", + "libs/tools/send/**/src/**/*", +- "libs/tools/card/src/**/*", +- "bitwarden_license/bit-web/src/**/*", +- "bitwarden_license/bit-common/src/**/*" ++ "libs/tools/card/src/**/*" + ], + "exclude": [ + "apps/web/src/**/*.spec.ts",