From ecf8fd2bfe3ba78e9c8b032ea8dfc093c930be42 Mon Sep 17 00:00:00 2001 From: tomiir Date: Tue, 12 Aug 2025 16:51:31 +0200 Subject: [PATCH 01/10] feat: add routing on status updates. Update events --- packages/appkit/exports/constants.ts | 2 +- packages/controllers/exports/index.ts | 5 +- .../src/controllers/ExchangeController.ts | 96 ++- .../controllers/src/utils/ExchangeUtil.ts | 10 +- packages/controllers/src/utils/TypeUtil.ts | 4 + packages/pay/src/controllers/PayController.ts | 4 + .../w3m-deposit-from-exchange-view/index.ts | 31 +- pnpm-lock.yaml | 691 +++++++++--------- 8 files changed, 471 insertions(+), 372 deletions(-) diff --git a/packages/appkit/exports/constants.ts b/packages/appkit/exports/constants.ts index f1c6ddad69..f096c87eb7 100644 --- a/packages/appkit/exports/constants.ts +++ b/packages/appkit/exports/constants.ts @@ -1 +1 @@ -export const PACKAGE_VERSION = '1.7.18' +export const PACKAGE_VERSION = '1.7.19' diff --git a/packages/controllers/exports/index.ts b/packages/controllers/exports/index.ts index 5bf62d35c6..b0692c9031 100644 --- a/packages/controllers/exports/index.ts +++ b/packages/controllers/exports/index.ts @@ -85,7 +85,10 @@ export { OptionsStateController } from '../src/controllers/OptionsStateControlle export type { OptionsStateControllerState } from '../src/controllers/OptionsStateController.js' export { ExchangeController } from '../src/controllers/ExchangeController.js' -export type { ExchangeControllerState } from '../src/controllers/ExchangeController.js' +export type { + ExchangeControllerState, + CurrentPayment +} from '../src/controllers/ExchangeController.js' // -- Utils ------------------------------------------------------------------- export { AssetUtil } from '../src/utils/AssetUtil.js' diff --git a/packages/controllers/src/controllers/ExchangeController.ts b/packages/controllers/src/controllers/ExchangeController.ts index 864f469e56..0b97f8a875 100644 --- a/packages/controllers/src/controllers/ExchangeController.ts +++ b/packages/controllers/src/controllers/ExchangeController.ts @@ -5,7 +5,13 @@ import { type CaipNetworkId } from '@reown/appkit-common' import { getActiveNetworkTokenAddress } from '../utils/ChainControllerUtil.js' import { CoreHelperUtil } from '../utils/CoreHelperUtil.js' -import { formatCaip19Asset, getExchanges, getPayUrl } from '../utils/ExchangeUtil.js' +import { + type GetBuyStatusResult, + formatCaip19Asset, + getBuyStatus, + getExchanges, + getPayUrl +} from '../utils/ExchangeUtil.js' import type { Exchange, PayUrlParams } from '../utils/ExchangeUtil.js' import { AccountController } from './AccountController.js' import { BlockchainApiController } from './BlockchainApiController.js' @@ -31,7 +37,9 @@ const DEFAULT_STATE: ExchangeControllerState = { error: null, exchanges: [], isLoading: false, - currentPayment: undefined + currentPayment: undefined, + isPaymentInProgress: false, + paymentId: '' } // -- Types --------------------------------------------- // @@ -66,31 +74,15 @@ export interface ExchangeControllerState { exchanges: Exchange[] currentPayment?: CurrentPayment paymentAsset: PaymentAsset + isPaymentInProgress: boolean + paymentId: string } type StateKey = keyof ExchangeControllerState type PaymentType = 'wallet' | 'exchange' // -- State --------------------------------------------- // -const state = proxy({ - paymentAsset: { - network: 'eip155:1', - asset: 'native', - metadata: { - name: 'Ethereum', - symbol: 'ETH', - decimals: 18 - } - }, - amount: 0, - tokenAmount: 0, - tokenPrice: null, - priceLoading: false, - error: null, - exchanges: [], - isLoading: false, - currentPayment: undefined -}) +const state = proxy(DEFAULT_STATE) // -- Controller ---------------------------------------- // export const ExchangeController = { @@ -188,6 +180,7 @@ export const ExchangeController = { type: 'exchange', exchangeId }, + source: 'fund-from-exchange', headless: false } }) @@ -207,6 +200,9 @@ export const ExchangeController = { throw new Error('No account connected') } + state.isPaymentInProgress = true + state.paymentId = crypto.randomUUID() + state.currentPayment = { type: 'exchange', exchangeId @@ -233,5 +229,63 @@ export const ExchangeController = { state.error = 'Unable to initiate payment' SnackController.showError(state.error) } + }, + + async waitUntilComplete( + exchangeId: string, + sessionId: string, + paymentId: string + ): Promise { + const status = await this.getBuyStatus(exchangeId, sessionId, paymentId) + + if (status.status === 'SUCCESS' || status.status === 'FAILED') { + return status + } + + // Wait 1 second before checking again + await new Promise(resolve => { + setTimeout(resolve, 1000) + }) + + return this.waitUntilComplete(exchangeId, sessionId, paymentId) + }, + + async getBuyStatus(exchangeId: string, sessionId: string, paymentId: string) { + try { + if (!state.currentPayment) { + throw new Error('No current payment') + } + + const status = await getBuyStatus({ sessionId, exchangeId }) + state.currentPayment.status = status.status + if (status.status === 'SUCCESS' || status.status === 'FAILED') { + state.currentPayment.result = status.txHash + state.isPaymentInProgress = false + EventsController.sendEvent({ + type: 'track', + event: status.status === 'SUCCESS' ? 'PAY_SUCCESS' : 'PAY_ERROR', + properties: { + source: 'fund-from-exchange', + paymentId, + configuration: { + network: state.paymentAsset.network, + asset: state.paymentAsset.asset, + recipient: AccountController.state.address || '', + amount: state.amount + }, + currentPayment: { + type: 'exchange', + exchangeId: state.currentPayment?.exchangeId, + sessionId: state.currentPayment?.sessionId, + result: status.txHash + } + } + }) + } + + return status + } catch (error) { + throw new Error('Unable to get buy status') + } } } diff --git a/packages/controllers/src/utils/ExchangeUtil.ts b/packages/controllers/src/utils/ExchangeUtil.ts index a246a4d7f2..c74d145bc8 100644 --- a/packages/controllers/src/utils/ExchangeUtil.ts +++ b/packages/controllers/src/utils/ExchangeUtil.ts @@ -51,7 +51,7 @@ export function getApiUrl() { return `https://rpc.walletconnect.org/v1/json-rpc?projectId=${projectId}&source=fund-wallet` } -type JsonRpcResponse = { +export type JsonRpcResponse = { jsonrpc: string id: number result: T @@ -62,24 +62,24 @@ export type GetExchangesResult = { total: number } -type GetPayUrlParams = { +export type GetPayUrlParams = { exchangeId: string asset: string amount: string recipient: string } -type GetPayUrlResult = { +export type GetPayUrlResult = { url: string sessionId: string } -type GetBuyStatusParams = { +export type GetBuyStatusParams = { sessionId: string exchangeId: string } -type GetBuyStatusResult = { +export type GetBuyStatusResult = { status: ExchangeBuyStatus txHash?: string } diff --git a/packages/controllers/src/utils/TypeUtil.ts b/packages/controllers/src/utils/TypeUtil.ts index 32d9a67090..1a96b8fa38 100644 --- a/packages/controllers/src/utils/TypeUtil.ts +++ b/packages/controllers/src/utils/TypeUtil.ts @@ -899,6 +899,7 @@ type PayEvent = address?: string event: 'PAY_SUCCESS' properties: { + source: 'pay' | 'fund-from-exchange' paymentId: string configuration: PayConfiguration currentPayment: PayCurrentPayment @@ -910,6 +911,7 @@ type PayEvent = address?: string event: 'PAY_ERROR' properties: { + source: 'pay' | 'fund-from-exchange' paymentId: string configuration: PayConfiguration currentPayment: PayCurrentPayment @@ -921,6 +923,7 @@ type PayEvent = address?: string event: 'PAY_INITIATED' properties: { + source: 'pay' | 'fund-from-exchange' paymentId: string configuration: PayConfiguration currentPayment: PayCurrentPayment @@ -947,6 +950,7 @@ type PayEvent = currentPayment: PayCurrentPayment headless: boolean caipNetworkId?: CaipNetworkId + source: 'pay' | 'fund-from-exchange' } } diff --git a/packages/pay/src/controllers/PayController.ts b/packages/pay/src/controllers/PayController.ts index 639f2c50d1..3f09c2a88e 100644 --- a/packages/pay/src/controllers/PayController.ts +++ b/packages/pay/src/controllers/PayController.ts @@ -225,6 +225,7 @@ export const PayController = { type: 'track', event: 'PAY_EXCHANGE_SELECTED', properties: { + source: 'pay', exchange: { id: exchangeId }, @@ -247,6 +248,7 @@ export const PayController = { type: 'track', event: 'PAY_INITIATED', properties: { + source: 'pay', paymentId: state.paymentId || DEFAULT_PAYMENT_ID, configuration: { network: params.network, @@ -508,6 +510,7 @@ export const PayController = { type: 'track', event: status.status === 'SUCCESS' ? 'PAY_SUCCESS' : 'PAY_ERROR', properties: { + source: 'pay', paymentId: state.paymentId || DEFAULT_PAYMENT_ID, configuration: { network: state.paymentAsset.network, @@ -569,6 +572,7 @@ export const PayController = { type: 'track', event: eventType as 'PAY_INITIATED' | 'PAY_SUCCESS' | 'PAY_ERROR', properties: { + source: 'pay', paymentId: state.paymentId || DEFAULT_PAYMENT_ID, configuration: { network: state.paymentAsset.network, diff --git a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts index 7923615cb0..3756e7a878 100644 --- a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts @@ -4,8 +4,10 @@ import { state } from 'lit/decorators.js' import { AssetUtil, ChainController, + type CurrentPayment, type Exchange, - ExchangeController + ExchangeController, + SnackController } from '@reown/appkit-controllers' import { customElement } from '@reown/appkit-ui' import '@reown/appkit-ui/wui-button' @@ -34,6 +36,9 @@ export class W3mDepositFromExchangeView extends LitElement { @state() public amount = ExchangeController.state.amount @state() public tokenAmount = ExchangeController.state.tokenAmount @state() public priceLoading = ExchangeController.state.priceLoading + @state() public isPaymentInProgress = ExchangeController.state.isPaymentInProgress + @state() public currentPayment?: CurrentPayment = ExchangeController.state.currentPayment + @state() public paymentId = ExchangeController.state.paymentId public constructor() { super() @@ -44,6 +49,24 @@ export class W3mDepositFromExchangeView extends LitElement { this.amount = exchangeState.amount this.tokenAmount = exchangeState.tokenAmount this.priceLoading = exchangeState.priceLoading + }), + ExchangeController.subscribeKey('isPaymentInProgress', isPaymentInProgress => { + this.isPaymentInProgress = isPaymentInProgress + if ( + isPaymentInProgress && + this.currentPayment?.exchangeId && + this.currentPayment?.sessionId && + this.paymentId + ) { + SnackController.showLoading('Deposit in progress...') + ExchangeController.waitUntilComplete( + this.currentPayment.exchangeId, + this.currentPayment.sessionId, + this.paymentId + ).then(() => { + SnackController.showSuccess('Deposit successful') + }) + } }) ) } @@ -53,7 +76,7 @@ export class W3mDepositFromExchangeView extends LitElement { } public override firstUpdated() { - ExchangeController.fetchExchanges() + ExchangeController.fetchExchanges().catch() ExchangeController.fetchTokenPrice() } @@ -139,9 +162,9 @@ export class W3mDepositFromExchangeView extends LitElement { ` } - private onExchangeClick(exchange: Exchange) { + private async onExchangeClick(exchange: Exchange) { if (this.amount) { - ExchangeController.handlePayWithExchange(exchange.id) + await ExchangeController.handlePayWithExchange(exchange.id) } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f084587d14..f4f1d89ada 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,16 +129,16 @@ importers: version: 5.75.5(react@19.1.0) '@vanilla-extract/css': specifier: 1.16.0 - version: 1.16.0(babel-plugin-macros@3.1.0) + version: 1.16.0 '@vanilla-extract/css-utils': specifier: 0.1.4 version: 0.1.4 '@vanilla-extract/sprinkles': specifier: 1.6.3 - version: 1.6.3(@vanilla-extract/css@1.16.0(babel-plugin-macros@3.1.0)) + version: 1.6.3(@vanilla-extract/css@1.16.0) '@vanilla-extract/webpack-plugin': specifier: 2.3.14 - version: 2.3.14(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(lightningcss@1.30.1)(terser@5.43.1)(webpack@5.94.0(webpack-cli@5.1.4)) + version: 2.3.14(@types/node@22.13.4)(lightningcss@1.30.1)(terser@5.43.1)(webpack@5.94.0(webpack-cli@5.1.4)) '@wagmi/core': specifier: 2.17.3 version: 2.17.3(@tanstack/query-core@5.75.5)(@types/react@19.1.3)(react@19.1.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.32.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)) @@ -3352,20 +3352,20 @@ packages: resolution: {integrity: sha512-A4l/gMNqsyCpzgobPcBAEc6WAGWlv5B8WaBJ6YpCKbDwUFLBSbGYFHDIlDrUHfQWq8A3O1rz/oUjjnLeHf07EA==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-dynamodb@3.862.0': - resolution: {integrity: sha512-58xLIQlqbFVlha3bE7KIwcWMPl47Y+82+I/b1AuKllQPeuU3rjXeDJZ0NXoithG4/hF7McclYfKPC4AbhIIQAQ==} + '@aws-sdk/client-dynamodb@3.864.0': + resolution: {integrity: sha512-Z+8qCU8A8RKI/vaMZx3bUG3ZIvEBZzYRIEZA06Qx0QHttkDV/i2Q31Bs98Za/UV0aMXJYsgpHCvXeRgR7r8hYA==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-lambda@3.862.0': - resolution: {integrity: sha512-QDw823FAMeUmyNt/eOtgfR/Nhfb0gQNoGCRH5CGi1EEWQJP78Dxum4w4W1DGADn1JEdNBZkWJXz3j9bu46KXVg==} + '@aws-sdk/client-lambda@3.865.0': + resolution: {integrity: sha512-ncCEW/kNRV8yJA/45z5HO6WEeihADzFY7RISfezDbvP3/X4dZb2gycRVPmJIE6CBqf01jwTkbG36qO+/iHIELg==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-s3@3.862.0': - resolution: {integrity: sha512-sPmqv2qKORtGRN51cRoHyTOK/SMejG1snXUQytuximeDPn5e/p6cCsYwOI8QuQNW+/7HbmosEz91lPcbClWXxg==} + '@aws-sdk/client-s3@3.864.0': + resolution: {integrity: sha512-QGYi9bWliewxumsvbJLLyx9WC0a4DP4F+utygBcq0zwPxaM0xDfBspQvP1dsepi7mW5aAjZmJ2+Xb7X0EhzJ/g==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sqs@3.862.0': - resolution: {integrity: sha512-ZWvMLpL5k064AH7dwyZXCoQuPx8gcGJlh/m093bxYkdemgZX5+VRETo3SukYAuYAsnNKxaqkEFw2Dt1iylCGAw==} + '@aws-sdk/client-sqs@3.864.0': + resolution: {integrity: sha512-SxEdQW/g2hb7/O4juAQL0kOD86/QBUSNkdJ5rN3Nd04rJmYTCxe38iCJBT637n+hiedxThLuj8H9ZmY1/OSg7Q==} engines: {node: '>=18.0.0'} '@aws-sdk/client-sso@3.398.0': @@ -3376,8 +3376,8 @@ packages: resolution: {integrity: sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.862.0': - resolution: {integrity: sha512-zHf7Bn22K09BdFgiGg6yWfy927djGhs58KB5qpqD2ie7u796TvetPH14p6UUAOGyk6aah+wR/WLFFoc+51uADA==} + '@aws-sdk/client-sso@3.864.0': + resolution: {integrity: sha512-THiOp0OpQROEKZ6IdDCDNNh3qnNn/kFFaTSOiugDpgcE5QdsOxh1/RXq7LmHpTJum3cmnFf8jG59PHcz9Tjnlw==} engines: {node: '>=18.0.0'} '@aws-sdk/client-sts@3.398.0': @@ -3388,8 +3388,8 @@ packages: resolution: {integrity: sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.862.0': - resolution: {integrity: sha512-oJ5Au3QCAQmOmh7PD7dUxnPDxWsT9Z95XEOiJV027//11pwRSUMiNSvW8srPa3i7CZRNjz5QHX6O4KqX9PxNsQ==} + '@aws-sdk/core@3.864.0': + resolution: {integrity: sha512-LFUREbobleHEln+Zf7IG83lAZwvHZG0stI7UU0CtwyuhQy5Yx0rKksHNOCmlM7MpTEbSCfntEhYi3jUaY5e5lg==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-env@3.398.0': @@ -3400,16 +3400,16 @@ packages: resolution: {integrity: sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.862.0': - resolution: {integrity: sha512-/nafSJMuixcrCN1SmsOBIQ5m1fhr9ZnCxw3JZD9qJm3yNXhAshqAC+KcA3JGFnvdBVLhY/pUpdoQmxZmuFJItQ==} + '@aws-sdk/credential-provider-env@3.864.0': + resolution: {integrity: sha512-StJPOI2Rt8UE6lYjXUpg6tqSZaM72xg46ljPg8kIevtBAAfdtq9K20qT/kSliWGIBocMFAv0g2mC0hAa+ECyvg==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-http@3.758.0': resolution: {integrity: sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.862.0': - resolution: {integrity: sha512-JnF3vH6GxvPuMGSI5QsmVlmWc0ebElEiJvUGByTMSr/BfzywZdJBKzPVqViwNqAW5cBWiZ/rpL+ekZ24Nb0Vow==} + '@aws-sdk/credential-provider-http@3.864.0': + resolution: {integrity: sha512-E/RFVxGTuGnuD+9pFPH2j4l6HvrXzPhmpL8H8nOoJUosjx7d4v93GJMbbl1v/fkDLqW9qN4Jx2cI6PAjohA6OA==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-ini@3.398.0': @@ -3420,8 +3420,8 @@ packages: resolution: {integrity: sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.862.0': - resolution: {integrity: sha512-LkpZ2S9DQCTHTPu1p0Qg5bM5DN/b/cEflW269RoeuYpiznxdV8r/mqYuhh/VPXQKkBZdiILe4/OODtg+vk4S0A==} + '@aws-sdk/credential-provider-ini@3.864.0': + resolution: {integrity: sha512-PlxrijguR1gxyPd5EYam6OfWLarj2MJGf07DvCx9MAuQkw77HBnsu6+XbV8fQriFuoJVTBLn9ROhMr/ROAYfUg==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-node@3.398.0': @@ -3432,8 +3432,8 @@ packages: resolution: {integrity: sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.862.0': - resolution: {integrity: sha512-4+X/LdEGPCBMlhn6MCcNJ5yJ8k+yDXeSO1l9X49NNQiG60SH/yObB3VvotcHWC+A3EEZx4dOw/ylcPt86e7Irg==} + '@aws-sdk/credential-provider-node@3.864.0': + resolution: {integrity: sha512-2BEymFeXURS+4jE9tP3vahPwbYRl0/1MVaFZcijj6pq+nf5EPGvkFillbdBRdc98ZI2NedZgSKu3gfZXgYdUhQ==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-process@3.398.0': @@ -3444,8 +3444,8 @@ packages: resolution: {integrity: sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.862.0': - resolution: {integrity: sha512-bR/eRCjRsilAuaUpNzTWWE4sUxJC4k571+4LLxE6Xo+0oYHfH+Ih00+sQRX06s4SqZZROdppissm3OOr5d26qA==} + '@aws-sdk/credential-provider-process@3.864.0': + resolution: {integrity: sha512-Zxnn1hxhq7EOqXhVYgkF4rI9MnaO3+6bSg/tErnBQ3F8kDpA7CFU24G1YxwaJXp2X4aX3LwthefmSJHwcVP/2g==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-sso@3.398.0': @@ -3456,8 +3456,8 @@ packages: resolution: {integrity: sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.862.0': - resolution: {integrity: sha512-1E1rTKWJAbzN/uiIXFPCVAS2PrZgy87O6BEO69404bI7o/iYHOfohfn66bdSqBnZ7Tn/hFJdCk6i23U3pibf5w==} + '@aws-sdk/credential-provider-sso@3.864.0': + resolution: {integrity: sha512-UPyPNQbxDwHVGmgWdGg9/9yvzuedRQVF5jtMkmP565YX9pKZ8wYAcXhcYdNPWFvH0GYdB0crKOmvib+bmCuwkw==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-web-identity@3.398.0': @@ -3468,8 +3468,8 @@ packages: resolution: {integrity: sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.862.0': - resolution: {integrity: sha512-Skv07eOS4usDf/Bna3FWKIo0/35qhxb22Z/OxrbNtx2Hxa/upp42S+Y6fA9qzgLqXMNYDZngKYwwMPtzrbkMAg==} + '@aws-sdk/credential-provider-web-identity@3.864.0': + resolution: {integrity: sha512-nNcjPN4SYg8drLwqK0vgVeSvxeGQiD0FxOaT38mV2H8cu0C5NzpvA+14Xy+W6vT84dxgmJYKk71Cr5QL2Oz+rA==} engines: {node: '>=18.0.0'} '@aws-sdk/endpoint-cache@3.804.0': @@ -3488,8 +3488,8 @@ packages: resolution: {integrity: sha512-oG3AaVUJ+26p0ESU4INFn6MmqqiBFZGrebST66Or+YBhteed2rbbFl7mCfjtPWUFgquQlvT1UP19P3LjQKeKpw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.862.0': - resolution: {integrity: sha512-3PuTNJs43GmtNIfj4R/aNPGX6lfIq0gjfekVPUO/MnP/eV+RVgkCvEqWYyN6RZyOzrzsJydXbmydwLHAwMzxiw==} + '@aws-sdk/middleware-flexible-checksums@3.864.0': + resolution: {integrity: sha512-MvakvzPZi9uyP3YADuIqtk/FAcPFkyYFWVVMf5iFs/rCdk0CUzn02Qf4CSuyhbkS6Y0KrAsMgKR4MgklPU79Wg==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-host-header@3.398.0': @@ -3532,8 +3532,8 @@ packages: resolution: {integrity: sha512-KVoo3IOzEkTq97YKM4uxZcYFSNnMkhW/qj22csofLegZi5fk90ztUnnaeKfaEJHfHp/tm1Y3uSoOXH45s++kKQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.862.0': - resolution: {integrity: sha512-rDRHxxZuY9E7py/OVYN1VQRAw0efEThvK5sZ3HfNNpL6Zk4HeOGtc6NtULSfeCeyHCVlJsdOVkIxJge2Ax5vSA==} + '@aws-sdk/middleware-sdk-s3@3.864.0': + resolution: {integrity: sha512-GjYPZ6Xnqo17NnC8NIQyvvdzzO7dm+Ks7gpxD/HsbXPmV2aEfuFveJXneGW9e1BheSKFff6FPDWu8Gaj2Iu1yg==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-sdk-sqs@3.862.0': @@ -3560,16 +3560,16 @@ packages: resolution: {integrity: sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.862.0': - resolution: {integrity: sha512-7OOaGbAw7Kg1zoKO9wV8cA5NnJC+RYsocjmP3FZ0FiKa7gbmeQ6Cfheunzd1Re9fgelgL3OIRjqO5mSmOIhyhA==} + '@aws-sdk/middleware-user-agent@3.864.0': + resolution: {integrity: sha512-wrddonw4EyLNSNBrApzEhpSrDwJiNfjxDm5E+bn8n32BbAojXASH8W8jNpxz/jMgNkkJNxCfyqybGKzBX0OhbQ==} engines: {node: '>=18.0.0'} '@aws-sdk/nested-clients@3.758.0': resolution: {integrity: sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.862.0': - resolution: {integrity: sha512-fPrfXa+m9S0DA5l8+p4A9NFQ22lEHm/ezaUWWWs6F3/U49lR6yKhNAGji3LlIG7b7ZdTJ3smAcaxNHclJsoQIg==} + '@aws-sdk/nested-clients@3.864.0': + resolution: {integrity: sha512-H1C+NjSmz2y8Tbgh7Yy89J20yD/hVyk15hNoZDbCYkXg0M358KS7KVIEYs8E2aPOCr1sK3HBE819D/yvdMgokA==} engines: {node: '>=18.0.0'} '@aws-sdk/region-config-resolver@3.734.0': @@ -3580,8 +3580,8 @@ packages: resolution: {integrity: sha512-VisR+/HuVFICrBPY+q9novEiE4b3mvDofWqyvmxHcWM7HumTz9ZQSuEtnlB/92GVM3KDUrR9EmBHNRrfXYZkcQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.862.0': - resolution: {integrity: sha512-ZAjrbXnu3yTxXMPiEVxDP/I8zfssrLQGgUi0NgJP6Cz/mOS/S/3hfOZrMown1jLhkTrzLpjNE8Q2n18VtRbScQ==} + '@aws-sdk/signature-v4-multi-region@3.864.0': + resolution: {integrity: sha512-w2HIn/WIcUyv1bmyCpRUKHXB5KdFGzyxPkp/YK5g+/FuGdnFFYWGfcO8O+How4jwrZTarBYsAHW9ggoKvwr37w==} engines: {node: '>=18.0.0'} '@aws-sdk/token-providers@3.398.0': @@ -3592,8 +3592,8 @@ packages: resolution: {integrity: sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.862.0': - resolution: {integrity: sha512-p3u7aom3WQ7ArFByNbccRIkCssk5BB4IUX9oFQa2P0MOFCbkKFBLG7WMegRXhq5grOHmI4SRftEDDy3CcoTqSQ==} + '@aws-sdk/token-providers@3.864.0': + resolution: {integrity: sha512-gTc2QHOBo05SCwVA65dUtnJC6QERvFaPiuppGDSxoF7O5AQNK0UR/kMSenwLqN8b5E1oLYvQTv3C1idJLRX0cg==} engines: {node: '>=18.0.0'} '@aws-sdk/types@3.398.0': @@ -3655,8 +3655,8 @@ packages: aws-crt: optional: true - '@aws-sdk/util-user-agent-node@3.862.0': - resolution: {integrity: sha512-KtJdSoa1Vmwquy+zwiqRQjtsuKaHlVcZm8tsTchHbc6809/VeaC+ZZOqlil9IWOOyWNGIX8GTRwP9TEb8cT5Gw==} + '@aws-sdk/util-user-agent-node@3.864.0': + resolution: {integrity: sha512-d+FjUm2eJEpP+FRpVR3z6KzMdx1qwxEYDz8jzNKwxYLBBquaBaP/wfoMtMQKAcbrR7aT9FZVZF7zDgzNxUvQlQ==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -5322,8 +5322,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.15': - resolution: {integrity: sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==} + '@inquirer/editor@4.2.16': + resolution: {integrity: sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -5340,6 +5340,12 @@ packages: '@types/node': optional: true + '@inquirer/external-editor@1.0.0': + resolution: {integrity: sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + '@inquirer/figures@1.0.13': resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} @@ -5371,8 +5377,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.8.0': - resolution: {integrity: sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==} + '@inquirer/prompts@7.8.1': + resolution: {integrity: sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -5439,21 +5445,21 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.10': - resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -5476,8 +5482,8 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/json-pack@1.8.0': - resolution: {integrity: sha512-paJGjyBTRzfgkqhIyer992g21aSKuu9h//zGS7aqm795roD6VYFf6iU9NYua1Bndmh/NRPkjtm9+hEPkK0yZSw==} + '@jsonjoy.com/json-pack@1.10.0': + resolution: {integrity: sha512-PMOU9Sh0baiLZEDewwR/YAHJBV2D8pPIzcFQSU7HQl/k/HNCDyVfO1OvkyDwBGp4dPtvZc7Hl9FFYWwTP1CbZw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -5923,8 +5929,8 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@nuxt/cli@3.27.0': - resolution: {integrity: sha512-lOdzEvEbGaV06ebKKYgpumLLzbOZMFQzZfT4ZE7foa8/8aXG+GR3g8w9RX2IUyomTdSfapa3UcHDC8srQKRIEw==} + '@nuxt/cli@3.28.0': + resolution: {integrity: sha512-WQ751WxWLBIeH3TDFt/LWQ2znyAKxpR5+gpv80oerwnVQs4GKajAfR6dIgExXZkjaPUHEFv2lVD9vM+frbprzw==} engines: {node: ^16.10.0 || >=18.0.0} hasBin: true @@ -7240,8 +7246,8 @@ packages: '@reown/appkit@1.7.8': resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} - '@rolldown/pluginutils@1.0.0-beta.31': - resolution: {integrity: sha512-IaDZ9NhjOIOkYtm+hH0GX33h3iVZ2OeSUnFF0+7Z4+1GuKs4Kj5wK3+I2zNV9IPLfqV4XlwWif8SXrZNutxciQ==} + '@rolldown/pluginutils@1.0.0-beta.32': + resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -8680,8 +8686,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.121': - resolution: {integrity: sha512-bHOrbyztmyYIi4f1R0s17QsPs1uyyYnGcXeZoGEd227oZjry0q6XQBQxd82X1I57zEfwO8h9Xo+Kl5gX1d9MwQ==} + '@types/node@18.19.122': + resolution: {integrity: sha512-yzegtT82dwTNEe/9y+CM8cgb42WrUfMMCg2QqSddzO1J6uPmBD7qKCZ7dOHZP2Yrpm/kb0eqdNMn2MUyEiqBmA==} '@types/node@20.19.9': resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} @@ -8823,8 +8829,8 @@ packages: typescript: optional: true - '@typescript-eslint/project-service@8.39.0': - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + '@typescript-eslint/project-service@8.39.1': + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -8833,8 +8839,8 @@ packages: resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/tsconfig-utils@8.39.0': - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + '@typescript-eslint/tsconfig-utils@8.39.1': + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -8853,8 +8859,8 @@ packages: resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@8.39.0': - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + '@typescript-eslint/types@8.39.1': + resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.18.1': @@ -8866,8 +8872,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.39.0': - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + '@typescript-eslint/typescript-estree@8.39.1': + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -8882,8 +8888,8 @@ packages: resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@8.39.0': - resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + '@typescript-eslint/visitor-keys@8.39.1': + resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -9143,14 +9149,14 @@ packages: '@vitest/utils@3.1.3': resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} - '@volar/language-core@2.4.22': - resolution: {integrity: sha512-gp4M7Di5KgNyIyO903wTClYBavRt6UyFNpc5LWfyZr1lBsTUY+QrVZfmbNF2aCyfklBOVk9YC4p+zkwoyT7ECg==} + '@volar/language-core@2.4.23': + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} - '@volar/source-map@2.4.22': - resolution: {integrity: sha512-L2nVr/1vei0xKRgO2tYVXtJYd09HTRjaZi418e85Q+QdbbqA8h7bBjfNyPPSsjnrOO4l4kaAo78c8SQUAdHvgA==} + '@volar/source-map@2.4.23': + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} - '@volar/typescript@2.4.22': - resolution: {integrity: sha512-6ZczlJW1/GWTrNnkmZxJp4qyBt/SGVlcTuCWpI5zLrdPdCZsj66Aff9ZsfFaT3TyjG8zVYgBMYPuCm/eRkpcpQ==} + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} '@vue-macros/common@1.16.1': resolution: {integrity: sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==} @@ -9161,19 +9167,19 @@ packages: vue: optional: true - '@vue/babel-helper-vue-transform-on@1.4.0': - resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==} + '@vue/babel-helper-vue-transform-on@1.5.0': + resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} - '@vue/babel-plugin-jsx@1.4.0': - resolution: {integrity: sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==} + '@vue/babel-plugin-jsx@1.5.0': + resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true - '@vue/babel-plugin-resolve-type@1.4.0': - resolution: {integrity: sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==} + '@vue/babel-plugin-resolve-type@1.5.0': + resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -9959,8 +9965,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.6.0: - resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==} + bare-events@2.6.1: + resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} @@ -10093,8 +10099,8 @@ packages: borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + bowser@2.12.0: + resolution: {integrity: sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==} brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -10135,8 +10141,8 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -10259,8 +10265,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001734: + resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==} capnp-ts@0.7.0: resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} @@ -10291,6 +10297,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -11185,8 +11194,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.198: - resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} + electron-to-chromium@1.5.200: + resolution: {integrity: sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -13051,8 +13060,8 @@ packages: resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} engines: {node: '>=18'} - launch-editor@2.11.0: - resolution: {integrity: sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ==} + launch-editor@2.11.1: + resolution: {integrity: sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==} lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} @@ -13631,8 +13640,8 @@ packages: nanotar@0.2.0: resolution: {integrity: sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==} - napi-postinstall@0.3.2: - resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} + napi-postinstall@0.3.3: + resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -15565,10 +15574,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} @@ -15895,8 +15900,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + thingies@2.5.0: + resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} engines: {node: '>=10.18'} peerDependencies: tslib: ^2 @@ -15965,8 +15970,8 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmp@0.2.4: - resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} to-buffer@1.2.1: @@ -17306,8 +17311,8 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@asamuzakjp/css-color@3.2.0': dependencies: @@ -17525,22 +17530,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-dynamodb@3.862.0': + '@aws-sdk/client-dynamodb@3.864.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-node': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-node': 3.864.0 '@aws-sdk/middleware-endpoint-discovery': 3.862.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/fetch-http-handler': 5.1.1 @@ -17573,21 +17578,21 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-lambda@3.862.0': + '@aws-sdk/client-lambda@3.865.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-node': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-node': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/eventstream-serde-browser': 4.0.5 @@ -17622,29 +17627,29 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-s3@3.862.0': + '@aws-sdk/client-s3@3.864.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-node': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-node': 3.864.0 '@aws-sdk/middleware-bucket-endpoint': 3.862.0 '@aws-sdk/middleware-expect-continue': 3.862.0 - '@aws-sdk/middleware-flexible-checksums': 3.862.0 + '@aws-sdk/middleware-flexible-checksums': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-location-constraint': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-sdk-s3': 3.862.0 + '@aws-sdk/middleware-sdk-s3': 3.864.0 '@aws-sdk/middleware-ssec': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 - '@aws-sdk/signature-v4-multi-region': 3.862.0 + '@aws-sdk/signature-v4-multi-region': 3.864.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@aws-sdk/xml-builder': 3.862.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 @@ -17685,22 +17690,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sqs@3.862.0': + '@aws-sdk/client-sqs@3.864.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-node': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-node': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 '@aws-sdk/middleware-sdk-sqs': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/fetch-http-handler': 5.1.1 @@ -17812,20 +17817,20 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.862.0': + '@aws-sdk/client-sso@3.864.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/fetch-http-handler': 5.1.1 @@ -17911,7 +17916,7 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/core@3.862.0': + '@aws-sdk/core@3.864.0': dependencies: '@aws-sdk/types': 3.862.0 '@aws-sdk/xml-builder': 3.862.0 @@ -17944,9 +17949,9 @@ snapshots: '@smithy/types': 4.3.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.862.0': + '@aws-sdk/credential-provider-env@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/types': 4.3.2 @@ -17965,9 +17970,9 @@ snapshots: '@smithy/util-stream': 4.2.4 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.862.0': + '@aws-sdk/credential-provider-http@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/fetch-http-handler': 5.1.1 '@smithy/node-http-handler': 4.1.1 @@ -18011,15 +18016,15 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-ini@3.862.0': + '@aws-sdk/credential-provider-ini@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-env': 3.862.0 - '@aws-sdk/credential-provider-http': 3.862.0 - '@aws-sdk/credential-provider-process': 3.862.0 - '@aws-sdk/credential-provider-sso': 3.862.0 - '@aws-sdk/credential-provider-web-identity': 3.862.0 - '@aws-sdk/nested-clients': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/credential-provider-env': 3.864.0 + '@aws-sdk/credential-provider-http': 3.864.0 + '@aws-sdk/credential-provider-process': 3.864.0 + '@aws-sdk/credential-provider-sso': 3.864.0 + '@aws-sdk/credential-provider-web-identity': 3.864.0 + '@aws-sdk/nested-clients': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/credential-provider-imds': 4.0.7 '@smithy/property-provider': 4.0.5 @@ -18062,14 +18067,14 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.862.0': + '@aws-sdk/credential-provider-node@3.864.0': dependencies: - '@aws-sdk/credential-provider-env': 3.862.0 - '@aws-sdk/credential-provider-http': 3.862.0 - '@aws-sdk/credential-provider-ini': 3.862.0 - '@aws-sdk/credential-provider-process': 3.862.0 - '@aws-sdk/credential-provider-sso': 3.862.0 - '@aws-sdk/credential-provider-web-identity': 3.862.0 + '@aws-sdk/credential-provider-env': 3.864.0 + '@aws-sdk/credential-provider-http': 3.864.0 + '@aws-sdk/credential-provider-ini': 3.864.0 + '@aws-sdk/credential-provider-process': 3.864.0 + '@aws-sdk/credential-provider-sso': 3.864.0 + '@aws-sdk/credential-provider-web-identity': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/credential-provider-imds': 4.0.7 '@smithy/property-provider': 4.0.5 @@ -18096,9 +18101,9 @@ snapshots: '@smithy/types': 4.3.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.862.0': + '@aws-sdk/credential-provider-process@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/shared-ini-file-loader': 4.0.5 @@ -18130,11 +18135,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-sso@3.862.0': + '@aws-sdk/credential-provider-sso@3.864.0': dependencies: - '@aws-sdk/client-sso': 3.862.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/token-providers': 3.862.0 + '@aws-sdk/client-sso': 3.864.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/token-providers': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/shared-ini-file-loader': 4.0.5 @@ -18161,10 +18166,10 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.862.0': + '@aws-sdk/credential-provider-web-identity@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/nested-clients': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/nested-clients': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/types': 4.3.2 @@ -18203,12 +18208,12 @@ snapshots: '@smithy/types': 4.3.2 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.862.0': + '@aws-sdk/middleware-flexible-checksums@3.864.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/is-array-buffer': 4.0.0 '@smithy/node-config-provider': 4.1.4 @@ -18285,9 +18290,9 @@ snapshots: '@smithy/types': 4.3.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.862.0': + '@aws-sdk/middleware-sdk-s3@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-arn-parser': 3.804.0 '@smithy/core': 3.8.0 @@ -18352,9 +18357,9 @@ snapshots: '@smithy/types': 4.3.2 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.862.0': + '@aws-sdk/middleware-user-agent@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@smithy/core': 3.8.0 @@ -18405,20 +18410,20 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/nested-clients@3.862.0': + '@aws-sdk/nested-clients@3.864.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 + '@aws-sdk/core': 3.864.0 '@aws-sdk/middleware-host-header': 3.862.0 '@aws-sdk/middleware-logger': 3.862.0 '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/region-config-resolver': 3.862.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.862.0 '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 + '@aws-sdk/util-user-agent-node': 3.864.0 '@smithy/config-resolver': 4.1.5 '@smithy/core': 3.8.0 '@smithy/fetch-http-handler': 5.1.1 @@ -18466,9 +18471,9 @@ snapshots: '@smithy/util-middleware': 4.0.5 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.862.0': + '@aws-sdk/signature-v4-multi-region@3.864.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.862.0 + '@aws-sdk/middleware-sdk-s3': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/protocol-http': 5.1.3 '@smithy/signature-v4': 5.1.3 @@ -18526,10 +18531,10 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/token-providers@3.862.0': + '@aws-sdk/token-providers@3.864.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/nested-clients': 3.862.0 + '@aws-sdk/core': 3.864.0 + '@aws-sdk/nested-clients': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/property-provider': 4.0.5 '@smithy/shared-ini-file-loader': 4.0.5 @@ -18585,21 +18590,21 @@ snapshots: dependencies: '@aws-sdk/types': 3.398.0 '@smithy/types': 2.12.0 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 '@aws-sdk/util-user-agent-browser@3.734.0': dependencies: '@aws-sdk/types': 3.734.0 '@smithy/types': 4.3.2 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 '@aws-sdk/util-user-agent-browser@3.862.0': dependencies: '@aws-sdk/types': 3.862.0 '@smithy/types': 4.3.2 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 '@aws-sdk/util-user-agent-node@3.398.0': @@ -18617,9 +18622,9 @@ snapshots: '@smithy/types': 4.3.2 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.862.0': + '@aws-sdk/util-user-agent-node@3.864.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.862.0 + '@aws-sdk/middleware-user-agent': 3.864.0 '@aws-sdk/types': 3.862.0 '@smithy/node-config-provider': 4.1.4 '@smithy/types': 4.3.2 @@ -18670,8 +18675,8 @@ snapshots: dependencies: '@babel/parser': 7.28.0 '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': @@ -18682,7 +18687,7 @@ snapshots: dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.25.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -20767,11 +20772,11 @@ snapshots: optionalDependencies: '@types/node': 22.13.9 - '@inquirer/editor@4.2.15(@types/node@22.13.9)': + '@inquirer/editor@4.2.16(@types/node@22.13.9)': dependencies: '@inquirer/core': 10.1.15(@types/node@22.13.9) + '@inquirer/external-editor': 1.0.0(@types/node@22.13.9) '@inquirer/type': 3.0.8(@types/node@22.13.9) - external-editor: 3.1.0 optionalDependencies: '@types/node': 22.13.9 @@ -20783,6 +20788,12 @@ snapshots: optionalDependencies: '@types/node': 22.13.9 + '@inquirer/external-editor@1.0.0(@types/node@22.13.9)': + dependencies: + '@types/node': 22.13.9 + chardet: 2.1.0 + iconv-lite: 0.6.3 + '@inquirer/figures@1.0.13': {} '@inquirer/input@4.2.1(@types/node@22.13.9)': @@ -20807,11 +20818,11 @@ snapshots: optionalDependencies: '@types/node': 22.13.9 - '@inquirer/prompts@7.8.0(@types/node@22.13.9)': + '@inquirer/prompts@7.8.1(@types/node@22.13.9)': dependencies: '@inquirer/checkbox': 4.2.0(@types/node@22.13.9) '@inquirer/confirm': 5.1.14(@types/node@22.13.9) - '@inquirer/editor': 4.2.15(@types/node@22.13.9) + '@inquirer/editor': 4.2.16(@types/node@22.13.9) '@inquirer/expand': 4.0.17(@types/node@22.13.9) '@inquirer/input': 4.2.1(@types/node@22.13.9) '@inquirer/number': 3.0.17(@types/node@22.13.9) @@ -20876,29 +20887,29 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/source-map@0.3.10': + '@jridgewell/source-map@0.3.11': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 - '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: @@ -20912,13 +20923,15 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/json-pack@1.8.0(tslib@2.8.1)': + '@jsonjoy.com/json-pack@1.10.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/buffers': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) '@jsonjoy.com/json-pointer': 1.0.1(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 '@jsonjoy.com/json-pointer@1.0.1(tslib@2.8.1)': @@ -21069,7 +21082,7 @@ snapshots: '@metamask/onboarding@1.0.1': dependencies: - bowser: 2.11.0 + bowser: 2.12.0 '@metamask/providers@16.1.0': dependencies: @@ -21126,7 +21139,7 @@ snapshots: '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metamask/sdk-install-modal-web': 0.32.0 '@paulmillr/qr': 0.2.1 - bowser: 2.11.0 + bowser: 2.12.0 cross-fetch: 4.1.0 debug: 4.4.1 eciesjs: 0.4.15 @@ -21444,7 +21457,7 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@nuxt/cli@3.27.0(magicast@0.3.5)': + '@nuxt/cli@3.28.0(magicast@0.3.5)': dependencies: c12: 3.2.0(magicast@0.3.5) citty: 0.1.6 @@ -21522,7 +21535,7 @@ snapshots: hookable: 5.5.3 image-meta: 0.2.1 is-installed-globally: 1.0.0 - launch-editor: 2.11.0 + launch-editor: 2.11.1 local-pkg: 1.1.1 magicast: 0.3.5 nypm: 0.6.1 @@ -21564,7 +21577,7 @@ snapshots: hookable: 5.5.3 image-meta: 0.2.1 is-installed-globally: 1.0.0 - launch-editor: 2.11.0 + launch-editor: 2.11.1 local-pkg: 1.1.1 magicast: 0.3.5 nypm: 0.6.1 @@ -21952,10 +21965,10 @@ snapshots: dependencies: '@ast-grep/napi': 0.35.0 '@aws-sdk/client-cloudfront': 3.398.0 - '@aws-sdk/client-dynamodb': 3.862.0 - '@aws-sdk/client-lambda': 3.862.0 - '@aws-sdk/client-s3': 3.862.0 - '@aws-sdk/client-sqs': 3.862.0 + '@aws-sdk/client-dynamodb': 3.864.0 + '@aws-sdk/client-lambda': 3.865.0 + '@aws-sdk/client-s3': 3.864.0 + '@aws-sdk/client-sqs': 3.864.0 '@node-minify/core': 8.0.6 '@node-minify/terser': 8.0.6 '@tsconfig/node18': 1.0.3 @@ -22412,7 +22425,7 @@ snapshots: '@parcel/utils': 2.13.3 '@parcel/workers': 2.13.3(@parcel/core@2.13.3(@swc/helpers@0.5.17)) base-x: 3.0.11 - browserslist: 4.25.1 + browserslist: 4.25.2 clone: 2.1.2 dotenv: 16.4.7 dotenv-expand: 11.0.7 @@ -22482,7 +22495,7 @@ snapshots: '@parcel/plugin': 2.13.3(@parcel/core@2.13.3(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.13.3 - browserslist: 4.25.1 + browserslist: 4.25.2 lightningcss: 1.30.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -22698,7 +22711,7 @@ snapshots: '@parcel/plugin': 2.13.3(@parcel/core@2.13.3(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.13.3 - browserslist: 4.25.1 + browserslist: 4.25.2 json5: 2.2.3 nullthrows: 1.1.1 semver: 7.7.2 @@ -22711,7 +22724,7 @@ snapshots: '@parcel/plugin': 2.13.3(@parcel/core@2.13.3(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.13.3 - browserslist: 4.25.1 + browserslist: 4.25.2 lightningcss: 1.30.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -22749,7 +22762,7 @@ snapshots: '@parcel/utils': 2.13.3 '@parcel/workers': 2.13.3(@parcel/core@2.13.3(@swc/helpers@0.5.17)) '@swc/helpers': 0.5.17 - browserslist: 4.25.1 + browserslist: 4.25.2 nullthrows: 1.1.1 regenerator-runtime: 0.14.1 semver: 7.7.2 @@ -24813,7 +24826,7 @@ snapshots: - utf-8-validate - zod - '@rolldown/pluginutils@1.0.0-beta.31': {} + '@rolldown/pluginutils@1.0.0-beta.32': {} '@rollup/plugin-alias@5.1.1(rollup@4.46.2)': optionalDependencies: @@ -25021,7 +25034,7 @@ snapshots: dependencies: '@sats-connect/core': 0.6.5(typescript@5.8.3) '@sats-connect/ui': 0.0.6 - bowser: 2.11.0 + bowser: 2.12.0 typescript: 5.8.3 '@sats-connect/ui@0.0.6': {} @@ -25776,7 +25789,7 @@ snapshots: '@smithy/property-provider': 2.2.0 '@smithy/smithy-client': 2.5.1 '@smithy/types': 2.12.0 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 '@smithy/util-defaults-mode-browser@4.0.26': @@ -25784,7 +25797,7 @@ snapshots: '@smithy/property-provider': 4.0.5 '@smithy/smithy-client': 4.4.10 '@smithy/types': 4.3.2 - bowser: 2.11.0 + bowser: 2.12.0 tslib: 2.8.1 '@smithy/util-defaults-mode-node@2.3.1': @@ -26810,7 +26823,7 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@18.19.121': + '@types/node@18.19.122': dependencies: undici-types: 5.26.5 @@ -26976,10 +26989,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.39.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.39.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.8.3) - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.8.3) + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: @@ -26990,7 +27003,7 @@ snapshots: '@typescript-eslint/types': 6.18.1 '@typescript-eslint/visitor-keys': 6.18.1 - '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -27008,7 +27021,7 @@ snapshots: '@typescript-eslint/types@6.18.1': {} - '@typescript-eslint/types@8.39.0': {} + '@typescript-eslint/types@8.39.1': {} '@typescript-eslint/typescript-estree@6.18.1(typescript@5.8.3)': dependencies: @@ -27025,12 +27038,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.39.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.39.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.8.3) - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/project-service': 8.39.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.8.3) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -27060,9 +27073,9 @@ snapshots: '@typescript-eslint/types': 6.18.1 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.39.0': + '@typescript-eslint/visitor-keys@8.39.1': dependencies: - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -27140,14 +27153,14 @@ snapshots: '@vanilla-extract/css-utils@0.1.4': {} - '@vanilla-extract/css@1.16.0(babel-plugin-macros@3.1.0)': + '@vanilla-extract/css@1.16.0': dependencies: '@emotion/hash': 0.9.2 '@vanilla-extract/private': 1.0.9 css-what: 6.2.2 cssesc: 3.0.0 csstype: 3.1.3 - dedent: 1.6.0(babel-plugin-macros@3.1.0) + dedent: 1.6.0 deep-object-diff: 1.1.9 deepmerge: 4.3.1 lru-cache: 10.4.3 @@ -27157,14 +27170,14 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/css@1.17.4(babel-plugin-macros@3.1.0)': + '@vanilla-extract/css@1.17.4': dependencies: '@emotion/hash': 0.9.2 '@vanilla-extract/private': 1.0.9 css-what: 6.2.2 cssesc: 3.0.0 csstype: 3.1.3 - dedent: 1.6.0(babel-plugin-macros@3.1.0) + dedent: 1.6.0 deep-object-diff: 1.1.9 deepmerge: 4.3.1 lru-cache: 10.4.3 @@ -27174,13 +27187,13 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@7.1.12(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(lightningcss@1.30.1)(terser@5.43.1)': + '@vanilla-extract/integration@7.1.12(@types/node@22.13.4)(lightningcss@1.30.1)(terser@5.43.1)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) '@vanilla-extract/babel-plugin-debug-ids': 1.2.2 - '@vanilla-extract/css': 1.17.4(babel-plugin-macros@3.1.0) - dedent: 1.6.0(babel-plugin-macros@3.1.0) + '@vanilla-extract/css': 1.17.4 + dedent: 1.6.0 esbuild: 0.25.8 eval: 0.1.8 find-up: 5.0.0 @@ -27202,13 +27215,13 @@ snapshots: '@vanilla-extract/private@1.0.9': {} - '@vanilla-extract/sprinkles@1.6.3(@vanilla-extract/css@1.16.0(babel-plugin-macros@3.1.0))': + '@vanilla-extract/sprinkles@1.6.3(@vanilla-extract/css@1.16.0)': dependencies: - '@vanilla-extract/css': 1.16.0(babel-plugin-macros@3.1.0) + '@vanilla-extract/css': 1.16.0 - '@vanilla-extract/webpack-plugin@2.3.14(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(lightningcss@1.30.1)(terser@5.43.1)(webpack@5.94.0(webpack-cli@5.1.4))': + '@vanilla-extract/webpack-plugin@2.3.14(@types/node@22.13.4)(lightningcss@1.30.1)(terser@5.43.1)(webpack@5.94.0(webpack-cli@5.1.4))': dependencies: - '@vanilla-extract/integration': 7.1.12(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(lightningcss@1.30.1)(terser@5.43.1) + '@vanilla-extract/integration': 7.1.12(@types/node@22.13.4)(lightningcss@1.30.1)(terser@5.43.1) debug: 4.4.1 loader-utils: 2.0.4 picocolors: 1.1.1 @@ -27270,8 +27283,8 @@ snapshots: dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0) - '@rolldown/pluginutils': 1.0.0-beta.31 - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0) + '@rolldown/pluginutils': 1.0.0-beta.32 + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.0) vite: 6.3.5(@types/node@22.13.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) vue: 3.5.13(typescript@5.8.3) transitivePeerDependencies: @@ -27464,15 +27477,15 @@ snapshots: loupe: 3.2.0 tinyrainbow: 2.0.0 - '@volar/language-core@2.4.22': + '@volar/language-core@2.4.23': dependencies: - '@volar/source-map': 2.4.22 + '@volar/source-map': 2.4.23 - '@volar/source-map@2.4.22': {} + '@volar/source-map@2.4.23': {} - '@volar/typescript@2.4.22': + '@volar/typescript@2.4.23': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 path-browserify: 1.0.1 vscode-uri: 3.1.0 @@ -27487,9 +27500,9 @@ snapshots: optionalDependencies: vue: 3.5.13(typescript@5.8.3) - '@vue/babel-helper-vue-transform-on@1.4.0': {} + '@vue/babel-helper-vue-transform-on@1.5.0': {} - '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.28.0)': + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.0)': dependencies: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 @@ -27497,15 +27510,15 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 '@babel/types': 7.28.2 - '@vue/babel-helper-vue-transform-on': 1.4.0 - '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.0) + '@vue/babel-helper-vue-transform-on': 1.5.0 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.0) '@vue/shared': 3.5.18 optionalDependencies: '@babel/core': 7.28.0 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.28.0)': + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.0)': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.0 @@ -27662,7 +27675,7 @@ snapshots: '@vue/language-core@2.1.8(typescript@5.8.3)': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.18 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.18 @@ -27675,7 +27688,7 @@ snapshots: '@vue/language-core@2.2.8(typescript@5.8.3)': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.18 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.18 @@ -29849,8 +29862,8 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.3): dependencies: - browserslist: 4.25.1 - caniuse-lite: 1.0.30001731 + browserslist: 4.25.2 + caniuse-lite: 1.0.30001734 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -29926,7 +29939,7 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.6.0: + bare-events@2.6.1: optional: true base-x@3.0.11: @@ -30101,7 +30114,7 @@ snapshots: bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - bowser@2.11.0: {} + bowser@2.12.0: {} brace-expansion@1.1.12: dependencies: @@ -30169,12 +30182,12 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.25.1: + browserslist@4.25.2: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.198 + caniuse-lite: 1.0.30001734 + electron-to-chromium: 1.5.200 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + update-browserslist-db: 1.1.3(browserslist@4.25.2) bs58@4.0.1: dependencies: @@ -30305,12 +30318,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.25.1 - caniuse-lite: 1.0.30001731 + browserslist: 4.25.2 + caniuse-lite: 1.0.30001734 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001734: {} capnp-ts@0.7.0: dependencies: @@ -30351,6 +30364,8 @@ snapshots: chardet@0.7.0: {} + chardet@2.1.0: {} + check-error@2.1.1: {} chokidar@3.6.0: @@ -30436,7 +30451,7 @@ snapshots: cloudflare@4.5.0: dependencies: - '@types/node': 18.19.121 + '@types/node': 18.19.122 '@types/node-fetch': 2.6.13 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -30629,7 +30644,7 @@ snapshots: core-js-compat@3.45.0: dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 core-js@3.45.0: {} @@ -30793,7 +30808,7 @@ snapshots: cssnano-preset-default@7.0.8(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 css-declaration-sorter: 7.2.0(postcss@8.5.3) cssnano-utils: 5.0.1(postcss@8.5.3) postcss: 8.5.3 @@ -30827,7 +30842,7 @@ snapshots: cssnano-preset-default@7.0.8(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 css-declaration-sorter: 7.2.0(postcss@8.5.6) cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 @@ -31011,9 +31026,7 @@ snapshots: decode-uri-component@0.2.2: {} - dedent@1.6.0(babel-plugin-macros@3.1.0): - optionalDependencies: - babel-plugin-macros: 3.1.0 + dedent@1.6.0: {} deep-eql@5.0.2: {} @@ -31143,7 +31156,7 @@ snapshots: detective-typescript@14.0.0(typescript@5.8.3): dependencies: - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.8.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 typescript: 5.8.3 @@ -31324,7 +31337,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.198: {} + electron-to-chromium@1.5.200: {} elliptic@6.6.1: dependencies: @@ -31585,8 +31598,8 @@ snapshots: '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.8.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.56.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.56.0) eslint-plugin-react: 7.37.5(eslint@8.56.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.56.0) @@ -31605,8 +31618,8 @@ snapshots: '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.8.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.56.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.56.0) eslint-plugin-react: 7.37.5(eslint@8.56.0) eslint-plugin-react-hooks: 5.2.0(eslint@8.56.0) @@ -31629,7 +31642,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.56.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 @@ -31640,7 +31653,7 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color @@ -31651,11 +31664,11 @@ snapshots: '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.8.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.56.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.56.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -31756,7 +31769,7 @@ snapshots: eslint-plugin-svelte@2.36.0(eslint@8.56.0)(svelte@5.22.5)(ts-node@10.9.2(@types/node@22.13.9)(typescript@5.8.3)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.56.0) - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 debug: 4.4.1 eslint: 8.56.0 eslint-compat-utils: 0.5.1(eslint@8.56.0) @@ -31867,7 +31880,7 @@ snapshots: esrap@1.4.9: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 esrecurse@4.3.0: dependencies: @@ -32960,7 +32973,7 @@ snapshots: inquirer@12.4.2(@types/node@22.13.9): dependencies: '@inquirer/core': 10.1.15(@types/node@22.13.9) - '@inquirer/prompts': 7.8.0(@types/node@22.13.9) + '@inquirer/prompts': 7.8.1(@types/node@22.13.9) '@inquirer/type': 3.0.8(@types/node@22.13.9) ansi-escapes: 4.3.2 mute-stream: 2.0.0 @@ -33262,7 +33275,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -33573,7 +33586,7 @@ snapshots: dependencies: package-json: 10.0.1 - launch-editor@2.11.0: + launch-editor@2.11.1: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 @@ -33840,11 +33853,11 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 magic-string@0.30.8: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: @@ -33886,7 +33899,7 @@ snapshots: memfs@4.36.0: dependencies: - '@jsonjoy.com/json-pack': 1.8.0(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.10.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) tree-dump: 1.0.3(tslib@2.8.1) tslib: 2.8.1 @@ -34130,7 +34143,7 @@ snapshots: nanotar@0.2.0: {} - napi-postinstall@0.3.2: {} + napi-postinstall@0.3.3: {} natural-compare@1.4.0: {} @@ -34181,7 +34194,7 @@ snapshots: '@next/env': 14.2.30 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001731 + caniuse-lite: 1.0.30001734 graceful-fs: 4.2.11 postcss: 8.4.31 react: 19.1.0 @@ -34209,7 +34222,7 @@ snapshots: '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001731 + caniuse-lite: 1.0.30001734 postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -34453,7 +34466,7 @@ snapshots: nuxt@3.16.0(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.13.9)(aws4fetch@1.0.20)(bufferutil@4.0.9)(db0@0.3.2)(eslint@8.56.0)(idb-keyval@6.2.2)(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(terser@5.43.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@22.13.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1): dependencies: - '@nuxt/cli': 3.27.0(magicast@0.3.5) + '@nuxt/cli': 3.28.0(magicast@0.3.5) '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 2.6.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@22.13.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.13(typescript@5.8.3)) '@nuxt/kit': 3.16.0(magicast@0.3.5) @@ -34574,7 +34587,7 @@ snapshots: nuxt@3.16.0(@netlify/blobs@9.1.2)(@types/node@22.13.9)(aws4fetch@1.0.20)(bufferutil@4.0.9)(db0@0.3.2)(eslint@8.56.0)(ioredis@5.7.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(vite@5.4.19(@types/node@22.13.9)(lightningcss@1.30.1)(terser@5.43.1))(vue-tsc@2.1.8(typescript@5.8.3)): dependencies: - '@nuxt/cli': 3.27.0(magicast@0.3.5) + '@nuxt/cli': 3.28.0(magicast@0.3.5) '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 2.6.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(vite@5.4.19(@types/node@22.13.9)(lightningcss@1.30.1)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3)) '@nuxt/kit': 3.16.0(magicast@0.3.5) @@ -34695,7 +34708,7 @@ snapshots: nuxt@3.16.0(@netlify/blobs@9.1.2)(@types/node@22.13.9)(aws4fetch@1.0.20)(bufferutil@4.0.9)(db0@0.3.2)(eslint@8.56.0)(ioredis@5.7.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(vite@5.4.19(@types/node@22.13.9)(lightningcss@1.30.1)(terser@5.43.1))(vue-tsc@2.2.8(typescript@5.8.3)): dependencies: - '@nuxt/cli': 3.27.0(magicast@0.3.5) + '@nuxt/cli': 3.28.0(magicast@0.3.5) '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 2.6.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(vite@5.4.19(@types/node@22.13.9)(lightningcss@1.30.1)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3)) '@nuxt/kit': 3.16.0(magicast@0.3.5) @@ -34980,7 +34993,7 @@ snapshots: dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.9.2 - '@noble/hashes': 1.8.0 + '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 abitype: 1.0.8(typescript@5.8.3)(zod@3.25.76) @@ -35420,7 +35433,7 @@ snapshots: postcss-colormin@7.0.4(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.3 @@ -35428,7 +35441,7 @@ snapshots: postcss-colormin@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -35437,13 +35450,13 @@ snapshots: postcss-convert-values@7.0.6(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 postcss: 8.5.3 postcss-value-parser: 4.2.0 postcss-convert-values@7.0.6(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 postcss: 8.5.6 postcss-value-parser: 4.2.0 optional: true @@ -35537,7 +35550,7 @@ snapshots: postcss-merge-rules@7.0.6(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 caniuse-api: 3.0.0 cssnano-utils: 5.0.1(postcss@8.5.3) postcss: 8.5.3 @@ -35545,7 +35558,7 @@ snapshots: postcss-merge-rules@7.0.6(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 caniuse-api: 3.0.0 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 @@ -35580,14 +35593,14 @@ snapshots: postcss-minify-params@7.0.4(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 cssnano-utils: 5.0.1(postcss@8.5.3) postcss: 8.5.3 postcss-value-parser: 4.2.0 postcss-minify-params@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -35698,13 +35711,13 @@ snapshots: postcss-normalize-unicode@7.0.4(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 postcss: 8.5.3 postcss-value-parser: 4.2.0 postcss-normalize-unicode@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 postcss: 8.5.6 postcss-value-parser: 4.2.0 optional: true @@ -35746,13 +35759,13 @@ snapshots: postcss-reduce-initial@7.0.4(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 caniuse-api: 3.0.0 postcss: 8.5.3 postcss-reduce-initial@7.0.4(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 caniuse-api: 3.0.0 postcss: 8.5.6 optional: true @@ -36602,7 +36615,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.1 + debug: 4.3.6 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -36612,7 +36625,7 @@ snapshots: ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.2 + statuses: 2.0.1 transitivePeerDependencies: - supports-color @@ -36949,8 +36962,6 @@ snapshots: statuses@2.0.1: {} - statuses@2.0.2: {} - std-env@3.9.0: {} stop-iteration-iterator@1.1.0: @@ -36997,7 +37008,7 @@ snapshots: fast-fifo: 1.3.2 text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.6.0 + bare-events: 2.6.1 strict-uri-encode@2.0.0: {} @@ -37111,13 +37122,13 @@ snapshots: stylehacks@7.0.6(postcss@8.5.3): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 postcss: 8.5.3 postcss-selector-parser: 7.1.0 stylehacks@7.0.6(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 postcss: 8.5.6 postcss-selector-parser: 7.1.0 optional: true @@ -37126,7 +37137,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -37165,7 +37176,7 @@ snapshots: svelte-check@4.1.5(picomatch@4.0.3)(svelte@5.22.5)(typescript@5.8.3): dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 chokidar: 4.0.3 fdir: 6.4.6(picomatch@4.0.3) picocolors: 1.1.1 @@ -37192,7 +37203,7 @@ snapshots: svelte@5.22.5: dependencies: '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) '@types/estree': 1.0.8 acorn: 8.15.0 @@ -37321,7 +37332,7 @@ snapshots: terser-webpack-plugin@5.3.14(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 @@ -37330,7 +37341,7 @@ snapshots: terser-webpack-plugin@5.3.14(webpack@5.94.0): dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 @@ -37339,14 +37350,14 @@ snapshots: terser@5.16.9: dependencies: - '@jridgewell/source-map': 0.3.10 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 terser@5.43.1: dependencies: - '@jridgewell/source-map': 0.3.10 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -37375,7 +37386,7 @@ snapshots: dependencies: any-promise: 1.3.0 - thingies@1.21.0(tslib@2.8.1): + thingies@2.5.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -37438,13 +37449,13 @@ snapshots: tmp-promise@3.0.3: dependencies: - tmp: 0.2.4 + tmp: 0.2.5 tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - tmp@0.2.4: {} + tmp@0.2.5: {} to-buffer@1.2.1: dependencies: @@ -37868,7 +37879,7 @@ snapshots: unrs-resolver@1.11.1: dependencies: - napi-postinstall: 0.3.2 + napi-postinstall: 0.3.3 optionalDependencies: '@unrs/resolver-binding-android-arm-eabi': 1.11.1 '@unrs/resolver-binding-android-arm64': 1.11.1 @@ -37930,9 +37941,9 @@ snapshots: pkg-types: 1.3.1 unplugin: 1.16.1 - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.25.2): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -38619,14 +38630,14 @@ snapshots: vue-tsc@2.1.8(typescript@5.8.3): dependencies: - '@volar/typescript': 2.4.22 + '@volar/typescript': 2.4.23 '@vue/language-core': 2.1.8(typescript@5.8.3) semver: 7.7.2 typescript: 5.8.3 vue-tsc@2.2.8(typescript@5.8.3): dependencies: - '@volar/typescript': 2.4.22 + '@volar/typescript': 2.4.23 '@vue/language-core': 2.2.8(typescript@5.8.3) typescript: 5.8.3 @@ -38905,7 +38916,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.23) ipaddr.js: 2.2.0 - launch-editor: 2.11.0 + launch-editor: 2.11.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.2 @@ -38944,7 +38955,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.25.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -38974,7 +38985,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.25.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 From 4ed9964ee64a7ae945d7650a2cd6e54d299a955f Mon Sep 17 00:00:00 2001 From: tomiir Date: Wed, 13 Aug 2025 11:01:18 +0200 Subject: [PATCH 02/10] chore: subscribe to missing state fields --- .../controllers/src/controllers/ExchangeController.ts | 6 +++++- .../src/views/w3m-deposit-from-exchange-view/index.ts | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/controllers/src/controllers/ExchangeController.ts b/packages/controllers/src/controllers/ExchangeController.ts index 0b97f8a875..863a0e240f 100644 --- a/packages/controllers/src/controllers/ExchangeController.ts +++ b/packages/controllers/src/controllers/ExchangeController.ts @@ -203,6 +203,8 @@ export const ExchangeController = { state.isPaymentInProgress = true state.paymentId = crypto.randomUUID() + console.log('>> handlePayWithExchange', exchangeId) + state.currentPayment = { type: 'exchange', exchangeId @@ -224,6 +226,7 @@ export const ExchangeController = { state.currentPayment.status = 'IN_PROGRESS' state.currentPayment.exchangeId = exchangeId + console.log('>> handlePayWithExchange opening url', payUrl) CoreHelperUtil.openHref(payUrl.url, '_blank') } catch (error) { state.error = 'Unable to initiate payment' @@ -236,8 +239,9 @@ export const ExchangeController = { sessionId: string, paymentId: string ): Promise { + console.log('>> Getting status', exchangeId, sessionId, paymentId) const status = await this.getBuyStatus(exchangeId, sessionId, paymentId) - + console.log('>> waitUntilComplete status', status) if (status.status === 'SUCCESS' || status.status === 'FAILED') { return status } diff --git a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts index 3756e7a878..5672f07699 100644 --- a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts @@ -49,11 +49,11 @@ export class W3mDepositFromExchangeView extends LitElement { this.amount = exchangeState.amount this.tokenAmount = exchangeState.tokenAmount this.priceLoading = exchangeState.priceLoading - }), - ExchangeController.subscribeKey('isPaymentInProgress', isPaymentInProgress => { - this.isPaymentInProgress = isPaymentInProgress + this.paymentId = exchangeState.paymentId + this.isPaymentInProgress = exchangeState.isPaymentInProgress + this.currentPayment = exchangeState.currentPayment if ( - isPaymentInProgress && + exchangeState.isPaymentInProgress && this.currentPayment?.exchangeId && this.currentPayment?.sessionId && this.paymentId From 0153c07b577452814b3a0ea61c1027f82c308ac2 Mon Sep 17 00:00:00 2001 From: tomiir Date: Wed, 13 Aug 2025 17:24:24 +0200 Subject: [PATCH 03/10] chore: amend after deposit flow --- .../src/controllers/ExchangeController.ts | 58 +++++++++++++++---- .../w3m-deposit-from-exchange-view/index.ts | 45 +++++++++----- 2 files changed, 77 insertions(+), 26 deletions(-) diff --git a/packages/controllers/src/controllers/ExchangeController.ts b/packages/controllers/src/controllers/ExchangeController.ts index 863a0e240f..d3fe72be17 100644 --- a/packages/controllers/src/controllers/ExchangeController.ts +++ b/packages/controllers/src/controllers/ExchangeController.ts @@ -203,8 +203,6 @@ export const ExchangeController = { state.isPaymentInProgress = true state.paymentId = crypto.randomUUID() - console.log('>> handlePayWithExchange', exchangeId) - state.currentPayment = { type: 'exchange', exchangeId @@ -226,7 +224,6 @@ export const ExchangeController = { state.currentPayment.status = 'IN_PROGRESS' state.currentPayment.exchangeId = exchangeId - console.log('>> handlePayWithExchange opening url', payUrl) CoreHelperUtil.openHref(payUrl.url, '_blank') } catch (error) { state.error = 'Unable to initiate payment' @@ -234,24 +231,37 @@ export const ExchangeController = { } }, - async waitUntilComplete( - exchangeId: string, - sessionId: string, + async waitUntilComplete({ + exchangeId, + sessionId, + paymentId, + retries = 20 + }: { + exchangeId: string + sessionId: string paymentId: string - ): Promise { - console.log('>> Getting status', exchangeId, sessionId, paymentId) + retries?: number + }): Promise { const status = await this.getBuyStatus(exchangeId, sessionId, paymentId) - console.log('>> waitUntilComplete status', status) if (status.status === 'SUCCESS' || status.status === 'FAILED') { return status } + if (retries === 0) { + throw new Error('Unable to get deposit status') + } + // Wait 1 second before checking again await new Promise(resolve => { - setTimeout(resolve, 1000) + setTimeout(resolve, 5000) }) - return this.waitUntilComplete(exchangeId, sessionId, paymentId) + return this.waitUntilComplete({ + exchangeId, + sessionId, + paymentId, + retries: retries - 1 + }) }, async getBuyStatus(exchangeId: string, sessionId: string, paymentId: string) { @@ -289,7 +299,31 @@ export const ExchangeController = { return status } catch (error) { - throw new Error('Unable to get buy status') + return { + status: 'UNKNOWN', + txHash: '' + } as GetBuyStatusResult } + }, + reset() { + state.currentPayment = undefined + state.isPaymentInProgress = false + state.paymentId = '' + state.paymentAsset = { + network: 'eip155:1', + asset: 'native', + metadata: { + name: 'Ethereum', + symbol: 'ETH', + decimals: 0 + } + } + state.amount = 0 + state.tokenAmount = 0 + state.tokenPrice = null + state.priceLoading = false + state.error = null + state.exchanges = [] + state.isLoading = false } } diff --git a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts index 5672f07699..98ef57572e 100644 --- a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts @@ -7,6 +7,7 @@ import { type CurrentPayment, type Exchange, ExchangeController, + RouterController, SnackController } from '@reown/appkit-controllers' import { customElement } from '@reown/appkit-ui' @@ -52,20 +53,8 @@ export class W3mDepositFromExchangeView extends LitElement { this.paymentId = exchangeState.paymentId this.isPaymentInProgress = exchangeState.isPaymentInProgress this.currentPayment = exchangeState.currentPayment - if ( - exchangeState.isPaymentInProgress && - this.currentPayment?.exchangeId && - this.currentPayment?.sessionId && - this.paymentId - ) { - SnackController.showLoading('Deposit in progress...') - ExchangeController.waitUntilComplete( - this.currentPayment.exchangeId, - this.currentPayment.sessionId, - this.paymentId - ).then(() => { - SnackController.showSuccess('Deposit successful') - }) + if (exchangeState.isPaymentInProgress) { + this.handlePaymentInProgress() } }) ) @@ -168,6 +157,34 @@ export class W3mDepositFromExchangeView extends LitElement { } } + private async handlePaymentInProgress() { + try { + if ( + this.isPaymentInProgress && + this.currentPayment?.exchangeId && + this.currentPayment?.sessionId && + this.paymentId + ) { + SnackController.showLoading('Deposit in progress...') + RouterController.replace('Account') + const status = await ExchangeController.waitUntilComplete( + this.currentPayment.exchangeId, + this.currentPayment.sessionId, + this.paymentId + ) + if (status.status === 'SUCCESS') { + SnackController.showSuccess('Deposit completed') + } else if (status.status === 'FAILED') { + SnackController.showError('Deposit failed') + } + } + } catch (error) { + SnackController.showError('Error fetching deposit status') + } finally { + ExchangeController.reset() + } + } + private onPresetAmountClick(amount: number) { ExchangeController.setAmount(amount) } From 1a4c0ea8ac164269467d08ef3dbf8757df86714d Mon Sep 17 00:00:00 2001 From: tomiir Date: Wed, 13 Aug 2025 17:27:07 +0200 Subject: [PATCH 04/10] chore: fix usage of waituntilcomplete --- .../src/views/w3m-deposit-from-exchange-view/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts index 98ef57572e..7d207523f6 100644 --- a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts @@ -167,11 +167,11 @@ export class W3mDepositFromExchangeView extends LitElement { ) { SnackController.showLoading('Deposit in progress...') RouterController.replace('Account') - const status = await ExchangeController.waitUntilComplete( - this.currentPayment.exchangeId, - this.currentPayment.sessionId, - this.paymentId - ) + const status = await ExchangeController.waitUntilComplete({ + exchangeId: this.currentPayment.exchangeId, + sessionId: this.currentPayment.sessionId, + paymentId: this.paymentId + }) if (status.status === 'SUCCESS') { SnackController.showSuccess('Deposit completed') } else if (status.status === 'FAILED') { From 14f51e4623e62752ed3333007ac9bf88d51321ab Mon Sep 17 00:00:00 2001 From: tomiir Date: Thu, 14 Aug 2025 10:21:34 +0200 Subject: [PATCH 05/10] chore: add test --- .../controllers/ExchangeController.test.ts | 302 ++++++++++++++++++ 1 file changed, 302 insertions(+) diff --git a/packages/controllers/tests/controllers/ExchangeController.test.ts b/packages/controllers/tests/controllers/ExchangeController.test.ts index 27a84c5162..d7a3ca6a6a 100644 --- a/packages/controllers/tests/controllers/ExchangeController.test.ts +++ b/packages/controllers/tests/controllers/ExchangeController.test.ts @@ -8,6 +8,7 @@ import { SnackController } from '../../src/controllers/SnackController' import * as ChainControllerUtil from '../../src/utils/ChainControllerUtil' import { CoreHelperUtil } from '../../src/utils/CoreHelperUtil' import * as ExchangeUtil from '../../src/utils/ExchangeUtil' +import type { ExchangeBuyStatus } from '../../src/utils/ExchangeUtil' describe('ExchangeController', () => { beforeEach(() => { @@ -176,4 +177,305 @@ describe('ExchangeController', () => { expect(ExchangeController.state.error).toBe('Unable to initiate payment') }) }) + + describe('getBuyStatus', () => { + beforeEach(() => { + // Set up a current payment + ExchangeController.state.currentPayment = { + type: 'exchange', + exchangeId: 'ex1', + sessionId: 'sess-123', + status: 'IN_PROGRESS' + } + ExchangeController.state.paymentAsset = { + network: 'eip155:1', + asset: 'native', + metadata: { name: 'Ethereum', symbol: 'ETH', decimals: 18 } + } + ExchangeController.state.amount = 100 + AccountController.state.address = '0xabc123' + }) + + it('returns success status and updates state correctly', async () => { + const mockStatus = { + status: 'SUCCESS' as ExchangeBuyStatus, + txHash: '0xtxhash123' + } + vi.spyOn(ExchangeUtil, 'getBuyStatus').mockResolvedValue(mockStatus) + vi.spyOn(EventsController, 'sendEvent').mockImplementation(() => {}) + + const result = await ExchangeController.getBuyStatus('ex1', 'sess-123', 'payment-123') + + expect(ExchangeUtil.getBuyStatus).toHaveBeenCalledWith({ + sessionId: 'sess-123', + exchangeId: 'ex1' + }) + expect(ExchangeController.state.currentPayment?.status).toBe('SUCCESS') + expect(ExchangeController.state.currentPayment?.result).toBe('0xtxhash123') + expect(EventsController.sendEvent).toHaveBeenCalledWith({ + type: 'track', + event: 'PAY_SUCCESS', + properties: { + source: 'fund-from-exchange', + paymentId: 'payment-123', + configuration: { + network: 'eip155:1', + asset: 'native', + recipient: '0xabc123', + amount: 100 + }, + currentPayment: { + type: 'exchange', + exchangeId: 'ex1', + sessionId: 'sess-123', + result: '0xtxhash123' + } + } + }) + expect(result).toEqual(mockStatus) + }) + + it('returns failed status and sends error event', async () => { + const mockStatus = { + status: 'FAILED' as ExchangeBuyStatus, + txHash: '0xfailedtx' + } + vi.spyOn(ExchangeUtil, 'getBuyStatus').mockResolvedValue(mockStatus) + vi.spyOn(EventsController, 'sendEvent').mockImplementation(() => {}) + + const result = await ExchangeController.getBuyStatus('ex1', 'sess-123', 'payment-123') + + expect(ExchangeController.state.currentPayment?.status).toBe('FAILED') + expect(ExchangeController.state.currentPayment?.result).toBe('0xfailedtx') + expect(EventsController.sendEvent).toHaveBeenCalledWith({ + type: 'track', + event: 'PAY_ERROR', + properties: { + source: 'fund-from-exchange', + paymentId: 'payment-123', + configuration: { + network: 'eip155:1', + asset: 'native', + recipient: '0xabc123', + amount: 100 + }, + currentPayment: { + type: 'exchange', + exchangeId: 'ex1', + sessionId: 'sess-123', + result: '0xfailedtx' + } + } + }) + expect(result).toEqual(mockStatus) + }) + + it('returns in progress status without sending event', async () => { + const mockStatus = { + status: 'IN_PROGRESS' as ExchangeBuyStatus, + txHash: undefined + } + vi.spyOn(ExchangeUtil, 'getBuyStatus').mockResolvedValue(mockStatus) + vi.spyOn(EventsController, 'sendEvent').mockImplementation(() => {}) + + const result = await ExchangeController.getBuyStatus('ex1', 'sess-123', 'payment-123') + + expect(ExchangeController.state.currentPayment?.status).toBe('IN_PROGRESS') + expect(ExchangeController.state.currentPayment?.result).toBeUndefined() + expect(EventsController.sendEvent).not.toHaveBeenCalled() + expect(result).toEqual(mockStatus) + }) + + it('throws error when no current payment exists', async () => { + ExchangeController.state.currentPayment = undefined + + const result = await ExchangeController.getBuyStatus('ex1', 'sess-123', 'payment-123') + + expect(result).toEqual({ + status: 'UNKNOWN', + txHash: '' + }) + }) + + it('returns UNKNOWN status when getBuyStatus utility throws error', async () => { + vi.spyOn(ExchangeUtil, 'getBuyStatus').mockRejectedValue(new Error('Network error')) + + const result = await ExchangeController.getBuyStatus('ex1', 'sess-123', 'payment-123') + + expect(result).toEqual({ + status: 'UNKNOWN', + txHash: '' + }) + }) + }) + + describe('waitUntilComplete', () => { + beforeEach(() => { + vi.useFakeTimers() + // Set up a current payment + ExchangeController.state.currentPayment = { + type: 'exchange', + exchangeId: 'ex1', + sessionId: 'sess-123', + status: 'IN_PROGRESS' + } + }) + + afterEach(() => { + vi.useRealTimers() + }) + + it('returns immediately when getBuyStatus returns SUCCESS', async () => { + const mockStatus = { + status: 'SUCCESS' as ExchangeBuyStatus, + txHash: '0xtxhash123' + } + vi.spyOn(ExchangeController, 'getBuyStatus').mockResolvedValue(mockStatus) + + const result = await ExchangeController.waitUntilComplete({ + exchangeId: 'ex1', + sessionId: 'sess-123', + paymentId: 'payment-123' + }) + + expect(ExchangeController.getBuyStatus).toHaveBeenCalledWith('ex1', 'sess-123', 'payment-123') + expect(result).toEqual(mockStatus) + }) + + it('returns immediately when getBuyStatus returns FAILED', async () => { + const mockStatus = { + status: 'FAILED' as ExchangeBuyStatus, + txHash: '0xfailedtx' + } + vi.spyOn(ExchangeController, 'getBuyStatus').mockResolvedValue(mockStatus) + + const result = await ExchangeController.waitUntilComplete({ + exchangeId: 'ex1', + sessionId: 'sess-123', + paymentId: 'payment-123' + }) + + expect(result).toEqual(mockStatus) + }) + + it('retries when getBuyStatus returns IN_PROGRESS then SUCCESS', async () => { + const inProgressStatus = { + status: 'IN_PROGRESS' as ExchangeBuyStatus, + txHash: undefined + } + const successStatus = { + status: 'SUCCESS' as ExchangeBuyStatus, + txHash: '0xtxhash123' + } + + vi.spyOn(ExchangeController, 'getBuyStatus') + .mockResolvedValueOnce(inProgressStatus) + .mockResolvedValueOnce(successStatus) + + const resultPromise = ExchangeController.waitUntilComplete({ + exchangeId: 'ex1', + sessionId: 'sess-123', + paymentId: 'payment-123' + }) + + // Fast forward the timer to resolve the setTimeout + await vi.advanceTimersByTimeAsync(5000) + + const result = await resultPromise + + expect(ExchangeController.getBuyStatus).toHaveBeenCalledTimes(2) + expect(result).toEqual(successStatus) + }) + + it('throws error when retries are exhausted', async () => { + const inProgressStatus = { + status: 'IN_PROGRESS' as ExchangeBuyStatus, + txHash: undefined + } + + vi.spyOn(ExchangeController, 'getBuyStatus').mockResolvedValue(inProgressStatus) + vi.spyOn(global, 'setTimeout').mockImplementation(fn => { + fn() // run immediately + return 0 as any + }) + // Start the promise but don't await it yet + await expect( + ExchangeController.waitUntilComplete({ + exchangeId: 'ex1', + sessionId: 'sess-123', + paymentId: 'payment-123', + retries: 2 + }) + ).rejects.toThrow('Unable to get deposit status') + + expect(ExchangeController.getBuyStatus).toHaveBeenCalledTimes(3) + }) + + it('uses default retries value of 20', async () => { + const inProgressStatus = { + status: 'IN_PROGRESS' as ExchangeBuyStatus, + txHash: undefined + } + const successStatus = { + status: 'SUCCESS' as ExchangeBuyStatus, + txHash: '0xtxhash123' + } + + // Mock to return IN_PROGRESS for the first 19 calls, then SUCCESS + const getBuyStatusSpy = vi.spyOn(ExchangeController, 'getBuyStatus') + for (let i = 0; i < 19; i++) { + getBuyStatusSpy.mockResolvedValueOnce(inProgressStatus) + } + getBuyStatusSpy.mockResolvedValueOnce(successStatus) + + const resultPromise = ExchangeController.waitUntilComplete({ + exchangeId: 'ex1', + sessionId: 'sess-123', + paymentId: 'payment-123' + }) + + // Run all timers to completion + await vi.runAllTimersAsync() + + const result = await resultPromise + + expect(ExchangeController.getBuyStatus).toHaveBeenCalledTimes(20) + expect(result).toEqual(successStatus) + }) + + it('waits 5 seconds between retries', async () => { + const inProgressStatus = { + status: 'IN_PROGRESS' as ExchangeBuyStatus, + txHash: undefined + } + const successStatus = { + status: 'SUCCESS' as ExchangeBuyStatus, + txHash: '0xtxhash123' + } + + vi.spyOn(ExchangeController, 'getBuyStatus') + .mockResolvedValueOnce(inProgressStatus) + .mockResolvedValueOnce(successStatus) + + const resultPromise = ExchangeController.waitUntilComplete({ + exchangeId: 'ex1', + sessionId: 'sess-123', + paymentId: 'payment-123' + }) + + // Should be called once initially + expect(ExchangeController.getBuyStatus).toHaveBeenCalledTimes(1) + + // Fast forward 4 seconds - should not call again yet + await vi.advanceTimersByTimeAsync(4000) + expect(ExchangeController.getBuyStatus).toHaveBeenCalledTimes(1) + + // Fast forward 1 more second - should call again + await vi.advanceTimersByTimeAsync(1000) + + const result = await resultPromise + expect(ExchangeController.getBuyStatus).toHaveBeenCalledTimes(2) + expect(result).toEqual(successStatus) + }) + }) }) From 1353a402361dba8acab6f29605db9c7763da0d59 Mon Sep 17 00:00:00 2001 From: tomiir Date: Thu, 14 Aug 2025 11:01:10 +0200 Subject: [PATCH 06/10] chore: add query params to pay requests --- packages/controllers/src/utils/ExchangeUtil.ts | 8 +++++++- packages/pay/src/utils/ApiUtil.ts | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/controllers/src/utils/ExchangeUtil.ts b/packages/controllers/src/utils/ExchangeUtil.ts index c74d145bc8..2a94060c87 100644 --- a/packages/controllers/src/utils/ExchangeUtil.ts +++ b/packages/controllers/src/utils/ExchangeUtil.ts @@ -86,11 +86,17 @@ export type GetBuyStatusResult = { async function sendRequest(method: string, params: unknown): Promise> { const url = getApiUrl() + const { sdkType: st, sdkVersion: sv, projectId } = OptionsController.state const requestBody = { jsonrpc: '2.0', id: 1, method, - params + params: { + ...(params || {}), + st, + sv, + projectId + } } const response = await fetch(url, { method: 'POST', diff --git a/packages/pay/src/utils/ApiUtil.ts b/packages/pay/src/utils/ApiUtil.ts index ebafa34882..1708313c31 100644 --- a/packages/pay/src/utils/ApiUtil.ts +++ b/packages/pay/src/utils/ApiUtil.ts @@ -54,11 +54,17 @@ type GetBuyStatusResult = { async function sendRequest(method: string, params: unknown): Promise> { const url = getApiUrl() + const { sdkType: st, sdkVersion: sv, projectId } = OptionsController.state const requestBody = { jsonrpc: '2.0', id: 1, method, - params + params: { + ...(params || {}), + st, + sv, + projectId + } } const response = await fetch(url, { method: 'POST', From 6f5ac52edbd008501cb482ae189d4af312082e81 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 14 Aug 2025 10:56:09 +0100 Subject: [PATCH 07/10] chore: add extra check before calling handlePaymentInProgress --- .../src/views/w3m-deposit-from-exchange-view/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts index 7d207523f6..02c116c85e 100644 --- a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts @@ -53,7 +53,14 @@ export class W3mDepositFromExchangeView extends LitElement { this.paymentId = exchangeState.paymentId this.isPaymentInProgress = exchangeState.isPaymentInProgress this.currentPayment = exchangeState.currentPayment - if (exchangeState.isPaymentInProgress) { + + const shouldHandlePaymentInProgress = + exchangeState.isPaymentInProgress && + exchangeState.currentPayment?.exchangeId && + exchangeState.currentPayment?.sessionId && + exchangeState.paymentId + + if (shouldHandlePaymentInProgress) { this.handlePaymentInProgress() } }) From ebbb29bad758ca13f26df2f5d51db697cef1201d Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 14 Aug 2025 11:22:34 +0100 Subject: [PATCH 08/10] fix: tests --- packages/pay/src/utils/ApiUtil.ts | 3 ++- .../tests/controllers/PayController.test.ts | 4 ++++ packages/pay/tests/utils/ApiUtil.test.ts | 23 +++++++++++++------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/pay/src/utils/ApiUtil.ts b/packages/pay/src/utils/ApiUtil.ts index 1708313c31..a59cee30d6 100644 --- a/packages/pay/src/utils/ApiUtil.ts +++ b/packages/pay/src/utils/ApiUtil.ts @@ -54,7 +54,8 @@ type GetBuyStatusResult = { async function sendRequest(method: string, params: unknown): Promise> { const url = getApiUrl() - const { sdkType: st, sdkVersion: sv, projectId } = OptionsController.state + const { sdkType: st, sdkVersion: sv, projectId } = OptionsController.getSnapshot() + const requestBody = { jsonrpc: '2.0', id: 1, diff --git a/packages/pay/tests/controllers/PayController.test.ts b/packages/pay/tests/controllers/PayController.test.ts index 9234368083..b896bf9830 100644 --- a/packages/pay/tests/controllers/PayController.test.ts +++ b/packages/pay/tests/controllers/PayController.test.ts @@ -248,6 +248,7 @@ describe('PayController', () => { type: 'track', event: 'PAY_EXCHANGE_SELECTED', properties: { + source: 'pay', exchange: { id: 'coinbase' }, @@ -279,6 +280,7 @@ describe('PayController', () => { event: 'PAY_INITIATED', properties: { paymentId: mockPaymentId, + source: 'pay', configuration: { network: params.network, asset: params.asset, @@ -901,6 +903,7 @@ describe('PayController', () => { event: 'PAY_SUCCESS', properties: { paymentId: mockPaymentId, + source: 'pay', configuration: { network: mockPaymentOptions.paymentAsset.network, asset: mockPaymentOptions.paymentAsset.asset, @@ -929,6 +932,7 @@ describe('PayController', () => { event: 'PAY_ERROR', properties: { paymentId: mockPaymentId, + source: 'pay', configuration: { network: mockPaymentOptions.paymentAsset.network, asset: mockPaymentOptions.paymentAsset.asset, diff --git a/packages/pay/tests/utils/ApiUtil.test.ts b/packages/pay/tests/utils/ApiUtil.test.ts index 32d9e488ae..d174225c2f 100644 --- a/packages/pay/tests/utils/ApiUtil.test.ts +++ b/packages/pay/tests/utils/ApiUtil.test.ts @@ -5,15 +5,16 @@ import { API_URL } from '../../src/utils/ConstantsUtil.js' // --- Mocks ------------------------------------------------------------------- const MOCK_PROJECT_ID = 'mockProjectId' +const MOCK_SDK_TYPE = 'appkit' +const MOCK_SDK_VERSION = 'html-wagmi-0.0.1' vi.mock('@reown/appkit-controllers', () => ({ OptionsController: { - getSnapshot: vi.fn( - () => - ({ - projectId: MOCK_PROJECT_ID - }) as any - ) + getSnapshot: vi.fn(() => ({ + projectId: MOCK_PROJECT_ID, + sdkType: MOCK_SDK_TYPE, + sdkVersion: MOCK_SDK_VERSION + })) } })) @@ -42,7 +43,12 @@ describe('ApiUtil', () => { }) describe('getExchanges', () => { - const mockParams = { page: 1 } + const mockParams = { + projectId: MOCK_PROJECT_ID, + st: MOCK_SDK_TYPE, + sv: MOCK_SDK_VERSION, + page: 1 + } const mockSuccessResponse = { jsonrpc: '2.0', id: 1, @@ -99,6 +105,9 @@ describe('ApiUtil', () => { describe('getPayUrl', () => { const mockParams = { + projectId: MOCK_PROJECT_ID, + st: MOCK_SDK_TYPE, + sv: MOCK_SDK_VERSION, exchangeId: 'exchange', asset: 'eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', amount: '10', From 0fe2e1db7ea5ded4a5695dd2da1db95bfec414ca Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 14 Aug 2025 11:41:58 +0100 Subject: [PATCH 09/10] fix: tests --- packages/controllers/src/utils/ExchangeUtil.ts | 2 +- packages/controllers/tests/utils/ExchangeUtil.test.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/controllers/src/utils/ExchangeUtil.ts b/packages/controllers/src/utils/ExchangeUtil.ts index 2a94060c87..663135c5d4 100644 --- a/packages/controllers/src/utils/ExchangeUtil.ts +++ b/packages/controllers/src/utils/ExchangeUtil.ts @@ -86,7 +86,7 @@ export type GetBuyStatusResult = { async function sendRequest(method: string, params: unknown): Promise> { const url = getApiUrl() - const { sdkType: st, sdkVersion: sv, projectId } = OptionsController.state + const { sdkType: st, sdkVersion: sv, projectId } = OptionsController.getSnapshot() const requestBody = { jsonrpc: '2.0', id: 1, diff --git a/packages/controllers/tests/utils/ExchangeUtil.test.ts b/packages/controllers/tests/utils/ExchangeUtil.test.ts index d49b6f3b33..dbf0bc1d15 100644 --- a/packages/controllers/tests/utils/ExchangeUtil.test.ts +++ b/packages/controllers/tests/utils/ExchangeUtil.test.ts @@ -41,7 +41,8 @@ describe('ExchangeUtil', () => { page: 2, asset: 'native', amount: '100', - network: 'eip155:1' as CaipNetworkId + network: 'eip155:1' as CaipNetworkId, + projectId: 'test-project-id' } vi.mocked(global.fetch).mockResolvedValue({ @@ -78,7 +79,8 @@ describe('ExchangeUtil', () => { exchangeId: 'ex1', asset: 'erc20:0xabc', amount: '1', - recipient: '0x123' + recipient: '0x123', + projectId: 'test-project-id' } vi.mocked(global.fetch).mockResolvedValue({ @@ -100,7 +102,7 @@ describe('ExchangeUtil', () => { }) it('getBuyStatus sends request and returns result', async () => { - const params = { sessionId: 'sess-1', exchangeId: 'ex1' } + const params = { sessionId: 'sess-1', exchangeId: 'ex1', projectId: 'test-project-id' } vi.mocked(global.fetch).mockResolvedValue({ json: vi.fn().mockResolvedValue({ From 852dfe529941cabf46ff5d4bf41e8bfee0bf7a6b Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 14 Aug 2025 11:44:06 +0100 Subject: [PATCH 10/10] chore: remove .catch() --- .../src/views/w3m-deposit-from-exchange-view/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts index 02c116c85e..acd1715bd9 100644 --- a/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-deposit-from-exchange-view/index.ts @@ -72,7 +72,7 @@ export class W3mDepositFromExchangeView extends LitElement { } public override firstUpdated() { - ExchangeController.fetchExchanges().catch() + ExchangeController.fetchExchanges() ExchangeController.fetchTokenPrice() }