From 7472781793a76bc2eb2aa45c1b7918669ff348b3 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Mon, 24 Feb 2025 17:49:02 +0300 Subject: [PATCH 01/14] chore(app): petra wallet connection/disconnection Signed-off-by: Kaan Caglan --- .../components/Cube/faces/Transfer.svelte | 151 +++++++++--------- app/src/lib/components/connect/connect.svelte | 5 +- app/src/lib/wallet/aptos/config.ts | 23 +-- 3 files changed, 91 insertions(+), 88 deletions(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index 52b3e281aa..7086361323 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -9,7 +9,8 @@ import { type AptosBrowserWallet, http, type CosmosChainId, - isValidBech32ContractAddress + isValidBech32ContractAddress, + type AptosChainId } from "@unionlabs/client" import { custom, getConnectorClient, switchChain, waitForTransactionReceipt } from "@wagmi/core" import { fromHex, isHex, type HttpTransport, toHex } from "viem" @@ -63,81 +64,81 @@ const transfer = async () => { // ) /** --- APTOS START --- */ - // if ($validation.transfer.sourceChain.rpc_type === "aptos") { - // const { connectedWallet, connectionStatus } = get(aptosStore) - // if ($userAddressAptos === null) return toast.error("No aptos user address found") - // - // if (connectionStatus !== "connected" || !connectedWallet) { - // transferState.set({ - // kind: "SWITCHING_TO_CHAIN", - // warning: new Error("No wallet connected") - // }) - // return - // } - // - // const wallet = getAptosWallet(connectedWallet) - // if (!wallet) { - // transferState.set({ - // kind: "SWITCHING_TO_CHAIN", - // warning: new Error(`${connectedWallet} wallet not found`) - // }) - // return - // } - // - // // @ts-ignore - // transferState.set({ kind: "SWITCHING_TO_CHAIN" }) - // - // const rpcUrl = $validation.transfer.sourceChain?.rpcs.find(rpc => rpc.type === "rpc")?.url - // if (!rpcUrl) - // return toast.error(`no rpc available for ${$validation.transfer.sourceChain?.display_name}`) - // - // if (stepBefore($transferState, "CONFIRMING_TRANSFER")) { - // const chainInfo = await wallet.getNetwork() - // - // if (chainInfo?.chainId.toString() !== $validation.transfer.sourceChain.chain_id) { - // transferState.set({ - // kind: "SWITCHING_TO_CHAIN", - // warning: new Error("Failed to switch chain") - // }) - // return - // } - // - // // @ts-ignore - // transferState.set({ kind: "CONFIRMING_TRANSFER" }) - // } - // - // if (stepBefore($transferState, "TRANSFERRING")) { - // try { - // const client = createUnionClient({ - // chainId: "2", - // account: await wallet?.getAccount(), - // transport: wallet as AptosBrowserWallet - // }) - // - // const transferPayload = { - // simulate: true, - // receiver: $validation.transfer.receiver, - // amount: parsedAmount, - // authAccess: "wallet", - // denomAddress: $validation.transfer.asset?.balance, - // destinationChainId: $validation.transfer.destinationChain.chain_id as ChainId - // } satisfies TransferAssetsParameters<"2"> - // - // const transfer = await client.transferAsset(transferPayload) - // - // if (transfer.isErr()) throw transfer.error - // transferState.set({ kind: "TRANSFERRING", transferHash: transfer.value }) - // } catch (error) { - // if (error instanceof Error) { - // // @ts-ignore - // transferState.set({ kind: "CONFIRMING_TRANSFER", error }) - // } - // return - // } - // } - // + if (sourceChain.rpc_type === "aptos") { + const { connectedWallet, connectionStatus } = get(aptosStore) + if ($userAddressAptos === null) return toast.error("No aptos user address found") + + if (connectionStatus !== "connected" || !connectedWallet) { + transferState.set({ + kind: "SWITCHING_TO_CHAIN", + warning: new Error("No wallet connected") + }) + return + } + + const wallet = getAptosWallet(connectedWallet) + if (!wallet) { + transferState.set({ + kind: "SWITCHING_TO_CHAIN", + warning: new Error(`${connectedWallet} wallet not found`) + }) + return + } + + // @ts-ignore + transferState.set({ kind: "SWITCHING_TO_CHAIN" }) + + const rpcUrl = sourceChain.rpcs.find(rpc => rpc.type === "rpc")?.url + if (!rpcUrl) return toast.error(`no rpc available for ${sourceChain.display_name}`) + + if (stepBefore($transferState, "CONFIRMING_TRANSFER")) { + const chainInfo = await wallet.getNetwork() + + if (chainInfo?.chainId.toString() !== sourceChain.chain_id) { + transferState.set({ + kind: "SWITCHING_TO_CHAIN", + warning: new Error("Failed to switch chain") + }) + return + } + + // @ts-ignore + transferState.set({ kind: "CONFIRMING_TRANSFER" }) + } + + if (stepBefore($transferState, "TRANSFERRING")) { + try { + const client = createUnionClient({ + chainId: sourceChain.chain_id as AptosChainId, + account: await wallet?.getAccount(), + transport: wallet as AptosBrowserWallet + }) + + let realArgs = { + ...transferArgs, + receiver: toHex(transferArgs.receiver), + baseToken: fromHex(transferArgs.baseToken, "string") + } + + const transfer = await client.transferAsset(realArgs) + + if (transfer.isErr()) throw transfer.error + transferState.set({ + kind: "TRANSFERRING", + transferHash: transfer.value + }) + } catch (error) { + if (error instanceof Error) { + // @ts-ignore + transferState.set({ kind: "CONFIRMING_TRANSFER", error }) + } + return + } + } + } + // /** --- APTOS END --- */ - // /** --- COSOS START --- */ + // /** --- COSMOS START --- */ if (sourceChain.rpc_type === "cosmos" && transferArgs !== "NO_QUOTE_AVAILABLE") { const { connectedWallet, connectionStatus } = get(cosmosStore) if ($userAddrCosmos === null) return toast.error("No Cosmos user address found") diff --git a/app/src/lib/components/connect/connect.svelte b/app/src/lib/components/connect/connect.svelte index df36216784..2a548ce7cc 100644 --- a/app/src/lib/components/connect/connect.svelte +++ b/app/src/lib/components/connect/connect.svelte @@ -34,7 +34,7 @@ let connectedWallets = derived( ) // Set to 3 when shipping aptos. -const WALLET_COUNT = 2 + const WALLET_COUNT = 3; $: if ($connectedWallets >= 1) { buttonText = @@ -97,8 +97,6 @@ $: if ($navigating) sheetOpen = false - - ({ chain: "aptos", From 5e73b1ec47cf52fbce2c3e71ea5af740970710cb Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Wed, 26 Feb 2025 17:34:13 +0300 Subject: [PATCH 02/14] chore(app): adding predict token wrapped for aptos wip Signed-off-by: Kaan Caglan --- .../playground/union-to-movement.ts | 5 +- .../src/query/offchain/ucs03-channels.ts | 61 ++++++++++++++++++- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/typescript-sdk/playground/union-to-movement.ts b/typescript-sdk/playground/union-to-movement.ts index cf5151489e..bd995db061 100644 --- a/typescript-sdk/playground/union-to-movement.ts +++ b/typescript-sdk/playground/union-to-movement.ts @@ -57,7 +57,7 @@ const DESTINATION_CHAIN_ID = "250" const channels = await getRecommendedChannels() let channel_info = getChannelInfo(SOURCE_CHAIN_ID, DESTINATION_CHAIN_ID, channels) -if (channel_info === null) { +if (channel_info === null || true) { // Creating movement channel since its not found in hubble. channel_info = { source_chain_id: SOURCE_CHAIN_ID, @@ -80,7 +80,8 @@ let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_DENOM, channel_info) // consola.error(quoteToken.error) // process.exit(1) // } - +console.info("quote token", quoteToken) +process.exit(1) // manual quote token: quoteToken = { type: "UNWRAPPED", diff --git a/typescript-sdk/src/query/offchain/ucs03-channels.ts b/typescript-sdk/src/query/offchain/ucs03-channels.ts index f1613d1ff7..b62d9df9dd 100644 --- a/typescript-sdk/src/query/offchain/ucs03-channels.ts +++ b/typescript-sdk/src/query/offchain/ucs03-channels.ts @@ -1,4 +1,11 @@ -import { cosmosChainId, evmChainFromChainId, type EvmChainId, evmChainId, GRAQPHQL_URL } from "#mod" +import { + aptosChainId, + cosmosChainId, + evmChainFromChainId, + type EvmChainId, + evmChainId, + GRAQPHQL_URL +} from "#mod" import { graphql } from "gql.tada" import { request } from "graphql-request" import { createPublicClient, fromHex, http, isHex, type Hex } from "viem" @@ -6,6 +13,7 @@ import { err, ok, ResultAsync, type Result } from "neverthrow" import { ucs03ZkgmAbi } from "#abi/ucs-03" import { CosmWasmClient } from "@cosmjs/cosmwasm-stargate" import { cosmosRpcs, type CosmosChainId } from "#cosmos/client" +import { Aptos, AptosConfig, Network, Deserializer, MoveVector } from "@aptos-labs/ts-sdk" const channelsQuery = graphql(/* GraphQL */ ` query Ucs03Channels { @@ -172,6 +180,57 @@ export const getQuoteToken = async ( return ok({ type: "NEW_WRAPPED", quote_token: predictedQuoteToken.value[0] }) } + // aptos token prediction + if (aptosChainId.includes(channel.destination_chain_id)) { + let network: Network + let rpcUrl = "" + if (channel.destination_chain_id === "126") { + network = Network.MAINNET + } else if (channel.destination_chain_id === "250") { + network = Network.TESTNET + rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1" + } else { + return err(new Error(`Unsupported Aptos network: ${channel.destination_chain_id}`)) + } + + const config = new AptosConfig({ network: network, fullnode: rpcUrl }) + const aptos = new Aptos(config) + + // Define the Move function call. + // Replace and with your contract's module address and name. + // const functionCall = + // Build the transaction payload. + + const receiverVec = MoveVector.U8("0x6d756e6f") + const output = await aptos.experimental.viewBinary({ + payload: { + function: `${channel.destination_port_id}::ibc_app::predict_wrapped_token`, + typeArguments: [], + // Adjust functionArguments as needed. + functionArguments: [ + 0, // path + channel.destination_channel_id, // channel + receiverVec + ] + } + }) + + console.info("base_token:", base_token) + console.info("transaction:", output) + console.info("channel.destination_channel_id:", channel.destination_channel_id) + console.info("channel.destination_port_id:", channel.destination_port_id) + const deserializer = new Deserializer(output.slice(1)) + const addressBytes = deserializer.deserializeFixedBytes(32) + const wrappedAddressHex = "0x" + Buffer.from(addressBytes).toString("hex") + + // // 2) The second return value is the salt (vector) + // const saltBytes = deserializer.deserializeBytes() + // const saltHex = "0x" + Buffer.from(saltBytes).toString("hex") + + console.log("Wrapped address:", wrappedAddressHex) + return ok({ type: "NEW_WRAPPED", quote_token: wrappedAddressHex }) + } + return err(new Error("unknown chain in token prediction")) } From 046596bf4b7ebd0437448763678134ab6660f7c1 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 27 Feb 2025 10:23:10 +0300 Subject: [PATCH 03/14] chore(app): adding aptos balance fetcher wip Signed-off-by: Kaan Caglan --- app/src/lib/stores/balances.ts | 79 ++++++++++++++++++- .../playground/union-to-movement.ts | 2 +- .../src/query/offchain/ucs03-channels.ts | 30 ++----- 3 files changed, 86 insertions(+), 25 deletions(-) diff --git a/app/src/lib/stores/balances.ts b/app/src/lib/stores/balances.ts index 13447f0f9f..a5b83fccc4 100644 --- a/app/src/lib/stores/balances.ts +++ b/app/src/lib/stores/balances.ts @@ -55,12 +55,89 @@ export async function queryBalances(chain: Chain, address: string) { await updateBalancesCosmos(chain, address) break case "aptos": - console.error("aptos balance fetching currently unsupported") + await updateBalancesAptos(chain, address) + // console.error("aptos balance fetching currently unsupported") break default: console.error("invalid rpc type in balance fetching") } } +export async function updateBalancesAptos(chain: Chain, address: string) { + // Optionally mark expected tokens as "loading" (if chain.tokens exists) + if (chain.tokens && chain.tokens.length) { + chain.tokens.forEach(token => + updateBalance(chain.chain_id, token.denom, { kind: "loading", timestamp: Date.now() }) + ); + } + + // Define the GraphQL query and variables. + const query = ` + query CoinsData($owner_address: String, $limit: Int, $offset: Int) { + current_fungible_asset_balances( + where: {owner_address: {_eq: $owner_address}} + limit: $limit + offset: $offset + ) { + amount + asset_type + metadata { + name + decimals + symbol + token_standard + } + } + } + `; + const variables = { + owner_address: address, + limit: 100, + offset: 0, + }; + + // Set up the fetch options with appropriate headers. + const fetchOptions: RequestInit = { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-Indexer-Client": "movement-explorer", + "X-Aptos-Client": "aptos-typescript-sdk/1.35.0", + "X-Aptos-Typescript-Sdk-Origin-Method": "queryIndexer", + }, + body: JSON.stringify({ query, variables }), + }; + + try { + // Send the request to the Aptos indexer. + const response = await fetchJson("https://indexer.testnet.movementnetwork.xyz/v1/graphql", fetchOptions); + if (response.isErr()) { + throw new Error(response.error.message); + } + + const data = response.value.data; + if (!data || !data.current_fungible_asset_balances) { + throw new Error("Invalid response data"); + } + + // Process each token balance from the response. + data.current_fungible_asset_balances.forEach((token: any) => { + // Here, asset_type can be used as the key for storing the balance. + const tokenKey = token.asset_type; + const amount = token.amount; + updateBalance(chain.chain_id, tokenKey, { kind: "balance", amount, timestamp: Date.now() }); + }); + } catch (error: any) { + console.error("Error fetching Aptos balances", error); + // On error, update the balances for all tokens with an error state. + if (chain.tokens && chain.tokens.length) { + chain.tokens.forEach(token => + updateBalance(chain.chain_id, token.denom, { kind: "error", error: error.message, timestamp: Date.now() }) + ); + } + } +} + + export async function updateBalancesEvm(chain: Chain, address: Address) { const denoms = chain.tokens.filter(tokens => isAddress(tokens.denom)).map(token => token.denom) diff --git a/typescript-sdk/playground/union-to-movement.ts b/typescript-sdk/playground/union-to-movement.ts index bd995db061..94b1279b42 100644 --- a/typescript-sdk/playground/union-to-movement.ts +++ b/typescript-sdk/playground/union-to-movement.ts @@ -48,7 +48,7 @@ const cliArgs = parseArgs({ }) const PRIVATE_KEY = cliArgs.values["private-key"] -const MUNO_DENOM = "muno" +const MUNO_DENOM = "0x6d756e6f" const AMOUNT = 15n const RECEIVER = "0x4d8a66ece11f6352224942bd1dabc456b4bb5316124f02b9a7b6292ad61f7777" const SOURCE_CHAIN_ID = "union-testnet-9" diff --git a/typescript-sdk/src/query/offchain/ucs03-channels.ts b/typescript-sdk/src/query/offchain/ucs03-channels.ts index b62d9df9dd..c2c73d47fb 100644 --- a/typescript-sdk/src/query/offchain/ucs03-channels.ts +++ b/typescript-sdk/src/query/offchain/ucs03-channels.ts @@ -184,9 +184,7 @@ export const getQuoteToken = async ( if (aptosChainId.includes(channel.destination_chain_id)) { let network: Network let rpcUrl = "" - if (channel.destination_chain_id === "126") { - network = Network.MAINNET - } else if (channel.destination_chain_id === "250") { + if (channel.destination_chain_id === "250") { network = Network.TESTNET rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1" } else { @@ -196,13 +194,7 @@ export const getQuoteToken = async ( const config = new AptosConfig({ network: network, fullnode: rpcUrl }) const aptos = new Aptos(config) - // Define the Move function call. - // Replace and with your contract's module address and name. - // const functionCall = - // Build the transaction payload. - - const receiverVec = MoveVector.U8("0x6d756e6f") - const output = await aptos.experimental.viewBinary({ + const output = await aptos.view({ payload: { function: `${channel.destination_port_id}::ibc_app::predict_wrapped_token`, typeArguments: [], @@ -210,24 +202,16 @@ export const getQuoteToken = async ( functionArguments: [ 0, // path channel.destination_channel_id, // channel - receiverVec + MoveVector.U8(base_token) ] } }) - console.info("base_token:", base_token) - console.info("transaction:", output) - console.info("channel.destination_channel_id:", channel.destination_channel_id) - console.info("channel.destination_port_id:", channel.destination_port_id) - const deserializer = new Deserializer(output.slice(1)) - const addressBytes = deserializer.deserializeFixedBytes(32) - const wrappedAddressHex = "0x" + Buffer.from(addressBytes).toString("hex") - - // // 2) The second return value is the salt (vector) - // const saltBytes = deserializer.deserializeBytes() - // const saltHex = "0x" + Buffer.from(saltBytes).toString("hex") - + const wrappedAddressHex = output[0]?.toString() console.log("Wrapped address:", wrappedAddressHex) + if (!wrappedAddressHex) { + return err(new Error("failed to get wrapped address from aptos")) + } return ok({ type: "NEW_WRAPPED", quote_token: wrappedAddressHex }) } From 8c21f2c2877bb103b8b339a319a96d2f186db9c6 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 27 Feb 2025 11:49:44 +0300 Subject: [PATCH 04/14] chore(app): fixed union->movement transfer issue Signed-off-by: Kaan Caglan --- .../TransferCube/components/Cube/faces/Transfer.svelte | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index 7086361323..14c984c22a 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -257,9 +257,13 @@ const transfer = async () => { }) let realArgs = { ...transferArgs, - receiver: toHex(transferArgs.receiver), + receiver: transferArgs.receiver, baseToken: fromHex(transferArgs.baseToken, "string") } + + if (destChain.rpc_type !== "aptos") { + realArgs.receiver = toHex(transferArgs.receiver) + } console.log("args", realArgs) const transfer = await unionClient.transferAsset(realArgs) From 01da683fc7849c7884f1fdde3ddca3e80a4d8632 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Fri, 28 Feb 2025 10:10:34 +0300 Subject: [PATCH 05/14] chore(app): fetching movement balances Signed-off-by: Kaan Caglan --- .../components/Cube/faces/Transfer.svelte | 15 +++-- .../lib/components/TransferCube/index.svelte | 17 ++++-- app/src/lib/stores/balances.ts | 56 ++++++++++--------- app/src/lib/utilities/neverthrow.ts | 4 +- 4 files changed, 56 insertions(+), 36 deletions(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index 14c984c22a..d12ae97b89 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -88,8 +88,14 @@ const transfer = async () => { // @ts-ignore transferState.set({ kind: "SWITCHING_TO_CHAIN" }) - const rpcUrl = sourceChain.rpcs.find(rpc => rpc.type === "rpc")?.url - if (!rpcUrl) return toast.error(`no rpc available for ${sourceChain.display_name}`) + let rpcUrl = sourceChain.rpcs.find((rpc) => rpc.type === "rpc")?.url; + if (!rpcUrl) + return toast.error(`no rpc available for ${sourceChain.display_name}`); + + if (!rpcUrl.endsWith("/v1", rpcUrl.length - 3)) { + rpcUrl = rpcUrl + "/v1"; + } + rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1"; //TODO: Remove this later its for test if (stepBefore($transferState, "CONFIRMING_TRANSFER")) { const chainInfo = await wallet.getNetwork() @@ -111,13 +117,12 @@ const transfer = async () => { const client = createUnionClient({ chainId: sourceChain.chain_id as AptosChainId, account: await wallet?.getAccount(), - transport: wallet as AptosBrowserWallet + transport: http(`${rpcUrl}`), }) let realArgs = { ...transferArgs, - receiver: toHex(transferArgs.receiver), - baseToken: fromHex(transferArgs.baseToken, "string") + receiver: toHex(transferArgs.receiver) } const transfer = await client.transferAsset(realArgs) diff --git a/app/src/lib/components/TransferCube/index.svelte b/app/src/lib/components/TransferCube/index.svelte index 312e516b7f..05a41b81f7 100644 --- a/app/src/lib/components/TransferCube/index.svelte +++ b/app/src/lib/components/TransferCube/index.svelte @@ -179,10 +179,19 @@ onMount(() => { const unsubscribe = transfer.subscribe(trans => { const chain = trans.intents.sourceChain if (chain) { - const userAddr = - chain.rpc_type === "evm" - ? $userAddress.evm?.canonical.toLowerCase() - : $userAddrCosmos?.canonical + let userAddr; + if (chain.rpc_type === "evm") { + userAddr = $userAddress.evm?.canonical.toLowerCase(); + } else if ( + chain.rpc_type === "aptos" || + chain.chain_id === "movement" + ) { + // Use the aptos field for Movement + userAddr = $userAddress.aptos?.canonical.toLowerCase(); + } else { + // Fallback to cosmos conversion if needed + userAddr = $userAddrCosmos?.canonical; + } if (userAddr && (previousSourceChain !== chain.chain_id || previousUserAddr !== userAddr)) { previousUserAddr = userAddr previousSourceChain = chain.chain_id diff --git a/app/src/lib/stores/balances.ts b/app/src/lib/stores/balances.ts index a5b83fccc4..53f45723f1 100644 --- a/app/src/lib/stores/balances.ts +++ b/app/src/lib/stores/balances.ts @@ -55,14 +55,14 @@ export async function queryBalances(chain: Chain, address: string) { await updateBalancesCosmos(chain, address) break case "aptos": - await updateBalancesAptos(chain, address) + await updateBalancesAptos(chain, address as Address) // console.error("aptos balance fetching currently unsupported") break default: console.error("invalid rpc type in balance fetching") } } -export async function updateBalancesAptos(chain: Chain, address: string) { +export async function updateBalancesAptos(chain: Chain, address: Address) { // Optionally mark expected tokens as "loading" (if chain.tokens exists) if (chain.tokens && chain.tokens.length) { chain.tokens.forEach(token => @@ -91,54 +91,60 @@ export async function updateBalancesAptos(chain: Chain, address: string) { `; const variables = { owner_address: address, - limit: 100, - offset: 0, + limit: 200, + offset: 0 }; // Set up the fetch options with appropriate headers. const fetchOptions: RequestInit = { method: "POST", - headers: { - "Content-Type": "application/json", - "X-Indexer-Client": "movement-explorer", - "X-Aptos-Client": "aptos-typescript-sdk/1.35.0", - "X-Aptos-Typescript-Sdk-Origin-Method": "queryIndexer", - }, body: JSON.stringify({ query, variables }), }; try { // Send the request to the Aptos indexer. - const response = await fetchJson("https://indexer.testnet.movementnetwork.xyz/v1/graphql", fetchOptions); + const response = await fetchJson( + "https://indexer.testnet.movementnetwork.xyz/v1/graphql", + fetchOptions + ) if (response.isErr()) { - throw new Error(response.error.message); + throw new Error(response.error.message) } - const data = response.value.data; if (!data || !data.current_fungible_asset_balances) { throw new Error("Invalid response data"); } - // Process each token balance from the response. - data.current_fungible_asset_balances.forEach((token: any) => { - // Here, asset_type can be used as the key for storing the balance. - const tokenKey = token.asset_type; - const amount = token.amount; - updateBalance(chain.chain_id, tokenKey, { kind: "balance", amount, timestamp: Date.now() }); - }); + const aptosBalances = data.current_fungible_asset_balances + .filter((token: any) => token.metadata.token_standard === "v2") + .map((token: any) => ({ + denom: token.asset_type, + amount: token.amount + })) + + console.info("aptosBalances: ", aptosBalances) + aptosBalances.forEach(token => { + updateBalance(chain.chain_id, token.denom, { + kind: "balance", + amount: token.amount, + timestamp: Date.now() + }) + }) } catch (error: any) { - console.error("Error fetching Aptos balances", error); + console.error("Error fetching Aptos balances", error) // On error, update the balances for all tokens with an error state. if (chain.tokens && chain.tokens.length) { chain.tokens.forEach(token => - updateBalance(chain.chain_id, token.denom, { kind: "error", error: error.message, timestamp: Date.now() }) - ); + updateBalance(chain.chain_id, token.denom, { + kind: "error", + error: error.message, + timestamp: Date.now() + }) + ) } } } - - export async function updateBalancesEvm(chain: Chain, address: Address) { const denoms = chain.tokens.filter(tokens => isAddress(tokens.denom)).map(token => token.denom) balances.update(val => { diff --git a/app/src/lib/utilities/neverthrow.ts b/app/src/lib/utilities/neverthrow.ts index 5d8adb3df2..c9d809e010 100644 --- a/app/src/lib/utilities/neverthrow.ts +++ b/app/src/lib/utilities/neverthrow.ts @@ -1,8 +1,8 @@ import { ResultAsync } from "neverthrow" -export const fetchJson = (url: string) => +export const fetchJson = (url: string, options?: RequestInit) => ResultAsync.fromPromise( - fetch(url).then(response => { + fetch(url, options).then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`) } From d4c7a7a8b20bc0c2779f2408cf94c4ed258ef335 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Fri, 28 Feb 2025 11:27:11 +0300 Subject: [PATCH 06/14] chore(app): creating aptos client according to wallet wip Signed-off-by: Kaan Caglan --- typescript-sdk/src/aptos/client.ts | 178 ++++++++++++++++++++--------- 1 file changed, 125 insertions(+), 53 deletions(-) diff --git a/typescript-sdk/src/aptos/client.ts b/typescript-sdk/src/aptos/client.ts index 26a1dbc027..86f3f142e6 100644 --- a/typescript-sdk/src/aptos/client.ts +++ b/typescript-sdk/src/aptos/client.ts @@ -1,20 +1,22 @@ import { type AptosAccount, - // (These below helpers remain as before) waitForTransactionReceipt, type AptosPublicAccountInfo } from "./transfer.ts" -import { err, type Result } from "neverthrow" +import { ok, err, type Result } from "neverthrow" import { Aptos, Network, AptosConfig, AccountAddress, MoveVector } from "@aptos-labs/ts-sdk" import { createClient, fallback, type HttpTransport } from "viem" import type { AptosBrowserWallet, AuthAccess } from "./wallet.ts" +// Define a unified signer type that always includes an accountAddress. +export type AptosSigner = AptosAccount | (AptosBrowserWallet & { accountAddress: string }) + export type { AptosAccount, AptosBrowserWallet } export const aptosChainId = [ - "2", // aptos testnet + "2", // aptos testnet "177", // movement porto - "250" // movement bardock + "250" // movement bardock ] as const export type AptosChainId = `${(typeof aptosChainId)[number]}` @@ -31,23 +33,25 @@ export type AptosClientParameters = { | { account: AptosAccount; transport: HttpTransport } | { account?: AptosPublicAccountInfo; transport: AptosWindowTransport } ) +export type WalletSigner = AptosBrowserWallet & { accountAddress: string }; /** * Overloads for retrieving an Aptos client. */ async function getAptosClient( parameters: AptosClientParameters & { authAccess: "key" } -): Promise<{ authAccess: "key"; aptos: Aptos; signer: AptosAccount }> +): Promise<{ authAccess: "key"; aptos: Aptos; signer: AptosSigner; transport: HttpTransport }>; + +async function getAptosClient( + parameters: AptosClientParameters & { authAccess: "wallet" } +): Promise<{ authAccess: "wallet"; aptos: Aptos; signer: AptosSigner; transport: AptosWindowTransport }>; -// async function getAptosClient( -// parameters: AptosClientParameters & { authAccess: "wallet" } -// ): Promise<{ authAccess: "wallet"; aptos: Aptos; signer: AptosBrowserWallet }> async function getAptosClient( parameters: AptosClientParameters & { authAccess: AuthAccess } ): Promise< - | { authAccess: "key"; aptos: Aptos; signer: AptosAccount } - | { authAccess: "wallet"; aptos: Aptos; signer: AptosBrowserWallet } + | { authAccess: "key"; aptos: Aptos; signer: AptosSigner; transport: HttpTransport } + | { authAccess: "wallet"; aptos: Aptos; signer: AptosSigner; transport: AptosWindowTransport } > { if (parameters.authAccess === "key") { if (typeof parameters.transport !== "function") { @@ -62,7 +66,8 @@ async function getAptosClient( return { authAccess: "key", aptos: new Aptos(config), - signer: parameters.account as AptosAccount + signer: parameters.account as AptosAccount, // AptosAccount is assumed to have accountAddress + transport: parameters.transport } } @@ -71,20 +76,36 @@ async function getAptosClient( throw new Error("Invalid Aptos transport") } const networkInfo = await parameters.transport.getNetwork() - const network = networkInfo.name.toLowerCase() === "mainnet" ? Network.MAINNET : Network.TESTNET + const network = + networkInfo.name.toLowerCase() === "mainnet" ? Network.MAINNET : Network.TESTNET const config = new AptosConfig({ fullnode: networkInfo.url, network }) + + // Get the connected account + const account = await parameters.transport.getAccount?.() || + { address: "" } + if (!account.address) { + throw new Error("No account address found from the wallet") + } + + // Create a signer by merging the wallet’s methods with the account address. + const signer = Object.assign({}, parameters.transport, { + accountAddress: account.address + }) as unknown as AptosAccount // <== Force-cast to AptosAccount + return { authAccess: "wallet", aptos: new Aptos(config), - signer: parameters.transport as AptosBrowserWallet + signer: signer, + transport: parameters.transport } } + + throw new Error("Invalid Aptos transport") } /** - * New unified transfer parameters for Aptos, - * matching the Cosmos & EVM clients. + * New unified transfer parameters for Aptos, matching the Cosmos & EVM clients. */ export interface TransferAssetParameters { baseAmount: bigint @@ -102,17 +123,22 @@ export interface TransferAssetParameters { */ export const createAptosClient = (clientParameters: AptosClientParameters) => { return createClient({ transport: fallback([]) }) - .extend(_ => ({ - // A helper to get the underlying Aptos client. - // We default to "key" if an account was provided. - getAptosClient: async () => await getAptosClient({ ...clientParameters, authAccess: "key" }) - // clientParameters.account - // ? await getAptosClient({ ...clientParameters, authAccess: "key" }) - // : await getAptosClient({ ...clientParameters, authAccess: "wallet" }) + .extend(() => ({ + getAptosClient: async () => { + console.info("create aptos client params:", clientParameters) + // Use the transport type to determine which client to create. + if (typeof clientParameters.transport === "function") { + console.info("returning key-based client") + return await getAptosClient({ ...clientParameters, authAccess: "key" }) + } else { + console.info("returning wallet-based client") + return await getAptosClient({ ...clientParameters, authAccess: "wallet" }) + } + } })) .extend(client => ({ waitForTransactionReceipt: async ({ hash }: { hash: string }) => { - const { aptos, signer } = await client.getAptosClient() + const { aptos } = await client.getAptosClient() return await waitForTransactionReceipt({ aptos, hash }) }, @@ -129,47 +155,93 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { sourceChannelId, ucs03address }: TransferAssetParameters): Promise> => { - const { aptos, signer } = await client.getAptosClient() - - const baseTokenHex = baseToken.startsWith("0x") ? baseToken.slice(2) : baseToken // Remove "0x" if it exists - // let my_addr = AccountAddress.fromHex(baseToken) + const { aptos, signer, authAccess, transport } = await client.getAptosClient(); const quoteTokenVec = MoveVector.U8(quoteToken) const receiverVec = MoveVector.U8(receiver) - const rawSalt = new Uint8Array(32) + const rawSalt = new Uint8Array(14) crypto.getRandomValues(rawSalt) const salt = MoveVector.U8(rawSalt) - const payload = await aptos.transaction.build.simple({ - sender: signer.accountAddress, - data: { - function: `${ucs03address}::ibc_app::transfer`, - typeArguments: [], - functionArguments: [ - sourceChannelId, - receiverVec, - AccountAddress.fromString(baseToken), - baseAmount, - quoteTokenVec, - quoteAmount, - 18446744073709551615n, - 18446744073709551615n, - salt - ] - } - }) - try { - const txn = await aptos.signAndSubmitTransaction({ - signer: signer, - transaction: payload - }) - const receipt = await waitForTransactionReceipt({ aptos, hash: txn.hash }) - return receipt + let txn; + if (authAccess === "key") { + console.info("key-based flow") + // Key-based flow using the full AptosAccount + const payload = await aptos.transaction.build.simple({ + sender: signer.accountAddress, + data: { + function: `${ucs03address}::ibc_app::transfer`, + typeArguments: [], + functionArguments: [ + sourceChannelId, + receiverVec, + AccountAddress.fromString(baseToken), + baseAmount, + quoteTokenVec, + quoteAmount, + 18446744073709551615n, + 18446744073709551615n, + salt + ] + } + }) + + txn = await aptos.signAndSubmitTransaction({ + signer: signer as AptosAccount, + transaction: payload + }); + const receipt = await waitForTransactionReceipt({ aptos, hash: txn.hash }); + return receipt; + } else { + + const saltHex = toHex(new Uint8Array(14) ); + // 14 bytes + 0x 2 bytes and that walletPayload encodes it in it + // so it becomes 32 byte. + const walletPayload = { + function: `${ucs03address}::ibc_app::transfer`, + type_arguments: [], + arguments: [ + sourceChannelId.toString(), + hexToAscii(receiver), // It is hexing again in it. + baseToken, + baseAmount.toString(), + hexToAscii(quoteToken), // It is hexing again in it. + quoteAmount.toString(), + 18446744073709551615n.toString(), + 18446744073709551615n.toString(), + saltHex + ] + }; + try { + const signedTxn = await transport.signAndSubmitTransaction({ payload: walletPayload }); + return ok(signedTxn.hash); // Wrap the string in a successful Result + } catch (error) { + return err(new Error("Transaction signing failed")); + } + } } catch (error) { + console.info("error is:", error) return err(new Error("failed to execute aptos call", { cause: error as Error })) } } })) } +function toHex(uint8array: Uint8Array): string { + return "0x" + Array.from(uint8array) + .map(b => b.toString(16).padStart(2, "0")) + .join(""); +} + +function hexToAscii(hexString: string): string { + // Remove the "0x" prefix if present. + if (hexString.startsWith("0x") || hexString.startsWith("0X")) { + hexString = hexString.slice(2); + } + let ascii = ""; + for (let i = 0; i < hexString.length; i += 2) { + ascii += String.fromCharCode(parseInt(hexString.substr(i, 2), 16)); + } + return ascii; +} From 64b519f801ad7e2caddf5cae9ee867b05e92e460 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Fri, 28 Feb 2025 16:55:47 +0300 Subject: [PATCH 07/14] chore(app): frontend works for movement<->union both side Signed-off-by: Kaan Caglan --- .../components/Cube/faces/Transfer.svelte | 10 ++-- .../playground/movement-to-union.ts | 53 +++++++++-------- .../playground/union-to-movement.ts | 57 +++++++------------ typescript-sdk/src/aptos/client.ts | 1 - 4 files changed, 51 insertions(+), 70 deletions(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index d12ae97b89..639b98cb49 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -114,10 +114,11 @@ const transfer = async () => { if (stepBefore($transferState, "TRANSFERRING")) { try { + let account = await wallet?.getAccount(); const client = createUnionClient({ chainId: sourceChain.chain_id as AptosChainId, - account: await wallet?.getAccount(), - transport: http(`${rpcUrl}`), + account: account, + transport: wallet }) let realArgs = { @@ -141,10 +142,7 @@ const transfer = async () => { } } } - - // /** --- APTOS END --- */ - // /** --- COSMOS START --- */ - if (sourceChain.rpc_type === "cosmos" && transferArgs !== "NO_QUOTE_AVAILABLE") { + else if (sourceChain.rpc_type === "cosmos" && transferArgs !== "NO_QUOTE_AVAILABLE") { const { connectedWallet, connectionStatus } = get(cosmosStore) if ($userAddrCosmos === null) return toast.error("No Cosmos user address found") diff --git a/typescript-sdk/playground/movement-to-union.ts b/typescript-sdk/playground/movement-to-union.ts index 51fd38add5..2e3dcce29e 100644 --- a/typescript-sdk/playground/movement-to-union.ts +++ b/typescript-sdk/playground/movement-to-union.ts @@ -56,9 +56,9 @@ const AMOUNT = 1n const SOURCE_CHAIN_ID = "250" const DESTINATION_CHAIN_ID = "union-testnet-9" -const RECEIVER = bech32AddressToHex({ address: "bbn14vcpe0yt8xdzaapm8yy6tm26sf45rdgu4u2ka9" }) -// const RECEIVER = -// "756E696F6E31786434787A356E346371657638643378657270666A656367706565706C34667834323263676A" +// const RECEIVER = bech32AddressToHex({ address: "bbn14vcpe0yt8xdzaapm8yy6tm26sf45rdgu4u2ka9" }) +const RECEIVER = + "756E696F6E31786434787A356E346371657638643378657270666A656367706565706C34667834323263676A" /* -------------------------------------------------------- -------------- HOW TO CALCULATE RECEIVER :-------------- @@ -69,23 +69,25 @@ const RECEIVER = bech32AddressToHex({ address: "bbn14vcpe0yt8xdzaapm8yy6tm26sf45 */ const channels = await getRecommendedChannels() +console.info("channels", channels) let channel_info = getChannelInfo(SOURCE_CHAIN_ID, DESTINATION_CHAIN_ID, channels) +console.info("channel_info", channel_info) + if (channel_info === null) { - // Creating movement channel since its not found in hubble. - // consola.info("no channel found") - // process.exit(1) - channel_info = { - source_chain_id: SOURCE_CHAIN_ID, - source_port_id: "80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", - source_channel_id: 2, - source_connection_id: 1, - destination_chain_id: DESTINATION_CHAIN_ID, - destination_port_id: - "756e696f6e3178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c32343763717a3636396565", - destination_channel_id: 27, - destination_connection_id: 36 - } + consola.info("no channel found") + process.exit(1) + // channel_info = { + // source_chain_id: SOURCE_CHAIN_ID, + // source_port_id: "80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", + // source_channel_id: 1, + // source_connection_id: 1, + // destination_chain_id: DESTINATION_CHAIN_ID, + // destination_port_id: + // "756e696f6e3178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c32343763717a3636396565", + // destination_channel_id: 18, + // destination_connection_id: 23 + // } } consola.info("channel", channel_info) @@ -96,14 +98,15 @@ if (quoteToken.isErr()) { consola.error(quoteToken.error) process.exit(1) } - -// manual quote token: -quoteToken = { - type: "UNWRAPPED", - value: { - quote_token: `0x6d756e6f` - } -} +console.info("quote token", quoteToken) + +// // manual quote token: +// quoteToken = { +// type: "UNWRAPPED", +// value: { +// quote_token: `0x6d756e6f` +// } +// } if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { consola.error("No quote token available") diff --git a/typescript-sdk/playground/union-to-movement.ts b/typescript-sdk/playground/union-to-movement.ts index 94b1279b42..7d6fe9ccbd 100644 --- a/typescript-sdk/playground/union-to-movement.ts +++ b/typescript-sdk/playground/union-to-movement.ts @@ -48,8 +48,9 @@ const cliArgs = parseArgs({ }) const PRIVATE_KEY = cliArgs.values["private-key"] -const MUNO_DENOM = "0x6d756e6f" -const AMOUNT = 15n +const MUNO_DENOM = "muno" +const MUNO_HEX = "0x6d756e6f" +const AMOUNT = 1n const RECEIVER = "0x4d8a66ece11f6352224942bd1dabc456b4bb5316124f02b9a7b6292ad61f7777" const SOURCE_CHAIN_ID = "union-testnet-9" const DESTINATION_CHAIN_ID = "250" @@ -57,43 +58,27 @@ const DESTINATION_CHAIN_ID = "250" const channels = await getRecommendedChannels() let channel_info = getChannelInfo(SOURCE_CHAIN_ID, DESTINATION_CHAIN_ID, channels) -if (channel_info === null || true) { - // Creating movement channel since its not found in hubble. - channel_info = { - source_chain_id: SOURCE_CHAIN_ID, - source_port_id: - "756e696f6e3178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c32343763717a3636396565", - source_channel_id: 27, - source_connection_id: 36, - destination_chain_id: DESTINATION_CHAIN_ID, - destination_port_id: "0x80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", - destination_channel_id: 2, - destination_connection_id: 1 - } -} +if (channel_info === null) { + consola.info("no channel found") + process.exit(1) +} consola.info("channel", channel_info) -let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_DENOM, channel_info) -// if (quoteToken.isErr()) { -// consola.info("could not get quote token") -// consola.error(quoteToken.error) -// process.exit(1) -// } -console.info("quote token", quoteToken) -process.exit(1) -// manual quote token: -quoteToken = { - type: "UNWRAPPED", - value: { - quote_token: `0x188b41399546602e35658962477fdf72bd52443474a899d9d48636e8bc299c2c` - } +let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_HEX, channel_info + +) +if (quoteToken.isErr()) { + consola.info("could not get quote token") + consola.error(quoteToken.error) + process.exit(1) } +console.info("quote token", quoteToken) -// if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { -// consola.error("No quote token available") -// process.exit(1) -// } +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.error("No quote token available") + process.exit(1) +} consola.info("quote token", quoteToken.value) if (!PRIVATE_KEY) { @@ -101,10 +86,6 @@ if (!PRIVATE_KEY) { process.exit(1) } -if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { - consola.error("No quote token available") - process.exit(1) -} const unionClient = createUnionClient({ chainId: SOURCE_CHAIN_ID, diff --git a/typescript-sdk/src/aptos/client.ts b/typescript-sdk/src/aptos/client.ts index 86f3f142e6..d74e970a80 100644 --- a/typescript-sdk/src/aptos/client.ts +++ b/typescript-sdk/src/aptos/client.ts @@ -125,7 +125,6 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { return createClient({ transport: fallback([]) }) .extend(() => ({ getAptosClient: async () => { - console.info("create aptos client params:", clientParameters) // Use the transport type to determine which client to create. if (typeof clientParameters.transport === "function") { console.info("returning key-based client") From b22ac640f63fc49ca46b4b7a19f941b9cc91b216 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 6 Mar 2025 15:21:31 +0300 Subject: [PATCH 08/14] chore(app): added stride playground Signed-off-by: Kaan Caglan --- .../playground/movement-to-stride.ts | 146 ++++++++++++++++++ .../playground/stride-to-movement.ts | 122 +++++++++++++++ typescript-sdk/src/aptos/client.ts | 58 ++++--- 3 files changed, 296 insertions(+), 30 deletions(-) create mode 100644 typescript-sdk/playground/movement-to-stride.ts create mode 100644 typescript-sdk/playground/stride-to-movement.ts diff --git a/typescript-sdk/playground/movement-to-stride.ts b/typescript-sdk/playground/movement-to-stride.ts new file mode 100644 index 0000000000..0ffedf5590 --- /dev/null +++ b/typescript-sdk/playground/movement-to-stride.ts @@ -0,0 +1,146 @@ +import { http } from "viem" +import { parseArgs } from "node:util" +import { consola } from "scripts/logger" +import { Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk" +import { createUnionClient, bech32AddressToHex } from "#mod.ts" + +import { + getChannelInfo, + getQuoteToken, + getRecommendedChannels +} from "#query/offchain/ucs03-channels" + +type Channel = { + source_chain_id: string + source_port_id: string + source_channel_id: number + source_connection_id: number + destination_chain_id: string + destination_port_id: string + destination_channel_id: number + destination_connection_id: number +} + +// hack to encode bigints to json +declare global { + interface BigInt { + toJSON: () => string + } +} + +if (!BigInt.prototype.toJSON) { + Object.defineProperty(BigInt.prototype, "toJSON", { + value: function () { + return this.toString() + }, + writable: true, + configurable: true + }) +} +// end hack + +const cliArgs = parseArgs({ + args: process.argv.slice(2), + options: { + "private-key": { type: "string" }, + "estimate-gas": { type: "boolean", default: false } + } +}) + +// HOW TO RUN: +// npx tsx playground/movement-to-union.ts --private-key + +const PRIVATE_KEY = cliArgs.values["private-key"] +const WRAPPED_MUNO_DENOM = "0x188b41399546602e35658962477fdf72bd52443474a899d9d48636e8bc299c2c" +const AMOUNT = 1n +const SOURCE_CHAIN_ID = "250" +const DESTINATION_CHAIN_ID = "stride-internal-1" + +// const RECEIVER = bech32AddressToHex({ address: "stride1rvctj3eax3pj68pfrxkn92fpzqhymwlgdkd03d" }) +const RECEIVER = + "73747269646531727663746A3365617833706A3638706672786B6E393266707A7168796D776C67646B64303364" +/* +-------------------------------------------------------- +-------------- HOW TO CALCULATE RECEIVER :-------------- +-------------------------------------------------------- + +(env) ~/dev/union (movement-integration) ✗) $ printf "%s" stride1rvctj3eax3pj68pfrxkn92fpzqhymwlgdkd03d | xxd -p -u -c 10000 +73747269646531727663746A3365617833706A3638706672786B6E393266707A7168796D776C67646B64303364 +*/ + +const channels = await getRecommendedChannels() +console.info("channels", channels) + +let channel_info = getChannelInfo(SOURCE_CHAIN_ID, DESTINATION_CHAIN_ID, channels) +console.info("channel_info", channel_info) + +if (channel_info === null) { + consola.info("no channel found") + // process.exit(1) + channel_info = { + source_chain_id: SOURCE_CHAIN_ID, + source_port_id: "80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", + source_channel_id: 4, + source_connection_id: 333333333, + destination_chain_id: DESTINATION_CHAIN_ID, + destination_port_id: + "7374726964653178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c3234376371333570727573", + destination_channel_id: 5, + destination_connection_id: 333333333 + } +} + +consola.info("channel", channel_info) + +let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, WRAPPED_MUNO_DENOM, channel_info) +if (quoteToken.isErr()) { + consola.info("could not get quote token") + consola.error(quoteToken.error) + process.exit(1) +} +console.info("quote token", quoteToken) + +// // manual quote token: +// quoteToken = { +// type: "UNWRAPPED", +// value: { +// quote_token: `0x6d756e6f` +// } +// } + +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.error("No quote token available") + process.exit(1) +} +consola.info("quote token", quoteToken.value) + +if (!PRIVATE_KEY) { + consola.error("no private key provided") + process.exit(1) +} + +const privateKey = new Ed25519PrivateKey(PRIVATE_KEY) +const account = Account.fromPrivateKey({ privateKey }) + +const unionClient = createUnionClient({ + chainId: SOURCE_CHAIN_ID, + account: account, + transport: http("https://aptos.testnet.bardock.movementlabs.xyz/v1") +}) + +const transfer = await unionClient.transferAsset({ + baseToken: WRAPPED_MUNO_DENOM, + baseAmount: AMOUNT, + quoteToken: quoteToken.value.quote_token, + quoteAmount: AMOUNT, + receiver: RECEIVER, + sourceChannelId: channel_info.source_channel_id, + ucs03address: `0x${channel_info.source_port_id}` +}) + +if (transfer.isErr()) { + consola.error("transfer submission failed:", transfer.error) + process.exit(1) +} + +consola.info("transfer tx hash", transfer.value) diff --git a/typescript-sdk/playground/stride-to-movement.ts b/typescript-sdk/playground/stride-to-movement.ts new file mode 100644 index 0000000000..db86a7b1ef --- /dev/null +++ b/typescript-sdk/playground/stride-to-movement.ts @@ -0,0 +1,122 @@ +import { fromHex, http } from "viem" +import { parseArgs } from "node:util" +import { consola } from "scripts/logger" +import { createUnionClient, hexToBytes } from "#mod.ts" +import { + getChannelInfo, + getQuoteToken, + getRecommendedChannels //, + // Channel +} from "#query/offchain/ucs03-channels" +import { DirectSecp256k1Wallet } from "@cosmjs/proto-signing" + +type Channel = { + source_chain_id: string + source_port_id: string + source_channel_id: number + source_connection_id: number + destination_chain_id: string + destination_port_id: string + destination_channel_id: number + destination_connection_id: number +} + +// hack to encode bigints to json +declare global { + interface BigInt { + toJSON: () => string + } +} + +if (!BigInt.prototype.toJSON) { + Object.defineProperty(BigInt.prototype, "toJSON", { + value: function () { + return this.toString() + }, + writable: true, + configurable: true + }) +} +// end hack + +const cliArgs = parseArgs({ + args: process.argv.slice(2), + options: { + "private-key": { type: "string" }, + "estimate-gas": { type: "boolean", default: false } + } +}) + +const PRIVATE_KEY = cliArgs.values["private-key"] +const MUNO_DENOM = "ustrd" +const MUNO_HEX = "0x7573747264" +const AMOUNT = 1n +const RECEIVER = "0x4f597b9ac27cc279a66f4963c7955861955604eab8b38dcffee4cbcb7756e4d8" +const SOURCE_CHAIN_ID = "stride-internal-1" +const DESTINATION_CHAIN_ID = "250" + +const channels = await getRecommendedChannels() + +let channel_info = getChannelInfo(SOURCE_CHAIN_ID, DESTINATION_CHAIN_ID, channels) + +if (channel_info === null) { + consola.info("no channel found") + channel_info = { + source_chain_id: SOURCE_CHAIN_ID, + source_port_id: "7374726964653178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c3234376371333570727573", + source_channel_id: 5, + source_connection_id: 333333333, + destination_chain_id: DESTINATION_CHAIN_ID, + destination_port_id: + "80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", + destination_channel_id: 4, + destination_connection_id: 333333333 + } +} +consola.info("channel", channel_info) + +let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_HEX, channel_info + +) +if (quoteToken.isErr()) { + consola.info("could not get quote token") + consola.error(quoteToken.error) + process.exit(1) +} +console.info("quote token", quoteToken) + +if (quoteToken.value.type === "NO_QUOTE_AVAILABLE") { + consola.error("No quote token available") + process.exit(1) +} +consola.info("quote token", quoteToken.value) + +if (!PRIVATE_KEY) { + consola.error("no private key provided") + process.exit(1) +} + + +const unionClient = createUnionClient({ + chainId: SOURCE_CHAIN_ID, + account: await DirectSecp256k1Wallet.fromKey(Uint8Array.from(hexToBytes(PRIVATE_KEY)), "stride"), + gasPrice: { amount: "0.025", denom: "ustrd" }, + transport: http("https://rpc.stride-internal-1.stride.chain.cooking") +}) + +const transfer = await unionClient.transferAsset({ + baseToken: MUNO_DENOM, + baseAmount: AMOUNT, + quoteToken: quoteToken.value.quote_token, + quoteAmount: AMOUNT, + receiver: RECEIVER, + sourceChannelId: channel_info.source_channel_id, + ucs03address: fromHex(`0x${channel_info.source_port_id}`, "string") +}) + +if (transfer.isErr()) { + consola.error("transfer submission failed:", transfer.error) + process.exit(1) +} + +consola.info("transfer tx hash", transfer.value) diff --git a/typescript-sdk/src/aptos/client.ts b/typescript-sdk/src/aptos/client.ts index d74e970a80..7138ecff69 100644 --- a/typescript-sdk/src/aptos/client.ts +++ b/typescript-sdk/src/aptos/client.ts @@ -164,7 +164,6 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { const salt = MoveVector.U8(rawSalt) try { - let txn; if (authAccess === "key") { console.info("key-based flow") // Key-based flow using the full AptosAccount @@ -187,39 +186,38 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { } }) - txn = await aptos.signAndSubmitTransaction({ + const txn = await aptos.signAndSubmitTransaction({ signer: signer as AptosAccount, transaction: payload }); const receipt = await waitForTransactionReceipt({ aptos, hash: txn.hash }); return receipt; - } else { - - const saltHex = toHex(new Uint8Array(14) ); - // 14 bytes + 0x 2 bytes and that walletPayload encodes it in it - // so it becomes 32 byte. - const walletPayload = { - function: `${ucs03address}::ibc_app::transfer`, - type_arguments: [], - arguments: [ - sourceChannelId.toString(), - hexToAscii(receiver), // It is hexing again in it. - baseToken, - baseAmount.toString(), - hexToAscii(quoteToken), // It is hexing again in it. - quoteAmount.toString(), - 18446744073709551615n.toString(), - 18446744073709551615n.toString(), - saltHex - ] - }; - try { - const signedTxn = await transport.signAndSubmitTransaction({ payload: walletPayload }); - return ok(signedTxn.hash); // Wrap the string in a successful Result - } catch (error) { - return err(new Error("Transaction signing failed")); - } + } + const saltHex = toHex(new Uint8Array(14) ); + // 14 bytes + 0x 2 bytes and that walletPayload encodes it in it + // so it becomes 32 byte. + const walletPayload = { + function: `${ucs03address}::ibc_app::transfer`, + type_arguments: [], + arguments: [ + sourceChannelId.toString(), + hexToAscii(receiver), // It is hexing again in it. + baseToken, + baseAmount.toString(), + hexToAscii(quoteToken), // It is hexing again in it. + quoteAmount.toString(), + 18446744073709551615n.toString(), + 18446744073709551615n.toString(), + saltHex + ] + }; + try { + const signedTxn = await transport.signAndSubmitTransaction({ payload: walletPayload }); + return ok(signedTxn.hash); // Wrap the string in a successful Result + } catch (error) { + return err(new Error("Transaction signing failed")); } + } catch (error) { console.info("error is:", error) return err(new Error("failed to execute aptos call", { cause: error as Error })) @@ -228,9 +226,9 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { })) } function toHex(uint8array: Uint8Array): string { - return "0x" + Array.from(uint8array) + return `0x${Array.from(uint8array) .map(b => b.toString(16).padStart(2, "0")) - .join(""); + .join("")}`; } function hexToAscii(hexString: string): string { From 2b4701b9a64b457d8e26430d57c7949597e59c8f Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 6 Mar 2025 15:28:20 +0300 Subject: [PATCH 09/14] chore(app): applied nix-fmt Signed-off-by: Kaan Caglan --- .../components/Cube/faces/Transfer.svelte | 20 +++--- .../lib/components/TransferCube/index.svelte | 21 +++--- app/src/lib/components/connect/connect.svelte | 2 +- app/src/lib/stores/balances.ts | 18 ++--- .../playground/movement-to-stride.ts | 2 +- .../playground/movement-to-union.ts | 2 +- .../playground/stride-to-movement.ts | 11 ++- .../playground/union-to-movement.ts | 5 +- typescript-sdk/src/aptos/client.ts | 69 +++++++++---------- .../src/query/offchain/ucs03-channels.ts | 2 +- 10 files changed, 70 insertions(+), 82 deletions(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index 639b98cb49..4bc4cafaed 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -88,14 +88,13 @@ const transfer = async () => { // @ts-ignore transferState.set({ kind: "SWITCHING_TO_CHAIN" }) - let rpcUrl = sourceChain.rpcs.find((rpc) => rpc.type === "rpc")?.url; - if (!rpcUrl) - return toast.error(`no rpc available for ${sourceChain.display_name}`); + let rpcUrl = sourceChain.rpcs.find(rpc => rpc.type === "rpc")?.url + if (!rpcUrl) return toast.error(`no rpc available for ${sourceChain.display_name}`) - if (!rpcUrl.endsWith("/v1", rpcUrl.length - 3)) { - rpcUrl = rpcUrl + "/v1"; - } - rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1"; //TODO: Remove this later its for test + if (!rpcUrl.endsWith("/v1", rpcUrl.length - 3)) { + rpcUrl = rpcUrl + "/v1" + } + rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1" //TODO: Remove this later its for test if (stepBefore($transferState, "CONFIRMING_TRANSFER")) { const chainInfo = await wallet.getNetwork() @@ -114,7 +113,7 @@ const transfer = async () => { if (stepBefore($transferState, "TRANSFERRING")) { try { - let account = await wallet?.getAccount(); + let account = await wallet?.getAccount() const client = createUnionClient({ chainId: sourceChain.chain_id as AptosChainId, account: account, @@ -141,8 +140,7 @@ const transfer = async () => { return } } - } - else if (sourceChain.rpc_type === "cosmos" && transferArgs !== "NO_QUOTE_AVAILABLE") { + } else if (sourceChain.rpc_type === "cosmos" && transferArgs !== "NO_QUOTE_AVAILABLE") { const { connectedWallet, connectionStatus } = get(cosmosStore) if ($userAddrCosmos === null) return toast.error("No Cosmos user address found") @@ -263,7 +261,7 @@ const transfer = async () => { receiver: transferArgs.receiver, baseToken: fromHex(transferArgs.baseToken, "string") } - + if (destChain.rpc_type !== "aptos") { realArgs.receiver = toHex(transferArgs.receiver) } diff --git a/app/src/lib/components/TransferCube/index.svelte b/app/src/lib/components/TransferCube/index.svelte index 05a41b81f7..9d21221a93 100644 --- a/app/src/lib/components/TransferCube/index.svelte +++ b/app/src/lib/components/TransferCube/index.svelte @@ -179,19 +179,16 @@ onMount(() => { const unsubscribe = transfer.subscribe(trans => { const chain = trans.intents.sourceChain if (chain) { - let userAddr; + let userAddr if (chain.rpc_type === "evm") { - userAddr = $userAddress.evm?.canonical.toLowerCase(); - } else if ( - chain.rpc_type === "aptos" || - chain.chain_id === "movement" - ) { - // Use the aptos field for Movement - userAddr = $userAddress.aptos?.canonical.toLowerCase(); - } else { - // Fallback to cosmos conversion if needed - userAddr = $userAddrCosmos?.canonical; - } + userAddr = $userAddress.evm?.canonical.toLowerCase() + } else if (chain.rpc_type === "aptos" || chain.chain_id === "movement") { + // Use the aptos field for Movement + userAddr = $userAddress.aptos?.canonical.toLowerCase() + } else { + // Fallback to cosmos conversion if needed + userAddr = $userAddrCosmos?.canonical + } if (userAddr && (previousSourceChain !== chain.chain_id || previousUserAddr !== userAddr)) { previousUserAddr = userAddr previousSourceChain = chain.chain_id diff --git a/app/src/lib/components/connect/connect.svelte b/app/src/lib/components/connect/connect.svelte index 2a548ce7cc..738e8b21a1 100644 --- a/app/src/lib/components/connect/connect.svelte +++ b/app/src/lib/components/connect/connect.svelte @@ -34,7 +34,7 @@ let connectedWallets = derived( ) // Set to 3 when shipping aptos. - const WALLET_COUNT = 3; +const WALLET_COUNT = 3 $: if ($connectedWallets >= 1) { buttonText = diff --git a/app/src/lib/stores/balances.ts b/app/src/lib/stores/balances.ts index 53f45723f1..bd8f2ecde4 100644 --- a/app/src/lib/stores/balances.ts +++ b/app/src/lib/stores/balances.ts @@ -64,10 +64,10 @@ export async function queryBalances(chain: Chain, address: string) { } export async function updateBalancesAptos(chain: Chain, address: Address) { // Optionally mark expected tokens as "loading" (if chain.tokens exists) - if (chain.tokens && chain.tokens.length) { + if (chain.tokens && chain.tokens.length > 0) { chain.tokens.forEach(token => updateBalance(chain.chain_id, token.denom, { kind: "loading", timestamp: Date.now() }) - ); + ) } // Define the GraphQL query and variables. @@ -88,18 +88,18 @@ export async function updateBalancesAptos(chain: Chain, address: Address) { } } } - `; + ` const variables = { owner_address: address, limit: 200, offset: 0 - }; + } // Set up the fetch options with appropriate headers. const fetchOptions: RequestInit = { method: "POST", - body: JSON.stringify({ query, variables }), - }; + body: JSON.stringify({ query, variables }) + } try { // Send the request to the Aptos indexer. @@ -110,9 +110,9 @@ export async function updateBalancesAptos(chain: Chain, address: Address) { if (response.isErr()) { throw new Error(response.error.message) } - const data = response.value.data; + const data = response.value.data if (!data || !data.current_fungible_asset_balances) { - throw new Error("Invalid response data"); + throw new Error("Invalid response data") } const aptosBalances = data.current_fungible_asset_balances @@ -133,7 +133,7 @@ export async function updateBalancesAptos(chain: Chain, address: Address) { } catch (error: any) { console.error("Error fetching Aptos balances", error) // On error, update the balances for all tokens with an error state. - if (chain.tokens && chain.tokens.length) { + if (chain.tokens?.length) { chain.tokens.forEach(token => updateBalance(chain.chain_id, token.denom, { kind: "error", diff --git a/typescript-sdk/playground/movement-to-stride.ts b/typescript-sdk/playground/movement-to-stride.ts index 0ffedf5590..aaf8144a55 100644 --- a/typescript-sdk/playground/movement-to-stride.ts +++ b/typescript-sdk/playground/movement-to-stride.ts @@ -2,7 +2,7 @@ import { http } from "viem" import { parseArgs } from "node:util" import { consola } from "scripts/logger" import { Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk" -import { createUnionClient, bech32AddressToHex } from "#mod.ts" +import { createUnionClient } from "#mod.ts" import { getChannelInfo, diff --git a/typescript-sdk/playground/movement-to-union.ts b/typescript-sdk/playground/movement-to-union.ts index 2e3dcce29e..8812ea274b 100644 --- a/typescript-sdk/playground/movement-to-union.ts +++ b/typescript-sdk/playground/movement-to-union.ts @@ -2,7 +2,7 @@ import { http } from "viem" import { parseArgs } from "node:util" import { consola } from "scripts/logger" import { Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk" -import { createUnionClient, bech32AddressToHex } from "#mod.ts" +import { createUnionClient } from "#mod.ts" import { getChannelInfo, diff --git a/typescript-sdk/playground/stride-to-movement.ts b/typescript-sdk/playground/stride-to-movement.ts index db86a7b1ef..817644151d 100644 --- a/typescript-sdk/playground/stride-to-movement.ts +++ b/typescript-sdk/playground/stride-to-movement.ts @@ -63,21 +63,19 @@ if (channel_info === null) { consola.info("no channel found") channel_info = { source_chain_id: SOURCE_CHAIN_ID, - source_port_id: "7374726964653178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c3234376371333570727573", + source_port_id: + "7374726964653178326a7a65757037757766786a78787274666e61326b746375676c746e746775366b766330656561796b306438326c3234376371333570727573", source_channel_id: 5, source_connection_id: 333333333, destination_chain_id: DESTINATION_CHAIN_ID, - destination_port_id: - "80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", + destination_port_id: "80a825c8878d4e22f459f76e581cb477d82f0222e136b06f01ad146e2ae9ed84", destination_channel_id: 4, destination_connection_id: 333333333 } } consola.info("channel", channel_info) -let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_HEX, channel_info - -) +let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_HEX, channel_info) if (quoteToken.isErr()) { consola.info("could not get quote token") consola.error(quoteToken.error) @@ -96,7 +94,6 @@ if (!PRIVATE_KEY) { process.exit(1) } - const unionClient = createUnionClient({ chainId: SOURCE_CHAIN_ID, account: await DirectSecp256k1Wallet.fromKey(Uint8Array.from(hexToBytes(PRIVATE_KEY)), "stride"), diff --git a/typescript-sdk/playground/union-to-movement.ts b/typescript-sdk/playground/union-to-movement.ts index 7d6fe9ccbd..362a9232fc 100644 --- a/typescript-sdk/playground/union-to-movement.ts +++ b/typescript-sdk/playground/union-to-movement.ts @@ -65,9 +65,7 @@ if (channel_info === null) { } consola.info("channel", channel_info) -let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_HEX, channel_info - -) +let quoteToken = await getQuoteToken(SOURCE_CHAIN_ID, MUNO_HEX, channel_info) if (quoteToken.isErr()) { consola.info("could not get quote token") consola.error(quoteToken.error) @@ -86,7 +84,6 @@ if (!PRIVATE_KEY) { process.exit(1) } - const unionClient = createUnionClient({ chainId: SOURCE_CHAIN_ID, account: await DirectSecp256k1Wallet.fromKey(Uint8Array.from(hexToBytes(PRIVATE_KEY)), "union"), diff --git a/typescript-sdk/src/aptos/client.ts b/typescript-sdk/src/aptos/client.ts index 7138ecff69..896ab82c29 100644 --- a/typescript-sdk/src/aptos/client.ts +++ b/typescript-sdk/src/aptos/client.ts @@ -14,9 +14,9 @@ export type AptosSigner = AptosAccount | (AptosBrowserWallet & { accountAddress: export type { AptosAccount, AptosBrowserWallet } export const aptosChainId = [ - "2", // aptos testnet + "2", // aptos testnet "177", // movement porto - "250" // movement bardock + "250" // movement bardock ] as const export type AptosChainId = `${(typeof aptosChainId)[number]}` @@ -33,19 +33,23 @@ export type AptosClientParameters = { | { account: AptosAccount; transport: HttpTransport } | { account?: AptosPublicAccountInfo; transport: AptosWindowTransport } ) -export type WalletSigner = AptosBrowserWallet & { accountAddress: string }; +export type WalletSigner = AptosBrowserWallet & { accountAddress: string } /** * Overloads for retrieving an Aptos client. */ async function getAptosClient( parameters: AptosClientParameters & { authAccess: "key" } -): Promise<{ authAccess: "key"; aptos: Aptos; signer: AptosSigner; transport: HttpTransport }>; +): Promise<{ authAccess: "key"; aptos: Aptos; signer: AptosSigner; transport: HttpTransport }> async function getAptosClient( parameters: AptosClientParameters & { authAccess: "wallet" } -): Promise<{ authAccess: "wallet"; aptos: Aptos; signer: AptosSigner; transport: AptosWindowTransport }>; - +): Promise<{ + authAccess: "wallet" + aptos: Aptos + signer: AptosSigner + transport: AptosWindowTransport +}> async function getAptosClient( parameters: AptosClientParameters & { authAccess: AuthAccess } @@ -76,22 +80,20 @@ async function getAptosClient( throw new Error("Invalid Aptos transport") } const networkInfo = await parameters.transport.getNetwork() - const network = - networkInfo.name.toLowerCase() === "mainnet" ? Network.MAINNET : Network.TESTNET + const network = networkInfo.name.toLowerCase() === "mainnet" ? Network.MAINNET : Network.TESTNET const config = new AptosConfig({ fullnode: networkInfo.url, network }) - + // Get the connected account - const account = await parameters.transport.getAccount?.() || - { address: "" } + const account = (await parameters.transport.getAccount?.()) || { address: "" } if (!account.address) { throw new Error("No account address found from the wallet") } - + // Create a signer by merging the wallet’s methods with the account address. const signer = Object.assign({}, parameters.transport, { accountAddress: account.address - }) as unknown as AptosAccount // <== Force-cast to AptosAccount - + }) as unknown as AptosAccount // <== Force-cast to AptosAccount + return { authAccess: "wallet", aptos: new Aptos(config), @@ -99,7 +101,6 @@ async function getAptosClient( transport: parameters.transport } } - throw new Error("Invalid Aptos transport") } @@ -129,10 +130,9 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { if (typeof clientParameters.transport === "function") { console.info("returning key-based client") return await getAptosClient({ ...clientParameters, authAccess: "key" }) - } else { - console.info("returning wallet-based client") - return await getAptosClient({ ...clientParameters, authAccess: "wallet" }) } + console.info("returning wallet-based client") + return await getAptosClient({ ...clientParameters, authAccess: "wallet" }) } })) .extend(client => ({ @@ -154,12 +154,12 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { sourceChannelId, ucs03address }: TransferAssetParameters): Promise> => { - const { aptos, signer, authAccess, transport } = await client.getAptosClient(); + const { aptos, signer, authAccess, transport } = await client.getAptosClient() const quoteTokenVec = MoveVector.U8(quoteToken) const receiverVec = MoveVector.U8(receiver) - const rawSalt = new Uint8Array(14) + const rawSalt = new Uint8Array(14) crypto.getRandomValues(rawSalt) const salt = MoveVector.U8(rawSalt) @@ -189,11 +189,11 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { const txn = await aptos.signAndSubmitTransaction({ signer: signer as AptosAccount, transaction: payload - }); - const receipt = await waitForTransactionReceipt({ aptos, hash: txn.hash }); - return receipt; - } - const saltHex = toHex(new Uint8Array(14) ); + }) + const receipt = await waitForTransactionReceipt({ aptos, hash: txn.hash }) + return receipt + } + const saltHex = toHex(new Uint8Array(14)) // 14 bytes + 0x 2 bytes and that walletPayload encodes it in it // so it becomes 32 byte. const walletPayload = { @@ -210,14 +210,13 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { 18446744073709551615n.toString(), saltHex ] - }; + } try { - const signedTxn = await transport.signAndSubmitTransaction({ payload: walletPayload }); - return ok(signedTxn.hash); // Wrap the string in a successful Result + const signedTxn = await transport.signAndSubmitTransaction({ payload: walletPayload }) + return ok(signedTxn.hash) // Wrap the string in a successful Result } catch (error) { - return err(new Error("Transaction signing failed")); + return err(new Error("Transaction signing failed")) } - } catch (error) { console.info("error is:", error) return err(new Error("failed to execute aptos call", { cause: error as Error })) @@ -228,17 +227,17 @@ export const createAptosClient = (clientParameters: AptosClientParameters) => { function toHex(uint8array: Uint8Array): string { return `0x${Array.from(uint8array) .map(b => b.toString(16).padStart(2, "0")) - .join("")}`; + .join("")}` } function hexToAscii(hexString: string): string { // Remove the "0x" prefix if present. if (hexString.startsWith("0x") || hexString.startsWith("0X")) { - hexString = hexString.slice(2); + hexString = hexString.slice(2) } - let ascii = ""; + let ascii = "" for (let i = 0; i < hexString.length; i += 2) { - ascii += String.fromCharCode(parseInt(hexString.substr(i, 2), 16)); + ascii += String.fromCharCode(Number.parseInt(hexString.substr(i, 2), 16)) } - return ascii; + return ascii } diff --git a/typescript-sdk/src/query/offchain/ucs03-channels.ts b/typescript-sdk/src/query/offchain/ucs03-channels.ts index c2c73d47fb..4064b1db51 100644 --- a/typescript-sdk/src/query/offchain/ucs03-channels.ts +++ b/typescript-sdk/src/query/offchain/ucs03-channels.ts @@ -13,7 +13,7 @@ import { err, ok, ResultAsync, type Result } from "neverthrow" import { ucs03ZkgmAbi } from "#abi/ucs-03" import { CosmWasmClient } from "@cosmjs/cosmwasm-stargate" import { cosmosRpcs, type CosmosChainId } from "#cosmos/client" -import { Aptos, AptosConfig, Network, Deserializer, MoveVector } from "@aptos-labs/ts-sdk" +import { Aptos, AptosConfig, Network, MoveVector } from "@aptos-labs/ts-sdk" const channelsQuery = graphql(/* GraphQL */ ` query Ucs03Channels { From 0a67a721e7066560e1ec6194762764f4566843b9 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 6 Mar 2025 15:34:53 +0300 Subject: [PATCH 10/14] chore(app): fixed fmt errors Signed-off-by: Kaan Caglan --- .../TransferCube/components/Cube/faces/Transfer.svelte | 2 +- app/src/lib/components/TransferCube/index.svelte | 2 +- app/src/lib/stores/balances.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index 4bc4cafaed..153bafffdf 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -92,7 +92,7 @@ const transfer = async () => { if (!rpcUrl) return toast.error(`no rpc available for ${sourceChain.display_name}`) if (!rpcUrl.endsWith("/v1", rpcUrl.length - 3)) { - rpcUrl = rpcUrl + "/v1" + rpcUrl = `${rpcUrl}/v1` } rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1" //TODO: Remove this later its for test diff --git a/app/src/lib/components/TransferCube/index.svelte b/app/src/lib/components/TransferCube/index.svelte index 9d21221a93..c5e597bb0a 100644 --- a/app/src/lib/components/TransferCube/index.svelte +++ b/app/src/lib/components/TransferCube/index.svelte @@ -179,7 +179,7 @@ onMount(() => { const unsubscribe = transfer.subscribe(trans => { const chain = trans.intents.sourceChain if (chain) { - let userAddr + let userAddr: string | undefined if (chain.rpc_type === "evm") { userAddr = $userAddress.evm?.canonical.toLowerCase() } else if (chain.rpc_type === "aptos" || chain.chain_id === "movement") { diff --git a/app/src/lib/stores/balances.ts b/app/src/lib/stores/balances.ts index bd8f2ecde4..00e9a39d62 100644 --- a/app/src/lib/stores/balances.ts +++ b/app/src/lib/stores/balances.ts @@ -111,7 +111,7 @@ export async function updateBalancesAptos(chain: Chain, address: Address) { throw new Error(response.error.message) } const data = response.value.data - if (!data || !data.current_fungible_asset_balances) { + if (!data?.current_fungible_asset_balances) { throw new Error("Invalid response data") } @@ -133,7 +133,7 @@ export async function updateBalancesAptos(chain: Chain, address: Address) { } catch (error: any) { console.error("Error fetching Aptos balances", error) // On error, update the balances for all tokens with an error state. - if (chain.tokens?.length) { + if (chain.tokens?.length > 0) { chain.tokens.forEach(token => updateBalance(chain.chain_id, token.denom, { kind: "error", From 52c7f03f0a427337fe56bdc71a0de65f6634df46 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 6 Mar 2025 19:00:13 +0300 Subject: [PATCH 11/14] chore(app): removed unnecessary rpc part Signed-off-by: Kaan Caglan --- .../TransferCube/components/Cube/faces/Transfer.svelte | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte index 153bafffdf..9c3e58b1a2 100644 --- a/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte +++ b/app/src/lib/components/TransferCube/components/Cube/faces/Transfer.svelte @@ -88,14 +88,6 @@ const transfer = async () => { // @ts-ignore transferState.set({ kind: "SWITCHING_TO_CHAIN" }) - let rpcUrl = sourceChain.rpcs.find(rpc => rpc.type === "rpc")?.url - if (!rpcUrl) return toast.error(`no rpc available for ${sourceChain.display_name}`) - - if (!rpcUrl.endsWith("/v1", rpcUrl.length - 3)) { - rpcUrl = `${rpcUrl}/v1` - } - rpcUrl = "https://aptos.testnet.bardock.movementlabs.xyz/v1" //TODO: Remove this later its for test - if (stepBefore($transferState, "CONFIRMING_TRANSFER")) { const chainInfo = await wallet.getNetwork() From 940acc61c86ea17e770bf30aad3d0bfe1f99dcde Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 6 Mar 2025 19:51:35 +0300 Subject: [PATCH 12/14] chore(app): updated ts module Signed-off-by: Kaan Caglan --- app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/package.json b/app/package.json index 053e0dcc6a..06aff01f1c 100644 --- a/app/package.json +++ b/app/package.json @@ -25,7 +25,7 @@ "@tanstack/svelte-query": "5.61.5", "@tanstack/svelte-table": "^8.20.5", "@tanstack/svelte-virtual": "3.10.9", - "@unionlabs/client": "^0.1.5", + "@unionlabs/client": "^0.1.4", "@wagmi/connectors": "5.7.5", "@wagmi/core": "2.16.3", "bits-ui": "^0.21.13", From 04f69367484e0b3e158d064e6ed6f23c5bba4618 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Thu, 6 Mar 2025 20:29:55 +0300 Subject: [PATCH 13/14] chore(app): changed hash again Signed-off-by: Kaan Caglan --- app/package-lock.json | 840 ++++++++++++++++++++++-------------- typescript-sdk/package.json | 2 +- 2 files changed, 509 insertions(+), 333 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index ad94d14b57..cfd966aee0 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -19,7 +19,7 @@ "@tanstack/svelte-query": "5.61.5", "@tanstack/svelte-table": "^8.20.5", "@tanstack/svelte-virtual": "3.10.9", - "@unionlabs/client": "^0.1.5", + "@unionlabs/client": "^0.1.4", "@wagmi/connectors": "5.7.5", "@wagmi/core": "2.16.3", "bits-ui": "^0.21.13", @@ -89,9 +89,9 @@ } }, "node_modules/@0no-co/graphql.web": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.13.tgz", - "integrity": "sha512-jqYxOevheVTU1S36ZdzAkJIdvRp2m3OYIG5SEoKDw5NI8eVwkoI0D/Q3DYNGmXCxkA6CQuoa7zvMiDPTLqUNuw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.1.2.tgz", + "integrity": "sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==", "license": "MIT", "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" @@ -192,6 +192,10 @@ "license": "Apache-2.0", "engines": { "node": ">=15.10.0" + }, + "peerDependencies": { + "axios": "^1.7.7", + "got": "^11.8.6" } }, "node_modules/@aptos-labs/aptos-dynamic-transaction-composer": { @@ -233,9 +237,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", - "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -416,9 +420,9 @@ "license": "Apache-2.0" }, "node_modules/@ecies/ciphers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.2.tgz", - "integrity": "sha512-ylfGR7PyTd+Rm2PqQowG08BCKA22QuX8NzrL+LxAAvazN10DMwdJ2fWwAzRj05FI/M8vNFGm3cv9Wq/GFWCBLg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.3.tgz", + "integrity": "sha512-tapn6XhOueMwht3E2UzY0ZZjYokdaw9XtL9kEyjhQ/Fb9vL9xTFbOaI+fV0AWvTpYu4BNloC6getKW6NtSg4mA==", "license": "MIT", "engines": { "bun": ">=1", @@ -982,9 +986,9 @@ } }, "node_modules/@iconify-json/lucide": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@iconify-json/lucide/-/lucide-1.2.25.tgz", - "integrity": "sha512-OsHihLfqdjxwoLWDEnGesrYbCG6VCCoLvmb1U6UJhggsppW+D3DUY/LhhcppZM4Yw3AM4USDIn/gkzqjdRYgEw==", + "version": "1.2.28", + "resolved": "https://registry.npmjs.org/@iconify-json/lucide/-/lucide-1.2.28.tgz", + "integrity": "sha512-SPeAoh1YKhALpNSto/FBspf3GZ0eAr3ka/OI7cJJ5HljLzycIITv0s4Rd2+sRVzFtD1I991mJJmYohQeOSZ+Og==", "dev": true, "license": "ISC", "dependencies": { @@ -1050,24 +1054,32 @@ } }, "node_modules/@iconify/utils/node_modules/@antfu/utils": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.0.tgz", - "integrity": "sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@iconify/utils/node_modules/confbox": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.1.tgz", + "integrity": "sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==", + "dev": true, + "license": "MIT" + }, "node_modules/@iconify/utils/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", "dev": true, "license": "MIT", "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" }, "engines": { "node": ">=14" @@ -1076,6 +1088,18 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@iconify/utils/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, "node_modules/@internationalized/date": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.7.0.tgz", @@ -1831,18 +1855,18 @@ "license": "MIT" }, "node_modules/@nolyfill/shared": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/shared/-/shared-1.0.29.tgz", - "integrity": "sha512-Z8TABKv9kk8LrOtrfShpjeg9BhPI3AKZ78eVsVduSEhti8D59Fk+UmgO7iRJHLd1aMB7A1aIb+bQtcCjVmWJoA==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/shared/-/shared-1.0.44.tgz", + "integrity": "sha512-NI1zxDh4LYL7PYlKKCwojjuc5CEZslywrOTKBNyodjmWjRiZ4AlCMs3Gp+zDoPQPNkYCSQp/luNojHmJWWfCbw==", "license": "MIT" }, "node_modules/@nolyfill/which-typed-array": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/which-typed-array/-/which-typed-array-1.0.29.tgz", - "integrity": "sha512-FqPYrNSzpICKHoKRVUjNfCS0L5B7uK/gGoE32gbV2THPfpwbLfM1e8C9NuOXhNtMjP3G9ni0DXUUipSCaWdfLQ==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/which-typed-array/-/which-typed-array-1.0.44.tgz", + "integrity": "sha512-r2hF85ct2wwB21j3FiPmoicq/iytkh+W7IgT4J4NvN8BZJWOjzNMXn14Gmd8yEe51CXYgTrjHrZmzXnse5NQAw==", "license": "MIT", "dependencies": { - "@nolyfill/shared": "1.0.29" + "@nolyfill/shared": "1.0.44" }, "engines": { "node": ">=12.4.0" @@ -1949,9 +1973,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.4.tgz", - "integrity": "sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz", + "integrity": "sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==", "cpu": [ "arm" ], @@ -1963,9 +1987,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.4.tgz", - "integrity": "sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz", + "integrity": "sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==", "cpu": [ "arm64" ], @@ -1977,9 +2001,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.4.tgz", - "integrity": "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", "cpu": [ "arm64" ], @@ -1991,9 +2015,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.4.tgz", - "integrity": "sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", "cpu": [ "x64" ], @@ -2005,9 +2029,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.4.tgz", - "integrity": "sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz", + "integrity": "sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==", "cpu": [ "arm64" ], @@ -2019,9 +2043,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.4.tgz", - "integrity": "sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz", + "integrity": "sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==", "cpu": [ "x64" ], @@ -2033,9 +2057,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.4.tgz", - "integrity": "sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz", + "integrity": "sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==", "cpu": [ "arm" ], @@ -2047,9 +2071,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.4.tgz", - "integrity": "sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz", + "integrity": "sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==", "cpu": [ "arm" ], @@ -2061,9 +2085,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.4.tgz", - "integrity": "sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", "cpu": [ "arm64" ], @@ -2075,9 +2099,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.4.tgz", - "integrity": "sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", "cpu": [ "arm64" ], @@ -2089,9 +2113,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.4.tgz", - "integrity": "sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz", + "integrity": "sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==", "cpu": [ "loong64" ], @@ -2103,9 +2127,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.4.tgz", - "integrity": "sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz", + "integrity": "sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==", "cpu": [ "ppc64" ], @@ -2117,9 +2141,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.4.tgz", - "integrity": "sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz", + "integrity": "sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==", "cpu": [ "riscv64" ], @@ -2131,9 +2155,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.4.tgz", - "integrity": "sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz", + "integrity": "sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==", "cpu": [ "s390x" ], @@ -2145,9 +2169,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.4.tgz", - "integrity": "sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", "cpu": [ "x64" ], @@ -2158,9 +2182,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.4.tgz", - "integrity": "sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", "cpu": [ "x64" ], @@ -2172,9 +2196,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.4.tgz", - "integrity": "sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", "cpu": [ "arm64" ], @@ -2186,9 +2210,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.4.tgz", - "integrity": "sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz", + "integrity": "sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==", "cpu": [ "ia32" ], @@ -2200,9 +2224,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.4.tgz", - "integrity": "sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", "cpu": [ "x64" ], @@ -2706,12 +2730,12 @@ } }, "node_modules/@tanstack/svelte-table": { - "version": "8.20.5", - "resolved": "https://registry.npmjs.org/@tanstack/svelte-table/-/svelte-table-8.20.5.tgz", - "integrity": "sha512-sFqrA6zAt0mzreg3HWlcPeIwrfKp25tMDTrhkeq5GDzWthv/sW9bRFR3YGRcoxmtmHk3mS1wLQfJrotDXu7eDg==", + "version": "8.21.2", + "resolved": "https://registry.npmjs.org/@tanstack/svelte-table/-/svelte-table-8.21.2.tgz", + "integrity": "sha512-seWFDb20L04p2YkcRx7IPsalfwsnYUCLbjbWAhYkn4SVvhYAosWxO/JETJt8z+McH2DFaCENVV45ezHCskQiRg==", "license": "MIT", "dependencies": { - "@tanstack/table-core": "8.20.5" + "@tanstack/table-core": "8.21.2" }, "engines": { "node": ">=12" @@ -2741,9 +2765,9 @@ } }, "node_modules/@tanstack/table-core": { - "version": "8.20.5", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", - "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "version": "8.21.2", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.2.tgz", + "integrity": "sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA==", "license": "MIT", "engines": { "node": ">=12" @@ -2869,9 +2893,15 @@ "license": "MIT" }, "node_modules/@unionlabs/client": { +<<<<<<< HEAD "version": "0.1.5", "resolved": "https://registry.npmjs.org/@unionlabs/client/-/client-0.1.5.tgz", "integrity": "sha512-+IrJgBDYFrxTz/7PT3MVcsc4xHKA+zPaPpaG4BUofhj32yvOROe1yfk6va/R+Rhxj8qzRdaGhP1mgQ7urfYgNA==", +======= + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@unionlabs/client/-/client-0.1.4.tgz", + "integrity": "sha512-o7UZWF2lF9KhLq1/rUJB3iXB/u/s6TZWfZexRKfh+mtd3SAEd2BVVahmoyG5mvzpdmJoQoywgzMs9Vpx+A93nQ==", +>>>>>>> d77b8107f (chore(app): changed hash again) "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2891,39 +2921,10 @@ "viem": "^2.22.21" } }, - "node_modules/@unionlabs/client/node_modules/ox": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", - "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.10.1", - "@noble/curves": "^1.6.0", - "@noble/hashes": "^1.5.0", - "@scure/bip32": "^1.5.0", - "@scure/bip39": "^1.4.0", - "abitype": "^1.0.6", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@unionlabs/client/node_modules/viem": { - "version": "2.22.22", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.22.22.tgz", - "integrity": "sha512-0z7EFheP+paC/KRlVpu7zXYiqkTX6GR86G0p84LnYr5NgaVxGz0mGsiERy41ThERX1ahkTdEWGGiNgfi6wVqBQ==", + "version": "2.23.6", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.23.6.tgz", + "integrity": "sha512-+yUeK8rktbGFQaLIvY4Tki22HUjian9Z4eKGAUT72RF9bcfkYgK8CJZz9P83tgoeLpiTyX3xcBM4xJZrJyKmsA==", "funding": [ { "type": "github", @@ -3588,9 +3589,9 @@ "license": "0BSD" }, "node_modules/@webgpu/types": { - "version": "0.1.54", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.54.tgz", - "integrity": "sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg==", + "version": "0.1.55", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.55.tgz", + "integrity": "sha512-p97I8XEC1h04esklFqyIH+UhFrUcj8/1/vBWgc6lAK4jMJc+KbhUy8D4dquHYztFj6pHLqGcp/P1xvBBF4r3DA==", "dev": true, "license": "BSD-3-Clause" }, @@ -3622,9 +3623,9 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -3812,9 +3813,9 @@ } }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz", + "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -3868,6 +3869,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4219,6 +4221,19 @@ "node": ">=18" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -4239,9 +4254,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001697", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz", - "integrity": "sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==", + "version": "1.0.30001702", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", + "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", "dev": true, "funding": [ { @@ -4287,9 +4302,9 @@ } }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "license": "MIT", "dependencies": { @@ -4333,7 +4348,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -4604,9 +4618,9 @@ } }, "node_modules/crossws": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.3.tgz", - "integrity": "sha512-/71DJT3xJlqSnBr83uGJesmVHSzZEvgxHt/fIKxBAAngqMHmnBWQNxCphVxxJ2XL3xleu5+hJD6IQ3TglBedcw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.4.tgz", + "integrity": "sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==", "license": "MIT", "dependencies": { "uncrypto": "^0.1.3" @@ -4954,6 +4968,20 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexify": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", @@ -4974,9 +5002,9 @@ "license": "MIT" }, "node_modules/eciesjs": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.13.tgz", - "integrity": "sha512-zBdtR4K+wbj10bWPpIOF9DW+eFYQu8miU5ypunh0t4Bvt83ZPlEWgT5Dq/0G6uwEXumZKjfb5BZxYUZQ2Hzn/Q==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.14.tgz", + "integrity": "sha512-eJAgf9pdv214Hn98FlUzclRMYWF7WfoLlkS9nWMTm1qcCwn6Ad4EGD9lr9HXMBfSrZhYQujRE+p0adPRkctC6A==", "license": "MIT", "dependencies": { "@ecies/ciphers": "^0.2.2", @@ -4991,9 +5019,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.94", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.94.tgz", - "integrity": "sha512-v+oaMuy6AgwZ6Hi2u5UgcM3wxzeFscBTsZBQL2FoDTx/T6k1XEQKz++8fe1VlQ3zjXB6hcvy5JPb5ZSkmVtdIQ==", + "version": "1.5.112", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", + "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", "dev": true, "license": "ISC" }, @@ -5122,6 +5150,24 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", @@ -5129,6 +5175,33 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", @@ -5380,15 +5453,22 @@ } }, "node_modules/expect-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", - "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.0.tgz", + "integrity": "sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } }, + "node_modules/exsolve": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.2.tgz", + "integrity": "sha512-ZEcIMbthn2zeX4/wD/DLxDUjuCltHXT8Htvm/JFlTkdYgWh2+HGppgwwNUnIVxzxP7yJOPtuBAec0dLx6lVY8w==", + "dev": true, + "license": "MIT" + }, "node_modules/extension-port-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-3.0.0.tgz", @@ -5454,9 +5534,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -5581,13 +5661,13 @@ } }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -5598,13 +5678,14 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { @@ -5660,6 +5741,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -5670,6 +5752,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -5679,6 +5770,43 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", @@ -5757,9 +5885,9 @@ } }, "node_modules/globals": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", - "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -5771,23 +5899,17 @@ }, "node_modules/globalthis": { "name": "@nolyfill/globalthis", - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@nolyfill/globalthis/-/globalthis-1.0.28.tgz", - "integrity": "sha512-5NYxV7CA0XCJ9wNmb2H1xIdxAi4e7U2kFjx/KJnuK1zm6zEajWkm/Z52nxTx4sH5+ji1hzCKPfgO1oD+EIQmOA==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/globalthis/-/globalthis-1.0.44.tgz", + "integrity": "sha512-PXEAAubKN6zy9AVSrjzYdEaOaPdoFTMxuiDyc2BYGgrvFQ+NiqZD4Q4JHuR9tPKQyZifQ3MnG8SA/8f21+FIrQ==", "license": "MIT", "dependencies": { - "@nolyfill/shared": "1.0.28" + "@nolyfill/shared": "1.0.44" }, "engines": { "node": ">=12.4.0" } }, - "node_modules/globalthis/node_modules/@nolyfill/shared": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@nolyfill/shared/-/shared-1.0.28.tgz", - "integrity": "sha512-UJTshFMDgugBcYXGLopbL1enYpGREOEfjUMQKLPLeJqWfbfElGtYbGbUcucCENa7cicGo3M5u/DnPiZe/PYQyw==", - "license": "MIT" - }, "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", @@ -5802,6 +5924,18 @@ "dev": true, "license": "MIT" }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "14.4.6", "resolved": "https://registry.npmjs.org/got/-/got-14.4.6.tgz", @@ -5875,9 +6009,9 @@ } }, "node_modules/h3": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.0.tgz", - "integrity": "sha512-OsjX4JW8J4XGgCgEcad20pepFQWnuKH+OwkCJjogF3C+9AZ1iYdtB4hX6vAb5DskBiu5ljEXqApINjR8CqoCMQ==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.1.tgz", + "integrity": "sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==", "license": "MIT", "dependencies": { "cookie-es": "^1.2.2", @@ -5886,7 +6020,6 @@ "destr": "^2.0.3", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.0", - "ohash": "^1.1.4", "radix3": "^1.1.2", "ufo": "^1.5.4", "uncrypto": "^0.1.3" @@ -5901,6 +6034,33 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hash-base": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", @@ -5925,6 +6085,16 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "name": "@nolyfill/hasown", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/hasown/-/hasown-1.0.44.tgz", + "integrity": "sha512-GA/21lkTr2PAQuT6jGnhLuBD5IFd/AEhBXJ/tf33+/bVxPxg+5ejKx9jGQGnyV/P0eSmdup5E+s8b2HL6lOrwQ==", + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", @@ -6035,9 +6205,9 @@ }, "node_modules/is-arguments": { "name": "@nolyfill/is-arguments", - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/is-arguments/-/is-arguments-1.0.29.tgz", - "integrity": "sha512-NDs3NazdLsJCkLP0xmztFE92+dHcU8EeFaifHwid+NtXfi/lJt37Y0PgFlUoaJlC/Cdle1t/CiwPPDQ9LqHEDw==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/is-arguments/-/is-arguments-1.0.44.tgz", + "integrity": "sha512-I/knhoEt8pfYZj20gOmlFSNtRdDvmtJPPeS9MaDvBeRlJEd+vNBAqeVswo48Hp4uF1Fqit5HO78cgpcrqZiw0A==", "license": "MIT", "engines": { "node": ">=12.4.0" @@ -6047,6 +6217,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -6085,6 +6256,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6101,9 +6273,9 @@ }, "node_modules/is-generator-function": { "name": "@nolyfill/is-generator-function", - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/is-generator-function/-/is-generator-function-1.0.29.tgz", - "integrity": "sha512-dBNj5iWhFQUM3JG8XxdwYMQMes44GY9cHCeBXAZNrsYAuQofcL0ke4c9BNh/2FPSVr+sVjErbQHLpaos/XMpug==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/is-generator-function/-/is-generator-function-1.0.44.tgz", + "integrity": "sha512-tulbGeJYU5mfJqC2Ky/FcdkFqvWL20ZGMGwEMk95YzfQL+FT0tI6MTEQb0jOLEuLvkjCUPy7+P+fR0Ntb3Kv3w==", "license": "MIT", "engines": { "node": ">=12.4.0" @@ -6113,6 +6285,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -6189,12 +6362,12 @@ }, "node_modules/is-typed-array": { "name": "@nolyfill/is-typed-array", - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/is-typed-array/-/is-typed-array-1.0.29.tgz", - "integrity": "sha512-JkoSbrC5QVdKcDgTm8UdeREKCwek88mFUnlDtdu/6gdsufljTz80D9fGsIP0+BFLsYzW74UaSTkSoneLxe3JHg==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/is-typed-array/-/is-typed-array-1.0.44.tgz", + "integrity": "sha512-zpGasD7ihjF1Jg7+wjNqGCj9B/iOpgy+SWV2FB0GcoFqDzFUSPzFqpmyLqSYsCas3evMpnaGiY0TvDXEaSun/w==", "license": "MIT", "dependencies": { - "@nolyfill/which-typed-array": "1.0.29" + "@nolyfill/which-typed-array": "1.0.44" }, "engines": { "node": ">=12.4.0" @@ -6214,9 +6387,9 @@ }, "node_modules/isarray": { "name": "@nolyfill/isarray", - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/isarray/-/isarray-1.0.29.tgz", - "integrity": "sha512-YXk/GW1mquC9LpdjrwhY/RjGWp3ud4JZopFjU0XDHHOCy1h1lzMaiUzH8cjLDrbgSDe3yuk2wL4DNPgpkypulA==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/isarray/-/isarray-1.0.44.tgz", + "integrity": "sha512-NTSBKMkzaaVG3lVR5/lMTnW2y26XRQAgkdHMNaBviexwHgmtPsONFJ/HhQDak16BOrpYLasGMKGsgk3oKez57g==", "license": "MIT", "engines": { "node": ">=12.4.0" @@ -6328,9 +6501,9 @@ }, "node_modules/json-stable-stringify": { "name": "@nolyfill/json-stable-stringify", - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/@nolyfill/json-stable-stringify/-/json-stable-stringify-1.0.30.tgz", - "integrity": "sha512-o1iEMo6ad7T2cKxZTzAb3u+Q3/H21SSsKFf5oAVn7PjmT7MJ0Ek2SeVcEdgVUmLmj31/jKo7U5zJWcTaC10Qow==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/json-stable-stringify/-/json-stable-stringify-1.0.44.tgz", + "integrity": "sha512-ArCR39UyNH4a+ZTD77n+GcOCPlQTvDC1n4ubLmN5pk14Y7/sg1lRs0nRP8SCTJZJG4/J3IzsJR2hu8DGm0rjeg==", "license": "MIT", "engines": { "node": ">=12.4.0" @@ -6613,6 +6786,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -6843,9 +7025,9 @@ } }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, "license": "MIT", "engines": { @@ -6877,9 +7059,9 @@ } }, "node_modules/nanoid": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", - "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.2.tgz", + "integrity": "sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==", "funding": [ { "type": "github", @@ -6895,9 +7077,9 @@ } }, "node_modules/neverthrow": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/neverthrow/-/neverthrow-8.1.1.tgz", - "integrity": "sha512-DpbZ/UDI0B+TxJB1JysXSfi1++3YK2xLBqQLTlRN0b4zxlZ2MoiB+dKKV8dMRzt1fAFjRKDknXOVJgpl+a4Amw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/neverthrow/-/neverthrow-8.2.0.tgz", + "integrity": "sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==", "license": "MIT", "engines": { "node": ">=18" @@ -7124,12 +7306,6 @@ "ufo": "^1.5.4" } }, - "node_modules/ohash": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", - "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", - "license": "MIT" - }, "node_modules/on-exit-leak-free": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", @@ -7177,6 +7353,35 @@ "node": ">=0.10.0" } }, + "node_modules/ox": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz", + "integrity": "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "^1.10.1", + "@noble/curves": "^1.6.0", + "@noble/hashes": "^1.5.0", + "@scure/bip32": "^1.5.0", + "@scure/bip39": "^1.4.0", + "abitype": "^1.0.6", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/p-cancelable": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", @@ -7236,11 +7441,14 @@ "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.9.tgz", - "integrity": "sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } }, "node_modules/pako": { "version": "2.1.0", @@ -7382,9 +7590,9 @@ } }, "node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, @@ -7756,9 +7964,9 @@ } }, "node_modules/preact": { - "version": "10.25.4", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz", - "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==", + "version": "10.26.4", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.4.tgz", + "integrity": "sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==", "license": "MIT", "funding": { "type": "opencollective", @@ -7946,6 +8154,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.8.tgz", + "integrity": "sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/query-string": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", @@ -8084,10 +8309,9 @@ } }, "node_modules/readdirp": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", - "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -8194,9 +8418,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -8229,9 +8453,9 @@ } }, "node_modules/rollup": { - "version": "4.34.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.4.tgz", - "integrity": "sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw==", + "version": "4.34.9", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.9.tgz", + "integrity": "sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8245,25 +8469,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.4", - "@rollup/rollup-android-arm64": "4.34.4", - "@rollup/rollup-darwin-arm64": "4.34.4", - "@rollup/rollup-darwin-x64": "4.34.4", - "@rollup/rollup-freebsd-arm64": "4.34.4", - "@rollup/rollup-freebsd-x64": "4.34.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.4", - "@rollup/rollup-linux-arm-musleabihf": "4.34.4", - "@rollup/rollup-linux-arm64-gnu": "4.34.4", - "@rollup/rollup-linux-arm64-musl": "4.34.4", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.4", - "@rollup/rollup-linux-riscv64-gnu": "4.34.4", - "@rollup/rollup-linux-s390x-gnu": "4.34.4", - "@rollup/rollup-linux-x64-gnu": "4.34.4", - "@rollup/rollup-linux-x64-musl": "4.34.4", - "@rollup/rollup-win32-arm64-msvc": "4.34.4", - "@rollup/rollup-win32-ia32-msvc": "4.34.4", - "@rollup/rollup-win32-x64-msvc": "4.34.4", + "@rollup/rollup-android-arm-eabi": "4.34.9", + "@rollup/rollup-android-arm64": "4.34.9", + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-freebsd-arm64": "4.34.9", + "@rollup/rollup-freebsd-x64": "4.34.9", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.9", + "@rollup/rollup-linux-arm-musleabihf": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.9", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.9", + "@rollup/rollup-linux-riscv64-gnu": "4.34.9", + "@rollup/rollup-linux-s390x-gnu": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-ia32-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9", "fsevents": "~2.3.2" } }, @@ -8319,9 +8543,9 @@ }, "node_modules/safe-buffer": { "name": "@nolyfill/safe-buffer", - "version": "1.0.41", - "resolved": "https://registry.npmjs.org/@nolyfill/safe-buffer/-/safe-buffer-1.0.41.tgz", - "integrity": "sha512-QUutoN6a0Rf49n6kYVSppQpfraXfrtrUaxTU/GhcxIhz+3GHp+SrBVnTKE3ASB7AzgZJ7XrxhaBgwrF+hSmeKg==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/safe-buffer/-/safe-buffer-1.0.44.tgz", + "integrity": "sha512-SqlKXtlhNTDMeZKey9jnnuPhi8YTl1lJuEcY9zbm5i4Pqe79UJJ8IJ9oiD6DhgI8KjYc+HtLzpQJNRdNYqb/hw==", "license": "MIT", "engines": { "node": ">=12.4.0" @@ -8404,9 +8628,9 @@ }, "node_modules/side-channel": { "name": "@nolyfill/side-channel", - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/side-channel/-/side-channel-1.0.29.tgz", - "integrity": "sha512-nqk0vlqUL0wmmoPrm2HqDi0KXGy+jTNHlH/oSx7jsrh2rEApSy1mactsSUGWnhuz2ZsngJSrVHWZIaJKi3WUNA==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/side-channel/-/side-channel-1.0.44.tgz", + "integrity": "sha512-y3SvzjuY1ygnzWA4Krwx/WaJAsTMP11DN+e21A8Fa8PW1oDtVB5NSRW7LWurAiS2oKRkuCgcjTYMkBuBkcPCRg==", "dev": true, "license": "MIT", "engines": { @@ -8434,9 +8658,9 @@ } }, "node_modules/sirv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", - "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", "dev": true, "license": "MIT", "dependencies": { @@ -8564,9 +8788,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", "dev": true, "license": "MIT" }, @@ -8824,9 +9048,9 @@ } }, "node_modules/svelte-check": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.4.tgz", - "integrity": "sha512-v0j7yLbT29MezzaQJPEDwksybTE2Ups9rUxEXy92T06TiA0cbqcO8wAOwNUVkFW6B0hsYHA+oAX3BS8b/2oHtw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.5.tgz", + "integrity": "sha512-Gb0T2IqBNe1tLB9EB1Qh+LOe+JB8wt2/rNBDGvkxQVvk8vNeAoG+vZgFB/3P5+zC7RWlyBlzm9dVjZFph/maIg==", "dev": true, "license": "MIT", "dependencies": { @@ -9369,9 +9593,9 @@ "license": "MIT" }, "node_modules/type-fest": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz", - "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", + "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9501,17 +9725,17 @@ } }, "node_modules/unstorage": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", - "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.15.0.tgz", + "integrity": "sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==", "license": "MIT", "dependencies": { "anymatch": "^3.1.3", - "chokidar": "^3.6.0", + "chokidar": "^4.0.3", "destr": "^2.0.3", - "h3": "^1.13.0", + "h3": "^1.15.0", "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.4", + "node-fetch-native": "^1.6.6", "ofetch": "^1.4.1", "ufo": "^1.5.4" }, @@ -9519,21 +9743,21 @@ "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.5.0", + "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3", - "@deno/kv": ">=0.8.4", + "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.0", + "@vercel/blob": ">=0.27.1", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", - "uploadthing": "^7.4.1" + "uploadthing": "^7.4.4" }, "peerDependenciesMeta": { "@azure/app-configuration": { @@ -9592,58 +9816,10 @@ } } }, - "node_modules/unstorage/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/unstorage/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/unstorage/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -10663,12 +10839,12 @@ }, "node_modules/which-typed-array": { "name": "@nolyfill/which-typed-array", - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@nolyfill/which-typed-array/-/which-typed-array-1.0.29.tgz", - "integrity": "sha512-FqPYrNSzpICKHoKRVUjNfCS0L5B7uK/gGoE32gbV2THPfpwbLfM1e8C9NuOXhNtMjP3G9ni0DXUUipSCaWdfLQ==", + "version": "1.0.44", + "resolved": "https://registry.npmjs.org/@nolyfill/which-typed-array/-/which-typed-array-1.0.44.tgz", + "integrity": "sha512-r2hF85ct2wwB21j3FiPmoicq/iytkh+W7IgT4J4NvN8BZJWOjzNMXn14Gmd8yEe51CXYgTrjHrZmzXnse5NQAw==", "license": "MIT", "dependencies": { - "@nolyfill/shared": "1.0.29" + "@nolyfill/shared": "1.0.44" }, "engines": { "node": ">=12.4.0" diff --git a/typescript-sdk/package.json b/typescript-sdk/package.json index 909dd4166f..1c70f55222 100644 --- a/typescript-sdk/package.json +++ b/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@unionlabs/client", - "version": "0.1.3", + "version": "0.1.4", "homepage": "https://union.build", "description": "Union Labs cross-chain transfers client", "type": "module", From 1111cbafafb1ed330e04b699e3a3023a0384a912 Mon Sep 17 00:00:00 2001 From: Kaan Caglan Date: Mon, 10 Mar 2025 20:02:25 +0300 Subject: [PATCH 14/14] chore(app): changed ts sdk version & app hash Signed-off-by: Kaan Caglan --- app/app.nix | 2 +- app/package-lock.json | 14 ++++---------- app/package.json | 2 +- typescript-sdk/package.json | 2 +- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/app/app.nix b/app/app.nix index ad92423d51..415cdc681b 100644 --- a/app/app.nix +++ b/app/app.nix @@ -19,7 +19,7 @@ _: { { packages = { app = jsPkgs.buildNpmPackage { - npmDepsHash = "sha256-o215ZVz15bG3gRLsyLaGqkE8AKheroRkqQvNum7bfzg="; + npmDepsHash = "sha256-e5qRzAWRPvcgAFyEKqKXzw5Vo0AeYcyr3fL9485tZyM="; src = ./.; sourceRoot = "app"; npmFlags = [ diff --git a/app/package-lock.json b/app/package-lock.json index cfd966aee0..33eef0e3aa 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -19,7 +19,7 @@ "@tanstack/svelte-query": "5.61.5", "@tanstack/svelte-table": "^8.20.5", "@tanstack/svelte-virtual": "3.10.9", - "@unionlabs/client": "^0.1.4", + "@unionlabs/client": "^0.1.6", "@wagmi/connectors": "5.7.5", "@wagmi/core": "2.16.3", "bits-ui": "^0.21.13", @@ -2893,15 +2893,9 @@ "license": "MIT" }, "node_modules/@unionlabs/client": { -<<<<<<< HEAD - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@unionlabs/client/-/client-0.1.5.tgz", - "integrity": "sha512-+IrJgBDYFrxTz/7PT3MVcsc4xHKA+zPaPpaG4BUofhj32yvOROe1yfk6va/R+Rhxj8qzRdaGhP1mgQ7urfYgNA==", -======= - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@unionlabs/client/-/client-0.1.4.tgz", - "integrity": "sha512-o7UZWF2lF9KhLq1/rUJB3iXB/u/s6TZWfZexRKfh+mtd3SAEd2BVVahmoyG5mvzpdmJoQoywgzMs9Vpx+A93nQ==", ->>>>>>> d77b8107f (chore(app): changed hash again) + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@unionlabs/client/-/client-0.1.6.tgz", + "integrity": "sha512-oUE0/rOZg5CrLHRSDZEBZbf92LSGl13rnXJf6xNr3BMp8JbGFb4L5F6vS+sUWCwZCLTbMQMyiKotLhqB3bUi1A==", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/app/package.json b/app/package.json index 06aff01f1c..6bad50b7e3 100644 --- a/app/package.json +++ b/app/package.json @@ -25,7 +25,7 @@ "@tanstack/svelte-query": "5.61.5", "@tanstack/svelte-table": "^8.20.5", "@tanstack/svelte-virtual": "3.10.9", - "@unionlabs/client": "^0.1.4", + "@unionlabs/client": "^0.1.6", "@wagmi/connectors": "5.7.5", "@wagmi/core": "2.16.3", "bits-ui": "^0.21.13", diff --git a/typescript-sdk/package.json b/typescript-sdk/package.json index 1c70f55222..8efb638d15 100644 --- a/typescript-sdk/package.json +++ b/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@unionlabs/client", - "version": "0.1.4", + "version": "0.1.6", "homepage": "https://union.build", "description": "Union Labs cross-chain transfers client", "type": "module",