devicely 2.2.5 → 2.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/bin/devicely.js +1 -105
  2. package/config/devices.conf +6 -22
  3. package/lib/androidDeviceDetection.js +1 -276
  4. package/lib/appMappings.js +1 -337
  5. package/lib/deviceDetection.js +1 -394
  6. package/lib/devices.js +1 -54
  7. package/lib/doctor.js +1 -94
  8. package/lib/encryption.js +1 -88
  9. package/lib/executor.js +1 -104
  10. package/lib/frontend/asset-manifest.json +3 -3
  11. package/lib/frontend/index.html +1 -1
  12. package/lib/frontend/static/css/main.23bd35c0.css.map +1 -0
  13. package/lib/frontend/static/js/{main.26a24c5c.js → main.81eae090.js} +3 -3
  14. package/lib/frontend/static/js/main.81eae090.js.map +1 -0
  15. package/lib/logger.js +1 -47
  16. package/lib/package-lock.json +1678 -0
  17. package/lib/package.json +30 -0
  18. package/lib/screenshots/screenshot_ios_iPhone17_20260205_225900.png +0 -0
  19. package/lib/screenshots/screenshot_ios_iPhone17_20260205_225942.png +0 -0
  20. package/lib/screenshots/screenshot_ios_iPhone17_20260205_231101.png +0 -0
  21. package/lib/screenshots/screenshot_ios_iPhone17_20260205_232911.png +0 -0
  22. package/lib/screenshots/screenshot_ios_iPhone17_20260208_095103.png +0 -0
  23. package/lib/screenshots/screenshot_ios_iPhone17_20260208_095720.png +0 -0
  24. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115040.png +0 -0
  25. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115047.png +0 -0
  26. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115118.png +0 -0
  27. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115125.png +0 -0
  28. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115143.png +0 -0
  29. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120107.png +0 -0
  30. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120118.png +0 -0
  31. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120137.png +0 -0
  32. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120201.png +0 -0
  33. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_134529.png +0 -0
  34. package/lib/scriptLoader.js +1 -13
  35. package/lib/server.js +1 -3546
  36. package/package.json +14 -3
  37. package/scripts/shell/android_device_control.enc +1 -1
  38. package/scripts/shell/connect_android_usb_multi_final.enc +1 -1
  39. package/scripts/shell/connect_android_wireless.enc +1 -1
  40. package/scripts/shell/connect_android_wireless_multi_final.enc +1 -1
  41. package/scripts/shell/connect_ios_usb_multi_final.enc +1 -1
  42. package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -1
  43. package/scripts/shell/ios_device_control.enc +1 -1
  44. package/scripts/compile-shell-scripts.js +0 -208
  45. package/scripts/encrypt-shell-simple.js +0 -58
  46. package/scripts/obfuscate-shell.js +0 -160
  47. package/scripts/shell/apps_presets.conf +0 -271
  48. package/scripts/shell/devices.conf +0 -24
  49. /package/lib/frontend/static/js/{main.26a24c5c.js.LICENSE.txt → main.81eae090.js.LICENSE.txt} +0 -0
