{{ "reviewAtRiskPasswords" | i18n }}
@@ -9,7 +11,7 @@
class="tw-bg-primary-100 tw-rounded-lg tw-w-full tw-px-8 tw-py-4 tw-my-4 tw-flex tw-items-center"
>
{{
diff --git a/bitwarden_license/bit-web/src/main.ts b/bitwarden_license/bit-web/src/main.ts
index 1d1519c8b50..b202a170d26 100644
--- a/bitwarden_license/bit-web/src/main.ts
+++ b/bitwarden_license/bit-web/src/main.ts
@@ -11,6 +11,4 @@ if (process.env.NODE_ENV === "production") {
enableProdMode();
}
-// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
-// eslint-disable-next-line @typescript-eslint/no-floating-promises
-platformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });
+void platformBrowserDynamic().bootstrapModule(AppModule);
diff --git a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx
index a218eaa1492..8fe332b8caf 100644
--- a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx
+++ b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx
@@ -6,10 +6,6 @@ import * as stories from "./anon-layout-wrapper.stories";
# Anon Layout Wrapper
-NOTE: These stories will treat "Light & Dark" mode as "Light" mode. This is done to avoid a bug with
-the way that we render the same component twice in the same iframe and how that interacts with the
-`router-outlet`.
-
## Anon Layout Wrapper Component
The auth owned `AnonLayoutWrapperComponent` orchestrates routing configuration data and feeds it
diff --git a/libs/common/src/enums/feature-flag.enum.ts b/libs/common/src/enums/feature-flag.enum.ts
index a8e036c82d6..5137fda329f 100644
--- a/libs/common/src/enums/feature-flag.enum.ts
+++ b/libs/common/src/enums/feature-flag.enum.ts
@@ -8,7 +8,6 @@ export enum FeatureFlag {
ProviderClientVaultPrivacyBanner = "ac-2833-provider-client-vault-privacy-banner",
AccountDeprovisioning = "pm-10308-account-deprovisioning",
VerifiedSsoDomainEndpoint = "pm-12337-refactor-sso-details-endpoint",
- PM14505AdminConsoleIntegrationPage = "pm-14505-admin-console-integration-page",
LimitItemDeletion = "pm-15493-restrict-item-deletion-to-can-manage-permission",
/* Autofill */
@@ -69,7 +68,6 @@ export const DefaultFeatureFlagValue = {
[FeatureFlag.ProviderClientVaultPrivacyBanner]: FALSE,
[FeatureFlag.AccountDeprovisioning]: FALSE,
[FeatureFlag.VerifiedSsoDomainEndpoint]: FALSE,
- [FeatureFlag.PM14505AdminConsoleIntegrationPage]: FALSE,
[FeatureFlag.LimitItemDeletion]: FALSE,
/* Autofill */
diff --git a/libs/common/src/platform/models/domain/domain-base.ts b/libs/common/src/platform/models/domain/domain-base.ts
index 192034254b9..5aa79946653 100644
--- a/libs/common/src/platform/models/domain/domain-base.ts
+++ b/libs/common/src/platform/models/domain/domain-base.ts
@@ -65,7 +65,6 @@ export default class Domain {
key: SymmetricCryptoKey = null,
objectContext: string = "No Domain Context",
): Promise {
- const promises = [];
const self: any = this;
for (const prop in map) {
@@ -74,27 +73,15 @@ export default class Domain {
continue;
}
- (function (theProp) {
- const p = Promise.resolve()
- .then(() => {
- const mapProp = map[theProp] || theProp;
- if (self[mapProp]) {
- return self[mapProp].decrypt(
- orgId,
- key,
- `Property: ${prop}; ObjectContext: ${objectContext}`,
- );
- }
- return null;
- })
- .then((val: any) => {
- (viewModel as any)[theProp] = val;
- });
- promises.push(p);
- })(prop);
+ const mapProp = map[prop] || prop;
+ if (self[mapProp]) {
+ (viewModel as any)[prop] = await self[mapProp].decrypt(
+ orgId,
+ key,
+ `Property: ${prop}; ObjectContext: ${objectContext}`,
+ );
+ }
}
-
- await Promise.all(promises);
return viewModel;
}
@@ -121,22 +108,20 @@ export default class Domain {
_: Constructor = this.constructor as Constructor,
objectContext: string = "No Domain Context",
): Promise> {
- const promises = [];
+ const decryptedObjects = [];
for (const prop of encryptedProperties) {
const value = (this as any)[prop] as EncString;
- promises.push(
- this.decryptProperty(
- prop,
- value,
- key,
- encryptService,
- `Property: ${prop.toString()}; ObjectContext: ${objectContext}`,
- ),
+ const decrypted = await this.decryptProperty(
+ prop,
+ value,
+ key,
+ encryptService,
+ `Property: ${prop.toString()}; ObjectContext: ${objectContext}`,
);
+ decryptedObjects.push(decrypted);
}
- const decryptedObjects = await Promise.all(promises);
const decryptedObject = decryptedObjects.reduce(
(acc, obj) => {
return { ...acc, ...obj };
diff --git a/libs/common/src/vault/models/domain/cipher.ts b/libs/common/src/vault/models/domain/cipher.ts
index d82f4585e65..21538b87788 100644
--- a/libs/common/src/vault/models/domain/cipher.ts
+++ b/libs/common/src/vault/models/domain/cipher.ts
@@ -12,7 +12,10 @@ import { CipherRepromptType } from "../../enums/cipher-reprompt-type";
import { CipherType } from "../../enums/cipher-type";
import { CipherData } from "../data/cipher.data";
import { LocalData } from "../data/local.data";
+import { AttachmentView } from "../view/attachment.view";
import { CipherView } from "../view/cipher.view";
+import { FieldView } from "../view/field.view";
+import { PasswordHistoryView } from "../view/password-history.view";
import { Attachment } from "./attachment";
import { Card } from "./card";
@@ -136,6 +139,7 @@ export class Cipher extends Domain implements Decryptable {
if (this.key != null) {
const encryptService = Utils.getContainerService().getEncryptService();
+
const keyBytes = await encryptService.decryptToBytes(
this.key,
encKey,
@@ -198,44 +202,28 @@ export class Cipher extends Domain implements Decryptable {
}
if (this.attachments != null && this.attachments.length > 0) {
- const attachments: any[] = [];
- await this.attachments.reduce((promise, attachment) => {
- return promise
- .then(() => {
- return attachment.decrypt(this.organizationId, `Cipher Id: ${this.id}`, encKey);
- })
- .then((decAttachment) => {
- attachments.push(decAttachment);
- });
- }, Promise.resolve());
+ const attachments: AttachmentView[] = [];
+ for (const attachment of this.attachments) {
+ attachments.push(
+ await attachment.decrypt(this.organizationId, `Cipher Id: ${this.id}`, encKey),
+ );
+ }
model.attachments = attachments;
}
if (this.fields != null && this.fields.length > 0) {
- const fields: any[] = [];
- await this.fields.reduce((promise, field) => {
- return promise
- .then(() => {
- return field.decrypt(this.organizationId, encKey);
- })
- .then((decField) => {
- fields.push(decField);
- });
- }, Promise.resolve());
+ const fields: FieldView[] = [];
+ for (const field of this.fields) {
+ fields.push(await field.decrypt(this.organizationId, encKey));
+ }
model.fields = fields;
}
if (this.passwordHistory != null && this.passwordHistory.length > 0) {
- const passwordHistory: any[] = [];
- await this.passwordHistory.reduce((promise, ph) => {
- return promise
- .then(() => {
- return ph.decrypt(this.organizationId, encKey);
- })
- .then((decPh) => {
- passwordHistory.push(decPh);
- });
- }, Promise.resolve());
+ const passwordHistory: PasswordHistoryView[] = [];
+ for (const ph of this.passwordHistory) {
+ passwordHistory.push(await ph.decrypt(this.organizationId, encKey));
+ }
model.passwordHistory = passwordHistory;
}
diff --git a/libs/components/src/chip-select/chip-select.component.ts b/libs/components/src/chip-select/chip-select.component.ts
index e9be66da7d4..a4c73b699cf 100644
--- a/libs/components/src/chip-select/chip-select.component.ts
+++ b/libs/components/src/chip-select/chip-select.component.ts
@@ -45,7 +45,6 @@ export type ChipSelectOption = Option & {
multi: true,
},
],
- preserveWhitespaces: false,
})
export class ChipSelectComponent implements ControlValueAccessor, AfterViewInit {
@ViewChild(MenuComponent) menu: MenuComponent;
diff --git a/libs/components/src/color-password/color-password.component.ts b/libs/components/src/color-password/color-password.component.ts
index e48758ca59a..4fc94e41854 100644
--- a/libs/components/src/color-password/color-password.component.ts
+++ b/libs/components/src/color-password/color-password.component.ts
@@ -22,7 +22,6 @@ enum CharacterType {
}
}`,
- preserveWhitespaces: false,
standalone: true,
})
export class ColorPasswordComponent {
diff --git a/libs/components/src/navigation/nav-group.component.ts b/libs/components/src/navigation/nav-group.component.ts
index 62bdee26740..37244f37c8d 100644
--- a/libs/components/src/navigation/nav-group.component.ts
+++ b/libs/components/src/navigation/nav-group.component.ts
@@ -29,7 +29,6 @@ import { SideNavService } from "./side-nav.service";
],
standalone: true,
imports: [CommonModule, NavItemComponent, IconButtonModule, I18nPipe],
- preserveWhitespaces: false,
})
export class NavGroupComponent extends NavBaseComponent implements AfterContentInit {
@ContentChildren(NavBaseComponent, {
diff --git a/libs/components/src/stories/colors.mdx b/libs/components/src/stories/colors.mdx
index 22079dfcbf7..3a4a4f0fe3a 100644
--- a/libs/components/src/stories/colors.mdx
+++ b/libs/components/src/stories/colors.mdx
@@ -13,7 +13,7 @@ export const Table = (args) => (
- | General usage |
+ General usage |
|
@@ -119,6 +119,4 @@ Below are all the permited colors. Please consult design before considering addi
diff --git a/libs/components/src/stories/kitchen-sink/components/kitchen-sink-main.component.ts b/libs/components/src/stories/kitchen-sink/components/kitchen-sink-main.component.ts
index 9c609300ed1..fd682bd1515 100644
--- a/libs/components/src/stories/kitchen-sink/components/kitchen-sink-main.component.ts
+++ b/libs/components/src/stories/kitchen-sink/components/kitchen-sink-main.component.ts
@@ -56,12 +56,6 @@ class KitchenSinkDialog {
isolated stories. The stories for the Kitchen Sink exist to be tested by the Chromatic UI
tests.
-
-
- NOTE: These stories will treat "Light & Dark" mode as "Light" mode. This is done to avoid a
- bug with the way that we render the same component twice in the same iframe and how that
- interacts with the router-outlet.
-
diff --git a/libs/components/src/stories/kitchen-sink/kitchen-sink.mdx b/libs/components/src/stories/kitchen-sink/kitchen-sink.mdx
index 49493f749ee..34e80081887 100644
--- a/libs/components/src/stories/kitchen-sink/kitchen-sink.mdx
+++ b/libs/components/src/stories/kitchen-sink/kitchen-sink.mdx
@@ -9,7 +9,3 @@ import * as stories from "./kitchen-sink.stories";
The purpose of this story is to compose together all of our components. When snapshot tests run,
we'll be able to spot-check visual changes in a more app-like environment than just the isolated
stories. The stories for the Kitchen Sink exist to be tested by the Chromatic UI tests.
-
-NOTE: These stories will treat "Light & Dark" mode as "Light" mode. This is done to avoid a bug with
-the way that we render the same component twice in the same iframe and how that interacts with the
-`router-outlet`.
diff --git a/libs/components/src/toast/toastr.component.ts b/libs/components/src/toast/toastr.component.ts
index c93e96150ad..75124ceb4b3 100644
--- a/libs/components/src/toast/toastr.component.ts
+++ b/libs/components/src/toast/toastr.component.ts
@@ -23,7 +23,6 @@ import { ToastComponent } from "./toast.component";
transition("active => removed", animate("{{ easeTime }}ms {{ easing }}")),
]),
],
- preserveWhitespaces: false,
standalone: true,
imports: [ToastComponent],
})
diff --git a/libs/components/src/toggle-group/toggle-group.component.ts b/libs/components/src/toggle-group/toggle-group.component.ts
index 5033a27ed6d..057a594654a 100644
--- a/libs/components/src/toggle-group/toggle-group.component.ts
+++ b/libs/components/src/toggle-group/toggle-group.component.ts
@@ -12,7 +12,6 @@ let nextId = 0;
@Component({
selector: "bit-toggle-group",
templateUrl: "./toggle-group.component.html",
- preserveWhitespaces: false,
standalone: true,
})
export class ToggleGroupComponent {
diff --git a/libs/components/src/toggle-group/toggle.component.ts b/libs/components/src/toggle-group/toggle.component.ts
index 7bd62056763..bb48b7e103e 100644
--- a/libs/components/src/toggle-group/toggle.component.ts
+++ b/libs/components/src/toggle-group/toggle.component.ts
@@ -19,7 +19,6 @@ let nextId = 0;
@Component({
selector: "bit-toggle",
templateUrl: "./toggle.component.html",
- preserveWhitespaces: false,
standalone: true,
imports: [NgClass],
})
diff --git a/libs/key-management/src/key.service.ts b/libs/key-management/src/key.service.ts
index 1a4f9374d0e..a9d63eb17d4 100644
--- a/libs/key-management/src/key.service.ts
+++ b/libs/key-management/src/key.service.ts
@@ -368,20 +368,20 @@ export class DefaultKeyService implements KeyServiceAbstraction {
await this.stateProvider.getUser(userId, USER_ENCRYPTED_ORGANIZATION_KEYS).update(() => {
const encOrgKeyData: { [orgId: string]: EncryptedOrganizationKeyData } = {};
- orgs.forEach((org) => {
+ for (const org of orgs) {
encOrgKeyData[org.id] = {
type: "organization",
key: org.key,
};
- });
+ }
- providerOrgs.forEach((org) => {
+ for (const org of providerOrgs) {
encOrgKeyData[org.id] = {
type: "provider",
providerId: org.providerId,
key: org.key,
};
- });
+ }
return encOrgKeyData;
});
}
diff --git a/package-lock.json b/package-lock.json
index da110e68be7..59635383625 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -46,7 +46,7 @@
"https-proxy-agent": "7.0.5",
"inquirer": "8.2.6",
"jquery": "3.7.1",
- "jsdom": "25.0.1",
+ "jsdom": "26.0.0",
"jszip": "3.10.1",
"koa": "2.15.3",
"koa-bodyparser": "4.4.1",
@@ -61,7 +61,7 @@
"nord": "0.2.1",
"oidc-client-ts": "2.4.1",
"open": "8.4.2",
- "papaparse": "5.4.1",
+ "papaparse": "5.5.2",
"patch-package": "8.0.0",
"popper.js": "1.16.1",
"proper-lockfile": "4.1.2",
@@ -153,6 +153,7 @@
"jest-junit": "16.0.0",
"jest-mock-extended": "3.0.7",
"jest-preset-angular": "14.1.1",
+ "json5": "2.2.3",
"lint-staged": "15.4.1",
"mini-css-extract-plugin": "2.9.2",
"node-ipc": "9.2.1",
@@ -207,7 +208,7 @@
"form-data": "4.0.1",
"https-proxy-agent": "7.0.5",
"inquirer": "8.2.6",
- "jsdom": "25.0.1",
+ "jsdom": "26.0.0",
"jszip": "3.10.1",
"koa": "2.15.3",
"koa-bodyparser": "4.4.1",
@@ -218,7 +219,7 @@
"node-fetch": "2.6.12",
"node-forge": "1.3.1",
"open": "8.4.2",
- "papaparse": "5.4.1",
+ "papaparse": "5.5.2",
"proper-lockfile": "4.1.2",
"rxjs": "7.8.1",
"tldts": "6.1.74",
@@ -2323,6 +2324,28 @@
"rxjs": "^6.5.3 || ^7.4.0"
}
},
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz",
+ "integrity": "sha512-RtWv9jFN2/bLExuZgFFZ0I3pWWeezAHGgrmjqGGWclATl1aDe3yhCUaI0Ilkp6OCk9zX7+FjvDasEX8Q9Rxc5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.1",
+ "@csstools/css-color-parser": "^3.0.7",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^11.0.2"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
+ "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
+ "license": "ISC",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
@@ -5102,6 +5125,116 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz",
+ "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz",
+ "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz",
+ "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.0.1",
+ "@csstools/css-calc": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@develar/schema-utils": {
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz",
@@ -14850,12 +14983,13 @@
"license": "MIT"
},
"node_modules/cssstyle": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
- "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz",
+ "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==",
"license": "MIT",
"dependencies": {
- "rrweb-cssom": "^0.7.1"
+ "@asamuzakjp/css-color": "^2.8.2",
+ "rrweb-cssom": "^0.8.0"
},
"engines": {
"node": ">=18"
@@ -21816,22 +21950,22 @@
}
},
"node_modules/jsdom": {
- "version": "25.0.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz",
+ "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==",
"license": "MIT",
"dependencies": {
- "cssstyle": "^4.1.0",
+ "cssstyle": "^4.2.1",
"data-urls": "^5.0.0",
"decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
+ "form-data": "^4.0.1",
"html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.5",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.12",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.7.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
"tough-cookie": "^5.0.0",
@@ -21839,7 +21973,7 @@
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
+ "whatwg-url": "^14.1.0",
"ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
@@ -21847,7 +21981,7 @@
"node": ">=18"
},
"peerDependencies": {
- "canvas": "^2.11.2"
+ "canvas": "^3.0.0"
},
"peerDependenciesMeta": {
"canvas": {
@@ -21856,17 +21990,28 @@
}
},
"node_modules/jsdom/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"license": "MIT",
- "dependencies": {
- "debug": "^4.3.4"
- },
"engines": {
"node": ">= 14"
}
},
+ "node_modules/jsdom/node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/jsdom/node_modules/http-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
@@ -21880,6 +22025,19 @@
"node": ">= 14"
}
},
+ "node_modules/jsdom/node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/jsdom/node_modules/tough-cookie": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
@@ -21970,7 +22128,6 @@
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
@@ -25883,9 +26040,9 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.13",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
- "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
+ "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
"license": "MIT"
},
"node_modules/object-assign": {
@@ -26447,9 +26604,9 @@
"license": "(MIT AND Zlib)"
},
"node_modules/papaparse": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz",
- "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==",
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.2.tgz",
+ "integrity": "sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA==",
"license": "MIT"
},
"node_modules/param-case": {
@@ -28801,9 +28958,9 @@
}
},
"node_modules/rrweb-cssom": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"license": "MIT"
},
"node_modules/run-applescript": {
@@ -33341,9 +33498,9 @@
}
},
"node_modules/whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
+ "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
"license": "MIT",
"dependencies": {
"tr46": "^5.0.0",
diff --git a/package.json b/package.json
index 5145b058f6f..4762bad20ad 100644
--- a/package.json
+++ b/package.json
@@ -114,6 +114,7 @@
"jest-junit": "16.0.0",
"jest-mock-extended": "3.0.7",
"jest-preset-angular": "14.1.1",
+ "json5": "2.2.3",
"lint-staged": "15.4.1",
"mini-css-extract-plugin": "2.9.2",
"node-ipc": "9.2.1",
@@ -176,7 +177,7 @@
"https-proxy-agent": "7.0.5",
"inquirer": "8.2.6",
"jquery": "3.7.1",
- "jsdom": "25.0.1",
+ "jsdom": "26.0.0",
"jszip": "3.10.1",
"koa": "2.15.3",
"koa-bodyparser": "4.4.1",
@@ -191,7 +192,7 @@
"nord": "0.2.1",
"oidc-client-ts": "2.4.1",
"open": "8.4.2",
- "papaparse": "5.4.1",
+ "papaparse": "5.5.2",
"patch-package": "8.0.0",
"popper.js": "1.16.1",
"proper-lockfile": "4.1.2",
diff --git a/scripts/dep-ownership.ts b/scripts/dep-ownership.ts
index e574a3e9e96..f0bcb1f7dd8 100644
--- a/scripts/dep-ownership.ts
+++ b/scripts/dep-ownership.ts
@@ -5,8 +5,10 @@
import fs from "fs";
import path from "path";
-const renovateConfig = JSON.parse(
- fs.readFileSync(path.join(__dirname, "..", "..", ".github", "renovate.json"), "utf8"),
+import JSON5 from "json5";
+
+const renovateConfig = JSON5.parse(
+ fs.readFileSync(path.join(__dirname, "..", "..", ".github", "renovate.json5"), "utf8"),
);
const packagesWithOwners = renovateConfig.packageRules
diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json
index 611b30a3bdb..7ffa34df58c 100644
--- a/tsconfig.eslint.json
+++ b/tsconfig.eslint.json
@@ -40,12 +40,7 @@
"@bitwarden/vault-export-core": [".libs/tools/export/vault-export/vault-export-core/src"],
"@bitwarden/vault-export-ui": [".libs/tools/export/vault-export/vault-export-ui/src"],
"@bitwarden/vault": ["./libs/vault/src"]
- },
- "plugins": [
- {
- "transform": "typescript-transform-paths"
- }
- ]
+ }
},
"files": [
".storybook/main.ts",
diff --git a/tsconfig.json b/tsconfig.json
index e6e4c47096b..cfc33f572e8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -44,9 +44,6 @@
"@bitwarden/web-vault/*": ["./apps/web/src/*"]
},
"plugins": [
- {
- "transform": "typescript-transform-paths"
- },
{
"name": "typescript-strict-plugin"
}