Merge branch 'main' into main-to-injective

pull/243/head
J M Rossy 1 month ago
commit cf856853fa
  1. 46
      .github/workflows/create-merge-prs.yaml
  2. 12
      package.json
  3. 13
      src/components/banner/FormWarningBanner.tsx
  4. 37
      src/components/banner/WarningBanner.tsx
  5. 45
      src/consts/chains.ts
  6. 5
      src/consts/config.ts
  7. 48
      src/features/chains/ChainWalletWarning.tsx
  8. 14
      src/features/chains/utils.ts
  9. 16
      src/features/transfer/TransferTokenForm.tsx
  10. 4
      src/features/wallet/SideBarMenu.tsx
  11. 4
      src/features/wallet/WalletEnvSelectionModal.tsx
  12. 8
      src/features/wallet/context/SolanaWalletContext.tsx
  13. 23
      src/features/wallet/hooks/solana.ts
  14. 3
      src/images/icons/warning.svg
  15. 299
      yarn.lock

@ -0,0 +1,46 @@
name: Merge Main to Other Branches
on:
push:
branches:
- main
jobs:
create-merge-prs:
runs-on: ubuntu-latest
strategy:
matrix:
name: [ezeth, injective, nexus]
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "GitHub Actions Bot"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Create and push merge branch
run: |
git checkout ${{ matrix.name }}
git merge origin/main
git checkout -b main-to-${{ matrix.name }}
git push -fu origin main-to-${{ matrix.name }}
- name: Check and Create Pull Request
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PR_EXISTS=$(gh pr list --base ${{ matrix.name }} --head main-to-${{ matrix.name }} --json number --jq length)
if [ "$PR_EXISTS" -eq "0" ]; then
gh pr create \
--base ${{ matrix.name }} \
--head main-to-${{ matrix.name }} \
--title "chore: merge main into ${{ matrix.name }}" \
--body "This PR was automatically created to merge changes from \`main\` into \`${{ matrix.name }}\`." \
--draft
else
echo "Pull request already exists. Skipping creation."
fi

