diff --git a/agent/package.json b/agent/package.json index dab1fc8869..156f31b378 100644 --- a/agent/package.json +++ b/agent/package.json @@ -36,7 +36,6 @@ "@elizaos/plugin-intiface": "workspace:*", "@elizaos/plugin-coinbase": "workspace:*", "@elizaos/plugin-conflux": "workspace:*", - "@elizaos/plugin-concierge": "workspace:*", "@elizaos/plugin-evm": "workspace:*", "@elizaos/plugin-flow": "workspace:*", "@elizaos/plugin-story": "workspace:*", diff --git a/packages/plugin-concierge/.npmignore b/packages/plugin-concierge/.npmignore deleted file mode 100644 index 078562ecea..0000000000 --- a/packages/plugin-concierge/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -* - -!dist/** -!package.json -!readme.md -!tsup.config.ts \ No newline at end of file diff --git a/packages/plugin-concierge/eslint.config.mjs b/packages/plugin-concierge/eslint.config.mjs deleted file mode 100644 index 92fe5bbebe..0000000000 --- a/packages/plugin-concierge/eslint.config.mjs +++ /dev/null @@ -1,3 +0,0 @@ -import eslintGlobalConfig from "../../eslint.config.mjs"; - -export default [...eslintGlobalConfig]; diff --git a/packages/plugin-concierge/package.json b/packages/plugin-concierge/package.json deleted file mode 100644 index ce56d2d1b0..0000000000 --- a/packages/plugin-concierge/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@elizaos/plugin-concierge", - "version": "0.1.7-alpha.1", - "main": "dist/index.js", - "type": "module", - "types": "dist/index.d.ts", - "dependencies": { - "@elizaos/core": "workspace:*", - "@coinbase/cbpay-js": "^2.4.0", - "@coinbase/coinbase-sdk": "0.11.2", - "build": "^0.1.4", - "tsup": "8.3.5" - }, - "scripts": { - "build": "tsup --format esm --dts", - "dev": "tsup --format esm --dts --watch", - "lint": "eslint --fix --cache ." - } -} diff --git a/packages/plugin-concierge/src/actions/baselinks.ts b/packages/plugin-concierge/src/actions/baselinks.ts deleted file mode 100644 index 074b449c99..0000000000 --- a/packages/plugin-concierge/src/actions/baselinks.ts +++ /dev/null @@ -1,74 +0,0 @@ -export interface Frame { - title: string; - buttons: { content: string; action: string; target: string }[]; - image: string; -} - -const framesUrl = - process.env.BASELINKS_URL !== undefined - ? process.env.BASELINKS_URL - : "https://baselinks.vercel.app"; - -export class baselinks { - static walletDetails( - ownerAddress: string, - agentAddress: string, - balance: number - ): string { - const url = `${framesUrl}/wallet?agentAddress=${agentAddress}&ownerAddress=${ownerAddress}&balance=${balance}`; - return url; - } - - static coinbaseLink(address: string): string { - const url = `${framesUrl}/coinbase?address=${address}`; - return url; - } - - static paymentLink( - toAddress: string = "0x0000000000000000000000000000000000000000", - amount: number = 0.01, - onRampURL?: string - ): string { - let sendUrl = `${framesUrl}/payment?amount=${amount}&recipientAddress=${toAddress}`; - if (onRampURL) { - sendUrl = sendUrl + "&onRampURL=" + encodeURIComponent(onRampURL); - } - return sendUrl; - } - - static receiptLink(txLink: string, amount: number): string { - if (!txLink) return ""; - const receiptUrl = `${framesUrl}/receipt?txLink=${txLink}&amount=${amount}`; - return receiptUrl; - } - - static coinbaseDMLink(address: string, amount: number): string { - const url = `${framesUrl}/coinbase?address=${address}&amount=${amount}`; - return url; - } - - static converseLink(peer: string, pretext?: string): string { - let url = `https://converse.xyz/dm/${peer}`; - if (pretext) url += `&pretext=${encodeURIComponent(pretext)}`; - return url; - } - - static converseGroupLink(groupId: string, pretext?: string): string { - let url = `https://converse.xyz/group/${groupId}`; - if (pretext) url += `&pretext=${encodeURIComponent(pretext)}`; - return url; - } - - static customFrame(frame: Frame): string { - const params = new URLSearchParams(); - for (const [key, value] of Object.entries(frame)) { - params.append( - key, - typeof value === "object" ? JSON.stringify(value) : value - ); - } - - const frameUrl = `${framesUrl}/custom?${params.toString()}`; - return frameUrl; - } -} diff --git a/packages/plugin-concierge/src/actions/cdp.ts b/packages/plugin-concierge/src/actions/cdp.ts deleted file mode 100644 index ca53559486..0000000000 --- a/packages/plugin-concierge/src/actions/cdp.ts +++ /dev/null @@ -1,302 +0,0 @@ -import { - Coinbase, - Wallet, - Transfer, - TimeoutError, - Trade, -} from "@coinbase/coinbase-sdk"; -import { keccak256, toHex, toBytes } from "viem"; -import { getUserInfo } from "./resolver"; -import { isAddress } from "viem"; -import { generateOnRampURL } from "@coinbase/cbpay-js"; -import { LocalStorage } from "./storage"; -import { elizaLogger } from "@elizaos/core"; - -const appId = process.env.COINBASE_APP_ID; -const apiKeyName = process.env.COINBASE_API_KEY_NAME; -const privateKey = process.env.COINBASE_API_KEY_PRIVATE_KEY; - -const coinbase = - apiKeyName && privateKey - ? new Coinbase({ - apiKeyName, - privateKey, - }) - : undefined; - -elizaLogger.info("Coinbase initialized", coinbase !== undefined); -export type AgentWalletData = { - id: string; - wallet: any; - address: string; - agent_address: string; - blockchain?: string; - state?: string; - key: string; -}; - -export interface AgentWallet { - getWallet: ( - key: string, - createIfNotFound?: boolean - ) => Promise; - transfer: ( - fromAddress: string, - toAddress: string, - amount: number - ) => Promise; - checkBalance: ( - key: string - ) => Promise<{ address: string | undefined; balance: number }>; - createWallet: (key: string) => Promise; - onRampURL: (amount: number, address: string) => Promise; -} - -export class WalletService implements AgentWallet { - private walletStorage: LocalStorage; - private cdpEncriptionKey: string; - private senderAddress: string; - - constructor(sender: string) { - this.walletStorage = new LocalStorage(".data/wallets"); - this.cdpEncriptionKey = (process.env.KEY as string).toLowerCase(); - this.senderAddress = sender.toLowerCase(); - elizaLogger.info( - "WalletService initialized with sender", - this.walletStorage, - this.cdpEncriptionKey, - this.senderAddress - ); - } - - encrypt(data: any): string { - if (typeof data === "string") { - data = data.toLowerCase(); - } - const dataString = JSON.stringify(data); - const key = keccak256(toHex(this.cdpEncriptionKey)); - // Simple XOR encryption with the key - const encrypted = Buffer.from(dataString).map( - (byte, i) => - byte ^ parseInt(key.slice(2 + (i % 64), 4 + (i % 64)), 16) - ); - return toHex(encrypted).toLowerCase(); - } - - decrypt(data: string): any | undefined { - if (typeof data === "string") { - data = data.toLowerCase(); - } - const key = keccak256(toHex(this.cdpEncriptionKey)); - const encrypted = toBytes(data); - const decrypted = encrypted.map( - (byte, i) => - byte ^ parseInt(key.slice(2 + (i % 64), 4 + (i % 64)), 16) - ); - return JSON.parse(Buffer.from(decrypted).toString()); - } - async createWallet(key: string): Promise { - try { - key = key.toLowerCase(); - elizaLogger.info(`Creating new wallet for key ${key}...`); - const wallet = await Wallet.create({ - networkId: Coinbase.networks.BaseMainnet, - }); - - const data = wallet.export(); - const address = await wallet.getDefaultAddress(); - elizaLogger.info("New agent wallet created:", address.getId()); - - const walletInfo = { - data, - agent_address: address.getId(), - address: this.senderAddress, - key, - }; - - await this.walletStorage.set( - `wallet:${this.encrypt(key)}`, - this.encrypt(walletInfo) - ); - - await Wallet.import(data); - return { - id: address.getId(), - wallet: wallet, - address: this.senderAddress, - agent_address: address.getId(), - key: key, - }; - } catch (error) { - console.error("Failed to create wallet:", error); - throw new Error("Failed to create wallet"); - } - } - async getWallet( - key: string, - createIfNotFound: boolean = true - ): Promise { - elizaLogger.info( - "Wallet count:", - await this.walletStorage.getWalletCount() - ); - key = key.toLowerCase(); - const encryptedKey = `wallet:${this.encrypt(key)}`; - const walletData = await this.walletStorage.get(encryptedKey); - // If no wallet exists, create one - if (!walletData) { - elizaLogger.info("No wallet found for", key, encryptedKey); - if (createIfNotFound) { - const success = await this.createWallet(key); - if (success) return success; - } - return undefined; - } - - try { - const decrypted = this.decrypt(walletData); - const importedWallet = await Wallet.import(decrypted.data); - return { - id: importedWallet.getId() ?? "", - wallet: importedWallet, - agent_address: decrypted.agent_address, - address: decrypted.address, - key: decrypted.key, - }; - } catch (error) { - console.error("Failed to decrypt wallet data:", error); - throw new Error("Invalid wallet access"); - } - } - - async checkBalance( - humanAddress: string - ): Promise<{ address: string | undefined; balance: number }> { - humanAddress = humanAddress.toLowerCase(); - const walletData = await this.getWallet(humanAddress); - if (!walletData) return { address: undefined, balance: 0 }; - - elizaLogger.info(`Retrieved wallet data for ${humanAddress}`); - const balance = await walletData.wallet.getBalance( - Coinbase.assets.Usdc - ); - - return { - address: walletData.agent_address, - balance: Number(balance), - }; - } - async onRampURL(amount: number, address: string) { - const onRampURL = generateOnRampURL({ - appId: appId, - presetCryptoAmount: Number(amount), - addresses: { - [address]: ["base"], - }, - assets: ["USDC"], - }); - return onRampURL; - } - async transfer( - fromAddress: string, - toAddress: string, - amount: number - ): Promise { - fromAddress = fromAddress.toLowerCase(); - toAddress = toAddress.toLowerCase(); - const from = await this.getWallet(fromAddress); - if (!from) return undefined; - if (!Number(amount)) return undefined; - - elizaLogger.info(`Retrieved wallet data for ${fromAddress}`); - const balance = await from.wallet.getBalance(Coinbase.assets.Usdc); - if (Number(balance) < amount) { - return undefined; - } - if (!isAddress(toAddress) && !toAddress.includes(":")) { - const user = await getUserInfo(toAddress); - if (!user) { - return undefined; - } - elizaLogger.info("resolved toAddress", toAddress, user?.address); - - toAddress = user.address as string; - } - const to = await this.getWallet(toAddress, false); - const toWallet = to?.agent_address ?? toAddress; - if (toWallet.includes(":")) { - elizaLogger.info("Failed accessing the wallet"); - return undefined; - } - try { - elizaLogger.info("Transferring", amount, fromAddress, toWallet); - const transfer = await from.wallet.createTransfer({ - amount, - assetId: Coinbase.assets.Usdc, - destination: toWallet as string, - gasless: true, - }); - try { - await transfer.wait(); - } catch (err) { - if (err instanceof TimeoutError) { - elizaLogger.info("Waiting for transfer timed out"); - } else { - console.error( - "Error while waiting for transfer to complete: ", - err - ); - } - } - - return transfer; - } catch (error) { - console.error("Transfer failed:", error); - throw error; - } - } - async swap( - address: string, - fromAssetId: string, - toAssetId: string, - amount: number - ): Promise { - address = address.toLowerCase(); - const walletData = await this.getWallet(address); - if (!walletData) return undefined; - elizaLogger.info(`Retrieved wallet data for ${address}`); - - elizaLogger.info( - `Initiating swap from ${fromAssetId} to ${toAssetId} for amount: ${amount}` - ); - const trade = await walletData.wallet.createTrade({ - amount, - fromAssetId, - toAssetId, - }); - - try { - await trade.wait(); - } catch (err) { - if (err instanceof TimeoutError) { - elizaLogger.info("Waiting for trade timed out"); - } else { - console.error( - "Error while waiting for trade to complete: ", - err - ); - } - } - - return trade; - } - - async deleteWallet(key: string): Promise { - key = key.toLowerCase(); - elizaLogger.info(`Deleting wallet for key ${key}`); - const encryptedKey = this.encrypt(key); - await this.walletStorage.del(`wallet:${encryptedKey}`); - elizaLogger.info(`Wallet deleted for key ${key}`); - return true; - } -} diff --git a/packages/plugin-concierge/src/actions/resolver.ts b/packages/plugin-concierge/src/actions/resolver.ts deleted file mode 100644 index c64aafc506..0000000000 --- a/packages/plugin-concierge/src/actions/resolver.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { elizaLogger } from "@elizaos/core"; -import { isAddress } from "viem"; - -export const converseEndpointURL = "https://converse.xyz/profile/"; - -export type InfoCache = Map; -export type ConverseProfile = { - address: string | undefined; - onXmtp: boolean; - avatar: string | undefined; - formattedName: string | undefined; - name: string | undefined; -}; -export type UserInfo = { - ensDomain?: string | undefined; - address?: string | undefined; - preferredName: string | undefined; - converseUsername?: string | undefined; - ensInfo?: EnsData | undefined; - avatar?: string | undefined; - converseEndpoint?: string | undefined; -}; - -export interface EnsData { - address?: string; - avatar?: string; - avatar_small?: string; - converse?: string; - avatar_url?: string; - contentHash?: string; - description?: string; - ens?: string; - ens_primary?: string; - github?: string; - resolverAddress?: string; - twitter?: string; - url?: string; - wallets?: { - eth?: string; - }; -} - -class UserInfoCache { - private static instance: UserInfoCache; - private cache: InfoCache = new Map(); - - private constructor() {} - - public static getInstance(): UserInfoCache { - if (!UserInfoCache.instance) { - UserInfoCache.instance = new UserInfoCache(); - } - return UserInfoCache.instance; - } - - get(key: string): UserInfo | undefined { - return this.cache.get(key.toLowerCase()); - } - - set(key: string, data: UserInfo): void { - this.cache.set(key.toLowerCase(), data); - } - - clear(key?: string): void { - if (key) { - this.cache.delete(key.toLowerCase()); - } else { - this.cache.clear(); - } - } -} - -// Use the singleton instance -export const userInfoCache = UserInfoCache.getInstance(); - -export const getUserInfo = async ( - key: string, - clientAddress?: string -): Promise => { - const data: UserInfo = { - ensDomain: undefined, - address: undefined, - converseUsername: undefined, - ensInfo: undefined, - avatar: undefined, - converseEndpoint: undefined, - preferredName: undefined, - }; - - if (typeof key !== "string") { - elizaLogger.error("userinfo key must be a string"); - return data; - } - - const cachedData = userInfoCache.get(key); - if (cachedData) return cachedData; - - key = key?.toLowerCase(); - clientAddress = clientAddress?.toLowerCase(); - - // Determine user information based on provided key - if (isAddress(clientAddress || "")) { - data.address = clientAddress; - } else if (isAddress(key || "")) { - data.address = key; - } else if (key.includes(".eth")) { - data.ensDomain = key; - } else if (["@user", "@me", "@bot"].includes(key)) { - data.address = clientAddress; - data.ensDomain = key.replace("@", "") + ".eth"; - data.converseUsername = key.replace("@", ""); - } else if (key === "@alix") { - data.address = - "0x3a044b218BaE80E5b9E16609443A192129A67BeA".toLowerCase(); - data.converseUsername = "alix"; - } else if (key === "@bo") { - data.address = - "0xbc3246461ab5e1682baE48fa95172CDf0689201a".toLowerCase(); - data.converseUsername = "bo"; - } else { - data.converseUsername = key; - } - - data.preferredName = data.ensDomain || data.converseUsername || "Friend"; - const keyToUse = - data.address?.toLowerCase() || data.ensDomain || data.converseUsername; - - if (!keyToUse) { - elizaLogger.info( - "Unable to determine a valid key for fetching user info." - ); - return data; - } else { - // Fetch ENS data - try { - const response = await fetch(`https://ensdata.net/${keyToUse}`); - if (response.status !== 200) { - if (process.env.MSG_LOG === "true") - elizaLogger.info("- ENS data request failed for", keyToUse); - } else { - const ensData = (await response.json()) as EnsData; - if (ensData) { - data.ensInfo = ensData; - data.ensDomain = ensData.ens || data.ensDomain; - data.address = - ensData.address?.toLowerCase() || - data.address?.toLowerCase(); - data.avatar = ensData.avatar_url || data.avatar; - } - } - } catch (error) { - console.error(`Failed to fetch ENS data for ${keyToUse}`); - } - //Converse profile - try { - const username = keyToUse.replace("@", ""); - const converseEndpoint = `${converseEndpointURL}${username}`; - const response = await fetchWithTimeout( - converseEndpoint, - { - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - }, - body: JSON.stringify({ peer: username }), - }, - 5000 - ); - if (!response?.ok) { - console.error( - `Converse profile request failed with status ${response?.status}` - ); - } - const converseData = (await response?.json()) as ConverseProfile; - if (converseData) { - data.converseUsername = - converseData.formattedName || - converseData.name || - data.converseUsername; - data.address = - converseData.address?.toLowerCase() || - data.address?.toLowerCase(); - data.avatar = converseData.avatar || data.avatar; - data.converseEndpoint = converseEndpoint; - } - } catch (error) { - console.error("Failed to fetch Converse profile:", error); - } - - data.preferredName = - data.ensDomain || data.converseUsername || "Friend"; - userInfoCache.set(keyToUse, data); - return data; - } -}; - -const fetchWithTimeout = async ( - url: string, - options: RequestInit, - timeout = 5000 -) => { - const controller = new AbortController(); - const id = setTimeout(() => controller.abort(), timeout); - try { - const response = await fetch(url, { - ...options, - signal: controller.signal, - }); - clearTimeout(id); - return response; - } catch (error) { - clearTimeout(id); - console.error("fetching"); - } -}; diff --git a/packages/plugin-concierge/src/actions/storage.ts b/packages/plugin-concierge/src/actions/storage.ts deleted file mode 100644 index bee5cc3414..0000000000 --- a/packages/plugin-concierge/src/actions/storage.ts +++ /dev/null @@ -1,99 +0,0 @@ -import path from "path"; -import fs from "fs"; -import { elizaLogger } from "@elizaos/core"; - -export class LocalStorage { - private baseDir: string; - - constructor(baseDir: string = ".data/wallets") { - if (process.env.RAILWAY_VOLUME_MOUNT_PATH !== undefined) { - this.baseDir = path.join( - process.env.RAILWAY_VOLUME_MOUNT_PATH as string, - baseDir - ); - if (process.env.MSG_LOG === "true") - elizaLogger.info( - "Railway detected - Using absolute path:", - this.baseDir - ); - } else { - this.baseDir = path.join(process.cwd(), baseDir); - //if (process.env.MSG_LOG === "true") - //elizaLogger.info("Local development - Using relative path:", this.baseDir); - } - } - - private async ensureDir(): Promise { - if (!fs) { - console.error("Filesystem not available"); - throw new Error("Filesystem is not available"); - } - - try { - if (!fs?.existsSync(this.baseDir)) { - fs.mkdirSync(this.baseDir, { - recursive: true, - mode: 0o755, - }); - } - return true; - } catch (error) { - console.error("Storage directory error:", error); - throw new Error(`Failed to create/write to directory: ${error}`); - } - } - - async set(key: string, value: string): Promise { - const ensureDir = await this.ensureDir(); - if (!ensureDir) { - throw new Error( - "Failed to ensure directory - filesystem may not be available" - ); - } - - try { - const filePath = path.join( - this.baseDir, - `${key.toLowerCase()}.dat` - ); - fs.writeFileSync(filePath, value, "utf8"); - } catch (error) { - throw new Error(`Failed to write file: ${error}`); - } - } - - async get(key: string): Promise { - try { - const filePath = path.join( - this.baseDir, - `${key.toLowerCase()}.dat` - ); - return fs.readFileSync(filePath, "utf8") ?? undefined; - } catch (error) { - elizaLogger.info("Error reading file:", error); - return undefined; - } - } - - async del(key: string): Promise { - try { - const filePath = path.join( - this.baseDir, - `${key.toLowerCase()}.dat` - ); - fs.unlinkSync(filePath); - } catch (error) { - elizaLogger.info("Error deleting file:", error); - } - } - - async getWalletCount(): Promise { - try { - const walletFiles = fs.readdirSync(this.baseDir); - return walletFiles?.length || 0; - } catch (error) { - elizaLogger.info("Error reading directory:", this.baseDir, error); - return 0; - } - } -} diff --git a/packages/plugin-concierge/src/actions/templates.ts b/packages/plugin-concierge/src/actions/templates.ts deleted file mode 100644 index c3aa737c91..0000000000 --- a/packages/plugin-concierge/src/actions/templates.ts +++ /dev/null @@ -1,154 +0,0 @@ -export const fundTemplate = ` -Extract the following details to fund the wallet: -- **amount** (number): Amount to fund the wallet - -Provide the values in the following JSON format: - -\`\`\`json -{ - "amount": "" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const balanceTemplate = ` -Extract the following details to check the wallet balance: - -Provide the values in the following JSON format: - -\`\`\`json -{ - "address": "address" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const walletTemplate = ` -Extract the following details to check the wallet address/status/balance: - -Provide the values in the following JSON format: - -\`\`\`json -{ - "address": "address" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const withdrawTemplate = ` -Extract the following details to withdraw from the wallet: -- **amount** (number): Amount to withdraw - -Provide the values in the following JSON format: - -\`\`\`json -{ - "amount": "" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const showPrivateKeyTemplate = ` -Extract the following details to show the private key: -- **address** (string): Address to show the private key for - -Provide the values in the following JSON format: - -\`\`\`json -{ - "address": "
" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const transferTemplate = ` -Extract the following details to transfer USDC: -- **amount** (number): Amount to transfer -- **recipient** (string): Recipient username or address - -Provide the values in the following JSON format: - -\`\`\`json -{ - "amount": "", - "recipient": "" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const swapTemplate = ` -Extract the following details to swap tokens: -- **amount** (number): Amount to swap -- **fromToken** (string): Token to swap from (e.g., ETH) -- **toToken** (string): Token to swap to (e.g., USDC) - -Provide the values in the following JSON format: - -\`\`\`json -{ - "amount": "", - "fromToken": "", - "toToken": "" -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const readResourceTemplate = ` -Extract the following details to read a resource: -- **id** (string): Unique identifier of the resource -- **fields** (array): Specific fields to retrieve (optional) - -Provide the values in the following JSON format: - -\`\`\`json -{ - "id": "", - "fields": ["", ""] -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; - -export const updateResourceTemplate = ` -Extract the following details to update a resource: -- **id** (string): Unique identifier of the resource -- **updates** (object): Key-value pairs of fields to update - -Provide the values in the following JSON format: - -\`\`\`json -{ - "id": "", - "updates": { - "": "", - "": "" - } -} -\`\`\` - -Here are the recent user messages for context: -{{recentMessages}} -`; diff --git a/packages/plugin-concierge/src/actions/types.ts b/packages/plugin-concierge/src/actions/types.ts deleted file mode 100644 index 68f654d74c..0000000000 --- a/packages/plugin-concierge/src/actions/types.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { z } from "zod"; - -// Define schemas for each skill -export const FundSchema = z.object({ - amount: z.number().positive().max(10), -}); - -export const BalanceSchema = z.object({ - address: z.literal("address").optional(), -}); - -export const WalletSchema = z.object({ - address: z.literal("address").optional(), -}); - -export const WithdrawSchema = z.object({ - amount: z.number().positive(), -}); - -export const TransferSchema = z.object({ - amount: z.number().positive(), - recipient: z.string().min(1), -}); - -export const ShowPrivateKeySchema = z.object({ - address: z.string().min(1), -}); - -export const SwapSchema = z.object({ - amount: z.number().positive(), - fromToken: z.enum(["eth", "usdc"]), - toToken: z.enum(["eth", "usdc"]), -}); - -// Type definitions -export type FundContent = z.infer; -export type BalanceContent = z.infer; -export type WalletContent = z.infer; -export type WithdrawContent = z.infer; -export type TransferContent = z.infer; -export type SwapContent = z.infer; -export type ShowPrivateKeyContent = z.infer; -// Type guards -export const isFundContent = (obj: any): obj is FundContent => { - return FundSchema.safeParse(obj).success; -}; - -export const isBalanceContent = (obj: any): obj is BalanceContent => { - return BalanceSchema.safeParse(obj).success; -}; - -export const isWalletContent = (obj: any): obj is WalletContent => { - return WalletSchema.safeParse(obj).success; -}; - -export const isWithdrawContent = (obj: any): obj is WithdrawContent => { - return WithdrawSchema.safeParse(obj).success; -}; - -export const isTransferContent = (obj: any): obj is TransferContent => { - return TransferSchema.safeParse(obj).success; -}; - -export const isShowPrivateKeyContent = ( - obj: any -): obj is ShowPrivateKeyContent => { - return ShowPrivateKeySchema.safeParse(obj).success; -}; - -export const isSwapContent = (obj: any): obj is SwapContent => { - return SwapSchema.safeParse(obj).success; -}; diff --git a/packages/plugin-concierge/src/actions/walletservice.ts b/packages/plugin-concierge/src/actions/walletservice.ts deleted file mode 100644 index 64ed07cc95..0000000000 --- a/packages/plugin-concierge/src/actions/walletservice.ts +++ /dev/null @@ -1,559 +0,0 @@ -import { - Action, - IAgentRuntime, - State, - HandlerCallback, - Memory, - elizaLogger, - ModelClass, - generateObject, - composeContext, -} from "@elizaos/core"; -import { baselinks } from "./baselinks"; -import { WalletService } from "./cdp"; -import { - FundSchema, - TransferSchema, - BalanceSchema, - WithdrawSchema, - WalletSchema, - SwapSchema, - isFundContent, - isTransferContent, - isBalanceContent, - isWithdrawContent, - isWalletContent, - isSwapContent, - isShowPrivateKeyContent, - ShowPrivateKeySchema, -} from "./types"; -import { - fundTemplate, - transferTemplate, - balanceTemplate, - withdrawTemplate, - swapTemplate, - walletTemplate, - showPrivateKeyTemplate, -} from "./templates"; - -const send = async (callback: HandlerCallback, text: string) => { - try { - await callback({ text: text }, []); - } catch (error) { - elizaLogger.error(error); - await callback( - { text: "Failed to create resource. Please check the logs." }, - [] - ); - } -}; - -let walletService: WalletService = undefined; -const singleTonWalletService = (senderAddress: string) => { - if (!walletService) { - elizaLogger.success("Creating new wallet service for", senderAddress); - walletService = new WalletService(senderAddress); - } - return walletService; -}; -// Example action implementation -export const fundAction: Action = { - name: "FUND_WALLET", - similes: [ - "LOAD_WALLET", - "ADD_FUNDS_TO_WALLET", - "ADD_FUNDS_TO_AGENT_WALLET", - "ADD_FUNDS", - ], - description: "Fund your agent wallet with USDC.", - examples: [ - [ - { - user: "John", - content: { text: "Fund my agent wallet with 10 USDC" }, - }, - ], - [ - { - user: "John", - content: { text: "Add 10 USDC to my agent wallet" }, - }, - ], - [ - { - user: "John", - content: { text: "Add funds to my agent wallet" }, - }, - ], - [ - { - user: "John", - content: { text: "Add 10" }, - }, - ], - ], - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: fundTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: FundSchema, - }); - if (!isFundContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - - const params = resourceDetails.object; - const senderAddress = state.senderName; - const amount = params.amount; // || options.amount; - - if (amount <= 0) { - send(callback, "Please specify a valid amount to fund."); - return; - } - walletService = singleTonWalletService(senderAddress); - const walletData = await walletService.getWallet(senderAddress); - if (!walletData) { - send(callback, "You don't have an agent wallet."); - return; - } - const { balance } = await walletService.checkBalance(senderAddress); - if (Number(balance) + amount > 10) { - send(callback, "You have maxed out your funds. Max 10 USDC."); - return; - } - // const onRampURL = await walletService.onRampURL( - // amount, - // walletData.agent_address - // ); - const url = await baselinks.paymentLink( - walletData.agent_address, - amount - ); - await send(callback, `Here is the payment link`); - await send(callback, url); - }, -}; -export const showPrivateKey: Action = { - name: "SHOW_PRIVATE_KEY", - similes: ["SHOW_PRIVATE_KEY", "SHOW_PRIVATE_KEY_OF_AGENT_WALLET"], - description: "Show the private key of your agent wallet.", - examples: [ - [ - { - user: "John", - content: { text: "Show my private key" }, - }, - ], - ], - - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: showPrivateKeyTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: ShowPrivateKeySchema, - }); - if (!isShowPrivateKeyContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - const params = resourceDetails.object; - const senderAddress = params.address || state.senderName; - walletService = singleTonWalletService(senderAddress); - const walletData = await walletService.getWallet(senderAddress); - if (!walletData) { - send(callback, "You don't have an agent wallet."); - return; - } - elizaLogger.info("walletData", walletData); - await send(callback, `Your wallet seed: ${walletData.wallet.seed}`); - }, -}; -export const transferAction: Action = { - name: "TRANSFER_USDC", - similes: ["SEND_USDC", "SEND_FUNDS", "SEND_FUNDS_TO_USER"], - description: "Transfer USDC to another user.", - examples: [ - [ - { - user: "John", - content: { text: "Send 10 USDC to vitalik.eth" }, - }, - ], - [ - { - user: "John", - content: { text: "Send @fabri 10 USDC" }, - }, - ], - [ - { - user: "John", - content: { text: "Send 0x1234567890... 10 USDC" }, - }, - ], - [ - { - user: "John", - content: { text: "transfer 0.01 USDC to 0x1234567890..." }, - }, - ], - ], - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: transferTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: TransferSchema, - }); - if (!isTransferContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - const params = resourceDetails.object; - const senderAddress = state.senderName; - const recipientAddress = params.recipient; - const amount = params.amount; - - walletService = singleTonWalletService(senderAddress); - - const { balance } = await walletService.checkBalance(senderAddress); - if (balance < amount) { - send(callback, "You have no funds to transfer."); - return; - } - - if (!recipientAddress) { - send(callback, "User not found."); - return; - } - - await send( - callback, - `Transferring ${amount} USDC to ${recipientAddress}` - ); - const tx = await walletService.transfer( - senderAddress, - recipientAddress, - amount - ); - let msg = `Transfer completed!`; - if (tx.getTransactionHash()) { - msg += `\nTransaction hash: ${tx.getTransactionHash()}`; - } - await send(callback, msg); - //await notifyUser(senderAddress, recipientAddress, tx, amount); - }, -}; - -export const balanceAction: Action = { - name: "BALANCE_USDC", - similes: ["CHECK_BALANCE", "CHECK_USDC_BALANCE", "CHECK_BALANCE_USDC"], - description: - "Check your USDC wallet balance. Assume that the user has a USDC wallet.", - examples: [ - [ - { - user: "John", - content: { text: "Check my balance" }, - }, - ], - [ - { - user: "John", - content: { text: "Check my balance" }, - }, - ], - ], - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: balanceTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: BalanceSchema, - }); - if (!isBalanceContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - const params = resourceDetails.object; - const senderAddress = params.address || state.senderName; //?? message.sender.address; - walletService = singleTonWalletService(senderAddress); - - const { balance } = await walletService.checkBalance(senderAddress); - send(callback, `Your agent wallet has a balance of $${balance}`); - }, -}; - -export const withdrawAction: Action = { - name: "WITHDRAW_USDC", - similes: [ - "WITHDRAW_FUNDS", - "WITHDRAW_FUNDS_FROM_WALLET", - "WITHDRAW_FUNDS_FROM_AGENT_WALLET", - ], - description: "Withdraw USDC from your agent wallet.", - examples: [ - [ - { - user: "John", - content: { text: "Withdraw 0.01 USDC from my agent wallet" }, - }, - ], - [ - { - user: "John", - content: { text: "Withdraw all my funds" }, - }, - ], - ], - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: withdrawTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: WithdrawSchema, - }); - if (!isWithdrawContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - const params = resourceDetails.object; - const senderAddress = state.senderName; //?? message.sender.address; - walletService = singleTonWalletService(senderAddress); - const amount = params.amount; //|| opti ons.amount; - const walletData = await walletService.getWallet(senderAddress); - if (!walletData) return undefined; - elizaLogger.info(`Retrieved wallet data for ${senderAddress}`); - const { balance } = await walletService.checkBalance(senderAddress); - if (amount && amount <= 0) { - send( - callback, - "Please specify a valid positive amount to withdraw." - ); - return; - } - if (amount && amount > Number(balance)) { - send(callback, "You don't have enough funds to withdraw."); - return; - } - const toWithdraw = amount ?? Number(balance); - if (toWithdraw <= Number(balance)) { - const transfer = await walletService.transfer( - senderAddress, - senderAddress, - toWithdraw - ); - let msg = `Transfer completed!`; - if (transfer.getTransactionHash()) { - msg += `\nTransaction hash: ${transfer.getTransactionHash()}`; - } - await send(callback, msg); - } - }, -}; - -export const walletDetailsAction: Action = { - name: "WALLET_DETAILS", - similes: ["CHECK_ADDRESS", "CHECK_AGENT_ADDRESS", "CHECK_WALLET_ADDRESS"], - description: "Check your agent wallet address/status/balance.", - examples: [ - [ - { - user: "John", - content: { text: "Check my agent wallet address" }, - }, - ], - [ - { - user: "John", - content: { text: "Check my address" }, - }, - ], - [ - { - user: "John", - content: { text: "Check my agent wallet" }, - }, - ], - ], - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: walletTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: WalletSchema, - }); - if (!isWalletContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - const params = resourceDetails.object; - const senderAddress = params.address || state.senderName; //?? message.sender.address; - walletService = singleTonWalletService(senderAddress); - const walletExist = await walletService.getWallet(senderAddress); - if (walletExist) { - const { balance } = await walletService.checkBalance(senderAddress); - send(callback, "Your agent wallet address"); - const url = await baselinks.walletDetails( - walletExist.address, - walletExist.agent_address, - balance - ); - send(callback, url); - return; - } - send(callback, "You don't have an agent wallet."); - }, -}; - -export const swapAction: Action = { - name: "SWAP_USDC", - similes: ["SWAP_TOKENS", "SWAP_ETH_TO_USDC", "SWAP_USDC_TO_ETH"], - description: "Swap between tokens (e.g., ETH to USDC).", - examples: [ - [ - { - user: "John", - content: { text: "Swap 0.01 ETH to USDC" }, - }, - ], - [ - { - user: "John", - content: { text: "Swap 0.01 USDC to ETH" }, - }, - ], - ], - validate: async (runtime: IAgentRuntime, message: Memory) => { - return true; - }, - handler: async ( - runtime: IAgentRuntime, - message: Memory, - state: State, - options: any, - callback: HandlerCallback - ) => { - const context = composeContext({ - state, - template: swapTemplate, - }); - - const resourceDetails = await generateObject({ - runtime, - context, - modelClass: ModelClass.SMALL, - schema: SwapSchema, - }); - if (!isSwapContent(resourceDetails.object)) { - callback({ text: "Invalid resource details provided." }, []); - return; - } - const params = resourceDetails.object; - const senderAddress = state.senderName; - const amount = params.amount; - const fromToken = params.fromToken; - const toToken = params.toToken; - walletService = singleTonWalletService(senderAddress); - await send(callback, `Swapping ${amount} ${fromToken} to ${toToken}`); - const tx = await walletService.swap( - senderAddress, - fromToken, - toToken, - amount - ); - let msg = `Swap completed!`; - if (tx.getTransaction()) { - msg += `\nTransaction hash: ${tx.getTransaction()}`; - } - await send(callback, msg); - }, -}; diff --git a/packages/plugin-concierge/src/index.ts b/packages/plugin-concierge/src/index.ts deleted file mode 100644 index 5b1555eed2..0000000000 --- a/packages/plugin-concierge/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Plugin } from "@elizaos/core"; -import { - fundAction, - withdrawAction, - balanceAction, - walletDetailsAction, - transferAction, - showPrivateKey, - swapAction, -} from "./actions/walletservice"; -export { WalletService } from "./actions/cdp"; - -export const conciergePlugin: Plugin = { - name: "concierge", - description: "Provides wallet management and transaction capabilities.", - actions: [ - showPrivateKey, - fundAction, - withdrawAction, - balanceAction, - walletDetailsAction, - transferAction, - swapAction, - ], -}; diff --git a/packages/plugin-concierge/tsconfig.json b/packages/plugin-concierge/tsconfig.json deleted file mode 100644 index 834c4dce26..0000000000 --- a/packages/plugin-concierge/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../core/tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src", - "types": [ - "node" - ] - }, - "include": [ - "src/**/*.ts" - ] -} \ No newline at end of file diff --git a/packages/plugin-concierge/tsup.config.ts b/packages/plugin-concierge/tsup.config.ts deleted file mode 100644 index e42bf4efea..0000000000 --- a/packages/plugin-concierge/tsup.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - outDir: "dist", - sourcemap: true, - clean: true, - format: ["esm"], // Ensure you're targeting CommonJS - external: [ - "dotenv", // Externalize dotenv to prevent bundling - "fs", // Externalize fs to use Node.js built-in module - "path", // Externalize other built-ins if necessary - "@reflink/reflink", - "@node-llama-cpp", - "https", - "http", - "agentkeepalive", - // Add other modules you want to externalize - ], -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a482221a48..67dc38c7bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,9 +150,6 @@ importers: '@elizaos/plugin-coinbase': specifier: workspace:* version: link:../packages/plugin-coinbase - '@elizaos/plugin-concierge': - specifier: workspace:* - version: link:../packages/plugin-concierge '@elizaos/plugin-conflux': specifier: workspace:* version: link:../packages/plugin-conflux @@ -1030,24 +1027,6 @@ importers: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.2(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) - packages/plugin-concierge: - dependencies: - '@coinbase/cbpay-js': - specifier: ^2.4.0 - version: 2.4.0 - '@coinbase/coinbase-sdk': - specifier: 0.11.2 - version: 0.11.2(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@elizaos/core': - specifier: workspace:* - version: link:../core - build: - specifier: ^0.1.4 - version: 0.1.4 - tsup: - specifier: 8.3.5 - version: 8.3.5(@swc/core@1.10.2(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) - packages/plugin-conflux: dependencies: '@elizaos/core': @@ -3203,29 +3182,13 @@ packages: '@coinbase-samples/advanced-sdk-ts@file:packages/plugin-coinbase/advanced-sdk-ts': resolution: {directory: packages/plugin-coinbase/advanced-sdk-ts, type: directory} - '@coinbase/cbpay-js@2.4.0': - resolution: {integrity: sha512-7Zy1P6v5CTaBuFYowFmvKJ4KyBngVjsPpLkjSi4DWJhVHMgLIkDUINSloRU0Idgt2rFA/PLIm2gXneR3OoQbrA==} - engines: {node: '>= 14'} - peerDependencies: - regenerator-runtime: ^0.13.9 - peerDependenciesMeta: - regenerator-runtime: - optional: true - '@coinbase/coinbase-sdk@0.10.0': resolution: {integrity: sha512-sqLH7dE/0XSn5jHddjVrC1PR77sQUEytYcQAlH2d8STqRARcvddxVAByECUIL32MpbdJY7Wca3KfSa6qo811Mg==} - '@coinbase/coinbase-sdk@0.11.2': - resolution: {integrity: sha512-9kEL0aOGqVYabCHsbF5t5VrdfQ92T88N9nQ7RfhbpwEOiWUl8QXGy/NnMpuVtR+p4tpoJrev5Zm8rIGwtmH8LQ==} - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - '@commitlint/cli@18.6.1': resolution: {integrity: sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==} engines: {node: '>=v18'} @@ -3575,9 +3538,6 @@ packages: peerDependencies: postcss: ^8.4 - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@deepgram/captions@1.2.0': resolution: {integrity: sha512-8B1C/oTxTxyHlSFubAhNRgCbQ2SQ5wwvtlByn8sDYZvdDtdn/VE2yEPZ4BvUnrKWmsbTQY6/ooLV+9Ka2qmDSQ==} engines: {node: '>=18.0.0'} @@ -7918,9 +7878,6 @@ packages: '@types/tar@6.1.13': resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -9313,10 +9270,6 @@ packages: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} - build@0.1.4: - resolution: {integrity: sha512-KwbDJ/zrsU8KZRRMfoURG14cKIAStUlS8D5jBDvtrZbwO5FEkYqc3oB8HIhRiyD64A48w1lc+sOmQ+mmBw5U/Q==} - engines: {node: '>v0.4.12'} - builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -9713,16 +9666,10 @@ packages: collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -9733,9 +9680,6 @@ packages: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -9746,9 +9690,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - columnify@1.6.0: resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} engines: {node: '>=8.0.0'} @@ -10187,10 +10128,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssmin@0.3.2: - resolution: {integrity: sha512-bynxGIAJ8ybrnFobjsQotIjA8HFDDgPwbeUWNXXXfR+B4f9kkxdcUyagJoQCSUOfMV+ZZ6bMn8bvbozlCzUGwQ==} - hasBin: true - cssnano-preset-advanced@6.1.2: resolution: {integrity: sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==} engines: {node: ^14 || ^16 || >=18.0} @@ -10950,9 +10887,6 @@ packages: emoticon@4.1.0: resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -11484,9 +11418,6 @@ packages: picomatch: optional: true - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - feed@4.2.2: resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} engines: {node: '>=0.4.0'} @@ -11600,9 +11531,6 @@ packages: resolution: {integrity: sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==} engines: {node: '>=18'} - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -13215,10 +13143,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@0.3.7: - resolution: {integrity: sha512-/7PsVDNP2tVe2Z1cF9kTEkjamIwz4aooDpRKmN1+g/9eePCgcxsv4QDvEbxO0EH+gdDD7MLyDoR6BASo3hH51g==} - engines: {node: '> 0.4.11'} - js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -13259,11 +13183,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsmin@1.0.1: - resolution: {integrity: sha512-OPuL5X/bFKgVdMvEIX3hnpx3jbVpFCrEM8pKPXjFkZUqg521r41ijdyTz7vACOhW6o1neVlcLyd+wkbK5fNHRg==} - engines: {node: '>=0.1.93'} - hasBin: true - json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} @@ -13378,10 +13297,6 @@ packages: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} - jxLoader@0.1.1: - resolution: {integrity: sha512-ClEvAj3K68y8uKhub3RgTmcRPo5DfIWvtxqrKQdDPyZ1UVHIIKvVvjrAsJFSVL5wjv0rt5iH9SMCZ0XRKNzeUA==} - engines: {node: '>v0.4.10'} - katex@0.16.18: resolution: {integrity: sha512-LRuk0rPdXrecAFwQucYjMiIs0JFefk6N1q/04mlw14aVIVgxq1FO0MA9RiIIGVaKOB5GIP5GH4aBBNraZERmaQ==} hasBin: true @@ -13425,9 +13340,6 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - kuromoji@0.1.2: resolution: {integrity: sha512-V0dUf+C2LpcPEXhoHLMAop/bOht16Dyr+mDiIE39yX3vqau7p80De/koFqpiTcL1zzdZlc3xuHZ8u5gjYRfFaQ==} @@ -13748,10 +13660,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -14376,10 +14284,6 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - moo-server@1.3.0: - resolution: {integrity: sha512-9A8/eor2DXwpv1+a4pZAAydqLFVrWoKoO1fzdzqLUhYVXAO1Kgd1FR2gFZi7YdHzF0s4W8cDNwCfKJQrvLqxDw==} - engines: {node: '>v0.4.10'} - motion@10.16.2: resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} @@ -14857,9 +14761,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -16256,9 +16157,6 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - promised-io@0.3.6: - resolution: {integrity: sha512-bNwZusuNIW4m0SPR8jooSyndD35ggirHlxVl/UhIaZD/F0OBv9ebfc6tNmbpZts3QXHggkjIBH8lvtnzhtcz0A==} - promptly@2.2.0: resolution: {integrity: sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==} @@ -17511,9 +17409,6 @@ packages: peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -17895,9 +17790,6 @@ packages: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -17948,10 +17840,6 @@ packages: resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} engines: {node: '>=0.12'} - timespan@2.3.0: - resolution: {integrity: sha512-0Jq9+58T2wbOyLth0EU+AUb6JMGCLaTWIykJFa7hyAybjVH9gpVMTfUAwo5fWAvtFt2Tjh/Elg8JtgNpnMnM8g==} - engines: {node: '>= 0.2.0'} - tiny-emitter@2.1.0: resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} @@ -18098,10 +17986,6 @@ packages: resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} engines: {node: '>=12'} - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - trough@1.0.5: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} @@ -18394,10 +18278,6 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - uglify-js@1.3.5: - resolution: {integrity: sha512-YPX1DjKtom8l9XslmPFQnqWzTBkvI4N0pbkzLuPZZ4QTyig0uQqvZz9NgUdfEV+qccJzi7fVcGWdESvRIjWptQ==} - hasBin: true - uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -19287,14 +19167,6 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} - engines: {node: '>= 12.0.0'} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -19324,11 +19196,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - wrench@1.3.9: - resolution: {integrity: sha512-srTJQmLTP5YtW+F5zDuqjMEZqLLr/eJOZfDI5ibfPfRMeDh3oBUefAscuH0q5wBKE339ptH/S/0D18ZkfOfmKQ==} - engines: {node: '>=0.1.97'} - deprecated: wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years. - write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} @@ -21967,8 +21834,6 @@ snapshots: transitivePeerDependencies: - encoding - '@coinbase/cbpay-js@2.4.0': {} - '@coinbase/coinbase-sdk@0.10.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: '@scure/bip32': 1.6.0 @@ -21991,33 +21856,9 @@ snapshots: - utf-8-validate - zod - '@coinbase/coinbase-sdk@0.11.2(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': - dependencies: - '@scure/bip32': 1.6.0 - abitype: 1.0.8(typescript@5.6.3)(zod@3.23.8) - axios: 1.7.9(debug@4.4.0) - axios-mock-adapter: 1.22.0(axios@1.7.9) - axios-retry: 4.5.0(axios@1.7.9) - bip32: 4.0.0 - bip39: 3.1.0 - decimal.js: 10.4.3 - dotenv: 16.4.7 - ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - node-jose: 2.2.0 - secp256k1: 5.0.1 - viem: 2.21.54(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - transitivePeerDependencies: - - bufferutil - - debug - - typescript - - utf-8-validate - - zod - '@colors/colors@1.5.0': optional: true - '@colors/colors@1.6.0': {} - '@commitlint/cli@18.6.1(@types/node@22.10.1)(typescript@5.6.3)': dependencies: '@commitlint/format': 18.6.1 @@ -22444,12 +22285,6 @@ snapshots: dependencies: postcss: 8.4.49 - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - '@deepgram/captions@1.2.0': dependencies: dayjs: 1.11.13 @@ -28800,8 +28635,6 @@ snapshots: '@types/node': 22.10.1 minipass: 4.2.8 - '@types/triple-beam@1.3.5': {} - '@types/trusted-types@2.0.7': {} '@types/unist@2.0.11': {} @@ -30872,19 +30705,6 @@ snapshots: dependencies: node-gyp-build: 4.8.4 - build@0.1.4: - dependencies: - cssmin: 0.3.2 - jsmin: 1.0.1 - jxLoader: 0.1.1 - moo-server: 1.3.0 - promised-io: 0.3.6 - timespan: 2.3.0 - uglify-js: 1.3.5 - walker: 1.0.8 - winston: 3.17.0 - wrench: 1.3.9 - builtin-modules@3.3.0: {} builtin-status-codes@3.0.0: {} @@ -31354,16 +31174,10 @@ snapshots: collect-v8-coverage@1.0.2: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} color-string@1.9.1: @@ -31373,11 +31187,6 @@ snapshots: color-support@1.1.3: {} - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - color@4.2.3: dependencies: color-convert: 2.0.1 @@ -31387,11 +31196,6 @@ snapshots: colorette@2.0.20: {} - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - columnify@1.6.0: dependencies: strip-ansi: 6.0.1 @@ -31920,8 +31724,6 @@ snapshots: cssesc@3.0.0: {} - cssmin@0.3.2: {} - cssnano-preset-advanced@6.1.2(postcss@8.4.49): dependencies: autoprefixer: 10.4.20(postcss@8.4.49) @@ -32789,8 +32591,6 @@ snapshots: emoticon@4.1.0: {} - enabled@2.0.0: {} - encode-utf8@1.0.3: {} encodeurl@1.0.2: {} @@ -33635,8 +33435,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - fecha@4.2.3: {} - feed@4.2.2: dependencies: xml-js: 1.6.11 @@ -33765,8 +33563,6 @@ snapshots: async: 0.2.10 which: 1.3.1 - fn.name@1.1.0: {} - follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: debug: 4.3.7 @@ -36079,8 +35875,6 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@0.3.7: {} - js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -36132,8 +35926,6 @@ snapshots: jsesc@3.1.0: {} - jsmin@1.0.1: {} - json-bigint@1.0.0: dependencies: bignumber.js: 9.1.2 @@ -36257,13 +36049,6 @@ snapshots: jwt-decode@4.0.0: {} - jxLoader@0.1.1: - dependencies: - js-yaml: 0.3.7 - moo-server: 1.3.0 - promised-io: 0.3.6 - walker: 1.0.8 - katex@0.16.18: dependencies: commander: 8.3.0 @@ -36304,8 +36089,6 @@ snapshots: kolorist@1.8.0: {} - kuler@2.0.0: {} - kuromoji@0.1.2: dependencies: async: 2.6.4 @@ -36706,15 +36489,6 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - long@5.2.3: {} longest-streak@3.1.0: {} @@ -37700,8 +37474,6 @@ snapshots: moment@2.30.1: {} - moo-server@1.3.0: {} - motion@10.16.2: dependencies: '@motionone/animation': 10.18.0 @@ -38322,10 +38094,6 @@ snapshots: dependencies: wrappy: 1.0.2 - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -39808,8 +39576,6 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 - promised-io@0.3.6: {} - promptly@2.2.0: dependencies: read: 1.0.7 @@ -41445,8 +41211,6 @@ snapshots: svelte: 5.16.0 swrev: 4.0.0 - stack-trace@0.0.10: {} - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -41907,8 +41671,6 @@ snapshots: text-extensions@2.4.0: {} - text-hex@1.0.0: {} - text-table@0.2.0: {} thenby@1.3.4: {} @@ -41959,8 +41721,6 @@ snapshots: es5-ext: 0.10.64 next-tick: 1.1.0 - timespan@2.3.0: {} - tiny-emitter@2.1.0: {} tiny-invariant@1.3.3: {} @@ -42083,8 +41843,6 @@ snapshots: trim-newlines@4.1.1: {} - triple-beam@1.4.1: {} - trough@1.0.5: {} trough@2.2.0: {} @@ -42437,8 +42195,6 @@ snapshots: ufo@1.5.4: {} - uglify-js@1.3.5: {} - uglify-js@3.19.3: optional: true @@ -43697,26 +43453,6 @@ snapshots: wildcard@2.0.1: {} - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -43749,8 +43485,6 @@ snapshots: wrappy@1.0.2: {} - wrench@1.3.9: {} - write-file-atomic@2.4.3: dependencies: graceful-fs: 4.2.11