/** * @fileoverview Central App State & Wallet Points Store * @module state/app-state * @description إدارة الحالة المركزية للمحفظة، معاملات النقاط، توقيع الأرصدة الرقمية، وبيانات الحساب الأساسية. */ (global => { 'use strict'; /** * الحالة المركزية للتطبيق */ const DashboardState = { usdPoints: 100.00, usedSerials: [], pointsTransactions: [], balanceSignature: "", fbPoints: 0, fbPointsSignature: "", waPoints: 0, waPointsSignature: "", currentAccountId: null, userName: "", userPhone: "", waLink: "", userXP: 0, userLevel: 1, lifetimeFb: 0, lifetimeWa: 0, lifetimeTasks: 0, activeSubscription: 'Lifetime Unlimited', subExpiryDate: null, activeTasks: [], isLoaded: false }; /** * حساب التوقيع الرقمي لرصيد الدولار * @param {number} points * @returns {Promise} */ async function computeBalanceSignature(points) { const salt = global.FritreeAppConstants?.SECURITY_SALTS?.BALANCE_SALT || "FritreeBalanceSymmetricSignatureSalt_2026_EnterpriseStrict_V5"; const formattedUSD = parseFloat(points).toFixed(2); const rawPayload = `usdPoints:${formattedUSD}:${salt}`; if (global.FritreeCrypto && typeof global.FritreeCrypto.sha256 === 'function') { return await global.FritreeCrypto.sha256(rawPayload); } return "fallback_bal_sig_" + Math.random().toString(36).substring(2); } /** * حساب التوقيع الرقمي لنقاط فيسبوك * @param {number} shares * @returns {Promise} */ async function computeFbCardsSignature(shares) { const salt = global.FritreeAppConstants?.SECURITY_SALTS?.FB_CARDS_SALT || "FritreeFbCardsSymmetricSignatureSalt_2026_EnterpriseStrict_V5"; const rawPayload = `acc_fbPoints:${shares}:${salt}`; if (global.FritreeCrypto && typeof global.FritreeCrypto.sha256 === 'function') { return await global.FritreeCrypto.sha256(rawPayload); } return "fallback_fb_sig_" + Math.random().toString(36).substring(2); } /** * حساب التوقيع الرقمي لنقاط واتساب * @param {number} shares * @returns {Promise} */ async function computeWaCardsSignature(shares) { const salt = global.FritreeAppConstants?.SECURITY_SALTS?.WA_CARDS_SALT || "FritreeWaCardsSymmetricSignatureSalt_2026_EnterpriseStrict_V5"; const rawPayload = `acc_waPoints:${shares}:${salt}`; if (global.FritreeCrypto && typeof global.FritreeCrypto.sha256 === 'function') { return await global.FritreeCrypto.sha256(rawPayload); } return "fallback_wa_sig_" + Math.random().toString(36).substring(2); } /** * تحديث جميع عناصر الأرصدة والنقاط في الـ DOM */ function updateAllPointsDOMElements() { const state = DashboardState; // الأرصدة في شريط الترويسة const badgeBalance = document.getElementById('q20kc2pzo4'); const fbB = document.getElementById('n2jtnhukcl'); const waB = document.getElementById('b8bid195p8'); // الأرصدة في صفحة المتجر const storeBalance = document.getElementById('u39mvrlgpk'); // الأرصدة في صفحة المحفظة والخزنة const walletUsd = document.getElementById('urp3goak31'); const walletFb = document.getElementById('jsfgartkej'); const walletWa = document.getElementById('qul9lan6tq'); if (badgeBalance) badgeBalance.textContent = state.usdPoints.toFixed(2); if (fbB) fbB.textContent = state.fbPoints.toLocaleString('en-US'); if (waB) waB.textContent = state.waPoints.toLocaleString('en-US'); if (storeBalance) storeBalance.textContent = state.usdPoints.toFixed(2); if (walletUsd) walletUsd.textContent = state.usdPoints.toFixed(2); if (walletFb) walletFb.textContent = state.fbPoints.toLocaleString('en-US'); if (walletWa) walletWa.textContent = state.waPoints.toLocaleString('en-US'); } /** * تحميل حالة الحساب والمحفظة ومطابقة الأختام الرقمية */ async function loadDashboardState() { const storage = global.FritreeStorage; if (!storage) return; DashboardState.usdPoints = parseFloat(await storage.get('usdPoints', 100.00)) || 0.00; DashboardState.usedSerials = await storage.get('usedSerials', []); DashboardState.pointsTransactions = await storage.get('pointsTransactions', []); DashboardState.balanceSignature = await storage.get('usdPointsSig', ''); if (global.FritreeCrypto && typeof global.FritreeCrypto.getOrGenerateAccountId === 'function') { DashboardState.currentAccountId = await global.FritreeCrypto.getOrGenerateAccountId(); } DashboardState.userName = await storage.get('acc_user_name', ''); DashboardState.userPhone = await storage.get('acc_user_phone', ''); DashboardState.waLink = await storage.get('acc_user_wa_link', ''); DashboardState.fbPoints = parseInt(await storage.get('acc_fbPoints', 0), 10) || 0; DashboardState.fbPointsSignature = await storage.get('acc_fbPoints_sig', ''); DashboardState.waPoints = parseInt(await storage.get('acc_waPoints', 0), 10) || 0; DashboardState.waPointsSignature = await storage.get('acc_waPoints_sig', ''); DashboardState.userXP = await storage.get('acc_userXP', 0); DashboardState.userLevel = await storage.get('acc_userLevel', 1); DashboardState.lifetimeFb = await storage.get('acc_lifetimeFb', 0); DashboardState.lifetimeWa = await storage.get('acc_lifetimeWa', 0); DashboardState.lifetimeTasks = await storage.get('acc_lifetimeTasks', 0); DashboardState.activeTasks = await storage.get('acc_tasks', []); // مطابقة وتحديث التوقيعات الرقمية للأرصدة const expectedPointsSig = await computeBalanceSignature(DashboardState.usdPoints); if (DashboardState.balanceSignature !== expectedPointsSig) { DashboardState.balanceSignature = expectedPointsSig; await storage.set('usdPointsSig', DashboardState.balanceSignature); } const expectedFbSig = await computeFbCardsSignature(DashboardState.fbPoints); if (DashboardState.fbPointsSignature !== expectedFbSig) { DashboardState.fbPointsSignature = expectedFbSig; await storage.set('acc_fbPoints_sig', DashboardState.fbPointsSignature); } const expectedWaSig = await computeWaCardsSignature(DashboardState.waPoints); if (DashboardState.waPointsSignature !== expectedWaSig) { DashboardState.waPointsSignature = expectedWaSig; await storage.set('acc_waPoints_sig', DashboardState.waPointsSignature); } if (typeof global.FritreeChallenges !== 'undefined' && typeof global.FritreeChallenges.initDailyTasks === 'function') { await global.FritreeChallenges.initDailyTasks(); } updateAllPointsDOMElements(); DashboardState.isLoaded = true; } /** * حفظ كافة بيانات الحساب والمحفظة بالتخزين المشفر */ async function saveAccountData() { const storage = global.FritreeStorage; if (!storage) return; await storage.set('usdPoints', DashboardState.usdPoints); await storage.set('usdPointsSig', DashboardState.balanceSignature); await storage.set('acc_user_name', DashboardState.userName); await storage.set('acc_user_phone', DashboardState.userPhone); await storage.set('acc_user_wa_link', DashboardState.waLink); await storage.set('acc_fbPoints', DashboardState.fbPoints); await storage.set('acc_fbPoints_sig', DashboardState.fbPointsSignature); await storage.set('acc_waPoints', DashboardState.waPoints); await storage.set('acc_waPoints_sig', DashboardState.waPointsSignature); await storage.set('acc_userXP', DashboardState.userXP); await storage.set('acc_userLevel', DashboardState.userLevel); await storage.set('acc_lifetimeFb', DashboardState.lifetimeFb); await storage.set('acc_lifetimeWa', DashboardState.lifetimeWa); await storage.set('acc_lifetimeTasks', DashboardState.lifetimeTasks); await storage.set('acc_activeSub', 'Lifetime Unlimited'); await storage.set('acc_subExpiry', null); await storage.set('acc_tasks', DashboardState.activeTasks); updateAllPointsDOMElements(); } /** * تسجيل عملية مالية جديدة في كشف حساب المحفظة * @param {string} desc - وصف العملية * @param {number} amount - القيمة أو الكمية * @param {string} type - نوع الحركة (add | deduct | add_fb | deduct_fb | add_wa | deduct_wa | swap_in | swap_out) */ async function addPointsTransaction(desc, amount, type) { const txId = 'tx_' + Date.now() + '_' + Math.random().toString(36).substr(2, 4); const timestamp = new Date().toISOString(); let signature = ""; if (typeof global.FritreeWallet !== 'undefined' && typeof global.FritreeWallet.signReceipt === 'function') { signature = await global.FritreeWallet.signReceipt(txId, amount, type, desc, timestamp); } DashboardState.pointsTransactions.push({ id: txId, desc: desc, amount: amount, type: type, date: timestamp, signature: signature }); if (DashboardState.pointsTransactions.length > 200) DashboardState.pointsTransactions.shift(); await global.FritreeStorage.set('pointsTransactions', DashboardState.pointsTransactions); if (global.FritreeCalendar && typeof global.FritreeCalendar.logActivity === 'function') { global.FritreeCalendar.logActivity({ title: `[معاملة محفظة] ${desc}`, type: 'finance', category: 'finance', notes: `معاملة مالية جديدة بمبلغ/كمية: ${amount} | نوع العملية: ${type}`, priority: 'medium' }); } } /** * خصم رصيد دولار من المحفظة */ async function deductPoints(amount, desc) { const costUSD = parseFloat(amount); const computedSig = await computeBalanceSignature(DashboardState.usdPoints); if (DashboardState.balanceSignature !== computedSig) { DashboardState.balanceSignature = computedSig; await global.FritreeStorage.set('usdPointsSig', DashboardState.balanceSignature); } if (DashboardState.usdPoints < costUSD) return false; DashboardState.usdPoints = parseFloat(Math.max(0.00, DashboardState.usdPoints - costUSD)); DashboardState.balanceSignature = await computeBalanceSignature(DashboardState.usdPoints); await global.FritreeStorage.set('usdPoints', DashboardState.usdPoints); await global.FritreeStorage.set('usdPointsSig', DashboardState.balanceSignature); await addPointsTransaction(desc, costUSD, 'deduct'); updateAllPointsDOMElements(); return true; } /** * إضافة رصيد دولار إلى المحفظة */ async function addPoints(amount, desc) { const addUSD = parseFloat(amount); DashboardState.usdPoints = parseFloat(DashboardState.usdPoints + addUSD); DashboardState.balanceSignature = await computeBalanceSignature(DashboardState.usdPoints); await global.FritreeStorage.set('usdPoints', DashboardState.usdPoints); await global.FritreeStorage.set('usdPointsSig', DashboardState.balanceSignature); await addPointsTransaction(desc, addUSD, 'add'); updateAllPointsDOMElements(); } /** * خصم نقاط فيسبوك */ async function deductFbCards(amount, desc) { const computedSig = await computeFbCardsSignature(DashboardState.fbPoints); if (DashboardState.fbPointsSignature !== computedSig) { DashboardState.fbPointsSignature = computedSig; await global.FritreeStorage.set('acc_fbPoints_sig', DashboardState.fbPointsSignature); } if (DashboardState.fbPoints < amount) return false; DashboardState.fbPoints = Math.max(0, DashboardState.fbPoints - amount); DashboardState.fbPointsSignature = await computeFbCardsSignature(DashboardState.fbPoints); await global.FritreeStorage.set('acc_fbPoints', DashboardState.fbPoints); await global.FritreeStorage.set('acc_fbPoints_sig', DashboardState.fbPointsSignature); await addPointsTransaction(desc, amount, 'deduct_fb'); updateAllPointsDOMElements(); return true; } /** * إضافة نقاط فيسبوك */ async function addFbCards(amount, desc) { DashboardState.fbPoints = (parseInt(DashboardState.fbPoints, 10) || 0) + amount; DashboardState.fbPointsSignature = await computeFbCardsSignature(DashboardState.fbPoints); await global.FritreeStorage.set('acc_fbPoints', DashboardState.fbPoints); await global.FritreeStorage.set('acc_fbPoints_sig', DashboardState.fbPointsSignature); await addPointsTransaction(desc, amount, 'add_fb'); updateAllPointsDOMElements(); } /** * خصم نقاط واتساب */ async function deductWaCards(amount, desc) { const computedSig = await computeWaCardsSignature(DashboardState.waPoints); if (DashboardState.waPointsSignature !== computedSig) { DashboardState.waPointsSignature = computedSig; await global.FritreeStorage.set('acc_waPoints_sig', DashboardState.waPointsSignature); } if (DashboardState.waPoints < amount) return false; DashboardState.waPoints = Math.max(0, DashboardState.waPoints - amount); DashboardState.waPointsSignature = await computeWaCardsSignature(DashboardState.waPoints); await global.FritreeStorage.set('acc_waPoints', DashboardState.waPoints); await global.FritreeStorage.set('acc_waPoints_sig', DashboardState.waPointsSignature); await addPointsTransaction(desc, amount, 'deduct_wa'); updateAllPointsDOMElements(); return true; } /** * إضافة نقاط واتساب */ async function addWaCards(amount, desc) { DashboardState.waPoints = (parseInt(DashboardState.waPoints, 10) || 0) + amount; DashboardState.waPointsSignature = await computeWaCardsSignature(DashboardState.waPoints); await global.FritreeStorage.set('acc_waPoints', DashboardState.waPoints); await global.FritreeStorage.set('acc_waPoints_sig', DashboardState.waPointsSignature); await addPointsTransaction(desc, amount, 'add_wa'); updateAllPointsDOMElements(); } /** * محرك تبادل النقاط الفوري (Swap Engine) */ async function convertPoints(sourceType, targetType, amount) { if (!sourceType || !targetType || sourceType === targetType || amount <= 0) { return { success: false, error: 'بيانات غير صالحة: يرجى اختيار نوعين مختلفين للتحويل وكمية أكبر من الصفر.' }; } const srcAmount = parseInt(amount, 10) || 0; await loadDashboardState(); if (sourceType === 'fb' && DashboardState.fbPoints < srcAmount) { return { success: false, error: `رصيد نقاط فيسبوك المتاح (${DashboardState.fbPoints.toLocaleString('en-US')}) غير كافٍ لإتمام التحويل.` }; } if (sourceType === 'wa' && DashboardState.waPoints < srcAmount) { return { success: false, error: `رصيد نقاط واتساب المتاح (${DashboardState.waPoints.toLocaleString('en-US')}) غير كافٍ لإتمام التحويل.` }; } let targetAmount = 0; if (sourceType === 'fb' && targetType === 'wa') { targetAmount = Math.floor(srcAmount * 0.5); } else if (sourceType === 'wa' && targetType === 'fb') { targetAmount = Math.floor(srcAmount * 2.0); } else if (sourceType === 'fb' && targetType === 'usd') { targetAmount = parseFloat((srcAmount / 2000.0).toFixed(2)); } else if (sourceType === 'wa' && targetType === 'usd') { targetAmount = parseFloat((srcAmount / 1000.0).toFixed(2)); } else if (sourceType === 'usd' && targetType === 'fb') { targetAmount = Math.floor(srcAmount * 2000.0); } else if (sourceType === 'usd' && targetType === 'wa') { targetAmount = Math.floor(srcAmount * 1000.0); } if (targetAmount <= 0) { return { success: false, error: 'الكمية قليلة جداً للتحويل، يرجى زيادة الكمية (على الأقل 2 نقاط FB للحصول على 1 نقطة WA).' }; } const srcName = sourceType.toUpperCase(); const tgtName = targetType.toUpperCase(); const descDeduct = `تحويل وتبادل أصل (Swap Out): -${srcAmount.toLocaleString('en-US')} ${srcName}`; const descAdd = `استلام تبديل أصل (Swap In): +${tgtName === 'USD' ? '$' + targetAmount.toFixed(2) : targetAmount.toLocaleString('en-US') + ' ' + tgtName}`; let deductSuccess = false; if (sourceType === 'fb') deductSuccess = await deductFbCards(srcAmount, descDeduct); else if (sourceType === 'wa') deductSuccess = await deductWaCards(srcAmount, descDeduct); else if (sourceType === 'usd') deductSuccess = await deductPoints(srcAmount, descDeduct); if (!deductSuccess) { return { success: false, error: 'فشلت عملية خصم النقاط من المحفظة.' }; } if (targetType === 'fb') await addFbCards(targetAmount, descAdd); else if (targetType === 'wa') await addWaCards(targetAmount, descAdd); else if (targetType === 'usd') await addPoints(targetAmount, descAdd); await saveAccountData(); if (global.FritreeCalendar && typeof global.FritreeCalendar.logActivity === 'function') { global.FritreeCalendar.logActivity({ title: `[تبديل نقاط] ${srcAmount} ${srcName} ➔ ${targetAmount} ${tgtName}`, type: 'finance', category: 'finance', notes: `تم تبديل النقاط بنجاح بمحفظتك بين نقاط فيسبوك وواتساب.`, priority: 'medium' }); } return { success: true, sourceType, targetType, sourceAmount: srcAmount, targetAmount }; } /** * استعلام خصائص باقة الاشتراك */ function getSubscriptionFeatures() { return { tierName: 'Lifetime Unlimited', maxFbGroupsPerCampaign: 99999999, maxWaRecipientsPerCampaign: 99999999, canUseRotation: true, maxDailyCapLimit: 99999999, unlockedStealthFeatures: [ 'humanScrollActive', 'simulateMouseActive', 'antiHoneypotActive', 'humanTypingActive', 'randomMicroActive', 'autoPauseFailActive', 'canvasNoiseActive', 'audioContextNoiseActive', 'webRtcLeakProtectionActive', 'hardwareConcurrencyMockActive', 'deviceMemoryMockActive', 'batteryApiMockActive', 'languagesSpoofActive', 'screenOrientationSpoofActive', 'pluginsMockActive', 'idleWanderActive', 'safeHoursSchedulerActive', 'activeFreezeState', 'viewportJitterActive', 'waScrollActive', 'waMouseEmulationActive', 'waAntiHoneypotActive', 'waHumanTypingActive', 'waCanvasNoiseActive', 'waRandomTabActive', 'waTypingSimulationActive', 'waViewportJitterActive', 'showVirtualCursor', 'zwspObfuscationActive', 'unicodeHomoglyphActive', 'synonymParaphrasingActive', 'exifCleansingActive', 'pixelNoiseActive' ] }; } /** * تصدير وحدة حالة التطبيق المركزية */ global.FritreeAppState = { state: DashboardState, getState: () => DashboardState, loadDashboardState, saveAccountData, getPoints: () => DashboardState.usdPoints, getFbPoints: () => DashboardState.fbPoints, getWaPoints: () => DashboardState.waPoints, addPoints, deductPoints, addFbCards, deductFbCards, addWaCards, deductWaCards, convertPoints, addTransaction: addPointsTransaction, getSubscriptionFeatures, updatePointsUI: updateAllPointsDOMElements, updateAccountUI: updateAllPointsDOMElements }; // الحفاظ على التوافقية العكسية مع FritreeDashboard global.FritreeDashboard = global.FritreeDashboard || {}; Object.assign(global.FritreeDashboard, global.FritreeAppState); })(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this);