@ -1,7 +1,7 @@
{
"name": "@hyperlane-xyz/warp-ui-template",
"description": "A web app template for building Hyperlane Warp Route UIs",
"version": "5.0.0",
"version": "5.1.0",
"author": "J M Rossy",
"dependencies": {
"@chakra-ui/next-js": "^2.2.0",
@ -13,13 +13,14 @@
"@cosmos-kit/keplr": "^2.12.2",
"@cosmos-kit/leap": "^2.12.2",
"@cosmos-kit/react": "^2.18.0",
"@drift-labs/snap-wallet-adapter": "^0.3.0",
"@emotion/react": "^11.13.0",
"@emotion/styled": "^11.13.0",
"@headlessui/react": "^1.7.14",
"@hyperlane-xyz/registry": "2.4.0",
"@hyperlane-xyz/sdk": "5.1.0",
"@hyperlane-xyz/utils": "5.1.0",
"@hyperlane-xyz/widgets": "5.1.0",
"@hyperlane-xyz/registry": "4.2.0",
"@hyperlane-xyz/sdk": "5.2.0-beta.1",
"@hyperlane-xyz/utils": "5.2.0-beta.1",
"@hyperlane-xyz/widgets": "5.2.0-beta.1",
"@interchain-ui/react": "^1.23.28",
"@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6",
"@metamask/post-message-stream": "6.1.2",
@ -92,6 +93,7 @@
},
"types": "dist/src/index.d.ts",
"resolutions": {
"@solana/web3.js": "^1.78.4",
"axios": "0.27.2",
"bn.js": "^5.2",
"cosmjs-types": "0.9",

@ -0,0 +1,13 @@
import { ComponentProps } from 'react';
import { WarningBanner } from '../../components/banner/WarningBanner';
export function FormWarningBanner({ className, ...props }: ComponentProps<typeof WarningBanner>) {
return (
<WarningBanner
// The margins here should be the inverse of those in Card.tsx
className={`z-20 -m-1.5 mb-0 sm:-m-3 sm:mb-0 md:-m-3.5 md:mb-0 ${className}`}
{...props}
/>
);
}

@ -0,0 +1,37 @@
import Image from 'next/image';
import { PropsWithChildren, ReactNode } from 'react';
import WarningIcon from '../../images/icons/warning.svg';
export function WarningBanner({
isVisible,
cta,
onClick,
className,
children,
}: PropsWithChildren<{
isVisible: boolean;
cta: ReactNode;
onClick: () => void;
className?: string;
}>) {
return (
<div
className={`flex items-center justify-between gap-2 px-4 bg-amber-400 text-sm ${
isVisible ? 'max-h-28 py-2 mb-2' : 'max-h-0 mb-0'
} overflow-hidden transition-all duration-500 ${className}`}
>
<div className="flex items-center gap-2">
<Image src={WarningIcon} width={20} height={20} alt="Warning:" />
{children}
</div>
<button
type="button"
onClick={onClick}
className="bg-white/30 rounded-full px-2.5 py-1 text-center hover:bg-white/50 active:bg-white/60"
>
{cta}
</button>
</div>
);
}

@ -1,7 +1,50 @@
import {
eclipsemainnet,
eclipsemainnetAddresses,
solanamainnet,
solanamainnetAddresses,
} from '@hyperlane-xyz/registry';
import { ChainMap, ChainMetadata } from '@hyperlane-xyz/sdk';
// A map of chain names to ChainMetadata
// Chains can be defined here, in chains.json, or in chains.yaml
// Chains already in the SDK need not be included here unless you want to override some fields
// Schema here: https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/sdk/src/metadata/chainMetadataTypes.ts
export const chains: ChainMap<ChainMetadata & { mailbox?: Address }> = {};
export const chains: ChainMap<ChainMetadata & { mailbox?: Address }> = {
solanamainnet: {
...solanamainnet,
// SVM chains require mailbox addresses for the token adapters
mailbox: solanamainnetAddresses.mailbox,
// Including a convenient rpc override because the Solana public RPC does not allow browser requests from localhost
rpcUrls: process.env.NEXT_PUBLIC_SOLANA_RPC_URL
? [{ http: process.env.NEXT_PUBLIC_SOLANA_RPC_URL }, ...solanamainnet.rpcUrls]
: solanamainnet.rpcUrls,
},
eclipsemainnet: {
...eclipsemainnet,
mailbox: eclipsemainnetAddresses.mailbox,
},
// mycustomchain: {
// protocol: ProtocolType.Ethereum,
// chainId: 123123,
// domainId: 123123,
// name: 'mycustomchain',
// displayName: 'My Chain',
// nativeToken: { name: 'Ether', symbol: 'ETH', decimals: 18 },
// rpcUrls: [{ http: 'https://mycustomchain-rpc.com' }],
// blockExplorers: [
// {
// name: 'MyCustomScan',
// url: 'https://mycustomchain-scan.com',
// apiUrl: 'https://api.mycustomchain-scan.com/api',
// family: ExplorerFamily.Etherscan,
// },
// ],
// blocks: {
// confirmations: 1,
// reorgPeriod: 1,
// estimateBlockTime: 10,
// },
// logoURI: '/logo.svg',
// },
};

@ -1,3 +1,5 @@
import { ChainMap } from '@hyperlane-xyz/sdk';
import { ADDRESS_BLACKLIST } from './blacklist';
const isDevMode = process?.env?.NODE_ENV === 'development';
@ -7,6 +9,7 @@ const explorerApiKeys = JSON.parse(process?.env?.EXPLORER_API_KEYS || '{}');
const walletConnectProjectId = process?.env?.NEXT_PUBLIC_WALLET_CONNECT_ID || '';
const withdrawalWhitelist = process?.env?.NEXT_PUBLIC_BLOCK_WITHDRAWAL_WHITELIST || '';
const transferBlacklist = process?.env?.NEXT_PUBLIC_TRANSFER_BLACKLIST || '';
const chainWalletWhitelists = JSON.parse(process?.env?.NEXT_PUBLIC_CHAIN_WALLET_WHITELISTS || '{}');
interface Config {
isDevMode: boolean; // Enables some debug features in the app
@ -20,6 +23,7 @@ interface Config {
transferBlacklist: string; // comma-separated list of routes between which transfers are disabled. Expects Caip2Id-Caip2Id (e.g. ethereum:1-sealevel:1399811149)
enableExplorerLink: boolean; // Include a link to the hyperlane explorer in the transfer modal
addressBlacklist: string[]; // A list of addresses that are blacklisted and cannot be used in the app
chainWalletWhitelists: ChainMap<string[]>; // A map of chain names to a list of wallet names that work for it
}
export const config: Config = Object.freeze({
@ -34,4 +38,5 @@ export const config: Config = Object.freeze({
transferBlacklist,
enableExplorerLink: false,
addressBlacklist: ADDRESS_BLACKLIST.map((address) => address.toLowerCase()),
chainWalletWhitelists,
});

@ -0,0 +1,48 @@
import { useMemo } from 'react';
import { toTitleCase } from '@hyperlane-xyz/utils';
import { FormWarningBanner } from '../../components/banner/FormWarningBanner';
import { config } from '../../consts/config';
import { logger } from '../../utils/logger';
import { useConnectFns, useDisconnectFns, useWalletDetails } from '../wallet/hooks/multiProtocol';
import { getChainDisplayName, tryGetChainProtocol } from './utils';
export function ChainWalletWarning({ originChain }: { originChain: ChainName }) {
const wallets = useWalletDetails();
const connectFns = useConnectFns();
const disconnectFns = useDisconnectFns();
const { isVisible, chainDisplayName, walletWhitelist, connectFn, disconnectFn } = useMemo(() => {
const protocol = tryGetChainProtocol(originChain);
const walletWhitelist = config.chainWalletWhitelists[originChain]?.map((w) =>
w.trim().toLowerCase(),
);
if (!protocol || !walletWhitelist?.length)
return { isVisible: false, chainDisplayName: '', walletWhitelist: [] };
const chainDisplayName = getChainDisplayName(originChain, true);
const walletName = wallets[protocol]?.name?.trim()?.toLowerCase();
const connectFn = connectFns[protocol];
const disconnectFn = disconnectFns[protocol];
const isVisible = !!walletName && !walletWhitelist.includes(walletName);
return { isVisible, chainDisplayName, walletWhitelist, connectFn, disconnectFn };
}, [originChain, wallets, connectFns, disconnectFns]);
const onClickChange = () => {
if (!connectFn || !disconnectFn) return;
disconnectFn()
.then(() => connectFn())
.catch((err) => logger.error('Error changing wallet connection', err));
};
return (
<FormWarningBanner isVisible={isVisible} cta="Change" onClick={onClickChange}>
{`${chainDisplayName} requires one of the following wallets: ${walletWhitelist
.map((w) => toTitleCase(w))
.join(', ')}`}
</FormWarningBanner>
);
}

@ -1,9 +1,10 @@
import { CoreChain, CoreChains } from '@hyperlane-xyz/registry';
import { ChainNameOrId } from '@hyperlane-xyz/sdk';
import { ProtocolType, toTitleCase } from '@hyperlane-xyz/utils';
import { getMultiProvider } from '../../context/context';
const ABACUS_WORKS_DEPLOYER_NAME = 'abacus works';
export function getChainDisplayName(chain: ChainName, shortName = false) {
if (!chain) return 'Unknown';
const metadata = tryGetChainMetadata(chain);
@ -14,9 +15,10 @@ export function getChainDisplayName(chain: ChainName, shortName = false) {
export function isPermissionlessChain(chain: ChainName) {
if (!chain) return true;
const metadata = tryGetChainMetadata(chain);
return (
getChainMetadata(chain).protocol !== ProtocolType.Ethereum ||
!CoreChains.includes(chain as CoreChain)
metadata?.protocol !== ProtocolType.Ethereum ||
metadata.deployer?.name.trim().toLowerCase() !== ABACUS_WORKS_DEPLOYER_NAME
);
}
@ -24,11 +26,11 @@ export function hasPermissionlessChain(ids: ChainName[]) {
return !ids.every((c) => !isPermissionlessChain(c));
}
export function getChainByRpcEndpoint(endpoint?: string) {
if (!endpoint) return undefined;
export function getChainByRpcUrl(url?: string) {
if (!url) return undefined;
const allMetadata = Object.values(getMultiProvider().metadata);
return allMetadata.find(
(m) => !!m.rpcUrls.find((rpc) => rpc.http.toLowerCase().includes(endpoint.toLowerCase())),
(m) => !!m.rpcUrls.find((rpc) => rpc.http.toLowerCase().includes(url.toLowerCase())),
);
}

@ -18,6 +18,7 @@ import SwapIcon from '../../images/icons/swap.svg';
import { Color } from '../../styles/Color';
import { logger } from '../../utils/logger';
import { ChainSelectField } from '../chains/ChainSelectField';
import { ChainWalletWarning } from '../chains/ChainWalletWarning';
import { getChainDisplayName } from '../chains/utils';
import { useIsAccountSanctioned } from '../sanctions/hooks/useIsAccountSanctioned';
import { useStore } from '../store';
@ -62,8 +63,9 @@ export function TransferTokenForm() {
validateOnChange={false}
validateOnBlur={false}
>
{({ isValidating }) => (
<Form className="flex flex-col items-stretch w-full mt-2">
{({ isValidating, values }) => (
<Form className="flex flex-col items-stretch w-full">
<ChainWalletWarning originChain={values.origin} />
<ChainSelectSection isReview={isReview} />
<div className="mt-3 flex justify-between items-end space-x-4">
<TokenSection setIsNft={setIsNft} isReview={isReview} />
@ -112,7 +114,7 @@ function ChainSelectSection({ isReview }: { isReview: boolean }) {
const chains = useMemo(() => getWarpCore().getTokenChains(), []);
return (
<div className="flex items-center justify-center space-x-7 sm:space-x-10">
<div className="mt-2 flex items-center justify-center space-x-7 sm:space-x-10">
<ChainSelectField name="origin" label="From" chains={chains} disabled={isReview} />
<div className="flex flex-col items-center">
<div className="flex mb-6 sm:space-x-1.5">
@ -427,7 +429,8 @@ function useFormInitialValues(): TransferFormValues {
}, []);
}
const insufficientFundsErrMsg = /insufficient.funds/i;
const insufficientFundsErrMsg = /insufficient.[funds|lamports]/i;
const emptyAccountErrMsg = /AccountNotFound/i;
async function validateForm(
values: TransferFormValues,
@ -447,10 +450,11 @@ async function validateForm(
senderPubKey: await senderPubKey,
});
return result;
} catch (error) {
} catch (error: any) {
logger.error('Error validating form', error);
let errorMsg = errorToString(error, 40);
if (insufficientFundsErrMsg.test(errorMsg)) {
const fullError = `${errorMsg} ${error.message}`;
if (insufficientFundsErrMsg.test(fullError) || emptyAccountErrMsg.test(fullError)) {
errorMsg = 'Insufficient funds for gas fees';
}
return { form: errorMsg };

@ -33,7 +33,7 @@ export function SideBarMenu({
const [isMenuOpen, setIsMenuOpen] = useState(false);
const [isModalOpen, setIsModalOpen] = useState(false);
const [selectedTransfer, setSelectedTransfer] = useState<TransferContext | null>(null);
const disconnects = useDisconnectFns();
const disconnectFns = useDisconnectFns();
const { readyAccounts } = useAccounts();
const didMountRef = useRef(false);
@ -57,7 +57,7 @@ export function SideBarMenu({
}, [isOpen]);
const onClickDisconnect = async () => {
for (const disconnectFn of Object.values(disconnects)) {
for (const disconnectFn of Object.values(disconnectFns)) {
await disconnectFn();
}
};

@ -1,7 +1,7 @@
import Image from 'next/image';
import { PropsWithChildren } from 'react';
import { ethereum, solana } from '@hyperlane-xyz/registry';
import { ethereum, solanamainnet } from '@hyperlane-xyz/registry';
import { ProtocolType } from '@hyperlane-xyz/utils';
import { ChainLogo } from '../../components/icons/ChainLogo';
@ -31,7 +31,7 @@ export function WalletEnvSelectionModal({ isOpen, close }: { isOpen: boolean; cl
<EnvButton
onClick={onClickEnv(ProtocolType.Sealevel)}
subTitle="a Solana"
logoChainId={solana.chainId}
logoChainId={solanamainnet.chainId}
>
Solana
</EnvButton>

@ -1,10 +1,13 @@
import { SnapWalletAdapter } from '@drift-labs/snap-wallet-adapter';
import { WalletAdapterNetwork, WalletError } from '@solana/wallet-adapter-base';
import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';
import { WalletModalProvider } from '@solana/wallet-adapter-react-ui';
import '@solana/wallet-adapter-react-ui/styles.css';
import {
BackpackWalletAdapter,
LedgerWalletAdapter,
PhantomWalletAdapter,
SalmonWalletAdapter,
SolflareWalletAdapter,
TrustWalletAdapter,
} from '@solana/wallet-adapter-wallets';
@ -16,12 +19,15 @@ import { logger } from '../../../utils/logger';
export function SolanaWalletContext({ children }: PropsWithChildren<unknown>) {
// TODO support multiple networks
const network = WalletAdapterNetwork.Devnet;
const network = WalletAdapterNetwork.Mainnet;
const endpoint = useMemo(() => clusterApiUrl(network), [network]);
const wallets = useMemo(
() => [
new PhantomWalletAdapter(),
new SolflareWalletAdapter(),
new BackpackWalletAdapter(),
new SalmonWalletAdapter(),
new SnapWalletAdapter(),
new TrustWalletAdapter(),
new LedgerWalletAdapter(),
],

@ -2,14 +2,13 @@ import { useConnection, useWallet } from '@solana/wallet-adapter-react';
import { useWalletModal } from '@solana/wallet-adapter-react-ui';
import { Connection } from '@solana/web3.js';
import { useCallback, useMemo } from 'react';
import { toast } from 'react-toastify';
import { ProviderType, TypedTransactionReceipt, WarpTypedTransaction } from '@hyperlane-xyz/sdk';
import { ProtocolType } from '@hyperlane-xyz/utils';
import { getMultiProvider } from '../../../context/context';
import { logger } from '../../../utils/logger';
import { getChainByRpcEndpoint } from '../../chains/utils';
import { getChainByRpcUrl } from '../../chains/utils';
import { AccountInfo, ActiveChainInfo, ChainTransactionFns, WalletDetails } from './types';
@ -55,12 +54,18 @@ export function useSolActiveChain(): ActiveChainInfo {
const { connection } = useConnection();
const connectionEndpoint = connection?.rpcEndpoint;
return useMemo<ActiveChainInfo>(() => {
const metadata = getChainByRpcEndpoint(connectionEndpoint);
if (!metadata) return {};
return {
chainDisplayName: metadata.displayName,
chainName: metadata.name,
};
try {
const hostname = new URL(connectionEndpoint).hostname;
const metadata = getChainByRpcUrl(hostname);
if (!metadata) return {};
return {
chainDisplayName: metadata.displayName,
chainName: metadata.name,
};
} catch (error) {
logger.warn('Error finding sol active chain', error);
return {};
}
}, [connectionEndpoint]);
}
@ -68,7 +73,7 @@ export function useSolTransactionFns(): ChainTransactionFns {
const { sendTransaction: sendSolTransaction } = useWallet();
const onSwitchNetwork = useCallback(async (chainName: ChainName) => {
toast.warn(`Solana wallet must be connected to origin chain ${chainName}}`);
logger.warn(`Solana wallet must be connected to origin chain ${chainName}`);
}, []);
const onSendTx = useCallback(

@ -0,0 +1,3 @@
<svg width="18" height="16" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.7385 12.8424L10.3944 1.37207C10.0899 0.896794 9.56445 0.609344 9.00031 0.609344C8.43613 0.609344 7.9106 0.896794 7.60622 1.37207L0.261512 12.8424C-0.0648531 13.3519 -0.0874155 13.999 0.203235 14.5299C0.493345 15.0604 1.05035 15.3907 1.65552 15.3907H16.3444C16.9496 15.3907 17.5066 15.0607 17.7967 14.5299C18.0875 13.999 18.0649 13.3519 17.7385 12.8424ZM8.07826 5.27148C8.07826 4.76708 8.48727 4.35837 8.99136 4.35837C9.49553 4.35837 9.9045 4.76708 9.9045 5.27148V9.18939C9.9045 9.69379 9.49553 10.1025 8.99136 10.1025C8.48727 10.1025 8.07826 9.69379 8.07826 9.18939V5.27148ZM8.97416 13.4096C8.34403 13.4096 7.83277 12.8986 7.83277 12.2682C7.83277 11.6377 8.34403 11.1268 8.97416 11.1268C9.60433 11.1268 10.1156 11.6377 10.1156 12.2682C10.1155 12.8986 9.60433 13.4096 8.97416 13.4096Z" fill="black" fill-opacity="0.8"/>
</svg>

After

Width:  |  Height:  |  Size: 935 B

@ -1132,7 +1132,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.6":
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0":
version: 7.23.2
resolution: "@babel/runtime@npm:7.23.2"
dependencies:
@ -1141,6 +1141,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.25.0":
version: 7.25.6
resolution: "@babel/runtime@npm:7.25.6"
dependencies:
regenerator-runtime: "npm:^0.14.0"
checksum: 0c4134734deb20e1005ffb9165bf342e1074576621b246d8e5e41cc7cb315a885b7d98950fbf5c63619a2990a56ae82f444d35fe8c4691a0b70c2fe5673667dc
languageName: node
linkType: hard
"@babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3":
version: 7.22.5
resolution: "@babel/template@npm:7.22.5"
@ -2992,6 +3001,17 @@ __metadata:
languageName: node
linkType: hard
"@drift-labs/snap-wallet-adapter@npm:^0.3.0":
version: 0.3.0
resolution: "@drift-labs/snap-wallet-adapter@npm:0.3.0"
dependencies:
"@solana/wallet-adapter-base": "npm:^0.9.22"
"@solana/web3.js": "npm:^1.76.0"
typescript: "npm:^5.0.4"
checksum: 6220e7d742b71fdab2c355f9f81217b7ef17ad29c6a732833ef432866c182c236711383aac0cdc21180a1af50533ce56d014c0281555229dc510f50ac331d16d
languageName: node
linkType: hard
"@emotion/babel-plugin@npm:^11.12.0":
version: 11.12.0
resolution: "@emotion/babel-plugin@npm:11.12.0"
@ -3937,13 +3957,13 @@ __metadata:
languageName: node
linkType: hard
"@hyperlane-xyz/core@npm:5.1.0":
version: 5.1.0
resolution: "@hyperlane-xyz/core@npm:5.1.0"
"@hyperlane-xyz/core@npm:5.2.0-beta.1":
version: 5.2.0-beta.1
resolution: "@hyperlane-xyz/core@npm:5.2.0-beta.1"
dependencies:
"@arbitrum/nitro-contracts": "npm:^1.2.1"
"@eth-optimism/contracts": "npm:^0.6.0"
"@hyperlane-xyz/utils": "npm:5.1.0"
"@hyperlane-xyz/utils": "npm:5.2.0-beta.1"
"@layerzerolabs/lz-evm-oapp-v2": "npm:2.0.2"
"@openzeppelin/contracts": "npm:^4.9.3"
"@openzeppelin/contracts-upgradeable": "npm:^v4.9.3"
@ -3952,42 +3972,43 @@ __metadata:
"@ethersproject/abi": "*"
"@ethersproject/providers": "*"
"@types/sinon-chai": "*"
checksum: 81fd921a06b0d289070afac8e352d8dd38bf9219dea62e6fa3dcc2082b0ae39c23810fb4fe669b1933566fa1dfb7930f25307cbca2361b7e848152e9dc4e6014
checksum: a3e5e96c9d97887f8db575e72e2c1beeceec38e80a117241d62e54f7ea6efcdb5f7ebda7799519de835d9087db7230c8c8a93ab3fa4c68879379ab70e1816dda
languageName: node
linkType: hard
"@hyperlane-xyz/registry@npm:2.4.0":
version: 2.4.0
resolution: "@hyperlane-xyz/registry@npm:2.4.0"
"@hyperlane-xyz/registry@npm:4.1.0":
version: 4.1.0
resolution: "@hyperlane-xyz/registry@npm:4.1.0"
dependencies:
yaml: "npm:^2"
yaml: "npm:2.4.5"
zod: "npm:^3.21.2"
checksum: 18541e1b2d20a0e750d58e37e043bc22b9683cfc68de7865d2c8d269c50d3ee2255029530b15b61f93e854a18d36a3e367011286c3c1456730fb3362d74f31ac
checksum: 5de3ef5539abfaadbfefb82e6e69fdb2413f404d8321456c91810fb50a5a70e9f93b38789495efce6ab5963682536e95a2abe636c7d0ad91ee158cc0ce6b063a
languageName: node
linkType: hard
"@hyperlane-xyz/registry@npm:2.5.0":
version: 2.5.0
resolution: "@hyperlane-xyz/registry@npm:2.5.0"
"@hyperlane-xyz/registry@npm:4.2.0":
version: 4.2.0
resolution: "@hyperlane-xyz/registry@npm:4.2.0"
dependencies:
yaml: "npm:^2"
yaml: "npm:2.4.5"
zod: "npm:^3.21.2"
checksum: 24f433c0938dc31913b0f7a93b880a9aa15eabebf664eb11f319c51f6b38163929429405dd996b8964f8a2f43dfa4ba5424b157ad6fd39432653e46e128e0ffc
checksum: 47c985af9511ffd43afb88914e87ede5e6db1ba262c00096955d5e8275a0afda0fa8d6ca5222895bed59a680a06aecf454529853dd6867a1140eabd00b184c21
languageName: node
linkType: hard
"@hyperlane-xyz/sdk@npm:5.1.0":
version: 5.1.0
resolution: "@hyperlane-xyz/sdk@npm:5.1.0"
"@hyperlane-xyz/sdk@npm:5.2.0-beta.1":
version: 5.2.0-beta.1
resolution: "@hyperlane-xyz/sdk@npm:5.2.0-beta.1"
dependencies:
"@arbitrum/sdk": "npm:^4.0.0"
"@aws-sdk/client-s3": "npm:^3.74.0"
"@cosmjs/cosmwasm-stargate": "npm:^0.32.4"
"@cosmjs/stargate": "npm:^0.32.4"
"@hyperlane-xyz/core": "npm:5.1.0"
"@hyperlane-xyz/utils": "npm:5.1.0"
"@hyperlane-xyz/core": "npm:5.2.0-beta.1"
"@hyperlane-xyz/utils": "npm:5.2.0-beta.1"
"@safe-global/api-kit": "npm:1.3.0"
"@safe-global/protocol-kit": "npm:1.3.0"
"@safe-global/safe-deployments": "npm:1.37.3"
"@solana/spl-token": "npm:^0.3.8"
"@solana/web3.js": "npm:^1.78.0"
"@types/coingecko-api": "npm:^1.0.10"
@ -4003,13 +4024,13 @@ __metadata:
peerDependencies:
"@ethersproject/abi": "*"
"@ethersproject/providers": "*"
checksum: 80aaa6836fc1aaa1c10c69b7d80d960daeef9074c763fb2f1161f8d921ca344207117c4a21312ed6bdd80cba6e85ca30c75abab7992273c6da2ff4a953619400
checksum: aae9648e06ff553dd0cebc313d8ee38df47b349770d94ddccc3ae2f5bafccfe61db33ec55983b0917591968cddda380643f01fd619909a6ee67e8391b4b94ddf
languageName: node
linkType: hard
"@hyperlane-xyz/utils@npm:5.1.0":
version: 5.1.0
resolution: "@hyperlane-xyz/utils@npm:5.1.0"
"@hyperlane-xyz/utils@npm:5.2.0-beta.1":
version: 5.2.0-beta.1
resolution: "@hyperlane-xyz/utils@npm:5.2.0-beta.1"
dependencies:
"@cosmjs/encoding": "npm:^0.32.4"
"@solana/web3.js": "npm:^1.78.0"
@ -4017,8 +4038,8 @@ __metadata:
ethers: "npm:^5.7.2"
lodash-es: "npm:^4.17.21"
pino: "npm:^8.19.0"
yaml: "npm:^2.4.1"
checksum: 3a29c91b0fd8be48833743150299425e26fcf19f6bdbfddddf39e8480cc6587d9c525298d6aaa522a9c854954fb197ef7a11b237b4d48f88c20a75a319453914
yaml: "npm:2.4.5"
checksum: 1daeb4521dbd9f115f1e660e6fa767d3d2851a09eb9885e155df08863b5ee743a96e2df3eab59c25c5cfa57607e65f2e4703e4209d168e2e9cb4c5c4528a7801
languageName: node
linkType: hard
@ -4035,13 +4056,14 @@ __metadata:
"@cosmos-kit/keplr": "npm:^2.12.2"
"@cosmos-kit/leap": "npm:^2.12.2"
"@cosmos-kit/react": "npm:^2.18.0"
"@drift-labs/snap-wallet-adapter": "npm:^0.3.0"
"@emotion/react": "npm:^11.13.0"
"@emotion/styled": "npm:^11.13.0"
"@headlessui/react": "npm:^1.7.14"
"@hyperlane-xyz/registry": "npm:2.4.0"
"@hyperlane-xyz/sdk": "npm:5.1.0"
"@hyperlane-xyz/utils": "npm:5.1.0"
"@hyperlane-xyz/widgets": "npm:5.1.0"
"@hyperlane-xyz/registry": "npm:4.2.0"
"@hyperlane-xyz/sdk": "npm:5.2.0-beta.1"
"@hyperlane-xyz/utils": "npm:5.2.0-beta.1"
"@hyperlane-xyz/widgets": "npm:5.2.0-beta.1"
"@interchain-ui/react": "npm:^1.23.28"
"@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6"
"@metamask/post-message-stream": "npm:6.1.2"
@ -4093,16 +4115,16 @@ __metadata:
languageName: unknown
linkType: soft
"@hyperlane-xyz/widgets@npm:5.1.0":
version: 5.1.0
resolution: "@hyperlane-xyz/widgets@npm:5.1.0"
"@hyperlane-xyz/widgets@npm:5.2.0-beta.1":
version: 5.2.0-beta.1
resolution: "@hyperlane-xyz/widgets@npm:5.2.0-beta.1"
dependencies:
"@hyperlane-xyz/registry": "npm:2.5.0"
"@hyperlane-xyz/sdk": "npm:5.1.0"
"@hyperlane-xyz/registry": "npm:4.1.0"
"@hyperlane-xyz/sdk": "npm:5.2.0-beta.1"
peerDependencies:
react: ^18
react-dom: ^18
checksum: 7a7a28129fa55ea1852f33dc16a527873252e10cf9d6bcc791864c2c9b9cd1c4ea1ef1ecc1a4d3d8a580613ad99548ed33d462eb49da7caf2719f9272e54ec43
checksum: 87608018a112eb8ae8547309513063901170f202533c05292609d85d98f614630b9bb90b72c2ead5079791657612aed2219e3e897b2e64db7232d00da46bc427
languageName: node
linkType: hard
@ -5186,7 +5208,7 @@ __metadata:
languageName: node
linkType: hard
"@noble/curves@npm:1.2.0, @noble/curves@npm:^1.0.0, @noble/curves@npm:~1.2.0":
"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0":
version: 1.2.0
resolution: "@noble/curves@npm:1.2.0"
dependencies:
@ -5204,6 +5226,15 @@ __metadata:
languageName: node
linkType: hard
"@noble/curves@npm:^1.4.2":
version: 1.6.0
resolution: "@noble/curves@npm:1.6.0"
dependencies:
"@noble/hashes": "npm:1.5.0"
checksum: 9090b5a020b7e38c7b6d21506afaacd0c7557129d716a174334c1efc36385bf3ca6de16a543c216db58055e019c6a6c3bea8d9c0b79386e6bacff5c4c6b438a9
languageName: node
linkType: hard
"@noble/hashes@npm:1.3.0":
version: 1.3.0
resolution: "@noble/hashes@npm:1.3.0"
@ -5211,7 +5242,7 @@ __metadata:
languageName: node
linkType: hard
"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.2.0, @noble/hashes@npm:^1.3.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2":
"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.2.0, @noble/hashes@npm:^1.3.0, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2":
version: 1.3.2
resolution: "@noble/hashes@npm:1.3.2"
checksum: 685f59d2d44d88e738114b71011d343a9f7dce9dfb0a121f1489132f9247baa60bc985e5ec6f3213d114fbd1e1168e7294644e46cbd0ce2eba37994f28eeb51b
@ -5225,6 +5256,13 @@ __metadata:
languageName: node
linkType: hard
"@noble/hashes@npm:1.5.0":
version: 1.5.0
resolution: "@noble/hashes@npm:1.5.0"
checksum: da7fc7af52af7afcf59810a7eea6155075464ff462ffda2572dc6d57d53e2669b1ea2ec774e814f6273f1697e567f28d36823776c9bf7068cba2a2855140f26e
languageName: node
linkType: hard
"@noble/hashes@npm:^1.4.0":
version: 1.4.0
resolution: "@noble/hashes@npm:1.4.0"
@ -7155,6 +7193,15 @@ __metadata:
languageName: node
linkType: hard
"@safe-global/safe-deployments@npm:1.37.3":
version: 1.37.3
resolution: "@safe-global/safe-deployments@npm:1.37.3"
dependencies:
semver: "npm:^7.6.2"
checksum: 3d1fcaac850a1d1100eaa5ff753c88c9bb889c678bb09248323c6b0c9d6228225a88be47973a89bb32829fe2d13ed17c21f854b9fdc29cc1b3c734021761f15c
languageName: node
linkType: hard
"@safe-global/safe-deployments@npm:^1.26.0":
version: 1.36.0
resolution: "@safe-global/safe-deployments@npm:1.36.0"
@ -8105,6 +8152,15 @@ __metadata:
languageName: node
linkType: hard
"@solana/buffer-layout@npm:^4.0.1":
version: 4.0.1
resolution: "@solana/buffer-layout@npm:4.0.1"
dependencies:
buffer: "npm:~6.0.3"
checksum: c64b996b832b2b7966a09e97f501fdd1409fece8975f7fb47698d7b8addb97504360cfb2f3d1368949c643d23ed9a4c9f79e19bbd721ebe5bf229353252f649e
languageName: node
linkType: hard
"@solana/spl-token@npm:^0.3.8":
version: 0.3.8
resolution: "@solana/spl-token@npm:0.3.8"
@ -8793,26 +8849,26 @@ __metadata:
languageName: node
linkType: hard
"@solana/web3.js@npm:^1.32.0, @solana/web3.js@npm:^1.36.0, @solana/web3.js@npm:^1.44.3, @solana/web3.js@npm:^1.63.1, @solana/web3.js@npm:^1.70.1, @solana/web3.js@npm:^1.77.0, @solana/web3.js@npm:^1.78.0":
version: 1.78.4
resolution: "@solana/web3.js@npm:1.78.4"
"@solana/web3.js@npm:^1.78.4":
version: 1.95.3
resolution: "@solana/web3.js@npm:1.95.3"
dependencies:
"@babel/runtime": "npm:^7.22.6"
"@noble/curves": "npm:^1.0.0"
"@noble/hashes": "npm:^1.3.1"
"@solana/buffer-layout": "npm:^4.0.0"
agentkeepalive: "npm:^4.3.0"
"@babel/runtime": "npm:^7.25.0"
"@noble/curves": "npm:^1.4.2"
"@noble/hashes": "npm:^1.4.0"
"@solana/buffer-layout": "npm:^4.0.1"
agentkeepalive: "npm:^4.5.0"
bigint-buffer: "npm:^1.1.5"
bn.js: "npm:^5.2.1"
borsh: "npm:^0.7.0"
bs58: "npm:^4.0.1"
buffer: "npm:6.0.3"
fast-stable-stringify: "npm:^1.0.0"
jayson: "npm:^4.1.0"
node-fetch: "npm:^2.6.12"
rpc-websockets: "npm:^7.5.1"
superstruct: "npm:^0.14.2"
checksum: f6af0f7456c3d0be4e576db4c5f1ddf33ad4a9fd553751a4cdd7ef55a4bbdca5f7625ce76f0452f87d3e963d8eb553805303e16189f0b8f679d8304619b9defc
jayson: "npm:^4.1.1"
node-fetch: "npm:^2.7.0"
rpc-websockets: "npm:^9.0.2"
superstruct: "npm:^2.0.2"
checksum: 25bdc5100faae6d3e48cbfac965b129060bec61669dcd75d0a525cea3ce8d23632ebea249a7b21616c89641bf7ea26d18826ce51246274b6aa1278d32180c870
languageName: node
linkType: hard
@ -9030,6 +9086,15 @@ __metadata:
languageName: node
linkType: hard
"@swc/helpers@npm:^0.5.11":
version: 0.5.13
resolution: "@swc/helpers@npm:0.5.13"
dependencies:
tslib: "npm:^2.4.0"
checksum: 6ba2f7e215d32d71fce139e2cfc426b3ed7eaa709febdeb07b97260a4c9eea4784cf047cc1271be273990b08220b576b94a42b5780947c0b3be84973a847a24d
languageName: node
linkType: hard
"@szmarczak/http-timer@npm:^4.0.5":
version: 4.0.6
resolution: "@szmarczak/http-timer@npm:4.0.6"
@ -9675,6 +9740,13 @@ __metadata:
languageName: node
linkType: hard
"@types/uuid@npm:^8.3.4":
version: 8.3.4
resolution: "@types/uuid@npm:8.3.4"
checksum: 6f11f3ff70f30210edaa8071422d405e9c1d4e53abbe50fdce365150d3c698fe7bbff65c1e71ae080cbfb8fded860dbb5e174da96fdbbdfcaa3fb3daa474d20f
languageName: node
linkType: hard
"@types/ws@npm:^7.4.4":
version: 7.4.7
resolution: "@types/ws@npm:7.4.7"
@ -9684,6 +9756,15 @@ __metadata:
languageName: node
linkType: hard
"@types/ws@npm:^8.2.2":
version: 8.5.12
resolution: "@types/ws@npm:8.5.12"
dependencies:
"@types/node": "npm:*"
checksum: d8a3ddfb5ff8fea992a043113579d61ac1ea21e8464415af9e2b01b205ed19d817821ad64ca1b3a90062d1df1c23b0f586d8351d25ca6728844df99a74e8f76d
languageName: node
linkType: hard
"@types/yargs-parser@npm:*":
version: 21.0.0
resolution: "@types/yargs-parser@npm:21.0.0"
@ -10889,7 +10970,7 @@ __metadata:
languageName: node
linkType: hard
"agentkeepalive@npm:^4.2.1, agentkeepalive@npm:^4.3.0":
"agentkeepalive@npm:^4.2.1, agentkeepalive@npm:^4.5.0":
version: 4.5.0
resolution: "agentkeepalive@npm:4.5.0"
dependencies:
@ -13851,6 +13932,13 @@ __metadata:
languageName: node
linkType: hard
"eventemitter3@npm:^5.0.1":
version: 5.0.1
resolution: "eventemitter3@npm:5.0.1"
checksum: ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5
languageName: node
linkType: hard
"events@npm:3.3.0, events@npm:^3.3.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
@ -15690,9 +15778,9 @@ __metadata:
languageName: node
linkType: hard
"jayson@npm:^4.1.0":
version: 4.1.0
resolution: "jayson@npm:4.1.0"
"jayson@npm:^4.1.1":
version: 4.1.2
resolution: "jayson@npm:4.1.2"
dependencies:
"@types/connect": "npm:^3.4.33"
"@types/node": "npm:^12.12.54"
@ -15705,10 +15793,10 @@ __metadata:
isomorphic-ws: "npm:^4.0.1"
json-stringify-safe: "npm:^5.0.1"
uuid: "npm:^8.3.2"
ws: "npm:^7.4.5"
ws: "npm:^7.5.10"
bin:
jayson: bin/jayson.js
checksum: d76b3f220e14388007958b8f79e793009d6bc572b6e5ea65848a0f027b324d1950d836468986d7e38ddfb30b660e8b048b459c8bc8456e9b38dbbebc60a563b4
checksum: 7ad5e80e11ef39b7382509d046546883d2595998aa245768b342bcc0a63843e011e16f02a023d5a78fb74df788b5f97c1e850568fc1b90c138fa4772cc55572c
languageName: node
linkType: hard
@ -17528,7 +17616,7 @@ __metadata:
languageName: node
linkType: hard
"node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7":
"node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0":
version: 2.7.0
resolution: "node-fetch@npm:2.7.0"
dependencies:
@ -19478,13 +19566,16 @@ __metadata:
languageName: node
linkType: hard
"rpc-websockets@npm:^7.5.1":
version: 7.5.1
resolution: "rpc-websockets@npm:7.5.1"
"rpc-websockets@npm:^9.0.2":
version: 9.0.2
resolution: "rpc-websockets@npm:9.0.2"
dependencies:
"@babel/runtime": "npm:^7.17.2"
"@swc/helpers": "npm:^0.5.11"
"@types/uuid": "npm:^8.3.4"
"@types/ws": "npm:^8.2.2"
buffer: "npm:^6.0.3"
bufferutil: "npm:^4.0.1"
eventemitter3: "npm:^4.0.7"
eventemitter3: "npm:^5.0.1"
utf-8-validate: "npm:^5.0.2"
uuid: "npm:^8.3.2"
ws: "npm:^8.5.0"
@ -19493,7 +19584,7 @@ __metadata:
optional: true
utf-8-validate:
optional: true
checksum: 3553c2b303fe53ffe87f81645d89b8e482a13a0113bf6a9111296659bf46ad8fb4f15e6889b6fb6ae01a6452b3de4e47d75e2155f112863ec7c78475368a4eae
checksum: d558958888cd3469fb8560840305352e59c9ffcd71c7a443c0c5710995ecc3c130b1473f5d4a9d316dbd408fa7473e0de720b875cf8c6ada2668cf8fac072859
languageName: node
linkType: hard
@ -19661,6 +19752,15 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^7.6.2":
version: 7.6.3
resolution: "semver@npm:7.6.3"
bin:
semver: bin/semver.js
checksum: 36b1fbe1a2b6f873559cd57b238f1094a053dbfd997ceeb8757d79d1d2089c56d1321b9f1069ce263dc64cfa922fa1d2ad566b39426fe1ac6c723c1487589e10
languageName: node
linkType: hard
"send@npm:0.18.0":
version: 0.18.0
resolution: "send@npm:0.18.0"
@ -20281,13 +20381,6 @@ __metadata:
languageName: node
linkType: hard
"superstruct@npm:^0.14.2":
version: 0.14.2
resolution: "superstruct@npm:0.14.2"
checksum: 81eb2af08f2a5b1c3d4c9a7815fe0decd4eddc305dbd74471b2c29496910dfb1188e54c4bfc8c5b5e64c0f69cd303af554332d1f9d7967eff39144d1a4c4d2e2
languageName: node
linkType: hard
"superstruct@npm:^1.0.3":
version: 1.0.3
resolution: "superstruct@npm:1.0.3"
@ -20295,6 +20388,13 @@ __metadata:
languageName: node
linkType: hard
"superstruct@npm:^2.0.2":
version: 2.0.2
resolution: "superstruct@npm:2.0.2"
checksum: 10e1944a9da4baee187fbaa6c5d97d7af266b55786dfe50bce67f0f1e7d93f1a5a42dd51e245a2e16404f8336d07c21c67f1c1fbc4ad0a252d3d2601d6c926da
languageName: node
linkType: hard
"supports-color@npm:^5.3.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
@ -20819,6 +20919,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:^5.0.4":
version: 5.6.2
resolution: "typescript@npm:5.6.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: f95365d4898f357823e93d334ecda9fcade54f009b397c7d05b7621cd9e865981033cf89ccde0f3e3a7b73b1fdbae18e92bc77db237b43e912f053fef0f9a53b
languageName: node
linkType: hard
"typescript@npm:^5.3.3":
version: 5.3.3
resolution: "typescript@npm:5.3.3"
@ -20839,6 +20949,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin<compat/typescript>":
version: 5.6.2
resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin<compat/typescript>::version=5.6.2&hash=e012d7"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 060a7349adf698477b411be4ace470aee6c2c1bd99917fdf5d33697c17ec55c64fe724eb10399387530b50e9913b41528dd8bfcca0a5fc8f8bac63fbb4580a2e
languageName: node
linkType: hard
"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin<compat/typescript>":
version: 5.3.3
resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin<compat/typescript>::version=5.3.3&hash=e012d7"
@ -21858,7 +21978,7 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:^7, ws@npm:^7.3.1, ws@npm:^7.4.0, ws@npm:^7.4.5, ws@npm:^7.5.1":
"ws@npm:^7, ws@npm:^7.3.1, ws@npm:^7.4.0, ws@npm:^7.5.1":
version: 7.5.9
resolution: "ws@npm:7.5.9"
peerDependencies:
@ -21873,6 +21993,21 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:^7.5.10":
version: 7.5.10
resolution: "ws@npm:7.5.10"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: 9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0
languageName: node
linkType: hard
"ws@npm:~8.11.0":
version: 8.11.0
resolution: "ws@npm:8.11.0"
@ -21994,6 +22129,15 @@ __metadata:
languageName: node
linkType: hard
"yaml@npm:2.4.5":
version: 2.4.5
resolution: "yaml@npm:2.4.5"
bin:
yaml: bin.mjs
checksum: b09bf5a615a65276d433d76b8e34ad6b4c0320b85eb3f1a39da132c61ae6e2ff34eff4624e6458d96d49566c93cf43408ba5e568218293a8c6541a2006883f64
languageName: node
linkType: hard
"yaml@npm:^1.10.0, yaml@npm:^1.10.2":
version: 1.10.2
resolution: "yaml@npm:1.10.2"
@ -22001,15 +22145,6 @@ __metadata:
languageName: node
linkType: hard
"yaml@npm:^2, yaml@npm:^2.4.1":
version: 2.4.2
resolution: "yaml@npm:2.4.2"
bin:
yaml: bin.mjs
checksum: 6eafbcd68dead734035f6f72af21bd820c29214caf7d8e40c595671a3c908535cef8092b9660a1c055c5833aa148aa640e0c5fa4adb5af2dacd6d28296ccd81c
languageName: node
linkType: hard
"yaml@npm:^2.0.0, yaml@npm:^2.3.4":
version: 2.3.4
resolution: "yaml@npm:2.3.4"

Loading…
Cancel
Save