diff --git a/docs/api/functions/generateCaption.md b/docs/api/functions/generateCaption.md index f80d470e547..094e4b0e642 100644 --- a/docs/api/functions/generateCaption.md +++ b/docs/api/functions/generateCaption.md @@ -26,4 +26,4 @@ ## Defined in -[packages/core/src/generation.ts:956](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L956) +[packages/core/src/generation.ts:952](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L952) diff --git a/docs/api/functions/generateImage.md b/docs/api/functions/generateImage.md index 0f42815198c..eead66e7fb5 100644 --- a/docs/api/functions/generateImage.md +++ b/docs/api/functions/generateImage.md @@ -48,4 +48,4 @@ ## Defined in -[packages/core/src/generation.ts:771](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L771) +[packages/core/src/generation.ts:767](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L767) diff --git a/docs/api/functions/generateMessageResponse.md b/docs/api/functions/generateMessageResponse.md index 670854a852a..99a0e3b67cc 100644 --- a/docs/api/functions/generateMessageResponse.md +++ b/docs/api/functions/generateMessageResponse.md @@ -28,4 +28,4 @@ The completed message. ## Defined in -[packages/core/src/generation.ts:731](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L731) +[packages/core/src/generation.ts:727](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L727) diff --git a/docs/api/functions/generateObject.md b/docs/api/functions/generateObject.md index 78b1eda5cfa..1c13c0325ae 100644 --- a/docs/api/functions/generateObject.md +++ b/docs/api/functions/generateObject.md @@ -20,4 +20,4 @@ ## Defined in -[packages/core/src/generation.ts:647](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L647) +[packages/core/src/generation.ts:643](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L643) diff --git a/docs/api/functions/generateObjectArray.md b/docs/api/functions/generateObjectArray.md index 9b47a815f4f..9d461bdef92 100644 --- a/docs/api/functions/generateObjectArray.md +++ b/docs/api/functions/generateObjectArray.md @@ -20,4 +20,4 @@ ## Defined in -[packages/core/src/generation.ts:683](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L683) +[packages/core/src/generation.ts:679](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L679) diff --git a/docs/api/functions/generateObjectV2.md b/docs/api/functions/generateObjectV2.md index 1fcfedbd3ef..7c7c3ceaca8 100644 --- a/docs/api/functions/generateObjectV2.md +++ b/docs/api/functions/generateObjectV2.md @@ -24,4 +24,4 @@ Configuration options for generating objects. ## Defined in -[packages/core/src/generation.ts:1046](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1046) +[packages/core/src/generation.ts:1042](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1042) diff --git a/docs/api/functions/generateShouldRespond.md b/docs/api/functions/generateShouldRespond.md index 7fb882fd464..6eeb44897e9 100644 --- a/docs/api/functions/generateShouldRespond.md +++ b/docs/api/functions/generateShouldRespond.md @@ -28,4 +28,4 @@ Promise resolving to "RESPOND", "IGNORE", "STOP" or null ## Defined in -[packages/core/src/generation.ts:473](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L473) +[packages/core/src/generation.ts:469](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L469) diff --git a/docs/api/functions/generateTextArray.md b/docs/api/functions/generateTextArray.md index 799e5df936b..4fbd7509c12 100644 --- a/docs/api/functions/generateTextArray.md +++ b/docs/api/functions/generateTextArray.md @@ -28,4 +28,4 @@ Promise resolving to an array of strings parsed from the model's response ## Defined in -[packages/core/src/generation.ts:611](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L611) +[packages/core/src/generation.ts:607](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L607) diff --git a/docs/api/functions/generateTrueOrFalse.md b/docs/api/functions/generateTrueOrFalse.md index 19c8e7c9d05..46b4185e84d 100644 --- a/docs/api/functions/generateTrueOrFalse.md +++ b/docs/api/functions/generateTrueOrFalse.md @@ -28,4 +28,4 @@ Promise resolving to a boolean value parsed from the model's response ## Defined in -[packages/core/src/generation.ts:556](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L556) +[packages/core/src/generation.ts:552](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L552) diff --git a/docs/api/functions/generateWebSearch.md b/docs/api/functions/generateWebSearch.md index 4331b64eb0c..16ad6bf52f4 100644 --- a/docs/api/functions/generateWebSearch.md +++ b/docs/api/functions/generateWebSearch.md @@ -16,4 +16,4 @@ ## Defined in -[packages/core/src/generation.ts:980](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L980) +[packages/core/src/generation.ts:976](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L976) diff --git a/docs/api/functions/handleProvider.md b/docs/api/functions/handleProvider.md index 46e1298b7ff..83080e1cef2 100644 --- a/docs/api/functions/handleProvider.md +++ b/docs/api/functions/handleProvider.md @@ -20,4 +20,4 @@ Configuration options specific to the provider. ## Defined in -[packages/core/src/generation.ts:1131](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1131) +[packages/core/src/generation.ts:1127](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1127) diff --git a/docs/api/functions/splitChunks.md b/docs/api/functions/splitChunks.md index f7fbd4b367e..2a0d9cb5ef9 100644 --- a/docs/api/functions/splitChunks.md +++ b/docs/api/functions/splitChunks.md @@ -28,4 +28,4 @@ Promise resolving to array of text chunks with bleed sections ## Defined in -[packages/core/src/generation.ts:528](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L528) +[packages/core/src/generation.ts:524](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L524) diff --git a/docs/api/interfaces/GenerationOptions.md b/docs/api/interfaces/GenerationOptions.md index 9ae246094c2..8ad42165820 100644 --- a/docs/api/interfaces/GenerationOptions.md +++ b/docs/api/interfaces/GenerationOptions.md @@ -12,7 +12,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1016](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1016) +[packages/core/src/generation.ts:1012](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1012) *** @@ -22,7 +22,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1017](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1017) +[packages/core/src/generation.ts:1013](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1013) *** @@ -32,7 +32,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1018](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1018) +[packages/core/src/generation.ts:1014](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1014) *** @@ -42,7 +42,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1019](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1019) +[packages/core/src/generation.ts:1015](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1015) *** @@ -52,7 +52,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1020](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1020) +[packages/core/src/generation.ts:1016](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1016) *** @@ -62,7 +62,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1021](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1021) +[packages/core/src/generation.ts:1017](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1017) *** @@ -72,7 +72,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1022](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1022) +[packages/core/src/generation.ts:1018](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1018) *** @@ -82,7 +82,7 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1023](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1023) +[packages/core/src/generation.ts:1019](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1019) *** @@ -92,4 +92,4 @@ Configuration options for generating objects with a model. #### Defined in -[packages/core/src/generation.ts:1024](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1024) +[packages/core/src/generation.ts:1020](https://github.com/ai16z/eliza/blob/main/packages/core/src/generation.ts#L1020) diff --git a/docs/docs/packages/plugins.md b/docs/docs/packages/plugins.md index ae9b9587ba8..fd9f3b1324d 100644 --- a/docs/docs/packages/plugins.md +++ b/docs/docs/packages/plugins.md @@ -120,8 +120,6 @@ const character = { }; ``` -Here is the updated README with the Coinbase Commerce plugin information added: - --- # 🧩 Plugins @@ -210,6 +208,21 @@ Integrates Solana blockchain functionality: - `walletProvider` - Wallet management - `trustScoreProvider` - Transaction trust metrics +### Charity Contributions + +All Coinbase trades and transfers automatically donate 1% of the transaction amount to charity. Currently, the charity addresses are hardcoded based on the network used for the transaction, with the current charity being supported as X. + +The charity addresses for each network are as follows: + +- **Base**: `0x1234567890123456789012345678901234567890` +- **Solana**: `pWvDXKu6CpbKKvKQkZvDA66hgsTB6X2AgFxksYogHLV` +- **Ethereum**: `0x750EF1D7a0b4Ab1c97B7A623D7917CcEb5ea779C` +- **Arbitrum**: `0x1234567890123456789012345678901234567890` +- **Polygon**: `0x1234567890123456789012345678901234567890` + +In the future, we aim to integrate with The Giving Block API to allow for dynamic and configurable donations, enabling support for a wider range of charitable organizations. + + #### 5. Coinbase Commerce Plugin (`@eliza/plugin-coinbase`) Integrates Coinbase Commerce for payment and transaction management: diff --git a/packages/plugin-coinbase/advanced-sdk-ts b/packages/plugin-coinbase/advanced-sdk-ts new file mode 160000 index 00000000000..1fba324dc5b --- /dev/null +++ b/packages/plugin-coinbase/advanced-sdk-ts @@ -0,0 +1 @@ +Subproject commit 1fba324dc5bb2dc527d9cd09cbd0d4946e450252 diff --git a/packages/plugin-coinbase/src/plugins/massPayments.ts b/packages/plugin-coinbase/src/plugins/massPayments.ts index 8d14324a8f9..c70836408b2 100644 --- a/packages/plugin-coinbase/src/plugins/massPayments.ts +++ b/packages/plugin-coinbase/src/plugins/massPayments.ts @@ -25,7 +25,7 @@ import path from "path"; import { fileURLToPath } from "url"; import fs from "fs"; import { createArrayCsvWriter } from "csv-writer"; -import { getWalletDetails, initializeWallet } from "../utils"; +import { appendTransactionsToCsv, executeTransfer, getCharityAddress, getWalletDetails, initializeWallet } from "../utils"; // Dynamically resolve the file path to the src/plugins directory const __filename = fileURLToPath(import.meta.url); @@ -94,36 +94,6 @@ export const massPayoutProvider: Provider = { }, }; -export async function appendTransactionsToCsv(transactions: Transaction[]) { - try { - const csvWriter = createArrayCsvWriter({ - path: csvFilePath, - header: [ - "Address", - "Amount", - "Status", - "Error Code", - "Transaction URL", - ], - append: true, - }); - - const formattedTransactions = transactions.map((transaction) => [ - transaction.address, - transaction.amount.toString(), - transaction.status, - transaction.errorCode || "", - transaction.transactionUrl || "", - ]); - - elizaLogger.log("Writing transactions to CSV:", formattedTransactions); - await csvWriter.writeRecords(formattedTransactions); - elizaLogger.log("All transactions written to CSV successfully."); - } catch (error) { - elizaLogger.error("Error writing transactions to CSV:", error); - } -} - async function executeMassPayout( runtime: IAgentRuntime, networkId: string, @@ -132,6 +102,7 @@ async function executeMassPayout( assetId: string ): Promise { const transactions: Transaction[] = []; + const assetIdLowercase = assetId.toLowerCase(); try { const sendingWallet = await initializeWallet(runtime, networkId); for (const address of receivingAddresses) { @@ -139,7 +110,7 @@ async function executeMassPayout( if (address) { try { // Check balance before initiating transfer - const assetIdLowercase = assetId.toLowerCase(); + const walletBalance = await sendingWallet.getBalance(assetIdLowercase); @@ -161,31 +132,18 @@ async function executeMassPayout( }); continue; } - const transferDetails = { - amount: transferAmount, - assetId: assetIdLowercase, - destination: address, - gasless: assetIdLowercase === "usdc" ? true : false, - }; - elizaLogger.log("Initiating transfer:", transferDetails); - const transfer = - await sendingWallet.createTransfer(transferDetails); - await transfer.wait(); - - const transactionUrl = transfer.getTransactionLink(); - elizaLogger.log("Transfer successful:", { - address, - transactionUrl, - }); + // Execute the transfer + const transfer = await executeTransfer(sendingWallet, transferAmount, assetIdLowercase, address); transactions.push({ address, - amount: transferAmount, + amount: transfer.getAmount().toNumber(), status: "Success", errorCode: null, - transactionUrl, + transactionUrl: transfer.getTransactionLink(), }); + } catch (error) { elizaLogger.error( "Error during transfer for address:", @@ -211,7 +169,16 @@ async function executeMassPayout( }); } } - + // Send 1% to charity + const charityAddress = getCharityAddress(networkId); + const charityTransfer = await executeTransfer(sendingWallet, transferAmount * 0.01, assetId, charityAddress); + transactions.push({ + address: charityAddress, + amount: charityTransfer.getAmount().toNumber(), + status: "Success", + errorCode: null, + transactionUrl: charityTransfer.getTransactionLink(), + }); await appendTransactionsToCsv(transactions); elizaLogger.log("Finished processing mass payouts."); return transactions; @@ -357,6 +324,17 @@ export const sendMassPayoutAction: Action = { }` ) .join("\n"); + const charityTransactions = transactions.filter( + (tx) => tx.address === getCharityAddress(network) + ); + const charityDetails = charityTransactions + .map( + (tx) => + `Address: ${tx.address}, Amount: ${tx.amount}, Transaction URL: ${ + tx.transactionUrl || "N/A" + }` + ) + .join("\n"); callback( { text: `Mass payouts completed successfully. @@ -366,6 +344,7 @@ export const sendMassPayoutAction: Action = { Details: ${successTransactions.length > 0 ? `✅ Successful Transactions:\n${successDetails}` : "No successful transactions."} ${failedTransactions.length > 0 ? `❌ Failed Transactions:\n${failedDetails}` : "No failed transactions."} +${charityTransactions.length > 0 ? `✅ Charity Transactions:\n${charityDetails}` : "No charity transactions."} Check the CSV file for full details.`, }, diff --git a/packages/plugin-coinbase/src/plugins/trade.ts b/packages/plugin-coinbase/src/plugins/trade.ts index 92632808272..0775fa956aa 100644 --- a/packages/plugin-coinbase/src/plugins/trade.ts +++ b/packages/plugin-coinbase/src/plugins/trade.ts @@ -1,4 +1,4 @@ -import { Coinbase, Trade } from "@coinbase/coinbase-sdk"; +import { Coinbase} from "@coinbase/coinbase-sdk"; import { Action, Plugin, @@ -12,7 +12,7 @@ import { ModelClass, Provider, } from "@ai16z/eliza"; -import { getWalletDetails, initializeWallet } from "../utils"; +import { executeTradeAndCharityTransfer, getWalletDetails } from "../utils"; import { tradeTemplate } from "../templates"; import { isTradeContent, TradeContent, TradeSchema } from "../types"; import { readFile } from "fs/promises"; @@ -22,6 +22,7 @@ import { fileURLToPath } from "url"; import fs from "fs"; import { createArrayCsvWriter } from "csv-writer"; + // Dynamically resolve the file path to the src/plugins directory const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -91,40 +92,6 @@ export const tradeProvider: Provider = { }, }; -export async function appendTradeToCsv(trade: Trade) { - try { - const csvWriter = createArrayCsvWriter({ - path: tradeCsvFilePath, - header: [ - "Network", - "From Amount", - "Source Asset", - "To Amount", - "Target Asset", - "Status", - "Transaction URL", - ], - append: true, - }); - - const formattedTrade = [ - trade.getNetworkId(), - trade.getFromAmount(), - trade.getFromAssetId(), - trade.getToAmount(), - trade.getToAssetId(), - trade.getStatus(), - trade.getTransaction().getTransactionLink() || "", - ]; - - elizaLogger.log("Writing trade to CSV:", formattedTrade); - await csvWriter.writeRecords([formattedTrade]); - elizaLogger.log("Trade written to CSV successfully."); - } catch (error) { - elizaLogger.error("Error writing trade to CSV:", error); - } -} - export const executeTradeAction: Action = { name: "EXECUTE_TRADE", description: @@ -198,37 +165,17 @@ export const executeTradeAction: Action = { ); return; } - - const wallet = await initializeWallet(runtime, network); - - elizaLogger.log("Wallet initialized:", { - network, - address: await wallet.getDefaultAddress(), - }); - - const tradeParams = { - amount, - fromAssetId: sourceAsset.toLowerCase(), - toAssetId: targetAsset.toLowerCase(), - }; - - const trade: Trade = await wallet.createTrade(tradeParams); - - elizaLogger.log("Trade initiated:", trade.toString()); - - // Wait for the trade to complete - await trade.wait(); - - elizaLogger.log("Trade completed successfully:", trade.toString()); - await appendTradeToCsv(trade); + const { trade, transfer } = await executeTradeAndCharityTransfer(runtime, network, amount, sourceAsset, targetAsset); callback( { text: `Trade executed successfully: - Network: ${network} -- Amount: ${amount} +- Amount: ${trade.getFromAmount()} - From: ${sourceAsset} - To: ${targetAsset} -- Transaction URL: ${trade.getTransaction().getTransactionLink() || ""}`, +- Transaction URL: ${trade.getTransaction().getTransactionLink() || ""} +- Charity Amount: ${transfer.getAmount()} +- Charity Transaction URL: ${transfer.getTransactionLink() || ""}`, }, [] ); @@ -317,3 +264,4 @@ export const tradePlugin: Plugin = { actions: [executeTradeAction], providers: [tradeProvider], }; + diff --git a/packages/plugin-coinbase/src/plugins/trades.csv b/packages/plugin-coinbase/src/plugins/trades.csv new file mode 100644 index 00000000000..669e45ed68b --- /dev/null +++ b/packages/plugin-coinbase/src/plugins/trades.csv @@ -0,0 +1,2 @@ +Network,From Amount,Source Asset,To Amount,Target Asset,Status,Transaction URL + diff --git a/packages/plugin-coinbase/src/utils.ts b/packages/plugin-coinbase/src/utils.ts index a727d4941ca..d18ff86652d 100644 --- a/packages/plugin-coinbase/src/utils.ts +++ b/packages/plugin-coinbase/src/utils.ts @@ -1,8 +1,18 @@ -import { Coinbase, Wallet, WalletData } from "@coinbase/coinbase-sdk"; +import { Coinbase, Trade, Wallet, WalletData } from "@coinbase/coinbase-sdk"; import { elizaLogger, IAgentRuntime } from "@ai16z/eliza"; import fs from "fs"; import path from "path"; import { EthereumTransaction } from "@coinbase/coinbase-sdk/dist/client"; +import { fileURLToPath } from "url"; +import { createArrayCsvWriter } from "csv-writer"; +import { Transaction } from "./types"; + +// Dynamically resolve the file path to the src/plugins directory +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const baseDir = path.resolve(__dirname, "../../plugin-coinbase/src/plugins"); +const tradeCsvFilePath = path.join(baseDir, "trades.csv"); +const csvFilePath = path.join(baseDir, "transactions.csv"); export async function initializeWallet( runtime: IAgentRuntime, @@ -69,6 +79,122 @@ export async function initializeWallet( return wallet; } +/** + * Executes a trade and a charity transfer. + * @param {IAgentRuntime} runtime - The runtime for wallet initialization. + * @param {string} network - The network to use. + * @param {number} amount - The amount to trade and transfer. + * @param {string} sourceAsset - The source asset to trade. + * @param {string} targetAsset - The target asset to trade. + */ +export async function executeTradeAndCharityTransfer(runtime: IAgentRuntime, network: string, amount: number, sourceAsset: string, targetAsset: string) { + const wallet = await initializeWallet(runtime, network); + + elizaLogger.log("Wallet initialized:", { + network, + address: await wallet.getDefaultAddress(), + }); + // We send 1% of the amount to a charity address and trade the rest of the 99% + // Based on the network, we use the correct charity address + const charityAddress = getCharityAddress(network); + const charityAmount = amount * 0.01; + const tradeAmount = amount - charityAmount; + const assetIdLowercase = sourceAsset.toLowerCase(); + const tradeParams = { + amount: tradeAmount, + fromAssetId: assetIdLowercase, + toAssetId: targetAsset.toLowerCase(), + }; + + const transfer = await executeTransfer(wallet, charityAmount, assetIdLowercase, network); + const trade: Trade = await wallet.createTrade(tradeParams); + elizaLogger.log("Trade initiated:", trade.toString()); + // Wait for the trade to complete + await trade.wait(); + const transactionUrl = transfer.getTransactionLink(); + elizaLogger.log("Transfer successful:", { + address: charityAddress, + transactionUrl, + }); + elizaLogger.log("Trade completed successfully:", trade.toString()); + await appendTransactionsToCsv([{ + address: charityAddress, + amount: charityAmount, + status: "Success", + errorCode: null, + transactionUrl, + }]); + await appendTradeToCsv(trade); + return { + trade, + transfer, + }; +} + +export async function appendTradeToCsv(trade: Trade) { + try { + const csvWriter = createArrayCsvWriter({ + path: tradeCsvFilePath, + header: [ + "Network", + "From Amount", + "Source Asset", + "To Amount", + "Target Asset", + "Status", + "Transaction URL", + ], + append: true, + }); + + const formattedTrade = [ + trade.getNetworkId(), + trade.getFromAmount(), + trade.getFromAssetId(), + trade.getToAmount(), + trade.getToAssetId(), + trade.getStatus(), + trade.getTransaction().getTransactionLink() || "", + ]; + + elizaLogger.log("Writing trade to CSV:", formattedTrade); + await csvWriter.writeRecords([formattedTrade]); + elizaLogger.log("Trade written to CSV successfully."); + } catch (error) { + elizaLogger.error("Error writing trade to CSV:", error); + } +} + +export async function appendTransactionsToCsv(transactions: Transaction[]) { + try { + const csvWriter = createArrayCsvWriter({ + path: csvFilePath, + header: [ + "Address", + "Amount", + "Status", + "Error Code", + "Transaction URL", + ], + append: true, + }); + + const formattedTransactions = transactions.map((transaction) => [ + transaction.address, + transaction.amount.toString(), + transaction.status, + transaction.errorCode || "", + transaction.transactionUrl || "", + ]); + + elizaLogger.log("Writing transactions to CSV:", formattedTransactions); + await csvWriter.writeRecords(formattedTransactions); + elizaLogger.log("All transactions written to CSV successfully."); + } catch (error) { + elizaLogger.error("Error writing transactions to CSV:", error); + } +} + /** * Updates a key-value pair in character.settings.secrets. * @param {string} characterfilePath - The file path to the character. @@ -201,3 +327,79 @@ export async function getWalletDetails( throw new Error("Unable to retrieve wallet details."); } } + +/** + * Executes a transfer. + * @param {Wallet} wallet - The wallet to use. + * @param {number} amount - The amount to transfer. + * @param {string} sourceAsset - The source asset to transfer. + * @param {string} targetAddress - The target address to transfer to. + */ +export async function executeTransferAndCharityTransfer(wallet: Wallet, amount: number, sourceAsset: string, targetAddress: string, network: string) { + const charityAddress = getCharityAddress(network); + const charityAmount = amount * 0.01; + const transferAmount = amount - charityAmount; + const assetIdLowercase = sourceAsset.toLowerCase(); + const charityTransfer = await executeTransfer(wallet, charityAmount, assetIdLowercase, charityAddress); + elizaLogger.log("Charity Transfer successful:", charityTransfer.toString()); + const transferDetails = { + amount: transferAmount, + assetId: assetIdLowercase, + destination: targetAddress, + gasless: assetIdLowercase === "usdc" ? true : false, + }; + elizaLogger.log("Initiating transfer charity:", transferDetails); + const transfer = await wallet.createTransfer(transferDetails); + elizaLogger.log("Transfer initiated:", transfer.toString()); + await transfer.wait(); + return { + transfer, + charityTransfer, + } + +} + + +/** + * Executes a transfer. + * @param {Wallet} wallet - The wallet to use. + * @param {number} amount - The amount to transfer. + * @param {string} sourceAsset - The source asset to transfer. + * @param {string} targetAddress - The target address to transfer to. + */ +export async function executeTransfer(wallet: Wallet, amount: number, sourceAsset: string, targetAddress: string) { + const assetIdLowercase = sourceAsset.toLowerCase(); + const transferDetails = { + amount, + assetId: assetIdLowercase, + destination: targetAddress, + gasless: assetIdLowercase === "usdc" ? true : false, + }; + elizaLogger.log("Initiating transfer charity:", transferDetails); + const transfer = await wallet.createTransfer(transferDetails); + elizaLogger.log("Charity Transfer initiated:", transfer.toString()); + await transfer.wait(); + return transfer; +} + +/** + * Gets the charity address based on the network. + * For now we are giving to the following charity, but will make this configurable in the future + * https://www.givedirectly.org/crypto/?_gl=1*va5e6k*_gcl_au*MTM1NDUzNTk5Mi4xNzMzMDczNjA3*_ga*OTIwMDMwNTMwLjE3MzMwNzM2MDg.*_ga_GV8XF9FJ16*MTczMzA3MzYwNy4xLjEuMTczMzA3MzYyMi40NS4wLjA. + * @param {string} network - The network to use. + */ +export function getCharityAddress(network: string): string { + let charityAddress; + if (network === "base") { + charityAddress = "0x1234567890123456789012345678901234567890"; + } else if (network === "sol") { + charityAddress = "pWvDXKu6CpbKKvKQkZvDA66hgsTB6X2AgFxksYogHLV"; + } else if (network === "eth") { + charityAddress = "0x750EF1D7a0b4Ab1c97B7A623D7917CcEb5ea779C"; + } else if (network === "arb") { + charityAddress = "0x1234567890123456789012345678901234567890"; + } else if (network === "pol") { + charityAddress = "0x1234567890123456789012345678901234567890"; + } + return charityAddress; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ff737f0c1e..fa14a8a814e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -872,7 +872,7 @@ importers: version: 2.79.2 ts-jest: specifier: 29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3) @@ -1539,109 +1539,6 @@ importers: specifier: ^5.0.0 version: 5.6.3 - web-agent: - dependencies: - '@ai16z/adapter-sqljs': - specifier: workspace:* - version: link:../packages/adapter-sqljs - '@ai16z/eliza': - specifier: workspace:* - version: link:../packages/core - '@ai16z/plugin-bootstrap': - specifier: workspace:* - version: link:../packages/plugin-bootstrap - '@radix-ui/react-dialog': - specifier: 1.1.2 - version: 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-separator': - specifier: 1.1.0 - version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': - specifier: 1.1.0 - version: 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-tooltip': - specifier: 1.1.4 - version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-query': - specifier: 5.61.0 - version: 5.61.0(react@18.3.1) - class-variance-authority: - specifier: 0.7.0 - version: 0.7.0 - clsx: - specifier: 2.1.0 - version: 2.1.0 - lucide-react: - specifier: 0.460.0 - version: 0.460.0(react@18.3.1) - react: - specifier: 18.3.1 - version: 18.3.1 - react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) - react-router-dom: - specifier: 6.22.1 - version: 6.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - tailwind-merge: - specifier: 2.5.4 - version: 2.5.4 - tailwindcss-animate: - specifier: 1.0.7 - version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3))) - vite-plugin-top-level-await: - specifier: 1.4.4 - version: 1.4.4(@swc/helpers@0.5.15)(rollup@4.27.4)(vite@web-agent+@tanstack+router-plugin+vite) - vite-plugin-wasm: - specifier: 3.3.0 - version: 3.3.0(vite@web-agent+@tanstack+router-plugin+vite) - devDependencies: - '@eslint/js': - specifier: 9.15.0 - version: 9.15.0 - '@types/node': - specifier: 22.8.4 - version: 22.8.4 - '@types/react': - specifier: 18.3.12 - version: 18.3.12 - '@types/react-dom': - specifier: 18.3.1 - version: 18.3.1 - '@vitejs/plugin-react': - specifier: 4.3.3 - version: 4.3.3(vite@web-agent+@tanstack+router-plugin+vite) - autoprefixer: - specifier: 10.4.20 - version: 10.4.20(postcss@8.4.49) - eslint: - specifier: 9.13.0 - version: 9.13.0(jiti@2.4.0) - eslint-plugin-react-hooks: - specifier: 5.0.0 - version: 5.0.0(eslint@9.13.0(jiti@2.4.0)) - eslint-plugin-react-refresh: - specifier: 0.4.14 - version: 0.4.14(eslint@9.13.0(jiti@2.4.0)) - globals: - specifier: 15.11.0 - version: 15.11.0 - postcss: - specifier: 8.4.49 - version: 8.4.49 - tailwindcss: - specifier: 3.4.15 - version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) - typescript: - specifier: ~5.6.2 - version: 5.6.3 - typescript-eslint: - specifier: 8.11.0 - version: 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - vite: - specifier: link:@tanstack/router-plugin/vite - version: link:@tanstack/router-plugin/vite - packages: '@0glabs/0g-ts-sdk@0.2.1': @@ -3957,18 +3854,10 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.18.0': - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-array@0.19.0': resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.7.0': - resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.0': resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3977,10 +3866,6 @@ packages: resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.13.0': - resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.15.0': resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -9233,16 +9118,6 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.13.0: - resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - eslint@9.16.0: resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -16388,7 +16263,7 @@ snapshots: - utf-8-validate - vue - '@ai16z/adapter-sqljs@0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(whatwg-url@14.0.0)': + '@ai16z/adapter-sqljs@0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(utf-8-validate@5.0.10)(whatwg-url@14.0.0)': dependencies: '@ai16z/eliza': 0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(utf-8-validate@5.0.10)(whatwg-url@14.0.0) '@types/sql.js': 1.4.9 @@ -16407,6 +16282,7 @@ snapshots: - '@langchain/mistralai' - '@langchain/ollama' - axios + - bufferutil - cheerio - encoding - handlebars @@ -16417,6 +16293,7 @@ snapshots: - supports-color - svelte - typeorm + - utf-8-validate - vue '@ai16z/adapter-supabase@0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(utf-8-validate@5.0.10)(whatwg-url@14.0.0)': @@ -16458,7 +16335,7 @@ snapshots: '@ai-sdk/groq': 0.0.3(zod@3.23.8) '@ai-sdk/openai': 1.0.0-canary.3(zod@3.23.8) '@ai16z/adapter-sqlite': 0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(utf-8-validate@5.0.10)(whatwg-url@14.0.0) - '@ai16z/adapter-sqljs': 0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(whatwg-url@14.0.0) + '@ai16z/adapter-sqljs': 0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(utf-8-validate@5.0.10)(whatwg-url@14.0.0) '@ai16z/adapter-supabase': 0.1.4-alpha.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@langchain/core@0.3.19(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(handlebars@4.7.8)(react@18.3.1)(sswr@2.1.0(svelte@5.2.11))(svelte@5.2.11)(utf-8-validate@5.0.10)(whatwg-url@14.0.0) '@anthropic-ai/sdk': 0.30.1(encoding@0.1.13) '@types/uuid': 10.0.0 @@ -19777,11 +19654,6 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.13.0(jiti@2.4.0))': - dependencies: - eslint: 9.13.0(jiti@2.4.0) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@2.4.0))': dependencies: eslint: 9.16.0(jiti@2.4.0) @@ -19789,14 +19661,6 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': - dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@eslint/config-array@0.19.0': dependencies: '@eslint/object-schema': 2.1.4 @@ -19805,8 +19669,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/core@0.7.0': {} - '@eslint/core@0.9.0': {} '@eslint/eslintrc@3.2.0': @@ -19823,8 +19685,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.13.0': {} - '@eslint/js@9.15.0': {} '@eslint/js@9.16.0': {} @@ -23080,24 +22940,6 @@ snapshots: '@types/node': 20.17.9 optional: true - '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.11.0 - eslint: 9.13.0(jiti@2.4.0) - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -23152,19 +22994,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.11.0 - debug: 4.3.7(supports-color@5.5.0) - eslint: 9.13.0(jiti@2.4.0) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.11.0 @@ -23224,18 +23053,6 @@ snapshots: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - '@typescript-eslint/type-utils@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - debug: 4.3.7(supports-color@5.5.0) - ts-api-utils: 1.4.3(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - eslint - - supports-color - '@typescript-eslint/type-utils@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) @@ -23351,17 +23168,6 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.4.0)) - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - eslint: 9.13.0(jiti@2.4.0) - transitivePeerDependencies: - - supports-color - - typescript - '@typescript-eslint/utils@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.0)) @@ -23456,17 +23262,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.3(vite@web-agent+@tanstack+router-plugin+vite)': - dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: link:web-agent/@tanstack/router-plugin/vite - transitivePeerDependencies: - - supports-color - '@vitest/coverage-v8@2.1.5(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0))': dependencies: '@ampproject/remapping': 2.3.0 @@ -24139,15 +23934,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.7.8: - dependencies: - follow-redirects: 1.15.9(debug@4.3.7) - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - optional: true - axios@1.7.8(debug@4.3.7): dependencies: follow-redirects: 1.15.9(debug@4.3.7) @@ -26335,18 +26121,10 @@ snapshots: '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@2.4.0)) - eslint-plugin-react-hooks@5.0.0(eslint@9.13.0(jiti@2.4.0)): - dependencies: - eslint: 9.13.0(jiti@2.4.0) - eslint-plugin-react-hooks@5.0.0(eslint@9.16.0(jiti@2.4.0)): dependencies: eslint: 9.16.0(jiti@2.4.0) - eslint-plugin-react-refresh@0.4.14(eslint@9.13.0(jiti@2.4.0)): - dependencies: - eslint: 9.13.0(jiti@2.4.0) - eslint-plugin-react-refresh@0.4.14(eslint@9.16.0(jiti@2.4.0)): dependencies: eslint: 9.16.0(jiti@2.4.0) @@ -26398,48 +26176,6 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.13.0(jiti@2.4.0): - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.4.0)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.7.0 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.13.0 - '@eslint/plugin-kit': 0.2.3 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.3.7(supports-color@5.5.0) - escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - text-table: 0.2.0 - optionalDependencies: - jiti: 2.4.0 - transitivePeerDependencies: - - supports-color - eslint@9.16.0(jiti@2.4.0): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.0)) @@ -26711,7 +26447,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -28855,7 +28591,7 @@ snapshots: zod: 3.23.8 zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: - axios: 1.7.8 + axios: 1.7.8(debug@4.3.7) handlebars: 4.7.8 transitivePeerDependencies: - encoding @@ -33878,12 +33614,12 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) + jest: 29.7.0(@types/node@20.17.9) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -33896,14 +33632,13 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.0) - esbuild: 0.24.0 - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9))(typescript@5.6.3): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.9) + jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -34081,17 +33816,6 @@ snapshots: typeforce@1.18.0: {} - typescript-eslint@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - eslint - - supports-color - typescript-eslint@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3): dependencies: '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3) @@ -34519,24 +34243,10 @@ snapshots: - '@swc/helpers' - rollup - vite-plugin-top-level-await@1.4.4(@swc/helpers@0.5.15)(rollup@4.27.4)(vite@web-agent+@tanstack+router-plugin+vite): - dependencies: - '@rollup/plugin-virtual': 3.0.2(rollup@4.27.4) - '@swc/core': 1.9.3(@swc/helpers@0.5.15) - uuid: 10.0.0 - vite: link:web-agent/@tanstack/router-plugin/vite - transitivePeerDependencies: - - '@swc/helpers' - - rollup - vite-plugin-wasm@3.3.0(vite@client+@tanstack+router-plugin+vite): dependencies: vite: link:client/@tanstack/router-plugin/vite - vite-plugin-wasm@3.3.0(vite@web-agent+@tanstack+router-plugin+vite): - dependencies: - vite: link:web-agent/@tanstack/router-plugin/vite - vite@5.4.11(@types/node@20.17.9)(terser@5.36.0): dependencies: esbuild: 0.21.5