diff --git a/.changeset/strong-books-call.md b/.changeset/strong-books-call.md new file mode 100644 index 000000000..66bcee1ba --- /dev/null +++ b/.changeset/strong-books-call.md @@ -0,0 +1,6 @@ +--- +'@reservoir0x/relay-sdk': patch +'@reservoir0x/relay-kit-ui': patch +--- + +Add hyperliquid usd send functionality diff --git a/demo/pages/_app.tsx b/demo/pages/_app.tsx index e1402852b..8a5c4c947 100644 --- a/demo/pages/_app.tsx +++ b/demo/pages/_app.tsx @@ -61,6 +61,7 @@ const AppWrapper: FC = ({ children, dynamicChains }) => { Chain, ...Chain[] ] + const wagmiConfig = createConfig({ chains: viemChains, multiInjectedProviderDiscovery: false, diff --git a/packages/sdk/src/utils/chain.ts b/packages/sdk/src/utils/chain.ts index 9e029c920..234f1c821 100644 --- a/packages/sdk/src/utils/chain.ts +++ b/packages/sdk/src/utils/chain.ts @@ -21,7 +21,7 @@ export const configureViemChain = ( chain: RelayAPIChain ): RelayChain & Required> => { let viemChain: Chain - const overriddenChains = [999] + const overriddenChains = [999, 1337] const staticChain = overriddenChains.includes(chain.id) ? undefined : viemChainMap[chain.id] diff --git a/packages/sdk/src/utils/executeSteps.ts b/packages/sdk/src/utils/executeSteps.ts index 7a84a16c6..e2f0e2637 100644 --- a/packages/sdk/src/utils/executeSteps.ts +++ b/packages/sdk/src/utils/executeSteps.ts @@ -5,7 +5,7 @@ import type { SignatureStepItem } from '../types/index.js' import { pollUntilHasData, pollUntilOk } from './pollApi.js' -import { axios } from '../utils/index.js' +import { axios, prepareHyperliquidSignatureStep } from '../utils/index.js' import type { AxiosRequestConfig } from 'axios' import { getClient } from '../client.js' import { LogLevel } from '../utils/logger.js' @@ -14,6 +14,7 @@ import { canBatchTransactions, prepareBatchTransaction } from './prepareBatchTransaction.js' +import { sendUsd } from './hyperliquid.js' export type SetStateData = Pick< Execute, @@ -91,6 +92,20 @@ export async function executeSteps( } } + //Check if Hyperliquid and if so, rewrite steps to become a signature step + if ( + chainId === 1337 && + json.steps[0] && + (json.steps[0].id as any) !== 'sign' + ) { + const activeWalletChainId = await wallet?.getChainId() + const signatureStep = prepareHyperliquidSignatureStep( + json.steps, + activeWalletChainId + ) + json.steps = [signatureStep] + } + // Update state on first call or recursion setState({ steps: [...json?.steps], @@ -345,6 +360,11 @@ export async function executeSteps( } } + //Special Logic for Hyperliquid to send signature + if (chainId === 1337 && signature) { + await sendUsd(client, signature, stepItem) + } + if (postData) { client.log(['Execute Steps: Posting order'], LogLevel.Verbose) stepItem.progressState = 'posting' @@ -405,86 +425,6 @@ export async function executeSteps( break } - // If check, poll check until validated - if (stepItem?.check) { - stepItem.progressState = 'validating' - setState({ - steps: [...json.steps], - fees: { ...json?.fees }, - breakdown: json?.breakdown, - details: json?.details - }) - stepItem.isValidatingSignature = true - setState({ - steps: [...json?.steps], - fees: { ...json?.fees }, - breakdown: json?.breakdown, - details: json?.details - }) - - await pollUntilOk( - { - url: `${request.baseURL}${stepItem?.check.endpoint}`, - method: stepItem?.check.method, - headers - }, - (res) => { - client.log( - [ - `Execute Steps: Polling execute status to check if indexed`, - res - ], - LogLevel.Verbose - ) - - //set status - if ( - res?.data?.status === 'success' && - res?.data?.txHashes - ) { - const chainTxHashes: NonNullable< - Execute['steps'][0]['items'] - >[0]['txHashes'] = res.data?.txHashes?.map( - (hash: string) => { - return { - txHash: hash, - chainId: - res.data.destinationChainId ?? chain?.id - } - } - ) - - if (res?.data?.inTxHashes) { - const chainInTxHashes: NonNullable< - Execute['steps'][0]['items'] - >[0]['txHashes'] = res.data?.inTxHashes?.map( - (hash: string) => { - return { - txHash: hash, - chainId: chain?.id ?? res.data.originChainId - } - } - ) - stepItem.internalTxHashes = chainInTxHashes - } - stepItem.txHashes = chainTxHashes - - return true - } else if (res?.data?.status === 'failure') { - throw Error( - res?.data?.details || 'Transaction failed' - ) - } else if (res?.data?.status === 'delayed') { - stepItem.progressState = 'validating_delayed' - } - return false - }, - maximumAttempts, - 0, - pollingInterval - ) - } - if (res.status > 299 || res.status < 200) throw res.data if (res.data.results) { @@ -509,6 +449,87 @@ export async function executeSteps( } } + // If check, poll check until validated + if (stepItem?.check) { + stepItem.progressState = 'validating' + setState({ + steps: [...json.steps], + fees: { ...json?.fees }, + breakdown: json?.breakdown, + details: json?.details + }) + stepItem.isValidatingSignature = true + setState({ + steps: [...json?.steps], + fees: { ...json?.fees }, + breakdown: json?.breakdown, + details: json?.details + }) + + const headers = { + 'Content-Type': 'application/json' + } + + await pollUntilOk( + { + url: `${request.baseURL}${stepItem?.check.endpoint}`, + method: stepItem?.check.method, + headers + }, + (res) => { + client.log( + [ + `Execute Steps: Polling execute status to check if indexed`, + res + ], + LogLevel.Verbose + ) + + //set status + if ( + res?.data?.status === 'success' && + res?.data?.txHashes + ) { + const chainTxHashes: NonNullable< + Execute['steps'][0]['items'] + >[0]['txHashes'] = res.data?.txHashes?.map( + (hash: string) => { + return { + txHash: hash, + chainId: res.data.destinationChainId ?? chain?.id + } + } + ) + + if (res?.data?.inTxHashes) { + const chainInTxHashes: NonNullable< + Execute['steps'][0]['items'] + >[0]['txHashes'] = res.data?.inTxHashes?.map( + (hash: string) => { + return { + txHash: hash, + chainId: chain?.id ?? res.data.originChainId + } + } + ) + stepItem.internalTxHashes = chainInTxHashes + } + stepItem.txHashes = chainTxHashes + + return true + } else if (res?.data?.status === 'failure') { + throw Error(res?.data?.details || 'Transaction failed') + } else if (res?.data?.status === 'delayed') { + stepItem.progressState = 'validating_delayed' + } + return false + }, + maximumAttempts, + 0, + pollingInterval + ) + } + break } diff --git a/packages/sdk/src/utils/hyperliquid.ts b/packages/sdk/src/utils/hyperliquid.ts new file mode 100644 index 000000000..97bc0a363 --- /dev/null +++ b/packages/sdk/src/utils/hyperliquid.ts @@ -0,0 +1,109 @@ +import { parseSignature } from 'viem' +import type { Execute } from '../types/Execute.js' +import axios from 'axios' +import type { RelayClient } from '../client.js' +import { LogLevel } from './logger.js' + +export function prepareHyperliquidSignatureStep( + steps: Execute['steps'], + chainId: number +) { + const items = steps[0]?.items + const amount = items[0]?.data?.action?.parameters?.amount + const destination = items[0]?.data?.action?.parameters?.destination + const signatureStep = { + id: 'sign' as any, + action: 'Confirm transaction in your wallet', + description: `Sign a message to confirm the transaction`, + kind: 'signature' as const, + items: [ + { + status: 'incomplete' as 'incomplete' | 'complete', + data: { + sign: { + signatureKind: 'eip712', + domain: { + name: 'HyperliquidSignTransaction', + version: '1', + chainId: chainId, + verifyingContract: '0x0000000000000000000000000000000000000000' + }, + types: { + 'HyperliquidTransaction:UsdSend': [ + { name: 'hyperliquidChain', type: 'string' }, + { name: 'destination', type: 'string' }, + { name: 'amount', type: 'string' }, + { name: 'time', type: 'uint64' } + ], + EIP712Domain: [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' } + ] + }, + primaryType: 'HyperliquidTransaction:UsdSend', + value: { + type: 'usdSend', + signatureChainId: `0x${chainId.toString(16)}`, + hyperliquidChain: 'Mainnet', + destination: destination?.toLowerCase(), + amount, + time: new Date().getTime() + } + } + }, + check: { + endpoint: `/intents/status?requestId=${steps[0]?.requestId}`, + method: 'GET' + } + } + ], + requestId: steps[0]?.requestId, + depositAddress: steps[0]?.depositAddress + } + + return signatureStep +} + +export async function sendUsd( + client: RelayClient, + signature: string, + stepItem: Execute['steps'][0]['items'][0] +) { + client.log( + ['Execute Steps: Sending signature to Hyperliquid', signature], + LogLevel.Verbose + ) + const { r, s, v } = parseSignature(signature as `0x${string}`) + const currentTime = stepItem?.data?.sign?.value?.time ?? new Date().getTime() + const res = await axios.post('https://api.hyperliquid.xyz/exchange', { + signature: { + r, + s, + v: Number(v ?? 0n) + }, + nonce: currentTime, + action: { + type: stepItem?.data?.sign?.value?.type, + signatureChainId: `0x${stepItem?.data?.sign?.domain?.chainId?.toString(16)}`, + hyperliquidChain: 'Mainnet', + destination: stepItem?.data?.sign?.value?.destination?.toLowerCase(), + amount: stepItem?.data?.sign?.value?.amount, + time: currentTime + } + }) + if ( + !res || + !res.data || + (res && res.status !== 200) || + res.data.status != 'ok' + ) { + throw 'Failed to send signature to HyperLiquid' + } + client.log( + ['Execute Steps: Signature sent to Hyperliquid', res.data], + LogLevel.Verbose + ) + return res.data +} diff --git a/packages/sdk/src/utils/index.ts b/packages/sdk/src/utils/index.ts index 72f51af17..440208fa0 100644 --- a/packages/sdk/src/utils/index.ts +++ b/packages/sdk/src/utils/index.ts @@ -15,3 +15,4 @@ export { } from './simulateContract.js' export { safeStructuredClone } from './structuredClone.js' export { repeatUntilOk } from './repeatUntilOk.js' +export { prepareHyperliquidSignatureStep } from './hyperliquid.js' diff --git a/packages/sdk/src/utils/viemWallet.ts b/packages/sdk/src/utils/viemWallet.ts index 17cd0feb6..0d2adfef2 100644 --- a/packages/sdk/src/utils/viemWallet.ts +++ b/packages/sdk/src/utils/viemWallet.ts @@ -56,14 +56,18 @@ export const adaptViemWallet = (wallet: WalletClient): AdaptedWallet => { }) } } else if (signData.signatureKind === 'eip712') { - client.log(['Execute Steps: Signing with eip712'], LogLevel.Verbose) - signature = await wallet.signTypedData({ + const signatureData = { account: wallet.account as Account, domain: signData.domain as any, types: signData.types as any, primaryType: signData.primaryType, message: signData.value - }) + } + client.log( + ['Execute Steps: Signing with eip712', signatureData], + LogLevel.Verbose + ) + signature = await wallet.signTypedData(signatureData) } } return signature diff --git a/packages/ui/src/components/common/TokenSelector/TokenSelector.tsx b/packages/ui/src/components/common/TokenSelector/TokenSelector.tsx index a0fb84e5f..c2414ddbd 100644 --- a/packages/ui/src/components/common/TokenSelector/TokenSelector.tsx +++ b/packages/ui/src/components/common/TokenSelector/TokenSelector.tsx @@ -163,6 +163,7 @@ const TokenSelector: FC = ({ (chain.vmType === 'evm' || chain.vmType === 'suivm' || chain.vmType === 'tvm' || + chain.vmType === 'hypevm' || chain.id === solana.id || chain.id === eclipse.id || chain.id === bitcoin.id) && diff --git a/packages/ui/src/components/widgets/SwapWidgetRenderer.tsx b/packages/ui/src/components/widgets/SwapWidgetRenderer.tsx index 979e9bf3e..24a91123d 100644 --- a/packages/ui/src/components/widgets/SwapWidgetRenderer.tsx +++ b/packages/ui/src/components/widgets/SwapWidgetRenderer.tsx @@ -275,7 +275,9 @@ const SwapWidgetRenderer: FC = ({ ) const fromChainWalletVMSupported = - !fromChain?.vmType || supportedWalletVMs.includes(fromChain?.vmType) + !fromChain?.vmType || + supportedWalletVMs.includes(fromChain?.vmType) || + fromChain?.id === 1337 const toChainWalletVMSupported = !toChain?.vmType || supportedWalletVMs.includes(toChain?.vmType) @@ -598,7 +600,8 @@ const SwapWidgetRenderer: FC = ({ ).toString(), referrer: relayClient?.source ?? undefined, useExternalLiquidity, - useDepositAddress: !fromChainWalletVMSupported, + useDepositAddress: + !fromChainWalletVMSupported || fromToken?.chainId === 1337, slippageTolerance: slippageTolerance, topupGas: gasTopUpEnabled && gasTopUpRequired, protocolVersion: quoteProtocol @@ -976,12 +979,22 @@ const SwapWidgetRenderer: FC = ({ wallet ?? adaptViemWallet(walletClient.data as WalletClient) const activeWalletChainId = await _wallet?.getChainId() - if (fromToken && fromToken?.chainId !== activeWalletChainId) { + const activeWalletChain = relayClient?.chains?.find( + (chain) => chain.id === activeWalletChainId + ) + let targetChainId = fromToken?.chainId + //Special case for Hyperliquid, to sign txs on an evm chain + if (fromToken?.chainId === 1337) { + targetChainId = + activeWalletChain?.vmType !== 'evm' ? 1 : activeWalletChainId + } + + if (fromToken && targetChainId && targetChainId !== activeWalletChainId) { onAnalyticEvent?.(EventNames.SWAP_SWITCH_NETWORK, { activeWalletChainId, ...swapEventData }) - await _wallet?.switchChain(fromToken.chainId) + await _wallet?.switchChain(targetChainId) } let _currentSteps: Execute['steps'] | undefined = undefined diff --git a/packages/ui/src/hooks/index.ts b/packages/ui/src/hooks/index.ts index 01f96f5b5..025dcedc6 100644 --- a/packages/ui/src/hooks/index.ts +++ b/packages/ui/src/hooks/index.ts @@ -20,6 +20,7 @@ import useFallbackState from './useFallbackState.js' import useMoonPayTransaction from './useMoonPayTransaction.js' import { useInternalRelayChains } from './useInternalRelayChains.js' import useGasTopUpRequired from './useGasTopUpRequired.js' +import useHyperliquidUsdcBalance from './useHyperliquidUsdcBalance.js' export { useMounted, @@ -43,5 +44,6 @@ export { useFallbackState, useMoonPayTransaction, useInternalRelayChains, - useGasTopUpRequired + useGasTopUpRequired, + useHyperliquidUsdcBalance } diff --git a/packages/ui/src/hooks/useCurrencyBalance.ts b/packages/ui/src/hooks/useCurrencyBalance.ts index 0fadf77cd..614188fcd 100644 --- a/packages/ui/src/hooks/useCurrencyBalance.ts +++ b/packages/ui/src/hooks/useCurrencyBalance.ts @@ -17,6 +17,7 @@ import { isValidAddress } from '../utils/address.js' import useRelayClient from './useRelayClient.js' import useEclipseBalance from '../hooks/useEclipseBalance.js' import { eclipse } from '../utils/solana.js' +import useHyperliquidUsdcBalance from './useHyperliquidUsdcBalance.js' type UseBalanceProps = { chain?: RelayChain @@ -166,6 +167,19 @@ const useCurrencyBalance = ({ ) }) + const hyperliquidUsdcBalance = useHyperliquidUsdcBalance(address, { + enabled: Boolean( + !adaptedWalletBalanceIsEnabled && + chain && + chain.vmType === 'hypevm' && + address && + _isValidAddress && + enabled + ), + gcTime: refreshInterval, + staleTime: refreshInterval + }) + if (adaptedWalletBalanceIsEnabled) { return { value: adaptedWalletBalance.data, @@ -267,6 +281,15 @@ const useCurrencyBalance = ({ error: suiBalances.error, isDuneBalance: false } + } else if (chain?.vmType === 'hypevm') { + return { + value: hyperliquidUsdcBalance.balance, + queryKey: hyperliquidUsdcBalance.queryKey, + isLoading: hyperliquidUsdcBalance.isLoading, + isError: hyperliquidUsdcBalance.isError, + error: hyperliquidUsdcBalance.error, + isDuneBalance: false + } } else { return { value: undefined, diff --git a/packages/ui/src/hooks/useHyperliquidUsdcBalance.ts b/packages/ui/src/hooks/useHyperliquidUsdcBalance.ts new file mode 100644 index 000000000..047762d34 --- /dev/null +++ b/packages/ui/src/hooks/useHyperliquidUsdcBalance.ts @@ -0,0 +1,72 @@ +import { isAddress, parseUnits } from 'viem' +import { + useQuery, + type DefaultError, + type QueryKey +} from '@tanstack/react-query' + +export type HyperliquidMarginSummary = { + accountValue?: string + totalNtlPos?: string + totalRawUsd?: string + totalMarginUsed?: string +} + +export type HyperLiquidBalanceResponse = { + marginSummary?: HyperliquidMarginSummary + crossMarginSummary?: HyperliquidMarginSummary + crossMaintenanceMarginUsed?: string + withdrawable?: string + assetPositions?: any[] + time?: number +} | null + +type QueryType = typeof useQuery< + HyperLiquidBalanceResponse, + DefaultError, + HyperLiquidBalanceResponse, + QueryKey +> +type QueryOptions = Parameters['0'] + +export default (address?: string, queryOptions?: Partial) => { + const queryKey = ['useHyperliquidBalances', address] + const isEvmAddress = isAddress(address ?? '') + + const response = (useQuery as QueryType)({ + queryKey: ['useHyperliquidBalances', address], + queryFn: async () => { + if (!address || !isEvmAddress) { + return null + } + + const response = await fetch('https://api.hyperliquid.xyz/info', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + user: address, + type: 'clearinghouseState' + }) + }) + + const data = await response.json() + + return data as HyperLiquidBalanceResponse + }, + ...queryOptions, + enabled: address !== undefined && queryOptions?.enabled && isEvmAddress + }) + + const balance = parseUnits(response.data?.withdrawable ?? '0', 8) + + return { + ...response, + balance, + queryKey + } as ReturnType & { + balance: bigint | undefined + queryKey: (string | undefined)[] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b30d8bcd2..2fefe5306 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,13 +103,13 @@ importers: version: 22.13.4 next: specifier: latest - version: 15.3.2(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.4.5(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-remote-watch: specifier: ^1.0.0 version: 1.0.0 next-themes: specifier: ^0.2.0 - version: 0.2.1(next@15.3.2(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.2.1(next@15.4.5(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.0.0 version: 18.3.1 @@ -1410,6 +1410,9 @@ packages: '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -1927,8 +1930,8 @@ packages: cpu: [arm64] os: [darwin] - '@img/sharp-darwin-arm64@0.34.1': - resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} + '@img/sharp-darwin-arm64@0.34.3': + resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] @@ -1939,8 +1942,8 @@ packages: cpu: [x64] os: [darwin] - '@img/sharp-darwin-x64@0.34.1': - resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} + '@img/sharp-darwin-x64@0.34.3': + resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] @@ -1950,8 +1953,8 @@ packages: cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + '@img/sharp-libvips-darwin-arm64@1.2.0': + resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} cpu: [arm64] os: [darwin] @@ -1960,8 +1963,8 @@ packages: cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + '@img/sharp-libvips-darwin-x64@1.2.0': + resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} cpu: [x64] os: [darwin] @@ -1970,8 +1973,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + '@img/sharp-libvips-linux-arm64@1.2.0': + resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} cpu: [arm64] os: [linux] @@ -1980,13 +1983,13 @@ packages: cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + '@img/sharp-libvips-linux-arm@1.2.0': + resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + '@img/sharp-libvips-linux-ppc64@1.2.0': + resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} cpu: [ppc64] os: [linux] @@ -1995,8 +1998,8 @@ packages: cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + '@img/sharp-libvips-linux-s390x@1.2.0': + resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} cpu: [s390x] os: [linux] @@ -2005,8 +2008,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + '@img/sharp-libvips-linux-x64@1.2.0': + resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} cpu: [x64] os: [linux] @@ -2015,8 +2018,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} cpu: [arm64] os: [linux] @@ -2025,8 +2028,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} cpu: [x64] os: [linux] @@ -2036,8 +2039,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-linux-arm64@0.34.1': - resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} + '@img/sharp-linux-arm64@0.34.3': + resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] @@ -2048,20 +2051,26 @@ packages: cpu: [arm] os: [linux] - '@img/sharp-linux-arm@0.34.1': - resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} + '@img/sharp-linux-arm@0.34.3': + resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + '@img/sharp-linux-ppc64@0.34.3': + resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-s390x@0.34.1': - resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} + '@img/sharp-linux-s390x@0.34.3': + resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] @@ -2072,8 +2081,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linux-x64@0.34.1': - resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} + '@img/sharp-linux-x64@0.34.3': + resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] @@ -2084,8 +2093,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.1': - resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} + '@img/sharp-linuxmusl-arm64@0.34.3': + resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] @@ -2096,8 +2105,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.1': - resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} + '@img/sharp-linuxmusl-x64@0.34.3': + resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] @@ -2107,19 +2116,25 @@ packages: engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-wasm32@0.34.1': - resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} + '@img/sharp-wasm32@0.34.3': + resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-win32-arm64@0.34.3': + resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + '@img/sharp-win32-ia32@0.33.5': resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-ia32@0.34.1': - resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} + '@img/sharp-win32-ia32@0.34.3': + resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] @@ -2130,8 +2145,8 @@ packages: cpu: [x64] os: [win32] - '@img/sharp-win32-x64@0.34.1': - resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} + '@img/sharp-win32-x64@0.34.3': + resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -2331,53 +2346,53 @@ packages: '@mysten/wallet-standard@0.13.29': resolution: {integrity: sha512-NR9I3HprticwT3HRPQ36VojV5Gjp+S/iJYdib3qLVrSiCOQjoilmYzA53pDu/rFDSrljskgV/0fAj9ynF9nVFg==} - '@next/env@15.3.2': - resolution: {integrity: sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==} + '@next/env@15.4.5': + resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==} - '@next/swc-darwin-arm64@15.3.2': - resolution: {integrity: sha512-2DR6kY/OGcokbnCsjHpNeQblqCZ85/1j6njYSkzRdpLn5At7OkSdmk7WyAmB9G0k25+VgqVZ/u356OSoQZ3z0g==} + '@next/swc-darwin-arm64@15.4.5': + resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.2': - resolution: {integrity: sha512-ro/fdqaZWL6k1S/5CLv1I0DaZfDVJkWNaUU3un8Lg6m0YENWlDulmIWzV96Iou2wEYyEsZq51mwV8+XQXqMp3w==} + '@next/swc-darwin-x64@15.4.5': + resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.2': - resolution: {integrity: sha512-covwwtZYhlbRWK2HlYX9835qXum4xYZ3E2Mra1mdQ+0ICGoMiw1+nVAn4d9Bo7R3JqSmK1grMq/va+0cdh7bJA==} + '@next/swc-linux-arm64-gnu@15.4.5': + resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.2': - resolution: {integrity: sha512-KQkMEillvlW5Qk5mtGA/3Yz0/tzpNlSw6/3/ttsV1lNtMuOHcGii3zVeXZyi4EJmmLDKYcTcByV2wVsOhDt/zg==} + '@next/swc-linux-arm64-musl@15.4.5': + resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.2': - resolution: {integrity: sha512-uRBo6THWei0chz+Y5j37qzx+BtoDRFIkDzZjlpCItBRXyMPIg079eIkOCl3aqr2tkxL4HFyJ4GHDes7W8HuAUg==} + '@next/swc-linux-x64-gnu@15.4.5': + resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.2': - resolution: {integrity: sha512-+uxFlPuCNx/T9PdMClOqeE8USKzj8tVz37KflT3Kdbx/LOlZBRI2yxuIcmx1mPNK8DwSOMNCr4ureSet7eyC0w==} + '@next/swc-linux-x64-musl@15.4.5': + resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.2': - resolution: {integrity: sha512-LLTKmaI5cfD8dVzh5Vt7+OMo+AIOClEdIU/TSKbXXT2iScUTSxOGoBhfuv+FU8R9MLmrkIL1e2fBMkEEjYAtPQ==} + '@next/swc-win32-arm64-msvc@15.4.5': + resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.2': - resolution: {integrity: sha512-aW5B8wOPioJ4mBdMDXkt5f3j8pUr9W8AnlX0Df35uRWNT1Y6RIybxjnSUe+PhM+M1bwgyY8PHLmXZC6zT1o5tA==} + '@next/swc-win32-x64-msvc@15.4.5': + resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3288,9 +3303,6 @@ packages: '@solana/web3.js@1.98.2': resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -3722,6 +3734,7 @@ packages: '@zod/mini@4.0.0-beta.0': resolution: {integrity: sha512-ux1pJYQJO0S/uAldc0KGKiBFvqPpQqfC8vXbBJ3tDrcWCCa6/QBQPexZFn/cHscTxA/SnEJEAxa7qGTwPQC5Tg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -4080,10 +4093,6 @@ packages: bundle-n-require@1.1.1: resolution: {integrity: sha512-EB2wFjXF106LQLe/CYnKCMCdLeTW47AtcEtUfiqAOgr2a08k0+YgRklur2aLfEYHlhz6baMskZ8L2U92Hh0vyA==} - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -4487,6 +4496,10 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -6014,13 +6027,13 @@ packages: react: '*' react-dom: '*' - next@15.3.2: - resolution: {integrity: sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==} + next@15.4.5: + resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 + '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -6896,6 +6909,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -6941,8 +6959,8 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.34.1: - resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} + sharp@0.34.3: + resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -7076,10 +7094,6 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -9644,6 +9658,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.20.2': optional: true @@ -10186,9 +10205,9 @@ snapshots: '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true - '@img/sharp-darwin-arm64@0.34.1': + '@img/sharp-darwin-arm64@0.34.3': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-arm64': 1.2.0 optional: true '@img/sharp-darwin-x64@0.33.5': @@ -10196,60 +10215,60 @@ snapshots: '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true - '@img/sharp-darwin-x64@0.34.1': + '@img/sharp-darwin-x64@0.34.3': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 optional: true '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': + '@img/sharp-libvips-darwin-arm64@1.2.0': optional: true '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': + '@img/sharp-libvips-darwin-x64@1.2.0': optional: true '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': + '@img/sharp-libvips-linux-arm64@1.2.0': optional: true '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linux-arm@1.1.0': + '@img/sharp-libvips-linux-arm@1.2.0': optional: true - '@img/sharp-libvips-linux-ppc64@1.1.0': + '@img/sharp-libvips-linux-ppc64@1.2.0': optional: true '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': + '@img/sharp-libvips-linux-s390x@1.2.0': optional: true '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.1.0': + '@img/sharp-libvips-linux-x64@1.2.0': optional: true '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': optional: true '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': + '@img/sharp-libvips-linuxmusl-x64@1.2.0': optional: true '@img/sharp-linux-arm64@0.33.5': @@ -10257,9 +10276,9 @@ snapshots: '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true - '@img/sharp-linux-arm64@0.34.1': + '@img/sharp-linux-arm64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.2.0 optional: true '@img/sharp-linux-arm@0.33.5': @@ -10267,9 +10286,14 @@ snapshots: '@img/sharp-libvips-linux-arm': 1.0.5 optional: true - '@img/sharp-linux-arm@0.34.1': + '@img/sharp-linux-arm@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.0 + optional: true + + '@img/sharp-linux-ppc64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 optional: true '@img/sharp-linux-s390x@0.33.5': @@ -10277,9 +10301,9 @@ snapshots: '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true - '@img/sharp-linux-s390x@0.34.1': + '@img/sharp-linux-s390x@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 optional: true '@img/sharp-linux-x64@0.33.5': @@ -10287,9 +10311,9 @@ snapshots: '@img/sharp-libvips-linux-x64': 1.0.4 optional: true - '@img/sharp-linux-x64@0.34.1': + '@img/sharp-linux-x64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.2.0 optional: true '@img/sharp-linuxmusl-arm64@0.33.5': @@ -10297,9 +10321,9 @@ snapshots: '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.1': + '@img/sharp-linuxmusl-arm64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 optional: true '@img/sharp-linuxmusl-x64@0.33.5': @@ -10307,9 +10331,9 @@ snapshots: '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.1': + '@img/sharp-linuxmusl-x64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 optional: true '@img/sharp-wasm32@0.33.5': @@ -10317,21 +10341,24 @@ snapshots: '@emnapi/runtime': 1.4.3 optional: true - '@img/sharp-wasm32@0.34.1': + '@img/sharp-wasm32@0.34.3': dependencies: - '@emnapi/runtime': 1.4.3 + '@emnapi/runtime': 1.4.5 + optional: true + + '@img/sharp-win32-arm64@0.34.3': optional: true '@img/sharp-win32-ia32@0.33.5': optional: true - '@img/sharp-win32-ia32@0.34.1': + '@img/sharp-win32-ia32@0.34.3': optional: true '@img/sharp-win32-x64@0.33.5': optional: true - '@img/sharp-win32-x64@0.34.1': + '@img/sharp-win32-x64@0.34.3': optional: true '@isaacs/cliui@8.0.2': @@ -10609,7 +10636,7 @@ snapshots: '@ethereumjs/tx': 4.2.0 '@types/debug': 4.1.12 debug: 4.4.0 - semver: 7.7.1 + semver: 7.7.2 superstruct: 1.0.4 transitivePeerDependencies: - supports-color @@ -10722,30 +10749,30 @@ snapshots: - '@gql.tada/vue-support' - typescript - '@next/env@15.3.2': {} + '@next/env@15.4.5': {} - '@next/swc-darwin-arm64@15.3.2': + '@next/swc-darwin-arm64@15.4.5': optional: true - '@next/swc-darwin-x64@15.3.2': + '@next/swc-darwin-x64@15.4.5': optional: true - '@next/swc-linux-arm64-gnu@15.3.2': + '@next/swc-linux-arm64-gnu@15.4.5': optional: true - '@next/swc-linux-arm64-musl@15.3.2': + '@next/swc-linux-arm64-musl@15.4.5': optional: true - '@next/swc-linux-x64-gnu@15.3.2': + '@next/swc-linux-x64-gnu@15.4.5': optional: true - '@next/swc-linux-x64-musl@15.3.2': + '@next/swc-linux-x64-musl@15.4.5': optional: true - '@next/swc-win32-arm64-msvc@15.3.2': + '@next/swc-win32-arm64-msvc@15.4.5': optional: true - '@next/swc-win32-x64-msvc@15.3.2': + '@next/swc-win32-x64-msvc@15.4.5': optional: true '@noble/ciphers@0.5.3': {} @@ -12201,8 +12228,6 @@ snapshots: - typescript - utf-8-validate - '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -13901,10 +13926,6 @@ snapshots: esbuild: 0.20.2 node-eval: 2.0.0 - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - bytes@3.1.2: {} cac@6.7.14: {} @@ -14281,6 +14302,9 @@ snapshots: detect-libc@2.0.3: {} + detect-libc@2.0.4: + optional: true + detect-node-es@1.1.0: {} diff-sequences@29.6.3: {} @@ -16211,33 +16235,31 @@ snapshots: transitivePeerDependencies: - supports-color - next-themes@0.2.1(next@15.3.2(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.2.1(next@15.4.5(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 15.3.2(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.5(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@15.3.2(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.4.5(@babel/core@7.26.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.3.2 - '@swc/counter': 0.1.3 + '@next/env': 15.4.5 '@swc/helpers': 0.5.15 - busboy: 1.6.0 caniuse-lite: 1.0.30001700 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(@babel/core@7.26.9)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.2 - '@next/swc-darwin-x64': 15.3.2 - '@next/swc-linux-arm64-gnu': 15.3.2 - '@next/swc-linux-arm64-musl': 15.3.2 - '@next/swc-linux-x64-gnu': 15.3.2 - '@next/swc-linux-x64-musl': 15.3.2 - '@next/swc-win32-arm64-msvc': 15.3.2 - '@next/swc-win32-x64-msvc': 15.3.2 - sharp: 0.34.1 + '@next/swc-darwin-arm64': 15.4.5 + '@next/swc-darwin-x64': 15.4.5 + '@next/swc-linux-arm64-gnu': 15.4.5 + '@next/swc-linux-arm64-musl': 15.4.5 + '@next/swc-linux-x64-gnu': 15.4.5 + '@next/swc-linux-x64-musl': 15.4.5 + '@next/swc-win32-arm64-msvc': 15.4.5 + '@next/swc-win32-x64-msvc': 15.4.5 + sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -17176,6 +17198,8 @@ snapshots: semver@7.7.1: {} + semver@7.7.2: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -17268,32 +17292,34 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - sharp@0.34.1: + sharp@0.34.3: dependencies: color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.7.1 + detect-libc: 2.0.4 + semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.1 - '@img/sharp-darwin-x64': 0.34.1 - '@img/sharp-libvips-darwin-arm64': 1.1.0 - '@img/sharp-libvips-darwin-x64': 1.1.0 - '@img/sharp-libvips-linux-arm': 1.1.0 - '@img/sharp-libvips-linux-arm64': 1.1.0 - '@img/sharp-libvips-linux-ppc64': 1.1.0 - '@img/sharp-libvips-linux-s390x': 1.1.0 - '@img/sharp-libvips-linux-x64': 1.1.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.1 - '@img/sharp-linux-arm64': 0.34.1 - '@img/sharp-linux-s390x': 0.34.1 - '@img/sharp-linux-x64': 0.34.1 - '@img/sharp-linuxmusl-arm64': 0.34.1 - '@img/sharp-linuxmusl-x64': 0.34.1 - '@img/sharp-wasm32': 0.34.1 - '@img/sharp-win32-ia32': 0.34.1 - '@img/sharp-win32-x64': 0.34.1 + '@img/sharp-darwin-arm64': 0.34.3 + '@img/sharp-darwin-x64': 0.34.3 + '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-linux-arm': 0.34.3 + '@img/sharp-linux-arm64': 0.34.3 + '@img/sharp-linux-ppc64': 0.34.3 + '@img/sharp-linux-s390x': 0.34.3 + '@img/sharp-linux-x64': 0.34.3 + '@img/sharp-linuxmusl-arm64': 0.34.3 + '@img/sharp-linuxmusl-x64': 0.34.3 + '@img/sharp-wasm32': 0.34.3 + '@img/sharp-win32-arm64': 0.34.3 + '@img/sharp-win32-ia32': 0.34.3 + '@img/sharp-win32-x64': 0.34.3 optional: true shebang-command@2.0.0: @@ -17426,8 +17452,6 @@ snapshots: stream-shift@1.0.3: {} - streamsearch@1.1.0: {} - strict-uri-encode@2.0.0: {} string-width@4.2.3: