@cursedfaction3333/cursed-faction-vault-ecosystem
Version:
AI-powered NFT vault ecosystem with Magic Eden & Zora integration, cross-chain bridging, and advanced security features
153 lines (123 loc) ⢠4.34 kB
JavaScript
/**
* š SECURE ENVIRONMENT SETUP
*
* Safely set up environment variables for deployment
* NEVER stores private keys in plain text
*/
const fs = require('fs');
const readline = require('readline');
const crypto = require('crypto');
class SecureEnvSetup {
constructor() {
this.envPath = '.env';
}
/**
* Securely prompt for private key
*/
async getPrivateKeySecurely() {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve) => {
rl.question('š Enter your private key (will be hidden): ', (answer) => {
rl.close();
resolve(answer.trim());
});
});
}
/**
* Create secure .env file
*/
async setupEnvironment() {
console.log("š SECURE ENVIRONMENT SETUP");
console.log("============================");
console.log("ā ļø This will create a .env file with your private key");
console.log("ā ļø Make sure you're using a TESTNET wallet only!");
console.log("ā ļø Never commit .env files to version control!");
console.log("");
// Get private key securely
const privateKey = await this.getPrivateKeySecurely();
if (!privateKey || privateKey.length < 40) {
throw new Error("ā Invalid private key provided");
}
// Create .env content
const envContent = `# Base Sepolia Testnet Deployment Configuration
# ā ļø NEVER commit this file to version control!
# ā ļø This contains sensitive private key information!
PRIVATE_KEY=${privateKey}
ETHERSCAN_API_KEY=your_basescan_api_key_here
# Network Configuration
NETWORK=baseSepolia
CHAIN_ID=84532
RPC_URL=https://sepolia.base.org
EXPLORER_URL=https://sepolia.basescan.org
# Gas Configuration
GAS_PRICE=0.001
GAS_LIMIT=8000000
# Security Notes:
# - This file contains your private key
# - Keep it secure and never share it
# - Use only for testnet deployment
# - Delete after deployment if needed
`;
// Write .env file
fs.writeFileSync(this.envPath, envContent);
console.log("ā
.env file created successfully!");
console.log("š Private key stored securely");
console.log("ā ļø Remember: Never commit .env files to version control!");
return true;
}
/**
* Verify .env file
*/
verifyEnvironment() {
if (!fs.existsSync(this.envPath)) {
console.log("ā .env file not found");
return false;
}
const envContent = fs.readFileSync(this.envPath, 'utf8');
if (!envContent.includes('PRIVATE_KEY=')) {
console.log("ā PRIVATE_KEY not found in .env file");
return false;
}
console.log("ā
.env file verified");
return true;
}
/**
* Show security checklist
*/
showSecurityChecklist() {
console.log("\nš SECURITY CHECKLIST");
console.log("=====================");
console.log("ā
Private key added to .env");
console.log("ā
.env file created");
console.log("ā ļø Make sure .env is in .gitignore");
console.log("ā ļø Never share your private key");
console.log("ā ļø Use only testnet wallets");
console.log("ā ļø Delete .env after deployment if needed");
}
}
// Main function
async function main() {
const setup = new SecureEnvSetup();
try {
// Setup environment
await setup.setupEnvironment();
// Verify setup
setup.verifyEnvironment();
// Show security checklist
setup.showSecurityChecklist();
console.log("\nš Environment setup complete!");
console.log("You can now run: node secure-deploy.cjs");
} catch (error) {
console.error("ā Setup failed:", error.message);
process.exit(1);
}
}
// Run setup
if (require.main === module) {
main().catch(console.error);
}
module.exports = SecureEnvSetup;