@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
299 lines (279 loc) • 6.52 kB
text/typescript
/**
* Type definitions for the Bags protocol plugin
*/
export interface BagsConfig {
apiKey: string;
rpcUrl: string;
privateKey?: string;
enableAutoClaiming?: boolean;
enableAutoLaunching?: boolean;
enableUserTokenLaunches?: boolean;
autoClaimInterval?: string; // Cron expression
autoLaunchInterval?: string; // Cron expression
authorizedUsers?: string[]; // Usernames allowed to request token launches
birdEyeApiKey?: string; // BirdEye API key for token data
enableTrendingTweets?: boolean; // Enable automated trending token tweets
trendingTweetInterval?: string; // Cron expression for trending tweets
}
export interface CrossmintConfig {
projectId: string;
clientSideApiKey: string;
serverSideApiKey: string;
}
export interface TokenInfo {
tokenLaunch: {
tokenMint: string;
name: string;
symbol: string;
description: string;
imageUrl?: string;
twitter?: string;
website?: string;
};
}
export interface TokenLaunchParams {
name: string;
symbol: string;
description: string;
imageUrl?: string;
twitter?: string;
website?: string;
initialBuyAmountSOL?: number;
feePercentage?: number;
}
export interface TokenLaunchResult {
success: boolean;
tokenMint: string;
tokenInfo: TokenInfo;
transactionSignature: string;
bagsUrl: string;
feeClaimConfiguration?: FeeClaimConfiguration;
}
export interface FeeClaimConfiguration {
enabled: boolean;
percentage: number;
claimerAddress: string;
}
export interface ClaimTransaction {
tokenMint: string;
amount: number;
transactionSignature: string;
timestamp: Date;
poolType: 'virtual' | 'damm' | 'custom';
}
export interface ClaimResult {
tokenMint: string;
claimedAmount: number;
transactionSignature: string;
timestamp: Date;
poolType: 'virtual' | 'damm' | 'custom';
success: boolean;
}
export interface TokenLifetimeFees {
tokenMint: string;
totalFees: number;
totalVolume: number;
lastUpdated: Date;
}
export 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;
}
export interface WalletCreationResult {
address: string;
walletId?: string;
smartWalletAddress?: string;
privateKey?: string;
type: 'crossmint' | 'solana';
email?: string;
}
export interface BagsServiceState {
isRunning: boolean;
lastClaimCheck: Date;
lastLaunchCheck: Date;
totalClaimed: number;
totalLaunched: number;
pendingUserRequests: number;
}
export interface BagsAnalytics {
totalFeesClaimedSOL: number;
totalClaimTransactions: number;
totalTokensLaunched: number;
uniqueTokensClaimed: number;
averageClaimAmount: number;
userTokenRequests: {
total: number;
pending: number;
funded: number;
launched: number;
failed: number;
};
}
// API Response types
export interface BagsAPIResponse<T = any> {
success: boolean;
data?: T;
error?: string;
message?: string;
}
// Event types for Twitter integration
export interface TwitterMention {
id: string;
text: string;
authorId: string;
authorUsername: string;
conversationId: string;
createdAt: Date;
inReplyToUserId?: string;
referencedTweets?: Array<{
type: string;
id: string;
}>;
}
export interface TokenRequestEvent {
mention: TwitterMention;
tokenParams: TokenLaunchParams;
requestId: string;
}
// BirdEye API types
export 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;
};
}
export 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;
};
}
export 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;
}
// Plugin configuration schema
export interface BagsPluginConfig extends BagsConfig {
crossmint?: CrossmintConfig;
twitter?: {
enabled: boolean;
dryRun?: boolean;
botUsername?: string;
};
}