fc / stealth-pacing-controller.js
Althnayi's picture
Upload 56 files
cca0cf3 verified
Raw
History Blame Contribute Delete
66.3 kB
/**
* @fileoverview Stealth Shield Matrix, Anti-Ban Protection UI & Cooldown Pacing Controller
* @module controllers/stealth-pacing-controller
* @description وحدة التحكم في دروع التخفي، محاكاة منحنيات الماوس، فترات التبريد الحرارية، واختبار السلوك الحي.
*/
(global => {
'use strict';
const SHIELD_INTEGRITY_SALT = global.FritreeAppConstants?.SECURITY_SALTS?.FB_SHIELD_SALT ||
"FritreeFacebookStealthShieldSymmetricSignatureSalt_SHA256_2026_EnterpriseSecureForce";
const DEFAULT_SHIELD_CONFIG = global.FritreeAppConstants?.DEFAULT_SHIELD_MATRIX || {
scrollStepPixels: 250, scrollTotalCycles: 4, mouseMovementCycles: 5, mouseJitterSpeed: 8, coordinateJitterRadius: 8, showVirtualCursor: true,
waScrollStepPixels: 200, waScrollTotalCycles: 3, waCoordinateJitterRadius: 6, waTypingDeletions: 3, typoRatio: 0.04,
humanScrollActive: true, simulateMouseActive: true, antiHoneypotActive: true, humanTypingActive: true,
canvasNoiseActive: true, audioContextNoiseActive: true, webRtcLeakProtectionActive: true,
zwspObfuscationActive: true, zwspObfuscationDensity: 0.25, unicodeHomoglyphActive: true, unicodeHomoglyphStrength: 0.20,
synonymParaphrasingActive: true, synonymParaphrasingStrength: 0.40, exifCleansingActive: true, pixelNoiseActive: true,
unlimitedPublishingActive: true, unlimitedMessagingActive: true, antiBotScramblerActive: true,
safeHoursSchedulerActive: true
};
/**
* مصفوفة الحقول ذات المدخلات المزدوجة (Number Input + Range Slider)
*/
const DUAL_INPUT_MAPPING = Object.freeze([
{ numId: 'im8lcqf85q', rangeId: 'r5r3nf944x', lblId: 'd2p6hdv09g', configKey: 'scrollStepPixels', suffix: ' بكسل' },
{ numId: 'xh4v4gefq8', rangeId: 'd2h9zi5d8q', lblId: 'z034ly7vrp', configKey: 'scrollTotalCycles', suffix: ' دورات' },
{ numId: 'ermiz7sdjh', rangeId: 'eohhg1ndju', lblId: 'lpmhfzu3km', configKey: 'mouseMovementCycles', suffix: ' مسارات' },
{ numId: 'zc4iigs48o', rangeId: 'qzakpnocrm', lblId: 'e4ajtz6vlv', configKey: 'mouseJitterSpeed', suffix: ' مللي ثانية' },
{ numId: 'wbf1v4khns', rangeId: 'uxum8urssm', lblId: 'y2n5vy9rut', configKey: 'coordinateJitterRadius', suffix: ' بكسل' },
{ numId: 'te2outp1tr', rangeId: 'z0cclfkndb', lblId: 'zbyylei7gx', configKey: 'waScrollStepPixels', suffix: ' بكسل' },
{ numId: 'yyju5075b0', rangeId: 'evjpj9u9hy', lblId: 'nm27sf3k3c', configKey: 'waScrollTotalCycles', suffix: ' دورات' },
{ numId: 'jyxpicjb18', rangeId: 'nq4w58kmh8', lblId: 'dnainkcka3', configKey: 'waCoordinateJitterRadius', suffix: ' بكسل' },
{ numId: 'w2zbm8bpbs', rangeId: 'n3w3m5tvbo', lblId: 'tqmedoe2pk', configKey: 'waTypingDeletions', suffix: ' دورات' },
{ numId: 'b1urxuziof', rangeId: 'jiejaczaq6', lblId: 'tny1nnj5ku', configKey: 'typoRatio', suffix: ' %' },
{ numId: 'dnevunqmlt', rangeId: 'juzm8y7nqm', lblId: 'xakyxiwhnt', configKey: 'zwspObfuscationDensity', suffix: ' %' },
{ numId: 'dmkenc7vj2', rangeId: 'mok38uk2ki', lblId: 'upisaz9z2w', configKey: 'unicodeHomoglyphStrength', suffix: ' %' },
{ numId: 'bxpbhgie4d', rangeId: 'j2p9auo70g', lblId: 'a7zbitm5o2', configKey: 'synonymParaphrasingStrength', suffix: ' %' }
]);
/**
* بناء نافذة إعدادات فترات الانتظار والتبريد ومحاكي الأمان (#b5p47f68ia)
*/
function appendPacingModalLayout() {
if (document.getElementById('b5p47f68ia')) return;
const modal = document.createElement('div');
modal.className = 'cpzxome5dd';
modal.id = 'b5p47f68ia';
modal.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(8px); display: none; align-items: center; justify-content: center; z-index: var(--z-modal-backdrop); background-color: rgba(15, 23, 42, 0.65); direction: rtl; text-align: right; box-sizing: border-box;';
modal.innerHTML = `
<div class="s4yvtq9394" style="max-width: min(820px, 94vw); max-height: min(90vh, 850px); border-radius: var(--radius-xl); background: var(--bg-card); border: 1px solid var(--border); box-shadow: var(--shadow-modal);">
<div class="x8pdlyq70a" style="border-bottom: 1px solid var(--border); padding: 14px 20px; display: flex; justify-content: space-between; align-items: center; background: var(--bg-subtle);">
<div class="tooau3ykdi" style="font-weight: 800; font-size: 14px; display: flex; align-items: center; gap: 8px;">
<i class="fa-solid fa-stopwatch" style="color: var(--primary);"></i>
<span>إعدادات فترات التبريد والانتظار ومحاكي الأمان</span>
</div>
<button class="bcuz086hu4" id="close-pacing-modal-btn">&times;</button>
</div>
<div class="zn6t0dl6ke" style="padding: clamp(14px, 1.5vw, 22px); max-height: 78vh; overflow-y: auto;">
<!-- تبويبات فترات الانتظار -->
<div class="pfe6btieb6" style="margin-bottom: 16px;">
<div class="n9cqm6ze7d qo2hmc0xkq vn5qn7dmpk" id="h1w7d0p7nn" data-tab-target="mcuawm6x53">
<i class="fa-brands fa-facebook"></i> <span>تبريد فيسبوك</span>
</div>
<div class="n9cqm6ze7d qo2hmc0xkq" id="bwcd4lytz0" data-tab-target="xgbsksw8rt">
<i class="fa-brands fa-whatsapp"></i> <span>تبريد واتساب</span>
</div>
<div class="n9cqm6ze7d qo2hmc0xkq" id="tab-pacing-sim" data-tab-target="sim-pacing-tab">
<i class="fa-solid fa-chart-line"></i> <span>محاكي وقت وأمان الحملة</span>
</div>
</div>
<!-- 1. إعدادات تبريد فيسبوك -->
<div id="mcuawm6x53" class="oaw2p63ner" style="display: block;">
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: clamp(12px, 1.4vw, 16px); margin-bottom: 12px; background: var(--bg-subtle);">
<div class="d0uttwsjz2" style="margin-bottom: 10px;">
<label style="font-weight: 700; font-size: 11.5px;"><i class="fa-solid fa-sliders"></i> <span>نمط التبريد والانتظار بين المجموعات:</span></label>
<select id="l37axh2l1n" class="xy26ymifmf" style="padding: 7px 10px; font-weight: 700;">
<option value="continuous" selected>فترات تبريد حرارية متدرجة (عشوائي متقدم - الأكثر أماناً)</option>
<option value="random">فترات انتظار عشوائية بين حد أدنى وأقصى</option>
<option value="fixed">فترة انتظار ثابتة ومحددة</option>
<option value="burst">دفعات سريعة مع فترات راحة طويلة</option>
</select>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; margin-bottom: 10px;">
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 10.5px;"><i class="fa-solid fa-hourglass-start"></i> <span>أقل فترة (ثانية):</span></label>
<input type="number" id="fcdd19jd0b" class="xy26ymifmf" value="45" min="5" max="600" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 10.5px;"><i class="fa-solid fa-hourglass-end"></i> <span>أقصى فترة (ثانية):</span></label>
<input type="number" id="nypjlieshn" class="xy26ymifmf" value="120" min="10" max="1200" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 10.5px;"><i class="fa-solid fa-lock"></i> <span>الانتظار الثابت (ث):</span></label>
<input type="number" id="nmngttm14l" class="xy26ymifmf" value="60" min="5" max="600" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 6px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 8px;">
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">استراحة بعد X منشور:</label>
<input type="number" id="er9a6wk592" class="xy26ymifmf" value="5" min="2" max="50" style="padding: 4px; text-align: center;">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">مدة الاستراحة (ث):</label>
<input type="number" id="f85bxwyms9" class="xy26ymifmf" value="300" min="30" max="1800" style="padding: 4px; text-align: center;">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">راحة كبرى بعد X:</label>
<input type="number" id="oifuahm7ox" class="xy26ymifmf" value="15" min="5" max="100" style="padding: 4px; text-align: center;">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">مدة الراحة الكبرى (ث):</label>
<input type="number" id="l1mxkqhsts" class="xy26ymifmf" value="900" min="60" max="3600" style="padding: 4px; text-align: center;">
</div>
</div>
</div>
</div>
<!-- 2. إعدادات تبريد واتساب -->
<div id="xgbsksw8rt" class="oaw2p63ner" style="display: none;">
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: clamp(12px, 1.4vw, 16px); margin-bottom: 12px; background: var(--bg-subtle);">
<div class="d0uttwsjz2" style="margin-bottom: 10px;">
<label style="font-weight: 700; font-size: 11.5px;"><i class="fa-solid fa-sliders"></i> <span>نمط التبريد والانتظار بين رسائل الواتساب:</span></label>
<select id="bfptsf9qwy" class="xy26ymifmf" style="padding: 7px 10px; font-weight: 700;">
<option value="continuous" selected>فترات تبريد حرارية متدرجة (عشوائي متقدم - الأكثر أماناً)</option>
<option value="random">فترات انتظار عشوائية بين حد أدنى وأقصى</option>
<option value="fixed">فترة انتظار ثابتة ومحددة</option>
<option value="burst">دفعات سريعة مع فترات راحة</option>
</select>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; margin-bottom: 10px;">
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 10.5px;"><i class="fa-solid fa-hourglass-start"></i> <span>أقل فترة (ثانية):</span></label>
<input type="number" id="u7hi952ajh" class="xy26ymifmf" value="60" min="5" max="600" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 10.5px;"><i class="fa-solid fa-hourglass-end"></i> <span>أقصى فترة (ثانية):</span></label>
<input type="number" id="zjxupa8x3b" class="xy26ymifmf" value="150" min="10" max="1200" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 10.5px;"><i class="fa-solid fa-lock"></i> <span>الانتظار الثابت (ث):</span></label>
<input type="number" id="sfoi4d52jk" class="xy26ymifmf" value="75" min="5" max="600" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 6px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 8px;">
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">استراحة بعد X رسائل:</label>
<input type="number" id="qne5lmug39" class="xy26ymifmf" value="5" min="2" max="50" style="padding: 4px; text-align: center;">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">مدة الاستراحة (ث):</label>
<input type="number" id="a7y6fdy14u" class="xy26ymifmf" value="300" min="30" max="1800" style="padding: 4px; text-align: center;">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">راحة كبرى بعد X:</label>
<input type="number" id="xpqbg0sodc" class="xy26ymifmf" value="10" min="5" max="100" style="padding: 4px; text-align: center;">
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 9.5px;">مدة الراحة الكبرى (ث):</label>
<input type="number" id="ajt7y78irf" class="xy26ymifmf" value="900" min="60" max="3600" style="padding: 4px; text-align: center;">
</div>
</div>
</div>
</div>
<!-- 3. محاكي وقت وأمان الحملة -->
<div id="sim-pacing-tab" class="oaw2p63ner" style="display: none;">
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: clamp(12px, 1.4vw, 16px); margin-bottom: 12px; background: var(--bg-subtle);">
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 10px;">
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 11px; font-weight: 700;"><i class="fa-solid fa-shapes"></i> <span>المنصة للمحاكاة:</span></label>
<select id="txcj9gg61x" class="xy26ymifmf" style="padding: 6px 8px;">
<option value="fb" selected>حملة فيسبوك (Facebook)</option>
<option value="wa">حملة واتساب (WhatsApp)</option>
</select>
</div>
<div class="d0uttwsjz2" style="margin: 0;">
<label style="font-size: 11px; font-weight: 700;"><i class="fa-solid fa-hashtag"></i> <span>عدد عمليات الإرسال:</span></label>
<input type="number" id="ebgtwww2cx" class="xy26ymifmf" value="20" min="1" max="500" style="padding: 6px; text-align: center; font-weight: 700; font-family: var(--font-code);">
</div>
</div>
<div style="display: flex; justify-content: space-between; align-items: center; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 10px 14px; margin-bottom: 10px; flex-wrap: wrap; gap: 8px;">
<div>
<div id="c1xm1ix27g" style="font-size: 12.5px; font-weight: 800; color: var(--text-main);">
<i class="fa-solid fa-stopwatch" style="color: var(--primary);"></i> <span>وقت التشغيل المتوقع: 25 دقيقة</span>
</div>
<div id="hshj1zv2hr" class="zcsc0rlnfn green" style="margin-top: 4px; font-size: 10.5px;">
<i class="fa-solid fa-circle-check"></i> <span>مستوى أمان مرتفع وممتاز</span>
</div>
</div>
<button type="button" id="dc1dg75tdv" class="itdnt14mss" style="padding: 6px 12px; font-size: 11px; font-weight: 800; min-height: 30px;">
<i class="fa-solid fa-calculator"></i> <span>إعادة الحساب</span>
</button>
</div>
</div>
</div>
<!-- زر حفظ وتطبيق الإعدادات -->
<div style="display: flex; justify-content: flex-end; gap: 8px; border-top: 1px solid var(--border); padding-top: 12px;">
<button type="button" id="save-pacing-btn" class="itdnt14mss" style="padding: 8px 20px; font-size: 12px; font-weight: 800;">
<i class="fa-solid fa-floppy-disk"></i> <span>حفظ وتطبيق فترات التبريد</span>
</button>
</div>
</div>
</div>
`;
document.body.appendChild(modal);
document.getElementById('close-pacing-modal-btn').onclick = () => {
modal.style.display = 'none';
};
document.getElementById('save-pacing-btn').onclick = async () => {
await saveDelayIntervalSettingsFromModal();
modal.style.display = 'none';
alert('تم بنجاح حفظ وتأمين فترات الانتظار والتبريد الجديدة!');
};
}
/**
* حفظ إعدادات فترات التبريد من النافذة للتخزين المشفر
*/
async function saveDelayIntervalSettingsFromModal() {
const getNum = id => parseInt(document.getElementById(id)?.value, 10);
const getStr = id => document.getElementById(id)?.value;
const fbIntervals = {
mode: getStr('l37axh2l1n') || 'continuous',
min: getNum('fcdd19jd0b') || 45,
max: getNum('nypjlieshn') || 120,
fixed: getNum('nmngttm14l') || 60,
burstCount: getNum('er9a6wk592') || 5,
burstPause: getNum('f85bxwyms9') || 300,
longBreakCount: getNum('oifuahm7ox') || 15,
longBreakPause: getNum('l1mxkqhsts') || 900
};
const waIntervals = {
mode: getStr('bfptsf9qwy') || 'continuous',
min: getNum('u7hi952ajh') || 60,
max: getNum('zjxupa8x3b') || 150,
fixed: getNum('sfoi4d52jk') || 75,
burstCount: getNum('qne5lmug39') || 5,
burstPause: getNum('a7y6fdy14u') || 300,
longBreakCount: getNum('xpqbg0sodc') || 10,
longBreakPause: getNum('ajt7y78irf') || 900
};
if (global.FritreeStorage) {
await global.FritreeStorage.set('local_sleep_intervals_fb', fbIntervals);
await global.FritreeStorage.set('local_sleep_intervals_wa', waIntervals);
await global.FritreeStorage.set('local_sleep_intervals', { fb: fbIntervals, wa: waIntervals });
}
updateAverageCooldownCardDisplay(fbIntervals);
}
/**
* تحميل إعدادات فترات التبريد وتعبئتها في حقول النافذة
*/
async function loadDelayIntervalSettingsIntoModal() {
appendPacingModalLayout();
if (!global.FritreeStorage) return;
const fbIntervals = await global.FritreeStorage.get('local_sleep_intervals_fb', {
mode: 'continuous', min: 45, max: 120, fixed: 60, burstCount: 5, burstPause: 300, longBreakCount: 15, longBreakPause: 900
});
const waIntervals = await global.FritreeStorage.get('local_sleep_intervals_wa', {
mode: 'continuous', min: 60, max: 150, fixed: 75, burstCount: 5, burstPause: 300, longBreakCount: 10, longBreakPause: 900
});
const setVal = (id, val) => {
const el = document.getElementById(id);
if (el && val !== undefined) el.value = val;
};
setVal('l37axh2l1n', fbIntervals.mode);
setVal('fcdd19jd0b', fbIntervals.min);
setVal('nypjlieshn', fbIntervals.max);
setVal('nmngttm14l', fbIntervals.fixed);
setVal('er9a6wk592', fbIntervals.burstCount);
setVal('f85bxwyms9', fbIntervals.burstPause);
setVal('oifuahm7ox', fbIntervals.longBreakCount);
setVal('l1mxkqhsts', fbIntervals.longBreakPause);
setVal('bfptsf9qwy', waIntervals.mode);
setVal('u7hi952ajh', waIntervals.min);
setVal('zjxupa8x3b', waIntervals.max);
setVal('sfoi4d52jk', waIntervals.fixed);
setVal('qne5lmug39', waIntervals.burstCount);
setVal('a7y6fdy14u', waIntervals.burstPause);
setVal('xpqbg0sodc', waIntervals.longBreakCount);
setVal('ajt7y78irf', waIntervals.longBreakPause);
updateAverageCooldownCardDisplay(fbIntervals);
}
/**
* تحديث شارة متوسط فترة التبريد في شاشة المراقبة
*/
function updateAverageCooldownCardDisplay(intervals) {
const badge = document.getElementById('e8fmmjhyng');
if (!badge || !intervals) return;
let display = '60 ثانية';
if (intervals.mode === 'continuous' || intervals.mode === 'random') {
const avg = Math.round(((intervals.min || 45) + (intervals.max || 120)) / 2);
display = `${avg} ثانية (~${intervals.min}-${intervals.max} ث)`;
} else if (intervals.mode === 'fixed') {
display = `${intervals.fixed || 60} ثانية (ثابت)`;
} else if (intervals.mode === 'burst') {
display = `دفعة (${intervals.burstCount} عمليات)`;
}
badge.innerHTML = `<i class="fa-solid fa-gauge" style="font-size:14px; color:#6366f1;"></i> ${display}`;
}
/**
* فتح نافذة إعدادات فترات التبريد وتوجيهها للمنصة المختارة
*/
function openPacingModal(platform = 'fb') {
appendPacingModalLayout();
loadDelayIntervalSettingsIntoModal();
const modal = document.getElementById('b5p47f68ia');
if (!modal) return;
const fbTab = document.getElementById('h1w7d0p7nn');
const waTab = document.getElementById('bwcd4lytz0');
if (platform === 'wa' && waTab) {
waTab.click();
} else if (fbTab) {
fbTab.click();
}
modal.style.display = 'flex';
runDelaySimulation();
}
/**
* بناء واجهة قسم أمان الحساب ودروع التخفي (#qt3bcp0qq8)
*/
function buildSecurityPaneLayout() {
const contentArea = document.getElementById('s7ihkirolg');
if (!contentArea) return false;
const host = document.getElementById('fritree-dynamic-panes-host') || contentArea;
let pane = document.getElementById('qt3bcp0qq8');
if (pane) {
if (pane.parentElement !== host) {
host.appendChild(pane);
}
return true;
}
pane = document.createElement('section');
pane.className = 'rjiai07g77';
pane.id = 'qt3bcp0qq8';
pane.innerHTML = `
<div class="d5tp7way8h zcjbe1otmg" style="margin: 0; padding: clamp(14px, 1.8vw, 24px); border-radius: var(--radius-xl); border: 1px solid var(--border); direction: rtl; text-align: right; background: var(--bg-card); box-sizing: border-box;">
<!-- ترويسة دروع الأمان ومؤشر الجاهزية -->
<div style="display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border); padding-bottom: 14px; margin-bottom: 16px; flex-wrap: wrap; gap: 10px;">
<div>
<h2 style="font-size: clamp(15px, 1.2vw, 18px); font-weight: 900; display: flex; align-items: center; gap: 8px; margin: 0; color: var(--text-main);">
<i class="fa-solid fa-user-shield" style="color: #6366f1;"></i>
<span>مركز أمان الحساب ودروع الحماية من الحظر</span>
</h2>
<p style="font-size: 11px; color: var(--text-muted); margin-top: 4px; font-weight: 700;">
<i class="fa-solid fa-shield-halved"></i>
<span>محاكاة السلوك البشري الطبيعي وتمويه البصمة الرقمية لحماية حساباتك في فيسبوك وواتساب.</span>
</p>
</div>
<div id="bwl4zaunoo" class="zcsc0rlnfn green" style="font-size: 11.5px; padding: 5px 12px; font-weight: 800;">
<i class="fa-solid fa-shield-halved"></i> <span>مستوى حماية ممتاز وآمن تماماً</span>
</div>
</div>
<!-- شريط مؤشر كفاءة الحماية -->
<div style="background: var(--bg-subtle); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: clamp(12px, 1.4vw, 16px); margin-bottom: 16px;">
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 11.5px; font-weight: 800; margin-bottom: 6px;">
<span><i class="fa-solid fa-gauge-high" style="color: var(--primary);"></i> <span>مؤشر جاهزية دروع التخفي ومكافحة الحظر:</span></span>
<span id="security-score-pct-label" style="font-weight: 900; color: var(--success); font-family: var(--font-code);">100%</span>
</div>
<div class="s58rzsrk81" style="height: 10px;">
<div id="nzpx23e2am" class="xv12sshgcd" style="width: 100%;"></div>
</div>
<div id="remediations-box" style="margin-top: 8px; font-size: 10.5px; color: var(--text-muted); line-height: 1.5; display: none;"></div>
</div>
<!-- تبويبات إعدادات الحماية -->
<div class="pfe6btieb6" style="margin-bottom: 16px;">
<div class="n9cqm6ze7d vn5qn7dmpk" id="jtdhxfkv1j">
<i class="fa-brands fa-facebook"></i> <span>دروع فيسبوك</span>
</div>
<div class="n9cqm6ze7d" id="lftegt1t8z">
<i class="fa-brands fa-whatsapp"></i> <span>دروع واتساب</span>
</div>
<div class="n9cqm6ze7d" id="lnlkhhgfo6">
<i class="fa-solid fa-bezier-curve"></i> <span>محاكاة حركة الماوس والتصفح</span>
</div>
</div>
<!-- 1. دروع فيسبوك -->
<div id="c13az1759q" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(clamp(250px, 25vw, 1fr), 1fr)); gap: 12px; margin-bottom: 16px;">
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px; display: flex; flex-direction: column; gap: 8px; background: var(--bg-card);">
<strong style="font-size: 12.5px; display: flex; align-items: center; gap: 6px; border-bottom: 1px solid var(--border); padding-bottom: 6px; color: var(--text-main);">
<i class="fa-solid fa-fingerprint" style="color: var(--primary);"></i> <span>حماية البصمة الرقمية (Fingerprint)</span>
</strong>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="ayeuwtm17p" checked>
<span>تطهير بيانات EXIF وحقن بكسل التمويه للصور</span>
</label>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="ctinl8rsq4" checked>
<span>تشويش بصمة المتصفح (Canvas Noise)</span>
</label>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="anbc67zy1r" checked>
<span>تمويه الحروف المتجانسة (Unicode Homoglyphs)</span>
</label>
</div>
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px; display: flex; flex-direction: column; gap: 8px; background: var(--bg-card);">
<strong style="font-size: 12.5px; display: flex; align-items: center; gap: 6px; border-bottom: 1px solid var(--border); padding-bottom: 6px; color: var(--text-main);">
<i class="fa-solid fa-wand-magic-sparkles" style="color: #8b5cf6;"></i> <span>التمويه اللغوي الذكي</span>
</strong>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="ns1dmmtyz0" checked>
<span>تشويش الكلمات بالفواصل الصفرية (ZWSP)</span>
</label>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="g5ln0sgxqr" checked>
<span>إعادة الصياغة التلقائية بمعجم المترادفات</span>
</label>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="nsksvirsv9" checked>
<span>مبعثر ومشتت فلاتر البوتات (Anti-Bot Scrambler)</span>
</label>
</div>
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px; display: flex; flex-direction: column; gap: 8px; background: var(--bg-card);">
<strong style="font-size: 12.5px; display: flex; align-items: center; gap: 6px; border-bottom: 1px solid var(--border); padding-bottom: 6px; color: var(--text-main);">
<i class="fa-solid fa-shield-halved" style="color: var(--success);"></i> <span>وضع الإرسال غير المحدود</span>
</strong>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="eu4jeaso7w" checked>
<span>تفعيل وضع النشر غير المحدود في فيسبوك</span>
</label>
<label class="mkxtd1c1kq" style="padding: 6px 10px; margin: 0; min-height: 36px;">
<input type="checkbox" id="x0xjllyi37" checked>
<span>تفعيل وضع البث غير المحدود في واتساب</span>
</label>
</div>
</div>
<!-- 2. دروع واتساب -->
<div id="cx5bc9v8nm" style="display: none; flex-direction: column; gap: 12px; margin-bottom: 16px;">
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(clamp(250px, 25vw, 1fr), 1fr)); gap: 12px;">
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px; background: var(--bg-card); display: flex; flex-direction: column; gap: 8px;">
<strong style="font-size: 12.5px; display: flex; align-items: center; gap: 6px; color: var(--text-main);">
<i class="fa-brands fa-whatsapp" style="color: var(--wa-brand);"></i> <span>محاكاة كتابة مسودة تجريبية بالواتساب</span>
</strong>
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--text-secondary);">
<span id="tqmedoe2pk">دورات كتابة وحذف المسودة: 3 دورات</span>
<input type="number" id="w2zbm8bpbs" value="3" min="1" max="6" style="width: 55px; text-align: center; padding: 4px;">
</div>
<input type="range" id="n3w3m5tvbo" min="1" max="6" value="3">
</div>
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px; background: var(--bg-card); display: flex; flex-direction: column; gap: 8px;">
<strong style="font-size: 12.5px; display: flex; align-items: center; gap: 6px; color: var(--text-main);">
<i class="fa-solid fa-keyboard" style="color: #0284c7;"></i> <span>نسبة الأخطاء الإملائية والسرعة الطبيعية</span>
</strong>
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--text-secondary);">
<span id="tny1nnj5ku">نسبة الأخطاء الإملائية: 4 %</span>
<input type="number" id="b1urxuziof" value="4" min="0" max="15" style="width: 55px; text-align: center; padding: 4px;">
</div>
<input type="range" id="jiejaczaq6" min="0" max="15" value="4">
</div>
</div>
</div>
<!-- 3. محاكاة حركة الماوس والتصفح -->
<div id="f155ivwba3" style="display: none; flex-direction: column; gap: 12px; margin-bottom: 16px;">
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(clamp(220px, 20vw, 1fr), 1fr)); gap: 10px;">
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 12px; background: var(--bg-card); display: flex; flex-direction: column; gap: 6px;">
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 11.5px; font-weight: 700; color: var(--text-main);">
<span><i class="fa-solid fa-arrows-up-down" style="color:var(--primary);"></i> <span id="d2p6hdv09g">خطوة التصفح: 250 بكسل</span></span>
<input type="number" id="im8lcqf85q" value="250" min="100" max="800" style="width: 65px; text-align: center; padding: 4px;">
</div>
<input type="range" id="r5r3nf944x" min="100" max="800" value="250">
</div>
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 12px; background: var(--bg-card); display: flex; flex-direction: column; gap: 6px;">
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 11.5px; font-weight: 700; color: var(--text-main);">
<span><i class="fa-solid fa-rotate" style="color:var(--primary);"></i> <span id="z034ly7vrp">دورات محاكاة القراءة: 4 دورات</span></span>
<input type="number" id="xh4v4gefq8" value="4" min="1" max="10" style="width: 65px; text-align: center; padding: 4px;">
</div>
<input type="range" id="d2h9zi5d8q" min="1" max="10" value="4">
</div>
<div style="border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 12px; background: var(--bg-card); display: flex; flex-direction: column; gap: 6px;">
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 11.5px; font-weight: 700; color: var(--text-main);">
<span><i class="fa-solid fa-bezier-curve" style="color:var(--primary);"></i> <span id="lpmhfzu3km">مسارات حركة الماوس: 5 مسارات</span></span>
<input type="number" id="ermiz7sdjh" value="5" min="1" max="12" style="width: 65px; text-align: center; padding: 4px;">
</div>
<input type="range" id="eohhg1ndju" min="1" max="12" value="5">
</div>
</div>
<div style="display: flex; gap: 8px; flex-wrap: wrap;">
<button type="button" id="sfiikjkf74" class="itdnt14mss" style="padding: 8px 14px; font-size: 11.5px; font-weight: 800;">
<i class="fa-solid fa-vial"></i> <span>إطلاق اختبار محاكاة السلوك في فيسبوك</span>
</button>
<button type="button" id="mj26t0wtq4" class="itdnt14mss" style="padding: 8px 14px; font-size: 11.5px; font-weight: 800; background: var(--wa-brand); border-color: var(--wa-brand);">
<i class="fa-solid fa-vial"></i> <span>إطلاق اختبار محاكاة السلوك في واتساب</span>
</button>
</div>
</div>
</div>
`;
host.appendChild(pane);
return true;
}
/**
* تبديل علامات تبويب درع التخفي
*/
function initStealthModalTabs() {
const tabFbRules = document.getElementById('jtdhxfkv1j');
const tabFbMouse = document.getElementById('lnlkhhgfo6');
const tabWaRules = document.getElementById('lftegt1t8z');
const secFbBehavior = document.getElementById('c13az1759q');
const secFbMouseScroll = document.getElementById('f155ivwba3');
const secWaBehavior = document.getElementById('cx5bc9v8nm');
const resetStealthTabColors = () => {
[tabFbRules, tabFbMouse, tabWaRules].forEach(tab => {
if (tab) tab.classList.remove('vn5qn7dmpk');
});
};
const configureStealthPaneDisplay = (activeTab, activePane) => {
[secFbBehavior, secFbMouseScroll, secWaBehavior].forEach(pane => {
if (pane) pane.style.display = 'none';
});
resetStealthTabColors();
if (activePane) {
activePane.style.display = (activePane.id === 'c13az1759q') ? 'grid' : 'flex';
}
if (activeTab) {
activeTab.classList.add('vn5qn7dmpk');
}
};
if (tabFbRules) tabFbRules.onclick = () => configureStealthPaneDisplay(tabFbRules, secFbBehavior);
if (tabFbMouse) tabFbMouse.onclick = () => configureStealthPaneDisplay(tabFbMouse, secFbMouseScroll);
if (tabWaRules) tabWaRules.onclick = () => configureStealthPaneDisplay(tabWaRules, secWaBehavior);
}
/**
* ربط مدخلات السلايدر المزدوجة بالاتجاهين (Two-Way Binding)
*/
function initSlidersBinds() {
DUAL_INPUT_MAPPING.forEach(pair => {
const numEl = document.getElementById(pair.numId);
const rangeEl = document.getElementById(pair.rangeId);
const lblEl = document.getElementById(pair.lblId);
if (numEl && rangeEl) {
numEl.oninput = async (e) => {
let val = parseInt(e.target.value, 10) || 0;
const min = parseInt(rangeEl.min, 10);
const max = parseInt(rangeEl.max, 10);
if (val < min) val = min;
if (val > max) val = max;
rangeEl.value = val;
if (lblEl) {
if (pair.configKey === 'typoRatio') lblEl.textContent = `نسبة الأخطاء الإملائية: ${val} %`;
else if (pair.configKey === 'zwspObfuscationDensity') lblEl.textContent = `كثافة الفواصل الصفرية: ${val} %`;
else if (pair.configKey === 'unicodeHomoglyphStrength') lblEl.textContent = `نسبة الحروف المتجانسة: ${val} %`;
else if (pair.configKey === 'synonymParaphrasingStrength') lblEl.textContent = `معدل المترادفات: ${val} %`;
else lblEl.textContent = `${pair.lblId.includes('scroll') ? 'خطوة التصفح: ' : ''}${val.toLocaleString('en-US')}${pair.suffix}`;
}
await saveActiveStealthUIForm();
};
rangeEl.oninput = async (e) => {
const val = parseInt(e.target.value, 10);
numEl.value = val;
if (lblEl) {
if (pair.configKey === 'typoRatio') lblEl.textContent = `نسبة الأخطاء الإملائية: ${val} %`;
else if (pair.configKey === 'zwspObfuscationDensity') lblEl.textContent = `كثافة الفواصل الصفرية: ${val} %`;
else if (pair.configKey === 'unicodeHomoglyphStrength') lblEl.textContent = `نسبة الحروف المتجانسة: ${val} %`;
else if (pair.configKey === 'synonymParaphrasingStrength') lblEl.textContent = `معدل المترادفات: ${val} %`;
else lblEl.textContent = `${pair.lblId.includes('scroll') ? 'خطوة التصفح: ' : ''}${val.toLocaleString('en-US')}${pair.suffix}`;
}
await saveActiveStealthUIForm();
};
}
});
const newStealthChecks = [
'sl9p4u8bsq', 'rhwr8ddxsn', 'ns1dmmtyz0', 'anbc67zy1r',
'g5ln0sgxqr', 'ayeuwtm17p', 'ctinl8rsq4', 'eu4jeaso7w',
'x0xjllyi37', 'nsksvirsv9'
];
newStealthChecks.forEach(id => {
const el = document.getElementById(id);
if (el) {
el.onchange = async () => {
await saveActiveStealthUIForm();
};
}
});
}
/**
* تحميل حالة درع التخفي وتعبئة عناصر النموذج
*/
async function loadActiveStealthUIForm() {
buildSecurityPaneLayout();
appendPacingModalLayout();
await loadDelayIntervalSettingsIntoModal();
const config = await global.FritreeStorage.get('local_shield_config_matrix', DEFAULT_SHIELD_CONFIG);
const setVal = (rangeId, numId, labelId, val, suffix = '', configKey = '') => {
const range = document.getElementById(rangeId);
const num = document.getElementById(numId);
const label = document.getElementById(labelId);
if (range) range.value = val;
if (num) num.value = val;
if (label) {
if (configKey === 'typoRatio') label.textContent = `نسبة الأخطاء الإملائية: ${val} %`;
else if (configKey === 'zwspObfuscationDensity') label.textContent = `كثافة الفواصل الصفرية: ${val} %`;
else if (configKey === 'unicodeHomoglyphStrength') label.textContent = `نسبة الحروف المتجانسة: ${val} %`;
else if (configKey === 'synonymParaphrasingStrength') label.textContent = `معدل المترادفات: ${val} %`;
else label.textContent = `${labelId.includes('scroll') ? 'خطوة التصفح: ' : ''}${val.toLocaleString('en-US')}${suffix}`;
}
};
setVal('r5r3nf944x', 'im8lcqf85q', 'd2p6hdv09g', config.scrollStepPixels || 250, ' بكسل');
setVal('d2h9zi5d8q', 'xh4v4gefq8', 'z034ly7vrp', config.scrollTotalCycles || 4, ' دورات');
setVal('eohhg1ndju', 'ermiz7sdjh', 'lpmhfzu3km', config.mouseMovementCycles || 5, ' مسارات');
setVal('qzakpnocrm', 'zc4iigs48o', 'e4ajtz6vlv', config.mouseJitterSpeed || 8, ' مللي ثانية');
setVal('uxum8urssm', 'wbf1v4khns', 'y2n5vy9rut', config.coordinateJitterRadius || 8, ' بكسل');
setVal('z0cclfkndb', 'te2outp1tr', 'zbyylei7gx', config.waScrollStepPixels || 200, ' بكسل');
setVal('evjpj9u9hy', 'yyju5075b0', 'nm27sf3k3c', config.waScrollTotalCycles || 3, ' دورات');
setVal('nq4w58kmh8', 'jyxpicjb18', 'dnainkcka3', config.waCoordinateJitterRadius || 6, ' بكسل');
setVal('n3w3m5tvbo', 'w2zbm8bpbs', 'tqmedoe2pk', config.waTypingDeletions || 3, ' دورات');
setVal('jiejaczaq6', 'b1urxuziof', 'tny1nnj5ku', Math.round((config.typoRatio !== undefined ? config.typoRatio : 0.04) * 100), ' %', 'typoRatio');
setVal('juzm8y7nqm', 'dnevunqmlt', 'xakyxiwhnt', Math.round((config.zwspObfuscationDensity !== undefined ? config.zwspObfuscationDensity : 0.25) * 100), ' %', 'zwspObfuscationDensity');
setVal('mok38uk2ki', 'dmkenc7vj2', 'upisaz9z2w', Math.round((config.unicodeHomoglyphStrength !== undefined ? config.unicodeHomoglyphStrength : 0.20) * 100), ' %', 'unicodeHomoglyphStrength');
setVal('j2p9auo70g', 'bxpbhgie4d', 'a7zbitm5o2', Math.round((config.synonymParaphrasingStrength !== undefined ? config.synonymParaphrasingStrength : 0.40) * 100), ' %', 'synonymParaphrasingStrength');
const setCheckState = (id, val) => {
const el = document.getElementById(id);
if (el) el.checked = !!val;
};
setCheckState('sl9p4u8bsq', config.showVirtualCursor !== false);
setCheckState('rhwr8ddxsn', config.showVirtualCursor !== false);
setCheckState('ns1dmmtyz0', config.zwspObfuscationActive !== false);
setCheckState('anbc67zy1r', config.unicodeHomoglyphActive !== false);
setCheckState('g5ln0sgxqr', config.synonymParaphrasingActive !== false);
setCheckState('ayeuwtm17p', config.exifCleansingActive !== false);
setCheckState('ctinl8rsq4', config.pixelNoiseActive !== false);
setCheckState('eu4jeaso7w', config.unlimitedPublishingActive !== false);
setCheckState('x0xjllyi37', config.unlimitedMessagingActive !== false);
setCheckState('nsksvirsv9', config.antiBotScramblerActive !== false);
if (global.FritreeAntibanRulesService && typeof global.FritreeAntibanRulesService.evaluateRisk === 'function') {
await global.FritreeAntibanRulesService.evaluateRisk();
}
}
/**
* حفظ وتوقيع خيارات درع التخفي في التخزين المشفر
*/
async function saveActiveStealthUIForm() {
const currentMatrix = await global.FritreeStorage.get('local_shield_config_matrix', DEFAULT_SHIELD_CONFIG);
const getVal = (id) => {
const el = document.getElementById(id);
return el ? parseInt(el.value, 10) : null;
};
const step = getVal('im8lcqf85q') || getVal('r5r3nf944x');
const cycles = getVal('xh4v4gefq8') || getVal('d2h9zi5d8q');
const mCycles = getVal('ermiz7sdjh') || getVal('eohhg1ndju');
const mSpeed = getVal('zc4iigs48o') || getVal('qzakpnocrm');
const clickJitter = getVal('wbf1v4khns') || getVal('uxum8urssm');
const chkCursor = document.getElementById('sl9p4u8bsq');
if (step !== null) currentMatrix.scrollStepPixels = step;
if (cycles !== null) currentMatrix.scrollTotalCycles = cycles;
if (mCycles !== null) currentMatrix.mouseMovementCycles = mCycles;
if (mSpeed !== null) currentMatrix.mouseJitterSpeed = mSpeed;
if (clickJitter !== null) currentMatrix.coordinateJitterRadius = clickJitter;
if (chkCursor) currentMatrix.showVirtualCursor = chkCursor.checked;
const waStep = getVal('te2outp1tr') || getVal('z0cclfkndb');
const waCycles = getVal('yyju5075b0') || getVal('evjpj9u9hy');
const waClickJitter = getVal('jyxpicjb18') || getVal('nq4w58kmh8');
const waTypingDeletions = getVal('w2zbm8bpbs') || getVal('n3w3m5tvbo');
const chkWaCursor = document.getElementById('rhwr8ddxsn');
if (waStep !== null) currentMatrix.waScrollStepPixels = waStep;
if (waCycles !== null) currentMatrix.waScrollTotalCycles = waCycles;
if (waClickJitter !== null) currentMatrix.waCoordinateJitterRadius = waClickJitter;
if (waTypingDeletions !== null) currentMatrix.waTypingDeletions = waTypingDeletions;
if (chkWaCursor) currentMatrix.showVirtualCursor = chkWaCursor.checked;
const getPctVal = (numId, rangeId) => {
const val = getVal(numId) || getVal(rangeId);
return val !== null ? val / 100 : null;
};
const typo = getPctVal('b1urxuziof', 'jiejaczaq6');
const zwspD = getPctVal('dnevunqmlt', 'juzm8y7nqm');
const homoglyphS = getPctVal('dmkenc7vj2', 'mok38uk2ki');
const paraS = getPctVal('bxpbhgie4d', 'j2p9auo70g');
if (typo !== null) currentMatrix.typoRatio = typo;
if (zwspD !== null) currentMatrix.zwspObfuscationDensity = zwspD;
if (homoglyphS !== null) currentMatrix.unicodeHomoglyphStrength = homoglyphS;
if (paraS !== null) currentMatrix.synonymParaphrasingStrength = paraS;
const getCheckState = (id) => {
const el = document.getElementById(id);
return el ? el.checked : true;
};
currentMatrix.zwspObfuscationActive = getCheckState('ns1dmmtyz0');
currentMatrix.unicodeHomoglyphActive = getCheckState('anbc67zy1r');
currentMatrix.synonymParaphrasingActive = getCheckState('g5ln0sgxqr');
currentMatrix.exifCleansingActive = getCheckState('ayeuwtm17p');
currentMatrix.pixelNoiseActive = getCheckState('ctinl8rsq4');
currentMatrix.unlimitedPublishingActive = getCheckState('eu4jeaso7w');
currentMatrix.unlimitedMessagingActive = getCheckState('x0xjllyi37');
currentMatrix.antiBotScramblerActive = getCheckState('nsksvirsv9');
const serialized = JSON.stringify(currentMatrix);
const concatString = `${serialized}:${SHIELD_INTEGRITY_SALT}`;
let signature = "fallback_shield_sig_512_" + concatString.length;
if (global.FritreeCrypto && typeof global.FritreeCrypto.signReceipt === 'function') {
signature = await global.FritreeCrypto.signReceipt(
"FB_STEALTH_SHIELD",
concatString.length,
"config_signature_512",
concatString,
SHIELD_INTEGRITY_SALT
);
}
await global.FritreeStorage.set('local_shield_config_matrix', currentMatrix);
await global.FritreeStorage.set('local_shield_config_matrix_sig_512', signature);
if (global.FritreeAntibanRulesService && typeof global.FritreeAntibanRulesService.evaluateRisk === 'function') {
await global.FritreeAntibanRulesService.evaluateRisk();
}
}
/**
* إطلاق اختبار محاكاة السلوك البشري الحي في التبويب النشط
*/
function initLiveTestTriggers() {
const liveTestBtn = document.getElementById('sfiikjkf74');
if (liveTestBtn) {
liveTestBtn.onclick = async () => {
liveTestBtn.disabled = true;
liveTestBtn.style.opacity = '0.7';
liveTestBtn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> <span>جاري محاكاة الحركة في فيسبوك...</span>';
chrome.tabs.query({ url: ['*://*.facebook.com/*', '*://*.web.facebook.com/*'] }, (tabs) => {
if (!tabs || !tabs.length) {
alert('تنبيه: لا يوجد أي تبويب فيسبوك مفتوح حالياً. افتح فيسبوك لتشغيل التجربة!');
resetLiveTestBtn();
return;
}
chrome.tabs.sendMessage(tabs[0].id, { action: 'execute_live_stealth_test' }, (response) => {
if (chrome.runtime.lastError) {
alert('فشل الربط: يرجى إبقاء صفحة فيسبوك محملة في التبويب النشط.');
} else if (response && response.success) {
if (typeof window.addLog === 'function') {
window.addLog('اكتمل الاختبار المباشر: تمت محاكاة حركة الماوس والتصفح في فيسبوك بنجاح.', 'success');
}
}
resetLiveTestBtn();
});
});
function resetLiveTestBtn() {
liveTestBtn.disabled = false;
liveTestBtn.style.opacity = '1';
liveTestBtn.innerHTML = '<i class="fa-solid fa-vial"></i> <span>إطلاق اختبار محاكاة السلوك في فيسبوك</span>';
}
};
}
const waLiveTestBtn = document.getElementById('mj26t0wtq4');
if (waLiveTestBtn) {
waLiveTestBtn.onclick = async () => {
waLiveTestBtn.disabled = true;
waLiveTestBtn.style.opacity = '0.7';
waLiveTestBtn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> <span>جاري محاكاة الحركة في واتساب ويب...</span>';
chrome.tabs.query({ url: ['*://web.whatsapp.com/*', '*://*.whatsapp.com/*'] }, (tabs) => {
if (!tabs || !tabs.length) {
alert('تنبيه: صفحة واتساب ويب غير مفتوحة حالياً. افتح واتساب ويب أولاً للتجربة المباشرة!');
resetWaLiveTestBtn();
return;
}
chrome.tabs.sendMessage(tabs[0].id, { action: 'execute_live_stealth_test' }, (response) => {
if (chrome.runtime.lastError) {
alert('فشل الربط: تأكد من تحميل صفحة واتساب ويب.');
} else if (response && response.success) {
if (typeof window.addLog === 'function') {
window.addLog('اكتمل اختبار الواتساب المباشر: تمت محاكاة التصفح وحركة الماوس داخل المحادثة بنجاح.', 'success');
}
}
resetWaLiveTestBtn();
});
});
function resetWaLiveTestBtn() {
waLiveTestBtn.disabled = false;
waLiveTestBtn.style.opacity = '1';
waLiveTestBtn.innerHTML = '<i class="fa-solid fa-vial"></i> <span>إطلاق اختبار محاكاة السلوك في واتساب</span>';
}
};
}
}
/**
* ربط تنقل تبويبات فترات الانتظار والتبريد ومحاكي الأمان
*/
function bindPacingTabNav() {
const tabs = document.querySelectorAll('.qo2hmc0xkq');
if (!tabs || tabs.length === 0) return;
tabs.forEach(tab => {
tab.onclick = () => {
const targetId = tab.getAttribute('data-tab-target');
if (!targetId) return;
document.querySelectorAll('.qo2hmc0xkq').forEach(t => t.classList.remove('vn5qn7dmpk'));
document.querySelectorAll('.oaw2p63ner').forEach(c => c.style.display = 'none');
tab.classList.add('vn5qn7dmpk');
const targetSec = document.getElementById(targetId);
if (targetSec) targetSec.style.display = 'block';
const simPlatformSelect = document.getElementById('txcj9gg61x');
if (simPlatformSelect) {
if (targetId === 'mcuawm6x53') simPlatformSelect.value = 'fb';
if (targetId === 'xgbsksw8rt') simPlatformSelect.value = 'wa';
}
runDelaySimulation();
};
});
}
/**
* محاكاة خطة النشر والجدول الزمني للعمليات
*/
function runDelaySimulation() {
const simPlatform = document.getElementById('txcj9gg61x')?.value || 'fb';
const modeSelect = simPlatform === 'wa' ? document.getElementById('bfptsf9qwy') : document.getElementById('l37axh2l1n');
const postCountInput = document.getElementById('ebgtwww2cx');
const mode = modeSelect ? modeSelect.value : 'continuous';
const postCount = parseInt(postCountInput ? postCountInput.value : '20', 10) || 20;
const minDelay = parseInt(document.getElementById(simPlatform === 'wa' ? 'u7hi952ajh' : 'fcdd19jd0b')?.value || '45', 10) || 45;
const maxDelay = parseInt(document.getElementById(simPlatform === 'wa' ? 'zjxupa8x3b' : 'nypjlieshn')?.value || '120', 10) || 120;
const fixedDelay = parseInt(document.getElementById(simPlatform === 'wa' ? 'sfoi4d52jk' : 'nmngttm14l')?.value || '60', 10) || 60;
const burstCount = parseInt(document.getElementById(simPlatform === 'wa' ? 'qne5lmug39' : 'er9a6wk592')?.value || '5', 10) || 5;
const burstPause = parseInt(document.getElementById(simPlatform === 'wa' ? 'a7y6fdy14u' : 'f85bxwyms9')?.value || '300', 10) || 300;
const longBreakCount = parseInt(document.getElementById(simPlatform === 'wa' ? 'xpqbg0sodc' : 'oifuahm7ox')?.value || '15', 10) || 15;
const longBreakPause = parseInt(document.getElementById(simPlatform === 'wa' ? 'ajt7y78irf' : 'l1mxkqhsts')?.value || '900', 10) || 900;
let totalSeconds = 0;
let totalCooldown = 0;
for (let i = 1; i <= postCount; i++) {
totalSeconds += 5;
let stepCooldown = 0;
if (i < postCount) {
if (mode === 'continuous') {
const decayRatio = (postCount - i) / postCount;
const median = (minDelay + maxDelay) / 2;
stepCooldown = Math.floor(minDelay + (median * decayRatio));
} else if (mode === 'fixed') {
stepCooldown = fixedDelay;
} else if (mode === 'burst') {
stepCooldown = (i % burstCount === 0) ? burstPause : 10;
} else {
stepCooldown = Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay;
}
totalCooldown += stepCooldown;
totalSeconds += stepCooldown;
}
if (longBreakCount > 0 && i < postCount && i % longBreakCount === 0) {
totalSeconds += longBreakPause;
}
}
const totalMinutes = Math.ceil(totalSeconds / 60);
const outputSummaryText = document.getElementById('c1xm1ix27g');
if (outputSummaryText) {
outputSummaryText.innerHTML = `<i class="fa-solid fa-stopwatch" style="color:var(--primary);"></i> <span>إجمالي وقت تشغيل الحملة المتوقع: ${totalMinutes} دقيقة</span>`;
}
const avgInterval = postCount > 1 ? (totalCooldown / (postCount - 1)) : totalCooldown;
const safetyBadge = document.getElementById('hshj1zv2hr');
const minSafeAvg = simPlatform === 'wa' ? 45 : 30;
if (safetyBadge) {
if (avgInterval < minSafeAvg) {
safetyBadge.className = "zcsc0rlnfn red";
safetyBadge.innerHTML = `<i class="fa-solid fa-triangle-exclamation"></i> <span>مستوى أمان منخفض (خطر حظر مرتفع)</span>`;
} else if (avgInterval < (minSafeAvg * 1.5)) {
safetyBadge.className = "zcsc0rlnfn yellow";
safetyBadge.innerHTML = `<i class="fa-solid fa-shield-halved"></i> <span>مستوى أمان متوسط ومقبول</span>`;
} else {
safetyBadge.className = "zcsc0rlnfn green";
safetyBadge.innerHTML = `<i class="fa-solid fa-circle-check"></i> <span>مستوى أمان مرتفع وممتاز</span>`;
}
}
}
/**
* تهيئة وحدة دروع التخفي وفترات التبريد
*/
function initStealthPacingController() {
buildSecurityPaneLayout();
appendPacingModalLayout();
initStealthModalTabs();
initSlidersBinds();
initLiveTestTriggers();
bindPacingTabNav();
loadActiveStealthUIForm();
const runSimBtn = document.getElementById('dc1dg75tdv');
if (runSimBtn) runSimBtn.onclick = runDelaySimulation;
const simPlatformSelect = document.getElementById('txcj9gg61x');
if (simPlatformSelect) simPlatformSelect.onchange = runDelaySimulation;
}
/**
* تصدير وحدة تحكم التخفي والتبريد
*/
global.FritreeStealthUI = {
init: initStealthPacingController,
buildPane: buildSecurityPaneLayout,
loadForm: loadActiveStealthUIForm,
saveForm: saveActiveStealthUIForm
};
global.FritreePacingUI = {
init: initStealthPacingController,
openModal: openPacingModal,
runSimulation: runDelaySimulation,
saveSettings: saveDelayIntervalSettingsFromModal,
loadSettings: loadDelayIntervalSettingsIntoModal
};
if (typeof document !== 'undefined') {
if (document.readyState === 'complete' || document.readyState === 'interactive') {
initStealthPacingController();
} else {
document.addEventListener('DOMContentLoaded', initStealthPacingController);
}
}
})(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this);