diff --git a/queue-manager/queue-manager-demo/package.json b/queue-manager/queue-manager-demo/package.json index 7efcace36c..b58bde6bf0 100644 --- a/queue-manager/queue-manager-demo/package.json +++ b/queue-manager/queue-manager-demo/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "process": "^0.11.10", - "rango-sdk": "^0.1.74" + "rango-sdk": "^0.1.76" }, "dependencies": { "@rango-dev/provider-all": "^0.60.1-next.4", @@ -27,7 +27,7 @@ "@rango-dev/wallets-shared": "^0.58.1-next.2", "bignumber.js": "^9.1.1", "ethers": "^6.13.2", - "rango-sdk-basic": "^0.1.74", - "rango-types": "^0.1.95" + "rango-sdk-basic": "^0.1.76", + "rango-types": "^0.1.97" } } diff --git a/queue-manager/rango-preset/package.json b/queue-manager/rango-preset/package.json index 74cd4e6366..f029f33208 100644 --- a/queue-manager/rango-preset/package.json +++ b/queue-manager/rango-preset/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@rango-dev/logging-core": "^0.12.1", - "rango-types": "^0.1.95", + "rango-types": "^0.1.97", "ts-results": "^3.3.0", "uuid": "^9.0.0" }, diff --git a/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/checkHyperliquidTransactionStatus.ts b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/checkHyperliquidTransactionStatus.ts new file mode 100644 index 0000000000..ac0d6a50e2 --- /dev/null +++ b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/checkHyperliquidTransactionStatus.ts @@ -0,0 +1,94 @@ +import type { + SwapActionTypes, + SwapQueueContext, + SwapStorage, +} from '../../types'; +import type { NextTransactionStateError } from '../common/produceNextStateForTransaction'; +import type { ExecuterActions } from '@rango-dev/queue-manager-core'; +import type { Err } from 'ts-results'; + +import { warn } from '@rango-dev/logging-core'; + +import { + delay, + getCurrentStep, + getCurrentStepTx, + handleSuccessfulSign, +} from '../../helpers'; +import { getCurrentAddressOf } from '../../shared'; +import { onNextStateError } from '../common/produceNextStateForTransaction'; +import { ensureHyperliquidTransactionIsValid } from '../executeHyperliquidTransaction'; + +import { + GetHyperliquidTransactionHashError, + INTERVAL_FOR_CHECK_HYPERLIQUID_TRANSACTION_STATUS, +} from './constants'; +import { getHyperliquidTransactionHash } from './utils'; + +export async function checkHyperliquidTransactionStatus( + actions: ExecuterActions +): Promise { + const { failed, getStorage, retry } = actions; + + const swap = getStorage().swapDetails; + const currentStep = getCurrentStep(swap)!; + + const onFinish = () => { + if (actions.context.resetClaimedBy) { + actions.context.resetClaimedBy(); + } + }; + + const handleErr = (err: Err) => { + onNextStateError(actions, err.val); + failed(); + onFinish(); + }; + + const currentTransactionFromStorage = getCurrentStepTx(currentStep); + const walletAddress = getCurrentAddressOf(swap, currentStep); + + const hyperliquidTransactionResult = ensureHyperliquidTransactionIsValid( + currentTransactionFromStorage + ); + if (hyperliquidTransactionResult.err) { + handleErr(hyperliquidTransactionResult); + return; + } + + const hyperliquidTransaction = hyperliquidTransactionResult.val; + const nonce = hyperliquidTransaction.nonce; + + const hyperliquidTransactionHash = await getHyperliquidTransactionHash( + walletAddress, + nonce + ); + + if (hyperliquidTransactionHash.err) { + if ( + hyperliquidTransactionHash.val === + GetHyperliquidTransactionHashError.FETCH_ERROR || + hyperliquidTransactionHash.val === + GetHyperliquidTransactionHashError.RESPONSE_PARSING_ERROR + ) { + warn(new Error('check Hyperliquid transaction status Error'), { + tags: { + type: 'request-error', + requestBody: { type: 'userDetails', user: walletAddress, nonce }, + pendingSwap: swap, + }, + }); + } + + await delay(INTERVAL_FOR_CHECK_HYPERLIQUID_TRANSACTION_STATUS); + retry(); + return; + } + + handleSuccessfulSign(actions, { + isApproval: false, + })({ + hash: hyperliquidTransactionHash.val, + }); + onFinish(); +} diff --git a/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/constants.ts b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/constants.ts new file mode 100644 index 0000000000..07c8602376 --- /dev/null +++ b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/constants.ts @@ -0,0 +1,10 @@ +export const HYPERLIQUID_EXPLORER_API_URL = + 'https://rpc.hyperliquid.xyz/explorer'; + +export const INTERVAL_FOR_CHECK_HYPERLIQUID_TRANSACTION_STATUS = 5_000; + +export enum GetHyperliquidTransactionHashError { + FETCH_ERROR = 'FETCH_ERROR', + RESPONSE_PARSING_ERROR = 'RESPONSE_PARSING_ERROR', + TRANSACTION_NOT_FOUND = 'TRANSACTION_NOT_FOUND', +} diff --git a/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/index.ts b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/index.ts new file mode 100644 index 0000000000..f865fb883c --- /dev/null +++ b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/index.ts @@ -0,0 +1 @@ +export { checkHyperliquidTransactionStatus } from './checkHyperliquidTransactionStatus.js'; diff --git a/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/types.ts b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/types.ts new file mode 100644 index 0000000000..cf1b14af6e --- /dev/null +++ b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/types.ts @@ -0,0 +1,20 @@ +export type UserDetailsItem = { + time: number; + user: string; + action: { + type: string; + signatureChainId: `0x${string}`; + hyperliquidChain: 'Mainnet'; + destination: string; + amount: string; + time: number; + }; + block: number; + hash: string; + error: null; +}; + +export type UserDetailsResponse = { + type: 'userDetails'; + txs: UserDetailsItem[]; +}; diff --git a/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/utils.ts b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/utils.ts new file mode 100644 index 0000000000..4cccbd416b --- /dev/null +++ b/queue-manager/rango-preset/src/actions/checkHyperliquidTransactionStatus/utils.ts @@ -0,0 +1,50 @@ +import type { UserDetailsResponse } from './types'; +import type { Result } from 'ts-results'; + +import { Err, Ok } from 'ts-results'; + +import { + GetHyperliquidTransactionHashError, + HYPERLIQUID_EXPLORER_API_URL, +} from './constants'; + +export async function getHyperliquidTransactionHash( + walletAddress: string, + nonce: number +): Promise> { + let userDetailsResponse: Response; + try { + userDetailsResponse = await fetch(HYPERLIQUID_EXPLORER_API_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ type: 'userDetails', user: walletAddress }), + }); + } catch { + return new Err(GetHyperliquidTransactionHashError.FETCH_ERROR); + } + + let userDetailsJson: UserDetailsResponse; + try { + userDetailsJson = await userDetailsResponse.json(); + + if (!Array.isArray(userDetailsJson.txs)) { + return new Err(GetHyperliquidTransactionHashError.RESPONSE_PARSING_ERROR); + } + } catch { + return new Err(GetHyperliquidTransactionHashError.RESPONSE_PARSING_ERROR); + } + + const currentUserDetailsItem = userDetailsJson.txs.find( + (item) => + (item.action.type === 'withdraw3' || item.action.type === 'usdSend') && + item.action.time === nonce + ); + + if (!currentUserDetailsItem) { + return new Err(GetHyperliquidTransactionHashError.TRANSACTION_NOT_FOUND); + } + + return Ok(currentUserDetailsItem.hash); +} diff --git a/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/constants.ts b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/constants.ts new file mode 100644 index 0000000000..79253f3882 --- /dev/null +++ b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/constants.ts @@ -0,0 +1,2 @@ +export const HYPERLIQUID_EXCHANGE_API_URL = + 'https://api.hyperliquid.xyz/exchange'; diff --git a/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/executeHyperliquidTransaction.ts b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/executeHyperliquidTransaction.ts new file mode 100644 index 0000000000..9bac4b5deb --- /dev/null +++ b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/executeHyperliquidTransaction.ts @@ -0,0 +1,166 @@ +import type { SwapQueueContext, SwapStorage } from '../../types'; +import type { NextTransactionStateError } from '../common/produceNextStateForTransaction'; +import type { ExecuterActions } from '@rango-dev/queue-manager-core'; +import type { EvmTransaction } from 'rango-sdk'; + +import { type GenericSigner, TransactionType } from 'rango-types'; +import { Err } from 'ts-results'; + +import { + getCurrentStep, + getCurrentStepTx, + handleRejectedSign, +} from '../../helpers'; +import { getCurrentAddressOf, getRelatedWallet } from '../../shared'; +import { SwapActionTypes } from '../../types'; +import { checkEnvironmentBeforeExecuteTransaction } from '../common/checkEnvironmentBeforeExecuteTransaction'; +import { + onNextStateError, + onNextStateOk, + produceNextStateForTransaction, +} from '../common/produceNextStateForTransaction'; +import { requestBlockQueue } from '../common/utils'; + +import { + ensureHyperliquidTransactionIsValid, + getEthersV6CompatibleTypedDataFromMessage, + initiateWithdrawalRequest, + splitSignature, +} from './utils'; + +export async function executeHyperliquidTransaction( + actions: ExecuterActions +): Promise { + const checkResult = await checkEnvironmentBeforeExecuteTransaction(actions); + if (checkResult.err) { + requestBlockQueue(actions, checkResult.val); + return; + } + + const { failed, getStorage, context, schedule, next } = actions; + const { getSigners } = context; + + const swap = getStorage().swapDetails; + const currentStep = getCurrentStep(swap)!; + + const onFinish = () => { + if (actions.context.resetClaimedBy) { + actions.context.resetClaimedBy(); + } + }; + + const onSuccessfulFinish = () => { + schedule(SwapActionTypes.CHECK_HYPERLIQUID_TRANSACTION_STATUS); + next(); + onFinish(); + }; + + const handleErr = (err: Err) => { + onNextStateError(actions, err.val); + failed(); + onFinish(); + }; + + /* + * Checking the current transaction state to determine the next step. + * It will either be Err, indicating process should stop, or Ok, indicating process should continu. + */ + const nextStateResult = produceNextStateForTransaction(actions); + + if (nextStateResult.err) { + handleErr(nextStateResult); + return; + } + + // On sucess, we should update Swap object and also call notifier + onNextStateOk(actions, nextStateResult.val); + + // when we are producing next step, it will check to tx shouldn't be null. So ! here is safe. + const currentTransactionFromStorage = getCurrentStepTx(currentStep)!; + const hyperliquidTransactionResult = ensureHyperliquidTransactionIsValid( + currentTransactionFromStorage + ); + if (hyperliquidTransactionResult.err) { + handleErr(hyperliquidTransactionResult); + return; + } + const hyperliquidTransaction = hyperliquidTransactionResult.val; + + const sourceWallet = getRelatedWallet(swap, currentStep); + const walletAddress = getCurrentAddressOf(swap, currentStep); + + let signer: GenericSigner; + try { + const walletSigners = await getSigners(sourceWallet.walletType); + signer = walletSigners.getSigner(TransactionType.EVM); // We need EVM signer for Hyperliquid transactions + } catch (error) { + handleRejectedSign(actions)(error); + onFinish(); + return; + } + + if (!signer?.signTypedData) { + handleErr( + new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: Signer does not support signTypedData.', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }) + ); + return; + } + + const typedData = getEthersV6CompatibleTypedDataFromMessage( + hyperliquidTransaction.message + ); + if (typedData.err) { + handleErr(typedData); + return; + } + + let signature: `0x${string}`; + try { + signature = (await signer.signTypedData( + typedData.val, + walletAddress, + hyperliquidTransaction.action.signatureChainId + )) as `0x${string}`; + } catch (error) { + handleRejectedSign(actions)(error); + onFinish(); + return; + } + + const splitSignatureResult = splitSignature(signature); + if (splitSignatureResult.err) { + handleErr(splitSignatureResult); + return; + } + const splittedSignature = splitSignatureResult.val; + + const initiateWithdrawalResponse = await initiateWithdrawalRequest( + hyperliquidTransaction.action, + splittedSignature, + hyperliquidTransaction.nonce + ); + if (initiateWithdrawalResponse.err) { + handleErr(initiateWithdrawalResponse); + return; + } + + if (initiateWithdrawalResponse.val.status !== 'ok') { + handleErr( + new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: Failed to initiate withdrawal.', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }) + ); + } + + onSuccessfulFinish(); +} diff --git a/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/index.ts b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/index.ts new file mode 100644 index 0000000000..a8c9d74086 --- /dev/null +++ b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/index.ts @@ -0,0 +1,2 @@ +export { executeHyperliquidTransaction } from './executeHyperliquidTransaction.js'; +export { ensureHyperliquidTransactionIsValid } from './utils.js'; diff --git a/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/types.ts b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/types.ts new file mode 100644 index 0000000000..5189fa67bb --- /dev/null +++ b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/types.ts @@ -0,0 +1,5 @@ +export type EthersV6CompatibleTypedData = { + domain: unknown; + types: Record; + value: Record; +}; diff --git a/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/utils.ts b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/utils.ts new file mode 100644 index 0000000000..4207058482 --- /dev/null +++ b/queue-manager/rango-preset/src/actions/executeHyperliquidTransaction/utils.ts @@ -0,0 +1,155 @@ +/* eslint-disable @typescript-eslint/no-magic-numbers */ +import type { EthersV6CompatibleTypedData } from './types'; +import type { NextTransactionStateError } from '../common/produceNextStateForTransaction'; +import type { HyperliquidTransaction, Transaction } from 'rango-sdk'; +import type { Result } from 'ts-results'; + +import { mainAPI } from 'rango-types'; +import { Err, Ok } from 'ts-results'; + +import { HYPERLIQUID_EXCHANGE_API_URL } from './constants'; + +export function ensureHyperliquidTransactionIsValid( + tx: Transaction | null +): Result { + if (!tx) { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: tx is null!', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } + + if (!mainAPI.isHyperliquidTransaction(tx)) { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: + "Unexpected Error: Expected Hyperliquid transaction but it doesn't match with the structure.", + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } + + if (tx.action.type !== 'withdraw3' && tx.action.type !== 'usdSend') { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: Transaction action is not supported.', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } + + if (!tx.message) { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: Transaction message does not exist.', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } + + return Ok(tx); +} + +export function getEthersV6CompatibleTypedDataFromMessage( + message: string +): Result { + try { + const typedData = JSON.parse(message); + const ethersV6CompatibleTypedData = { + domain: typedData.domain, + types: { + [typedData.primaryType]: typedData.types[typedData.primaryType], + }, + value: typedData.message, + }; + return Ok(ethersV6CompatibleTypedData); + } catch { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: Could not infer typed data from message.', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } +} + +export async function initiateWithdrawalRequest( + action: HyperliquidTransaction['action'], + signature: Signature, + nonce: HyperliquidTransaction['nonce'] +): Promise> { + try { + const initiateWithdrawalResponse = await fetch( + HYPERLIQUID_EXCHANGE_API_URL, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + action, + signature, + nonce, + }), + } + ); + + const initiateWithdrawalResponseJson = + await initiateWithdrawalResponse.json(); + + return Ok(initiateWithdrawalResponseJson); + } catch { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: 'Unexpected Error: Failed to initiate withdrawal.', + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } +} + +interface Signature { + /** First 32-byte component of ECDSA signature. */ + r: string; + /** Second 32-byte component of ECDSA signature. */ + s: string; + /** Recovery identifier. */ + v: 27 | 28; +} +export function splitSignature( // validate and decode a 65-byte 0x… signature into { r, s, v } with v normalized to 27/28 for the Hyperliquid withdrawal request + signature: `0x${string}` +): Result { + if (signature.length !== 132) { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: `Expected 65-byte signature (132 hex chars), got ${signature.length}`, + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } + const r = `0x${signature.slice(2, 66)}`; + const s = `0x${signature.slice(66, 130)}`; + let v = parseInt(signature.slice(130, 132), 16); + if (v === 0 || v === 1) { + v += 27; + } + if (v !== 27 && v !== 28) { + return new Err({ + nextStatus: 'failed', + nextStepStatus: 'failed', + message: `Invalid signature recovery value: ${v}, expected 27 or 28`, + details: undefined, + errorCode: 'CLIENT_UNEXPECTED_BEHAVIOUR', + }); + } + return Ok({ r, s, v }); +} diff --git a/queue-manager/rango-preset/src/actions/scheduleNextStep.ts b/queue-manager/rango-preset/src/actions/scheduleNextStep.ts index f08b6057be..351f731001 100644 --- a/queue-manager/rango-preset/src/actions/scheduleNextStep.ts +++ b/queue-manager/rango-preset/src/actions/scheduleNextStep.ts @@ -40,6 +40,8 @@ export function scheduleNextStep({ if (isTxAlreadyCreated(swap, currentStep)) { if (currentStep.fromBlockchain === TransactionType.XRPL) { schedule(SwapActionTypes.CHECK_XRPL_TRUSTLINE); + } else if (currentStep.fromBlockchain === TransactionType.HYPERLIQUID) { + schedule(SwapActionTypes.EXECUTE_HYPERLIQUID_TRANSACTION); } else { schedule(SwapActionTypes.EXECUTE_TRANSACTION); } diff --git a/queue-manager/rango-preset/src/helpers.ts b/queue-manager/rango-preset/src/helpers.ts index cf2aa4d5eb..ddb9211d2b 100644 --- a/queue-manager/rango-preset/src/helpers.ts +++ b/queue-manager/rango-preset/src/helpers.ts @@ -175,6 +175,7 @@ export const getCurrentStepTx = ( tonTransaction, suiTransaction, xrplTransaction, + hyperliquidTransaction, } = currentStep; return ( evmTransaction || @@ -188,7 +189,8 @@ export const getCurrentStepTx = ( tronTransaction || tonTransaction || suiTransaction || - xrplTransaction + xrplTransaction || + hyperliquidTransaction ); }; @@ -214,6 +216,7 @@ export const setCurrentStepTx = ( currentStep.suiTransaction = null; currentStep.xrplTransaction = null; currentStep.stellarTransaction = null; + currentStep.hyperliquidTransaction = null; const txType = transaction.type; switch (txType) { @@ -259,6 +262,9 @@ export const setCurrentStepTx = ( case TransactionType.STELLAR: currentStep.stellarTransaction = transaction; break; + case TransactionType.HYPERLIQUID: + currentStep.hyperliquidTransaction = transaction; + break; default: ((x: never) => { throw new Error(`${x} was unhandled!`); @@ -782,6 +788,7 @@ export const isTxAlreadyCreated = ( swap.wallets[step.tonTransaction?.blockChain || ''] || swap.wallets[step.suiTransaction?.blockChain || ''] || swap.wallets[step.xrplTransaction?.blockChain || ''] || + swap.wallets[step.hyperliquidTransaction?.type || ''] || step.transferTransaction?.fromWalletAddress || null; diff --git a/queue-manager/rango-preset/src/queueDef.ts b/queue-manager/rango-preset/src/queueDef.ts index 91af6c04e4..7568899dc3 100644 --- a/queue-manager/rango-preset/src/queueDef.ts +++ b/queue-manager/rango-preset/src/queueDef.ts @@ -1,8 +1,10 @@ import type { SwapQueueDef } from './types'; +import { checkHyperliquidTransactionStatus } from './actions/checkHyperliquidTransactionStatus'; import { checkStatus } from './actions/checkStatus'; import { checkXrplTrustline } from './actions/checkXrplTrustline'; import { createTransaction } from './actions/createTransaction'; +import { executeHyperliquidTransaction } from './actions/executeHyperliquidTransaction'; import { executeTransaction } from './actions/executeTransaction'; import { executeXrplTransaction } from './actions/executeXrplTransaction'; import { scheduleNextStep } from './actions/scheduleNextStep'; @@ -30,6 +32,10 @@ export const swapQueueDef: SwapQueueDef = { [SwapActionTypes.EXECUTE_TRANSACTION]: executeTransaction, [SwapActionTypes.EXECUTE_XRPL_TRANSACTION]: executeXrplTransaction, [SwapActionTypes.CHECK_XRPL_TRUSTLINE]: checkXrplTrustline, + [SwapActionTypes.EXECUTE_HYPERLIQUID_TRANSACTION]: + executeHyperliquidTransaction, + [SwapActionTypes.CHECK_HYPERLIQUID_TRANSACTION_STATUS]: + checkHyperliquidTransactionStatus, [SwapActionTypes.CHECK_TRANSACTION_STATUS]: checkStatus, }, run: [SwapActionTypes.START], diff --git a/queue-manager/rango-preset/src/shared.ts b/queue-manager/rango-preset/src/shared.ts index f29bdc9b36..67f82aad65 100644 --- a/queue-manager/rango-preset/src/shared.ts +++ b/queue-manager/rango-preset/src/shared.ts @@ -1,4 +1,3 @@ -import type { NamespaceInputForConnect } from '@rango-dev/wallets-core/dist/legacy/types'; import type { Network, WalletType } from '@rango-dev/wallets-shared'; import type { BlockchainMeta, @@ -15,6 +14,8 @@ import type { WalletTypeAndAddress, } from 'rango-types'; +import { type NamespaceInputForConnect } from '@rango-dev/wallets-core/dist/legacy/types'; +import { HYPERLIQUID_SIGN_NETWORK } from '@rango-dev/wallets-shared'; import BigNumber from 'bignumber.js'; import { numberToString } from './numbers'; @@ -120,6 +121,7 @@ export const getCurrentNamespaceOf = ( const suiNetwork = step.suiTransaction?.blockChain; const xrplNetwork = step.xrplTransaction?.blockChain; const stellarNetwork = step.stellarTransaction?.blockChain; + const hyperliquidNetwork = step.hyperliquidTransaction?.type; if (evmNetwork) { return { @@ -166,6 +168,11 @@ export const getCurrentNamespaceOf = ( namespace: 'Stellar', network: stellarNetwork, }; + } else if (hyperliquidNetwork) { + return { + namespace: 'EVM', + network: HYPERLIQUID_SIGN_NETWORK, + }; } else if (!!step.transferTransaction) { const transferAddress = step.transferTransaction.fromWalletAddress; if (!transferAddress) { @@ -246,6 +253,7 @@ export const getCurrentWalletTypeAndAddress = ( swap.wallets[step.suiTransaction?.blockChain || ''] || swap.wallets[step.xrplTransaction?.blockChain || ''] || swap.wallets[step.stellarTransaction?.blockChain || ''] || + swap.wallets[step.hyperliquidTransaction?.type || ''] || (step.transferTransaction?.fromWalletAddress ? { address: step.transferTransaction.fromWalletAddress, @@ -480,6 +488,7 @@ export function calculatePendingSwap(params: { suiTransaction: null, xrplTransaction: null, stellarTransaction: null, + hyperliquidTransaction: null, // front fields hasAlreadyProceededToSign: false, diff --git a/queue-manager/rango-preset/src/types.ts b/queue-manager/rango-preset/src/types.ts index a02bde8f4d..efd77322b3 100644 --- a/queue-manager/rango-preset/src/types.ts +++ b/queue-manager/rango-preset/src/types.ts @@ -45,6 +45,8 @@ export enum SwapActionTypes { EXECUTE_TRANSACTION = 'EXECUTE_TRANSACTION', EXECUTE_XRPL_TRANSACTION = 'EXECUTE_XRPL_TRANSACTION', CHECK_XRPL_TRUSTLINE = 'CHECK_XRPL_TRUSTLINE', + EXECUTE_HYPERLIQUID_TRANSACTION = 'EXECUTE_HYPERLIQUID_TRANSACTION', + CHECK_HYPERLIQUID_TRANSACTION_STATUS = 'CHECK_HYPERLIQUID_TRANSACTION_STATUS', CHECK_TRANSACTION_STATUS = 'CHECK_TRANSACTION_STATUS', } diff --git a/signers/signer-cosmos/package.json b/signers/signer-cosmos/package.json index 8f93b2152a..234097c239 100644 --- a/signers/signer-cosmos/package.json +++ b/signers/signer-cosmos/package.json @@ -26,7 +26,7 @@ "@keplr-wallet/cosmos": "^0.9.12", "cosmjs-types": "^0.5.2", "long": "^5.2.3", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "devDependencies": { "@keplr-wallet/types": "^0.9.12" diff --git a/signers/signer-evm/package.json b/signers/signer-evm/package.json index c0f583ba00..3e35ca4e4a 100644 --- a/signers/signer-evm/package.json +++ b/signers/signer-evm/package.json @@ -25,7 +25,7 @@ }, "dependencies": { "ethers": "^6.13.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/signers/signer-evm/src/signer.ts b/signers/signer-evm/src/signer.ts index 2b45bcf98c..2500d9aa11 100644 --- a/signers/signer-evm/src/signer.ts +++ b/signers/signer-evm/src/signer.ts @@ -1,3 +1,4 @@ +import type { TypedData } from './types.js'; import type { AbstractProvider, Eip1193Provider, @@ -97,6 +98,21 @@ export class DefaultEvmSigner implements GenericSigner { return tx; } + async signTypedData(typedData: TypedData): Promise { + try { + const signer = await this.provider.getSigner(); + const signature = await signer.signTypedData( + typedData.domain, + typedData.types, + typedData.value + ); + + return signature; + } catch (error) { + throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error); + } + } + async signMessage(msg: string): Promise { try { const signer = await this.provider.getSigner(); // provides access to write operations @@ -144,6 +160,7 @@ export class DefaultEvmSigner implements GenericSigner { try { const response = await signer.sendTransaction(transaction); return { hash: response.hash, response }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { // retrying EIP-1559 without v2 related fields if ( diff --git a/signers/signer-evm/src/types.ts b/signers/signer-evm/src/types.ts new file mode 100644 index 0000000000..a2a4237d6b --- /dev/null +++ b/signers/signer-evm/src/types.ts @@ -0,0 +1,7 @@ +import type { TypedDataDomain, TypedDataField } from 'ethers'; + +export type TypedData = { + domain: TypedDataDomain; + types: Record>; + value: Record; +}; diff --git a/signers/signer-solana/package.json b/signers/signer-solana/package.json index bd4ef22632..ba556c0766 100644 --- a/signers/signer-solana/package.json +++ b/signers/signer-solana/package.json @@ -24,7 +24,7 @@ "@solana/web3.js": "^1.91.4", "bs58": "^5.0.0", "promise-retry": "^2.0.1", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "devDependencies": { "@types/promise-retry": "^1.1.6" diff --git a/signers/signer-starknet/package.json b/signers/signer-starknet/package.json index 920009a409..b77cfbcc99 100644 --- a/signers/signer-starknet/package.json +++ b/signers/signer-starknet/package.json @@ -21,7 +21,7 @@ "lint": "eslint \"**/*.{ts,tsx}\"" }, "dependencies": { - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/signers/signer-sui/package.json b/signers/signer-sui/package.json index ead5a0f540..7f06adff22 100644 --- a/signers/signer-sui/package.json +++ b/signers/signer-sui/package.json @@ -21,7 +21,7 @@ "lint": "eslint \"**/*.{ts,tsx}\"" }, "dependencies": { - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "devDependencies": { "@mysten/sui": "^1.21.2", diff --git a/signers/signer-ton/package.json b/signers/signer-ton/package.json index d6f3300785..6aad76bdb2 100644 --- a/signers/signer-ton/package.json +++ b/signers/signer-ton/package.json @@ -21,7 +21,7 @@ "lint": "eslint \"**/*.{ts,tsx}\"" }, "dependencies": { - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "peerDependencies": { "@ton/core": ">=0.59.0", diff --git a/signers/signer-tron/package.json b/signers/signer-tron/package.json index f9a4c37261..64d23da500 100644 --- a/signers/signer-tron/package.json +++ b/signers/signer-tron/package.json @@ -21,7 +21,7 @@ "lint": "eslint \"**/*.{ts,tsx}\"" }, "dependencies": { - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/core/package.json b/wallets/core/package.json index 55c8899ebe..5e865216d0 100644 --- a/wallets/core/package.json +++ b/wallets/core/package.json @@ -85,7 +85,7 @@ "@chain-registry/types": "2.0.110", "caip": "^1.1.1", "immer": "^10.0.4", - "rango-types": "^0.1.95", + "rango-types": "^0.1.97", "zustand": "^4.5.2" }, "devDependencies": { diff --git a/wallets/core/src/legacy/types.ts b/wallets/core/src/legacy/types.ts index 6c75f716fb..31d91995c4 100644 --- a/wallets/core/src/legacy/types.ts +++ b/wallets/core/src/legacy/types.ts @@ -73,6 +73,7 @@ export enum Networks { BASE = 'BASE', SUI = 'SUI', XRPL = 'XRPL', + HYPERLIQUID = 'HYPERLIQUID', // Using instead of null Unknown = 'Unkown', diff --git a/wallets/provider-binance/package.json b/wallets/provider-binance/package.json index 1b1904c712..b38a3342fc 100644 --- a/wallets/provider-binance/package.json +++ b/wallets/provider-binance/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-bitget/package.json b/wallets/provider-bitget/package.json index af753a164f..40ccf958e9 100644 --- a/wallets/provider-bitget/package.json +++ b/wallets/provider-bitget/package.json @@ -25,7 +25,7 @@ "@rango-dev/signer-tron": "^0.39.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-bitget/src/constants.ts b/wallets/provider-bitget/src/constants.ts index e486be7b68..31d55810ec 100644 --- a/wallets/provider-bitget/src/constants.ts +++ b/wallets/provider-bitget/src/constants.ts @@ -3,6 +3,7 @@ import { LegacyNetworks } from '@rango-dev/wallets-core/legacy'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, type TransferBlockchainMeta, tronBlockchain, } from 'rango-types'; @@ -32,8 +33,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Tron', diff --git a/wallets/provider-braavos/package.json b/wallets/provider-braavos/package.json index 0d25d2e14e..2968ce4206 100644 --- a/wallets/provider-braavos/package.json +++ b/wallets/provider-braavos/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-starknet": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-brave/package.json b/wallets/provider-brave/package.json index dce27c08b9..531d58334f 100644 --- a/wallets/provider-brave/package.json +++ b/wallets/provider-brave/package.json @@ -25,7 +25,7 @@ "@rango-dev/signer-solana": "^0.46.2-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-brave/src/constants.ts b/wallets/provider-brave/src/constants.ts index c8910c4e5f..c62773a21b 100644 --- a/wallets/provider-brave/src/constants.ts +++ b/wallets/provider-brave/src/constants.ts @@ -2,6 +2,7 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, solanaBlockchain, } from 'rango-types'; @@ -25,8 +26,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Solana', diff --git a/wallets/provider-coin98/package.json b/wallets/provider-coin98/package.json index abf6cd0a0d..baea196e49 100644 --- a/wallets/provider-coin98/package.json +++ b/wallets/provider-coin98/package.json @@ -27,7 +27,7 @@ "@rango-dev/wallets-shared": "^0.58.1-next.2", "@solana/web3.js": "^1.91.4", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-coin98/src/constants.ts b/wallets/provider-coin98/src/constants.ts index fc1f3c2fd1..1ca79a0ab1 100644 --- a/wallets/provider-coin98/src/constants.ts +++ b/wallets/provider-coin98/src/constants.ts @@ -4,6 +4,7 @@ import { WalletTypes } from '@rango-dev/wallets-shared'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, solanaBlockchain, } from 'rango-types'; @@ -32,8 +33,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Solana', diff --git a/wallets/provider-coinbase/package.json b/wallets/provider-coinbase/package.json index 324093a420..f6b78c06a4 100644 --- a/wallets/provider-coinbase/package.json +++ b/wallets/provider-coinbase/package.json @@ -26,7 +26,7 @@ "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-coinbase/src/constants.ts b/wallets/provider-coinbase/src/constants.ts index ad9a8fd0ff..b151cea84d 100644 --- a/wallets/provider-coinbase/src/constants.ts +++ b/wallets/provider-coinbase/src/constants.ts @@ -2,6 +2,7 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, solanaBlockchain, } from 'rango-types'; @@ -30,8 +31,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Solana', diff --git a/wallets/provider-cosmostation/package.json b/wallets/provider-cosmostation/package.json index 54d7d0ab71..7b9e63b00e 100644 --- a/wallets/provider-cosmostation/package.json +++ b/wallets/provider-cosmostation/package.json @@ -26,7 +26,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-cosmostation/src/constants.ts b/wallets/provider-cosmostation/src/constants.ts index 8acad9e7f5..b7b7095763 100644 --- a/wallets/provider-cosmostation/src/constants.ts +++ b/wallets/provider-cosmostation/src/constants.ts @@ -3,6 +3,7 @@ import { type BlockchainMeta, cosmosBlockchains, evmBlockchains, + hyperliquidBlockchain, } from 'rango-types'; import getSigners from './signer.js'; @@ -30,8 +31,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Cosmos', diff --git a/wallets/provider-default/package.json b/wallets/provider-default/package.json index 0b07f2b8b2..00e6a9bc79 100644 --- a/wallets/provider-default/package.json +++ b/wallets/provider-default/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-enkrypt/package.json b/wallets/provider-enkrypt/package.json index 69f76f94d4..611d2fd451 100644 --- a/wallets/provider-enkrypt/package.json +++ b/wallets/provider-enkrypt/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-enkrypt/src/constants.ts b/wallets/provider-enkrypt/src/constants.ts index cdc658bfe6..d787d16ea9 100644 --- a/wallets/provider-enkrypt/src/constants.ts +++ b/wallets/provider-enkrypt/src/constants.ts @@ -1,5 +1,9 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; -import { type BlockchainMeta, evmBlockchains } from 'rango-types'; +import { + type BlockchainMeta, + evmBlockchains, + hyperliquidBlockchain, +} from 'rango-types'; import getSigners from './signer.js'; import { getInstanceOrThrow } from './utils.js'; @@ -28,8 +32,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, ], }, diff --git a/wallets/provider-exodus/package.json b/wallets/provider-exodus/package.json index 598a0856f8..8c5ab37ae9 100644 --- a/wallets/provider-exodus/package.json +++ b/wallets/provider-exodus/package.json @@ -26,7 +26,7 @@ "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-keplr/package.json b/wallets/provider-keplr/package.json index 0a50539316..91a1a3dc45 100644 --- a/wallets/provider-keplr/package.json +++ b/wallets/provider-keplr/package.json @@ -32,7 +32,7 @@ "@rango-dev/signer-cosmos": "^0.38.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "devDependencies": { "@keplr-wallet/types": "^0.11.21" diff --git a/wallets/provider-leap-cosmos/package.json b/wallets/provider-leap-cosmos/package.json index 33e335bb77..f62d6409ea 100644 --- a/wallets/provider-leap-cosmos/package.json +++ b/wallets/provider-leap-cosmos/package.json @@ -25,7 +25,7 @@ "@rango-dev/signer-cosmos": "^0.38.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-ledger/package.json b/wallets/provider-ledger/package.json index 6697138b52..422d3161b7 100644 --- a/wallets/provider-ledger/package.json +++ b/wallets/provider-ledger/package.json @@ -34,7 +34,7 @@ "@types/w3c-web-hid": "^1.0.2", "bs58": "^5.0.0", "ethers": "^6.13.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-math-wallet/package.json b/wallets/provider-math-wallet/package.json index c89c31ec7f..b170b33d20 100644 --- a/wallets/provider-math-wallet/package.json +++ b/wallets/provider-math-wallet/package.json @@ -25,7 +25,7 @@ "@rango-dev/signer-solana": "^0.46.2-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-math-wallet/src/constants.ts b/wallets/provider-math-wallet/src/constants.ts index 0cb00e26d1..8d0315e745 100644 --- a/wallets/provider-math-wallet/src/constants.ts +++ b/wallets/provider-math-wallet/src/constants.ts @@ -2,6 +2,7 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, solanaBlockchain, } from 'rango-types'; @@ -30,8 +31,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Solana', diff --git a/wallets/provider-metamask/package.json b/wallets/provider-metamask/package.json index 13c5987464..a6466a1b3c 100644 --- a/wallets/provider-metamask/package.json +++ b/wallets/provider-metamask/package.json @@ -27,7 +27,7 @@ "@rango-dev/wallets-shared": "^0.58.1-next.2", "@wallet-standard/app": "^1.1.0", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "devDependencies": { "@solana/wallet-standard-features": "^1.3.0", diff --git a/wallets/provider-metamask/src/constants.ts b/wallets/provider-metamask/src/constants.ts index f83fee9897..2166d71485 100644 --- a/wallets/provider-metamask/src/constants.ts +++ b/wallets/provider-metamask/src/constants.ts @@ -2,6 +2,7 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, solanaBlockchain, } from 'rango-types'; @@ -33,8 +34,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Solana', diff --git a/wallets/provider-okx/package.json b/wallets/provider-okx/package.json index 59545aa0bf..3140642faf 100644 --- a/wallets/provider-okx/package.json +++ b/wallets/provider-okx/package.json @@ -25,7 +25,7 @@ "@rango-dev/signer-solana": "^0.46.2-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-phantom/package.json b/wallets/provider-phantom/package.json index 613bed34f3..15d007da3c 100644 --- a/wallets/provider-phantom/package.json +++ b/wallets/provider-phantom/package.json @@ -29,7 +29,7 @@ "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", "bitcoinjs-lib": "^6.1.7", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-rabby/package.json b/wallets/provider-rabby/package.json index c2715369a1..29b71157ea 100644 --- a/wallets/provider-rabby/package.json +++ b/wallets/provider-rabby/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-rabby/src/constants.ts b/wallets/provider-rabby/src/constants.ts index 57014195da..95aa7532fd 100644 --- a/wallets/provider-rabby/src/constants.ts +++ b/wallets/provider-rabby/src/constants.ts @@ -1,5 +1,9 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; -import { type BlockchainMeta, evmBlockchains } from 'rango-types'; +import { + type BlockchainMeta, + evmBlockchains, + hyperliquidBlockchain, +} from 'rango-types'; import getSigners from './signer.js'; import { evmRabby } from './utils.js'; @@ -27,8 +31,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, ], }, diff --git a/wallets/provider-ready/package.json b/wallets/provider-ready/package.json index 90dae71a4b..c7729d5a40 100644 --- a/wallets/provider-ready/package.json +++ b/wallets/provider-ready/package.json @@ -20,7 +20,7 @@ "@rango-dev/signer-starknet": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-safe/package.json b/wallets/provider-safe/package.json index 56b9e2fa81..75fe044053 100644 --- a/wallets/provider-safe/package.json +++ b/wallets/provider-safe/package.json @@ -27,7 +27,7 @@ "@safe-global/safe-apps-provider": "^0.17.0", "@safe-global/safe-apps-sdk": "^9.1.0", "ethers": "^6.13.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-safepal/package.json b/wallets/provider-safepal/package.json index 6a6121caaa..c0186568c7 100644 --- a/wallets/provider-safepal/package.json +++ b/wallets/provider-safepal/package.json @@ -25,7 +25,7 @@ "@rango-dev/signer-solana": "^0.46.2-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-safepal/src/constants.ts b/wallets/provider-safepal/src/constants.ts index 5c48693404..50eec76ace 100644 --- a/wallets/provider-safepal/src/constants.ts +++ b/wallets/provider-safepal/src/constants.ts @@ -1,5 +1,9 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; -import { type BlockchainMeta, evmBlockchains } from 'rango-types'; +import { + type BlockchainMeta, + evmBlockchains, + hyperliquidBlockchain, +} from 'rango-types'; import getSigners from './signer.js'; import { getInstanceOrThrow } from './utils.js'; @@ -27,8 +31,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, ], }, diff --git a/wallets/provider-slush/package.json b/wallets/provider-slush/package.json index 759a98e4bf..5a40857e15 100644 --- a/wallets/provider-slush/package.json +++ b/wallets/provider-slush/package.json @@ -26,7 +26,7 @@ "@rango-dev/signer-sui": "^0.8.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-solflare/package.json b/wallets/provider-solflare/package.json index 4920edcf54..57a3163037 100644 --- a/wallets/provider-solflare/package.json +++ b/wallets/provider-solflare/package.json @@ -26,7 +26,7 @@ "@rango-dev/wallets-shared": "^0.58.1-next.2", "@solana/web3.js": "^1.91.4", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-taho/package.json b/wallets/provider-taho/package.json index d7610ce49c..4feb48614a 100644 --- a/wallets/provider-taho/package.json +++ b/wallets/provider-taho/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-tokenpocket/package.json b/wallets/provider-tokenpocket/package.json index 51dd9745d7..30b000bcb3 100644 --- a/wallets/provider-tokenpocket/package.json +++ b/wallets/provider-tokenpocket/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-tokenpocket/src/constants.ts b/wallets/provider-tokenpocket/src/constants.ts index b71ae8beae..f78a2afdfa 100644 --- a/wallets/provider-tokenpocket/src/constants.ts +++ b/wallets/provider-tokenpocket/src/constants.ts @@ -1,5 +1,9 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; -import { type BlockchainMeta, evmBlockchains } from 'rango-types'; +import { + type BlockchainMeta, + evmBlockchains, + hyperliquidBlockchain, +} from 'rango-types'; import getSigners from './signer.js'; import { getInstanceOrThrow } from './utils.js'; @@ -25,8 +29,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, ], }, diff --git a/wallets/provider-tomo/package.json b/wallets/provider-tomo/package.json index 9da26b01fc..3d22faf04f 100644 --- a/wallets/provider-tomo/package.json +++ b/wallets/provider-tomo/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-evm": "^0.40.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-tomo/src/constants.ts b/wallets/provider-tomo/src/constants.ts index 8d13360d85..5db3efa20e 100644 --- a/wallets/provider-tomo/src/constants.ts +++ b/wallets/provider-tomo/src/constants.ts @@ -1,7 +1,11 @@ import type { ProviderMetadata } from '@rango-dev/wallets-core'; import { WalletTypes } from '@rango-dev/wallets-shared'; -import { type BlockchainMeta, evmBlockchains } from 'rango-types'; +import { + type BlockchainMeta, + evmBlockchains, + hyperliquidBlockchain, +} from 'rango-types'; import getSigners from './signer.js'; import { getInstanceOrThrow } from './utils.js'; @@ -28,8 +32,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, ], }, diff --git a/wallets/provider-tonconnect/package.json b/wallets/provider-tonconnect/package.json index a6db603717..b372c773a4 100644 --- a/wallets/provider-tonconnect/package.json +++ b/wallets/provider-tonconnect/package.json @@ -28,7 +28,7 @@ "@ton/core": "^0.59.0", "@ton/crypto": "^3.3.0", "@tonconnect/ui": "^2.0.9", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-trezor/package.json b/wallets/provider-trezor/package.json index dd373b62d8..790fbfa9f3 100644 --- a/wallets/provider-trezor/package.json +++ b/wallets/provider-trezor/package.json @@ -28,7 +28,7 @@ "@rango-dev/wallets-shared": "^0.58.1-next.2", "@trezor/connect-web": "^9.5.0", "ethers": "^6.13.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-tron-link/package.json b/wallets/provider-tron-link/package.json index 98658b77b8..12d82d4469 100644 --- a/wallets/provider-tron-link/package.json +++ b/wallets/provider-tron-link/package.json @@ -24,7 +24,7 @@ "@rango-dev/signer-tron": "^0.39.1-next.0", "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-trustwallet/package.json b/wallets/provider-trustwallet/package.json index 915cf87401..9caf5facdc 100644 --- a/wallets/provider-trustwallet/package.json +++ b/wallets/provider-trustwallet/package.json @@ -25,7 +25,7 @@ "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-trustwallet/src/constants.ts b/wallets/provider-trustwallet/src/constants.ts index cc249e1354..83326334d9 100644 --- a/wallets/provider-trustwallet/src/constants.ts +++ b/wallets/provider-trustwallet/src/constants.ts @@ -2,6 +2,7 @@ import { type ProviderMetadata } from '@rango-dev/wallets-core'; import { type BlockchainMeta, evmBlockchains, + hyperliquidBlockchain, solanaBlockchain, } from 'rango-types'; @@ -30,8 +31,10 @@ export const metadata: ProviderMetadata = { label: 'EVM', value: 'EVM', id: 'ETH', - getSupportedChains: (allBlockchains: BlockchainMeta[]) => - evmBlockchains(allBlockchains), + getSupportedChains: (allBlockchains: BlockchainMeta[]) => [ + ...evmBlockchains(allBlockchains), + ...hyperliquidBlockchain(allBlockchains), + ], }, { label: 'Solana', diff --git a/wallets/provider-unisat/package.json b/wallets/provider-unisat/package.json index dcae013e09..817cca3e5f 100644 --- a/wallets/provider-unisat/package.json +++ b/wallets/provider-unisat/package.json @@ -24,7 +24,7 @@ "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", "bitcoinjs-lib": "^6.1.7", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-walletconnect-2/package.json b/wallets/provider-walletconnect-2/package.json index 693d4c8ff2..5963d139ca 100644 --- a/wallets/provider-walletconnect-2/package.json +++ b/wallets/provider-walletconnect-2/package.json @@ -36,7 +36,7 @@ "bs58": "^5.0.0", "caip": "^1.1.1", "cosmos-wallet": "^1.2.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "devDependencies": { "@walletconnect/modal": "^2.6.2", diff --git a/wallets/provider-xdefi/package.json b/wallets/provider-xdefi/package.json index 16fc942cf1..540c6e3734 100644 --- a/wallets/provider-xdefi/package.json +++ b/wallets/provider-xdefi/package.json @@ -27,7 +27,7 @@ "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", "bs58": "^5.0.0", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/provider-xverse/package.json b/wallets/provider-xverse/package.json index ea59083f88..9b8a8779ea 100644 --- a/wallets/provider-xverse/package.json +++ b/wallets/provider-xverse/package.json @@ -23,7 +23,7 @@ "dependencies": { "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/react/package.json b/wallets/react/package.json index 37cff95785..426015e894 100644 --- a/wallets/react/package.json +++ b/wallets/react/package.json @@ -37,7 +37,7 @@ "dependencies": { "@rango-dev/wallets-core": "^0.57.1-next.0", "@rango-dev/wallets-shared": "^0.58.1-next.2", - "rango-types": "^0.1.95", + "rango-types": "^0.1.97", "ts-results": "^3.3.0" }, "devDependencies": { diff --git a/wallets/shared/package.json b/wallets/shared/package.json index 3050033776..3634fecef7 100644 --- a/wallets/shared/package.json +++ b/wallets/shared/package.json @@ -29,7 +29,7 @@ "dependencies": { "@rango-dev/wallets-core": "^0.57.1-next.0", "ethers": "^6.13.2", - "rango-types": "^0.1.95" + "rango-types": "^0.1.97" }, "publishConfig": { "access": "public" diff --git a/wallets/shared/src/rango.ts b/wallets/shared/src/rango.ts index 2e8fc70ca1..646a09293b 100644 --- a/wallets/shared/src/rango.ts +++ b/wallets/shared/src/rango.ts @@ -173,6 +173,7 @@ export const KEPLR_COMPATIBLE_WALLETS: string[] = [ WalletTypes.XDEFI, ]; +export const HYPERLIQUID_SIGN_NETWORK = Networks.ARBITRUM; export const DEFAULT_COSMOS_RPC_URL = 'https://cosmos-rpc.polkachu.com'; export const ETHEREUM_CHAIN_ID = '0x1'; export const DEFAULT_ETHEREUM_RPC_URL = diff --git a/widget/embedded/package.json b/widget/embedded/package.json index 925feed074..e0ec54a226 100644 --- a/widget/embedded/package.json +++ b/widget/embedded/package.json @@ -40,8 +40,8 @@ "ethers": "^6.13.2", "immer": "^9.0.19", "mitt": "^3.0.0", - "rango-sdk": "^0.1.74", - "rango-types": "^0.1.95", + "rango-sdk": "^0.1.76", + "rango-types": "^0.1.97", "react-i18next": "^12.2.0", "react-router-dom": "^6.8.0", "values.js": "2.1.1", diff --git a/widget/embedded/src/utils/wallets.ts b/widget/embedded/src/utils/wallets.ts index 46ee9bd7f1..7973bbb399 100644 --- a/widget/embedded/src/utils/wallets.ts +++ b/widget/embedded/src/utils/wallets.ts @@ -24,6 +24,7 @@ import { legacyReadAccountAddress as readAccountAddress } from '@rango-dev/walle import { detectInstallLink, getCosmosExperimentalChainInfo, + HYPERLIQUID_SIGN_NETWORK, isEvmAddress, KEPLR_COMPATIBLE_WALLETS, Networks, @@ -226,6 +227,14 @@ export function prepareAccountsForWalletStore( */ addAccount(network, address.toLowerCase()); }); + + const shouldAddHyperliquidAccount = evmChainsSupportedByWallet.includes( + HYPERLIQUID_SIGN_NETWORK + ); + + if (shouldAddHyperliquidAccount) { + addAccount(Networks.HYPERLIQUID, address.toLowerCase()); + } } } else { addAccount(network, address); diff --git a/widget/playground/package.json b/widget/playground/package.json index f94e24a42e..b80d9fdc93 100644 --- a/widget/playground/package.json +++ b/widget/playground/package.json @@ -27,7 +27,7 @@ "@rango-dev/wallets-react": "^0.44.1-next.2", "@rango-dev/wallets-shared": "^0.58.1-next.2", "@rango-dev/widget-embedded": "^0.58.1-next.6", - "rango-sdk": "^0.1.74", + "rango-sdk": "^0.1.76", "react": "^18.2.0", "react-color": "^2.19.3", "react-dom": "^18.2.0", diff --git a/widget/ui/package.json b/widget/ui/package.json index 74b904182e..da79b6b580 100644 --- a/widget/ui/package.json +++ b/widget/ui/package.json @@ -56,7 +56,7 @@ "@rango-dev/wallets-shared": "^0.58.1-next.2", "@stitches/react": "^1.2.8", "copy-to-clipboard": "^3.3.3", - "rango-types": "^0.1.95", + "rango-types": "^0.1.97", "react-virtuoso": "^4.6.2" }, "publishConfig": { diff --git a/yarn.lock b/yarn.lock index 5e5cfd1dbd..1dd52d8ab8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18013,28 +18013,28 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -rango-sdk-basic@^0.1.74: - version "0.1.74" - resolved "https://registry.yarnpkg.com/rango-sdk-basic/-/rango-sdk-basic-0.1.74.tgz#2a724b67173876cd17f54d8574e614bc1398ba46" - integrity sha512-+Ew69eNZl1z1IAoqo12VcMc/FgHwzHShtcz/FPQFr2ZdNXvAD3DoF5p977XpazkNYLClWZOM0IhBXQMJI6OR+A== +rango-sdk-basic@^0.1.76: + version "0.1.76" + resolved "https://registry.yarnpkg.com/rango-sdk-basic/-/rango-sdk-basic-0.1.76.tgz#fd47df4165b16809ed60429a158ac0d1affde147" + integrity sha512-SRt5a4c/XzGGKr9VONwXsALzUdhHd2Ysjf8JJLYWqglgwrdmf6tOLFst9jn4CLuuhrrQPHz7pbSdr9LC7gn2ZQ== dependencies: axios "^1.7.4" - rango-types "^0.1.95" + rango-types "^0.1.97" uuid-random "^1.3.2" -rango-sdk@^0.1.74: - version "0.1.74" - resolved "https://registry.yarnpkg.com/rango-sdk/-/rango-sdk-0.1.74.tgz#7059bee618776e9cdac2b598df7b88e6aa4c547c" - integrity sha512-rR0k2eiJ/HHvrC1Wg1Byl7ZVzXeQysAN2+d4Hg1D3So2mZIfB2AOD0It4bPL0xcz3d4wneD+5/WgoSxJWSC2sg== +rango-sdk@^0.1.76: + version "0.1.76" + resolved "https://registry.yarnpkg.com/rango-sdk/-/rango-sdk-0.1.76.tgz#9ed830232d74b0d3f480ab7dea44eb1ef6be5eea" + integrity sha512-4va4v/xEQ2FtnEAdhkp8+cJ2cvIixHTTUD+Q5YpkYt6C4iwFepkei7J+oOjXdiDsr3E/yVX8/NI1qJ0y1qz6Gw== dependencies: axios "^1.7.4" - rango-types "^0.1.95" + rango-types "^0.1.97" uuid-random "^1.3.2" -rango-types@^0.1.95: - version "0.1.95" - resolved "https://registry.yarnpkg.com/rango-types/-/rango-types-0.1.95.tgz#5c8c51226b58cd1fb2b3aedf6cf726e01dcdda03" - integrity sha512-3WQXGYX+QP90OmWzuIA6JoeCPeC0ZgcLxvAvLxmJ9ld4jczN5EUMLmRQE5R6gq+G9H37ZQe1ks6nZSm6O0xT0A== +rango-types@^0.1.97: + version "0.1.97" + resolved "https://registry.yarnpkg.com/rango-types/-/rango-types-0.1.97.tgz#2cf7a88018f5602058d48aa2c47da8624e336e2f" + integrity sha512-3GmizxMCEOul14QTB/s6pMCIFPDydiZE2pnMFePsAxeynge0WcR/0fBe2q/R4yATGqkEAyjwJGBGuix8bcn5tw== raw-body@2.5.2: version "2.5.2" @@ -19582,7 +19582,16 @@ string-argv@0.3.2: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -19709,7 +19718,14 @@ stringify-object@^5.0.0: is-obj "^3.0.0" is-regexp "^3.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -21393,7 +21409,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -21411,6 +21427,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"