Merge branch 't3chguy/mailpit' of https://github.com/vector-im/element-web into t3chguy/gha-arm
This commit is contained in:
@@ -256,7 +256,7 @@
|
|||||||
"jsqr": "^1.4.0",
|
"jsqr": "^1.4.0",
|
||||||
"knip": "^5.36.2",
|
"knip": "^5.36.2",
|
||||||
"lint-staged": "^15.0.2",
|
"lint-staged": "^15.0.2",
|
||||||
"mailhog": "^4.16.0",
|
"mailpit-api": "^1.0.5",
|
||||||
"matrix-web-i18n": "^3.2.1",
|
"matrix-web-i18n": "^3.2.1",
|
||||||
"mini-css-extract-plugin": "2.9.2",
|
"mini-css-extract-plugin": "2.9.2",
|
||||||
"minimist": "^1.2.6",
|
"minimist": "^1.2.6",
|
||||||
|
|||||||
@@ -19,19 +19,19 @@ test.use(masHomeserver);
|
|||||||
test.describe("Encryption state after registration", () => {
|
test.describe("Encryption state after registration", () => {
|
||||||
test.skip(isDendrite, "does not yet support MAS");
|
test.skip(isDendrite, "does not yet support MAS");
|
||||||
|
|
||||||
test("Key backup is enabled by default", async ({ page, mailhogClient, app }, testInfo) => {
|
test("Key backup is enabled by default", async ({ page, mailpitClient, app }, testInfo) => {
|
||||||
await page.goto("/#/login");
|
await page.goto("/#/login");
|
||||||
await page.getByRole("button", { name: "Continue" }).click();
|
await page.getByRole("button", { name: "Continue" }).click();
|
||||||
await registerAccountMas(page, mailhogClient, `alice_${testInfo.testId}`, "alice@email.com", "Pa$sW0rD!");
|
await registerAccountMas(page, mailpitClient, `alice_${testInfo.testId}`, "alice@email.com", "Pa$sW0rD!");
|
||||||
|
|
||||||
await app.settings.openUserSettings("Security & Privacy");
|
await app.settings.openUserSettings("Security & Privacy");
|
||||||
await expect(page.getByText("This session is backing up your keys.")).toBeVisible();
|
await expect(page.getByText("This session is backing up your keys.")).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("user is prompted to set up recovery", async ({ page, mailhogClient, app }, testInfo) => {
|
test("user is prompted to set up recovery", async ({ page, mailpitClient, app }, testInfo) => {
|
||||||
await page.goto("/#/login");
|
await page.goto("/#/login");
|
||||||
await page.getByRole("button", { name: "Continue" }).click();
|
await page.getByRole("button", { name: "Continue" }).click();
|
||||||
await registerAccountMas(page, mailhogClient, `alice_${testInfo.testId}`, "alice@email.com", "Pa$sW0rD!");
|
await registerAccountMas(page, mailpitClient, `alice_${testInfo.testId}`, "alice@email.com", "Pa$sW0rD!");
|
||||||
|
|
||||||
await page.getByRole("button", { name: "Add room" }).click();
|
await page.getByRole("button", { name: "Add room" }).click();
|
||||||
await page.getByRole("menuitem", { name: "New room" }).click();
|
await page.getByRole("menuitem", { name: "New room" }).click();
|
||||||
@@ -47,7 +47,7 @@ test.describe("Key backup reset from elsewhere", () => {
|
|||||||
|
|
||||||
test("Key backup is disabled when reset from elsewhere", async ({
|
test("Key backup is disabled when reset from elsewhere", async ({
|
||||||
page,
|
page,
|
||||||
mailhogClient,
|
mailpitClient,
|
||||||
request,
|
request,
|
||||||
homeserver,
|
homeserver,
|
||||||
}, testInfo) => {
|
}, testInfo) => {
|
||||||
@@ -60,7 +60,7 @@ test.describe("Key backup reset from elsewhere", () => {
|
|||||||
|
|
||||||
await page.goto("/#/login");
|
await page.goto("/#/login");
|
||||||
await page.getByRole("button", { name: "Continue" }).click();
|
await page.getByRole("button", { name: "Continue" }).click();
|
||||||
await registerAccountMas(page, mailhogClient, testUsername, "alice@email.com", testPassword);
|
await registerAccountMas(page, mailpitClient, testUsername, "alice@email.com", testPassword);
|
||||||
|
|
||||||
await page.getByRole("button", { name: "Add room" }).click();
|
await page.getByRole("button", { name: "Add room" }).click();
|
||||||
await page.getByRole("menuitem", { name: "New room" }).click();
|
await page.getByRole("menuitem", { name: "New room" }).click();
|
||||||
|
|||||||
@@ -6,14 +6,14 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
|||||||
Please see LICENSE files in the repository root for full details.
|
Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { API, Messages } from "mailhog";
|
import { MailpitClient, MailpitMessagesSummaryResponse } from "mailpit-api";
|
||||||
import { Page } from "@playwright/test";
|
import { Page } from "@playwright/test";
|
||||||
|
|
||||||
import { expect } from "../../element-web-test";
|
import { expect } from "../../element-web-test";
|
||||||
|
|
||||||
export async function registerAccountMas(
|
export async function registerAccountMas(
|
||||||
page: Page,
|
page: Page,
|
||||||
mailhog: API,
|
mailpit: MailpitClient,
|
||||||
username: string,
|
username: string,
|
||||||
email: string,
|
email: string,
|
||||||
password: string,
|
password: string,
|
||||||
@@ -27,13 +27,15 @@ export async function registerAccountMas(
|
|||||||
await page.getByRole("textbox", { name: "Confirm Password" }).fill(password);
|
await page.getByRole("textbox", { name: "Confirm Password" }).fill(password);
|
||||||
await page.getByRole("button", { name: "Continue" }).click();
|
await page.getByRole("button", { name: "Continue" }).click();
|
||||||
|
|
||||||
let messages: Messages;
|
let summary: MailpitMessagesSummaryResponse;
|
||||||
await expect(async () => {
|
await expect(async () => {
|
||||||
messages = await mailhog.messages();
|
summary = await mailpit.listMessages();
|
||||||
expect(messages.items).toHaveLength(1);
|
expect(summary.messages_count).toBe(1);
|
||||||
}).toPass();
|
}).toPass();
|
||||||
expect(messages.items[0].to).toEqual(`${username} <${email}>`);
|
expect(summary.messages[0].To).toEqual(`${username} <${email}>`);
|
||||||
const [, code] = messages.items[0].text.match(/Your verification code to confirm this email address is: (\d{6})/);
|
const [, code] = summary.messages[0].Snippet.match(
|
||||||
|
/Your verification code to confirm this email address is: (\d{6})/,
|
||||||
|
);
|
||||||
|
|
||||||
await page.getByRole("textbox", { name: "6-digit code" }).fill(code);
|
await page.getByRole("textbox", { name: "6-digit code" }).fill(code);
|
||||||
await page.getByRole("button", { name: "Continue" }).click();
|
await page.getByRole("button", { name: "Continue" }).click();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
|
|||||||
context,
|
context,
|
||||||
page,
|
page,
|
||||||
homeserver,
|
homeserver,
|
||||||
mailhogClient,
|
mailpitClient,
|
||||||
mas,
|
mas,
|
||||||
}, testInfo) => {
|
}, testInfo) => {
|
||||||
await page.clock.install();
|
await page.clock.install();
|
||||||
@@ -33,7 +33,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
|
|||||||
await page.getByRole("button", { name: "Continue" }).click();
|
await page.getByRole("button", { name: "Continue" }).click();
|
||||||
|
|
||||||
const userId = `alice_${testInfo.testId}`;
|
const userId = `alice_${testInfo.testId}`;
|
||||||
await registerAccountMas(page, mailhogClient, userId, "alice@email.com", "Pa$sW0rD!");
|
await registerAccountMas(page, mailpitClient, userId, "alice@email.com", "Pa$sW0rD!");
|
||||||
|
|
||||||
// Eventually, we should end up at the home screen.
|
// Eventually, we should end up at the home screen.
|
||||||
await expect(page).toHaveURL(/\/#\/home$/, { timeout: 10000 });
|
await expect(page).toHaveURL(/\/#\/home$/, { timeout: 10000 });
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ test.describe("Email Registration", async () => {
|
|||||||
test(
|
test(
|
||||||
"registers an account and lands on the home page",
|
"registers an account and lands on the home page",
|
||||||
{ tag: "@screenshot" },
|
{ tag: "@screenshot" },
|
||||||
async ({ page, mailhogClient, request, checkA11y }) => {
|
async ({ page, mailpitClient, request, checkA11y }) => {
|
||||||
await expect(page.getByRole("textbox", { name: "Username" })).toBeVisible();
|
await expect(page.getByRole("textbox", { name: "Username" })).toBeVisible();
|
||||||
// Hide the server text as it contains the randomly allocated Homeserver port
|
// Hide the server text as it contains the randomly allocated Homeserver port
|
||||||
const screenshotOptions = { mask: [page.locator(".mx_ServerPicker_server")] };
|
const screenshotOptions = { mask: [page.locator(".mx_ServerPicker_server")] };
|
||||||
@@ -51,10 +51,10 @@ test.describe("Email Registration", async () => {
|
|||||||
|
|
||||||
await expect(page.getByText("An error was encountered when sending the email")).not.toBeVisible();
|
await expect(page.getByText("An error was encountered when sending the email")).not.toBeVisible();
|
||||||
|
|
||||||
const messages = await mailhogClient.messages();
|
const summary = await mailpitClient.listMessages();
|
||||||
expect(messages.items).toHaveLength(1);
|
expect(summary.messages_count).toBe(1);
|
||||||
expect(messages.items[0].to).toEqual("alice@email.com");
|
expect(summary.messages[0].To).toEqual("alice@email.com");
|
||||||
const [emailLink] = messages.items[0].text.match(/http.+/);
|
const [emailLink] = summary.messages[0].Snippet.match(/http.+/);
|
||||||
await request.get(emailLink); // "Click" the link in the email
|
await request.get(emailLink); // "Click" the link in the email
|
||||||
|
|
||||||
await expect(page.getByText("Welcome alice")).toBeVisible();
|
await expect(page.getByText("Welcome alice")).toBeVisible();
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { Fixtures } from "../../../element-web-test.ts";
|
|||||||
|
|
||||||
export const consentHomeserver: Fixtures = {
|
export const consentHomeserver: Fixtures = {
|
||||||
_homeserver: [
|
_homeserver: [
|
||||||
async ({ _homeserver: container, mailhog }, use) => {
|
async ({ _homeserver: container, mailpit }, use) => {
|
||||||
container
|
container
|
||||||
.withCopyDirectoriesToContainer([
|
.withCopyDirectoriesToContainer([
|
||||||
{ source: "playwright/plugins/homeserver/synapse/res", target: "/data/res" },
|
{ source: "playwright/plugins/homeserver/synapse/res", target: "/data/res" },
|
||||||
@@ -18,7 +18,7 @@ export const consentHomeserver: Fixtures = {
|
|||||||
.withConfig({
|
.withConfig({
|
||||||
email: {
|
email: {
|
||||||
enable_notifs: false,
|
enable_notifs: false,
|
||||||
smtp_host: "mailhog",
|
smtp_host: "mailpit",
|
||||||
smtp_port: 1025,
|
smtp_port: 1025,
|
||||||
smtp_user: "username",
|
smtp_user: "username",
|
||||||
smtp_pass: "password",
|
smtp_pass: "password",
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ import { Fixtures } from "../../../element-web-test.ts";
|
|||||||
|
|
||||||
export const emailHomeserver: Fixtures = {
|
export const emailHomeserver: Fixtures = {
|
||||||
_homeserver: [
|
_homeserver: [
|
||||||
async ({ _homeserver: container, mailhog }, use) => {
|
async ({ _homeserver: container, mailpit }, use) => {
|
||||||
container.withConfig({
|
container.withConfig({
|
||||||
enable_registration_without_verification: undefined,
|
enable_registration_without_verification: undefined,
|
||||||
disable_msisdn_registration: undefined,
|
disable_msisdn_registration: undefined,
|
||||||
registrations_require_3pid: ["email"],
|
registrations_require_3pid: ["email"],
|
||||||
email: {
|
email: {
|
||||||
smtp_host: "mailhog",
|
smtp_host: "mailpit",
|
||||||
smtp_port: 1025,
|
smtp_port: 1025,
|
||||||
notif_from: "Your Friendly %(app)s homeserver <noreply@example.com>",
|
notif_from: "Your Friendly %(app)s homeserver <noreply@example.com>",
|
||||||
app_name: "my_branded_matrix_server",
|
app_name: "my_branded_matrix_server",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { Fixtures } from "../../../element-web-test.ts";
|
|||||||
|
|
||||||
export const masHomeserver: Fixtures = {
|
export const masHomeserver: Fixtures = {
|
||||||
mas: [
|
mas: [
|
||||||
async ({ _homeserver: homeserver, logger, network, postgres, mailhog }, use) => {
|
async ({ _homeserver: homeserver, logger, network, postgres, mailpit }, use) => {
|
||||||
const config = {
|
const config = {
|
||||||
clients: [
|
clients: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { test as base } from "@playwright/test";
|
import { test as base } from "@playwright/test";
|
||||||
import mailhog from "mailhog";
|
import { MailpitClient } from "mailpit-api";
|
||||||
import { Network, StartedNetwork } from "testcontainers";
|
import { Network, StartedNetwork } from "testcontainers";
|
||||||
import { PostgreSqlContainer, StartedPostgreSqlContainer } from "@testcontainers/postgresql";
|
import { PostgreSqlContainer, StartedPostgreSqlContainer } from "@testcontainers/postgresql";
|
||||||
|
|
||||||
@@ -14,13 +14,13 @@ import { SynapseConfig, SynapseContainer } from "./testcontainers/synapse.ts";
|
|||||||
import { Logger } from "./logger.ts";
|
import { Logger } from "./logger.ts";
|
||||||
import { StartedMatrixAuthenticationServiceContainer } from "./testcontainers/mas.ts";
|
import { StartedMatrixAuthenticationServiceContainer } from "./testcontainers/mas.ts";
|
||||||
import { HomeserverContainer, StartedHomeserverContainer } from "./testcontainers/HomeserverContainer.ts";
|
import { HomeserverContainer, StartedHomeserverContainer } from "./testcontainers/HomeserverContainer.ts";
|
||||||
import { MailhogContainer, StartedMailhogContainer } from "./testcontainers/mailhog.ts";
|
import { MailhogContainer, StartedMailhogContainer } from "./testcontainers/mailpit.ts";
|
||||||
import { OAuthServer } from "./plugins/oauth_server";
|
import { OAuthServer } from "./plugins/oauth_server";
|
||||||
import { DendriteContainer, PineconeContainer } from "./testcontainers/dendrite.ts";
|
import { DendriteContainer, PineconeContainer } from "./testcontainers/dendrite.ts";
|
||||||
import { HomeserverType } from "./plugins/homeserver";
|
import { HomeserverType } from "./plugins/homeserver";
|
||||||
|
|
||||||
export interface TestFixtures {
|
export interface TestFixtures {
|
||||||
mailhogClient: mailhog.API;
|
mailpitClient: MailpitClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Services {
|
export interface Services {
|
||||||
@@ -28,7 +28,7 @@ export interface Services {
|
|||||||
|
|
||||||
network: StartedNetwork;
|
network: StartedNetwork;
|
||||||
postgres: StartedPostgreSqlContainer;
|
postgres: StartedPostgreSqlContainer;
|
||||||
mailhog: StartedMailhogContainer;
|
mailpit: StartedMailhogContainer;
|
||||||
|
|
||||||
synapseConfig: SynapseConfig;
|
synapseConfig: SynapseConfig;
|
||||||
_homeserver: HomeserverContainer<any>;
|
_homeserver: HomeserverContainer<any>;
|
||||||
@@ -90,20 +90,20 @@ export const test = base.extend<TestFixtures, Services & Options>({
|
|||||||
{ scope: "worker" },
|
{ scope: "worker" },
|
||||||
],
|
],
|
||||||
|
|
||||||
mailhog: [
|
mailpit: [
|
||||||
async ({ logger, network }, use) => {
|
async ({ logger, network }, use) => {
|
||||||
const container = await new MailhogContainer()
|
const container = await new MailhogContainer()
|
||||||
.withNetwork(network)
|
.withNetwork(network)
|
||||||
.withNetworkAliases("mailhog")
|
.withNetworkAliases("mailpit")
|
||||||
.withLogConsumer(logger.getConsumer("mailhog"))
|
.withLogConsumer(logger.getConsumer("mailpit"))
|
||||||
.start();
|
.start();
|
||||||
await use(container);
|
await use(container);
|
||||||
await container.stop();
|
await container.stop();
|
||||||
},
|
},
|
||||||
{ scope: "worker" },
|
{ scope: "worker" },
|
||||||
],
|
],
|
||||||
mailhogClient: async ({ mailhog: container }, use) => {
|
mailpitClient: async ({ mailpit: container }, use) => {
|
||||||
await container.client.deleteAll();
|
await container.client.deleteMessages();
|
||||||
await use(container.client);
|
await use(container.client);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers";
|
import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers";
|
||||||
import mailhog from "mailhog";
|
import { MailpitClient } from "mailpit-api";
|
||||||
|
|
||||||
export class MailhogContainer extends GenericContainer {
|
export class MailhogContainer extends GenericContainer {
|
||||||
constructor() {
|
constructor() {
|
||||||
super("mailhog/mailhog:latest");
|
super("axllent/mailpit:latest");
|
||||||
|
|
||||||
this.withExposedPorts(8025).withWaitStrategy(Wait.forListeningPorts());
|
this.withExposedPorts(8025).withWaitStrategy(Wait.forListeningPorts());
|
||||||
}
|
}
|
||||||
@@ -21,10 +21,10 @@ export class MailhogContainer extends GenericContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class StartedMailhogContainer extends AbstractStartedContainer {
|
export class StartedMailhogContainer extends AbstractStartedContainer {
|
||||||
public readonly client: mailhog.API;
|
public readonly client: MailpitClient;
|
||||||
|
|
||||||
constructor(container: StartedTestContainer) {
|
constructor(container: StartedTestContainer) {
|
||||||
super(container);
|
super(container);
|
||||||
this.client = mailhog({ host: container.getHost(), port: container.getMappedPort(8025) });
|
this.client = new MailpitClient(`http://${container.getHost()}:${container.getMappedPort(8025)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ const DEFAULT_CONFIG = {
|
|||||||
reply_to: '"Authentication Service" <root@localhost>',
|
reply_to: '"Authentication Service" <root@localhost>',
|
||||||
transport: "smtp",
|
transport: "smtp",
|
||||||
mode: "plain",
|
mode: "plain",
|
||||||
hostname: "mailhog",
|
hostname: "mailpit",
|
||||||
port: 1025,
|
port: 1025,
|
||||||
username: "username",
|
username: "username",
|
||||||
password: "password",
|
password: "password",
|
||||||
|
|||||||
28
yarn.lock
28
yarn.lock
@@ -3485,13 +3485,14 @@
|
|||||||
|
|
||||||
"@vector-im/matrix-wysiwyg-wasm@link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.38.0-af862ffd231dc0a6b8d6f2cb3601e68456c0ff24-integrity/node_modules/bindings/wysiwyg-wasm":
|
"@vector-im/matrix-wysiwyg-wasm@link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.38.0-af862ffd231dc0a6b8d6f2cb3601e68456c0ff24-integrity/node_modules/bindings/wysiwyg-wasm":
|
||||||
version "0.0.0"
|
version "0.0.0"
|
||||||
|
uid ""
|
||||||
|
|
||||||
"@vector-im/matrix-wysiwyg@2.38.0":
|
"@vector-im/matrix-wysiwyg@2.38.0":
|
||||||
version "2.38.0"
|
version "2.38.0"
|
||||||
resolved "https://registry.yarnpkg.com/@vector-im/matrix-wysiwyg/-/matrix-wysiwyg-2.38.0.tgz#af862ffd231dc0a6b8d6f2cb3601e68456c0ff24"
|
resolved "https://registry.yarnpkg.com/@vector-im/matrix-wysiwyg/-/matrix-wysiwyg-2.38.0.tgz#af862ffd231dc0a6b8d6f2cb3601e68456c0ff24"
|
||||||
integrity sha512-cMEVicFYVzFxuSyWON0aVGjAJMcgJZ+LxuLTEp8EGuu8cRacuh0RN5rapb11YVZygzFvE7X1cMedJ/fKd5vRLA==
|
integrity sha512-cMEVicFYVzFxuSyWON0aVGjAJMcgJZ+LxuLTEp8EGuu8cRacuh0RN5rapb11YVZygzFvE7X1cMedJ/fKd5vRLA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vector-im/matrix-wysiwyg-wasm" "link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.38.0-af862ffd231dc0a6b8d6f2cb3601e68456c0ff24-integrity/node_modules/bindings/wysiwyg-wasm"
|
"@vector-im/matrix-wysiwyg-wasm" "link:../../Library/Caches/Yarn/v6/npm-@vector-im-matrix-wysiwyg-2.38.0-af862ffd231dc0a6b8d6f2cb3601e68456c0ff24-integrity/node_modules/bindings/wysiwyg-wasm"
|
||||||
|
|
||||||
"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
|
"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
|
||||||
version "1.14.1"
|
version "1.14.1"
|
||||||
@@ -4076,6 +4077,15 @@ axe-core@^4.10.0, axe-core@~4.10.2:
|
|||||||
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df"
|
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df"
|
||||||
integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==
|
integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==
|
||||||
|
|
||||||
|
axios@^1.7.8:
|
||||||
|
version "1.7.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a"
|
||||||
|
integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==
|
||||||
|
dependencies:
|
||||||
|
follow-redirects "^1.15.6"
|
||||||
|
form-data "^4.0.0"
|
||||||
|
proxy-from-env "^1.1.0"
|
||||||
|
|
||||||
axobject-query@^4.1.0:
|
axobject-query@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee"
|
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee"
|
||||||
@@ -6514,7 +6524,7 @@ focus-lock@^1.3.5:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.0.3"
|
tslib "^2.0.3"
|
||||||
|
|
||||||
follow-redirects@^1.0.0:
|
follow-redirects@^1.0.0, follow-redirects@^1.15.6:
|
||||||
version "1.15.9"
|
version "1.15.9"
|
||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
|
||||||
integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
|
integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
|
||||||
@@ -7127,7 +7137,7 @@ iconv-lite@0.4.24:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer ">= 2.1.2 < 3"
|
safer-buffer ">= 2.1.2 < 3"
|
||||||
|
|
||||||
iconv-lite@0.6.3, iconv-lite@^0.6, iconv-lite@^0.6.3:
|
iconv-lite@0.6.3, iconv-lite@^0.6.3:
|
||||||
version "0.6.3"
|
version "0.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
||||||
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
||||||
@@ -8566,12 +8576,12 @@ magic-string@0.30.8:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.15"
|
"@jridgewell/sourcemap-codec" "^1.4.15"
|
||||||
|
|
||||||
mailhog@^4.16.0:
|
mailpit-api@^1.0.5:
|
||||||
version "4.16.0"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/mailhog/-/mailhog-4.16.0.tgz#1ad4dda104505399f3f17824737a962696e7d240"
|
resolved "https://registry.yarnpkg.com/mailpit-api/-/mailpit-api-1.0.5.tgz#3383593707a7bc502af0ae6bf1296160daf8c730"
|
||||||
integrity sha512-wXrGik+0MaAy4dbYTImxa8niX9a4aRpZTzC/b1GzCvQs09khhs0aKZgHjgScakI4Y18WInDvvF48hhEz9ifN4g==
|
integrity sha512-55OjUjNv4hwrQKIzN8DqWywuW7UIyzN1FrEd3A87sJ9Ni07LZC/f7hgeW7dp36YYxrmV8voGzUmCY3dWJ3D6Og==
|
||||||
optionalDependencies:
|
dependencies:
|
||||||
iconv-lite "^0.6"
|
axios "^1.7.8"
|
||||||
|
|
||||||
make-dir@^4.0.0:
|
make-dir@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user