UNPKG

tryaii-mcp-server

Version:

TryAII MCP Server - 15+ AI models with comparison, cost tracking, and collective intelligence

111 lines 3.76 kB
import { Schema } from 'mongoose'; // Reference to existing UserApiKey schema (from your main DB) export const UserApiKeySchema = new Schema({ userId: { type: String, required: true, index: true }, keyId: { type: String, required: true, unique: true, index: true }, keyHash: { type: String, required: true, unique: true }, keyPrefix: { type: String, required: true }, name: { type: String, required: true, trim: true, maxlength: 100 }, permissions: { type: [String], required: true, default: ['chat'], validate: { validator: function (permissions) { const validPermissions = ['chat', 'compare', 'models', 'usage']; return permissions.every(p => validPermissions.includes(p)); }, message: 'Invalid permission specified' } }, isActive: { type: Boolean, default: true, index: true }, lastUsed: Date, usageStats: { totalRequests: { type: Number, default: 0, min: 0 }, totalCost: { type: Number, default: 0, min: 0, get: (v) => parseFloat(v.toFixed(6)) }, lastResetDate: { type: Date, default: Date.now } }, expiresAt: Date }, { timestamps: true, versionKey: false }); // Reference to existing User schema (from your main DB) export const UserSchema = new Schema({ _id: { type: String, required: true }, email: { type: String, required: true, unique: true, trim: true, lowercase: true }, name: { type: String, required: true, trim: true }, image: String, provider: { type: String, required: true }, providerId: { type: String, required: true }, lastLogin: { type: Date, default: Date.now }, isActive: { type: Boolean, default: true }, role: { type: String, enum: ['user', 'admin'], default: 'user' }, balance: { currentAmount: { type: Number, get: (v) => parseFloat(v.toFixed(6)), default: 0.25 }, currency: { type: String, default: 'USD' }, lastUpdated: { type: Date, default: Date.now } }, apiKeyQuota: { maxKeys: { type: Number, default: 3, min: 0, max: 10 }, currentCount: { type: Number, default: 0, min: 0 } } }, { timestamps: true, versionKey: false, _id: false }); // Reference to existing Transaction schema (from your main DB) export const TransactionSchema = new Schema({ userId: { type: String, required: true, index: true }, amount: { type: Number, required: true, get: (v) => parseFloat(v.toFixed(6)) }, balanceAfter: { type: Number, required: true, get: (v) => parseFloat(v.toFixed(6)) }, description: { type: String, required: true }, type: { type: String, enum: ['initial', 'deposit', 'usage', 'refund', 'adjustment'], required: true }, paymentReference: String, status: { type: String, enum: ['pending', 'completed', 'failed', 'refunded'], default: 'completed' }, metadata: { ipAddress: { type: String, default: '' }, userAgent: { type: String, default: '' }, adminId: { type: String, default: '' } }, // 🆕 Enhanced token and cost tracking tokenUsage: { totalTokens: { type: Number, default: 0 }, thinkingTokens: { type: Number, default: 0 }, reasoningModelsUsed: { type: Number, default: 0 } }, costBreakdown: { inputCost: { type: Number, default: 0 }, outputCost: { type: Number, default: 0 }, thinkingCost: { type: Number, default: 0 } } }, { timestamps: true }); //# sourceMappingURL=ExistingModels.js.map