/** * Test script for the member lookup API * This script tests the encryption/decryption and API functionality */ const crypto = require('crypto'); // Same encryption configuration as in the utils const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || 'your-32-character-secret-key-here!'; const ALGORITHM = 'aes-256-cbc'; // Encryption function (same as in utils/encryption.ts) function encryptMemberId(memberId) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipher(ALGORITHM, ENCRYPTION_KEY); let encrypted = cipher.update(memberId, 'utf8', 'hex'); encrypted += cipher.final('hex'); return iv.toString('hex') + ':' + encrypted; } // Decryption function (same as in utils/encryption.ts) function decryptMemberId(encryptedMemberId) { try { const textParts = encryptedMemberId.split(':'); const iv = Buffer.from(textParts.shift(), 'hex'); const encryptedText = textParts.join(':'); const decipher = crypto.createDecipher(ALGORITHM, ENCRYPTION_KEY); let decrypted = decipher.update(encryptedText, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } catch (error) { throw new Error('Invalid encrypted member ID'); } } // Test the encryption/decryption const testMemberId = '507f1f77bcf86cd799439011'; // Example MongoDB ObjectId console.log('Original Member ID:', testMemberId); const encrypted = encryptMemberId(testMemberId); console.log('Encrypted Member ID:', encrypted); const decrypted = decryptMemberId(encrypted); console.log('Decrypted Member ID:', decrypted); console.log('Encryption/Decryption Test:', testMemberId === decrypted ? 'PASSED' : 'FAILED'); // Test API URL const apiUrl = `http://localhost:3000/api/member-lookup?encryptedId=${encodeURIComponent(encrypted)}`; console.log('\nTest API URL:', apiUrl); console.log('\nTo test the API, make a GET request to the above URL after starting the development server.'); console.log('Expected response format:'); console.log(JSON.stringify({ success: true, message: "Member information retrieved successfully", data: { name: "John Doe", gender: "m", planDelay: 1, planStart: "Mon, 01 Jan 2024 00:00:00 GMT", planStatus: "active", planExpAt: "Thu, 01 Feb 2024 00:00:00 GMT" } }, null, 2));