Skip to main content
Glama
users.seed.ts3 kB
/** * User Seeding Script * Creates test users with different subscription tiers */ import * as bcrypt from 'bcrypt'; import { DataSource } from 'typeorm'; import { User, UserTier } from '../entities/user.entity'; import { ApiKey } from '../entities/api-key.entity'; export const testUsers = [ { email: 'free@example.com', password: 'Password123!', tier: UserTier.FREE, name: 'Free User', description: 'Standard free tier user with limited API access', }, { email: 'pro@example.com', password: 'Password123!', tier: UserTier.PRO, name: 'Pro User', description: 'Pro tier user with enhanced API limits', }, { email: 'enterprise@example.com', password: 'Password123!', tier: UserTier.ENTERPRISE, name: 'Enterprise User', description: 'Enterprise tier user with unlimited API access', }, { email: 'admin@example.com', password: 'Password123!', tier: UserTier.ENTERPRISE, name: 'Admin User', description: 'Admin user with access to admin panel', }, ]; const getRateLimits = (tier: UserTier) => { const limits = { [UserTier.FREE]: { rpm: 50, rpd: 1000 }, [UserTier.PRO]: { rpm: 500, rpd: 50000 }, [UserTier.ENTERPRISE]: { rpm: 5000, rpd: 1000000 }, }; return limits[tier]; }; export async function seedUsers(dataSource: DataSource) { const userRepo = dataSource.getRepository(User); const apiKeyRepo = dataSource.getRepository(ApiKey); console.log('👥 Starting user seeding...'); for (const userData of testUsers) { try { let user = await userRepo.findOne({ where: { email: userData.email }, }); if (!user) { const hashedPassword = await bcrypt.hash(userData.password, 10); user = userRepo.create({ email: userData.email, password_hash: hashedPassword, tier: userData.tier, }); user = await userRepo.save(user); console.log(`✅ Created user: ${userData.email} (${userData.tier})`); // Create default API key for non-free users if (userData.tier !== UserTier.FREE) { const limits = getRateLimits(userData.tier); const keyPrefix = `atm_live_${Math.random().toString(36).substring(2, 10)}`; const apiKey = apiKeyRepo.create({ user_id: user.id, key_prefix: keyPrefix, key_hash: await bcrypt.hash(keyPrefix, 10), name: 'Default API Key', tier: userData.tier, is_active: true, rate_limit_rpm: limits.rpm, rate_limit_rpd: limits.rpd, }); await apiKeyRepo.save(apiKey); console.log(` 📝 Created API key: ${keyPrefix} (${limits.rpm} rpm)`); } } else { console.log(`⏭️ User already exists: ${userData.email}`); } } catch (error) { console.error(`❌ Error seeding user ${userData.email}:`, error); } } console.log('✨ User seeding complete!'); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aiatamai/atamai-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server