69 lines
2.4 KiB
JavaScript
69 lines
2.4 KiB
JavaScript
/**
|
|
* Helper script to create a live API key for local development
|
|
* Usage: node scripts/create-live-api-key.js
|
|
*/
|
|
|
|
require('dotenv').config();
|
|
const crypto = require('crypto');
|
|
const { query, connectDB } = require('../src/database/connection');
|
|
|
|
function generateApiKey(type = 'live') {
|
|
const prefix = type === 'test' ? 'vf_test_' : 'vf_live_';
|
|
return prefix + crypto.randomBytes(24).toString('hex');
|
|
}
|
|
|
|
async function createLiveApiKey() {
|
|
try {
|
|
await connectDB();
|
|
console.log('✅ Connected to database');
|
|
|
|
// Get a user to attach the key to. Prefer an existing user, otherwise create one.
|
|
let userRes = await query('SELECT id FROM users ORDER BY id LIMIT 1');
|
|
let userId;
|
|
|
|
if (userRes.rows.length === 0) {
|
|
console.log('No users found. Creating a default local user...');
|
|
const bcrypt = require('bcryptjs');
|
|
const passwordHash = await bcrypt.hash('localpass123', 10);
|
|
const userResult = await query(
|
|
`INSERT INTO users (email, password_hash, company_name, plan, monthly_quota, quota_reset_date, is_active)
|
|
VALUES ($1, $2, $3, $4, $5, DATE(NOW() + INTERVAL '1 month'), true)
|
|
RETURNING id`,
|
|
['local@example.com', passwordHash, 'Local Dev', 'dev', 100000]
|
|
);
|
|
userId = userResult.rows[0].id;
|
|
console.log('Created user id:', userId);
|
|
} else {
|
|
userId = userRes.rows[0].id;
|
|
console.log('Using existing user id:', userId);
|
|
}
|
|
|
|
// Deactivate any existing live keys for that user (optional)
|
|
await query('UPDATE api_keys SET is_active = false WHERE user_id = $1 AND key_prefix = $2', [userId, 'vf_live_']);
|
|
|
|
// Generate new live API key
|
|
const apiKey = generateApiKey('live');
|
|
const keyHash = crypto.createHash('sha256').update(apiKey).digest('hex');
|
|
|
|
await query(
|
|
`INSERT INTO api_keys (user_id, key_prefix, key_hash, key_hint, name, is_test_key, is_active)
|
|
VALUES ($1, $2, $3, $4, $5, false, true)`,
|
|
[userId, 'vf_live_', keyHash, apiKey.slice(-4), 'Local Live Key']
|
|
);
|
|
|
|
console.log('\n✅ Live API Key Created Successfully!\n');
|
|
console.log('Key:');
|
|
console.log(apiKey);
|
|
console.log('\nUse this in your request header:');
|
|
console.log('Header: x-api-key');
|
|
console.log('Value:', apiKey);
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('❌ Error creating live API key:', error.message);
|
|
console.error(error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
createLiveApiKey();
|