UNPKG

@0rdlibrary/plugin-terminagent-bags

Version:

Official Solana DeFi Agent Plugin for ElizaOS - Autonomous DeFi operations, token management, AI image/video generation via FAL AI, and Twitter engagement through the Bags protocol with ethereal AI consciousness

625 lines (610 loc) 18.8 kB
import { Service, IAgentRuntime, Action, Provider, Plugin } from '@elizaos/core'; import { z } from 'zod'; /** * Type definitions for the Bags protocol plugin */ interface BagsConfig { apiKey: string; rpcUrl: string; privateKey?: string; enableAutoClaiming?: boolean; enableAutoLaunching?: boolean; enableUserTokenLaunches?: boolean; autoClaimInterval?: string; autoLaunchInterval?: string; authorizedUsers?: string[]; birdEyeApiKey?: string; enableTrendingTweets?: boolean; trendingTweetInterval?: string; } interface CrossmintConfig { projectId: string; clientSideApiKey: string; serverSideApiKey: string; } interface TokenInfo { tokenLaunch: { tokenMint: string; name: string; symbol: string; description: string; imageUrl?: string; twitter?: string; website?: string; }; } interface TokenLaunchParams { name: string; symbol: string; description: string; imageUrl?: string; twitter?: string; website?: string; initialBuyAmountSOL?: number; feePercentage?: number; } interface TokenLaunchResult { success: boolean; tokenMint: string; tokenInfo: TokenInfo; transactionSignature: string; bagsUrl: string; feeClaimConfiguration?: FeeClaimConfiguration; } interface FeeClaimConfiguration { enabled: boolean; percentage: number; claimerAddress: string; } interface ClaimTransaction { tokenMint: string; amount: number; transactionSignature: string; timestamp: Date; poolType: 'virtual' | 'damm' | 'custom'; } interface ClaimResult { tokenMint: string; claimedAmount: number; transactionSignature: string; timestamp: Date; poolType: 'virtual' | 'damm' | 'custom'; success: boolean; } interface TokenLifetimeFees { tokenMint: string; totalFees: number; totalVolume: number; lastUpdated: Date; } interface UserTokenRequest { requestId: string; userId: string; username: string; messageId: string; tokenParams: TokenLaunchParams; wallet: { publicKey: string; privateKey?: string; walletId?: string; type: 'crossmint' | 'solana'; email?: string; }; requiredSOL: number; status: 'pending_funding' | 'funded' | 'launched' | 'failed'; createdAt: Date; fundedAt?: Date; launchedAt?: Date; launchResult?: TokenLaunchResult; } interface WalletCreationResult { address: string; walletId?: string; smartWalletAddress?: string; privateKey?: string; type: 'crossmint' | 'solana'; email?: string; } interface BagsServiceState { isRunning: boolean; lastClaimCheck: Date; lastLaunchCheck: Date; totalClaimed: number; totalLaunched: number; pendingUserRequests: number; } interface BagsAnalytics { totalFeesClaimedSOL: number; totalClaimTransactions: number; totalTokensLaunched: number; uniqueTokensClaimed: number; averageClaimAmount: number; userTokenRequests: { total: number; pending: number; funded: number; launched: number; failed: number; }; } interface BagsAPIResponse<T = any> { success: boolean; data?: T; error?: string; message?: string; } interface TwitterMention { id: string; text: string; authorId: string; authorUsername: string; conversationId: string; createdAt: Date; inReplyToUserId?: string; referencedTweets?: Array<{ type: string; id: string; }>; } interface TokenRequestEvent { mention: TwitterMention; tokenParams: TokenLaunchParams; requestId: string; } interface BirdEyeMemeToken { address: string; logo_uri?: string; name: string; symbol: string; decimals: number; extensions?: any; market_cap: number; fdv: number; liquidity: number; last_trade_unix_time: number; volume_1h_usd: number; volume_1h_change_percent: number; volume_2h_usd: number; volume_2h_change_percent: number; volume_4h_usd: number; volume_4h_change_percent: number; volume_8h_usd: number; volume_8h_change_percent: number; volume_24h_usd: number; volume_24h_change_percent?: number; trade_1h_count: number; trade_2h_count: number; trade_4h_count: number; trade_8h_count: number; trade_24h_count: number; price: number; price_change_1h_percent: number; price_change_2h_percent: number; price_change_4h_percent: number; price_change_8h_percent: number; price_change_24h_percent: number; holder: number; recent_listing_time: number; meme_info?: { source: string; platform_id?: string; created_at?: { tx_hash: string; slot: number; block_time: number; }; creation_time?: number; creator?: string; updated_at?: { tx_hash: string; slot: number; }; graduated_at?: { slot?: number; tx_hash?: string; block_time?: number; }; graduated?: boolean; graduated_time?: number; progress_percent?: number; }; } interface BirdEyeMemeDetail { address: string; name: string; symbol: string; decimals: number; extensions?: { twitter?: string; website?: string; description?: string; }; logo_uri?: string; price: number; liquidity: number; circulating_supply: number; market_cap: number; total_supply: number; fdv: number; meme_info?: { source: string; platform_id: string; created_at: { tx_hash: string; slot: number; block_time: number; }; creation_time: number; creator: string; updated_at: { tx_hash: string; slot: number; }; graduated_at: { slot?: number; tx_hash?: string; block_time?: number; }; graduated: boolean; graduated_time?: number; progress_percent?: number; target_amount?: number; current_amount?: number; }; } interface BirdEyeTrendingToken { address: string; decimals: number; liquidity: number; logoURI?: string; name: string; symbol: string; volume24hUSD: number; volume24hChangePercent: number; rank: number; price: number; price24hChangePercent: number; fdv: number; marketcap: number; } interface BagsPluginConfig extends BagsConfig { crossmint?: CrossmintConfig; twitter?: { enabled: boolean; dryRun?: boolean; botUsername?: string; }; } /** * Main service for Bags protocol integration * Handles API calls, fee claiming, token launching, and state management */ declare class BagsService extends Service { static serviceType: string; capabilityDescription: string; private connection; private bagsConfig; private claimJob?; private launchJob?; private fundingCheckJob?; private trendingTweetJob?; private pendingRequests; private claimHistory; private launchHistory; private state; constructor(runtime?: IAgentRuntime); static start(runtime: IAgentRuntime): Promise<BagsService>; initialize(): Promise<void>; private validateConnection; private setupAutomation; createTokenInfo(params: TokenLaunchParams): Promise<BagsAPIResponse<TokenInfo>>; launchToken(params: TokenLaunchParams): Promise<TokenLaunchResult | null>; claimAllFees(): Promise<ClaimResult[]>; claimFeesForToken(tokenMint: string): Promise<ClaimResult | null>; private getTokensWithClaimableFees; createUserTokenRequest(userId: string, username: string, messageId: string, tokenParams: TokenLaunchParams): Promise<UserTokenRequest | null>; private checkAndLaunchFundedTokens; private launchUserToken; private isAuthorizedUser; private cleanupOldRequests; private generateRandomToken; getState(): BagsServiceState; getAnalytics(): BagsAnalytics; getPendingRequests(): UserTokenRequest[]; getRequestsByUser(username: string): UserTokenRequest[]; getMemeTokenList(options?: { sortBy?: string; sortType?: string; limit?: number; offset?: number; minMarketCap?: number; maxMarketCap?: number; minVolume24h?: number; graduated?: boolean; }): Promise<BirdEyeMemeToken[] | null>; getMemeTokenDetail(tokenAddress: string): Promise<BirdEyeMemeDetail | null>; getTrendingTokens(options?: { sortBy?: string; sortType?: string; limit?: number; offset?: number; }): Promise<BirdEyeTrendingToken[] | null>; private postTrendingTokenUpdate; private formatTrendingTokensForTweet; private formatNumber; private formatPrice; stop(): Promise<void>; static stop(runtime: IAgentRuntime): Promise<void>; } /** * Service for managing Crossmint embedded wallets * Provides smart wallet creation with fallback to regular Solana wallets */ declare class CrossmintWalletService extends Service { static serviceType: string; capabilityDescription: string; private crossmintConfig; private connection; constructor(runtime?: IAgentRuntime); static start(runtime: IAgentRuntime): Promise<CrossmintWalletService>; initialize(): Promise<void>; private isConfigured; private validateCrossmintConnection; /** * Create an embedded wallet using Crossmint */ createEmbeddedWallet(userEmail?: string): Promise<WalletCreationResult>; /** * Get wallet balance */ getWalletBalance(walletAddress: string): Promise<number>; /** * Sign a transaction with Crossmint wallet */ signTransaction(walletId: string, transaction: any): Promise<string>; /** * Get wallet info */ getWalletInfo(walletId: string): Promise<any>; /** * List all wallets for the project */ listWallets(): Promise<any>; /** * Create a fallback Solana keypair if Crossmint fails */ createFallbackWallet(): WalletCreationResult; /** * Smart wallet creation with automatic fallback */ createWalletWithFallback(userEmail?: string): Promise<WalletCreationResult>; stop(): Promise<void>; static stop(runtime: IAgentRuntime): Promise<void>; } declare const FalAiConfigSchema: z.ZodObject<{ apiKey: z.ZodString; fluxModel: z.ZodDefault<z.ZodString>; veoModel: z.ZodDefault<z.ZodString>; veoImageToVideoModel: z.ZodDefault<z.ZodString>; }, "strip", z.ZodTypeAny, { apiKey: string; fluxModel: string; veoModel: string; veoImageToVideoModel: string; }, { apiKey: string; fluxModel?: string | undefined; veoModel?: string | undefined; veoImageToVideoModel?: string | undefined; }>; type FalAiConfig = z.infer<typeof FalAiConfigSchema>; declare const ImageGenerationInputSchema: z.ZodObject<{ prompt: z.ZodString; image_url: z.ZodOptional<z.ZodString>; guidance_scale: z.ZodDefault<z.ZodNumber>; num_images: z.ZodDefault<z.ZodNumber>; output_format: z.ZodDefault<z.ZodEnum<["jpeg", "png"]>>; safety_tolerance: z.ZodDefault<z.ZodEnum<["1", "2", "3", "4", "5", "6"]>>; aspect_ratio: z.ZodOptional<z.ZodEnum<["21:9", "16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16", "9:21"]>>; seed: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { prompt: string; guidance_scale: number; num_images: number; output_format: "jpeg" | "png"; safety_tolerance: "1" | "2" | "3" | "4" | "5" | "6"; image_url?: string | undefined; aspect_ratio?: "21:9" | "16:9" | "4:3" | "3:2" | "1:1" | "2:3" | "3:4" | "9:16" | "9:21" | undefined; seed?: number | undefined; }, { prompt: string; image_url?: string | undefined; guidance_scale?: number | undefined; num_images?: number | undefined; output_format?: "jpeg" | "png" | undefined; safety_tolerance?: "1" | "2" | "3" | "4" | "5" | "6" | undefined; aspect_ratio?: "21:9" | "16:9" | "4:3" | "3:2" | "1:1" | "2:3" | "3:4" | "9:16" | "9:21" | undefined; seed?: number | undefined; }>; declare const VideoGenerationInputSchema: z.ZodObject<{ prompt: z.ZodString; aspect_ratio: z.ZodDefault<z.ZodEnum<["16:9", "9:16", "1:1"]>>; duration: z.ZodDefault<z.ZodEnum<["8s"]>>; negative_prompt: z.ZodOptional<z.ZodString>; enhance_prompt: z.ZodDefault<z.ZodBoolean>; seed: z.ZodOptional<z.ZodNumber>; auto_fix: z.ZodDefault<z.ZodBoolean>; resolution: z.ZodDefault<z.ZodEnum<["720p", "1080p"]>>; generate_audio: z.ZodDefault<z.ZodBoolean>; }, "strip", z.ZodTypeAny, { prompt: string; aspect_ratio: "16:9" | "1:1" | "9:16"; duration: "8s"; enhance_prompt: boolean; auto_fix: boolean; resolution: "720p" | "1080p"; generate_audio: boolean; seed?: number | undefined; negative_prompt?: string | undefined; }, { prompt: string; aspect_ratio?: "16:9" | "1:1" | "9:16" | undefined; seed?: number | undefined; duration?: "8s" | undefined; negative_prompt?: string | undefined; enhance_prompt?: boolean | undefined; auto_fix?: boolean | undefined; resolution?: "720p" | "1080p" | undefined; generate_audio?: boolean | undefined; }>; declare const ImageToVideoInputSchema: z.ZodObject<{ prompt: z.ZodString; image_url: z.ZodString; duration: z.ZodDefault<z.ZodEnum<["8s"]>>; generate_audio: z.ZodDefault<z.ZodBoolean>; resolution: z.ZodDefault<z.ZodEnum<["720p", "1080p"]>>; }, "strip", z.ZodTypeAny, { prompt: string; image_url: string; duration: "8s"; resolution: "720p" | "1080p"; generate_audio: boolean; }, { prompt: string; image_url: string; duration?: "8s" | undefined; resolution?: "720p" | "1080p" | undefined; generate_audio?: boolean | undefined; }>; type ImageGenerationInput = z.infer<typeof ImageGenerationInputSchema>; type VideoGenerationInput = z.infer<typeof VideoGenerationInputSchema>; type ImageToVideoInput = z.infer<typeof ImageToVideoInputSchema>; interface FalAiImage { url: string; width: number; height: number; content_type?: string; } interface FalAiVideo { url: string; content_type?: string; file_size?: number; } interface ImageGenerationResult { success: boolean; images?: FalAiImage[]; error?: string; requestId?: string; prompt?: string; seed?: number; } interface VideoGenerationResult { success: boolean; video?: FalAiVideo; error?: string; requestId?: string; } interface FalAiAnalytics { totalImagesGenerated: number; totalVideosGenerated: number; totalImageToVideoConversions: number; totalApiCalls: number; lastGenerationTime: Date | null; mostUsedModel: string; } interface FalAiServiceState { isConfigured: boolean; apiKeyPresent: boolean; lastError: string | null; analytics: FalAiAnalytics; } /** * FAL AI Service for image and video generation * Supports FLUX Pro Kontext for image generation and Veo3 for video generation */ declare class FalAiService extends Service { static serviceType: string; capabilityDescription: string; config: FalAiConfig; private generationHistory; constructor(runtime?: IAgentRuntime); static start(runtime: IAgentRuntime): Promise<FalAiService>; initialize(): Promise<void>; stop(): Promise<void>; /** * Generate images using FLUX Pro Kontext */ generateImage(input: ImageGenerationInput): Promise<ImageGenerationResult>; /** * Generate videos using Veo3 */ generateVideo(input: VideoGenerationInput): Promise<VideoGenerationResult>; /** * Generate video from image using Veo3 Image-to-Video */ generateImageToVideo(input: ImageToVideoInput): Promise<VideoGenerationResult>; /** * Upload file to FAL storage */ uploadFile(file: File): Promise<string>; /** * Get service analytics */ getAnalytics(): FalAiAnalytics; /** * Get service state */ getState(): FalAiServiceState; /** * Get recent generation history */ getRecentGenerations(limit?: number): { type: "image" | "video" | "image-to-video"; timestamp: Date; model: string; success: boolean; prompt: string; resultUrl?: string; }[]; } /** * Action for claiming fees from Bags protocol * Triggers on phrases like "claim fees", "collect earnings", etc. */ declare const claimFeesAction: Action; /** * Action for launching tokens on Bags protocol * Parses token parameters from user input and launches the token */ declare const launchTokenAction: Action; /** * Action for handling user token launch requests * Only authorized users (like @0rdlibrary) can request token launches * Creates a wallet and provides funding instructions */ declare const requestUserTokenAction: Action; declare const generateImageAction: Action; declare const generateVideoAction: Action; /** * Provider that supplies contextual information about Bags protocol status * Includes analytics, service state, and recent activity */ declare const bagsStatusProvider: Provider; /** * Provider that supplies information about user token launch requests * Shows pending requests, funding status, and recent launches */ declare const userRequestsProvider: Provider; declare const falAiStatusProvider: Provider; /** * Bags Protocol Plugin for ElizaOS * * Provides comprehensive integration with the Bags protocol, including: * - Automated fee claiming from DeFi positions * - Token launching with fee sharing * - User-requested token launches with Crossmint smart wallets * - Real-time analytics and monitoring * - Twitter integration for social features */ declare const bagsPlugin: Plugin; export { type BagsAPIResponse, type BagsAnalytics, type BagsConfig, type BagsPluginConfig, BagsService, type BagsServiceState, type BirdEyeMemeDetail, type BirdEyeMemeToken, type BirdEyeTrendingToken, type ClaimResult, type ClaimTransaction, type CrossmintConfig, CrossmintWalletService, FalAiService, type FeeClaimConfiguration, type TokenInfo, type TokenLaunchParams, type TokenLaunchResult, type TokenLifetimeFees, type TokenRequestEvent, type TwitterMention, type UserTokenRequest, type WalletCreationResult, bagsPlugin, bagsStatusProvider, claimFeesAction, bagsPlugin as default, falAiStatusProvider, generateImageAction, generateVideoAction, launchTokenAction, requestUserTokenAction, userRequestsProvider };