Files
wevia-brain/s89-arsenal-screens/cloud-account-factory.html
2026-04-12 23:01:36 +02:00

884 lines
37 KiB
HTML
Executable File

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Cloud Account Factory — Arsenal</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
:root{--bg:#060a14;--s:#0c1220;--c:#111827;--cy:#22d3ee;--gn:#10b981;--rd:#ef4444;--or:#f59e0b;--pu:#a78bfa;--tx:#e2e8f0;--t2:#94a3b8}
body{background:var(--bg);color:var(--tx);font-family:'DM Sans',sans-serif;padding:24px}
.hd{font-size:22px;font-weight:700;margin-bottom:20px;display:flex;align-items:center;gap:10px}
.hd span{font-size:26px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px}
.g2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-bottom:24px}
.cd{background:var(--s);border:1px solid rgba(34,211,238,.08);border-radius:12px;padding:20px}
.cd h3{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--t2);margin-bottom:8px}
.sv{font-size:28px;font-weight:700;font-family:'JetBrains Mono',monospace}
.badge{display:inline-block;padding:3px 10px;border-radius:6px;font-size:11px;font-weight:600}
.badge.gn{background:rgba(16,185,129,.15);color:var(--gn)}
.badge.rd{background:rgba(239,68,68,.15);color:var(--rd)}
.badge.or{background:rgba(245,158,11,.15);color:var(--or)}
.badge.cy{background:rgba(34,211,238,.15);color:var(--cy)}
.badge.pu{background:rgba(167,139,250,.15);color:var(--pu)}
table{width:100%;border-collapse:collapse}
th{text-align:left;padding:12px;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--t2);border-bottom:1px solid rgba(30,41,59,.5)}
td{padding:10px 12px;border-bottom:1px solid rgba(30,41,59,.3);font-size:13px;font-family:'JetBrains Mono',monospace}
tr:hover{background:rgba(34,211,238,.03)}
.btn{padding:8px 18px;border-radius:8px;border:none;cursor:pointer;font-size:13px;font-weight:600;transition:.2s}
.btn-cy{background:rgba(34,211,238,.15);color:var(--cy)}
.btn-cy:hover{background:rgba(34,211,238,.25)}
.btn-gn{background:rgba(16,185,129,.15);color:var(--gn)}
.btn-rd{background:rgba(239,68,68,.15);color:var(--rd)}
.bar{height:6px;border-radius:3px;background:rgba(30,41,59,.5);overflow:hidden;margin-top:6px}
.bar div{height:100%;border-radius:3px;transition:width .5s}
.log{background:var(--bg);border-radius:8px;padding:12px;max-height:200px;overflow-y:auto;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.8}
.act{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.modal{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);display:none;align-items:center;justify-content:center;z-index:1000}
.modal-content{background:var(--s);border-radius:12px;padding:30px;width:90%;max-width:1000px;border:1px solid rgba(34,211,238,.15)}
.input-group{margin-bottom:15px}
.input-group label{display:block;margin-bottom:8px;font-size:13px;color:var(--t2)}
.input-group input,.input-group select,.input-group textarea{width:100%;padding:10px;background:var(--bg);border:1px solid rgba(30,41,59,.5);border-radius:6px;color:var(--tx);font-family:'JetBrains Mono',monospace}
.checkbox-group{display:flex;flex-wrap:wrap;gap:15px;margin:10px 0}
.checkbox-item{display:flex;align-items:center;gap:8px}
.checkbox-item input{width:auto}
.tabs{display:flex;gap:2px;margin-bottom:20px}
.tab{flex:1;padding:12px;text-align:center;background:var(--bg);border:1px solid rgba(30,41,59,.5);cursor:pointer;font-size:13px;font-weight:600}
.tab.active{background:var(--s);border-color:var(--cy);color:var(--cy)}
.tab-content{display:none}
.tab-content.active{display:block}
.step-indicator{display:flex;justify-content:space-between;margin:20px 0;position:relative}
.step-indicator:before{content:'';position:absolute;top:15px;left:0;right:0;height:2px;background:rgba(30,41,59,.5);z-index:1}
.step{display:flex;flex-direction:column;align-items:center;position:relative;z-index:2}
.step-circle{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;background:var(--bg);border:2px solid rgba(30,41,59,.5);margin-bottom:5px}
.step.active .step-circle{background:var(--cy);border-color:var(--cy);color:var(--bg)}
.step.completed .step-circle{background:var(--gn);border-color:var(--gn);color:var(--bg)}
.step-label{font-size:11px;color:var(--t2)}
.step.active .step-label{color:var(--tx)}
@media(max-width:1200px){.g4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:768px){.g4,.g3,.g2{grid-template-columns:1fr}}
</style>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
</head><body>
<div class="hd"><span>☁️</span> Cloud Account Factory</div>
<div class="g4">
<div class="cd">
<h3>Total Accounts</h3>
<div class="sv" style="color:var(--cy)" id="kpiTotal">0</div>
<div style="font-size:12px;color:var(--t2)">cloud accounts created</div>
</div>
<div class="cd">
<h3>Active Today</h3>
<div class="sv" style="color:var(--gn)" id="kpiActive">0</div>
<div style="font-size:12px;color:var(--t2)">accounts created today</div>
</div>
<div class="cd">
<h3>Success Rate</h3>
<div class="sv" style="color:var(--or)" id="kpiSuccess">0%</div>
<div class="bar"><div id="successBar" style="width:0%;background:var(--or)"></div></div>
</div>
<div class="cd">
<h3>Brain Launched</h3>
<div class="sv" style="color:var(--pu)" id="kpiBrain">0</div>
<div style="font-size:12px;color:var(--t2)">automated workflows</div>
</div>
</div>
<div class="tabs">
<div class="tab active" onclick="switchTab(1)">🚀 Brain Automation</div>
<div class="tab" onclick="switchTab(2)">👤 Manual Creation</div>
<div class="tab" onclick="switchTab(3)">📋 Account Inventory</div>
<div class="tab" onclick="switchTab(4)">⚙️ Configuration</div>
</div>
<div class="tab-content active" id="tab1">
<div class="cd">
<h3>🚀 Brain-Powered Account Creation</h3>
<div class="g2" style="margin-bottom:20px">
<div class="input-group">
<label>🎯 Target Platform</label>
<select id="targetPlatform">
<option value="office365">Office 365 (Microsoft)</option>
<option value="gmail">Gmail / Google Workspace</option>
<option value="cloudflare">Cloudflare</option>
<option value="freedns">FreeDNS</option>
<option value="scaleway">Scaleway</option>
<option value="aws">AWS (Amazon)</option>
<option value="digitalocean">DigitalOcean</option>
<option value="sendgrid">SendGrid</option>
<option value="mailgun">Mailgun</option>
<option value="mailchimp">Mailchimp</option>
</select>
</div>
<div class="input-group">
<label>🔢 Quantity to Create</label>
<select id="quantity">
<option value="1">1 account</option>
<option value="5" selected>5 accounts</option>
<option value="10">10 accounts</option>
<option value="25">25 accounts</option>
<option value="50">50 accounts</option>
<option value="100">100 accounts</option>
</select>
</div>
</div>
<h4 style="margin:20px 0 15px 0">🔗 Resource Linking</h4>
<div class="step-indicator">
<div class="step active" id="step1">
<div class="step-circle">1</div>
<div class="step-label">Persona</div>
</div>
<div class="step" id="step2">
<div class="step-circle">2</div>
<div class="step-label">Temp Email</div>
</div>
<div class="step" id="step3">
<div class="step-circle">3</div>
<div class="step-label">CVC Card</div>
</div>
<div class="step" id="step4">
<div class="step-circle">4</div>
<div class="step-label">Cloud Account</div>
</div>
</div>
<div class="g4" style="margin-top:25px">
<div class="input-group">
<label>👤 Persona Source</label>
<select id="personaSource">
<option value="auto">Auto-generate new personas</option>
<option value="existing">Use existing personas</option>
<option value="scraped">Use scraped leads</option>
<option value="custom">Custom personas</option>
</select>
</div>
<div class="input-group">
<label>📧 Temp Email Provider</label>
<select id="emailProvider">
<option value="tempmail">Temp-Mail.org</option>
<option value="guerrilla">Guerrilla Mail</option>
<option value="10minutemail">10MinuteMail</option>
<option value="yopmail">YopMail</option>
<option value="maildrop">MailDrop</option>
<option value="tempmailo">TempMailo</option>
</select>
</div>
<div class="input-group">
<label>💳 CVC Source</label>
<select id="cvcSource">
<option value="auto">Auto-generate cards</option>
<option value="vault">Use from CVC Vault</option>
<option value="bin">Generate from BIN</option>
</select>
</div>
<div class="input-group">
<label>🌍 Geo Location</label>
<select id="geoLocation">
<option value="auto">Auto-match platform</option>
<option value="US">United States</option>
<option value="DE">Germany</option>
<option value="FR">France</option>
<option value="UK">United Kingdom</option>
<option value="NL">Netherlands</option>
</select>
</div>
</div>
<div class="input-group" style="margin-top:20px">
<label>🧠 Brain Configuration</label>
<div class="checkbox-group">
<div class="checkbox-item"><input type="checkbox" id="brain_rotateip" checked><label for="brain_rotateip">Rotate IP per account</label></div>
<div class="checkbox-item"><input type="checkbox" id="brain_useproxy" checked><label for="brain_useproxy">Use residential proxies</label></div>
<div class="checkbox-item"><input type="checkbox" id="brain_antidetect"><label for="brain_antidetect">Anti-detect browser</label></div>
<div class="checkbox-item"><input type="checkbox" id="brain_verifyphone"><label for="brain_verifyphone">Auto-verify phone</label></div>
<div class="checkbox-item"><input type="checkbox" id="brain_warmup" checked><label for="brain_warmup">Auto-warmup accounts</label></div>
<div class="checkbox-item"><input type="checkbox" id="brain_healthcheck"><label for="brain_healthcheck">Health check after creation</label></div>
</div>
</div>
<div class="act" style="margin-top:25px">
<button class="btn btn-gn" onclick="launchBrain()" id="launchBtn">🚀 Launch Brain Automation</button>
<button class="btn btn-cy" onclick="previewBrain()">👁️ Preview Workflow</button>
<button class="btn btn-rd" onclick="stopBrain()">⏹️ Stop Brain</button>
</div>
<div id="brainStatus" style="margin-top:20px;display:none">
<h4>🧠 Brain Execution Status</h4>
<div style="display:flex;align-items:center;gap:10px;margin:10px 0">
<div class="bar" style="flex:1"><div id="brainProgress" style="width:0%;background:var(--cy)"></div></div>
<span id="brainProgressText" style="font-family:'JetBrains Mono'">0%</span>
</div>
<div id="brainMessage" style="font-size:12px;color:var(--t2)">Initializing Brain...</div>
<div class="g4" style="margin-top:15px">
<div><span style="color:var(--t2)">Accounts Created:</span> <span id="brainCreated">0</span></div>
<div><span style="color:var(--t2)">Accounts Failed:</span> <span id="brainFailed">0</span></div>
<div><span style="color:var(--t2)">Current Step:</span> <span id="brainStep">-</span></div>
<div><span style="color:var(--t2)">Time Elapsed:</span> <span id="brainTime">0s</span></div>
</div>
</div>
</div>
</div>
<div class="tab-content" id="tab2">
<div class="cd">
<h3>👤 Manual Account Creation</h3>
<div class="g2" style="margin-bottom:20px">
<div class="input-group">
<label>👤 Persona Details</label>
<div style="display:flex;gap:10px">
<input type="text" id="firstName" placeholder="First Name" style="flex:1">
<input type="text" id="lastName" placeholder="Last Name" style="flex:1">
</div>
</div>
<div class="input-group">
<label>📅 Date of Birth</label>
<input type="date" id="dob">
</div>
</div>
<div class="g2" style="margin-bottom:20px">
<div class="input-group">
<label>📧 Email Address</label>
<div style="display:flex;gap:10px">
<input type="text" id="emailLocal" placeholder="username" style="flex:1">
<select id="emailDomain" style="width:150px">
<option value="@gmail.com">@gmail.com</option>
<option value="@outlook.com">@outlook.com</option>
<option value="@yahoo.com">@yahoo.com</option>
<option value="@protonmail.com">@protonmail.com</option>
<option value="@tutanota.com">@tutanota.com</option>
</select>
</div>
</div>
<div class="input-group">
<label>🔑 Password</label>
<div style="display:flex;gap:10px">
<input type="text" id="password" placeholder="Password" style="flex:1">
<button class="btn" style="padding:8px 12px" onclick="generatePassword()">Generate</button>
</div>
</div>
</div>
<div class="g2" style="margin-bottom:20px">
<div class="input-group">
<label>💳 CVC Details</label>
<div style="display:flex;gap:10px">
<input type="text" id="cardNumber" placeholder="Card Number" style="flex:2">
<input type="text" id="cardExpiry" placeholder="MM/YY" style="width:80px">
<input type="text" id="cardCVC" placeholder="CVC" style="width:60px">
</div>
</div>
<div class="input-group">
<label>📱 Phone Number</label>
<div style="display:flex;gap:10px">
<select id="phoneCountry" style="width:100px">
<option value="+1">USA +1</option>
<option value="+49">DE +49</option>
<option value="+33">FR +33</option>
<option value="+44">UK +44</option>
<option value="+31">NL +31</option>
</select>
<input type="text" id="phoneNumber" placeholder="Phone Number" style="flex:1">
</div>
</div>
</div>
<div class="input-group">
<label>☁️ Target Cloud Platform</label>
<select id="manualPlatform">
<option value="office365">Office 365</option>
<option value="gmail">Gmail</option>
<option value="cloudflare">Cloudflare</option>
<option value="aws">AWS</option>
<option value="digitalocean">DigitalOcean</option>
<option value="sendgrid">SendGrid</option>
</select>
</div>
<div class="act" style="margin-top:25px">
<button class="btn btn-gn" onclick="createManualAccount()">✅ Create Account</button>
<button class="btn btn-cy" onclick="fillRandom()">🎲 Fill Random Data</button>
<button class="btn btn-rd" onclick="clearManualForm()">🗑️ Clear Form</button>
</div>
</div>
</div>
<div class="tab-content" id="tab3">
<div class="cd">
<h3>📋 Cloud Account Inventory</h3>
<div class="act">
<select id="inventoryPlatform" style="padding:8px 12px;background:var(--bg);border:1px solid rgba(30,41,59,.5);border-radius:6px;color:var(--tx);font-family:'JetBrains Mono',monospace">
<option value="">All Platforms</option>
<option value="office365">Office 365</option>
<option value="gmail">Gmail</option>
<option value="cloudflare">Cloudflare</option>
<option value="aws">AWS</option>
<option value="digitalocean">DigitalOcean</option>
<option value="sendgrid">SendGrid</option>
<option value="mailgun">Mailgun</option>
</select>
<select id="inventoryStatus" style="padding:8px 12px;background:var(--bg);border:1px solid rgba(30,41,59,.5);border-radius:6px;color:var(--tx);font-family:'JetBrains Mono',monospace">
<option value="">All Status</option>
<option value="active">Active</option>
<option value="warmup">Warmup</option>
<option value="suspended">Suspended</option>
<option value="new">New</option>
</select>
<button class="btn btn-cy" onclick="loadInventory()">🔄 Refresh</button>
<button class="btn btn-gn" onclick="exportInventory()">📥 Export</button>
</div>
<table>
<thead><tr><th>Email</th><th>Platform</th><th>Status</th><th>Persona</th><th>CVC</th><th>Created</th><th>Actions</th></tr></thead>
<tbody id="inventoryTable">
<tr><td colspan="7" style="text-align:center;padding:40px;color:var(--t2)">Loading inventory...</td></tr>
</tbody>
</table>
</div>
</div>
<div class="tab-content" id="tab4">
<div class="cd">
<h3>⚙️ Factory Configuration</h3>
<div class="g2" style="margin-bottom:20px">
<div class="input-group">
<label>🤖 Brain API Endpoint</label>
<input type="text" id="brainEndpoint" value="http://localhost:5890/api/brain-automation.php">
</div>
<div class="input-group">
<label>🔗 Persona API</label>
<input type="text" id="personaEndpoint" value="/api/mail-personas.php">
</div>
</div>
<div class="g2" style="margin-bottom:20px">
<div class="input-group">
<label>📧 Temp Email API</label>
<input type="text" id="tempEmailEndpoint" value="/api/temp-email.php">
</div>
<div class="input-group">
<label>💳 CVC Vault API</label>
<input type="text" id="cvcEndpoint" value="/api/cvc-vault.php">
</div>
</div>
<div class="input-group">
<label>⚡ Proxies Configuration</label>
<textarea id="proxiesConfig" rows="3" placeholder="user:pass@ip:port\nuser2:pass2@ip2:port2"></textarea>
</div>
<div class="input-group">
<label>🛡️ Security Settings</label>
<div class="checkbox-group">
<div class="checkbox-item"><input type="checkbox" id="sec_captcha" checked><label for="sec_captcha">Auto-solve captcha</label></div>
<div class="checkbox-item"><input type="checkbox" id="sec_2captcha"><label for="sec_2captcha">Use 2Captcha</label></div>
<div class="checkbox-item"><input type="checkbox" id="sec_fingerprint" checked><label for="sec_fingerprint">Randomize fingerprints</label></div>
<div class="checkbox-item"><input type="checkbox" id="sec_delay" checked><label for="sec_delay">Random delays</label></div>
<div class="checkbox-item"><input type="checkbox" id="sec_retry" checked><label for="sec_retry">Auto-retry failed</label></div>
</div>
</div>
<div class="act" style="margin-top:25px">
<button class="btn btn-gn" onclick="saveConfig()">💾 Save Configuration</button>
<button class="btn btn-cy" onclick="testConnections()">🔗 Test Connections</button>
<button class="btn btn-rd" onclick="resetConfig()">🔄 Reset to Default</button>
</div>
</div>
</div>
<div class="cd" style="margin-top:20px">
<h3>📊 Factory Activity Log</h3>
<div class="log" id="factoryLog">
<div style="color:var(--t2)">Factory ready. Waiting for commands...</div>
</div>
</div>
<script>
const API = '/api/cloud-factory.php';
let brainInterval = null;
let brainStartTime = null;
async function loadStats() {
try {
const r = await fetch(API + '?action=stats');
const d = await r.json();
if(d.status === 'success' && d.data) {
const s = d.data;
document.getElementById('kpiTotal').textContent = (s.total_accounts || 0).toLocaleString();
document.getElementById('kpiActive').textContent = s.created_today || 0;
document.getElementById('kpiSuccess').textContent = (s.success_rate || 0) + '%';
document.getElementById('kpiBrain').textContent = s.brain_launches || 0;
document.getElementById('successBar').style.width = (s.success_rate || 0) + '%';
document.getElementById('successBar').style.background =
(s.success_rate >= 90) ? 'var(--gn)' : (s.success_rate >= 70) ? 'var(--or)' : 'var(--rd)';
}
} catch(e) { console.error('Stats error:', e); }
}
async function launchBrain() {
const platform = document.getElementById('targetPlatform').value;
const quantity = parseInt(document.getElementById('quantity').value);
const config = {
action: 'brain_launch',
platform: platform,
quantity: quantity,
persona_source: document.getElementById('personaSource').value,
email_provider: document.getElementById('emailProvider').value,
cvc_source: document.getElementById('cvcSource').value,
geo_location: document.getElementById('geoLocation').value,
options: {
rotate_ip: document.getElementById('brain_rotateip').checked,
use_proxy: document.getElementById('brain_useproxy').checked,
anti_detect: document.getElementById('brain_antidetect').checked,
verify_phone: document.getElementById('brain_verifyphone').checked,
warmup: document.getElementById('brain_warmup').checked,
health_check: document.getElementById('brain_healthcheck').checked
}
};
const btn = document.getElementById('launchBtn');
btn.disabled = true;
btn.innerHTML = '⏳ Launching...';
// Show status panel
document.getElementById('brainStatus').style.display = 'block';
document.getElementById('brainProgress').style.width = '5%';
document.getElementById('brainProgressText').textContent = '5%';
document.getElementById('brainMessage').textContent = 'Initializing brain workflow...';
document.getElementById('brainCreated').textContent = '0';
document.getElementById('brainFailed').textContent = '0';
document.getElementById('brainStep').textContent = 'Initializing';
document.getElementById('brainTime').textContent = '0s';
// Reset steps
for(let i = 1; i <= 4; i++) {
document.getElementById('step' + i).className = 'step';
}
document.getElementById('step1').className = 'step active';
brainStartTime = Date.now();
try {
const r = await fetch(API, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(config)
});
const d = await r.json();
if(d.status === 'success') {
const brainId = d.brain_id;
document.getElementById('brainMessage').textContent = `Brain launched! ID: ${brainId}`;
document.getElementById('brainProgress').style.width = '10%';
document.getElementById('brainProgressText').textContent = '10%';
// Start polling brain progress
brainInterval = setInterval(() => pollBrainProgress(brainId), 2000);
// Update log
logFactory(`🧠 Brain launched for ${quantity} ${platform} accounts`);
} else {
alert(`❌ Failed: ${d.message || 'Unknown error'}`);
resetBrainUI();
}
} catch(e) {
alert(`❌ Error: ${e.message}`);
resetBrainUI();
} finally {
btn.disabled = false;
btn.innerHTML = '🚀 Launch Brain Automation';
}
}
async function pollBrainProgress(brainId) {
try {
const r = await fetch(API + '?action=brain_progress&brain_id=' + brainId);
const d = await r.json();
if(d.status === 'success' && d.data) {
const p = d.data;
const progress = p.progress || 0;
// Update progress bar
document.getElementById('brainProgress').style.width = progress + '%';
document.getElementById('brainProgressText').textContent = progress + '%';
// Update stats
document.getElementById('brainCreated').textContent = p.accounts_created || 0;
document.getElementById('brainFailed').textContent = p.accounts_failed || 0;
document.getElementById('brainStep').textContent = p.current_step || 'Processing';
document.getElementById('brainMessage').textContent = p.message || 'Running...';
// Update time elapsed
const elapsed = Math.floor((Date.now() - brainStartTime) / 1000);
document.getElementById('brainTime').textContent = elapsed + 's';
// Update steps
const steps = ['persona', 'temp_email', 'cvc', 'cloud_account'];
steps.forEach((step, index) => {
const stepNum = index + 1;
const stepDiv = document.getElementById('step' + stepNum);
if(p.step_completed && p.step_completed.includes(step)) {
stepDiv.className = 'step completed';
} else if(p.current_step === step) {
stepDiv.className = 'step active';
}
});
// Update log
if(p.logs) {
p.logs.forEach(log => logFactory(log.message, log.level));
}
// If brain completed or failed
if(p.status === 'completed' || p.status === 'failed') {
clearInterval(brainInterval);
// Final message
const msg = p.status === 'completed' ?
`✅ Brain completed! Created ${p.accounts_created} accounts` :
`❌ Brain failed! Created ${p.accounts_created} accounts, failed ${p.accounts_failed}`;
document.getElementById('brainMessage').textContent = msg;
document.getElementById('brainProgress').style.width = '100%';
document.getElementById('brainProgressText').textContent = '100%';
// Mark all steps as completed
for(let i = 1; i <= 4; i++) {
document.getElementById('step' + i).className = 'step completed';
}
logFactory(msg);
// Refresh stats and inventory
loadStats();
loadInventory();
}
}
} catch(e) {
console.error('Brain progress error:', e);
}
}
function stopBrain() {
if(!confirm('Stop the running brain automation?')) return;
if(brainInterval) {
clearInterval(brainInterval);
brainInterval = null;
}
document.getElementById('brainMessage').textContent = '❌ Brain stopped by user';
document.getElementById('brainProgress').style.background = 'var(--rd)';
logFactory('⏹️ Brain automation stopped by user');
}
function previewBrain() {
const platform = document.getElementById('targetPlatform').value;
const quantity = parseInt(document.getElementById('quantity').value);
let preview = '🧠 Brain Workflow Preview:\n\n';
preview += `Platform: ${platform}\n`;
preview += `Quantity: ${quantity} accounts\n`;
preview += `Persona Source: ${document.getElementById('personaSource').value}\n`;
preview += `Email Provider: ${document.getElementById('emailProvider').value}\n`;
preview += `CVC Source: ${document.getElementById('cvcSource').value}\n`;
preview += `Geo Location: ${document.getElementById('geoLocation').value}\n\n`;
preview += 'Steps:\n';
preview += '1. Generate/Acquire Persona\n';
preview += '2. Create Temp Email\n';
preview += '3. Generate/Acquire CVC Card\n';
preview += '4. Create Cloud Account\n';
preview += '5. Verify & Warmup\n';
alert(preview);
}
async function loadInventory() {
const platform = document.getElementById('inventoryPlatform').value;
const status = document.getElementById('inventoryStatus').value;
try {
let url = API + '?action=inventory';
if(platform) url += '&platform=' + encodeURIComponent(platform);
if(status) url += '&status=' + encodeURIComponent(status);
const r = await fetch(url);
const d = await r.json();
const accounts = d.data || [];
const tbody = document.getElementById('inventoryTable');
tbody.innerHTML = '';
if(accounts.length === 0) {
tbody.innerHTML = '<tr><td colspan="7" style="text-align:center;padding:40px;color:var(--t2)">No accounts found</td></tr>';
} else {
accounts.forEach(acc => {
const statusBadge = acc.status === 'active' ? 'badge gn' :
acc.status === 'warmup' ? 'badge or' :
acc.status === 'suspended' ? 'badge rd' : 'badge cy';
const statusText = acc.status ? acc.status.charAt(0).toUpperCase() + acc.status.slice(1) : 'Unknown';
const platformBadge = acc.platform === 'office365' ? 'badge cy' :
acc.platform === 'gmail' ? 'badge rd' :
acc.platform === 'cloudflare' ? 'badge or' : 'badge pu';
tbody.innerHTML += `
<tr>
<td><span style="font-family:JetBrains Mono">${acc.email || '-'}</span></td>
<td><span class="${platformBadge}">${acc.platform || '-'}</span></td>
<td><span class="${statusBadge}">${statusText}</span></td>
<td>${acc.persona_name || '-'}</td>
<td>${acc.cvc_last4 ? `****${acc.cvc_last4}` : '-'}</td>
<td>${acc.created_at ? new Date(acc.created_at).toLocaleDateString() : '-'}</td>
<td>
<button class="btn" style="padding:4px 8px;font-size:11px" onclick="checkAccount('${acc.id}')">Check</button>
<button class="btn" style="padding:4px 8px;font-size:11px" onclick="deleteAccount('${acc.id}')">Delete</button>
</td>
</tr>
`;
});
}
} catch(e) {
console.error('Inventory error:', e);
document.getElementById('inventoryTable').innerHTML =
'<tr><td colspan="7" style="text-align:center;padding:40px;color:var(--rd)">Error loading inventory</td></tr>';
}
}
async function createManualAccount() {
const firstName = document.getElementById('firstName').value.trim();
const lastName = document.getElementById('lastName').value.trim();
const email = document.getElementById('emailLocal').value.trim() + document.getElementById('emailDomain').value;
const password = document.getElementById('password').value.trim();
const platform = document.getElementById('manualPlatform').value;
if(!firstName || !lastName || !email || !password) {
alert('Please fill all required fields');
return;
}
const config = {
action: 'create_manual',
first_name: firstName,
last_name: lastName,
email: email,
password: password,
platform: platform,
dob: document.getElementById('dob').value,
card_number: document.getElementById('cardNumber').value.trim(),
card_expiry: document.getElementById('cardExpiry').value.trim(),
card_cvc: document.getElementById('cardCVC').value.trim(),
phone: document.getElementById('phoneCountry').value + document.getElementById('phoneNumber').value.trim()
};
try {
const r = await fetch(API, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(config)
});
const d = await r.json();
if(d.status === 'success') {
alert(`✅ Account created successfully!\nEmail: ${email}\nPlatform: ${platform}`);
clearManualForm();
loadStats();
loadInventory();
logFactory(`✅ Manual account created: ${email} on ${platform}`);
} else {
alert(`❌ Failed: ${d.message || 'Unknown error'}`);
logFactory(`❌ Failed to create account: ${d.message}`, 'error');
}
} catch(e) {
alert(`❌ Error: ${e.message}`);
logFactory(`❌ Error creating account: ${e.message}`, 'error');
}
}
function generatePassword() {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*';
let password = '';
for(let i = 0; i < 12; i++) {
password += chars.charAt(Math.floor(Math.random() * chars.length));
}
document.getElementById('password').value = password;
}
function fillRandom() {
// Random first names
const firstNames = ['John', 'Emma', 'Michael', 'Sarah', 'David', 'Lisa', 'Robert', 'Maria', 'William', 'Anna'];
// Random last names
const lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez'];
document.getElementById('firstName').value = firstNames[Math.floor(Math.random() * firstNames.length)];
document.getElementById('lastName').value = lastNames[Math.floor(Math.random() * lastNames.length)];
// Random username
const randomNum = Math.floor(Math.random() * 10000);
document.getElementById('emailLocal').value =
document.getElementById('firstName').value.toLowerCase() +
document.getElementById('lastName').value.toLowerCase() + randomNum;
// Random date of birth (18-65 years old)
const today = new Date();
const minAge = 18 * 365 * 24 * 60 * 60 * 1000;
const maxAge = 65 * 365 * 24 * 60 * 60 * 1000;
const randomAge = minAge + Math.random() * (maxAge - minAge);
const randomDob = new Date(today.getTime() - randomAge);
document.getElementById('dob').value = randomDob.toISOString().split('T')[0];
// Generate password
generatePassword();
// Random card number (test BIN)
const bins = ['411111', '422222', '511111', '555555'];
const bin = bins[Math.floor(Math.random() * bins.length)];
let cardNum = bin;
for(let i = 0; i < 10; i++) {
cardNum += Math.floor(Math.random() * 10);
}
document.getElementById('cardNumber').value = cardNum;
// Random expiry (next 1-4 years)
const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0');
const year = new Date().getFullYear() + Math.floor(Math.random() * 4) + 1;
document.getElementById('cardExpiry').value = month + '/' + String(year).slice(-2);
// Random CVC
document.getElementById('cardCVC').value = String(Math.floor(Math.random() * 900) + 100);
// Random phone
document.getElementById('phoneNumber').value =
String(Math.floor(Math.random() * 900000000) + 100000000);
}
function clearManualForm() {
document.getElementById('firstName').value = '';
document.getElementById('lastName').value = '';
document.getElementById('emailLocal').value = '';
document.getElementById('dob').value = '';
document.getElementById('password').value = '';
document.getElementById('cardNumber').value = '';
document.getElementById('cardExpiry').value = '';
document.getElementById('cardCVC').value = '';
document.getElementById('phoneNumber').value = '';
}
async function checkAccount(accountId) {
try {
const r = await fetch(API + '?action=check&account_id=' + accountId);
const d = await r.json();
if(d.status === 'success') {
alert(`✅ Account Status:\n${JSON.stringify(d.data, null, 2)}`);
logFactory(`✅ Checked account ${accountId}: ${d.data.status}`);
} else {
alert(`❌ Failed: ${d.message}`);
logFactory(`❌ Failed to check account: ${d.message}`, 'error');
}
} catch(e) {
alert(`❌ Error: ${e.message}`);
logFactory(`❌ Error checking account: ${e.message}`, 'error');
}
}
async function deleteAccount(accountId) {
if(!confirm('Delete this cloud account? This cannot be undone.')) return;
try {
const r = await fetch(API, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'delete', account_id: accountId})
});
const d = await r.json();
if(d.status === 'success') {
alert('✅ Account deleted');
loadStats();
loadInventory();
logFactory(`🗑️ Deleted account ${accountId}`);
} else {
alert(`❌ Failed: ${d.message}`);
}
} catch(e) {
alert(`❌ Error: ${e.message}`);
}
}
async function exportInventory() {
try {
const r = await fetch(API + '?action=export');
if(r.ok) {
const blob = await r.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `cloud-accounts-${new Date().toISOString().split('T')[0]}.csv`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
} else {
alert('❌ Failed to export inventory');
}
} catch(e) {
alert(`❌ Error: ${e.message}`);
}
}
function logFactory(message, level = 'info') {
const logDiv = document.getElementById('factoryLog');
const time = new Date().toLocaleTimeString();
const color = level === 'error' ? 'var(--rd)' :
level === 'warning' ? 'var(--or)' :
level === 'success' ? 'var(--gn)' : 'var(--t2)';
logDiv.innerHTML = `<div style="color:${color}">[${time}] ${message}</div>` + logDiv.innerHTML;
// Keep only last 50 lines
const lines = logDiv.innerHTML.split('</div>');
if(lines.length > 50) {
logDiv.innerHTML = lines.slice(0, 50).join('</div>') + '</div>';
}
}
function resetBrainUI() {
document.getElementById('brainStatus').style.display = 'none';
document.getElementById('brainProgress').style.width = '0%';
document.getElementById('brainProgressText').textContent = '0%';
for(let i = 1; i <= 4; i++) {
document.getElementById('step' + i).className = 'step';
}
}
function switchTab(tabNum) {
// Update tabs
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
document.querySelector('.tab:nth-child(' + tabNum + ')').classList.add('active');
document.getElementById('tab' + tabNum).classList.add('active');
// Load data for tab 3
if(tabNum === 3) {
loadInventory();
}
}
// Initial load
loadStats();
setInterval(loadStats, 30000);
// Load inventory on tab 3
document.getElementById('inventoryPlatform').addEventListener('change', loadInventory);
document.getElementById('inventoryStatus').addEventListener('change', loadInventory);
</script>
</body></html>