From f3e9e35e0bb0f233622849c25c212389e0a6c40b Mon Sep 17 00:00:00 2001 From: bezze Date: Mon, 10 Feb 2025 06:26:07 -0300 Subject: [PATCH] test: relayer unit testing (#77) --- .github/workflows/relayer.yml | 3 + package.json | 4 +- packages/relayer/src/config.ts | 4 +- .../relayer/src/exceptions/base.exception.ts | 15 +- .../relayer/src/interfaces/relayer/request.ts | 5 +- .../relayer/src/providers/sdk.provider.ts | 3 +- .../services/privacyPoolRelayer.service.ts | 20 +- packages/relayer/src/types/sdk.types.ts | 17 + packages/relayer/test/inputs/config.test.json | 15 + packages/relayer/test/inputs/default.input.ts | 34 + .../test/inputs/validateWithdrawal.input.ts | 49 ++ packages/relayer/test/mocks/db.mock.ts | 10 + .../relayer/test/mocks/sdk.provider.mock.ts | 24 + .../unit/privacyPoolRelayer.service.spec.ts | 314 ++++++++ packages/relayer/vitest.config.ts | 31 +- packages/sdk/package.json | 7 +- yarn.lock | 704 +++++++++--------- 17 files changed, 886 insertions(+), 373 deletions(-) create mode 100644 packages/relayer/src/types/sdk.types.ts create mode 100644 packages/relayer/test/inputs/config.test.json create mode 100644 packages/relayer/test/inputs/default.input.ts create mode 100644 packages/relayer/test/inputs/validateWithdrawal.input.ts create mode 100644 packages/relayer/test/mocks/db.mock.ts create mode 100644 packages/relayer/test/mocks/sdk.provider.mock.ts create mode 100644 packages/relayer/test/unit/privacyPoolRelayer.service.spec.ts diff --git a/.github/workflows/relayer.yml b/.github/workflows/relayer.yml index 3a4244d..8ac7e6f 100644 --- a/.github/workflows/relayer.yml +++ b/.github/workflows/relayer.yml @@ -51,6 +51,9 @@ jobs: with: fetch-depth: 1 + - name: Build sdk + run: cd ../sdk && yarn install && yarn build + - name: Install dependencies run: yarn install --frozen-lockfile diff --git a/package.json b/package.json index d797942..d0ca334 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "typescript-eslint": "8.20.0" }, "dependencies": { - "ts-node": "^10.9.2" + "ts-node": "^10.9.2", + "@vitest/coverage-v8": "3.0.5", + "vitest": "3.0.5" } } diff --git a/packages/relayer/src/config.ts b/packages/relayer/src/config.ts index c86485e..fa2184e 100644 --- a/packages/relayer/src/config.ts +++ b/packages/relayer/src/config.ts @@ -62,9 +62,7 @@ const configSchema = z function readConfigFile(): Record { let configPathString = process.env["CONFIG_PATH"]; if (!configPathString) { - console.warn( - "RELAYER_CONFIG is not set, using default path: ./config.json", - ); + console.warn("CONFIG_PATH is not set, using default path: ./config.json"); configPathString = "./config.json"; } if (!fs.existsSync(configPathString)) { diff --git a/packages/relayer/src/exceptions/base.exception.ts b/packages/relayer/src/exceptions/base.exception.ts index 7e13a49..5b9f3ff 100644 --- a/packages/relayer/src/exceptions/base.exception.ts +++ b/packages/relayer/src/exceptions/base.exception.ts @@ -9,7 +9,8 @@ export enum ErrorCode { // Withdrawal data assertions INVALID_DATA = "INVALID_DATA", INVALID_ABI = "INVALID_ABI", - RECEIVER_MISMATCH = "RECEIVER_MISMATCH", + PROCESSOOOR_MISMATCH = "PROCESSOOOR_MISMATCH", + FEE_RECEIVER_MISMATCH = "FEE_RECEIVER_MISMATCH", FEE_MISMATCH = "FEE_MISMATCH", CONTEXT_MISMATCH = "CONTEXT_MISMATCH", INSUFFICIENT_WITHDRAWN_VALUE = "INSUFFICIENT_WITHDRAWN_VALUE", @@ -145,12 +146,22 @@ export class WithdrawalValidationError extends RelayerError { ); } + public static processooorMismatch( + details?: string, + ): WithdrawalValidationError { + return new WithdrawalValidationError( + "Processooor must be the Entrypoint when relaying", + ErrorCode.PROCESSOOOR_MISMATCH, + details, + ); + } + public static feeReceiverMismatch( details: string, ): WithdrawalValidationError { return new WithdrawalValidationError( "Fee receiver does not match relayer", - ErrorCode.RECEIVER_MISMATCH, + ErrorCode.FEE_RECEIVER_MISMATCH, details, ); } diff --git a/packages/relayer/src/interfaces/relayer/request.ts b/packages/relayer/src/interfaces/relayer/request.ts index 444b5d6..843b9d5 100644 --- a/packages/relayer/src/interfaces/relayer/request.ts +++ b/packages/relayer/src/interfaces/relayer/request.ts @@ -1,4 +1,7 @@ -import { Withdrawal, WithdrawalProof } from "@defi-wonderland/privacy-pool-core-sdk"; +import { + Withdrawal, + WithdrawalProof, +} from "@defi-wonderland/privacy-pool-core-sdk"; /** * Represents the proof payload for a relayer request. diff --git a/packages/relayer/src/providers/sdk.provider.ts b/packages/relayer/src/providers/sdk.provider.ts index 96028d6..6338f7c 100644 --- a/packages/relayer/src/providers/sdk.provider.ts +++ b/packages/relayer/src/providers/sdk.provider.ts @@ -20,11 +20,12 @@ import { } from "../config.js"; import { WithdrawalPayload } from "../interfaces/relayer/request.js"; import { RelayerError, SdkError } from "../exceptions/base.exception.js"; +import { SdkProviderInterface } from "../types/sdk.types.js"; /** * Class representing the SDK provider for interacting with Privacy Pool SDK. */ -export class SdkProvider { +export class SdkProvider implements SdkProviderInterface { /** Instance of the PrivacyPoolSDK. */ private sdk: PrivacyPoolSDK; private contracts: ContractInteractionsService; diff --git a/packages/relayer/src/services/privacyPoolRelayer.service.ts b/packages/relayer/src/services/privacyPoolRelayer.service.ts index 6eb3f0d..e755dd7 100644 --- a/packages/relayer/src/services/privacyPoolRelayer.service.ts +++ b/packages/relayer/src/services/privacyPoolRelayer.service.ts @@ -3,6 +3,7 @@ */ import { getAddress } from "viem"; import { + ENTRYPOINT_ADDRESS, FEE_BPS, FEE_RECEIVER_ADDRESS, PROVIDER_URL, @@ -21,15 +22,16 @@ import { import { db, SdkProvider } from "../providers/index.js"; import { RelayerDatabase } from "../types/db.types.js"; import { decodeWithdrawalData, parseSignals } from "../utils.js"; +import { SdkProviderInterface } from "../types/sdk.types.js"; /** * Class representing the Privacy Pool Relayer, responsible for processing withdrawal requests. */ export class PrivacyPoolRelayer { /** Database instance for storing and updating request states. */ - private db: RelayerDatabase; + protected db: RelayerDatabase; /** SDK provider for handling blockchain interactions. */ - private sdkProvider: SdkProvider; + protected sdkProvider: SdkProviderInterface; /** RPC URL for blockchain communication. */ private readonly rpcUrl: string = PROVIDER_URL; /** Private key for signing transactions. */ @@ -54,7 +56,7 @@ export class PrivacyPoolRelayer { const timestamp = Date.now(); try { - this.db.createNewRequest(requestId, timestamp, req); + await this.db.createNewRequest(requestId, timestamp, req); await this.validateWithdrawal(req); const isValidWithdrawalProof = await this.verifyProof(req.proof); @@ -90,7 +92,7 @@ export class PrivacyPoolRelayer { * @param {WithdrawalPayload["proof"]} proof - The proof to be verified. * @returns {Promise} - A promise resolving to a boolean indicating verification success. */ - private async verifyProof( + protected async verifyProof( proof: WithdrawalPayload["proof"], ): Promise { return this.sdkProvider.verifyWithdrawal(proof); @@ -102,7 +104,7 @@ export class PrivacyPoolRelayer { * @param {WithdrawalPayload} withdrawal - The withdrawal payload. * @returns {Promise<{ hash: string }>} - A promise resolving to the transaction hash. */ - private async broadcastWithdrawal( + protected async broadcastWithdrawal( withdrawal: WithdrawalPayload, ): Promise<{ hash: string }> { return this.sdkProvider.broadcastWithdrawal(withdrawal); @@ -115,12 +117,18 @@ export class PrivacyPoolRelayer { * @throws {WithdrawalValidationError} - If validation fails. * @throws {ValidationError} - If public signals are malformed. */ - private async validateWithdrawal(wp: WithdrawalPayload) { + protected async validateWithdrawal(wp: WithdrawalPayload) { const { feeRecipient, relayFeeBPS } = decodeWithdrawalData( wp.withdrawal.data, ); const proofSignals = parseSignals(wp.proof.publicSignals); + if (wp.withdrawal.processooor !== ENTRYPOINT_ADDRESS) { + throw WithdrawalValidationError.processooorMismatch( + `Processooor mismatch: expected "${ENTRYPOINT_ADDRESS}", got "${wp.withdrawal.processooor}".`, + ); + } + if (getAddress(feeRecipient) !== FEE_RECEIVER_ADDRESS) { throw WithdrawalValidationError.feeReceiverMismatch( `Fee recipient mismatch: expected "${FEE_RECEIVER_ADDRESS}", got "${feeRecipient}".`, diff --git a/packages/relayer/src/types/sdk.types.ts b/packages/relayer/src/types/sdk.types.ts new file mode 100644 index 0000000..7449025 --- /dev/null +++ b/packages/relayer/src/types/sdk.types.ts @@ -0,0 +1,17 @@ +import { + Address, + Withdrawal, + WithdrawalProof, +} from "@defi-wonderland/privacy-pool-core-sdk"; +import { WithdrawalPayload } from "../interfaces/relayer/request.js"; + +export interface SdkProviderInterface { + verifyWithdrawal(withdrawalPayload: WithdrawalProof): Promise; + broadcastWithdrawal( + withdrawalPayload: WithdrawalPayload, + ): Promise<{ hash: string }>; + calculateContext(withdrawal: Withdrawal): string; + scopeData( + scope: bigint, + ): Promise<{ poolAddress: Address; assetAddress: Address }>; +} diff --git a/packages/relayer/test/inputs/config.test.json b/packages/relayer/test/inputs/config.test.json new file mode 100644 index 0000000..12912a1 --- /dev/null +++ b/packages/relayer/test/inputs/config.test.json @@ -0,0 +1,15 @@ +{ + "fee_receiver_address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "provider_url": "http://0.0.0.0:8545", + "fee_bps": "1000", + "signer_private_key": "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + "sqlite_db_path": "/tmp/pp_relayer.sqlite", + "entrypoint_address": "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853", + "chain": { + "name": "localhost", + "id": "31337" + }, + "withdraw_amounts": { + "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9": 100 + } +} diff --git a/packages/relayer/test/inputs/default.input.ts b/packages/relayer/test/inputs/default.input.ts new file mode 100644 index 0000000..e584b3d --- /dev/null +++ b/packages/relayer/test/inputs/default.input.ts @@ -0,0 +1,34 @@ +export const FEE_RECEIVER_ADDRESS_TEST = + "0x1212121212121212121212121212121212121212"; +export const RECIPIENT_TEST = "0x2222222222222222222222222222222222222222"; +export const ENTRYPOINT_ADDRESS_TEST = + "0xe1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1"; +export const SIGNER_PRIVATE_KEY_TEST = + "0x8888888888888888888888888888888888888888888888888888888888888888"; +export const FEE_BPS_TEST = 2_000n; +export const PROVIDER_URL_TEST = "http://some.rpc.url"; +export const ASSET_ADDRESS_TEST = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; + +export const PUBLIC_SIGNALS_TEST = [ + "3329689937152127469229150262753567411942915488378487399955260719617505754356", + "18039167616040266842480420918192602605750291173853081205310130137735640368215", + "100000000000000000", + "11647068014638404411083963959916324311405860401109309104995569418439086324505", + "2", + "17509119559942543382744731935952318540675152427220720285867932301410542597330", + "2", + "3780521699031776166450964239112683738071773548658189963690486009801128327065", +].map(BigInt); + +export const testingConfig = { + FEE_RECEIVER_ADDRESS: FEE_RECEIVER_ADDRESS_TEST, + ENTRYPOINT_ADDRESS: ENTRYPOINT_ADDRESS_TEST, + PROVIDER_URL: PROVIDER_URL_TEST, + SIGNER_PRIVATE_KEY: SIGNER_PRIVATE_KEY_TEST, + FEE_BPS: FEE_BPS_TEST, + SQLITE_DB_PATH: "test.sqlite", + WITHDRAW_AMOUNTS: { + [ASSET_ADDRESS_TEST]: 200, + }, + CHAIN: "", +}; diff --git a/packages/relayer/test/inputs/validateWithdrawal.input.ts b/packages/relayer/test/inputs/validateWithdrawal.input.ts new file mode 100644 index 0000000..ea559cc --- /dev/null +++ b/packages/relayer/test/inputs/validateWithdrawal.input.ts @@ -0,0 +1,49 @@ +import { Hex } from "viem"; +import { encodeAbiParameters, getAddress } from "viem/utils"; +import { + FEE_BPS_TEST, + FEE_RECEIVER_ADDRESS_TEST, + RECIPIENT_TEST, +} from "./default.input"; + +const FeeDataAbi = [ + { + name: "FeeData", + type: "tuple", + components: [ + { name: "recipient", type: "address" }, + { name: "feeRecipient", type: "address" }, + { name: "relayFeeBPS", type: "uint256" }, + ], + }, +] as const; + +export function createData( + recipient: string, + feeRecipient: string, + relayFeeBPS: bigint, +): Hex { + return encodeAbiParameters(FeeDataAbi, [ + { + recipient: getAddress(recipient), + feeRecipient: getAddress(feeRecipient), + relayFeeBPS, + }, + ]) as Hex; +} + +export const dataCorrect = createData( + RECIPIENT_TEST, + FEE_RECEIVER_ADDRESS_TEST, + FEE_BPS_TEST, +); +export const dataMismatchFeeRecipient = createData( + RECIPIENT_TEST, + RECIPIENT_TEST, + FEE_BPS_TEST, +); +export const dataMismatchFee = createData( + RECIPIENT_TEST, + FEE_RECEIVER_ADDRESS_TEST, + FEE_BPS_TEST * 2n, +); diff --git a/packages/relayer/test/mocks/db.mock.ts b/packages/relayer/test/mocks/db.mock.ts new file mode 100644 index 0000000..8ae6058 --- /dev/null +++ b/packages/relayer/test/mocks/db.mock.ts @@ -0,0 +1,10 @@ +import { vi } from "vitest"; + +export function createDbMock() { + return { + initialized: true, + createNewRequest: vi.fn(), + updateBroadcastedRequest: vi.fn(), + updateFailedRequest: vi.fn(), + }; +} diff --git a/packages/relayer/test/mocks/sdk.provider.mock.ts b/packages/relayer/test/mocks/sdk.provider.mock.ts new file mode 100644 index 0000000..3b791d9 --- /dev/null +++ b/packages/relayer/test/mocks/sdk.provider.mock.ts @@ -0,0 +1,24 @@ +import { Address } from "viem/accounts"; +import { Mock, vi } from "vitest"; +import { SdkProvider } from "../../src/providers/sdk.provider"; +import { SdkProviderInterface } from "../../src/types/sdk.types.ts"; +import { ASSET_ADDRESS_TEST } from "../inputs/default.input"; + +export function createSdkProviderMock(overrides?: { + [key in keyof SdkProviderInterface]?: Mock; +}): SdkProviderInterface { + return { + scopeData: vi.fn().mockImplementation(async () => { + return { + poolAddress: "0x0" as Address, + assetAddress: ASSET_ADDRESS_TEST, + }; + }), + broadcastWithdrawal: vi.fn().mockImplementation(async () => { + return { hash: "0xTx" }; + }), + calculateContext: SdkProvider.prototype.calculateContext, + verifyWithdrawal: vi.fn().mockResolvedValue(true), + ...(overrides || {}), + }; +} diff --git a/packages/relayer/test/unit/privacyPoolRelayer.service.spec.ts b/packages/relayer/test/unit/privacyPoolRelayer.service.spec.ts new file mode 100644 index 0000000..78a378c --- /dev/null +++ b/packages/relayer/test/unit/privacyPoolRelayer.service.spec.ts @@ -0,0 +1,314 @@ +import { describe, expect, it, vi } from "vitest"; +import { WithdrawalValidationError } from "../../src/exceptions/base.exception.ts"; +import { WithdrawalPayload } from "../../src/interfaces/relayer/request.ts"; +import { + ASSET_ADDRESS_TEST, + ENTRYPOINT_ADDRESS_TEST, + PUBLIC_SIGNALS_TEST, + RECIPIENT_TEST, + testingConfig, +} from "../inputs/default.input.ts"; +import { + dataCorrect, + dataMismatchFee, + dataMismatchFeeRecipient, +} from "../inputs/validateWithdrawal.input.ts"; + +import { WithdrawalProof } from "@defi-wonderland/privacy-pool-core-sdk"; +import * as Config from "../../src/config.ts"; +import { PrivacyPoolRelayer } from "../../src/services/privacyPoolRelayer.service.ts"; +import { RelayerDatabase } from "../../src/types/db.types.ts"; +import { SdkProviderInterface } from "../../src/types/sdk.types.ts"; +import { createDbMock } from "../mocks/db.mock.ts"; +import { createSdkProviderMock } from "../mocks/sdk.provider.mock.ts"; + +class PrivacyPoolRelayerMock extends PrivacyPoolRelayer { + constructor(db: RelayerDatabase, sdk: SdkProviderInterface) { + super(); + this.db = db; + this.sdkProvider = sdk; + } +} + +vi.mock("../../src/config.ts", async (importOriginal) => { + const originalConfig = + await importOriginal(); + return { + ...originalConfig, + ...testingConfig, + }; +}); + +describe("PrivacyPoolRelayer", () => { + describe("validateWithdrawal", () => { + let service: PrivacyPoolRelayerMock; + + beforeEach(() => { + const dbMock = createDbMock(); + const sdkProviderMock = createSdkProviderMock(); + service = new PrivacyPoolRelayerMock(dbMock, sdkProviderMock); + }); + + afterEach(() => { + vi.clearAllMocks(); + vi.resetModules(); + }); + + it("raises processooor mismatch if it doesnt point to entrypoint", async () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: RECIPIENT_TEST, + scope: 0n, + data: dataCorrect, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + await expect(() => + service.validateWithdrawal(withdrawalPayload), + ).rejects.toThrowError( + WithdrawalValidationError.processooorMismatch( + 'Processooor mismatch: expected "0xe1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1", got "0x2222222222222222222222222222222222222222".', + ), + ); + }); + + it("raises fee recipient mismatch", async () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0n, + data: dataMismatchFeeRecipient, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + await expect(() => + service.validateWithdrawal(withdrawalPayload), + ).rejects.toThrowError( + WithdrawalValidationError.feeReceiverMismatch( + `Fee recipient mismatch: expected "${testingConfig.FEE_RECEIVER_ADDRESS}", got "${RECIPIENT_TEST}".`, + ), + ); + }); + + it("raises fee mismatch if data fee differs from relayer", async () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0n, + data: dataMismatchFee, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + await expect(() => + service.validateWithdrawal(withdrawalPayload), + ).rejects.toThrowError( + WithdrawalValidationError.feeMismatch( + 'Relay fee mismatch: expected "2000", got "4000".', + ), + ); + }); + + it("raises context mismatch if withdrawal's context doesnt match public signal", async () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0x5c0fen, // correct == 0n + data: dataCorrect, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + await expect(() => + service.validateWithdrawal(withdrawalPayload), + ).rejects.toThrowError( + WithdrawalValidationError.contextMismatch( + 'Context mismatch: expected "1f9bd92c080e8d7b883a75bf2da8e2832a8041e320facaf301ca87abc544e5db", got "85bb30f63789e69035080816ae268a74e87b221245153876134a3f39e04b799".', + ), + ); + }); + + it("raises withdrawn value too small", async () => { + const publicSignals = [...PUBLIC_SIGNALS_TEST]; + publicSignals[2] = 100n; + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0n, + data: dataCorrect, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals, + }, + }; + + vi.spyOn(Config, "WITHDRAW_AMOUNTS", "get").mockReturnValue({ + [ASSET_ADDRESS_TEST]: 150n, + }); + + await expect(() => + service.validateWithdrawal(withdrawalPayload), + ).rejects.toThrowError( + WithdrawalValidationError.withdrawnValueTooSmall( + 'Withdrawn value too small: expected minimum "150", got "100".', + ), + ); + + vi.spyOn(Config, "WITHDRAW_AMOUNTS", "get").mockReturnValue({ + [ASSET_ADDRESS_TEST]: 50n, + }); + + await expect(service.validateWithdrawal(withdrawalPayload)).resolves.toBe( + undefined, + ); + }); + + it("validates with no issues", async () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0n, + data: dataCorrect, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + vi.spyOn(Config, "WITHDRAW_AMOUNTS", "get").mockReturnValue({ + [ASSET_ADDRESS_TEST]: 50n, + }); + await expect(service.validateWithdrawal(withdrawalPayload)).resolves.toBe( + undefined, + ); + }); + }); + + describe("handleRequest", () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetModules(); + }); + + it("handler executes correctly", async () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0n, + data: dataCorrect, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + const dbMock = createDbMock(); + const sdkProviderMock = createSdkProviderMock(); + + const service = new PrivacyPoolRelayerMock(dbMock, sdkProviderMock); + const validateSpy = vi.spyOn(service, "validateWithdrawal"); + const verifySpy = vi.spyOn(service, "verifyProof"); + const broadcastSpy = vi.spyOn(service, "broadcastWithdrawal"); + + expect(service.db).toBe(dbMock); + expect(service.sdkProvider).toBe(sdkProviderMock); + + await expect( + service.handleRequest(withdrawalPayload), + ).resolves.toMatchObject({ + success: true, + txHash: "0xTx", + }); + + expect(dbMock.createNewRequest).toHaveBeenCalledOnce(); + expect(dbMock.updateBroadcastedRequest).toHaveBeenCalledOnce(); + expect(validateSpy).toHaveBeenCalledOnce(); + expect(verifySpy).toHaveBeenCalledOnce(); + expect(broadcastSpy).toHaveBeenCalledOnce(); + expect(sdkProviderMock.broadcastWithdrawal).toHaveBeenCalledOnce(); + }); + + describe("handler returns error", () => { + const withdrawalPayload: WithdrawalPayload = { + withdrawal: { + processooor: ENTRYPOINT_ADDRESS_TEST, + scope: 0n, + data: dataCorrect, + }, + proof: { + proof: "" as WithdrawalProof, + publicSignals: PUBLIC_SIGNALS_TEST, + }, + }; + + it("when verification fails", async () => { + const dbMock = createDbMock(); + const sdkProviderMock = createSdkProviderMock({ + verifyWithdrawal: vi.fn().mockResolvedValue(false), + }); + + const service = new PrivacyPoolRelayerMock(dbMock, sdkProviderMock); + const validateSpy = vi + .spyOn(service, "validateWithdrawal") + .mockRejectedValue(new WithdrawalValidationError("Some error")); + const verifySpy = vi.spyOn(service, "verifyProof"); + const broadcastSpy = vi.spyOn(service, "broadcastWithdrawal"); + + expect(service.db).toBe(dbMock); + expect(service.sdkProvider).toBe(sdkProviderMock); + + await expect( + service.handleRequest(withdrawalPayload), + ).resolves.toMatchObject({ + success: false, + error: "Some error", + }); + + expect(dbMock.createNewRequest).toHaveBeenCalledOnce(); + expect(validateSpy).toHaveBeenCalledOnce(); + expect(verifySpy).toHaveBeenCalledTimes(0); + expect(dbMock.updateFailedRequest).toHaveBeenCalledOnce(); + expect(broadcastSpy).toHaveBeenCalledTimes(0); + }); + + it("when proof fails", async () => { + const dbMock = createDbMock(); + const sdkProviderMock = createSdkProviderMock({ + verifyWithdrawal: vi.fn().mockResolvedValue(false), + }); + + const service = new PrivacyPoolRelayerMock(dbMock, sdkProviderMock); + const validateSpy = vi.spyOn(service, "validateWithdrawal"); + const verifySpy = vi.spyOn(service, "verifyProof"); + const broadcastSpy = vi.spyOn(service, "broadcastWithdrawal"); + + expect(service.db).toBe(dbMock); + expect(service.sdkProvider).toBe(sdkProviderMock); + + await expect( + service.handleRequest(withdrawalPayload), + ).resolves.toMatchObject({ + success: false, + error: "Invalid proof", + }); + + expect(dbMock.createNewRequest).toHaveBeenCalledOnce(); + expect(validateSpy).toHaveBeenCalledOnce(); + expect(verifySpy).toHaveBeenCalledOnce(); + expect(dbMock.updateFailedRequest).toHaveBeenCalledOnce(); + expect(broadcastSpy).toHaveBeenCalledTimes(0); + }); + }); + }); +}); diff --git a/packages/relayer/vitest.config.ts b/packages/relayer/vitest.config.ts index 36aeafb..a9df841 100644 --- a/packages/relayer/vitest.config.ts +++ b/packages/relayer/vitest.config.ts @@ -2,20 +2,23 @@ import path from "path"; import { configDefaults, defineConfig } from "vitest/config"; export default defineConfig({ - test: { - globals: true, - environment: "node", - include: ["test/**/*.spec.ts"], - exclude: ["node_modules", "dist"], - coverage: { - provider: "v8", - reporter: ["text", "json", "html"], - exclude: ["node_modules", "dist", "src/index.ts", ...configDefaults.exclude], - }, + test: { + env: { + 'CONFIG_PATH': './test/inputs/config.test.json', }, - resolve: { - alias: { - "@": path.resolve(__dirname, "src"), - }, + globals: true, + environment: "node", + include: ["test/**/*.spec.ts"], + exclude: ["node_modules", "dist"], + coverage: { + provider: "v8", + reporter: ["text", "json", "html"], + exclude: ["node_modules", "dist", "src/index.ts", ...configDefaults.exclude], }, + }, + resolve: { + alias: { + "@": path.resolve(__dirname, "src"), + }, + }, }); diff --git a/packages/sdk/package.json b/packages/sdk/package.json index ef1f4c2..ef0ca4a 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -53,10 +53,10 @@ "test:cov": "vitest run --config vitest.config.ts --coverage" }, "dependencies": { + "@types/snarkjs": "0.7.9", "@zk-kit/lean-imt": "2.2.2", "maci-crypto": "2.5.0", "snarkjs": "0.7.5", - "@types/snarkjs": "0.7.9", "viem": "2.22.14" }, "devDependencies": { @@ -72,7 +72,6 @@ "@rollup/plugin-wasm": "6.2.2", "@types/node": "20.3.1", "@types/snarkjs": "0.7.9", - "@vitest/coverage-v8": "2.0.5", "commitlint": "19.4.1", "globals": "15.14.0", "husky": "9.1.5", @@ -81,8 +80,6 @@ "rollup": "4.30.1", "rollup-plugin-dts": "6.1.1", "snarkjs": "0.7.5", - "sort-package-json": "2.10.1", - "typescript": "5.5.4", - "vitest": "2.0.5" + "sort-package-json": "2.10.1" } } diff --git a/yarn.lock b/yarn.lock index 4f864d5..9b1ce71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -154,10 +154,10 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bcoe/v8-coverage@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz#bbe12dca5b4ef983a0d0af4b07b9bc90ea0ababa" + integrity sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== "@commitlint/cli@19.3.0": version "19.3.0" @@ -351,120 +351,130 @@ solc-typed-ast "18.1.6" yargs "17.7.2" -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.1" @@ -842,190 +852,190 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809" integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q== -"@rollup/rollup-android-arm-eabi@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.0.tgz#b3eb2caca0d67d89f1797fe732938cfa79c690be" - integrity sha512-Eeao7ewDq79jVEsrtWIj5RNqB8p2knlm9fhR6uJ2gqP7UfbLrTrxevudVrEPDM7Wkpn/HpRC2QfazH7MXLz3vQ== +"@rollup/rollup-android-arm-eabi@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz#9b726b4dcafb9332991e9ca49d54bafc71d9d87f" + integrity sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg== "@rollup/rollup-android-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad" integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w== -"@rollup/rollup-android-arm64@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.0.tgz#667165775809f35ca1eaa872b07ec4b3ab92ea90" - integrity sha512-yVh0Kf1f0Fq4tWNf6mWcbQBCLDpDrDEl88lzPgKhrgTcDrTtlmun92ywEF9dCjmYO3EFiSuJeeo9cYRxl2FswA== +"@rollup/rollup-android-arm64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz#88326ff46168a47851077ca0bf0c442689ec088f" + integrity sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA== "@rollup/rollup-darwin-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23" integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q== -"@rollup/rollup-darwin-arm64@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.0.tgz#7c6c254d1eb8b9348f8b927166312a5714678483" - integrity sha512-gCs0ErAZ9s0Osejpc3qahTsqIPUDjSKIyxK/0BGKvL+Tn0n3Kwvj8BrCv7Y5sR1Ypz1K2qz9Ny0VvkVyoXBVUQ== +"@rollup/rollup-darwin-arm64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz#b8fbcc9389bc6fad3334a1d16dbeaaa5637c5772" + integrity sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg== "@rollup/rollup-darwin-x64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d" integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA== -"@rollup/rollup-darwin-x64@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.0.tgz#d4462dc79ed6a0f278488b9f2ed9abb401966270" - integrity sha512-aIB5Anc8hngk15t3GUkiO4pv42ykXHfmpXGS+CzM9CTyiWyT8HIS5ygRAy7KcFb/wiw4Br+vh1byqcHRTfq2tQ== +"@rollup/rollup-darwin-x64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz#1aa2bcad84c0fb5902e945d88822e17a4f661d51" + integrity sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg== "@rollup/rollup-freebsd-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003" integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ== -"@rollup/rollup-freebsd-arm64@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.0.tgz#04f4220ee8662749acfa44b34eb05f3bea3ecb11" - integrity sha512-kpdsUdMlVJMRMaOf/tIvxk8TQdzHhY47imwmASOuMajg/GXpw8GKNd8LNwIHE5Yd1onehNpcUB9jHY6wgw9nHQ== +"@rollup/rollup-freebsd-arm64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz#29c54617e0929264dcb6416597d6d7481696e49f" + integrity sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ== "@rollup/rollup-freebsd-x64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360" integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw== -"@rollup/rollup-freebsd-x64@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.0.tgz#fe48166f889bee1996a1bfcf44e376d524e6e030" - integrity sha512-D0RDyHygOBCQiqookcPevrvgEarN0CttBecG4chOeIYCNtlKHmf5oi5kAVpXV7qs0Xh/WO2RnxeicZPtT50V0g== +"@rollup/rollup-freebsd-x64@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz#a8b58ab7d31882559d93f2d1b5863d9e4b4b2678" + integrity sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ== "@rollup/rollup-linux-arm-gnueabihf@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9" integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg== -"@rollup/rollup-linux-arm-gnueabihf@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.0.tgz#dc04b05503ab0d1b0f646d3f15fef92c1cfb4a17" - integrity sha512-mCIw8j5LPDXmCOW8mfMZwT6F/Kza03EnSr4wGYEswrEfjTfVsFOxvgYfuRMxTuUF/XmRb9WSMD5GhCWDe2iNrg== +"@rollup/rollup-linux-arm-gnueabihf@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz#a844e1978c8b9766b169ecb1cb5cc0d8a3f05930" + integrity sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg== "@rollup/rollup-linux-arm-musleabihf@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b" integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug== -"@rollup/rollup-linux-arm-musleabihf@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.0.tgz#de41f94a12b680414a06d438a1e76eaca02cdea2" - integrity sha512-AwwldAu4aCJPob7zmjuDUMvvuatgs8B/QiVB0KwkUarAcPB3W+ToOT+18TQwY4z09Al7G0BvCcmLRop5zBLTag== +"@rollup/rollup-linux-arm-musleabihf@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz#6b44c3b7257985d71b087fcb4ef01325e2fff201" + integrity sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg== "@rollup/rollup-linux-arm64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528" integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw== -"@rollup/rollup-linux-arm64-gnu@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.0.tgz#ab5720b3d77810a65cdc5d940fa5e1ed4948d62d" - integrity sha512-e7kDUGVP+xw05pV65ZKb0zulRploU3gTu6qH1qL58PrULDGxULIS0OSDQJLH7WiFnpd3ZKUU4VM3u/Z7Zw+e7Q== +"@rollup/rollup-linux-arm64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz#ebb499cf1720115256d0c9ae7598c90cc2251bc5" + integrity sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA== "@rollup/rollup-linux-arm64-musl@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80" integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA== -"@rollup/rollup-linux-arm64-musl@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.0.tgz#eb02c76935ca72332eaf24bef6f9ed0e43cdd9fe" - integrity sha512-SXYJw3zpwHgaBqTXeAZ31qfW/v50wq4HhNVvKFhRr5MnptRX2Af4KebLWR1wpxGJtLgfS2hEPuALRIY3LPAAcA== +"@rollup/rollup-linux-arm64-musl@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz#9658221b59d9e5643348f9a52fa5ef35b4dc07b1" + integrity sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q== "@rollup/rollup-linux-loongarch64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e" integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ== -"@rollup/rollup-linux-loongarch64-gnu@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.0.tgz#160903324cfcf09dc61be9d97e623e326c1a863a" - integrity sha512-e5XiCinINCI4RdyU3sFyBH4zzz7LiQRvHqDtRe9Dt8o/8hTBaYpdPimayF00eY2qy5j4PaaWK0azRgUench6WQ== +"@rollup/rollup-linux-loongarch64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz#19418cc57579a5655af2d850a89d74b3f7e9aa92" + integrity sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw== "@rollup/rollup-linux-powerpc64le-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc" integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw== -"@rollup/rollup-linux-powerpc64le-gnu@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.0.tgz#393030fdb664326a007300a2b7eabc7a8a6c7609" - integrity sha512-3SWN3e0bAsm9ToprLFBSro8nJe6YN+5xmB11N4FfNf92wvLye/+Rh5JGQtKOpwLKt6e61R1RBc9g+luLJsc23A== +"@rollup/rollup-linux-powerpc64le-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz#fe0bce7778cb6ce86898c781f3f11369d1a4952c" + integrity sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ== "@rollup/rollup-linux-riscv64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e" integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw== -"@rollup/rollup-linux-riscv64-gnu@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.0.tgz#8441dc29c13e2d03a510e59f3e5b1bfab2542071" - integrity sha512-B1Oqt3GLh7qmhvfnc2WQla4NuHlcxAD5LyueUi5WtMc76ZWY+6qDtQYqnxARx9r+7mDGfamD+8kTJO0pKUJeJA== +"@rollup/rollup-linux-riscv64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz#9c158360abf6e6f7794285642ba0898c580291f6" + integrity sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg== "@rollup/rollup-linux-s390x-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea" integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA== -"@rollup/rollup-linux-s390x-gnu@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.0.tgz#e227deb812ccf6c077cef1fa4dc3fe39c9489049" - integrity sha512-UfUCo0h/uj48Jq2lnhX0AOhZPSTAq3Eostas+XZ+GGk22pI+Op1Y6cxQ1JkUuKYu2iU+mXj1QjPrZm9nNWV9rg== +"@rollup/rollup-linux-s390x-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz#f9113498d22962baacdda008b5587d568b05aa34" + integrity sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw== "@rollup/rollup-linux-x64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588" integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg== -"@rollup/rollup-linux-x64-gnu@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.0.tgz#5b5163bd4e9c2ff11f8230252962240452e18b4a" - integrity sha512-chZLTUIPbgcpm+Z7ALmomXW8Zh+wE2icrG+K6nt/HenPLmtwCajhQC5flNSk1Xy5EDMt/QAOz2MhzfOfJOLSiA== +"@rollup/rollup-linux-x64-gnu@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz#aec8d4cdf911cd869a72b8bd00833cb426664e0c" + integrity sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw== "@rollup/rollup-linux-x64-musl@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01" integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow== -"@rollup/rollup-linux-x64-musl@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.0.tgz#516ece775a9e9770d6bd6bdecc7926a0355491c4" - integrity sha512-jo0UolK70O28BifvEsFD/8r25shFezl0aUk2t0VJzREWHkq19e+pcLu4kX5HiVXNz5qqkD+aAq04Ct8rkxgbyQ== +"@rollup/rollup-linux-x64-musl@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz#61c0a146bdd1b5e0dcda33690dd909b321d8f20f" + integrity sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A== "@rollup/rollup-win32-arm64-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52" integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw== -"@rollup/rollup-win32-arm64-msvc@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.0.tgz#e60db53ff6b3bd00baf13b04f91fddb43740077f" - integrity sha512-Vmg0NhAap2S54JojJchiu5An54qa6t/oKT7LmDaWggpIcaiL8WcWHEN6OQrfTdL6mQ2GFyH7j2T5/3YPEDOOGA== +"@rollup/rollup-win32-arm64-msvc@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz#c6c5bf290a3a459c18871110bc2e7009ce35b15a" + integrity sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA== "@rollup/rollup-win32-ia32-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e" integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw== -"@rollup/rollup-win32-ia32-msvc@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.0.tgz#283b3436a4c8a39e0f11d1d6935560ef37f1b5f8" - integrity sha512-CV2aqhDDOsABKHKhNcs1SZFryffQf8vK2XrxP6lxC99ELZAdvsDgPklIBfd65R8R+qvOm1SmLaZ/Fdq961+m7A== +"@rollup/rollup-win32-ia32-msvc@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz#16ca6bdadc9e054818b9c51f8dac82f6b8afab81" + integrity sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA== "@rollup/rollup-win32-x64-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c" integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og== -"@rollup/rollup-win32-x64-msvc@4.34.0": - version "4.34.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.0.tgz#64c15d791d9b07ced7e89f735b2bd420a41c2e8e" - integrity sha512-g2ASy1QwHP88y5KWvblUolJz9rN+i4ZOsYzkEwcNfaNooxNUXG+ON6F5xFo0NIItpHqxcdAyls05VXpBnludGw== +"@rollup/rollup-win32-x64-msvc@4.34.6": + version "4.34.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz#f3d03ce2d82723eb089188ea1494a719b09e1561" + integrity sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w== "@scure/base@~1.1.6": version "1.1.9" @@ -1388,81 +1398,82 @@ "@typescript-eslint/types" "8.20.0" eslint-visitor-keys "^4.2.0" -"@vitest/coverage-v8@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz#411961ce4fd1177a32b4dd74ab576ed3b859155e" - integrity sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg== +"@vitest/coverage-v8@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-3.0.5.tgz#22a5f6730f13703ce6736f7d0032251a3619a300" + integrity sha512-zOOWIsj5fHh3jjGwQg+P+J1FW3s4jBu1Zqga0qW60yutsBtqEqNEJKWYh7cYn1yGD+1bdPsPdC/eL4eVK56xMg== dependencies: "@ampproject/remapping" "^2.3.0" - "@bcoe/v8-coverage" "^0.2.3" - debug "^4.3.5" + "@bcoe/v8-coverage" "^1.0.2" + debug "^4.4.0" istanbul-lib-coverage "^3.2.2" istanbul-lib-report "^3.0.1" istanbul-lib-source-maps "^5.0.6" istanbul-reports "^3.1.7" - magic-string "^0.30.10" - magicast "^0.3.4" - std-env "^3.7.0" + magic-string "^0.30.17" + magicast "^0.3.5" + std-env "^3.8.0" test-exclude "^7.0.1" - tinyrainbow "^1.2.0" + tinyrainbow "^2.0.0" -"@vitest/expect@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.5.tgz#f3745a6a2c18acbea4d39f5935e913f40d26fa86" - integrity sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA== +"@vitest/expect@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.0.5.tgz#aa0acd0976cf56842806e5dcaebd446543966b14" + integrity sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA== dependencies: - "@vitest/spy" "2.0.5" - "@vitest/utils" "2.0.5" - chai "^5.1.1" - tinyrainbow "^1.2.0" + "@vitest/spy" "3.0.5" + "@vitest/utils" "3.0.5" + chai "^5.1.2" + tinyrainbow "^2.0.0" -"@vitest/pretty-format@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.5.tgz#91d2e6d3a7235c742e1a6cc50e7786e2f2979b1e" - integrity sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ== +"@vitest/mocker@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-3.0.5.tgz#8dce3dc4cb0adfd9d554531cea836244f8c36bcd" + integrity sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw== dependencies: - tinyrainbow "^1.2.0" - -"@vitest/pretty-format@^2.0.5": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.8.tgz#88f47726e5d0cf4ba873d50c135b02e4395e2bca" - integrity sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ== - dependencies: - tinyrainbow "^1.2.0" - -"@vitest/runner@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.0.5.tgz#89197e712bb93513537d6876995a4843392b2a84" - integrity sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig== - dependencies: - "@vitest/utils" "2.0.5" - pathe "^1.1.2" - -"@vitest/snapshot@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.0.5.tgz#a2346bc5013b73c44670c277c430e0334690a162" - integrity sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew== - dependencies: - "@vitest/pretty-format" "2.0.5" - magic-string "^0.30.10" - pathe "^1.1.2" - -"@vitest/spy@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.5.tgz#590fc07df84a78b8e9dd976ec2090920084a2b9f" - integrity sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA== - dependencies: - tinyspy "^3.0.0" - -"@vitest/utils@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.5.tgz#6f8307a4b6bc6ceb9270007f73c67c915944e926" - integrity sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ== - dependencies: - "@vitest/pretty-format" "2.0.5" + "@vitest/spy" "3.0.5" estree-walker "^3.0.3" - loupe "^3.1.1" - tinyrainbow "^1.2.0" + magic-string "^0.30.17" + +"@vitest/pretty-format@3.0.5", "@vitest/pretty-format@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.0.5.tgz#10ae6a83ccc1a866e31b2d0c1a7a977ade02eff9" + integrity sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA== + dependencies: + tinyrainbow "^2.0.0" + +"@vitest/runner@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-3.0.5.tgz#c5960a1169465a2b9ac21f1d24a4cf1fe67c7501" + integrity sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A== + dependencies: + "@vitest/utils" "3.0.5" + pathe "^2.0.2" + +"@vitest/snapshot@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-3.0.5.tgz#afd0ae472dc5893b0bb10e3e673ef649958663f4" + integrity sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA== + dependencies: + "@vitest/pretty-format" "3.0.5" + magic-string "^0.30.17" + pathe "^2.0.2" + +"@vitest/spy@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.0.5.tgz#7bb5d84ec21cc0d62170fda4e31cd0b46c1aeb8b" + integrity sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg== + dependencies: + tinyspy "^3.0.2" + +"@vitest/utils@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.0.5.tgz#dc3eaefd3534598917e939af59d9a9b6a5be5082" + integrity sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg== + dependencies: + "@vitest/pretty-format" "3.0.5" + loupe "^3.1.2" + tinyrainbow "^2.0.0" "@zk-kit/baby-jubjub@1.0.3", "@zk-kit/baby-jubjub@^1.0.3": version "1.0.3" @@ -1973,7 +1984,7 @@ chai@^4.3.6: pathval "^1.1.1" type-detect "^4.1.0" -chai@^5.1.1, chai@^5.1.2: +chai@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== @@ -2551,6 +2562,11 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-module-lexer@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + es-object-atoms@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" @@ -2558,34 +2574,36 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== +esbuild@^0.24.2: + version "0.24.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" @@ -2805,6 +2823,11 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +expect-type@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" + integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== + express@4.21.2: version "4.21.2" resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" @@ -4015,7 +4038,7 @@ loupe@^2.3.6: dependencies: get-func-name "^2.0.1" -loupe@^3.1.0, loupe@^3.1.1: +loupe@^3.1.0, loupe@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2" integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== @@ -4077,14 +4100,14 @@ maci-domainobjs@^2.5.0: dependencies: maci-crypto "^2.5.0" -magic-string@^0.30.10, magic-string@^0.30.3: +magic-string@^0.30.10, magic-string@^0.30.17, magic-string@^0.30.3: version "0.30.17" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" -magicast@^0.3.4: +magicast@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== @@ -4635,10 +4658,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pathe@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.2.tgz#5ed86644376915b3c7ee4d00ac8c348d671da3a5" + integrity sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w== pathval@^1.1.1: version "1.1.1" @@ -4690,7 +4713,7 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss@^8.4.43: +postcss@^8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== @@ -4967,32 +4990,32 @@ rollup@4.30.1: "@rollup/rollup-win32-x64-msvc" "4.30.1" fsevents "~2.3.2" -rollup@^4.20.0: - version "4.34.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.0.tgz#355a2da8f9cf07c2f465163c6608efb26c9cc833" - integrity sha512-+4C/cgJ9w6sudisA0nZz0+O7lTP9a3CzNLsoDwaRumM8QHwghUsu6tqHXiTmNUp/rqNiM14++7dkzHDyCRs0Jg== +rollup@^4.30.1: + version "4.34.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.6.tgz#a07e4d2621759e29034d909655e7a32eee9195c9" + integrity sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ== dependencies: "@types/estree" "1.0.6" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.34.0" - "@rollup/rollup-android-arm64" "4.34.0" - "@rollup/rollup-darwin-arm64" "4.34.0" - "@rollup/rollup-darwin-x64" "4.34.0" - "@rollup/rollup-freebsd-arm64" "4.34.0" - "@rollup/rollup-freebsd-x64" "4.34.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.34.0" - "@rollup/rollup-linux-arm-musleabihf" "4.34.0" - "@rollup/rollup-linux-arm64-gnu" "4.34.0" - "@rollup/rollup-linux-arm64-musl" "4.34.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.34.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.34.0" - "@rollup/rollup-linux-riscv64-gnu" "4.34.0" - "@rollup/rollup-linux-s390x-gnu" "4.34.0" - "@rollup/rollup-linux-x64-gnu" "4.34.0" - "@rollup/rollup-linux-x64-musl" "4.34.0" - "@rollup/rollup-win32-arm64-msvc" "4.34.0" - "@rollup/rollup-win32-ia32-msvc" "4.34.0" - "@rollup/rollup-win32-x64-msvc" "4.34.0" + "@rollup/rollup-android-arm-eabi" "4.34.6" + "@rollup/rollup-android-arm64" "4.34.6" + "@rollup/rollup-darwin-arm64" "4.34.6" + "@rollup/rollup-darwin-x64" "4.34.6" + "@rollup/rollup-freebsd-arm64" "4.34.6" + "@rollup/rollup-freebsd-x64" "4.34.6" + "@rollup/rollup-linux-arm-gnueabihf" "4.34.6" + "@rollup/rollup-linux-arm-musleabihf" "4.34.6" + "@rollup/rollup-linux-arm64-gnu" "4.34.6" + "@rollup/rollup-linux-arm64-musl" "4.34.6" + "@rollup/rollup-linux-loongarch64-gnu" "4.34.6" + "@rollup/rollup-linux-powerpc64le-gnu" "4.34.6" + "@rollup/rollup-linux-riscv64-gnu" "4.34.6" + "@rollup/rollup-linux-s390x-gnu" "4.34.6" + "@rollup/rollup-linux-x64-gnu" "4.34.6" + "@rollup/rollup-linux-x64-musl" "4.34.6" + "@rollup/rollup-win32-arm64-msvc" "4.34.6" + "@rollup/rollup-win32-ia32-msvc" "4.34.6" + "@rollup/rollup-win32-x64-msvc" "4.34.6" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -5430,7 +5453,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -std-env@^3.7.0: +std-env@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== @@ -5619,27 +5642,27 @@ thingies@^1.20.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tinybench@^2.8.0: +tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== -tinyexec@^0.3.0: +tinyexec@^0.3.0, tinyexec@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinypool@^1.0.0: +tinypool@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== -tinyrainbow@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" - integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== +tinyrainbow@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" + integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== -tinyspy@^3.0.0: +tinyspy@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== @@ -5895,51 +5918,52 @@ viem@^2.21.57: ox "0.6.7" ws "8.18.0" -vite-node@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.0.5.tgz#36d909188fc6e3aba3da5fc095b3637d0d18e27b" - integrity sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q== +vite-node@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.0.5.tgz#6a0d06f7a4bdaae6ddcdedc12d910d886cf7d62f" + integrity sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A== dependencies: cac "^6.7.14" - debug "^4.3.5" - pathe "^1.1.2" - tinyrainbow "^1.2.0" - vite "^5.0.0" + debug "^4.4.0" + es-module-lexer "^1.6.0" + pathe "^2.0.2" + vite "^5.0.0 || ^6.0.0" -vite@^5.0.0: - version "5.4.14" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.14.tgz#ff8255edb02134df180dcfca1916c37a6abe8408" - integrity sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA== +"vite@^5.0.0 || ^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.1.0.tgz#00a4e99a23751af98a2e4701c65ba89ce23858a6" + integrity sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ== dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" + esbuild "^0.24.2" + postcss "^8.5.1" + rollup "^4.30.1" optionalDependencies: fsevents "~2.3.3" -vitest@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.0.5.tgz#2f15a532704a7181528e399cc5b754c7f335fd62" - integrity sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA== +vitest@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-3.0.5.tgz#a9a3fa1203d85869c9ba66f3ea990b72d00ddeb0" + integrity sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q== dependencies: - "@ampproject/remapping" "^2.3.0" - "@vitest/expect" "2.0.5" - "@vitest/pretty-format" "^2.0.5" - "@vitest/runner" "2.0.5" - "@vitest/snapshot" "2.0.5" - "@vitest/spy" "2.0.5" - "@vitest/utils" "2.0.5" - chai "^5.1.1" - debug "^4.3.5" - execa "^8.0.1" - magic-string "^0.30.10" - pathe "^1.1.2" - std-env "^3.7.0" - tinybench "^2.8.0" - tinypool "^1.0.0" - tinyrainbow "^1.2.0" - vite "^5.0.0" - vite-node "2.0.5" + "@vitest/expect" "3.0.5" + "@vitest/mocker" "3.0.5" + "@vitest/pretty-format" "^3.0.5" + "@vitest/runner" "3.0.5" + "@vitest/snapshot" "3.0.5" + "@vitest/spy" "3.0.5" + "@vitest/utils" "3.0.5" + chai "^5.1.2" + debug "^4.4.0" + expect-type "^1.1.0" + magic-string "^0.30.17" + pathe "^2.0.2" + std-env "^3.8.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinypool "^1.0.2" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0" + vite-node "3.0.5" why-is-node-running "^2.3.0" wasmbuilder@0.0.16: