import { ModuleAdapterInterface } from '@defikitdotnet/agent-framework-core'; import type { Database } from 'better-sqlite3'; import { User } from '../models/User'; import { Post } from '../models/Post'; import { DatabaseAdapter } from '@elizaos/core'; /** * SQL schema for x-ai-combat tables */ export declare const sqliteTables = "\nPRAGMA foreign_keys=OFF;\nBEGIN TRANSACTION;\n\n-- Users table for storing Twitter users\nCREATE TABLE IF NOT EXISTS \"users\" (\n \"id\" TEXT PRIMARY KEY,\n \"twitterId\" TEXT NOT NULL,\n \"username\" TEXT NOT NULL,\n \"linkedAt\" TEXT NOT NULL,\n \"updatedAt\" TEXT,\n \"agentId\" TEXT REFERENCES accounts(id) ON DELETE CASCADE\n);\n\n-- Create index for faster queries\nCREATE INDEX IF NOT EXISTS \"idx_users_twitterId\" ON \"users\" (\"twitterId\");\nCREATE INDEX IF NOT EXISTS \"idx_users_agentId\" ON \"users\" (\"agentId\");\n\n-- Posts table for storing Twitter posts with stats\nCREATE TABLE IF NOT EXISTS \"posts\" (\n \"id\" TEXT PRIMARY KEY,\n \"tweetId\" TEXT NOT NULL,\n \"twitterUserId\" TEXT NOT NULL,\n \"userId\" TEXT,\n \"content\" TEXT NOT NULL,\n \"raw\" TEXT NOT NULL,\n \"stats\" TEXT DEFAULT '{\"likes\":0,\"retweets\":0,\"quotes\":0,\"replies\":0,\"total\":0,\"famePoints\":0}',\n \"lastInteractionAt\" TEXT,\n \"createdAt\" TEXT NOT NULL,\n \"updatedAt\" TEXT,\n \"agentId\" TEXT REFERENCES accounts(id) ON DELETE CASCADE\n);\n\n-- Create indexes for faster queries\nCREATE INDEX IF NOT EXISTS \"idx_posts_tweetId\" ON \"posts\" (\"tweetId\");\nCREATE INDEX IF NOT EXISTS \"idx_posts_twitterUserId\" ON \"posts\" (\"twitterUserId\");\nCREATE INDEX IF NOT EXISTS \"idx_posts_userId\" ON \"posts\" (\"userId\");\nCREATE INDEX IF NOT EXISTS \"idx_posts_agentId\" ON \"posts\" (\"agentId\");\n\n-- Replied tweets table for tracking which tweets have been replied to\nCREATE TABLE IF NOT EXISTS \"replied_tweets\" (\n \"tweetId\" TEXT PRIMARY KEY,\n \"repliedAt\" TEXT NOT NULL,\n \"agentId\" TEXT REFERENCES accounts(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS \"idx_replied_tweets_agentId\" ON \"replied_tweets\" (\"agentId\");\n\nCOMMIT;\n"; /** * XAIAdapter - Consolidated adapter for x-ai-combat module * Implements database operations for User, Post, and Interaction models */ export declare class XAIAdapter implements ModuleAdapterInterface { protected databaseAdapter: D; /** * Initialize XAIAdapter with SQLite database */ constructor(databaseAdapter: D); /** * Initialize the database schema for x-ai-combat tables */ init(): void; /** * Get the underlying database instance */ getDatabase(): D; /** * Get the database adapter - required for ModuleAdapterInterface */ getDatabaseAdapter(): DatabaseAdapter; /** * Mark a tweet as having been replied to */ markInteractionAsReplied(tweetId: string, agentId?: string): Promise; /** * Get all tweets that have been replied to */ getRepliedInteractions(agentId?: string): Promise<{ tweetId: string; repliedAt: Date; agentId?: string; }[]>; /** * Check if a tweet has been replied to */ hasTweetBeenReplied(tweetId: string): Promise; /** * Find user by ID */ findUserById(id: string): Promise; /** * Find user by Twitter ID */ findUserByTwitterId(twitterId: string, agentId?: string): Promise; /** * Create or update a user */ createUser(user: User): Promise; /** * Link existing posts to a user when they connect their account */ private linkPostsToUser; /** * Update an existing user */ updateUser(user: User): Promise; /** * Get all users */ getAllUsers(agentId?: string): Promise; /** * Find post by ID */ findPostById(id: string): Promise; /** * Find post by Tweet ID */ findPostByTweetId(tweetId: string): Promise; /** * Create or update a post */ createPost(post: Post): Promise; /** * Get posts by user ID with pagination */ getPostsByUserId(userId: string, page?: number, limit?: number, agentId?: string): Promise<{ posts: Post[]; total: number; }>; /** * Get all posts from the database */ getAllPosts(agentId?: string): Promise; /** * Get posts by Twitter user ID */ getPostsByTwitterUserId(twitterUserId: string, agentId?: string): Promise; /** * Get leaderboard data with user fame points and stats */ getLeaderboard(period?: string, limit?: number, agentId?: string): Promise<{ users: Array<{ userId: string; username: string; twitterId: string; famePoints: number; stats: { likes: number; retweets: number; quotes: number; replies: number; total: number; }; lastActive?: Date; }>; totalUsers: number; }>; /** * Get period SQL condition for leaderboard */ private getPeriodLabel; private parsePostRow; } //# sourceMappingURL=XAIAdapter.d.ts.map