package/lib/doctor.js CHANGED
@@ -1,94 +1 @@
1
- /**
2
- * System requirements checker for Devicely
3
- */
4
-
5
- const { execSync } = require('child_process');
6
- const chalk = require('chalk');
7
-
8
- function checkCommand(command, name) {
9
- try {
10
- execSync(`which ${command}`, { stdio: 'ignore' });
11
- console.log(`${chalk.green('✓')} ${name} installed`);
12
- return true;
13
- } catch (error) {
14
- console.log(`${chalk.red('✗')} ${name} not found`);
15
- return false;
16
- }
17
- }
18
-
19
- function getVersion(command) {
20
- try {
21
- const version = execSync(command, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] });
22
- return version.trim().split('\n')[0];
23
- } catch (error) {
24
- return 'Unknown';
25
- }
26
- }
27
-
28
- async function checkDoctor() {
29
- console.log('\n📋 System Requirements Check\n');
30
-
31
- let allGood = true;
32
-
33
- // Node.js
34
- console.log(chalk.bold('Node.js:'));
35
- const nodeVersion = process.version;
36
- console.log(`${chalk.green('✓')} Version: ${nodeVersion}\n`);
37
-
38
- // iOS Tools
39
- console.log(chalk.bold('iOS Automation Tools:'));
40
- const hasXcode = checkCommand('xcodebuild', 'Xcode');
41
- const hasIdevice = checkCommand('idevice_id', 'libimobiledevice');
42
- const hasIproxy = checkCommand('iproxy', 'usbmuxd');
43
- allGood = allGood && hasXcode && hasIdevice && hasIproxy;
44
- console.log('');
45
-
46
- // Android Tools
47
- console.log(chalk.bold('Android Automation Tools:'));
48
- const hasAdb = checkCommand('adb', 'Android Debug Bridge (adb)');
49
- allGood = allGood && hasAdb;
50
-
51
- if (hasAdb) {
52
- const adbVersion = getVersion('adb --version');
53
- console.log(` Version: ${adbVersion}`);
54
- }
55
- console.log('');
56
-
57
- // Python (for UIAutomator2)
58
- console.log(chalk.bold('Python:'));
59
- const hasPython = checkCommand('python3', 'Python 3');
60
- if (hasPython) {
61
- const pythonVersion = getVersion('python3 --version');
62
- console.log(` Version: ${pythonVersion}`);
63
- }
64
- console.log('');
65
-
66
- // Summary
67
- if (allGood) {
68
- console.log(chalk.green.bold('✅ All requirements met!'));
69
- console.log(chalk.gray('\nYou can start using Devicely with: devicely start'));
70
- } else {
71
- console.log(chalk.yellow.bold('⚠️ Some requirements are missing'));
72
- console.log(chalk.gray('\n📖 Installation Guide:'));
73
-
74
- if (!hasIdevice || !hasIproxy) {
75
- console.log(chalk.gray('\nFor iOS support:'));
76
- console.log(' brew install libimobiledevice usbmuxd');
77
- }
78
-
79
- if (!hasAdb) {
80
- console.log(chalk.gray('\nFor Android support:'));
81
- console.log(' brew install android-platform-tools');
82
- }
83
-
84
- if (!hasPython) {
85
- console.log(chalk.gray('\nFor Python:'));
86
- console.log(' brew install python3');
87
- }
88
- }
89
- console.log('');
90
- }
91
-
92
- module.exports = {
93
- checkDoctor
94
- };
1
+ function _0x402a(_0x502caa,_0x1cce96){_0x502caa=_0x502caa-0x1cd;const _0x354d4b=_0x354d();let _0x402a5d=_0x354d4b[_0x502caa];if(_0x402a['yxgNCb']===undefined){var _0x117432=function(_0x204089){const _0xc22e7f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x286208='',_0x5636ab='';for(let _0x19489d=0x0,_0x5a9f59,_0x2c0870,_0x512264=0x0;_0x2c0870=_0x204089['charAt'](_0x512264++);~_0x2c0870&&(_0x5a9f59=_0x19489d%0x4?_0x5a9f59*0x40+_0x2c0870:_0x2c0870,_0x19489d++%0x4)?_0x286208+=String['fromCharCode'](0xff&_0x5a9f59>>(-0x2*_0x19489d&0x6)):0x0){_0x2c0870=_0xc22e7f['indexOf'](_0x2c0870);}for(let _0x53f72c=0x0,_0x1ce311=_0x286208['length'];_0x53f72c<_0x1ce311;_0x53f72c++){_0x5636ab+='%'+('00'+_0x286208['charCodeAt'](_0x53f72c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5636ab);};_0x402a['AcQXzi']=_0x117432,_0x402a['nTvsxy']={},_0x402a['yxgNCb']=!![];}const _0x558978=_0x354d4b[0x0],_0x8b2fa7=_0x502caa+_0x558978,_0x36d2e2=_0x402a['nTvsxy'][_0x8b2fa7];return!_0x36d2e2?(_0x402a5d=_0x402a['AcQXzi'](_0x402a5d),_0x402a['nTvsxy'][_0x8b2fa7]=_0x402a5d):_0x402a5d=_0x36d2e2,_0x402a5d;}const _0x3afea8=_0x402a;(function(_0x1cb478,_0x4a2e98){const _0x5e9f97=_0x402a,_0x2eb98c=_0x1cb478();while(!![]){try{const _0x177919=-parseInt(_0x5e9f97(0x208))/0x1*(parseInt(_0x5e9f97(0x221))/0x2)+parseInt(_0x5e9f97(0x20d))/0x3*(-parseInt(_0x5e9f97(0x20c))/0x4)+parseInt(_0x5e9f97(0x1e9))/0x5*(parseInt(_0x5e9f97(0x201))/0x6)+-parseInt(_0x5e9f97(0x21b))/0x7*(parseInt(_0x5e9f97(0x1d7))/0x8)+-parseInt(_0x5e9f97(0x1ec))/0x9*(parseInt(_0x5e9f97(0x219))/0xa)+-parseInt(_0x5e9f97(0x1dd))/0xb+parseInt(_0x5e9f97(0x225))/0xc;if(_0x177919===_0x4a2e98)break;else _0x2eb98c['push'](_0x2eb98c['shift']());}catch(_0x257607){_0x2eb98c['push'](_0x2eb98c['shift']());}}}(_0x354d,0xef46c));const {execSync}=require(_0x3afea8(0x1fe)),chalk=require('chalk');function checkCommand(_0x466b7a,_0x28d8e0){const _0x557435=_0x3afea8,_0x4785c0={'EJCqB':function(_0x5ee9ed,_0x1bc56e,_0x1769df){return _0x5ee9ed(_0x1bc56e,_0x1769df);},'HnXUX':_0x557435(0x21f),'GyTMs':'pipe','MVfKk':_0x557435(0x211),'pSdNi':_0x557435(0x232),'SNcKW':function(_0x16e5ec,_0xbbaa2f){return _0x16e5ec===_0xbbaa2f;},'abSyZ':_0x557435(0x231),'OAXYb':'xHdde'};try{return _0x4785c0[_0x557435(0x237)](execSync,_0x557435(0x1eb)+_0x466b7a,{'stdio':_0x4785c0[_0x557435(0x217)]}),console['log'](chalk[_0x557435(0x1f2)]('✓')+'\x20'+_0x28d8e0+'\x20installed'),!![];}catch(_0x2a0886){if(_0x4785c0[_0x557435(0x213)](_0x4785c0[_0x557435(0x234)],_0x4785c0[_0x557435(0x235)]))try{const _0x743bed=_0x4785c0[_0x557435(0x237)](_0x51eb33,_0x345253,{'encoding':_0x4785c0[_0x557435(0x1de)],'stdio':[_0x4785c0[_0x557435(0x22e)],_0x4785c0[_0x557435(0x22e)],_0x557435(0x232)]});return _0x743bed[_0x557435(0x1e3)]()[_0x557435(0x220)]('\x0a')[0x0];}catch(_0xf4e5ed){return _0x4785c0[_0x557435(0x1e8)];}else return console[_0x557435(0x227)](chalk[_0x557435(0x215)]('✗')+'\x20'+_0x28d8e0+'\x20not\x20found'),![];}}function getVersion(_0x3b95b6){const _0x3cd229=_0x3afea8,_0x4ddaf3={'kIaUS':_0x3cd229(0x205),'fBFAY':'\x0a📖\x20Installation\x20Guide:','bqFva':_0x3cd229(0x200),'vzSix':_0x3cd229(0x20a),'ITwcR':_0x3cd229(0x1f9),'rGhtE':_0x3cd229(0x229),'vqTPC':_0x3cd229(0x216),'OgHca':_0x3cd229(0x22f),'kNLhk':function(_0x316147,_0x2f1039){return _0x316147===_0x2f1039;},'Hlxoe':_0x3cd229(0x1f0),'CFszW':function(_0x5112ea,_0x369e74,_0x9e741a){return _0x5112ea(_0x369e74,_0x9e741a);},'NGBWb':_0x3cd229(0x21f),'WXpWH':_0x3cd229(0x1fc),'OuAGX':'ignore'};try{if(_0x4ddaf3[_0x3cd229(0x1e4)](_0x4ddaf3[_0x3cd229(0x1d1)],_0x4ddaf3[_0x3cd229(0x1d1)])){const _0x5aee8e=_0x4ddaf3[_0x3cd229(0x226)](execSync,_0x3b95b6,{'encoding':_0x4ddaf3['NGBWb'],'stdio':[_0x4ddaf3[_0x3cd229(0x203)],_0x4ddaf3[_0x3cd229(0x203)],_0x4ddaf3['OuAGX']]});return _0x5aee8e[_0x3cd229(0x1e3)]()[_0x3cd229(0x220)]('\x0a')[0x0];}else _0x32621c[_0x3cd229(0x227)](_0x352f8c[_0x3cd229(0x1fa)]['bold'](_0x4ddaf3[_0x3cd229(0x1f8)])),_0x5b4d59[_0x3cd229(0x227)](_0x379657['gray'](_0x4ddaf3[_0x3cd229(0x233)])),(!_0x6bb292||!_0x48bad6)&&(_0x41a8c9[_0x3cd229(0x227)](_0x45b448['gray'](_0x4ddaf3[_0x3cd229(0x207)])),_0xa224ef[_0x3cd229(0x227)](_0x4ddaf3[_0x3cd229(0x1e5)])),!_0x44320e&&(_0x4e6ce8['log'](_0x5e5fe0['gray'](_0x4ddaf3[_0x3cd229(0x1d9)])),_0x228b93[_0x3cd229(0x227)](_0x4ddaf3[_0x3cd229(0x1fd)])),!_0x26ee2d&&(_0x55b616[_0x3cd229(0x227)](_0x69f882[_0x3cd229(0x236)](_0x4ddaf3[_0x3cd229(0x1ff)])),_0x33bf5a[_0x3cd229(0x227)](_0x4ddaf3['OgHca']));}catch(_0x4006eb){return _0x3cd229(0x211);}}async function checkDoctor(){const _0x202391=_0x3afea8,_0x2684c0={'oajXM':function(_0x405f40,_0x1ee25f){return _0x405f40(_0x1ee25f);},'mlNyH':'adb\x20--version','BvWnZ':_0x202391(0x1f9),'kQyJC':_0x202391(0x229),'tcBUx':_0x202391(0x216),'pmEte':'Node.js:','qmOHm':_0x202391(0x218),'BxZIG':function(_0x3f73cd,_0x10037e,_0x4c51f8){return _0x3f73cd(_0x10037e,_0x4c51f8);},'HuiNu':_0x202391(0x1f1),'WqCRr':_0x202391(0x20b),'IuwMq':function(_0x59faae,_0xfcd7bf,_0x5514e2){return _0x59faae(_0xfcd7bf,_0x5514e2);},'WyXkn':_0x202391(0x1f5),'msgII':_0x202391(0x1ef),'gOYUh':_0x202391(0x239),'ZmUCc':function(_0x32ea10,_0x335f89){return _0x32ea10&&_0x335f89;},'tEVcT':_0x202391(0x1e6),'xYpnr':'adb','zfGcT':'Android\x20Debug\x20Bridge\x20(adb)','HEhvt':function(_0x37f40f,_0x28e214){return _0x37f40f&&_0x28e214;},'RlWkh':function(_0x477627,_0x53c7c6){return _0x477627===_0x53c7c6;},'qUGoA':'Hakmk','dpIgG':'HLMjU','WhJMy':_0x202391(0x228),'NOJhj':_0x202391(0x222),'Yzexa':_0x202391(0x21d),'wjdDT':function(_0x585920,_0x491a82){return _0x585920!==_0x491a82;},'mfmTA':_0x202391(0x1cf),'oXjiV':_0x202391(0x1df),'LwAhd':_0x202391(0x1f3),'DrubH':function(_0x3e10c7,_0x1b79ba){return _0x3e10c7===_0x1b79ba;},'WVKpc':_0x202391(0x214),'Grnmb':'\x0aFor\x20iOS\x20support:','oCkkA':_0x202391(0x20a),'vjRsU':_0x202391(0x22f)};console['log']('\x0a📋\x20System\x20Requirements\x20Check\x0a');let _0x32ca5f=!![];console[_0x202391(0x227)](chalk[_0x202391(0x230)](_0x2684c0[_0x202391(0x21e)]));const _0x25bedc=process[_0x202391(0x1ee)];console['log'](chalk[_0x202391(0x1f2)]('✓')+_0x202391(0x1f6)+_0x25bedc+'\x0a'),console[_0x202391(0x227)](chalk[_0x202391(0x230)](_0x2684c0[_0x202391(0x209)]));const _0x1c4428=_0x2684c0[_0x202391(0x1e7)](checkCommand,_0x2684c0[_0x202391(0x1cd)],_0x2684c0[_0x202391(0x224)]),_0x1f27ad=_0x2684c0[_0x202391(0x1db)](checkCommand,_0x2684c0[_0x202391(0x21c)],_0x2684c0[_0x202391(0x1f4)]),_0x3d9d43=_0x2684c0['IuwMq'](checkCommand,_0x2684c0[_0x202391(0x1dc)],_0x202391(0x1e2));_0x32ca5f=_0x2684c0[_0x202391(0x204)](_0x32ca5f,_0x1c4428)&&_0x1f27ad&&_0x3d9d43,console[_0x202391(0x227)](''),console[_0x202391(0x227)](chalk['bold'](_0x2684c0[_0x202391(0x1ea)]));const _0x3b91d8=checkCommand(_0x2684c0[_0x202391(0x1d4)],_0x2684c0[_0x202391(0x202)]);_0x32ca5f=_0x2684c0[_0x202391(0x223)](_0x32ca5f,_0x3b91d8);if(_0x3b91d8){if(_0x2684c0[_0x202391(0x21a)](_0x2684c0[_0x202391(0x22a)],_0x2684c0[_0x202391(0x22b)])){const _0x52c5b3=_0x2684c0[_0x202391(0x206)](_0x40f63a,_0x2684c0[_0x202391(0x1e0)]);_0x37e222[_0x202391(0x227)](_0x202391(0x1e1)+_0x52c5b3);}else{const _0x42aea2=getVersion(_0x2684c0['mlNyH']);console['log'](_0x202391(0x1e1)+_0x42aea2);}}console['log'](''),console['log'](chalk[_0x202391(0x230)](_0x202391(0x238)));const _0x1e3ba9=_0x2684c0[_0x202391(0x1e7)](checkCommand,_0x202391(0x1d5),_0x2684c0[_0x202391(0x23b)]);if(_0x1e3ba9){if('dxBYX'===_0x2684c0[_0x202391(0x1f7)])_0x22530d['log'](_0x45538a[_0x202391(0x236)](_0x2684c0[_0x202391(0x22c)])),_0x2c1533[_0x202391(0x227)](_0x2684c0[_0x202391(0x1ce)]);else{const _0x194c43=_0x2684c0[_0x202391(0x206)](getVersion,_0x2684c0[_0x202391(0x23a)]);console[_0x202391(0x227)](_0x202391(0x1e1)+_0x194c43);}}console[_0x202391(0x227)]('');if(_0x32ca5f){if(_0x2684c0[_0x202391(0x20f)](_0x2684c0[_0x202391(0x1d3)],_0x2684c0['mfmTA']))return'Unknown';else console[_0x202391(0x227)](chalk['green']['bold'](_0x202391(0x1da))),console['log'](chalk[_0x202391(0x236)](_0x2684c0[_0x202391(0x1d6)]));}else console[_0x202391(0x227)](chalk[_0x202391(0x1fa)][_0x202391(0x230)]('⚠️\x20\x20Some\x20requirements\x20are\x20missing')),console[_0x202391(0x227)](chalk['gray'](_0x2684c0[_0x202391(0x1d8)])),(!_0x1f27ad||!_0x3d9d43)&&(_0x2684c0[_0x202391(0x210)](_0x2684c0[_0x202391(0x1d0)],_0x2684c0['WVKpc'])?(console[_0x202391(0x227)](chalk['gray'](_0x2684c0[_0x202391(0x1ed)])),console[_0x202391(0x227)](_0x2684c0[_0x202391(0x212)])):(_0x3b5e0f['log'](_0x2bb18b['gray'](_0x2684c0[_0x202391(0x22d)])),_0x249865[_0x202391(0x227)]('\x20\x20brew\x20install\x20python3'))),!_0x3b91d8&&(console[_0x202391(0x227)](chalk['gray']('\x0aFor\x20Android\x20support:')),console[_0x202391(0x227)](_0x2684c0[_0x202391(0x1ce)])),!_0x1e3ba9&&(console[_0x202391(0x227)](chalk['gray'](_0x2684c0[_0x202391(0x22d)])),console[_0x202391(0x227)](_0x2684c0[_0x202391(0x20e)]));console[_0x202391(0x227)]('');}function _0x354d(){const _0x59cde0=['Ae5Oy0C','sevODNq','v3fduNi','ndq3mJqZotzezg5Yrvm','q0zZELC','Bg9N','uhL0Ag9Uidm','icbICMv3igLUC3rHBgWGyw5KCM9Pzc1WBgf0zM9YBs10B29SCW','CvvhB0e','zhbjz0C','qNzxBLO','DgncvxG','r3Lutxm','icbICMv3igLUC3rHBgWGChL0Ag9UmW','yM9Sza','DLLTrgK','AwDUB3jL','zKjgqvK','ywjtEvO','t0fywwi','z3jHEq','ruPdCui','uhL0Ag9UoG','AxbYB3H5','wxPLEge','v2HktxK','shvPtNu','A1f5sKm','y0LMswG','v1zlCgm','sgX4B2u','zxHWB3j0CW','BwzTvee','EfLWBNi','ChL0Ag9UmW','B1HQAvy','nZe4nfzkzvfKsq','thDbAgq','svr3y1i','4PYfiefSBcbYzxf1AxjLBwvUDhmGBwv0iq','sxv3txe','z09zvwG','nJeXodG2mfjZBenmDG','sg5yvvG','cLLVDsbJyw4GC3rHCNqGDxnPBMCGrgv2AwnLBhKGD2L0AdOGzgv2AwnLBhKGC3rHCNq','BwXoEuG','icbwzxjZAw9UoIa','DxnIBxv4za','DhjPBq','A05mAgS','DNPtAxG','qw5KCM9PzcbbDxrVBwf0Aw9UifrVB2XZoG','qNHAsuC','tvzMs2S','mtm2ndGWteLqzxfq','Devwy1q','D2HPy2GG','ntCZmtG1n2rjzeXgyW','r3jUBwi','DMvYC2LVBG','BgLIAw1VyMLSzwrLDMLJzq','ug1NqLa','EgnVzgvIDwLSza','z3jLzw4','cVcFK5yGsw5ZDgfSBgf0Aw9UieD1AwrLoG','BxnNsuK','AwrLDMLJzv9Pza','ifzLCNnPB246ia','tK9kAgO','A0LHvvm','cKzVCIbbBMrYB2LKihn1ChbVCNq6','EwvSBg93','y2HLy2TeB2n0B3i','CgLWzq','CKDODeu','y2HPBgrFChjVy2vZCW','DNfuuem','cKzVCIbPt1mGC3vWCg9YDdO','mJe2EvvAtfbX','EMzhy1q','v1HWv0G','wM1vq2m','4PQG77IpicbtB21LihjLCxvPCMvTzw50CYbHCMuGBwLZC2LUzW','B2fQwe0','yNfgDMe','mtK2mdu5BgfQv2HJ','Cw1psg0','icbICMv3igLUC3rHBgWGBgLIAw1VyMLSzwrLDMLJzsb1C2jTDxHK','wgnVzgu','ngHgA1vABa','mZCYmdiYoenkvuDuBG','DMPsC1u','D2PKrfq','rhj1yKG','vw5RBM93BG','B0nRA0e','u05Js1C','DNnZCM0','CMvK','cKzVCIbqExrOB246','CfnKtMK','Au9tief1Dg9TyxrPB24Gvg9VBhm6','mtbYu2H4sxO','uMXxA2G','nZa0owj6ug9wBW','v3LyA24','ChL0Ag9UmYaTlxzLCNnPB24','Cg1fDgu','DxrMltG','C3bSAxq','nefACKntwG'];_0x354d=function(){return _0x59cde0;};return _0x354d();}const _0x795e56={};_0x795e56[_0x3afea8(0x1fb)]=checkDoctor,module[_0x3afea8(0x1d2)]=_0x795e56;
package/lib/encryption.js CHANGED
@@ -1,88 +1 @@
1
- /**
2
- * DEVICELY ENCRYPTION CONFIG
3
- * ===========================
4
- * This is the SINGLE SOURCE OF TRUTH for all encryption/decryption
5
- * Both encrypt-shell-simple.js and scriptLoader.js MUST use this
6
- *
7
- * DO NOT modify encryption logic anywhere else!
8
- */
9
-
10
- const crypto = require('crypto');
11
-
12
- const ENCRYPTION_CONFIG = {
13
- algorithm: 'aes-256-cbc',
14
- encoding: {
15
- input: 'utf8',
16
- output: 'hex'
17
- },
18
- keyDerivation: 'sha256',
19
- keySeed: 'devicely-encryption-key-v1'
20
- };
21
-
22
- /**
23
- * Generate encryption key
24
- * Uses package name + seed for consistency
25
- */
26
- function generateKey() {
27
- // Try to load package.json from multiple locations
28
- let packageName = 'devicely';
29
-
30
- try {
31
- // Try npm-package location
32
- const pkg = require('../package.json');
33
- packageName = pkg.name;
34
- } catch (e1) {
35
- try {
36
- // Try dist location
37
- const pkg = require('../../package.json');
38
- packageName = pkg.name;
39
- } catch (e2) {
40
- // Use default
41
- packageName = 'devicely';
42
- }
43
- }
44
-
45
- const keySource = packageName + ENCRYPTION_CONFIG.keySeed;
46
- return crypto.createHash(ENCRYPTION_CONFIG.keyDerivation).update(keySource).digest();
47
- }
48
-
49
- /**
50
- * Encrypt content
51
- */
52
- function encrypt(content) {
53
- const key = generateKey();
54
- const iv = crypto.randomBytes(16);
55
- const cipher = crypto.createCipheriv(ENCRYPTION_CONFIG.algorithm, key, iv);
56
-
57
- let encrypted = cipher.update(content, ENCRYPTION_CONFIG.encoding.input, ENCRYPTION_CONFIG.encoding.output);
58
- encrypted += cipher.final(ENCRYPTION_CONFIG.encoding.output);
59
-
60
- // Return as JSON for clarity and consistency
61
- return JSON.stringify({
62
- iv: iv.toString(ENCRYPTION_CONFIG.encoding.output),
63
- content: encrypted
64
- });
65
- }
66
-
67
- /**
68
- * Decrypt content
69
- */
70
- function decrypt(encryptedData) {
71
- const key = generateKey();
72
- const { iv, content } = JSON.parse(encryptedData);
73
-
74
- const ivBuffer = Buffer.from(iv, ENCRYPTION_CONFIG.encoding.output);
75
- const decipher = crypto.createDecipheriv(ENCRYPTION_CONFIG.algorithm, key, ivBuffer);
76
-
77
- let decrypted = decipher.update(content, ENCRYPTION_CONFIG.encoding.output, ENCRYPTION_CONFIG.encoding.input);
78
- decrypted += decipher.final(ENCRYPTION_CONFIG.encoding.input);
79
-
80
- return decrypted;
81
- }
82
-
83
- module.exports = {
84
- ENCRYPTION_CONFIG,
85
- generateKey,
86
- encrypt,
87
- decrypt
88
- };
1
+ const _0x253566=_0x4b60;function _0x4b60(_0x226ca4,_0x5dbd40){_0x226ca4=_0x226ca4-0x16a;const _0x1ccf43=_0x1ccf();let _0x4b6064=_0x1ccf43[_0x226ca4];if(_0x4b60['reUUWi']===undefined){var _0x5e9d06=function(_0x1bec1f){const _0x57ef59='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1185e0='',_0x551780='';for(let _0x24c976=0x0,_0x2b4db0,_0x49bf5f,_0x247328=0x0;_0x49bf5f=_0x1bec1f['charAt'](_0x247328++);~_0x49bf5f&&(_0x2b4db0=_0x24c976%0x4?_0x2b4db0*0x40+_0x49bf5f:_0x49bf5f,_0x24c976++%0x4)?_0x1185e0+=String['fromCharCode'](0xff&_0x2b4db0>>(-0x2*_0x24c976&0x6)):0x0){_0x49bf5f=_0x57ef59['indexOf'](_0x49bf5f);}for(let _0x5cc351=0x0,_0x39b76e=_0x1185e0['length'];_0x5cc351<_0x39b76e;_0x5cc351++){_0x551780+='%'+('00'+_0x1185e0['charCodeAt'](_0x5cc351)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x551780);};_0x4b60['xCNsAd']=_0x5e9d06,_0x4b60['DofbAo']={},_0x4b60['reUUWi']=!![];}const _0x47793f=_0x1ccf43[0x0],_0x32f557=_0x226ca4+_0x47793f,_0x4027dc=_0x4b60['DofbAo'][_0x32f557];return!_0x4027dc?(_0x4b6064=_0x4b60['xCNsAd'](_0x4b6064),_0x4b60['DofbAo'][_0x32f557]=_0x4b6064):_0x4b6064=_0x4027dc,_0x4b6064;}function _0x1ccf(){const _0x658b31=['Agv4','zw5JB2rPBMC','C2HHmJu2','thnJuvq','tM5rwee','y3jLyxrLq2LWAgvYAxy','DKztuhy','Axfmtvi','yvDdEuW','nJa3mZeWmxbNvKfhrG','ru5duLLqveLptL9dt05gsuC','BxvYExi','swHMzuu','Aw5WDxq','mZvUBvHUzKW','y2PQBuW','t2rhquS','BwLpz2C','A2v5rgvYAxzHDgLVBG','ntC4nZK2txLQq3LM','zgLNzxn0','qM90Dvi','zMPdu2O','tgLcqw4','DLf3zw4','DxbKyxrL','mtm3nZe4mJbOsw1lrgq','zgv2AwnLBhK','mJjMBgDzAee','otG0ndm4AvzMyM5e','BeXdtxC','BwvZC2fNzq','Bwq1','ywzSBhK','lwL2','zgv2AwnLBhKTzw5JCNLWDgLVBI1RzxKTDJe','CgHLuha','B3v0Chv0','zgvJCNLWDa','zw5JCNLWDa','EunAzvq','r1HKBwu','vxLXAee','A2v5u2vLza','zNHAB24','ywXNB3jPDgHT','ywvZlti1nI1JyMm','DMDbC00','wu14t2e','lI4VlI4VBNbTlxbHy2THz2uVCgfJA2fNzs5QC29U','zMLUywW','rgvJCNLWDgLVBIbMywLSzwq6ia','rw5JCNLWDgLVBIbMywLSzwq6ia','BMfTzq','vKzWD3G','oti4ntjZEu5gELy','AgfvvMu','AgDWr3e','mJy5nJyXn2Lzs1zuCG','y3jLyxrLsgfZAa','zevlEKW','s3zrzw0','lI4VlI4VCgfJA2fNzs5QC29U','yuT1DKC','ntu3nZfrCgP2CNe','rhrrvuK','DxrMoa','y3j5ChrV','sfDbDxy','oe9Nt0ztvq'];_0x1ccf=function(){return _0x658b31;};return _0x1ccf();}(function(_0x534f05,_0x1054de){const _0x497d40=_0x4b60,_0x1709cc=_0x534f05();while(!![]){try{const _0x4895fe=parseInt(_0x497d40(0x181))/0x1*(parseInt(_0x497d40(0x1a3))/0x2)+-parseInt(_0x497d40(0x1a4))/0x3+-parseInt(_0x497d40(0x178))/0x4*(parseInt(_0x497d40(0x195))/0x5)+-parseInt(_0x497d40(0x19a))/0x6+-parseInt(_0x497d40(0x17b))/0x7+-parseInt(_0x497d40(0x186))/0x8*(parseInt(_0x497d40(0x190))/0x9)+parseInt(_0x497d40(0x1a1))/0xa;if(_0x4895fe===_0x1054de)break;else _0x1709cc['push'](_0x1709cc['shift']());}catch(_0x25eaaf){_0x1709cc['push'](_0x1709cc['shift']());}}}(_0x1ccf,0x53df4));const crypto=require(_0x253566(0x184)),_0x323ab7={};_0x323ab7[_0x253566(0x194)]=_0x253566(0x183),_0x323ab7[_0x253566(0x1ac)]=_0x253566(0x187);const _0x29f595={};_0x29f595[_0x253566(0x16e)]=_0x253566(0x16f),_0x29f595[_0x253566(0x188)]=_0x323ab7,_0x29f595['keyDerivation']=_0x253566(0x189),_0x29f595[_0x253566(0x16c)]=_0x253566(0x1aa);const ENCRYPTION_CONFIG=_0x29f595;function generateKey(){const _0x74006c=_0x253566,_0x3d0ac2={'aWCyL':function(_0x239c62){return _0x239c62();},'iqLMR':function(_0x27463e){return _0x27463e();},'UqrgO':function(_0x80d8f6){return _0x80d8f6();},'cjjmL':'devicely','aKuvG':_0x74006c(0x171),'KvQem':_0x74006c(0x17a),'ImBSP':function(_0x598884,_0x553445){return _0x598884(_0x553445);},'Mjovk':_0x74006c(0x17f),'yCZeT':function(_0x39d947,_0x4fdb54){return _0x39d947!==_0x4fdb54;},'LscQT':_0x74006c(0x1a8)};let _0x755f95=_0x3d0ac2[_0x74006c(0x196)];try{const _0x241d73=require(_0x74006c(0x172));_0x755f95=_0x241d73[_0x74006c(0x176)];}catch(_0x413e37){if('YtGaM'!==_0x3d0ac2[_0x74006c(0x180)])try{if(_0x3d0ac2[_0x74006c(0x17e)]===_0x3d0ac2[_0x74006c(0x17e)]){const _0x46ef36=_0x3d0ac2['ImBSP'](require,_0x3d0ac2['Mjovk']);_0x755f95=_0x46ef36['name'];}else try{const _0x4bda5f=_0x3d0ac2[_0x74006c(0x18f)](_0x35e8cd),_0x5628be=_0x3d0ac2[_0x74006c(0x18e)](_0x58d259),_0x37d022=_0x3e00f8[_0x74006c(0x18c)](_0x47f941[_0x74006c(0x16e)],_0x4bda5f,_0x5628be);let _0x7ac058=_0x37d022[_0x74006c(0x1a0)](_0x51bb79,_0x3e5486[_0x74006c(0x188)][_0x74006c(0x194)],_0x391d9b[_0x74006c(0x188)]['output']);return _0x7ac058+=_0x37d022[_0x74006c(0x173)](_0x51568f[_0x74006c(0x188)][_0x74006c(0x1ac)]),_0x7ac058;}catch(_0x3078a3){throw new _0x5ff314('Encryption\x20failed:\x20'+_0x3078a3[_0x74006c(0x1a6)]);}}catch(_0x1f1aa9){if(_0x3d0ac2[_0x74006c(0x1af)](_0x3d0ac2[_0x74006c(0x18a)],_0x3d0ac2[_0x74006c(0x18a)])){const _0x32e7ba=_0x59a7cd[_0x74006c(0x16c)]+'-iv';return _0xefe296[_0x74006c(0x17c)](_0x74006c(0x1a7))[_0x74006c(0x1a0)](_0x32e7ba)['digest']();}else _0x755f95=_0x3d0ac2[_0x74006c(0x196)];}else{const _0x17788e=_0x3d0ac2['UqrgO'](_0x53cd51),_0x3a10f5=_0x3d0ac2['iqLMR'](_0x1f8d27),_0x3b1dae=_0x49302a[_0x74006c(0x18c)](_0x344aa5[_0x74006c(0x16e)],_0x17788e,_0x3a10f5);let _0x34f3c5=_0x3b1dae[_0x74006c(0x1a0)](_0x429c1b,_0x226d56['encoding'][_0x74006c(0x194)],_0x135614[_0x74006c(0x188)][_0x74006c(0x1ac)]);return _0x34f3c5+=_0x3b1dae[_0x74006c(0x173)](_0x41fff6['encoding']['output']),_0x34f3c5;}}const _0x27a918=_0x755f95+'-'+ENCRYPTION_CONFIG[_0x74006c(0x16c)];return crypto[_0x74006c(0x17c)](ENCRYPTION_CONFIG[_0x74006c(0x199)])['update'](_0x27a918)[_0x74006c(0x19b)]();}function generateIV(){const _0xb0e570=_0x253566,_0xde6b9a={};_0xde6b9a[_0xb0e570(0x193)]=_0xb0e570(0x1a7);const _0x3ece91=_0xde6b9a,_0x1a1c6e=ENCRYPTION_CONFIG[_0xb0e570(0x16c)]+_0xb0e570(0x1a9);return crypto[_0xb0e570(0x17c)](_0x3ece91['IhfeE'])['update'](_0x1a1c6e)['digest']();}function encrypt(_0x2ac4dc){const _0x75f5b7=_0x253566,_0x31ec34={'miOgg':_0x75f5b7(0x1a2),'HWAuv':function(_0x523e9e,_0x4b6eb3){return _0x523e9e(_0x4b6eb3);},'fjCSj':_0x75f5b7(0x17f),'muryr':function(_0x4a3c78,_0x34ae67){return _0x4a3c78!==_0x34ae67;},'wTnuB':_0x75f5b7(0x170),'vQwen':function(_0x43e546){return _0x43e546();},'phePp':function(_0x3a8ad1){return _0x3a8ad1();},'OdGAK':function(_0x1e930e,_0x334327){return _0x1e930e!==_0x334327;},'BotuR':_0x75f5b7(0x182),'DvOWv':_0x75f5b7(0x179)};try{if(_0x31ec34[_0x75f5b7(0x192)](_0x31ec34['wTnuB'],_0x75f5b7(0x170)))_0x563129=rXtizi[_0x75f5b7(0x198)];else{const _0x584055=_0x31ec34[_0x75f5b7(0x19f)](generateKey),_0x4ced7c=_0x31ec34[_0x75f5b7(0x1ab)](generateIV),_0x26b054=crypto[_0x75f5b7(0x18c)](ENCRYPTION_CONFIG[_0x75f5b7(0x16e)],_0x584055,_0x4ced7c);let _0x57a59f=_0x26b054[_0x75f5b7(0x1a0)](_0x2ac4dc,ENCRYPTION_CONFIG[_0x75f5b7(0x188)]['input'],ENCRYPTION_CONFIG[_0x75f5b7(0x188)][_0x75f5b7(0x1ac)]);return _0x57a59f+=_0x26b054['final'](ENCRYPTION_CONFIG[_0x75f5b7(0x188)][_0x75f5b7(0x1ac)]),_0x57a59f;}}catch(_0x2a682f){if(_0x31ec34[_0x75f5b7(0x197)](_0x31ec34[_0x75f5b7(0x19c)],_0x31ec34['DvOWv']))throw new Error(_0x75f5b7(0x175)+_0x2a682f['message']);else{const _0xdeb022=rXtizi[_0x75f5b7(0x185)](_0x544e7b,rXtizi[_0x75f5b7(0x19d)]);_0x53eaaa=_0xdeb022[_0x75f5b7(0x176)];}}}function decrypt(_0x1aa39e){const _0x379c22=_0x253566,_0x25abbd={'GXdme':'../../npm-package/package.json','UyqhA':_0x379c22(0x17f),'vFSPv':'devicely','fxZon':function(_0x2dfa6f,_0x509655){return _0x2dfa6f===_0x509655;},'lLCMw':_0x379c22(0x177),'dEKzL':function(_0x23273d){return _0x23273d();},'LiBAn':function(_0x5907b3){return _0x5907b3();},'NnQXA':'GxDQi'};try{if(_0x25abbd[_0x379c22(0x16d)](_0x379c22(0x177),_0x25abbd[_0x379c22(0x1a5)])){const _0x1069eb=_0x25abbd[_0x379c22(0x17d)](generateKey),_0x5d7fb8=_0x25abbd[_0x379c22(0x19e)](generateIV),_0xe751cd=crypto['createDecipheriv'](ENCRYPTION_CONFIG[_0x379c22(0x16e)],_0x1069eb,_0x5d7fb8);let _0xa18f=_0xe751cd[_0x379c22(0x1a0)](_0x1aa39e,ENCRYPTION_CONFIG['encoding'][_0x379c22(0x1ac)],ENCRYPTION_CONFIG['encoding'][_0x379c22(0x194)]);return _0xa18f+=_0xe751cd[_0x379c22(0x173)](ENCRYPTION_CONFIG[_0x379c22(0x188)][_0x379c22(0x194)]),_0xa18f;}else{const _0xff509b=_0x24c976(miYvpI[_0x379c22(0x16a)]);_0x2b4db0=_0xff509b['name'];}}catch(_0x1c2616){if(_0x25abbd[_0x379c22(0x16d)](_0x25abbd[_0x379c22(0x18b)],_0x25abbd[_0x379c22(0x18b)]))throw new Error(_0x379c22(0x174)+_0x1c2616['message']);else try{const _0x3db28=_0x21932a(miYvpI[_0x379c22(0x16b)]);_0x1a8d58=_0x3db28[_0x379c22(0x176)];}catch(_0x58e37d){_0x1ef57d=miYvpI[_0x379c22(0x18d)];}}}const _0x6270c3={};_0x6270c3[_0x253566(0x1ae)]=encrypt,_0x6270c3[_0x253566(0x1ad)]=decrypt,_0x6270c3[_0x253566(0x191)]=ENCRYPTION_CONFIG,module['exports']=_0x6270c3;
package/lib/executor.js CHANGED
@@ -1,104 +1 @@
1
- /**
2
- * Command executor for Devicely CLI
3
- */
4
-
5
- const { spawn } = require('child_process');
6
- const path = require('path');
7
- const chalk = require('chalk');
8
-
9
- // Import deviceDetection from appropriate location
10
- let discoverAllDevices;
11
- try {
12
- ({ discoverAllDevices } = require('./deviceDetection'));
13
- } catch (err) {
14
- ({ discoverAllDevices } = require('../../deviceDetection'));
15
- }
16
-
17
- async function executeCommand(command, options = {}) {
18
- const devices = await discoverAllDevices();
19
-
20
- if (!devices || devices.length === 0) {
21
- console.log(chalk.red('\n❌ No devices found'));
22
- return;
23
- }
24
-
25
- let targetDevices = devices.filter(d => d.status === 'online');
26
-
27
- if (options.device) {
28
- targetDevices = devices.filter(d =>
29
- d.name === options.device && d.status === 'online'
30
- );
31
-
32
- if (targetDevices.length === 0) {
33
- console.log(chalk.red(`\n❌ Device "${options.device}" not found or offline`));
34
- return;
35
- }
36
- }
37
-
38
- if (targetDevices.length === 0) {
39
- console.log(chalk.yellow('\n⚠️ No online devices found'));
40
- return;
41
- }
42
-
43
- console.log(chalk.cyan(`\nExecuting on ${targetDevices.length} device(s):`));
44
- targetDevices.forEach(d => console.log(` • ${d.name}`));
45
- console.log('');
46
-
47
- const scriptDir = path.join(__dirname, '../../scripts/shell');
48
-
49
- for (const device of targetDevices) {
50
- const platform = device.platform;
51
- const type = device.type;
52
-
53
- let scriptName;
54
- if (platform === 'ios' && type === 'usb') {
55
- scriptName = 'connect_ios_usb_multi_final.sh';
56
- } else if (platform === 'ios' && type === 'wireless') {
57
- scriptName = 'connect_ios_wireless_multi_final.sh';
58
- } else if (platform === 'android' && type === 'usb') {
59
- scriptName = 'connect_android_usb_multi_final.sh';
60
- } else if (platform === 'android' && type === 'wireless') {
61
- scriptName = 'connect_android_wireless_multi_final.sh';
62
- } else {
63
- console.log(chalk.yellow(`⚠️ Unsupported device type: ${platform}-${type}`));
64
- continue;
65
- }
66
-
67
- const scriptPath = path.join(scriptDir, scriptName);
68
-
69
- console.log(chalk.blue(`[${device.name}] Running command...`));
70
-
71
- const child = spawn(scriptPath, ['-d', device.name, ...command.split(' ')], {
72
- stdio: 'pipe'
73
- });
74
-
75
- child.stdout.on('data', (data) => {
76
- const lines = data.toString().split('\n').filter(l => l.trim());
77
- lines.forEach(line => {
78
- console.log(chalk.gray(` ${line}`));
79
- });
80
- });
81
-
82
- child.stderr.on('data', (data) => {
83
- const lines = data.toString().split('\n').filter(l => l.trim());
84
- lines.forEach(line => {
85
- console.log(chalk.red(` ${line}`));
86
- });
87
- });
88
-
89
- await new Promise((resolve) => {
90
- child.on('close', (code) => {
91
- if (code === 0) {
92
- console.log(chalk.green(`[${device.name}] ✅ Success\n`));
93
- } else {
94
- console.log(chalk.red(`[${device.name}] ❌ Failed (exit code: ${code})\n`));
95
- }
96
- resolve();
97
- });
98
- });
99
- }
100
- }
101
-
102
- module.exports = {
103
- executeCommand
104
- };
1
+ const _0x3d969d=_0x1292;(function(_0xf3b221,_0x2e8c15){const _0xe0790d=_0x1292,_0xdeb265=_0xf3b221();while(!![]){try{const _0x592a92=parseInt(_0xe0790d(0xd5))/0x1*(parseInt(_0xe0790d(0xc1))/0x2)+parseInt(_0xe0790d(0x9e))/0x3*(-parseInt(_0xe0790d(0xcb))/0x4)+parseInt(_0xe0790d(0x8d))/0x5*(-parseInt(_0xe0790d(0xea))/0x6)+-parseInt(_0xe0790d(0x97))/0x7+-parseInt(_0xe0790d(0xbf))/0x8*(parseInt(_0xe0790d(0xe9))/0x9)+-parseInt(_0xe0790d(0xa9))/0xa+-parseInt(_0xe0790d(0x95))/0xb*(-parseInt(_0xe0790d(0xa2))/0xc);if(_0x592a92===_0x2e8c15)break;else _0xdeb265['push'](_0xdeb265['shift']());}catch(_0x52baf6){_0xdeb265['push'](_0xdeb265['shift']());}}}(_0x52c9,0xd57a3));const {spawn}=require(_0x3d969d(0xdb)),path=require(_0x3d969d(0xb8)),chalk=require(_0x3d969d(0xac));let discoverAllDevices;function _0x1292(_0x576571,_0x177586){_0x576571=_0x576571-0x8c;const _0x52c9cb=_0x52c9();let _0x12921d=_0x52c9cb[_0x576571];if(_0x1292['kNFMCs']===undefined){var _0x4cb725=function(_0x14d575){const _0x1be6be='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3d1902='',_0x769d0f='';for(let _0xf9c57e=0x0,_0x163d5c,_0x4fc584,_0x2f68ca=0x0;_0x4fc584=_0x14d575['charAt'](_0x2f68ca++);~_0x4fc584&&(_0x163d5c=_0xf9c57e%0x4?_0x163d5c*0x40+_0x4fc584:_0x4fc584,_0xf9c57e++%0x4)?_0x3d1902+=String['fromCharCode'](0xff&_0x163d5c>>(-0x2*_0xf9c57e&0x6)):0x0){_0x4fc584=_0x1be6be['indexOf'](_0x4fc584);}for(let _0x205f60=0x0,_0x3723de=_0x3d1902['length'];_0x205f60<_0x3723de;_0x205f60++){_0x769d0f+='%'+('00'+_0x3d1902['charCodeAt'](_0x205f60)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x769d0f);};_0x1292['zQQmaA']=_0x4cb725,_0x1292['LJHJqd']={},_0x1292['kNFMCs']=!![];}const _0x2cd0c5=_0x52c9cb[0x0],_0xb9f010=_0x576571+_0x2cd0c5,_0x305802=_0x1292['LJHJqd'][_0xb9f010];return!_0x305802?(_0x12921d=_0x1292['zQQmaA'](_0x12921d),_0x1292['LJHJqd'][_0xb9f010]=_0x12921d):_0x12921d=_0x305802,_0x12921d;}function _0x52c9(){const _0x414f3d=['mZG5nMjyEMruCG','lI4VlI4VC2nYAxb0CY9ZAgvSBa','nJr2wfj1vNe','zgf0yq','igrLDMLJzsHZktO','uvvIwMy','y29UBMvJDf9PB3nFDxnIx211BhrPx2zPBMfSlNnO','qKDRqK4','zM9YrwfJAa','z3jHEq','cUkDJcbezxzPy2uGiG','DhjPBq','ohrowMvXwG','AM9PBG','CgLWzq','thzOyKe','zgv2AwnL','uxbZDgm','y2XVC2u','xsdINyWGrMfPBgvKicHLEgL0ignVzgu6ia','EuHbwMu','Dg9tDhjPBMC','mta0mdLwEvbLD0u','B1POvei','z3jLzw4','ufj5sKG','BMfTzq','y0npD3q','y2HPBgrFChjVy2vZCW','B25SAw5L','DNPfB1e','y3HMzxq','vhDeuKu','lI9KzxzPy2vezxrLy3rPB24','rhvIC1q','z2jgu3e','zMLSDgvY','C3rKzxjY','rfzMCeG','zefOrK0','ueHvwgu','cKv4zwn1DgLUzYbVBIa','mtK4nJnnrML3Aum','odCZmJeWu0rkr1PM','CMfrqNe','uNjtCgi','C3rHDhvZ','xsbsDw5UAw5NignVBw1HBMqUlI4','rhvMwM4','cUkAOo+4JYaGtM8GB25SAw5LigrLDMLJzxmGzM91BMq','yu5dBNm','DwTvvhO','EwvSBg93','zxHWB3j0CW','Eu92rNq','zNLxvhO','C3bSAxq','mJvrrvD2s28','cUkDJcboBYbKzxzPy2vZigzVDw5K','EfrkBMS','BgvUz3rO','yuzvwLC','s3jOBve','4PQG77IpicbvBNn1ChbVCNrLzcbKzxzPy2uGDhLWztOG','y29UBMvJDf9HBMrYB2LKx3DPCMvSzxnZx211BhrPx2zPBMfSlNnO','odu4Bu9NA2Hd','lI4VlI4Vzgv2AwnLrgv0zwn0Aw9U','ode0mdqXouDkB0n6uW','D0Xzs0S','uezIugC','Bvb6s3a','y2vfuw4','tvnbENe','yw5KCM9Pza','mtyZmJm4mxzKzejADG','Bg9N','iIbUB3qGzM91BMqGB3iGB2zMBgLUzq','zxHLy3v0zunVBw1HBMq','odiWotmYEunKy0fS','CMvK','DhLWzq','zxPjEhq','y25hs3K','DxnI','yMX1zq','nZqXmdG4mhvry1DAvq','zvPhBwy','thfHAK0','y2HHBgS','Du1cu24','v1n0Bwq','y3LHBG','D2DdtNG','Aw9Z','y1joy2W','B1nWAgi','uwDUBu0','C3rKB3v0','CLjbtgG','xsdINiuGu3vJy2vZCWO','Cgf0Aa','wgzpwve','CMv1zgO','zfrpAxe','CgXHDgzVCM0','icdIGkiG','CMfoqMK'];_0x52c9=function(){return _0x414f3d;};return _0x52c9();}try{({discoverAllDevices}=require(_0x3d969d(0xe0)));}catch(_0x50c27a){({discoverAllDevices}=require(_0x3d969d(0x96)));}async function executeCommand(_0x130bc5,_0xb33bff={}){const _0x3ed1d1=_0x3d969d,_0x1eb0ec={'JsiUt':_0x3ed1d1(0xf0),'uMBSn':_0x3ed1d1(0xc5),'DubsT':'connect_ios_wireless_multi_final.sh','ezIxt':function(_0x3ef7d9,_0xa747f3){return _0x3ef7d9===_0xa747f3;},'yOvFt':_0x3ed1d1(0xb9),'raQBq':function(_0x1fda70,_0x21a862){return _0x1fda70!==_0x21a862;},'aFUZW':_0x3ed1d1(0xa6),'fyWTz':function(_0x499e28,_0x560883){return _0x499e28===_0x560883;},'LqajM':function(_0x562d73,_0x27ab4d){return _0x562d73===_0x27ab4d;},'yHAZe':_0x3ed1d1(0xd8),'GekRo':function(_0x467097){return _0x467097();},'wLYKK':_0x3ed1d1(0xd1),'oSphb':function(_0x292451){return _0x292451();},'RrSpb':_0x3ed1d1(0x8e),'ukUTz':function(_0x260b4e,_0x4caa66){return _0x260b4e===_0x4caa66;},'oZhTB':_0x3ed1d1(0xba),'gnvWC':'nuDHQ','XDhhO':_0x3ed1d1(0xae),'Qpstc':_0x3ed1d1(0xc0),'cRNcl':_0x3ed1d1(0xe7),'IbnEO':function(_0x4b0145,_0x26717b){return _0x4b0145===_0x26717b;},'DufZn':_0x3ed1d1(0xb1),'eZGmf':function(_0x391adf,_0x5e9dff){return _0x391adf===_0x5e9dff;},'rRALh':_0x3ed1d1(0xa7),'gbFSq':function(_0x1dde0c,_0x2ab7ba){return _0x1dde0c===_0x2ab7ba;},'cCOwt':function(_0x4d4ee7,_0x5d7607){return _0x4d4ee7===_0x5d7607;},'MSAzq':'wireless','wgCNx':function(_0x212e6b,_0x793b4f){return _0x212e6b===_0x793b4f;},'TwDRE':_0x3ed1d1(0xdd),'QgnmM':function(_0x23879b,_0x57573b){return _0x23879b===_0x57573b;},'raNBi':_0x3ed1d1(0x9d),'xTJnk':'connect_android_usb_multi_final.sh','kHIYH':_0x3ed1d1(0xce),'ceEQn':function(_0x10b6ba,_0x5196b1,_0x9f6f05,_0x4c5e74){return _0x10b6ba(_0x5196b1,_0x9f6f05,_0x4c5e74);},'KrhmQ':_0x3ed1d1(0xcd),'PFbPg':_0x3ed1d1(0xc2)},_0xce15b=await _0x1eb0ec[_0x3ed1d1(0xb3)](discoverAllDevices);if(!_0xce15b||_0x1eb0ec[_0x3ed1d1(0xf6)](_0xce15b[_0x3ed1d1(0x90)],0x0)){console[_0x3ed1d1(0x9f)](chalk[_0x3ed1d1(0xa3)](_0x1eb0ec[_0x3ed1d1(0xec)]));return;}let _0x3ccef3=_0xce15b[_0x3ed1d1(0xe3)](_0x29415e=>_0x29415e[_0x3ed1d1(0xed)]===_0x3ed1d1(0xdc));if(_0xb33bff[_0x3ed1d1(0xcf)]){if(_0x1eb0ec['ukUTz']('wcDfj',_0x1eb0ec[_0x3ed1d1(0xd6)])){_0x1edfc1[_0x3ed1d1(0x9f)](_0x96d86c[_0x3ed1d1(0xf3)](_0x1eb0ec['JsiUt']));return;}else{_0x3ccef3=_0xce15b[_0x3ed1d1(0xe3)](_0xf099e1=>_0xf099e1['name']===_0xb33bff[_0x3ed1d1(0xcf)]&&_0xf099e1[_0x3ed1d1(0xed)]===_0x3ed1d1(0xdc));if(_0x3ccef3[_0x3ed1d1(0x90)]===0x0){console['log'](chalk['red'](_0x3ed1d1(0xc9)+_0xb33bff[_0x3ed1d1(0xcf)]+_0x3ed1d1(0xa0)));return;}}}if(_0x1eb0ec[_0x3ed1d1(0xf6)](_0x3ccef3[_0x3ed1d1(0x90)],0x0)){if(_0x1eb0ec[_0x3ed1d1(0xa5)](_0x1eb0ec['gnvWC'],_0x1eb0ec['XDhhO'])){_0xf8c254[_0x3ed1d1(0x9f)](_0x1ccd8['red'](_0x3ed1d1(0xc9)+_0x12b27b[_0x3ed1d1(0xcf)]+_0x3ed1d1(0xa0)));return;}else{console[_0x3ed1d1(0x9f)](chalk[_0x3ed1d1(0xf3)](_0x1eb0ec['JsiUt']));return;}}console[_0x3ed1d1(0x9f)](chalk[_0x3ed1d1(0xaf)](_0x3ed1d1(0xe8)+_0x3ccef3[_0x3ed1d1(0x90)]+_0x3ed1d1(0xc3))),_0x3ccef3['forEach'](_0x2f3254=>console[_0x3ed1d1(0x9f)](_0x3ed1d1(0xbd)+_0x2f3254['name'])),console['log']('');const _0x29845e=path[_0x3ed1d1(0xcc)](__dirname,_0x1eb0ec[_0x3ed1d1(0xd0)]);for(const _0xed9230 of _0x3ccef3){if(_0x1eb0ec[_0x3ed1d1(0xf2)](_0x1eb0ec[_0x3ed1d1(0xb2)],_0x1eb0ec[_0x3ed1d1(0xb2)])){const _0x2b0666=_0xed9230[_0x3ed1d1(0xbc)],_0x5f5ee1=_0xed9230[_0x3ed1d1(0xa4)];let _0x44aa6d;if(_0x1eb0ec['IbnEO'](_0x2b0666,_0x1eb0ec[_0x3ed1d1(0xef)])&&_0x1eb0ec[_0x3ed1d1(0xaa)](_0x5f5ee1,_0x1eb0ec[_0x3ed1d1(0xb6)]))_0x44aa6d=_0x1eb0ec[_0x3ed1d1(0xad)];else{if(_0x1eb0ec[_0x3ed1d1(0xe2)](_0x2b0666,_0x1eb0ec['DufZn'])&&_0x1eb0ec[_0x3ed1d1(0xda)](_0x5f5ee1,_0x1eb0ec[_0x3ed1d1(0x9c)]))_0x1eb0ec[_0x3ed1d1(0xb0)](_0x3ed1d1(0xc6),_0x1eb0ec[_0x3ed1d1(0xdf)])?_0x3a115c['log'](_0x573374[_0x3ed1d1(0xc8)]('\x20\x20'+_0x370f65)):_0x44aa6d=_0x1eb0ec[_0x3ed1d1(0xe1)];else{if(_0x1eb0ec[_0x3ed1d1(0xb4)](_0x2b0666,_0x1eb0ec[_0x3ed1d1(0xbe)])&&_0x5f5ee1===_0x1eb0ec[_0x3ed1d1(0xb6)])_0x44aa6d=_0x1eb0ec[_0x3ed1d1(0x8f)];else{if(_0x2b0666===_0x1eb0ec[_0x3ed1d1(0xbe)]&&_0x5f5ee1===_0x1eb0ec['MSAzq'])_0x44aa6d=_0x3ed1d1(0x94);else{if(_0x1eb0ec[_0x3ed1d1(0xaa)](_0x1eb0ec['kHIYH'],'BYpzS'))_0x1cb420=_0x1eb0ec[_0x3ed1d1(0xad)];else{console[_0x3ed1d1(0x9f)](chalk['yellow'](_0x3ed1d1(0x93)+_0x2b0666+'-'+_0x5f5ee1));continue;}}}}}const _0x210e27=path[_0x3ed1d1(0xcc)](_0x29845e,_0x44aa6d);console[_0x3ed1d1(0x9f)](chalk[_0x3ed1d1(0xa8)]('['+_0xed9230[_0x3ed1d1(0xd9)]+_0x3ed1d1(0xee)));const _0x41b1be=_0x1eb0ec[_0x3ed1d1(0x9b)](spawn,_0x210e27,['-d',_0xed9230[_0x3ed1d1(0xd9)],..._0x130bc5[_0x3ed1d1(0x8c)]('\x20')],{'stdio':_0x1eb0ec[_0x3ed1d1(0x92)]});_0x41b1be[_0x3ed1d1(0xb5)]['on'](_0x1eb0ec[_0x3ed1d1(0x99)],_0x51fdef=>{const _0x2775a9=_0x3ed1d1,_0x21f61b=_0x51fdef['toString']()[_0x2775a9(0x8c)]('\x0a')['filter'](_0x1d8140=>_0x1d8140[_0x2775a9(0xca)]());_0x21f61b[_0x2775a9(0xc7)](_0x24d967=>{const _0x4a412a=_0x2775a9;console[_0x4a412a(0x9f)](chalk[_0x4a412a(0xc8)]('\x20\x20'+_0x24d967));});}),_0x41b1be[_0x3ed1d1(0xe4)]['on'](_0x1eb0ec[_0x3ed1d1(0x99)],_0x57a11a=>{const _0x4deb53=_0x3ed1d1,_0x192626={'aNCns':function(_0x431c10,_0x50e3c0){return _0x1eb0ec['ezIxt'](_0x431c10,_0x50e3c0);},'DVfpH':_0x1eb0ec[_0x4deb53(0xf5)]};if(_0x1eb0ec[_0x4deb53(0xeb)](_0x4deb53(0xc4),_0x1eb0ec[_0x4deb53(0x91)])){const _0x1223b9=_0x57a11a[_0x4deb53(0xd4)]()[_0x4deb53(0x8c)]('\x0a')[_0x4deb53(0xe3)](_0x2c5162=>_0x2c5162[_0x4deb53(0xca)]());_0x1223b9[_0x4deb53(0xc7)](_0x23eecc=>{const _0x4fa4a0=_0x4deb53;if(_0x192626[_0x4fa4a0(0xf1)](_0x192626['DVfpH'],_0x192626[_0x4fa4a0(0xe5)]))console[_0x4fa4a0(0x9f)](chalk['red']('\x20\x20'+_0x23eecc));else{const _0xdfd878=_0xdea46a[_0x4fa4a0(0xd4)]()[_0x4fa4a0(0x8c)]('\x0a')[_0x4fa4a0(0xe3)](_0x1dd006=>_0x1dd006['trim']());_0xdfd878[_0x4fa4a0(0xc7)](_0x1852ea=>{const _0xb3b0c2=_0x4fa4a0;_0x51b9de[_0xb3b0c2(0x9f)](_0x358021['gray']('\x20\x20'+_0x1852ea));});}});}else _0x242e38=_0x1eb0ec['DubsT'];}),await new Promise(_0x5202c5=>{const _0x1b0c74=_0x3ed1d1,_0x5f47fc={'dTOiq':function(_0x1a19cc,_0x5e6862){const _0x1926bf=_0x1292;return _0x1eb0ec[_0x1926bf(0xf6)](_0x1a19cc,_0x5e6862);},'cxfet':function(_0x58c3cf,_0x378106){const _0x3c3993=_0x1292;return _0x1eb0ec[_0x3c3993(0xab)](_0x58c3cf,_0x378106);},'nOgRn':_0x1eb0ec[_0x1b0c74(0xd3)],'dAhFM':function(_0x3744f1){return _0x1eb0ec['GekRo'](_0x3744f1);}};_0x41b1be['on'](_0x1eb0ec[_0x1b0c74(0x98)],_0x2d8da8=>{const _0x27dafd=_0x1b0c74;_0x5f47fc[_0x27dafd(0xbb)](_0x2d8da8,0x0)?console[_0x27dafd(0x9f)](chalk[_0x27dafd(0xd7)]('['+_0xed9230['name']+_0x27dafd(0xb7))):_0x5f47fc[_0x27dafd(0xde)](_0x5f47fc['nOgRn'],_0x27dafd(0x9a))?_0x3288a4[_0x27dafd(0x9f)](_0x5e62de[_0x27dafd(0xd7)]('['+_0x25338b['name']+_0x27dafd(0xb7))):console[_0x27dafd(0x9f)](chalk[_0x27dafd(0xa3)]('['+_0xed9230[_0x27dafd(0xd9)]+_0x27dafd(0xd2)+_0x2d8da8+')\x0a')),_0x5f47fc[_0x27dafd(0xe6)](_0x5202c5);});});}else _0x465822[_0x3ed1d1(0x9f)](_0x5e969a[_0x3ed1d1(0xa3)]('\x20\x20'+_0x3bf70b));}}const _0x5c4588={};_0x5c4588[_0x3d969d(0xa1)]=executeCommand,module[_0x3d969d(0xf4)]=_0x5c4588;
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/static/css/main.23bd35c0.css",
4
- "main.js": "/static/js/main.26a24c5c.js",
4
+ "main.js": "/static/js/main.81eae090.js",
5
5
  "index.html": "/index.html",
6
6
  "main.23bd35c0.css.map": "/static/css/main.23bd35c0.css.map",
7
- "main.26a24c5c.js.map": "/static/js/main.26a24c5c.js.map"
7
+ "main.81eae090.js.map": "/static/js/main.81eae090.js.map"
8
8
  },
9
9
  "entrypoints": [
10
10
  "static/css/main.23bd35c0.css",
11
- "static/js/main.26a24c5c.js"
11
+ "static/js/main.81eae090.js"
12
12
  ]
13
13
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Devicely - AI-Powered Device Pool Management - Control your iOS device pool with intelligent automation"/><title>Devicely - AI-Powered Device Pool</title><style>@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}</style><script defer="defer" src="/static/js/main.26a24c5c.js"></script><link href="/static/css/main.23bd35c0.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Devicely - AI-Powered Device Pool Management - Control your iOS device pool with intelligent automation"/><title>Devicely - AI-Powered Device Pool</title><style>@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}</style><script defer="defer" src="/static/js/main.81eae090.js"></script><link href="/static/css/main.23bd35c0.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/css/main.23bd35c0.css","mappings":"AAGA,kBACE,GACE,SAAU,CACV,0BACF,CACA,GACE,SAAU,CACV,uBACF,CACF,CAGA,wBACE,GACE,SAAU,CACV,0BACF,CACA,GACE,SAAU,CACV,uBACF,CACF,CAGA,uBACE,GACE,SAAU,CACV,2BACF,CACA,GACE,SAAU,CACV,uBACF,CACF,CAGA,mBACE,GACE,SAAU,CACV,mBACF,CACA,GACE,SAAU,CACV,kBACF,CACF,CAGA,iBACE,MACE,SAAU,CACV,kBACF,CACA,IACE,UAAY,CACZ,qBACF,CACF,CAGA,gBACE,OAEE,SAAU,CADV,kBAEF,CACF,CAGA,kBACE,MACE,uBACF,CACA,IACE,2BACF,CACF,CAGA,mBACE,GACE,6BACF,CACA,GACE,4BACF,CACF,CAGA,kBACE,GACE,sBACF,CACA,GACE,uBACF,CACF,CAGA,iBACE,MACE,uBACF,CACA,IACE,0BACF,CACF,CAGA,gBACE,MACE,4BACF,CACA,IACE,gDACF,CACF,CAGA,SACE,6BACF,CAEA,gBACE,mCACF,CAEA,eACE,kCACF,CAEA,UACE,kDACF,CAEA,OACE,mDACF,CAEA,MACE,iDACF,CAEA,QACE,wCACF,CAEA,OACE,uCACF,CAEA,SAQE,6BAA8B,CAP9B,6DAKC,CACD,2BAEF,CAEA,QACE,0BACF,CAEA,MACE,sCACF,CAGA,EACE,uCACF,CAEA,mBACE,0CACF,CAEA,oBAEE,gCAA2C,CAD3C,0BAEF,CAGA,OACE,oBAAoC,CAGpC,sBACF,CAEA,mBALE,yCAA0C,CAC1C,iDASF,CALA,YACE,gBAA8B,CAG9B,0BACF,CAGA,YACE,0CACF,CAEA,kBAEE,4BAA0C,CAD1C,sCAEF,CAGA,QAEE,eAAgB,CADhB,iBAEF,CAEA,cAQE,oBAAoC,CADpC,iBAAkB,CANlB,UAAW,CAKX,QAAS,CAFT,QAAS,CAFT,iBAAkB,CAClB,OAAQ,CAMR,8BAAgC,CAChC,+BAAmC,CALnC,OAMF,CAEA,qBAEE,YAAa,CADb,WAEF,CAGA,oBAEE,WAAY,CADZ,UAEF,CAEA,0BACE,oBAA+B,CAC/B,kBACF,CAEA,0BACE,oBAA8B,CAC9B,kBAAmB,CACnB,+BAAyB,CAAzB,uBACF,CAEA,gCACE,oBACF,CAGA,UAQE,+BAAgC,CAPhC,2EAKC,CACD,yBAA0B,CAE1B,iBACF,CAGA,eAGE,iBAAkB,CAFlB,2BAA0C,CAC1C,kBAEF,CAGA,WACE,wBAAyB,CAGzB,gBACF,CAGA,eAGE,6BAAoC,CAFpC,kDAA6D,CAC7D,4BAA6B,CAE7B,oBACF,CAGA,aACE,mDACF,CAEA,eACE,oDACF,CAEA,eACE,qDACF,CAGA,cAEE,sCAAwC,CADxC,SAEF,CAEA,0BAA6B,oBAAwB,CACrD,2BAA6B,mBAAuB,CACpD,2BAA6B,oBAAwB,CACrD,2BAA6B,mBAAuB,CACpD,2BAA6B,oBAAwB,CACrD,2BAA6B,mBAAuB,CACpD,2BAA6B,oBAAwB,CACrD,2BAA6B,mBAAuB,CAGpD,oBACE,yBACF,CAEA,oBACE,yBACF,CAGA,uCACE,iBAGE,kCAAqC,CACrC,qCAAuC,CACvC,mCACF,CACF","sources":["animations.css"],"sourcesContent":["/* Enhanced UI Animations and Effects */\n\n/* Smooth Fade In */\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Slide In From Right */\n@keyframes slideInRight {\n from {\n opacity: 0;\n transform: translateX(30px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n/* Slide In From Left */\n@keyframes slideInLeft {\n from {\n opacity: 0;\n transform: translateX(-30px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n/* Scale In */\n@keyframes scaleIn {\n from {\n opacity: 0;\n transform: scale(0.9);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n/* Pulse Effect */\n@keyframes pulse {\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.6;\n transform: scale(1.15);\n }\n}\n\n/* Ping Effect (Ripple) */\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n/* Bounce */\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-10px);\n }\n}\n\n/* Shimmer Loading */\n@keyframes shimmer {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n}\n\n/* Rotate */\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Float */\n@keyframes float {\n 0%, 100% {\n transform: translateY(0px);\n }\n 50% {\n transform: translateY(-8px);\n }\n}\n\n/* Glow */\n@keyframes glow {\n 0%, 100% {\n box-shadow: 0 0 5px rgba(24, 144, 255, 0.5);\n }\n 50% {\n box-shadow: 0 0 20px rgba(24, 144, 255, 0.8), 0 0 30px rgba(24, 144, 255, 0.6);\n }\n}\n\n/* Apply Animations */\n.fade-in {\n animation: fadeIn 0.5s ease-out;\n}\n\n.slide-in-right {\n animation: slideInRight 0.5s ease-out;\n}\n\n.slide-in-left {\n animation: slideInLeft 0.5s ease-out;\n}\n\n.scale-in {\n animation: scaleIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n.pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n.ping {\n animation: ping 2s cubic-bezier(0, 0, 0.2, 1) infinite;\n}\n\n.bounce {\n animation: bounce 1s ease-in-out infinite;\n}\n\n.float {\n animation: float 3s ease-in-out infinite;\n}\n\n.shimmer {\n background: linear-gradient(\n to right,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 0.3) 50%,\n rgba(255, 255, 255, 0) 100%\n );\n background-size: 1000px 100%;\n animation: shimmer 2s infinite;\n}\n\n.rotate {\n animation: rotate 1s linear;\n}\n\n.glow {\n animation: glow 2s ease-in-out infinite;\n}\n\n/* Smooth Transitions */\n* {\n -webkit-tap-highlight-color: transparent;\n}\n\n.smooth-transition {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.smooth-hover:hover {\n transform: translateY(-2px);\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n}\n\n/* Glass Morphism */\n.glass {\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px) saturate(180%);\n -webkit-backdrop-filter: blur(10px) saturate(180%);\n border: 1px solid rgba(255, 255, 255, 0.2);\n}\n\n.glass-dark {\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(10px) saturate(180%);\n -webkit-backdrop-filter: blur(10px) saturate(180%);\n border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/* Card Hover Effects */\n.card-hover {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.card-hover:hover {\n transform: translateY(-4px) scale(1.02);\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);\n}\n\n/* Button Ripple Effect */\n.ripple {\n position: relative;\n overflow: hidden;\n}\n\n.ripple::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0;\n height: 0;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.5);\n transform: translate(-50%, -50%);\n transition: width 0.6s, height 0.6s;\n}\n\n.ripple:active::after {\n width: 300px;\n height: 300px;\n}\n\n/* Smooth Scrollbar */\n::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n}\n\n::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.05);\n border-radius: 10px;\n}\n\n::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.3);\n border-radius: 10px;\n transition: all 0.3s ease;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.5);\n}\n\n/* Loading Skeleton */\n.skeleton {\n background: linear-gradient(\n 90deg,\n rgba(200, 200, 200, 0.3) 25%,\n rgba(200, 200, 200, 0.5) 50%,\n rgba(200, 200, 200, 0.3) 75%\n );\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n border-radius: 8px;\n}\n\n/* Focus Visible for Accessibility */\n*:focus-visible {\n outline: 2px solid rgba(24, 144, 255, 0.6);\n outline-offset: 2px;\n border-radius: 4px;\n}\n\n/* Prevent Text Selection on Interactive Elements */\n.no-select {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n/* Gradient Text */\n.gradient-text {\n background: linear-gradient(135deg, #1890FF 0%, #9254DE 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n\n/* Enhanced Shadow */\n.shadow-soft {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.08);\n}\n\n.shadow-medium {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1), 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.shadow-strong {\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15), 0 16px 48px rgba(0, 0, 0, 0.15);\n}\n\n/* Stagger Animation for Lists */\n.stagger-item {\n opacity: 0;\n animation: fadeIn 0.5s ease-out forwards;\n}\n\n.stagger-item:nth-child(1) { animation-delay: 0.05s; }\n.stagger-item:nth-child(2) { animation-delay: 0.1s; }\n.stagger-item:nth-child(3) { animation-delay: 0.15s; }\n.stagger-item:nth-child(4) { animation-delay: 0.2s; }\n.stagger-item:nth-child(5) { animation-delay: 0.25s; }\n.stagger-item:nth-child(6) { animation-delay: 0.3s; }\n.stagger-item:nth-child(7) { animation-delay: 0.35s; }\n.stagger-item:nth-child(8) { animation-delay: 0.4s; }\n\n/* Micro-interactions */\n.micro-bounce:hover {\n animation: bounce 0.5s ease;\n}\n\n.micro-rotate:hover {\n animation: rotate 0.5s ease;\n}\n\n/* Accessibility */\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n"],"names":[],"ignoreList":[],"sourceRoot":""}