1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-12-05 09:14:28 +01:00

Merge branch 'main' into platform/handle-401-refresh-token

This commit is contained in:
Todd Martin 2025-11-24 14:21:53 -05:00 committed by GitHub
commit 33739cc5e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
30 changed files with 171 additions and 134 deletions

View File

@ -293,14 +293,24 @@ export default class RuntimeBackground {
case "openPopup":
await this.openPopup();
break;
case VaultMessages.OpenAtRiskPasswords:
case VaultMessages.OpenAtRiskPasswords: {
if (await this.shouldRejectManyOriginMessage(msg)) {
return;
}
await this.main.openAtRisksPasswordsPage();
this.announcePopupOpen();
break;
case VaultMessages.OpenBrowserExtensionToUrl:
}
case VaultMessages.OpenBrowserExtensionToUrl: {
if (await this.shouldRejectManyOriginMessage(msg)) {
return;
}
await this.main.openTheExtensionToPage(msg.url);
this.announcePopupOpen();
break;
}
case "bgUpdateContextMenu":
case "editedCipher":
case "addedCipher":
@ -312,10 +322,7 @@ export default class RuntimeBackground {
break;
}
case "authResult": {
const env = await firstValueFrom(this.environmentService.environment$);
const vaultUrl = env.getWebVaultUrl();
if (msg.referrer == null || Utils.getHostname(vaultUrl) !== msg.referrer) {
if (!(await this.isValidVaultReferrer(msg.referrer))) {
return;
}
@ -334,10 +341,7 @@ export default class RuntimeBackground {
break;
}
case "webAuthnResult": {
const env = await firstValueFrom(this.environmentService.environment$);
const vaultUrl = env.getWebVaultUrl();
if (msg.referrer == null || Utils.getHostname(vaultUrl) !== msg.referrer) {
if (!(await this.isValidVaultReferrer(msg.referrer))) {
return;
}
@ -372,6 +376,48 @@ export default class RuntimeBackground {
}
}
/**
* For messages that can originate from a vault host page or extension, validate referrer or external
*
* @param message
* @returns true if message fails validation
*/
private async shouldRejectManyOriginMessage(message: {
webExtSender: chrome.runtime.MessageSender;
}): Promise<boolean> {
const isValidVaultReferrer = await this.isValidVaultReferrer(
Utils.getHostname(message?.webExtSender?.origin),
);
if (isValidVaultReferrer) {
return false;
}
return isExternalMessage(message);
}
/**
* Validates a message's referrer matches the configured web vault hostname.
*
* @param referrer - hostname from message source
* @returns true if referrer matches web vault
*/
private async isValidVaultReferrer(referrer: string | null | undefined): Promise<boolean> {
if (!referrer) {
return false;
}
const env = await firstValueFrom(this.environmentService.environment$);
const vaultUrl = env.getWebVaultUrl();
const vaultHostname = Utils.getHostname(vaultUrl);
if (!vaultHostname) {
return false;
}
return vaultHostname === referrer;
}
private async autofillPage(tabToAutoFill: chrome.tabs.Tab) {
const totpCode = await this.autofillService.doAutoFill({
tab: tabToAutoFill,

View File

@ -1,8 +1,5 @@
// eslint-disable-next-line no-restricted-imports
import { CommonModule } from "@angular/common";
// eslint-disable-next-line no-restricted-imports
import { Component, inject } from "@angular/core";
// eslint-disable-next-line no-restricted-imports
import { ActivatedRoute, RouterModule } from "@angular/router";
import { firstValueFrom, map } from "rxjs";

View File

@ -1,5 +1,3 @@
// TODO: This needs to be dealt with by moving this folder or updating the lint rule.
/* eslint-disable no-restricted-imports */
import { ActivatedRoute, RouterModule } from "@angular/router";
import { Meta, StoryObj, moduleMetadata } from "@storybook/angular";
import { BehaviorSubject, of } from "rxjs";

View File

@ -1,6 +1,4 @@
// eslint-disable-next-line no-restricted-imports
import { CommonModule } from "@angular/common";
// eslint-disable-next-line no-restricted-imports
import { Component } from "@angular/core";
import { JslibModule } from "@bitwarden/angular/jslib.module";

View File

@ -56,8 +56,8 @@ import { BlockedDomainsComponent } from "../autofill/popup/settings/blocked-doma
import { ExcludedDomainsComponent } from "../autofill/popup/settings/excluded-domains.component";
import { NotificationsSettingsComponent } from "../autofill/popup/settings/notifications.component";
import { PremiumV2Component } from "../billing/popup/settings/premium-v2.component";
import { PhishingWarning } from "../dirt/phishing-detection/pages/phishing-warning.component";
import { ProtectedByComponent } from "../dirt/phishing-detection/pages/protected-by-component";
import { PhishingWarning } from "../dirt/phishing-detection/popup/phishing-warning.component";
import { ProtectedByComponent } from "../dirt/phishing-detection/popup/protected-by-component";
import { RemovePasswordComponent } from "../key-management/key-connector/remove-password.component";
import BrowserPopupUtils from "../platform/browser/browser-popup-utils";
import { popupRouterCacheGuard } from "../platform/popup/view-cache/popup-router-cache.service";

View File

@ -120,9 +120,9 @@ checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
[[package]]
name = "arboard"
version = "3.6.0"
version = "3.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55f533f8e0af236ffe5eb979b99381df3258853f00ba2e44b6e1955292c75227"
checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf"
dependencies = [
"clipboard-win",
"log",
@ -131,6 +131,7 @@ dependencies = [
"objc2-foundation",
"parking_lot",
"percent-encoding",
"windows-sys 0.60.2",
"wl-clipboard-rs",
"x11rb",
]

View File

@ -22,7 +22,7 @@ publish = false
aes = "=0.8.4"
aes-gcm = "=0.10.3"
anyhow = "=1.0.94"
arboard = { version = "=3.6.0", default-features = false }
arboard = { version = "=3.6.1", default-features = false }
ashpd = "=0.11.0"
base64 = "=0.22.1"
bitwarden-russh = { git = "https://github.com/bitwarden/bitwarden-russh.git", rev = "a641316227227f8777fdf56ac9fa2d6b5f7fe662" }

View File

@ -154,45 +154,15 @@
},
"configurations": {
"oss": {
"buildTarget": "web:build:oss"
},
"oss-dev": {
"buildTarget": "web:build:oss-dev"
},
"commercial": {
"buildTarget": "web:build:commercial"
},
"commercial-dev": {
"buildTarget": "web:build:commercial-dev"
},
"commercial-qa": {
"buildTarget": "web:build:commercial-qa"
},
"commercial-cloud": {
"buildTarget": "web:build:commercial-cloud"
},
"commercial-euprd": {
"buildTarget": "web:build:commercial-euprd"
},
"commercial-euqa": {
"buildTarget": "web:build:commercial-euqa"
},
"commercial-usdev": {
"buildTarget": "web:build:commercial-usdev"
},
"commercial-ee": {
"buildTarget": "web:build:commercial-ee"
},
"oss-selfhost": {
"buildTarget": "web:build:oss-selfhost"
},
"oss-selfhost-dev": {
"buildTarget": "web:build:oss-selfhost-dev"
},
"commercial-selfhost": {
"buildTarget": "web:build:commercial-selfhost"
},
"commercial-selfhost-dev": {
"buildTarget": "web:build:commercial-selfhost-dev"
}
}

View File

@ -30,6 +30,8 @@ import { NavigationProductSwitcherComponent } from "./navigation-switcher.compon
selector: "[mockOrgs]",
standalone: false,
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
class MockOrganizationService implements Partial<OrganizationService> {
private static _orgs = new BehaviorSubject<Organization[]>([]);
@ -49,6 +51,8 @@ class MockOrganizationService implements Partial<OrganizationService> {
selector: "[mockProviders]",
standalone: false,
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
class MockProviderService implements Partial<ProviderService> {
private static _providers = new BehaviorSubject<Provider[]>([]);

View File

@ -30,6 +30,8 @@ import { ProductSwitcherService } from "./shared/product-switcher.service";
selector: "[mockOrgs]",
standalone: false,
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
class MockOrganizationService implements Partial<OrganizationService> {
private static _orgs = new BehaviorSubject<Organization[]>([]);
@ -49,6 +51,8 @@ class MockOrganizationService implements Partial<OrganizationService> {
selector: "[mockProviders]",
standalone: false,
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
class MockProviderService implements Partial<ProviderService> {
private static _providers = new BehaviorSubject<Provider[]>([]);

View File

@ -13,9 +13,11 @@ const config = require(path.resolve(__dirname, "config.js"));
const pjson = require(path.resolve(__dirname, "package.json"));
module.exports.getEnv = function getEnv(params) {
const ENV = params.env || (process.env.ENV == null ? "development" : process.env.ENV);
const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV;
const LOGGING = process.env.LOGGING != "false";
const ENV = params.env?.ENV ?? process.env?.ENV ?? "development";
const NODE_ENV = params.env?.NODE_ENV ?? process.env?.NODE_ENV ?? "development";
const LOGGING =
params.env?.LOGGING ??
(process.env?.LOGGING === undefined ? true : process.env.LOGGING !== "false");
return { ENV, NODE_ENV, LOGGING };
};
@ -35,7 +37,11 @@ const DEFAULT_PARAMS = {
* tsConfig: string;
* outputPath?: string;
* mode?: string;
* env?: string;
* env?: {
* ENV?: string;
* NODE_ENV?: string;
* LOGGING?: boolean;
* };
* importAliases?: import("webpack").ResolveOptions["alias"];
* }} params
*/

View File

@ -15,6 +15,7 @@ module.exports = (webpackConfig, context) => {
},
tsConfig: "apps/web/tsconfig.build.json",
outputPath: path.resolve(context.context.root, context.options.outputPath),
env: context.options.env,
});
} else {
return buildConfig({

View File

@ -3,6 +3,7 @@ const { buildConfig } = require(path.resolve(__dirname, "../../apps/web/webpack.
module.exports = (webpackConfig, context) => {
const isNxBuild = context && context.options;
if (isNxBuild) {
return buildConfig({
configName: "Commercial",
@ -23,6 +24,7 @@ module.exports = (webpackConfig, context) => {
alias: "@bitwarden/commercial-sdk-internal",
},
],
env: context.options.env,
});
} else {
return buildConfig({

View File

@ -63,7 +63,7 @@ export default tseslint.config(
// TODO: Enable these.
"@angular-eslint/component-class-suffix": "error",
"@angular-eslint/contextual-lifecycle": "error",
"@angular-eslint/directive-class-suffix": 0,
"@angular-eslint/directive-class-suffix": "error",
"@angular-eslint/no-empty-lifecycle-method": 0,
"@angular-eslint/no-input-rename": 0,
"@angular-eslint/no-inputs-metadata-property": "error",

View File

@ -24,6 +24,8 @@ import { KeyService } from "@bitwarden/key-management";
selector: "app-user-verification",
standalone: false,
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
export class UserVerificationComponent implements ControlValueAccessor, OnInit, OnDestroy {
private _invalidSecret = false;
// FIXME(https://bitwarden.atlassian.net/browse/CL-903): Migrate to Signals

View File

@ -45,6 +45,8 @@ export function _cipherListVirtualScrollStrategyFactory(cipherListDir: CipherLis
},
],
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
export class CipherListVirtualScroll extends CdkFixedSizeVirtualScroll {
_scrollStrategy: CipherListVirtualScrollStrategy;

View File

@ -54,6 +54,14 @@ const buttonStyles: Record<ButtonType, string[]> = {
"hover:!tw-text-contrast",
...focusRing,
],
dangerPrimary: [
"tw-border-danger-600",
"tw-bg-danger-600",
"!tw-text-contrast",
"hover:tw-bg-danger-700",
"hover:tw-border-danger-700",
...focusRing,
],
unstyled: [],
};

View File

@ -62,6 +62,13 @@ export const Primary: Story = {
},
};
export const DangerPrimary: Story = {
...Default,
args: {
buttonType: "dangerPrimary",
},
};
export const Danger: Story = {
...Default,
args: {
@ -77,6 +84,7 @@ export const Small: Story = {
<button type="button" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="'primary'" [size]="size" [block]="block">Primary small</button>
<button type="button" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="'secondary'" [size]="size" [block]="block">Secondary small</button>
<button type="button" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="'danger'" [size]="size" [block]="block">Danger small</button>
<button type="button" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="'dangerPrimary'" [size]="size" [block]="block">Danger Primary small</button>
</div>
`,
}),

View File

@ -1,11 +1,11 @@
import { NgModule } from "@angular/core";
import { FormControlComponent } from "./form-control.component";
import { BitHintComponent } from "./hint.component";
import { BitHintDirective } from "./hint.directive";
import { BitLabelComponent } from "./label.component";
@NgModule({
imports: [BitLabelComponent, FormControlComponent, BitHintComponent],
exports: [FormControlComponent, BitLabelComponent, BitHintComponent],
imports: [BitLabelComponent, FormControlComponent, BitHintDirective],
exports: [FormControlComponent, BitLabelComponent, BitHintDirective],
})
export class FormControlModule {}

View File

@ -9,6 +9,6 @@ let nextId = 0;
class: "tw-text-muted tw-font-normal tw-inline-block tw-mt-1 tw-text-xs",
},
})
export class BitHintComponent {
export class BitHintDirective {
@HostBinding() id = `bit-hint-${nextId++}`;
}

View File

@ -15,7 +15,7 @@ import {
import { I18nPipe } from "@bitwarden/ui-common";
import { BitHintComponent } from "../form-control/hint.component";
import { BitHintDirective } from "../form-control/hint.directive";
import { BitLabelComponent } from "../form-control/label.component";
import { inputBorderClasses } from "../input/input.directive";
@ -31,7 +31,7 @@ import { BitFormFieldControl } from "./form-field-control";
})
export class BitFormFieldComponent implements AfterContentChecked {
readonly input = contentChild.required(BitFormFieldControl);
readonly hint = contentChild(BitHintComponent);
readonly hint = contentChild(BitHintDirective);
readonly label = contentChild(BitLabelComponent);
readonly prefixContainer = viewChild<ElementRef<HTMLDivElement>>("prefixContainer");

View File

@ -1,6 +1,6 @@
import { ModelSignal } from "@angular/core";
export type ButtonType = "primary" | "secondary" | "danger" | "unstyled";
export type ButtonType = "primary" | "secondary" | "danger" | "dangerPrimary" | "unstyled";
export type ButtonSize = "default" | "small";

View File

@ -13,7 +13,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms";
import { AriaDisableDirective } from "../a11y";
import { FormControlModule } from "../form-control/form-control.module";
import { BitHintComponent } from "../form-control/hint.component";
import { BitHintDirective } from "../form-control/hint.directive";
import { BitLabelComponent } from "../form-control/label.component";
let nextId = 0;
@ -56,7 +56,7 @@ export class SwitchComponent implements ControlValueAccessor, AfterViewInit {
protected readonly disabled = model(false);
protected readonly disabledReasonText = input<string | null>(null);
private readonly hintComponent = contentChild<BitHintComponent>(BitHintComponent);
private readonly hintComponent = contentChild<BitHintDirective>(BitHintDirective);
protected readonly disabledReasonTextId = `bit-switch-disabled-text-${nextId++}`;

View File

@ -35,7 +35,7 @@ import { TableComponent } from "./table.component";
@Directive({
selector: "[bitRowDef]",
})
export class BitRowDef {
export class BitRowDefDirective {
constructor(public template: TemplateRef<any>) {}
}
@ -69,7 +69,7 @@ export class TableScrollComponent
/** Optional trackBy function. */
readonly trackBy = input<TrackByFunction<any> | undefined>();
protected readonly rowDef = contentChild(BitRowDef);
protected readonly rowDef = contentChild(BitRowDefDirective);
/**
* Height of the thead element (in pixels).

View File

@ -5,14 +5,14 @@ import { NgModule } from "@angular/core";
import { CellDirective } from "./cell.directive";
import { RowDirective } from "./row.directive";
import { SortableComponent } from "./sortable.component";
import { BitRowDef, TableScrollComponent } from "./table-scroll.component";
import { BitRowDefDirective, TableScrollComponent } from "./table-scroll.component";
import { TableBodyDirective, TableComponent } from "./table.component";
@NgModule({
imports: [
CommonModule,
ScrollingModule,
BitRowDef,
BitRowDefDirective,
CellDirective,
RowDirective,
SortableComponent,
@ -21,7 +21,7 @@ import { TableBodyDirective, TableComponent } from "./table.component";
TableScrollComponent,
],
exports: [
BitRowDef,
BitRowDefDirective,
CellDirective,
RowDirective,
SortableComponent,

View File

@ -8,6 +8,8 @@ import { firstValueFrom } from "rxjs";
providers: [TextFieldModule],
hostDirectives: [CdkTextareaAutosize],
})
// FIXME(https://bitwarden.atlassian.net/browse/PM-28232): Use Directive suffix
// eslint-disable-next-line @angular-eslint/directive-class-suffix
export class VaultAutosizeReadOnlyTextArea implements AfterViewInit {
constructor(
@Host() private autosize: CdkTextareaAutosize,

112
package-lock.json generated
View File

@ -38,7 +38,7 @@
"@nx/js": "21.6.8",
"@nx/webpack": "21.6.8",
"big-integer": "1.6.52",
"braintree-web-drop-in": "1.44.0",
"braintree-web-drop-in": "1.46.0",
"buffer": "6.0.3",
"bufferutil": "4.0.9",
"chalk": "4.1.2",
@ -4798,15 +4798,15 @@
"link": true
},
"node_modules/@braintree/asset-loader": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@braintree/asset-loader/-/asset-loader-2.0.1.tgz",
"integrity": "sha512-OGAoBA5MRVsr5qg0sXM6NMJbqHnYZhBudtM6WGgpQnoX42fjUYbE6Y6qFuuerD5z3lsOAjnu80DooBs1VBuh5Q==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@braintree/asset-loader/-/asset-loader-2.0.3.tgz",
"integrity": "sha512-uREap1j30wKRlC0mK99nNPMpEp77NtB6XixpDfFJPZHmkrmw7IB4skKe+26LZBK1H6oSainFhAyKoP7x3eyOKA==",
"license": "MIT"
},
"node_modules/@braintree/browser-detection": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@braintree/browser-detection/-/browser-detection-2.0.1.tgz",
"integrity": "sha512-wpRI7AXEUh6o3ILrJbpNOYE7ItfjX/S8JZP7Z5FF66ULngBGYOqE8SeLlLKXG69Nc07HtlL/6nk/h539iz9hcQ==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@braintree/browser-detection/-/browser-detection-2.0.2.tgz",
"integrity": "sha512-Zrv/pyodvwv/hsjsBKXKVcwHZOkx4A/5Cy2hViXtqghAhLd3483bYUIfHZJE5JKTrd018ny1FI5pN1PHFtW7vw==",
"license": "MIT"
},
"node_modules/@braintree/event-emitter": {
@ -4822,9 +4822,9 @@
"license": "MIT"
},
"node_modules/@braintree/iframer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@braintree/iframer/-/iframer-2.0.0.tgz",
"integrity": "sha512-x1kHOyIJNDvi4P1s6pVBZhqhBa1hqDG9+yzcsCR1oNVC0LxH9CAP8bKxioT8/auY1sUyy+D8T4Vp/jv7QqSqLQ==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@braintree/iframer/-/iframer-2.0.1.tgz",
"integrity": "sha512-t1zJX5+f1yxHAzBJPaQT/XVMocKodUqjTE+hYvuxxWjqEZIbH8/eT5b5n767jY16mYw3+XiDkKHqcp4Pclq1wg==",
"license": "MIT"
},
"node_modules/@braintree/sanitize-url": {
@ -4834,9 +4834,9 @@
"license": "MIT"
},
"node_modules/@braintree/uuid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@braintree/uuid/-/uuid-1.0.0.tgz",
"integrity": "sha512-AtI5hfttWSuWAgcwLUZdcZ7Fp/8jCCUf9JTs7+Xow9ditU28zuoBovqq083yph2m3SxPYb84lGjOq+cXlXBvJg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@braintree/uuid/-/uuid-1.0.1.tgz",
"integrity": "sha512-Tgu5GoODkf4oj4aLlVIapEPEfjitIHrg5ftqY6pa5Ghr4ZUA9XtZIIZ6ZPdP9x8/X0lt/FB8tRq83QuCQCwOrA==",
"license": "ISC"
},
"node_modules/@braintree/wrap-promise": {
@ -17762,40 +17762,40 @@
}
},
"node_modules/braintree-web": {
"version": "3.113.0",
"resolved": "https://registry.npmjs.org/braintree-web/-/braintree-web-3.113.0.tgz",
"integrity": "sha512-qykYxZyld4X1tRNgXZQ3ZGzmhDGTBTRQ6Q24KaG9PuYqo+P2TVDEDOVC6tRbkx2RUIdXLv2M6WpkG7oLqEia9Q==",
"version": "3.123.2",
"resolved": "https://registry.npmjs.org/braintree-web/-/braintree-web-3.123.2.tgz",
"integrity": "sha512-N4IH75vKY67eONc0Ao4e7F+XagFW+3ok+Nfs/eOjw5D/TUt03diMAQ8woOwJghi2ql6/yjqNzZi2zE/sTWXmJg==",
"license": "MIT",
"dependencies": {
"@braintree/asset-loader": "2.0.1",
"@braintree/browser-detection": "2.0.1",
"@braintree/asset-loader": "2.0.3",
"@braintree/browser-detection": "2.0.2",
"@braintree/event-emitter": "0.4.1",
"@braintree/extended-promise": "1.0.0",
"@braintree/iframer": "2.0.0",
"@braintree/iframer": "2.0.1",
"@braintree/sanitize-url": "7.0.4",
"@braintree/uuid": "1.0.0",
"@braintree/uuid": "1.0.1",
"@braintree/wrap-promise": "2.1.0",
"@paypal/accelerated-checkout-loader": "1.1.0",
"card-validator": "10.0.0",
"credit-card-type": "10.0.1",
"framebus": "6.0.0",
"inject-stylesheet": "6.0.1",
"card-validator": "10.0.3",
"credit-card-type": "10.0.2",
"framebus": "6.0.3",
"inject-stylesheet": "6.0.2",
"promise-polyfill": "8.2.3",
"restricted-input": "3.0.5"
"restricted-input": "4.0.3"
}
},
"node_modules/braintree-web-drop-in": {
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/braintree-web-drop-in/-/braintree-web-drop-in-1.44.0.tgz",
"integrity": "sha512-maOq9SwiXztIzixJhOras7K44x4UIqqnkyQMYAJqxQ8WkADv9AkflCu2j3IeVYCus/Th9gWWFHcBugn3C4sZGw==",
"version": "1.46.0",
"resolved": "https://registry.npmjs.org/braintree-web-drop-in/-/braintree-web-drop-in-1.46.0.tgz",
"integrity": "sha512-KxCjJpaigoMajYD/iIA+ohXaI6Olt2Bj/Yu45WpJOjolKO9n1UmXl9bsq9UIiGOFIGqi/JWva1wI4cIHHvcI1A==",
"license": "MIT",
"dependencies": {
"@braintree/asset-loader": "2.0.1",
"@braintree/browser-detection": "2.0.1",
"@braintree/asset-loader": "2.0.3",
"@braintree/browser-detection": "2.0.2",
"@braintree/event-emitter": "0.4.1",
"@braintree/uuid": "1.0.0",
"@braintree/uuid": "1.0.1",
"@braintree/wrap-promise": "2.1.0",
"braintree-web": "3.113.0"
"braintree-web": "3.123.2"
}
},
"node_modules/browser-assert": {
@ -18444,20 +18444,14 @@
"license": "CC-BY-4.0"
},
"node_modules/card-validator": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/card-validator/-/card-validator-10.0.0.tgz",
"integrity": "sha512-2fLyCBOxO7/b56sxoYav8FeJqv9bWpZSyKq8sXKxnpxTGXHnM/0c8WEKG+ZJ+OXFcabnl98pD0EKBtTn+Tql0g==",
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/card-validator/-/card-validator-10.0.3.tgz",
"integrity": "sha512-xOEDsK3hojV0OIpmrR64eZGpngnOqRDEP20O+WSRtvjLSW6nyekW4i2N9SzYg679uFO3RyHcFHxb+mml5tXc4A==",
"license": "MIT",
"dependencies": {
"credit-card-type": "^9.1.0"
"credit-card-type": "^10.0.2"
}
},
"node_modules/card-validator/node_modules/credit-card-type": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz",
"integrity": "sha512-CpNFuLxiPFxuZqhSKml3M+t0K/484pMAnfYWH14JoD7OZMnmC0Lmo+P7JX9SobqFpRoo7ifA18kOHdxJywYPEA==",
"license": "MIT"
},
"node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@ -19692,9 +19686,9 @@
"license": "MIT"
},
"node_modules/credit-card-type": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-10.0.1.tgz",
"integrity": "sha512-vQOuWmBgsgG1ovGeDi8m6Zeu1JaqH/JncrxKmaqMbv/LunyOQdLiQhPHtOsNlbUI05TocR5nod/Mbs3HYtr6sQ==",
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-10.0.2.tgz",
"integrity": "sha512-vt/iQokU0mtrT7ceRU75FSmWnIh5JFpLsUUUWYRmztYekOGm0ZbCuzwFTbNkq41k92y+0B8ChscFhRN9DhVZEA==",
"license": "MIT"
},
"node_modules/cross-dirname": {
@ -23410,20 +23404,14 @@
}
},
"node_modules/framebus": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/framebus/-/framebus-6.0.0.tgz",
"integrity": "sha512-bL9V68hVaVBCY9rveoWbPFFI9hAXIJtESs51B+9XmzvMt38+wP8b4VdiJsavjMS6NfPZ/afQ/jc2qaHmSGI1kQ==",
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/framebus/-/framebus-6.0.3.tgz",
"integrity": "sha512-G/N2p+kFZ1xPBge7tbtTq2KcTR1kSKs1rVbTqH//WdtvJSexS33fsTTOq3yfUWvUczqhujyaFc+omawC9YyRBg==",
"license": "MIT",
"dependencies": {
"@braintree/uuid": "^0.1.0"
"@braintree/uuid": "^1.0.0"
}
},
"node_modules/framebus/node_modules/@braintree/uuid": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@braintree/uuid/-/uuid-0.1.0.tgz",
"integrity": "sha512-YvZJdlNcK5EnR+7M8AjgEAf4Qx696+FOSYlPfy5ePn80vODtVAUU0FxHnzKZC0og1VbDNQDDiwhthR65D4Na0g==",
"license": "ISC"
},
"node_modules/fresh": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
@ -24987,9 +24975,9 @@
}
},
"node_modules/inject-stylesheet": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/inject-stylesheet/-/inject-stylesheet-6.0.1.tgz",
"integrity": "sha512-2fvune1D4+8mvJoLVo95ncY4HrDkIaYIReRzXv8tkWFgdG9iuc5QuX57gtSDPWTWQI/f5BGwwtH85wxHouzucg==",
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/inject-stylesheet/-/inject-stylesheet-6.0.2.tgz",
"integrity": "sha512-sswMueya1LXEfwcy7KXPuq3zAW6HvgAeViApEhIaCviCkP4XYoKrQj8ftEmxPmIHn88X4R3xOAsnN/QCPvVKWw==",
"license": "MIT"
},
"node_modules/inquirer": {
@ -36154,12 +36142,12 @@
"license": "ISC"
},
"node_modules/restricted-input": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/restricted-input/-/restricted-input-3.0.5.tgz",
"integrity": "sha512-lUuXZ3wUnHURRarj5/0C8vomWIfWJO+p7T6RYwB46v7Oyuyr3yyupU+i7SjqUv4S6RAeAAZt1C/QCLJ9xhQBow==",
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/restricted-input/-/restricted-input-4.0.3.tgz",
"integrity": "sha512-VpkwT5Fr3DhvoRZfPnmHDhnYAYETjjNzDlvA4NlW0iknFS47C5X4OCHEpOOxaPjvmka5V8d1ty1jVVoorZKvHg==",
"license": "MIT",
"dependencies": {
"@braintree/browser-detection": "^1.12.1"
"@braintree/browser-detection": "^1.17.2"
}
},
"node_modules/restricted-input/node_modules/@braintree/browser-detection": {

View File

@ -175,7 +175,7 @@
"@nx/js": "21.6.8",
"@nx/webpack": "21.6.8",
"big-integer": "1.6.52",
"braintree-web-drop-in": "1.44.0",
"braintree-web-drop-in": "1.46.0",
"buffer": "6.0.3",
"bufferutil": "4.0.9",
"chalk": "4.1.2",