diff --git a/apps/browser/src/autofill/enums/autofill-overlay.enum.ts b/apps/browser/src/autofill/enums/autofill-overlay.enum.ts
index 9cc457f3c1a..d0b970671a8 100644
--- a/apps/browser/src/autofill/enums/autofill-overlay.enum.ts
+++ b/apps/browser/src/autofill/enums/autofill-overlay.enum.ts
@@ -21,6 +21,8 @@ export const RedirectFocusDirection = {
Next: "next",
} as const;
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum InlineMenuFillType {
AccountCreationUsername = 5,
PasswordGeneration = 6,
diff --git a/apps/browser/src/autofill/fido2/content/messaging/message.ts b/apps/browser/src/autofill/fido2/content/messaging/message.ts
index 5815be9eb60..640af22ab9a 100644
--- a/apps/browser/src/autofill/fido2/content/messaging/message.ts
+++ b/apps/browser/src/autofill/fido2/content/messaging/message.ts
@@ -5,6 +5,8 @@ import {
AssertCredentialResult,
} from "@bitwarden/common/platform/abstractions/fido2/fido2-client.service.abstraction";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum MessageType {
CredentialCreationRequest,
CredentialCreationResponse,
diff --git a/apps/browser/src/tools/popup/send-v2/send-v2.component.ts b/apps/browser/src/tools/popup/send-v2/send-v2.component.ts
index 49804abda5d..def425a51a5 100644
--- a/apps/browser/src/tools/popup/send-v2/send-v2.component.ts
+++ b/apps/browser/src/tools/popup/send-v2/send-v2.component.ts
@@ -26,6 +26,8 @@ import { PopOutComponent } from "../../../platform/popup/components/pop-out.comp
import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-header.component";
import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SendState {
Empty,
NoResults,
diff --git a/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts b/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts
index fcca125c2b6..0133bccd25c 100644
--- a/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts
+++ b/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts
@@ -10,6 +10,8 @@ import {
import { I18nPipe } from "@bitwarden/ui-common";
import { DarkImageSourceDirective, VaultCarouselModule } from "@bitwarden/vault";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AtRiskCarouselDialogResult {
Dismissed = "dismissed",
}
diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts
index 137f2a9dac3..4daffa6a9b8 100644
--- a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts
+++ b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts
@@ -30,6 +30,8 @@ export interface GeneratorDialogResult {
generatedValue?: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum GeneratorDialogAction {
Selected = "selected",
Canceled = "canceled",
diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts
index 64805a02394..4a8625f982c 100644
--- a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts
+++ b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts
@@ -55,6 +55,8 @@ import { VaultPageService } from "./vault-page.service";
import { AutofillVaultListItemsComponent, VaultListItemsContainerComponent } from ".";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum VaultState {
Empty,
NoResults,
diff --git a/apps/desktop/native-messaging-test-runner/src/ipc.service.ts b/apps/desktop/native-messaging-test-runner/src/ipc.service.ts
index b02ff1a4225..d8616e9757a 100644
--- a/apps/desktop/native-messaging-test-runner/src/ipc.service.ts
+++ b/apps/desktop/native-messaging-test-runner/src/ipc.service.ts
@@ -15,6 +15,8 @@ const DEFAULT_MESSAGE_TIMEOUT = 10 * 1000; // 10 seconds
export type MessageHandler = (MessageCommon) => void;
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum IPCConnectionState {
Disconnected = "disconnected",
Connecting = "connecting",
diff --git a/apps/desktop/src/app/tools/send/send.component.ts b/apps/desktop/src/app/tools/send/send.component.ts
index cc3007ae133..6c2c3ed53c6 100644
--- a/apps/desktop/src/app/tools/send/send.component.ts
+++ b/apps/desktop/src/app/tools/send/send.component.ts
@@ -25,6 +25,8 @@ import { SearchBarService } from "../../layout/search/search-bar.service";
import { AddEditComponent } from "./add-edit.component";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum Action {
None = "",
Add = "add",
diff --git a/apps/desktop/src/autofill/models/ssh-agent-setting.ts b/apps/desktop/src/autofill/models/ssh-agent-setting.ts
index f332cc93ee1..1775cf35588 100644
--- a/apps/desktop/src/autofill/models/ssh-agent-setting.ts
+++ b/apps/desktop/src/autofill/models/ssh-agent-setting.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SshAgentPromptType {
Always = "always",
Never = "never",
diff --git a/apps/desktop/src/types/biometric-message.ts b/apps/desktop/src/types/biometric-message.ts
index f7a7ef0c507..7616b265005 100644
--- a/apps/desktop/src/types/biometric-message.ts
+++ b/apps/desktop/src/types/biometric-message.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BiometricAction {
Authenticate = "authenticate",
GetStatus = "status",
diff --git a/apps/desktop/src/vault/app/vault/credential-generator-dialog.component.ts b/apps/desktop/src/vault/app/vault/credential-generator-dialog.component.ts
index 2858d7330e5..204615443ba 100644
--- a/apps/desktop/src/vault/app/vault/credential-generator-dialog.component.ts
+++ b/apps/desktop/src/vault/app/vault/credential-generator-dialog.component.ts
@@ -31,6 +31,8 @@ export interface CredentialGeneratorDialogResult {
generatedValue?: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CredentialGeneratorDialogAction {
Selected = "selected",
Canceled = "canceled",
diff --git a/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts b/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts
index dd19c66f21e..147340e6a00 100644
--- a/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts
+++ b/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts
@@ -43,6 +43,8 @@ export interface BulkCollectionsDialogParams {
collections: CollectionView[];
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BulkCollectionsDialogResult {
Saved = "saved",
Canceled = "canceled",
diff --git a/apps/web/src/app/admin-console/organizations/collections/vault.component.ts b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts
index 687aef9b671..96c00faceb2 100644
--- a/apps/web/src/app/admin-console/organizations/collections/vault.component.ts
+++ b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts
@@ -132,6 +132,8 @@ import { VaultHeaderComponent } from "./vault-header/vault-header.component";
const BroadcasterSubscriptionId = "OrgVaultComponent";
const SearchTextDebounceInterval = 200;
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum AddAccessStatusType {
All = 0,
AddAccess = 1,
diff --git a/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts b/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts
index 2a5af32ecc2..f29b4b642cb 100644
--- a/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts
+++ b/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts
@@ -58,6 +58,8 @@ import { AddEditGroupDetail } from "./../core/views/add-edit-group-detail";
/**
* Indices for the available tabs in the dialog
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum GroupAddEditTabType {
Info = 0,
Members = 1,
@@ -82,6 +84,8 @@ export interface GroupAddEditDialogParams {
initialTab?: GroupAddEditTabType;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum GroupAddEditDialogResultType {
Saved = "saved",
Canceled = "canceled",
diff --git a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts
index c90a2a657e7..8349b44c735 100644
--- a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts
+++ b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts
@@ -64,6 +64,8 @@ import { commaSeparatedEmails } from "./validators/comma-separated-emails.valida
import { inputEmailLimitValidator } from "./validators/input-email-limit.validator";
import { orgSeatLimitReachedValidator } from "./validators/org-seat-limit-reached.validator";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum MemberDialogTab {
Role = 0,
Groups = 1,
@@ -92,6 +94,8 @@ export interface EditMemberDialogParams extends CommonMemberDialogParams {
export type MemberDialogParams = EditMemberDialogParams | AddMemberDialogParams;
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum MemberDialogResult {
Saved = "saved",
Canceled = "canceled",
diff --git a/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts b/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts
index f08cb0b7d7c..4e78d4dc91f 100644
--- a/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts
+++ b/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts
@@ -50,6 +50,8 @@ export type ResetPasswordDialogData = {
organizationId: string;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ResetPasswordDialogResult {
Ok = "ok",
}
diff --git a/apps/web/src/app/admin-console/organizations/members/services/organization-user-reset-password/organization-user-reset-password.service.ts b/apps/web/src/app/admin-console/organizations/members/services/organization-user-reset-password/organization-user-reset-password.service.ts
index 78d2d8fd165..ecf4d26eb52 100644
--- a/apps/web/src/app/admin-console/organizations/members/services/organization-user-reset-password/organization-user-reset-password.service.ts
+++ b/apps/web/src/app/admin-console/organizations/members/services/organization-user-reset-password/organization-user-reset-password.service.ts
@@ -112,7 +112,7 @@ export class OrganizationUserResetPasswordService
if (orgSymKey == null) {
throw new Error("No org key found");
}
- const decPrivateKey = await this.encryptService.decryptToBytes(
+ const decPrivateKey = await this.encryptService.unwrapDecapsulationKey(
new EncString(response.encryptedPrivateKey),
orgSymKey,
);
diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts
index 49f4d15a100..4d722840e23 100644
--- a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts
+++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts
@@ -41,6 +41,8 @@ export type PolicyEditDialogData = {
organizationId: string;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PolicyEditDialogResult {
Saved = "saved",
UpgradePlan = "upgrade-plan",
diff --git a/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts
index c23dcf2c8f2..e942eecbd37 100644
--- a/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts
+++ b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts
@@ -71,6 +71,8 @@ export interface DeleteOrganizationDialogParams {
requestType: "InvalidFamiliesForEnterprise" | "RegularDelete";
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum DeleteOrganizationDialogResult {
Deleted = "deleted",
Canceled = "canceled",
diff --git a/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts b/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts
index edd0bfcaada..1db1fc8a06e 100644
--- a/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts
+++ b/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.component.ts
@@ -26,6 +26,8 @@ import {
Permission,
} from "./access-selector.models";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PermissionMode {
/**
* No permission controls or column present. No permission values are emitted.
diff --git a/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.models.ts b/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.models.ts
index 8702c0f7a6c..884483d32b0 100644
--- a/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.models.ts
+++ b/apps/web/src/app/admin-console/organizations/shared/components/access-selector/access-selector.models.ts
@@ -15,6 +15,8 @@ import { GroupView } from "../../../core";
/**
* Permission options that replace/correspond with manage, readOnly, and hidePassword server fields.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CollectionPermission {
View = "view",
ViewExceptPass = "viewExceptPass",
@@ -23,6 +25,8 @@ export enum CollectionPermission {
Manage = "manage",
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AccessItemType {
Collection,
Group,
diff --git a/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts
index 37d0ebbd195..07bff3aba64 100644
--- a/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts
+++ b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts
@@ -65,6 +65,8 @@ import {
} from "../access-selector/access-selector.models";
import { AccessSelectorModule } from "../access-selector/access-selector.module";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CollectionDialogTabType {
Info = 0,
Access = 1,
@@ -76,6 +78,8 @@ export enum CollectionDialogTabType {
* @readonly
* @enum {string}
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum ButtonType {
/** Displayed when the user has reached the maximum number of collections allowed for the organization. */
Upgrade = "upgrade",
@@ -103,6 +107,8 @@ export interface CollectionDialogResult {
collection: CollectionResponse | CollectionView;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CollectionDialogAction {
Saved = "saved",
Canceled = "canceled",
diff --git a/apps/web/src/app/auth/core/enums/webauthn-login-credential-prf-status.enum.ts b/apps/web/src/app/auth/core/enums/webauthn-login-credential-prf-status.enum.ts
index 7dc8217fde5..3073917e57b 100644
--- a/apps/web/src/app/auth/core/enums/webauthn-login-credential-prf-status.enum.ts
+++ b/apps/web/src/app/auth/core/enums/webauthn-login-credential-prf-status.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum WebauthnLoginCredentialPrfStatus {
Enabled = 0,
Supported = 1,
diff --git a/apps/web/src/app/auth/emergency-access/enums/emergency-access-status-type.ts b/apps/web/src/app/auth/emergency-access/enums/emergency-access-status-type.ts
index 94400f34e6e..16aa2546101 100644
--- a/apps/web/src/app/auth/emergency-access/enums/emergency-access-status-type.ts
+++ b/apps/web/src/app/auth/emergency-access/enums/emergency-access-status-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EmergencyAccessStatusType {
Invited = 0,
Accepted = 1,
diff --git a/apps/web/src/app/auth/emergency-access/enums/emergency-access-type.ts b/apps/web/src/app/auth/emergency-access/enums/emergency-access-type.ts
index 61a366c433e..ecb0c5a3d07 100644
--- a/apps/web/src/app/auth/emergency-access/enums/emergency-access-type.ts
+++ b/apps/web/src/app/auth/emergency-access/enums/emergency-access-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EmergencyAccessType {
View = 0,
Takeover = 1,
diff --git a/apps/web/src/app/components/selectable-avatar.component.ts b/apps/web/src/app/auth/settings/account/selectable-avatar.component.ts
similarity index 100%
rename from apps/web/src/app/components/selectable-avatar.component.ts
rename to apps/web/src/app/auth/settings/account/selectable-avatar.component.ts
diff --git a/apps/web/src/app/auth/settings/emergency-access/confirm/emergency-access-confirm.component.ts b/apps/web/src/app/auth/settings/emergency-access/confirm/emergency-access-confirm.component.ts
index f3fd19a4e8b..95afc167374 100644
--- a/apps/web/src/app/auth/settings/emergency-access/confirm/emergency-access-confirm.component.ts
+++ b/apps/web/src/app/auth/settings/emergency-access/confirm/emergency-access-confirm.component.ts
@@ -8,6 +8,8 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service"
import { DialogConfig, DialogRef, DIALOG_DATA, DialogService } from "@bitwarden/components";
import { KeyService } from "@bitwarden/key-management";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EmergencyAccessConfirmDialogResult {
Confirmed = "confirmed",
}
diff --git a/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts b/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts
index cf52969c244..1a6510ef011 100644
--- a/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts
+++ b/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts
@@ -26,6 +26,8 @@ export type EmergencyAccessAddEditDialogData = {
readOnly: boolean;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EmergencyAccessAddEditDialogResult {
Saved = "saved",
Canceled = "canceled",
diff --git a/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts b/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts
index c80f82ae126..edb85dc0f1a 100644
--- a/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts
+++ b/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts
@@ -24,6 +24,8 @@ import { KdfType, KdfConfigService, KeyService } from "@bitwarden/key-management
import { EmergencyAccessService } from "../../../emergency-access";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EmergencyAccessTakeoverResultType {
Done = "done",
}
diff --git a/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts b/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts
index 591fe3816dc..8e7e25896ab 100644
--- a/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts
+++ b/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts
@@ -19,6 +19,8 @@ import { PendingWebauthnLoginCredentialView } from "../../../core/views/pending-
import { CreatePasskeyFailedIcon } from "./create-passkey-failed.icon";
import { CreatePasskeyIcon } from "./create-passkey.icon";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CreateCredentialDialogResult {
Success,
}
diff --git a/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.html b/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.html
index d947ea96dfb..64a9781b7cf 100644
--- a/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.html
+++ b/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.html
@@ -51,8 +51,38 @@
{{ "paymentType" | i18n }}
+
+ @if (trialLength === 0) {
+ @let priceLabel =
+ subscriptionProduct === SubscriptionProduct.PasswordManager
+ ? "passwordManagerPlanPrice"
+ : "secretsManagerPlanPrice";
+
+
+
+ {{ priceLabel | i18n }}: {{ getPriceFor(formGroup.value.cadence) | currency: "USD $" }}
+
+ {{ "estimatedTax" | i18n }}:
+ @if (fetchingTaxAmount) {
+
+ } @else {
+ {{ taxAmount | currency: "USD $" }}
+ }
+
+
+
+
+ {{ "total" | i18n }}:
+ @if (fetchingTaxAmount) {
+
+ } @else {
+ {{ total | currency: "USD $" }}/{{ interval | i18n }}
+ }
+
+
+ }
+
+
+
+ {{ "loading" | i18n }}
+
diff --git a/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.ts b/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.ts
index c6248a06a89..63c42139648 100644
--- a/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.ts
+++ b/apps/web/src/app/billing/accounts/trial-initiation/trial-billing-step.component.ts
@@ -1,7 +1,16 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
-import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from "@angular/core";
+import {
+ Component,
+ EventEmitter,
+ Input,
+ OnDestroy,
+ OnInit,
+ Output,
+ ViewChild,
+} from "@angular/core";
import { FormBuilder, Validators } from "@angular/forms";
+import { from, Subject, switchMap, takeUntil } from "rxjs";
import { ManageTaxInformationComponent } from "@bitwarden/angular/billing/components";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
@@ -12,7 +21,14 @@ import {
PaymentInformation,
PlanInformation,
} from "@bitwarden/common/billing/abstractions/organization-billing.service";
-import { PaymentMethodType, PlanType, ProductTierType } from "@bitwarden/common/billing/enums";
+import { TaxServiceAbstraction } from "@bitwarden/common/billing/abstractions/tax.service.abstraction";
+import {
+ PaymentMethodType,
+ PlanType,
+ ProductTierType,
+ ProductType,
+} from "@bitwarden/common/billing/enums";
+import { PreviewTaxAmountForOrganizationTrialRequest } from "@bitwarden/common/billing/models/request/tax";
import { PlanResponse } from "@bitwarden/common/billing/models/response/plan.response";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
@@ -34,11 +50,15 @@ export interface OrganizationCreatedEvent {
planDescription: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum SubscriptionCadence {
Annual,
Monthly,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SubscriptionProduct {
PasswordManager,
SecretsManager,
@@ -50,7 +70,7 @@ export enum SubscriptionProduct {
imports: [BillingSharedModule],
standalone: true,
})
-export class TrialBillingStepComponent implements OnInit {
+export class TrialBillingStepComponent implements OnInit, OnDestroy {
@ViewChild(PaymentComponent) paymentComponent: PaymentComponent;
@ViewChild(ManageTaxInformationComponent) taxInfoComponent: ManageTaxInformationComponent;
@Input() organizationInfo: OrganizationInfo;
@@ -60,6 +80,7 @@ export class TrialBillingStepComponent implements OnInit {
@Output() organizationCreated = new EventEmitter();
loading = true;
+ fetchingTaxAmount = false;
annualCadence = SubscriptionCadence.Annual;
monthlyCadence = SubscriptionCadence.Monthly;
@@ -73,6 +94,12 @@ export class TrialBillingStepComponent implements OnInit {
annualPlan?: PlanResponse;
monthlyPlan?: PlanResponse;
+ taxAmount = 0;
+
+ private destroy$ = new Subject();
+
+ protected readonly SubscriptionProduct = SubscriptionProduct;
+
constructor(
private apiService: ApiService,
private i18nService: I18nService,
@@ -80,6 +107,7 @@ export class TrialBillingStepComponent implements OnInit {
private messagingService: MessagingService,
private organizationBillingService: OrganizationBillingService,
private toastService: ToastService,
+ private taxService: TaxServiceAbstraction,
) {}
async ngOnInit(): Promise {
@@ -87,9 +115,26 @@ export class TrialBillingStepComponent implements OnInit {
this.applicablePlans = plans.data.filter(this.isApplicable);
this.annualPlan = this.findPlanFor(SubscriptionCadence.Annual);
this.monthlyPlan = this.findPlanFor(SubscriptionCadence.Monthly);
+
+ if (this.trialLength === 0) {
+ this.formGroup.controls.cadence.valueChanges
+ .pipe(
+ switchMap((cadence) => from(this.previewTaxAmount(cadence))),
+ takeUntil(this.destroy$),
+ )
+ .subscribe((taxAmount) => {
+ this.taxAmount = taxAmount;
+ });
+ }
+
this.loading = false;
}
+ ngOnDestroy() {
+ this.destroy$.next();
+ this.destroy$.complete();
+ }
+
async submit(): Promise {
if (!this.taxInfoComponent.validate()) {
return;
@@ -115,7 +160,11 @@ export class TrialBillingStepComponent implements OnInit {
this.messagingService.send("organizationCreated", { organizationId });
}
- protected changedCountry() {
+ async onTaxInformationChanged() {
+ if (this.trialLength === 0) {
+ this.taxAmount = await this.previewTaxAmount(this.formGroup.value.cadence);
+ }
+
this.paymentComponent.showBankAccount =
this.taxInfoComponent.getTaxInformation().country === "US";
if (
@@ -170,6 +219,7 @@ export class TrialBillingStepComponent implements OnInit {
const payment: PaymentInformation = {
paymentMethod,
billing: this.getBillingInformationFromTaxInfoComponent(),
+ skipTrial: this.trialLength === 0,
};
const response = await this.organizationBillingService.purchaseSubscription({
@@ -250,4 +300,45 @@ export class TrialBillingStepComponent implements OnInit {
const notDisabledOrLegacy = !plan.disabled && !plan.legacyYear;
return hasCorrectProductType && notDisabledOrLegacy;
}
+
+ private previewTaxAmount = async (cadence: SubscriptionCadence): Promise => {
+ this.fetchingTaxAmount = true;
+
+ if (!this.taxInfoComponent.validate()) {
+ return 0;
+ }
+
+ const plan = this.findPlanFor(cadence);
+
+ const productType =
+ this.subscriptionProduct === SubscriptionProduct.PasswordManager
+ ? ProductType.PasswordManager
+ : ProductType.SecretsManager;
+
+ const taxInformation = this.taxInfoComponent.getTaxInformation();
+
+ const request: PreviewTaxAmountForOrganizationTrialRequest = {
+ planType: plan.type,
+ productType,
+ taxInformation: {
+ ...taxInformation,
+ },
+ };
+
+ const response = await this.taxService.previewTaxAmountForOrganizationTrial(request);
+ this.fetchingTaxAmount = false;
+ return response.taxAmount;
+ };
+
+ get price() {
+ return this.getPriceFor(this.formGroup.value.cadence);
+ }
+
+ get total() {
+ return this.price + this.taxAmount;
+ }
+
+ get interval() {
+ return this.formGroup.value.cadence === SubscriptionCadence.Annual ? "year" : "month";
+ }
}
diff --git a/apps/web/src/app/billing/organizations/change-plan-dialog.component.ts b/apps/web/src/app/billing/organizations/change-plan-dialog.component.ts
index 8cff90edd5b..49c5bb775b1 100644
--- a/apps/web/src/app/billing/organizations/change-plan-dialog.component.ts
+++ b/apps/web/src/app/billing/organizations/change-plan-dialog.component.ts
@@ -74,11 +74,15 @@ type ChangePlanDialogParams = {
productTierType: ProductTierType;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ChangePlanDialogResultType {
Closed = "closed",
Submitted = "submitted",
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PlanCardState {
Selected = "selected",
NotSelected = "not_selected",
diff --git a/apps/web/src/app/billing/organizations/download-license.component.ts b/apps/web/src/app/billing/organizations/download-license.component.ts
index fecb58a7a9d..66778aec50f 100644
--- a/apps/web/src/app/billing/organizations/download-license.component.ts
+++ b/apps/web/src/app/billing/organizations/download-license.component.ts
@@ -7,6 +7,8 @@ import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-conso
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
import { DialogConfig, DIALOG_DATA, DialogRef, DialogService } from "@bitwarden/components";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum DownloadLicenseDialogResult {
Cancelled = "cancelled",
Downloaded = "downloaded",
diff --git a/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.ts b/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.ts
index e6854a5216b..2189bfa830f 100644
--- a/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.ts
+++ b/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.ts
@@ -27,6 +27,8 @@ import { DialogService, ToastService } from "@bitwarden/components";
import { BillingSyncKeyComponent } from "./billing-sync-key.component";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum LicenseOptions {
SYNC = 0,
UPLOAD = 1,
diff --git a/apps/web/src/app/billing/shared/add-credit-dialog.component.ts b/apps/web/src/app/billing/shared/add-credit-dialog.component.ts
index 45dab542ce8..ec6e251418b 100644
--- a/apps/web/src/app/billing/shared/add-credit-dialog.component.ts
+++ b/apps/web/src/app/billing/shared/add-credit-dialog.component.ts
@@ -21,6 +21,8 @@ export interface AddCreditDialogData {
organizationId: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AddCreditDialogResult {
Added = "added",
Cancelled = "cancelled",
diff --git a/apps/web/src/app/billing/shared/adjust-payment-dialog/adjust-payment-dialog.component.ts b/apps/web/src/app/billing/shared/adjust-payment-dialog/adjust-payment-dialog.component.ts
index e7b7cc78250..9d32becd1bb 100644
--- a/apps/web/src/app/billing/shared/adjust-payment-dialog/adjust-payment-dialog.component.ts
+++ b/apps/web/src/app/billing/shared/adjust-payment-dialog/adjust-payment-dialog.component.ts
@@ -30,6 +30,8 @@ export interface AdjustPaymentDialogParams {
providerId?: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AdjustPaymentDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/apps/web/src/app/billing/shared/adjust-storage-dialog/adjust-storage-dialog.component.ts b/apps/web/src/app/billing/shared/adjust-storage-dialog/adjust-storage-dialog.component.ts
index 3acba414df4..6cd17218f02 100644
--- a/apps/web/src/app/billing/shared/adjust-storage-dialog/adjust-storage-dialog.component.ts
+++ b/apps/web/src/app/billing/shared/adjust-storage-dialog/adjust-storage-dialog.component.ts
@@ -22,6 +22,8 @@ export interface AdjustStorageDialogParams {
organizationId?: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AdjustStorageDialogResultType {
Submitted = "submitted",
Closed = "closed",
diff --git a/apps/web/src/app/billing/shared/offboarding-survey.component.ts b/apps/web/src/app/billing/shared/offboarding-survey.component.ts
index cecbc302f40..62213c1fe94 100644
--- a/apps/web/src/app/billing/shared/offboarding-survey.component.ts
+++ b/apps/web/src/app/billing/shared/offboarding-survey.component.ts
@@ -25,6 +25,8 @@ type OrganizationOffboardingParams = {
export type OffboardingSurveyDialogParams = UserOffboardingParams | OrganizationOffboardingParams;
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OffboardingSurveyDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/apps/web/src/app/billing/shared/update-license-types.ts b/apps/web/src/app/billing/shared/update-license-types.ts
index 8f939ac62a9..8ba13541ba8 100644
--- a/apps/web/src/app/billing/shared/update-license-types.ts
+++ b/apps/web/src/app/billing/shared/update-license-types.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum UpdateLicenseDialogResult {
Updated = "updated",
Cancelled = "cancelled",
diff --git a/apps/web/src/app/dirt/reports/reports.ts b/apps/web/src/app/dirt/reports/reports.ts
index 500ae23e5cf..c47928af1e9 100644
--- a/apps/web/src/app/dirt/reports/reports.ts
+++ b/apps/web/src/app/dirt/reports/reports.ts
@@ -7,6 +7,8 @@ import { ReportUnsecuredWebsites } from "./icons/report-unsecured-websites.icon"
import { ReportWeakPasswords } from "./icons/report-weak-passwords.icon";
import { ReportEntry } from "./shared";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ReportType {
ExposedPasswords = "exposedPasswords",
ReusedPasswords = "reusedPasswords",
diff --git a/apps/web/src/app/dirt/reports/shared/models/report-variant.ts b/apps/web/src/app/dirt/reports/shared/models/report-variant.ts
index 3beba65f7d9..48b213f4cf6 100644
--- a/apps/web/src/app/dirt/reports/shared/models/report-variant.ts
+++ b/apps/web/src/app/dirt/reports/shared/models/report-variant.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ReportVariant {
Enabled = "Enabled",
RequiresPremium = "RequiresPremium",
diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts
index 30d1dd1af75..ab6c6cc5d72 100644
--- a/apps/web/src/app/shared/loose-components.module.ts
+++ b/apps/web/src/app/shared/loose-components.module.ts
@@ -22,6 +22,7 @@ import { DangerZoneComponent } from "../auth/settings/account/danger-zone.compon
import { DeauthorizeSessionsComponent } from "../auth/settings/account/deauthorize-sessions.component";
import { DeleteAccountDialogComponent } from "../auth/settings/account/delete-account-dialog.component";
import { ProfileComponent } from "../auth/settings/account/profile.component";
+import { SelectableAvatarComponent } from "../auth/settings/account/selectable-avatar.component";
import { EmergencyAccessConfirmComponent } from "../auth/settings/emergency-access/confirm/emergency-access-confirm.component";
import { EmergencyAccessAddEditComponent } from "../auth/settings/emergency-access/emergency-access-add-edit.component";
import { EmergencyAccessComponent } from "../auth/settings/emergency-access/emergency-access.component";
@@ -39,7 +40,6 @@ import { VerifyRecoverDeleteComponent } from "../auth/verify-recover-delete.comp
import { SponsoredFamiliesComponent } from "../billing/settings/sponsored-families.component";
import { SponsoringOrgRowComponent } from "../billing/settings/sponsoring-org-row.component";
import { DynamicAvatarComponent } from "../components/dynamic-avatar.component";
-import { SelectableAvatarComponent } from "../components/selectable-avatar.component";
import { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from "../dirt/reports/pages/organizations/exposed-passwords-report.component";
import { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from "../dirt/reports/pages/organizations/inactive-two-factor-report.component";
import { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from "../dirt/reports/pages/organizations/reused-passwords-report.component";
diff --git a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts
index 460b8d58d63..10c35f861b9 100644
--- a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts
+++ b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts
@@ -95,6 +95,8 @@ export interface VaultItemDialogParams {
restore?: (c: CipherView) => Promise;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum VaultItemDialogResult {
/**
* A cipher was saved (created or updated).
diff --git a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts
index 2d0aa0231f1..e20efa9dbb8 100644
--- a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts
+++ b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts
@@ -26,6 +26,8 @@ export interface WebVaultGeneratorDialogResult {
generatedValue?: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum WebVaultGeneratorDialogAction {
Selected = "selected",
Canceled = "canceled",
diff --git a/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts b/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts
index 5dcbf0d4e78..621e0ec88c5 100644
--- a/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts
+++ b/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts
@@ -35,6 +35,8 @@ import { WebCipherFormGenerationService } from "../services/web-cipher-form-gene
/**
* The result of the AddEditCipherDialogV2 component.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AddEditCipherDialogResult {
Edited = "edited",
Added = "added",
diff --git a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts
index f8084b03e33..1650b0f371f 100644
--- a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts
+++ b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts
@@ -29,6 +29,8 @@ export interface BulkDeleteDialogParams {
unassignedCiphers?: string[];
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BulkDeleteDialogResult {
Deleted = "deleted",
Canceled = "canceled",
diff --git a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts
index 8f0827e4b51..d287c430d49 100644
--- a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts
+++ b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts
@@ -23,6 +23,8 @@ export interface BulkMoveDialogParams {
cipherIds?: string[];
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BulkMoveDialogResult {
Moved = "moved",
Canceled = "canceled",
diff --git a/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts b/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts
index ad6cbfad43d..6a3c5663d93 100644
--- a/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts
+++ b/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts
@@ -113,6 +113,8 @@ export interface FolderAddEditDialogParams {
folderId: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum FolderAddEditDialogResult {
Deleted = "deleted",
Canceled = "canceled",
diff --git a/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts b/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts
index 1fa5ae1ad8b..ca16541f88f 100644
--- a/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts
@@ -17,6 +17,8 @@ import { UserId } from "@bitwarden/common/types/guid";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { PBKDF2KdfConfig, KdfConfigService, KdfType } from "@bitwarden/key-management";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum VisibleVaultBanner {
KDFSettings = "kdf-settings",
OutdatedBrowser = "outdated-browser",
diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts
index 0f949e17146..7566dbdc507 100644
--- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts
@@ -15,6 +15,8 @@ export type VaultFilterType =
| FolderFilter
| CollectionFilter;
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum VaultFilterLabel {
OrganizationFilter = "organizationFilter",
TypeFilter = "typeFilter",
diff --git a/apps/web/src/app/vault/individual-vault/view.component.ts b/apps/web/src/app/vault/individual-vault/view.component.ts
index e7b06cbb8d6..f52a4da3ffb 100644
--- a/apps/web/src/app/vault/individual-vault/view.component.ts
+++ b/apps/web/src/app/vault/individual-vault/view.component.ts
@@ -54,6 +54,8 @@ export interface ViewCipherDialogParams {
disableEdit?: boolean;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ViewCipherDialogResult {
Edited = "edited",
Deleted = "deleted",
diff --git a/apps/web/src/app/vault/services/browser-extension-prompt.service.ts b/apps/web/src/app/vault/services/browser-extension-prompt.service.ts
index 5617d4aef75..f928404a2a9 100644
--- a/apps/web/src/app/vault/services/browser-extension-prompt.service.ts
+++ b/apps/web/src/app/vault/services/browser-extension-prompt.service.ts
@@ -7,6 +7,8 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { VaultMessages } from "@bitwarden/common/vault/enums/vault-messages.enum";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BrowserPromptState {
Loading = "loading",
Error = "error",
diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts
index 723d737d5bd..b8333828693 100644
--- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts
+++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts
@@ -149,6 +149,8 @@ export interface PasswordHealthReportApplicationsRequest {
url: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum DrawerType {
None = 0,
AppAtRiskMembers = 1,
diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts
index 705eb1231a9..f9177bf1bf7 100644
--- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts
+++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts
@@ -50,7 +50,7 @@ describe("RiskInsightsReportService", () => {
let testCase = testCaseResults[0];
expect(testCase).toBeTruthy();
expect(testCase.cipherMembers).toHaveLength(2);
- expect(testCase.trimmedUris).toHaveLength(3);
+ expect(testCase.trimmedUris).toHaveLength(2);
expect(testCase.weakPasswordDetail).toBeTruthy();
expect(testCase.exposedPasswordDetail).toBeTruthy();
expect(testCase.reusedPasswordCount).toEqual(2);
@@ -69,7 +69,7 @@ describe("RiskInsightsReportService", () => {
it("should generate the raw data + uri report correctly", async () => {
const result = await firstValueFrom(service.generateRawDataUriReport$("orgId"));
- expect(result).toHaveLength(9);
+ expect(result).toHaveLength(8);
// Two ciphers that have google.com as their uri. There should be 2 results
const googleResults = result.filter((x) => x.trimmedUri === "google.com");
@@ -88,7 +88,7 @@ describe("RiskInsightsReportService", () => {
it("should generate applications health report data correctly", async () => {
const result = await firstValueFrom(service.generateApplicationsReport$("orgId"));
- expect(result).toHaveLength(6);
+ expect(result).toHaveLength(5);
// Two ciphers have google.com associated with them. The first cipher
// has 2 members and the second has 4. However, the 2 members in the first
@@ -132,7 +132,7 @@ describe("RiskInsightsReportService", () => {
expect(reportSummary.totalMemberCount).toEqual(7);
expect(reportSummary.totalAtRiskMemberCount).toEqual(6);
- expect(reportSummary.totalApplicationCount).toEqual(6);
- expect(reportSummary.totalAtRiskApplicationCount).toEqual(5);
+ expect(reportSummary.totalApplicationCount).toEqual(5);
+ expect(reportSummary.totalAtRiskApplicationCount).toEqual(4);
});
});
diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts
index 027760f678c..8a6eb5000cd 100644
--- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts
+++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts
@@ -428,7 +428,7 @@ export class RiskInsightsReportService {
const cipherUris: string[] = [];
const uris = cipher.login?.uris ?? [];
uris.map((u: { uri: string }) => {
- const uri = Utils.getHostname(u.uri).replace("www.", "");
+ const uri = Utils.getDomain(u.uri);
if (!cipherUris.includes(uri)) {
cipherUris.push(uri);
}
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/add-edit-member-dialog.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/add-edit-member-dialog.component.ts
index 0213903c4d9..67f2382cf91 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/add-edit-member-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/add-edit-member-dialog.component.ts
@@ -25,6 +25,8 @@ export type AddEditMemberDialogParams = {
};
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AddEditMemberDialogResultType {
Closed = "closed",
Deleted = "deleted",
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts
index 844c6b779a9..418b7020ff9 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts
@@ -74,7 +74,7 @@ export class WebProviderService {
const [publicKey, encryptedPrivateKey] = await this.keyService.makeKeyPair(organizationKey);
- const encryptedCollectionName = await this.encryptService.encrypt(
+ const encryptedCollectionName = await this.encryptService.encryptString(
this.i18nService.t("defaultCollection"),
organizationKey,
);
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts
index 0d1602946c7..4bb2c36ef15 100644
--- a/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts
@@ -18,6 +18,8 @@ export type AddExistingOrganizationDialogParams = {
provider: Provider;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AddExistingOrganizationDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-dialog.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-dialog.component.ts
index d3245916ad7..d71e18cd539 100644
--- a/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/create-client-dialog.component.ts
@@ -22,6 +22,8 @@ type CreateClientDialogParams = {
plans: PlanResponse[];
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CreateClientDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-name-dialog.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-name-dialog.component.ts
index bbcd5f7ed63..45abeab1f4a 100644
--- a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-name-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-name-dialog.component.ts
@@ -23,6 +23,8 @@ type ManageClientNameDialogParams = {
};
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ManageClientNameDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-subscription-dialog.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-subscription-dialog.component.ts
index b79c887e77e..ced48bfdbea 100644
--- a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-subscription-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-client-subscription-dialog.component.ts
@@ -18,6 +18,8 @@ type ManageClientSubscriptionDialogParams = {
provider: Provider;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ManageClientSubscriptionDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts
index ab74869bfc9..5aca124a46a 100644
--- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts
@@ -37,6 +37,8 @@ import { PasswordHealthMembersURIComponent } from "./password-health-members-uri
import { PasswordHealthMembersComponent } from "./password-health-members.component";
import { PasswordHealthComponent } from "./password-health.component";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum RiskInsightsTabType {
AllApps = 0,
CriticalApps = 1,
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/projects/dialog/project-dialog.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/projects/dialog/project-dialog.component.ts
index 74824de00e0..c96887cc9ac 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/projects/dialog/project-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/projects/dialog/project-dialog.component.ts
@@ -11,6 +11,8 @@ import { DialogRef, DIALOG_DATA, BitValidators, ToastService } from "@bitwarden/
import { ProjectView } from "../../models/view/project.view";
import { ProjectService } from "../../projects/project.service";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OperationType {
Add,
Edit,
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/secrets/dialog/secret-dialog.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/secrets/dialog/secret-dialog.component.ts
index 88b3e5e2172..09a78e02c44 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/secrets/dialog/secret-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/secrets/dialog/secret-dialog.component.ts
@@ -44,11 +44,15 @@ import { SecretService } from "../secret.service";
import { SecretDeleteDialogComponent, SecretDeleteOperation } from "./secret-delete.component";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OperationType {
Add,
Edit,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SecretDialogTabType {
NameValuePair = 0,
People = 1,
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/dialog/service-account-dialog.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/dialog/service-account-dialog.component.ts
index e1cd7a77b28..241c736fb7a 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/dialog/service-account-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/dialog/service-account-dialog.component.ts
@@ -10,6 +10,8 @@ import { DialogRef, DIALOG_DATA, BitValidators, ToastService } from "@bitwarden/
import { ServiceAccountView } from "../../models/view/service-account.view";
import { ServiceAccountService } from "../service-account.service";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OperationType {
Add,
Edit,
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-item.enum.ts b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-item.enum.ts
index 6d060ac255d..6b92fd7458a 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-item.enum.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-item.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ApItemEnum {
User,
Group,
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-permission.enum.ts b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-permission.enum.ts
index eb442b0af5d..a57f9636178 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-permission.enum.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy-selector/models/enums/ap-permission.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ApPermissionEnum {
CanRead = "canRead",
CanReadWrite = "canReadWrite",
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/dialogs/bulk-confirmation-dialog.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/shared/dialogs/bulk-confirmation-dialog.component.ts
index a43207ed75e..935ee1c8518 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/dialogs/bulk-confirmation-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/dialogs/bulk-confirmation-dialog.component.ts
@@ -15,6 +15,8 @@ export interface BulkConfirmationStatus {
description: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BulkConfirmationResult {
Continue,
Cancel,
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 9d93d1118c0..7928224dc00 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -73,6 +73,7 @@ export default tseslint.config(
"@angular-eslint/use-lifecycle-interface": "error",
"@angular-eslint/use-pipe-transform-interface": 0,
"@bitwarden/platform/required-using": "error",
+ "@bitwarden/platform/no-enums": "error",
"@typescript-eslint/explicit-member-accessibility": ["error", { accessibility: "no-public" }],
"@typescript-eslint/no-explicit-any": "off", // TODO: This should be re-enabled
"@typescript-eslint/no-floating-promises": "error",
diff --git a/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts b/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts
index 890353d9039..293090ce315 100644
--- a/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts
+++ b/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts
@@ -116,7 +116,7 @@ export class DefaultCollectionAdminService implements CollectionAdminService {
const promises = collections.map(async (c) => {
const view = new CollectionAdminView();
view.id = c.id;
- view.name = await this.encryptService.decryptToUtf8(new EncString(c.name), orgKey);
+ view.name = await this.encryptService.decryptString(new EncString(c.name), orgKey);
view.externalId = c.externalId;
view.organizationId = c.organizationId;
@@ -146,7 +146,7 @@ export class DefaultCollectionAdminService implements CollectionAdminService {
}
const collection = new CollectionRequest();
collection.externalId = model.externalId;
- collection.name = (await this.encryptService.encrypt(model.name, key)).encryptedString;
+ collection.name = (await this.encryptService.encryptString(model.name, key)).encryptedString;
collection.groups = model.groups.map(
(group) =>
new SelectionReadOnlyRequest(group.id, group.readOnly, group.hidePasswords, group.manage),
diff --git a/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts b/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts
index 7fe81ade4d2..c5f57f38dd3 100644
--- a/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts
+++ b/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts
@@ -120,9 +120,12 @@ const mockStateProvider = () => {
const mockCryptoService = () => {
const keyService = mock();
const encryptService = mock();
- encryptService.decryptToUtf8
+ encryptService.decryptString
.calledWith(expect.any(EncString), expect.anything())
.mockResolvedValue("DECRYPTED_STRING");
+ encryptService.decryptToUtf8
+ .calledWith(expect.any(EncString), expect.anything(), expect.anything())
+ .mockResolvedValue("DECRYPTED_STRING");
(window as any).bitwardenContainerService = new ContainerService(keyService, encryptService);
diff --git a/libs/admin-console/src/common/collections/services/default-collection.service.ts b/libs/admin-console/src/common/collections/services/default-collection.service.ts
index 1ae58d3eef3..a1dd0419e2c 100644
--- a/libs/admin-console/src/common/collections/services/default-collection.service.ts
+++ b/libs/admin-console/src/common/collections/services/default-collection.service.ts
@@ -113,7 +113,7 @@ export class DefaultCollectionService implements CollectionService {
collection.organizationId = model.organizationId;
collection.readOnly = model.readOnly;
collection.externalId = model.externalId;
- collection.name = await this.encryptService.encrypt(model.name, key);
+ collection.name = await this.encryptService.encryptString(model.name, key);
return collection;
}
diff --git a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts
index 9700fcb695a..d4bc026b5bd 100644
--- a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts
+++ b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts
@@ -46,6 +46,11 @@ describe("DefaultvNextCollectionService", () => {
keyService.orgKeys$.mockReturnValue(cryptoKeys);
// Set up mock decryption
+ encryptService.decryptString
+ .calledWith(expect.any(EncString), expect.any(SymmetricCryptoKey))
+ .mockImplementation((encString, key) =>
+ Promise.resolve(encString.data.replace("ENC_", "DEC_")),
+ );
encryptService.decryptToUtf8
.calledWith(expect.any(EncString), expect.any(SymmetricCryptoKey), expect.any(String))
.mockImplementation((encString, key) =>
@@ -103,6 +108,7 @@ describe("DefaultvNextCollectionService", () => {
]);
// Assert that the correct org keys were used for each encrypted string
+ // This should be replaced with decryptString when the platform PR (https://github.com/bitwarden/clients/pull/14544) is merged
expect(encryptService.decryptToUtf8).toHaveBeenCalledWith(
expect.objectContaining(new EncString(collection1.name)),
orgKey1,
diff --git a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts
index 0ef8ae99ab3..4dcda795afe 100644
--- a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts
+++ b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts
@@ -113,7 +113,7 @@ export class DefaultvNextCollectionService implements vNextCollectionService {
collection.organizationId = model.organizationId;
collection.readOnly = model.readOnly;
collection.externalId = model.externalId;
- collection.name = await this.encryptService.encrypt(model.name, key);
+ collection.name = await this.encryptService.encryptString(model.name, key);
return collection;
}
diff --git a/libs/angular/src/billing/components/add-account-credit-dialog/add-account-credit-dialog.component.ts b/libs/angular/src/billing/components/add-account-credit-dialog/add-account-credit-dialog.component.ts
index 7c068c51d86..871895c2ede 100644
--- a/libs/angular/src/billing/components/add-account-credit-dialog/add-account-credit-dialog.component.ts
+++ b/libs/angular/src/billing/components/add-account-credit-dialog/add-account-credit-dialog.component.ts
@@ -22,6 +22,8 @@ export type AddAccountCreditDialogParams = {
providerId?: string;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AddAccountCreditDialogResultType {
Closed = "closed",
Submitted = "submitted",
diff --git a/libs/angular/src/tools/send/add-edit.component.ts b/libs/angular/src/tools/send/add-edit.component.ts
index 7e6180e5849..0289664c365 100644
--- a/libs/angular/src/tools/send/add-edit.component.ts
+++ b/libs/angular/src/tools/send/add-edit.component.ts
@@ -36,6 +36,8 @@ import { SendService } from "@bitwarden/common/tools/send/services/send.service.
import { DialogService, ToastService } from "@bitwarden/components";
// Value = hours
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum DatePreset {
OneHour = 1,
OneDay = 24,
diff --git a/libs/auth/src/angular/input-password/input-password.component.ts b/libs/auth/src/angular/input-password/input-password.component.ts
index bffb8a56b5e..dff4eafc3c2 100644
--- a/libs/auth/src/angular/input-password/input-password.component.ts
+++ b/libs/auth/src/angular/input-password/input-password.component.ts
@@ -36,6 +36,8 @@ import { PasswordInputResult } from "./password-input-result";
/**
* Determines which form input elements will be displayed in the UI.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum InputPasswordFlow {
/**
* - Input: New password
diff --git a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts
index 945e6bbaaf5..3ea9416b7e2 100644
--- a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts
+++ b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts
@@ -41,6 +41,8 @@ import { AnonLayoutWrapperDataService } from "../anon-layout/anon-layout-wrapper
import { LoginDecryptionOptionsService } from "./login-decryption-options.service";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum State {
NewUser,
ExistingUserUntrustedDevice,
diff --git a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts
index 4c95a1eca3e..d74deb443f5 100644
--- a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts
+++ b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts
@@ -40,6 +40,8 @@ import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legac
import { AuthRequestApiService } from "../../common/abstractions/auth-request-api.service";
import { LoginViaAuthRequestCacheService } from "../../common/services/auth-request/default-login-via-auth-request-cache.service";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum Flow {
StandardAuthRequest, // when user clicks "Login with device" from /login or "Approve from your other device" from /login-initiated
AdminAuthRequest, // when user clicks "Request admin approval" from /login-initiated
diff --git a/libs/auth/src/angular/login/login.component.ts b/libs/auth/src/angular/login/login.component.ts
index cd226cddcec..d5180f56785 100644
--- a/libs/auth/src/angular/login/login.component.ts
+++ b/libs/auth/src/angular/login/login.component.ts
@@ -46,6 +46,8 @@ import { LoginComponentService, PasswordPolicies } from "./login-component.servi
const BroadcasterSubscriptionId = "LoginComponent";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum LoginUiState {
EMAIL_ENTRY = "EmailEntry",
MASTER_PASSWORD_ENTRY = "MasterPasswordEntry",
diff --git a/libs/auth/src/angular/registration/registration-start/registration-start.component.ts b/libs/auth/src/angular/registration/registration-start/registration-start.component.ts
index e365ff09aa2..44d1d720a8d 100644
--- a/libs/auth/src/angular/registration/registration-start/registration-start.component.ts
+++ b/libs/auth/src/angular/registration/registration-start/registration-start.component.ts
@@ -26,6 +26,8 @@ import { RegistrationUserAddIcon } from "../../icons";
import { RegistrationCheckEmailIcon } from "../../icons/registration-check-email.icon";
import { RegistrationEnvSelectorComponent } from "../registration-env-selector/registration-env-selector.component";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum RegistrationStartState {
USER_DATA_ENTRY = "UserDataEntry",
CHECK_EMAIL = "CheckEmail",
diff --git a/libs/auth/src/angular/two-factor-auth/two-factor-auth-component.service.ts b/libs/auth/src/angular/two-factor-auth/two-factor-auth-component.service.ts
index 2bb354a8cc3..c99722fb8e4 100644
--- a/libs/auth/src/angular/two-factor-auth/two-factor-auth-component.service.ts
+++ b/libs/auth/src/angular/two-factor-auth/two-factor-auth-component.service.ts
@@ -1,10 +1,14 @@
import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-provider-type";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum LegacyKeyMigrationAction {
PREVENT_LOGIN_AND_SHOW_REQUIRE_MIGRATION_WARNING,
NAVIGATE_TO_MIGRATION_COMPONENT,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum DuoLaunchAction {
DIRECT_LAUNCH,
SINGLE_ACTION_POPOUT,
diff --git a/libs/auth/src/angular/user-verification/active-client-verification-option.enum.ts b/libs/auth/src/angular/user-verification/active-client-verification-option.enum.ts
index bceccc7f965..ef2bd1855c6 100644
--- a/libs/auth/src/angular/user-verification/active-client-verification-option.enum.ts
+++ b/libs/auth/src/angular/user-verification/active-client-verification-option.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ActiveClientVerificationOption {
MasterPassword = "masterPassword",
Pin = "pin",
diff --git a/libs/auth/src/angular/validators/compare-inputs.validator.ts b/libs/auth/src/angular/validators/compare-inputs.validator.ts
index 24568ade0e3..79d547859a4 100644
--- a/libs/auth/src/angular/validators/compare-inputs.validator.ts
+++ b/libs/auth/src/angular/validators/compare-inputs.validator.ts
@@ -1,5 +1,7 @@
import { AbstractControl, FormGroup, ValidationErrors, ValidatorFn } from "@angular/forms";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ValidationGoal {
InputsShouldMatch,
InputsShouldNotMatch,
diff --git a/libs/common/src/admin-console/enums/organization-api-key-type.enum.ts b/libs/common/src/admin-console/enums/organization-api-key-type.enum.ts
index 44ba7f8391d..bb98ea8718b 100644
--- a/libs/common/src/admin-console/enums/organization-api-key-type.enum.ts
+++ b/libs/common/src/admin-console/enums/organization-api-key-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OrganizationApiKeyType {
Default = 0,
BillingSync = 1,
diff --git a/libs/common/src/admin-console/enums/organization-connection-type.enum.ts b/libs/common/src/admin-console/enums/organization-connection-type.enum.ts
index d2f9700a6a0..3cd11a29496 100644
--- a/libs/common/src/admin-console/enums/organization-connection-type.enum.ts
+++ b/libs/common/src/admin-console/enums/organization-connection-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OrganizationConnectionType {
CloudBillingSync = 1,
Scim = 2,
diff --git a/libs/common/src/admin-console/enums/organization-user-status-type.enum.ts b/libs/common/src/admin-console/enums/organization-user-status-type.enum.ts
index f5fa0e25c91..df9ccc8b430 100644
--- a/libs/common/src/admin-console/enums/organization-user-status-type.enum.ts
+++ b/libs/common/src/admin-console/enums/organization-user-status-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OrganizationUserStatusType {
Invited = 0,
Accepted = 1,
diff --git a/libs/common/src/admin-console/enums/organization-user-type.enum.ts b/libs/common/src/admin-console/enums/organization-user-type.enum.ts
index da50bfbdc20..098374becb4 100644
--- a/libs/common/src/admin-console/enums/organization-user-type.enum.ts
+++ b/libs/common/src/admin-console/enums/organization-user-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OrganizationUserType {
Owner = 0,
Admin = 1,
diff --git a/libs/common/src/admin-console/enums/policy-type.enum.ts b/libs/common/src/admin-console/enums/policy-type.enum.ts
index 336b834ca56..42ab798eabf 100644
--- a/libs/common/src/admin-console/enums/policy-type.enum.ts
+++ b/libs/common/src/admin-console/enums/policy-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PolicyType {
TwoFactorAuthentication = 0, // Requires users to have 2fa enabled
MasterPassword = 1, // Sets minimum requirements for master password complexity
diff --git a/libs/common/src/admin-console/enums/provider-status-type.enum.ts b/libs/common/src/admin-console/enums/provider-status-type.enum.ts
index 8da60af0eb3..32b730510e0 100644
--- a/libs/common/src/admin-console/enums/provider-status-type.enum.ts
+++ b/libs/common/src/admin-console/enums/provider-status-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProviderStatusType {
Pending = 0,
Created = 1,
diff --git a/libs/common/src/admin-console/enums/provider-type.enum.ts b/libs/common/src/admin-console/enums/provider-type.enum.ts
index eb48e362e7d..dbb60fb3638 100644
--- a/libs/common/src/admin-console/enums/provider-type.enum.ts
+++ b/libs/common/src/admin-console/enums/provider-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProviderType {
Msp = 0,
Reseller = 1,
diff --git a/libs/common/src/admin-console/enums/provider-user-status-type.enum.ts b/libs/common/src/admin-console/enums/provider-user-status-type.enum.ts
index 38d6c2e4961..253128aa25f 100644
--- a/libs/common/src/admin-console/enums/provider-user-status-type.enum.ts
+++ b/libs/common/src/admin-console/enums/provider-user-status-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProviderUserStatusType {
Invited = 0,
Accepted = 1,
diff --git a/libs/common/src/admin-console/enums/provider-user-type.enum.ts b/libs/common/src/admin-console/enums/provider-user-type.enum.ts
index 00490adcfca..d20755c3196 100644
--- a/libs/common/src/admin-console/enums/provider-user-type.enum.ts
+++ b/libs/common/src/admin-console/enums/provider-user-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProviderUserType {
ProviderAdmin = 0,
ServiceUser = 1,
diff --git a/libs/common/src/admin-console/enums/scim-provider-type.enum.ts b/libs/common/src/admin-console/enums/scim-provider-type.enum.ts
index 43c518fdfbf..cd33a1cf891 100644
--- a/libs/common/src/admin-console/enums/scim-provider-type.enum.ts
+++ b/libs/common/src/admin-console/enums/scim-provider-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ScimProviderType {
Default = 0,
AzureAd = 1,
diff --git a/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts b/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts
index 984d80ba519..297bcf08d8c 100644
--- a/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts
+++ b/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts
@@ -56,14 +56,14 @@ export class ProviderEncryptedOrganizationKey implements BaseEncryptedOrganizati
) {}
async decrypt(encryptService: EncryptService, providerKeys: Record) {
- const decValue = await encryptService.decryptToBytes(
+ const decValue = await encryptService.unwrapSymmetricKey(
new EncString(this.key),
providerKeys[this.providerId],
);
if (decValue == null) {
throw new Error("Failed to decrypt organization key");
}
- return new SymmetricCryptoKey(decValue) as OrgKey;
+ return decValue as OrgKey;
}
get encryptedOrganizationKey() {
diff --git a/libs/common/src/admin-console/models/request/organization-create.request.ts b/libs/common/src/admin-console/models/request/organization-create.request.ts
index e8561307b20..d9c62f1e20a 100644
--- a/libs/common/src/admin-console/models/request/organization-create.request.ts
+++ b/libs/common/src/admin-console/models/request/organization-create.request.ts
@@ -6,4 +6,5 @@ import { OrganizationNoPaymentMethodCreateRequest } from "../../../billing/model
export class OrganizationCreateRequest extends OrganizationNoPaymentMethodCreateRequest {
paymentMethodType: PaymentMethodType;
paymentToken: string;
+ skipTrial?: boolean;
}
diff --git a/libs/common/src/auth/enums/auth-request-type.ts b/libs/common/src/auth/enums/auth-request-type.ts
index 31db2467861..d23fec03205 100644
--- a/libs/common/src/auth/enums/auth-request-type.ts
+++ b/libs/common/src/auth/enums/auth-request-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AuthRequestType {
AuthenticateAndUnlock = 0,
Unlock = 1,
diff --git a/libs/common/src/auth/enums/authentication-status.ts b/libs/common/src/auth/enums/authentication-status.ts
index 17b4f1f21e8..6a6f9467ae7 100644
--- a/libs/common/src/auth/enums/authentication-status.ts
+++ b/libs/common/src/auth/enums/authentication-status.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AuthenticationStatus {
LoggedOut = 0,
Locked = 1,
diff --git a/libs/common/src/auth/enums/authentication-type.ts b/libs/common/src/auth/enums/authentication-type.ts
index 35b50e6400a..13a3d70ddda 100644
--- a/libs/common/src/auth/enums/authentication-type.ts
+++ b/libs/common/src/auth/enums/authentication-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AuthenticationType {
Password = 0,
Sso = 1,
diff --git a/libs/common/src/auth/enums/sso.ts b/libs/common/src/auth/enums/sso.ts
index 0c86a27151f..1e5766c7afd 100644
--- a/libs/common/src/auth/enums/sso.ts
+++ b/libs/common/src/auth/enums/sso.ts
@@ -1,25 +1,35 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SsoType {
None = 0,
OpenIdConnect = 1,
Saml2 = 2,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum MemberDecryptionType {
MasterPassword = 0,
KeyConnector = 1,
TrustedDeviceEncryption = 2,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OpenIdConnectRedirectBehavior {
RedirectGet = 0,
FormPost = 1,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Saml2BindingType {
HttpRedirect = 1,
HttpPost = 2,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Saml2NameIdFormat {
NotConfigured = 0,
Unspecified = 1,
@@ -32,6 +42,8 @@ export enum Saml2NameIdFormat {
Transient = 8,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Saml2SigningBehavior {
IfIdpWantAuthnRequestsSigned = 0,
Always = 1,
diff --git a/libs/common/src/auth/enums/two-factor-provider-type.ts b/libs/common/src/auth/enums/two-factor-provider-type.ts
index b3308b6c12f..9be22bf90c8 100644
--- a/libs/common/src/auth/enums/two-factor-provider-type.ts
+++ b/libs/common/src/auth/enums/two-factor-provider-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum TwoFactorProviderType {
Authenticator = 0,
Email = 1,
diff --git a/libs/common/src/auth/enums/verification-type.ts b/libs/common/src/auth/enums/verification-type.ts
index c1991162f91..f0ad4c0d19c 100644
--- a/libs/common/src/auth/enums/verification-type.ts
+++ b/libs/common/src/auth/enums/verification-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum VerificationType {
MasterPassword = 0,
OTP = 1,
diff --git a/libs/common/src/auth/models/domain/force-set-password-reason.ts b/libs/common/src/auth/models/domain/force-set-password-reason.ts
index 56d52860443..68392125281 100644
--- a/libs/common/src/auth/models/domain/force-set-password-reason.ts
+++ b/libs/common/src/auth/models/domain/force-set-password-reason.ts
@@ -2,6 +2,8 @@
* This enum is used to determine if a user should be forced to initially set or reset their password
* on login (server flag) or unlock via MP (client evaluation).
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ForceSetPasswordReason {
/**
* A password reset should not be forced.
diff --git a/libs/common/src/auth/services/token.service.ts b/libs/common/src/auth/services/token.service.ts
index c27afa6805a..61c00f69215 100644
--- a/libs/common/src/auth/services/token.service.ts
+++ b/libs/common/src/auth/services/token.service.ts
@@ -43,6 +43,8 @@ import {
SECURITY_STAMP_MEMORY,
} from "./token.state";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum TokenStorageLocation {
Disk = "disk",
SecureStorage = "secureStorage",
diff --git a/libs/common/src/billing/abstractions/organization-billing.service.ts b/libs/common/src/billing/abstractions/organization-billing.service.ts
index 8024a120b0a..58c537c99cc 100644
--- a/libs/common/src/billing/abstractions/organization-billing.service.ts
+++ b/libs/common/src/billing/abstractions/organization-billing.service.ts
@@ -39,6 +39,7 @@ export type BillingInformation = {
export type PaymentInformation = {
paymentMethod: [string, PaymentMethodType];
billing: BillingInformation;
+ skipTrial?: boolean;
};
export type SubscriptionInformation = {
diff --git a/libs/common/src/billing/abstractions/tax.service.abstraction.ts b/libs/common/src/billing/abstractions/tax.service.abstraction.ts
index 7a744dae856..73dc848c95f 100644
--- a/libs/common/src/billing/abstractions/tax.service.abstraction.ts
+++ b/libs/common/src/billing/abstractions/tax.service.abstraction.ts
@@ -1,7 +1,9 @@
import { CountryListItem } from "../models/domain";
import { PreviewIndividualInvoiceRequest } from "../models/request/preview-individual-invoice.request";
import { PreviewOrganizationInvoiceRequest } from "../models/request/preview-organization-invoice.request";
+import { PreviewTaxAmountForOrganizationTrialRequest } from "../models/request/tax";
import { PreviewInvoiceResponse } from "../models/response/preview-invoice.response";
+import { PreviewTaxAmountResponse } from "../models/response/tax";
export abstract class TaxServiceAbstraction {
abstract getCountries(): CountryListItem[];
@@ -15,4 +17,8 @@ export abstract class TaxServiceAbstraction {
abstract previewOrganizationInvoice(
request: PreviewOrganizationInvoiceRequest,
): Promise;
+
+ abstract previewTaxAmountForOrganizationTrial: (
+ request: PreviewTaxAmountForOrganizationTrialRequest,
+ ) => Promise;
}
diff --git a/libs/common/src/billing/enums/bitwarden-product-type.enum.ts b/libs/common/src/billing/enums/bitwarden-product-type.enum.ts
index 76b0899fd9c..4389d283c00 100644
--- a/libs/common/src/billing/enums/bitwarden-product-type.enum.ts
+++ b/libs/common/src/billing/enums/bitwarden-product-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BitwardenProductType {
PasswordManager = 0,
SecretsManager = 1,
diff --git a/libs/common/src/billing/enums/payment-method-type.enum.ts b/libs/common/src/billing/enums/payment-method-type.enum.ts
index 9b29263175c..6ea98fdc5ec 100644
--- a/libs/common/src/billing/enums/payment-method-type.enum.ts
+++ b/libs/common/src/billing/enums/payment-method-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PaymentMethodType {
Card = 0,
BankAccount = 1,
diff --git a/libs/common/src/billing/enums/plan-interval.enum.ts b/libs/common/src/billing/enums/plan-interval.enum.ts
index 546336748cd..c048160310b 100644
--- a/libs/common/src/billing/enums/plan-interval.enum.ts
+++ b/libs/common/src/billing/enums/plan-interval.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PlanInterval {
Monthly = 0,
Annually = 1,
diff --git a/libs/common/src/billing/enums/plan-sponsorship-type.enum.ts b/libs/common/src/billing/enums/plan-sponsorship-type.enum.ts
index 3b4c00467c2..845b698f509 100644
--- a/libs/common/src/billing/enums/plan-sponsorship-type.enum.ts
+++ b/libs/common/src/billing/enums/plan-sponsorship-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PlanSponsorshipType {
FamiliesForEnterprise = 0,
}
diff --git a/libs/common/src/billing/enums/plan-type.enum.ts b/libs/common/src/billing/enums/plan-type.enum.ts
index c8977703454..5c356ce42fe 100644
--- a/libs/common/src/billing/enums/plan-type.enum.ts
+++ b/libs/common/src/billing/enums/plan-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PlanType {
Free = 0,
FamiliesAnnually2019 = 1,
diff --git a/libs/common/src/billing/enums/product-tier-type.enum.ts b/libs/common/src/billing/enums/product-tier-type.enum.ts
index fadf57ccdc5..e94243de588 100644
--- a/libs/common/src/billing/enums/product-tier-type.enum.ts
+++ b/libs/common/src/billing/enums/product-tier-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProductTierType {
Free = 0,
Families = 1,
diff --git a/libs/common/src/billing/enums/product-type.enum.ts b/libs/common/src/billing/enums/product-type.enum.ts
index 3072ad0f96a..0c11eb92c79 100644
--- a/libs/common/src/billing/enums/product-type.enum.ts
+++ b/libs/common/src/billing/enums/product-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProductType {
PasswordManager = 0,
SecretsManager = 1,
diff --git a/libs/common/src/billing/enums/transaction-type.enum.ts b/libs/common/src/billing/enums/transaction-type.enum.ts
index 34731a2ec33..d4c48253a39 100644
--- a/libs/common/src/billing/enums/transaction-type.enum.ts
+++ b/libs/common/src/billing/enums/transaction-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum TransactionType {
Charge = 0,
Credit = 1,
diff --git a/libs/common/src/billing/models/request/tax/index.ts b/libs/common/src/billing/models/request/tax/index.ts
new file mode 100644
index 00000000000..cda1930c614
--- /dev/null
+++ b/libs/common/src/billing/models/request/tax/index.ts
@@ -0,0 +1 @@
+export * from "./preview-tax-amount-for-organization-trial.request";
diff --git a/libs/common/src/billing/models/request/tax/preview-tax-amount-for-organization-trial.request.ts b/libs/common/src/billing/models/request/tax/preview-tax-amount-for-organization-trial.request.ts
new file mode 100644
index 00000000000..3f366335a47
--- /dev/null
+++ b/libs/common/src/billing/models/request/tax/preview-tax-amount-for-organization-trial.request.ts
@@ -0,0 +1,11 @@
+import { PlanType, ProductType } from "../../../enums";
+
+export type PreviewTaxAmountForOrganizationTrialRequest = {
+ planType: PlanType;
+ productType: ProductType;
+ taxInformation: {
+ country: string;
+ postalCode: string;
+ taxId?: string;
+ };
+};
diff --git a/libs/common/src/billing/models/response/tax/index.ts b/libs/common/src/billing/models/response/tax/index.ts
new file mode 100644
index 00000000000..525d6d7c80a
--- /dev/null
+++ b/libs/common/src/billing/models/response/tax/index.ts
@@ -0,0 +1 @@
+export * from "./preview-tax-amount.response";
diff --git a/libs/common/src/billing/models/response/tax/preview-tax-amount.response.ts b/libs/common/src/billing/models/response/tax/preview-tax-amount.response.ts
new file mode 100644
index 00000000000..cf15156551a
--- /dev/null
+++ b/libs/common/src/billing/models/response/tax/preview-tax-amount.response.ts
@@ -0,0 +1,11 @@
+import { BaseResponse } from "../../../../models/response/base.response";
+
+export class PreviewTaxAmountResponse extends BaseResponse {
+ taxAmount: number;
+
+ constructor(response: any) {
+ super(response);
+
+ this.taxAmount = this.getResponseProperty("TaxAmount");
+ }
+}
diff --git a/libs/common/src/billing/services/organization-billing.service.ts b/libs/common/src/billing/services/organization-billing.service.ts
index c6bd88d8dd6..fe5623fd5e6 100644
--- a/libs/common/src/billing/services/organization-billing.service.ts
+++ b/libs/common/src/billing/services/organization-billing.service.ts
@@ -174,6 +174,7 @@ export class OrganizationBillingService implements OrganizationBillingServiceAbs
const [paymentToken, paymentMethodType] = information.paymentMethod;
request.paymentToken = paymentToken;
request.paymentMethodType = paymentMethodType;
+ request.skipTrial = information.skipTrial;
const billingInformation = information.billing;
request.billingAddressPostalCode = billingInformation.postalCode;
diff --git a/libs/common/src/billing/services/tax.service.ts b/libs/common/src/billing/services/tax.service.ts
index aa27c99adc8..2632ca7083b 100644
--- a/libs/common/src/billing/services/tax.service.ts
+++ b/libs/common/src/billing/services/tax.service.ts
@@ -1,3 +1,6 @@
+import { PreviewTaxAmountForOrganizationTrialRequest } from "@bitwarden/common/billing/models/request/tax";
+import { PreviewTaxAmountResponse } from "@bitwarden/common/billing/models/response/tax";
+
import { ApiService } from "../../abstractions/api.service";
import { TaxServiceAbstraction } from "../abstractions/tax.service.abstraction";
import { CountryListItem } from "../models/domain";
@@ -300,4 +303,16 @@ export class TaxService implements TaxServiceAbstraction {
);
return new PreviewInvoiceResponse(response);
}
+
+ async previewTaxAmountForOrganizationTrial(
+ request: PreviewTaxAmountForOrganizationTrialRequest,
+ ): Promise {
+ return await this.apiService.send(
+ "POST",
+ "/tax/preview-amount/organization-trial",
+ request,
+ true,
+ true,
+ );
+ }
}
diff --git a/libs/common/src/enums/client-type.enum.ts b/libs/common/src/enums/client-type.enum.ts
index 54653f74462..25e9d6f3371 100644
--- a/libs/common/src/enums/client-type.enum.ts
+++ b/libs/common/src/enums/client-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ClientType {
Web = "web",
Browser = "browser",
diff --git a/libs/common/src/enums/device-type.enum.ts b/libs/common/src/enums/device-type.enum.ts
index ff6329b9ac4..d5628536ff7 100644
--- a/libs/common/src/enums/device-type.enum.ts
+++ b/libs/common/src/enums/device-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum DeviceType {
Android = 0,
iOS = 1,
diff --git a/libs/common/src/enums/event-system-user.enum.ts b/libs/common/src/enums/event-system-user.enum.ts
index e2d43a4f113..f4abbb1e3e9 100644
--- a/libs/common/src/enums/event-system-user.enum.ts
+++ b/libs/common/src/enums/event-system-user.enum.ts
@@ -1,4 +1,6 @@
// Note: the enum key is used to describe the EventSystemUser in the UI. Be careful about changing it.
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EventSystemUser {
SCIM = 1,
DomainVerification = 2,
diff --git a/libs/common/src/enums/event-type.enum.ts b/libs/common/src/enums/event-type.enum.ts
index 51b324bb434..9efe49b1b0f 100644
--- a/libs/common/src/enums/event-type.enum.ts
+++ b/libs/common/src/enums/event-type.enum.ts
@@ -1,4 +1,6 @@
// Increment by 100 for each new set of events
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EventType {
User_LoggedIn = 1000,
User_ChangedPassword = 1001,
diff --git a/libs/common/src/enums/feature-flag.enum.ts b/libs/common/src/enums/feature-flag.enum.ts
index a7679a6248a..ddc75eb0d66 100644
--- a/libs/common/src/enums/feature-flag.enum.ts
+++ b/libs/common/src/enums/feature-flag.enum.ts
@@ -7,6 +7,8 @@ import { ServerConfig } from "../platform/abstractions/config/server-config";
*
* Flags should be grouped by team to have visibility of ownership and cleanup.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum FeatureFlag {
/* Admin Console Team */
VerifiedSsoDomainEndpoint = "pm-12337-refactor-sso-details-endpoint",
diff --git a/libs/common/src/enums/http-status-code.enum.ts b/libs/common/src/enums/http-status-code.enum.ts
index 94226c82552..d2dba5d8d4c 100644
--- a/libs/common/src/enums/http-status-code.enum.ts
+++ b/libs/common/src/enums/http-status-code.enum.ts
@@ -4,6 +4,8 @@
* @see {@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}
* src: https://gist.github.com/RWOverdijk/6cef816cfdf5722228e01cc05fd4b094
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum HttpStatusCode {
/**
* The server has received the request headers and the client should proceed to send the request body
diff --git a/libs/common/src/enums/integration-type.enum.ts b/libs/common/src/enums/integration-type.enum.ts
index 42c385fe715..ac8bb9c6afa 100644
--- a/libs/common/src/enums/integration-type.enum.ts
+++ b/libs/common/src/enums/integration-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum IntegrationType {
Integration = "integration",
SDK = "sdk",
diff --git a/libs/common/src/enums/native-messaging-version.enum.ts b/libs/common/src/enums/native-messaging-version.enum.ts
index f7cf411a40a..f83ec8f4b25 100644
--- a/libs/common/src/enums/native-messaging-version.enum.ts
+++ b/libs/common/src/enums/native-messaging-version.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum NativeMessagingVersion {
One = 1, // Original implementation
Latest = One,
diff --git a/libs/common/src/enums/notification-type.enum.ts b/libs/common/src/enums/notification-type.enum.ts
index 0e4d0bfee3d..6d731253ce3 100644
--- a/libs/common/src/enums/notification-type.enum.ts
+++ b/libs/common/src/enums/notification-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum NotificationType {
SyncCipherUpdate = 0,
SyncCipherCreate = 1,
diff --git a/libs/common/src/enums/push-technology.enum.ts b/libs/common/src/enums/push-technology.enum.ts
index 9452c144bb7..1bc4e62cc9d 100644
--- a/libs/common/src/enums/push-technology.enum.ts
+++ b/libs/common/src/enums/push-technology.enum.ts
@@ -1,6 +1,8 @@
/**
* The preferred push technology of the server.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum PushTechnology {
/**
* Indicates that we should use SignalR over web sockets to receive push notifications from the server.
diff --git a/libs/common/src/key-management/master-password/abstractions/master-password.service.abstraction.ts b/libs/common/src/key-management/master-password/abstractions/master-password.service.abstraction.ts
index 221ce8ed6ef..fded0cea023 100644
--- a/libs/common/src/key-management/master-password/abstractions/master-password.service.abstraction.ts
+++ b/libs/common/src/key-management/master-password/abstractions/master-password.service.abstraction.ts
@@ -37,13 +37,13 @@ export abstract class MasterPasswordServiceAbstraction {
* @param userKey The user's encrypted symmetric key
* @throws If either the MasterKey or UserKey are not resolved, or if the UserKey encryption type
* is neither AesCbc256_B64 nor AesCbc256_HmacSha256_B64
- * @returns The user key
+ * @returns The user key or null if the masterkey is wrong
*/
abstract decryptUserKeyWithMasterKey: (
masterKey: MasterKey,
userId: string,
userKey?: EncString,
- ) => Promise;
+ ) => Promise;
}
export abstract class InternalMasterPasswordServiceAbstraction extends MasterPasswordServiceAbstraction {
diff --git a/libs/common/src/key-management/master-password/services/master-password.service.ts b/libs/common/src/key-management/master-password/services/master-password.service.ts
index b9b11d6cbe8..9e58680d453 100644
--- a/libs/common/src/key-management/master-password/services/master-password.service.ts
+++ b/libs/common/src/key-management/master-password/services/master-password.service.ts
@@ -166,7 +166,7 @@ export class MasterPasswordService implements InternalMasterPasswordServiceAbstr
masterKey: MasterKey,
userId: UserId,
userKey?: EncString,
- ): Promise {
+ ): Promise {
userKey ??= await this.getMasterKeyEncryptedUserKey(userId);
masterKey ??= await firstValueFrom(this.masterKey$(userId));
@@ -177,16 +177,26 @@ export class MasterPasswordService implements InternalMasterPasswordServiceAbstr
let decUserKey: SymmetricCryptoKey;
if (userKey.encryptionType === EncryptionType.AesCbc256_B64) {
- decUserKey = await this.encryptService.unwrapSymmetricKey(userKey, masterKey);
+ try {
+ decUserKey = await this.encryptService.unwrapSymmetricKey(userKey, masterKey);
+ } catch {
+ this.logService.warning("Failed to decrypt user key with master key.");
+ return null;
+ }
} else if (userKey.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {
- const newKey = await this.keyGenerationService.stretchKey(masterKey);
- decUserKey = await this.encryptService.unwrapSymmetricKey(userKey, newKey);
+ try {
+ const newKey = await this.keyGenerationService.stretchKey(masterKey);
+ decUserKey = await this.encryptService.unwrapSymmetricKey(userKey, newKey);
+ } catch {
+ this.logService.warning("Failed to decrypt user key with stretched master key.");
+ return null;
+ }
} else {
throw new Error("Unsupported encryption type.");
}
if (decUserKey == null) {
- this.logService.warning("Failed to decrypt user key with master key.");
+ this.logService.warning("Failed to decrypt user key with master key, user key is null.");
return null;
}
diff --git a/libs/common/src/key-management/vault-timeout/enums/vault-timeout-action.enum.ts b/libs/common/src/key-management/vault-timeout/enums/vault-timeout-action.enum.ts
index 239a7490191..9e70b7ebb12 100644
--- a/libs/common/src/key-management/vault-timeout/enums/vault-timeout-action.enum.ts
+++ b/libs/common/src/key-management/vault-timeout/enums/vault-timeout-action.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum VaultTimeoutAction {
Lock = "lock",
LogOut = "logOut",
diff --git a/libs/common/src/platform/abstractions/environment.service.ts b/libs/common/src/platform/abstractions/environment.service.ts
index 4a10f856893..b8931656848 100644
--- a/libs/common/src/platform/abstractions/environment.service.ts
+++ b/libs/common/src/platform/abstractions/environment.service.ts
@@ -17,6 +17,8 @@ export type Urls = {
/**
* A subset of available regions, additional regions can be loaded through configuration.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Region {
US = "US",
EU = "EU",
diff --git a/libs/common/src/platform/abstractions/fido2/fido2-authenticator.service.abstraction.ts b/libs/common/src/platform/abstractions/fido2/fido2-authenticator.service.abstraction.ts
index e9e68ca92c3..15655393362 100644
--- a/libs/common/src/platform/abstractions/fido2/fido2-authenticator.service.abstraction.ts
+++ b/libs/common/src/platform/abstractions/fido2/fido2-authenticator.service.abstraction.ts
@@ -46,11 +46,15 @@ export abstract class Fido2AuthenticatorService {
silentCredentialDiscovery: (rpId: string) => Promise;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Fido2AlgorithmIdentifier {
ES256 = -7,
RS256 = -257,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Fido2AuthenticatorErrorCode {
Unknown = "UnknownError",
NotSupported = "NotSupportedError",
diff --git a/libs/common/src/platform/enums/encryption-type.enum.ts b/libs/common/src/platform/enums/encryption-type.enum.ts
index fd484dc2fdf..7f4b5048a45 100644
--- a/libs/common/src/platform/enums/encryption-type.enum.ts
+++ b/libs/common/src/platform/enums/encryption-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EncryptionType {
AesCbc256_B64 = 0,
// Type 1 was the unused and removed AesCbc128_HmacSha256_B64
diff --git a/libs/common/src/platform/enums/file-upload-type.enum.ts b/libs/common/src/platform/enums/file-upload-type.enum.ts
index 4cf654fd0ff..a94797b9ef3 100644
--- a/libs/common/src/platform/enums/file-upload-type.enum.ts
+++ b/libs/common/src/platform/enums/file-upload-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum FileUploadType {
Direct = 0,
Azure = 1,
diff --git a/libs/common/src/platform/enums/hash-purpose.enum.ts b/libs/common/src/platform/enums/hash-purpose.enum.ts
index 887931b9edd..4b61db914a1 100644
--- a/libs/common/src/platform/enums/hash-purpose.enum.ts
+++ b/libs/common/src/platform/enums/hash-purpose.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum HashPurpose {
ServerAuthorization = 1,
LocalAuthorization = 2,
diff --git a/libs/common/src/platform/enums/html-storage-location.enum.ts b/libs/common/src/platform/enums/html-storage-location.enum.ts
index 19c84fe88c7..1d018a72869 100644
--- a/libs/common/src/platform/enums/html-storage-location.enum.ts
+++ b/libs/common/src/platform/enums/html-storage-location.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum HtmlStorageLocation {
Local = "local",
Memory = "memory",
diff --git a/libs/common/src/platform/enums/key-suffix-options.enum.ts b/libs/common/src/platform/enums/key-suffix-options.enum.ts
index 98fa215be6a..7cc412f563b 100644
--- a/libs/common/src/platform/enums/key-suffix-options.enum.ts
+++ b/libs/common/src/platform/enums/key-suffix-options.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum KeySuffixOptions {
Auto = "auto",
Pin = "pin",
diff --git a/libs/common/src/platform/enums/log-level-type.enum.ts b/libs/common/src/platform/enums/log-level-type.enum.ts
index 709871dd5e9..b5f84467d6e 100644
--- a/libs/common/src/platform/enums/log-level-type.enum.ts
+++ b/libs/common/src/platform/enums/log-level-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum LogLevelType {
Debug,
Info,
diff --git a/libs/common/src/platform/enums/storage-location.enum.ts b/libs/common/src/platform/enums/storage-location.enum.ts
index 46d50d1d38d..9f6e22babec 100644
--- a/libs/common/src/platform/enums/storage-location.enum.ts
+++ b/libs/common/src/platform/enums/storage-location.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum StorageLocation {
Both = "both",
Disk = "disk",
diff --git a/libs/common/src/platform/enums/theme-type.enum.ts b/libs/common/src/platform/enums/theme-type.enum.ts
index d1767c4990a..c0f9aa2d52f 100644
--- a/libs/common/src/platform/enums/theme-type.enum.ts
+++ b/libs/common/src/platform/enums/theme-type.enum.ts
@@ -1,6 +1,8 @@
/**
* @deprecated prefer the `ThemeTypes` constants and `Theme` type over unsafe enum types
**/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ThemeType {
System = "system",
Light = "light",
diff --git a/libs/common/src/platform/services/cryptography/initializer-key.ts b/libs/common/src/platform/services/cryptography/initializer-key.ts
index 88e36d90515..59287a62c46 100644
--- a/libs/common/src/platform/services/cryptography/initializer-key.ts
+++ b/libs/common/src/platform/services/cryptography/initializer-key.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum InitializerKey {
Cipher = 0,
CipherView = 1,
diff --git a/libs/common/src/state-migrations/migrations/28-move-provider-state-to-state-provider.ts b/libs/common/src/state-migrations/migrations/28-move-provider-state-to-state-provider.ts
index 96f0a9acd5d..5ae943438d2 100644
--- a/libs/common/src/state-migrations/migrations/28-move-provider-state-to-state-provider.ts
+++ b/libs/common/src/state-migrations/migrations/28-move-provider-state-to-state-provider.ts
@@ -5,6 +5,8 @@ import { Jsonify } from "type-fest";
import { KeyDefinitionLike, MigrationHelper } from "../migration-helper";
import { Migrator } from "../migrator";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum ProviderUserStatusType {
Invited = 0,
Accepted = 1,
@@ -12,6 +14,8 @@ enum ProviderUserStatusType {
Revoked = -1,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum ProviderUserType {
ProviderAdmin = 0,
ServiceUser = 1,
diff --git a/libs/common/src/state-migrations/migrations/30-move-policy-state-to-state-provider.ts b/libs/common/src/state-migrations/migrations/30-move-policy-state-to-state-provider.ts
index 0b4c95cb55c..f188bc0a33e 100644
--- a/libs/common/src/state-migrations/migrations/30-move-policy-state-to-state-provider.ts
+++ b/libs/common/src/state-migrations/migrations/30-move-policy-state-to-state-provider.ts
@@ -3,6 +3,8 @@
import { KeyDefinitionLike, MigrationHelper } from "../migration-helper";
import { Migrator } from "../migrator";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum PolicyType {
TwoFactorAuthentication = 0, // Requires users to have 2fa enabled
MasterPassword = 1, // Sets minimum requirements for master password complexity
diff --git a/libs/common/src/state-migrations/migrations/40-move-organization-state-to-state-provider.ts b/libs/common/src/state-migrations/migrations/40-move-organization-state-to-state-provider.ts
index 862fe33bd4e..b23b712aefe 100644
--- a/libs/common/src/state-migrations/migrations/40-move-organization-state-to-state-provider.ts
+++ b/libs/common/src/state-migrations/migrations/40-move-organization-state-to-state-provider.ts
@@ -7,6 +7,8 @@ import { Migrator } from "../migrator";
// Local declarations of `OrganizationData` and the types of it's properties.
// Duplicated to remain frozen in time when migration occurs.
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum OrganizationUserStatusType {
Invited = 0,
Accepted = 1,
@@ -14,6 +16,8 @@ enum OrganizationUserStatusType {
Revoked = -1,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum OrganizationUserType {
Owner = 0,
Admin = 1,
@@ -40,11 +44,15 @@ type PermissionsApi = {
manageScim: boolean;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum ProviderType {
Msp = 0,
Reseller = 1,
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum ProductType {
Free = 0,
Families = 1,
diff --git a/libs/common/src/state-migrations/migrations/54-move-encrypted-sends.ts b/libs/common/src/state-migrations/migrations/54-move-encrypted-sends.ts
index 7d3a2bebbf9..489fb2258ee 100644
--- a/libs/common/src/state-migrations/migrations/54-move-encrypted-sends.ts
+++ b/libs/common/src/state-migrations/migrations/54-move-encrypted-sends.ts
@@ -3,6 +3,8 @@
import { KeyDefinitionLike, MigrationHelper } from "../migration-helper";
import { Migrator } from "../migrator";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SendType {
Text = 0,
File = 1,
diff --git a/libs/common/src/state-migrations/migrations/59-move-kdf-config-to-state-provider.ts b/libs/common/src/state-migrations/migrations/59-move-kdf-config-to-state-provider.ts
index 81ee193867b..a01ef42a8ff 100644
--- a/libs/common/src/state-migrations/migrations/59-move-kdf-config-to-state-provider.ts
+++ b/libs/common/src/state-migrations/migrations/59-move-kdf-config-to-state-provider.ts
@@ -3,6 +3,8 @@
import { KeyDefinitionLike, MigrationHelper } from "../migration-helper";
import { Migrator } from "../migrator";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum KdfType {
PBKDF2_SHA256 = 0,
Argon2id = 1,
diff --git a/libs/common/src/state-migrations/migrations/62-migrate-vault-timeout-settings-svc-to-state-provider.ts b/libs/common/src/state-migrations/migrations/62-migrate-vault-timeout-settings-svc-to-state-provider.ts
index 5874a80dc60..3557bfae083 100644
--- a/libs/common/src/state-migrations/migrations/62-migrate-vault-timeout-settings-svc-to-state-provider.ts
+++ b/libs/common/src/state-migrations/migrations/62-migrate-vault-timeout-settings-svc-to-state-provider.ts
@@ -57,6 +57,8 @@ const vaultTimeoutTypeRollbackRecord: Record = {
onIdle: -4,
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ClientType {
Web = "web",
Browser = "browser",
diff --git a/libs/common/src/tools/send/enums/send-type.ts b/libs/common/src/tools/send/enums/send-type.ts
index 487930c90c7..5b03c71d22a 100644
--- a/libs/common/src/tools/send/enums/send-type.ts
+++ b/libs/common/src/tools/send/enums/send-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SendType {
Text = 0,
File = 1,
diff --git a/libs/common/src/vault/enums/cipher-reprompt-type.ts b/libs/common/src/vault/enums/cipher-reprompt-type.ts
index 1d0a523ced0..190a9bad042 100644
--- a/libs/common/src/vault/enums/cipher-reprompt-type.ts
+++ b/libs/common/src/vault/enums/cipher-reprompt-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CipherRepromptType {
None = 0,
Password = 1,
diff --git a/libs/common/src/vault/enums/cipher-type.ts b/libs/common/src/vault/enums/cipher-type.ts
index 0b7bbf1ee17..30d80cdef7e 100644
--- a/libs/common/src/vault/enums/cipher-type.ts
+++ b/libs/common/src/vault/enums/cipher-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CipherType {
Login = 1,
SecureNote = 2,
diff --git a/libs/common/src/vault/enums/field-type.enum.ts b/libs/common/src/vault/enums/field-type.enum.ts
index d6deb30e691..df5016890b2 100644
--- a/libs/common/src/vault/enums/field-type.enum.ts
+++ b/libs/common/src/vault/enums/field-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum FieldType {
Text = 0,
Hidden = 1,
diff --git a/libs/common/src/vault/enums/linked-id-type.enum.ts b/libs/common/src/vault/enums/linked-id-type.enum.ts
index c38ebc1c6e8..b329aecb3f4 100644
--- a/libs/common/src/vault/enums/linked-id-type.enum.ts
+++ b/libs/common/src/vault/enums/linked-id-type.enum.ts
@@ -1,12 +1,16 @@
export type LinkedIdType = LoginLinkedId | CardLinkedId | IdentityLinkedId;
// LoginView
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum LoginLinkedId {
Username = 100,
Password = 101,
}
// CardView
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CardLinkedId {
CardholderName = 300,
ExpMonth = 301,
@@ -17,6 +21,8 @@ export enum CardLinkedId {
}
// IdentityView
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum IdentityLinkedId {
Title = 400,
MiddleName = 401,
diff --git a/libs/common/src/vault/enums/secure-note-type.enum.ts b/libs/common/src/vault/enums/secure-note-type.enum.ts
index 8015236d148..4fbd05e6bd4 100644
--- a/libs/common/src/vault/enums/secure-note-type.enum.ts
+++ b/libs/common/src/vault/enums/secure-note-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SecureNoteType {
Generic = 0,
}
diff --git a/libs/common/src/vault/tasks/enums/security-task-status.enum.ts b/libs/common/src/vault/tasks/enums/security-task-status.enum.ts
index 1c6e7decc20..c8c26266e66 100644
--- a/libs/common/src/vault/tasks/enums/security-task-status.enum.ts
+++ b/libs/common/src/vault/tasks/enums/security-task-status.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SecurityTaskStatus {
/**
* Default status for newly created tasks that have not been completed.
diff --git a/libs/common/src/vault/tasks/enums/security-task-type.enum.ts b/libs/common/src/vault/tasks/enums/security-task-type.enum.ts
index 264cd88696b..79a2d23c8b3 100644
--- a/libs/common/src/vault/tasks/enums/security-task-type.enum.ts
+++ b/libs/common/src/vault/tasks/enums/security-task-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SecurityTaskType {
/**
* Task to update a cipher's password that was found to be at-risk by an administrator
diff --git a/libs/components/src/color-password/color-password.component.ts b/libs/components/src/color-password/color-password.component.ts
index 86ccb41ba3c..2dd78e8525d 100644
--- a/libs/components/src/color-password/color-password.component.ts
+++ b/libs/components/src/color-password/color-password.component.ts
@@ -2,6 +2,8 @@ import { Component, computed, HostBinding, input } from "@angular/core";
import { Utils } from "@bitwarden/common/platform/misc/utils";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
enum CharacterType {
Letter,
Emoji,
diff --git a/libs/eslint/platform/index.mjs b/libs/eslint/platform/index.mjs
index 049d95e2074..c7ea3f1dd89 100644
--- a/libs/eslint/platform/index.mjs
+++ b/libs/eslint/platform/index.mjs
@@ -1,3 +1,4 @@
import requiredUsing from "./required-using.mjs";
+import noEnums from "./no-enums.mjs";
-export default { rules: { "required-using": requiredUsing } };
+export default { rules: { "required-using": requiredUsing, "no-enums": noEnums } };
diff --git a/libs/eslint/platform/no-enums.mjs b/libs/eslint/platform/no-enums.mjs
new file mode 100644
index 00000000000..4f3039f7e34
--- /dev/null
+++ b/libs/eslint/platform/no-enums.mjs
@@ -0,0 +1,23 @@
+export const errorMessage = "Enums are discouraged, please use a const object instead";
+
+export default {
+ meta: {
+ type: "suggestion",
+ docs: {
+ description: "Enforce using consts instead of enums",
+ category: "Best Practices",
+ recommended: false,
+ },
+ schema: [],
+ },
+ create(context) {
+ return {
+ TSEnumDeclaration(node) {
+ context.report({
+ node,
+ message: errorMessage,
+ });
+ },
+ };
+ },
+};
diff --git a/libs/eslint/platform/no-enums.spec.mjs b/libs/eslint/platform/no-enums.spec.mjs
new file mode 100644
index 00000000000..5ded12d6ed3
--- /dev/null
+++ b/libs/eslint/platform/no-enums.spec.mjs
@@ -0,0 +1,71 @@
+import { RuleTester } from "@typescript-eslint/rule-tester";
+
+import rule, { errorMessage } from "./no-enums.mjs";
+
+const ruleTester = new RuleTester({
+ languageOptions: {
+ parserOptions: {
+ project: [__dirname + "/../tsconfig.spec.json"],
+ projectService: {
+ allowDefaultProject: ["*.ts*"],
+ },
+ tsconfigRootDir: __dirname + "/..",
+ },
+ },
+});
+
+ruleTester.run("no-enums", rule.default, {
+ valid: [
+ {
+ name: "Using const instead of enum",
+ code: `
+ const Status = {
+ Active: "active",
+ Inactive: "inactive",
+ } as const;
+ `,
+ },
+ {
+ name: "Using const with type",
+ code: `
+ const Status = {
+ Active: "active",
+ Inactive: "inactive",
+ } as const;
+ type Status = typeof Status[keyof typeof Status];
+ `,
+ },
+ ],
+ invalid: [
+ {
+ name: "Using enum declaration",
+ code: `
+ enum Status {
+ Active = "active",
+ Inactive = "inactive",
+ }
+ `,
+ errors: [
+ {
+ message: errorMessage,
+ },
+ ],
+ },
+ {
+ name: "Using enum with numeric values",
+ code: `
+ enum Direction {
+ Up = 1,
+ Down = 2,
+ Left = 3,
+ Right = 4,
+ }
+ `,
+ errors: [
+ {
+ message: errorMessage,
+ },
+ ],
+ },
+ ],
+});
diff --git a/libs/importer/src/importers/fsecure/fsecure-fsk-types.ts b/libs/importer/src/importers/fsecure/fsecure-fsk-types.ts
index 71797a0f8cd..1235426d683 100644
--- a/libs/importer/src/importers/fsecure/fsecure-fsk-types.ts
+++ b/libs/importer/src/importers/fsecure/fsecure-fsk-types.ts
@@ -6,6 +6,8 @@ export interface Data {
[key: string]: FskEntry;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum FskEntryTypesEnum {
Login = 1,
CreditCard = 2,
diff --git a/libs/importer/src/importers/lastpass/access/enums/idp-provider.ts b/libs/importer/src/importers/lastpass/access/enums/idp-provider.ts
index 32e74c36ee1..01c4572fcf9 100644
--- a/libs/importer/src/importers/lastpass/access/enums/idp-provider.ts
+++ b/libs/importer/src/importers/lastpass/access/enums/idp-provider.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum IdpProvider {
Azure = 0,
OktaAuthServer = 1,
diff --git a/libs/importer/src/importers/lastpass/access/enums/lastpass-login-type.ts b/libs/importer/src/importers/lastpass/access/enums/lastpass-login-type.ts
index 611dd0b6dab..a3be36c790e 100644
--- a/libs/importer/src/importers/lastpass/access/enums/lastpass-login-type.ts
+++ b/libs/importer/src/importers/lastpass/access/enums/lastpass-login-type.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum LastpassLoginType {
MasterPassword = 0,
// Not sure what Types 1 and 2 are?
diff --git a/libs/importer/src/importers/lastpass/access/enums/otp-method.ts b/libs/importer/src/importers/lastpass/access/enums/otp-method.ts
index 6b940486ff0..f1237160179 100644
--- a/libs/importer/src/importers/lastpass/access/enums/otp-method.ts
+++ b/libs/importer/src/importers/lastpass/access/enums/otp-method.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum OtpMethod {
GoogleAuth,
MicrosoftAuth,
diff --git a/libs/importer/src/importers/lastpass/access/enums/platform.ts b/libs/importer/src/importers/lastpass/access/enums/platform.ts
index 283e0c36ce2..6870fc28c24 100644
--- a/libs/importer/src/importers/lastpass/access/enums/platform.ts
+++ b/libs/importer/src/importers/lastpass/access/enums/platform.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum Platform {
Desktop,
Mobile,
diff --git a/libs/importer/src/importers/onepassword/types/onepassword-1pux-importer-types.ts b/libs/importer/src/importers/onepassword/types/onepassword-1pux-importer-types.ts
index 63a0427b2c7..d7f4dec8f95 100644
--- a/libs/importer/src/importers/onepassword/types/onepassword-1pux-importer-types.ts
+++ b/libs/importer/src/importers/onepassword/types/onepassword-1pux-importer-types.ts
@@ -25,6 +25,8 @@ export interface VaultAttributes {
type: string;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CategoryEnum {
Login = "001",
CreditCard = "002",
@@ -67,6 +69,8 @@ export interface Details {
password?: string | null;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum LoginFieldTypeEnum {
TextOrHtml = "T",
EmailAddress = "E",
diff --git a/libs/importer/src/importers/protonpass/types/protonpass-json-type.ts b/libs/importer/src/importers/protonpass/types/protonpass-json-type.ts
index 20fa314a314..af2eb15a740 100644
--- a/libs/importer/src/importers/protonpass/types/protonpass-json-type.ts
+++ b/libs/importer/src/importers/protonpass/types/protonpass-json-type.ts
@@ -27,6 +27,8 @@ export type ProtonPassItem = {
pinned: boolean;
};
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum ProtonPassItemState {
ACTIVE = 1,
TRASHED = 2,
diff --git a/libs/key-management-ui/src/lock/components/lock.component.ts b/libs/key-management-ui/src/lock/components/lock.component.ts
index 80d64e17b84..3cb0dbaca52 100644
--- a/libs/key-management-ui/src/lock/components/lock.component.ts
+++ b/libs/key-management-ui/src/lock/components/lock.component.ts
@@ -556,6 +556,15 @@ export class LockComponent implements OnInit, OnDestroy {
masterPasswordVerificationResponse!.masterKey,
this.activeAccount.id,
);
+ if (userKey == null) {
+ this.toastService.showToast({
+ variant: "error",
+ title: this.i18nService.t("errorOccurred"),
+ message: this.i18nService.t("invalidMasterPassword"),
+ });
+ return;
+ }
+
await this.setUserKeyAndContinue(userKey, true);
}
diff --git a/libs/key-management/src/biometrics/biometrics-commands.ts b/libs/key-management/src/biometrics/biometrics-commands.ts
index 81f0ea747e4..1ef31a31fb4 100644
--- a/libs/key-management/src/biometrics/biometrics-commands.ts
+++ b/libs/key-management/src/biometrics/biometrics-commands.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BiometricsCommands {
/** Perform biometric authentication for the system's user. Does not require setup, and does not return cryptographic material, only yes or no. */
AuthenticateWithBiometrics = "authenticateWithBiometrics",
diff --git a/libs/key-management/src/biometrics/biometrics-status.ts b/libs/key-management/src/biometrics/biometrics-status.ts
index fb46ed1c4be..e436574ff7d 100644
--- a/libs/key-management/src/biometrics/biometrics-status.ts
+++ b/libs/key-management/src/biometrics/biometrics-status.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum BiometricsStatus {
/** For the biometrics interface, this means that biometric unlock is available and can be used. Querying for the user specifically, this means that biometric can be used for to unlock this user */
Available,
diff --git a/libs/key-management/src/enums/kdf-type.enum.ts b/libs/key-management/src/enums/kdf-type.enum.ts
index 29fcd9f1f8e..4f468e63a29 100644
--- a/libs/key-management/src/enums/kdf-type.enum.ts
+++ b/libs/key-management/src/enums/kdf-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum KdfType {
PBKDF2_SHA256 = 0,
Argon2id = 1,
diff --git a/libs/tools/export/vault-export/vault-export-ui/src/enums/encrypted-export-type.enum.ts b/libs/tools/export/vault-export/vault-export-ui/src/enums/encrypted-export-type.enum.ts
index 4767869f7d0..2f416e4a49a 100644
--- a/libs/tools/export/vault-export/vault-export-ui/src/enums/encrypted-export-type.enum.ts
+++ b/libs/tools/export/vault-export/vault-export-ui/src/enums/encrypted-export-type.enum.ts
@@ -1,3 +1,5 @@
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum EncryptedExportType {
AccountEncrypted = 0,
FileEncrypted = 1,
diff --git a/libs/tools/send/send-ui/src/add-edit/send-add-edit-dialog.component.ts b/libs/tools/send/send-ui/src/add-edit/send-add-edit-dialog.component.ts
index 5da2c6f8bed..0bb753d3f37 100644
--- a/libs/tools/send/send-ui/src/add-edit/send-add-edit-dialog.component.ts
+++ b/libs/tools/send/send-ui/src/add-edit/send-add-edit-dialog.component.ts
@@ -35,6 +35,8 @@ export interface SendItemDialogParams {
disableForm?: boolean;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum SendItemDialogResult {
/**
* A Send was saved (created or updated).
diff --git a/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.ts b/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.ts
index c77c44467d8..9ca9aefb4ac 100644
--- a/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.ts
+++ b/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.ts
@@ -30,6 +30,8 @@ import { SendFileDetailsComponent } from "./send-file-details.component";
import { SendTextDetailsComponent } from "./send-text-details.component";
// Value = hours
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum DatePreset {
OneHour = 1,
OneDay = 24,
diff --git a/libs/vault/src/cipher-view/attachments/attachments-v2.component.ts b/libs/vault/src/cipher-view/attachments/attachments-v2.component.ts
index 68660c4bbd9..b34d0d3a312 100644
--- a/libs/vault/src/cipher-view/attachments/attachments-v2.component.ts
+++ b/libs/vault/src/cipher-view/attachments/attachments-v2.component.ts
@@ -24,6 +24,8 @@ export interface AttachmentsDialogParams {
/**
* Enum representing the possible results of the attachment dialog.
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AttachmentDialogResult {
Uploaded = "uploaded",
Removed = "removed",
diff --git a/libs/vault/src/components/add-edit-folder-dialog/add-edit-folder-dialog.component.ts b/libs/vault/src/components/add-edit-folder-dialog/add-edit-folder-dialog.component.ts
index c8559799eec..dd3cbc4c5c9 100644
--- a/libs/vault/src/components/add-edit-folder-dialog/add-edit-folder-dialog.component.ts
+++ b/libs/vault/src/components/add-edit-folder-dialog/add-edit-folder-dialog.component.ts
@@ -34,6 +34,8 @@ import {
} from "@bitwarden/components";
import { KeyService } from "@bitwarden/key-management";
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum AddEditFolderDialogResult {
Created = "created",
Deleted = "deleted",
diff --git a/libs/vault/src/components/assign-collections.component.ts b/libs/vault/src/components/assign-collections.component.ts
index 45d25a037e9..6a0c45cfbe3 100644
--- a/libs/vault/src/components/assign-collections.component.ts
+++ b/libs/vault/src/components/assign-collections.component.ts
@@ -80,6 +80,8 @@ export interface CollectionAssignmentParams {
isSingleCipherAdmin?: boolean;
}
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum CollectionAssignmentResult {
Saved = "saved",
Canceled = "canceled",
diff --git a/libs/vault/src/services/vault-nudges.service.ts b/libs/vault/src/services/vault-nudges.service.ts
index be6e978eaa0..d27cd09e954 100644
--- a/libs/vault/src/services/vault-nudges.service.ts
+++ b/libs/vault/src/services/vault-nudges.service.ts
@@ -23,6 +23,8 @@ export type NudgeStatus = {
/**
* Enum to list the various nudge types, to be used by components/badges to show/hide the nudge
*/
+// FIXME: update to use a const object instead of a typescript enum
+// eslint-disable-next-line @bitwarden/platform/no-enums
export enum VaultNudgeType {
/** Nudge to show when user has no items in their vault
* Add future nudges here