devicely 2.2.5 → 2.2.6

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.4ff1ea70.js} +3 -3
  14. package/lib/frontend/static/js/main.4ff1ea70.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.4ff1ea70.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
+ const _0x2a567b=_0x5975;function _0x5975(_0x1e8c29,_0x2b9ea2){_0x1e8c29=_0x1e8c29-0x1b4;const _0x26438f=_0x2643();let _0x5975f6=_0x26438f[_0x1e8c29];if(_0x5975['Xaaurm']===undefined){var _0xdb66d7=function(_0xf60cdc){const _0x3e32fe='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x172104='',_0x4658d4='';for(let _0x17d06f=0x0,_0x2dd1a2,_0x89d9fb,_0x69b507=0x0;_0x89d9fb=_0xf60cdc['charAt'](_0x69b507++);~_0x89d9fb&&(_0x2dd1a2=_0x17d06f%0x4?_0x2dd1a2*0x40+_0x89d9fb:_0x89d9fb,_0x17d06f++%0x4)?_0x172104+=String['fromCharCode'](0xff&_0x2dd1a2>>(-0x2*_0x17d06f&0x6)):0x0){_0x89d9fb=_0x3e32fe['indexOf'](_0x89d9fb);}for(let _0x81d068=0x0,_0x680f59=_0x172104['length'];_0x81d068<_0x680f59;_0x81d068++){_0x4658d4+='%'+('00'+_0x172104['charCodeAt'](_0x81d068)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4658d4);};_0x5975['RNCWaQ']=_0xdb66d7,_0x5975['bnmjIq']={},_0x5975['Xaaurm']=!![];}const _0x2b2b9c=_0x26438f[0x0],_0x40796e=_0x1e8c29+_0x2b2b9c,_0x320e07=_0x5975['bnmjIq'][_0x40796e];return!_0x320e07?(_0x5975f6=_0x5975['RNCWaQ'](_0x5975f6),_0x5975['bnmjIq'][_0x40796e]=_0x5975f6):_0x5975f6=_0x320e07,_0x5975f6;}(function(_0xe56281,_0x13638d){const _0x220df9=_0x5975,_0x181576=_0xe56281();while(!![]){try{const _0x2f7e54=parseInt(_0x220df9(0x1c9))/0x1*(parseInt(_0x220df9(0x213))/0x2)+-parseInt(_0x220df9(0x20b))/0x3*(parseInt(_0x220df9(0x1e0))/0x4)+-parseInt(_0x220df9(0x202))/0x5*(-parseInt(_0x220df9(0x1c6))/0x6)+-parseInt(_0x220df9(0x210))/0x7+-parseInt(_0x220df9(0x208))/0x8*(parseInt(_0x220df9(0x1e5))/0x9)+-parseInt(_0x220df9(0x1cc))/0xa*(parseInt(_0x220df9(0x20d))/0xb)+parseInt(_0x220df9(0x1cd))/0xc*(parseInt(_0x220df9(0x1cb))/0xd);if(_0x2f7e54===_0x13638d)break;else _0x181576['push'](_0x181576['shift']());}catch(_0x55e216){_0x181576['push'](_0x181576['shift']());}}}(_0x2643,0xb0f45));const {execSync}=require(_0x2a567b(0x1f0)),chalk=require(_0x2a567b(0x1b7));function checkCommand(_0x4e2afd,_0x1da8bc){const _0x2ef035=_0x2a567b,_0x2ed2f8={'tTfxA':_0x2ef035(0x1fb),'TiPBA':_0x2ef035(0x1d6),'JzjMa':_0x2ef035(0x20c),'CCbvb':_0x2ef035(0x1ea),'CiDgw':function(_0x203d53,_0x520e85,_0x7c627f){return _0x203d53(_0x520e85,_0x7c627f);},'ZlbTZ':_0x2ef035(0x1f9)};try{if(_0x2ed2f8[_0x2ef035(0x1e8)]!==_0x2ed2f8[_0x2ef035(0x201)])return _0x2ed2f8[_0x2ef035(0x1bb)](execSync,_0x2ef035(0x1bf)+_0x4e2afd,{'stdio':_0x2ed2f8['ZlbTZ']}),console[_0x2ef035(0x1e3)](chalk['green']('✓')+'\x20'+_0x1da8bc+_0x2ef035(0x1d2)),!![];else _0x3a9f0d[_0x2ef035(0x1e3)](_0x468af1[_0x2ef035(0x20e)](_0x2ed2f8[_0x2ef035(0x20a)])),_0x5f588b[_0x2ef035(0x1e3)](_0x2ed2f8[_0x2ef035(0x1f7)]);}catch(_0x49f970){return console['log'](chalk[_0x2ef035(0x203)]('✗')+'\x20'+_0x1da8bc+_0x2ef035(0x1dc)),![];}}function getVersion(_0x2a47d1){const _0x55a106=_0x2a567b,_0x546bf4={'FnMwo':function(_0xe4676c,_0x4ced86,_0x5b2c5e){return _0xe4676c(_0x4ced86,_0x5b2c5e);},'BhFRL':_0x55a106(0x206),'mQloX':_0x55a106(0x1f9),'QSTLP':_0x55a106(0x1e9)};try{const _0x36d83c=_0x546bf4[_0x55a106(0x1c8)](execSync,_0x2a47d1,{'encoding':_0x546bf4[_0x55a106(0x1b9)],'stdio':[_0x55a106(0x20f),'pipe',_0x546bf4[_0x55a106(0x1ee)]]});return _0x36d83c[_0x55a106(0x1bc)]()[_0x55a106(0x1f6)]('\x0a')[0x0];}catch(_0x1b46de){return _0x546bf4['QSTLP'];}}function _0x2643(){const _0x3be461=['tM9Kzs5QCZO','q2Lez3C','DhjPBq','uhnbELq','Cfjxq1K','D2HPy2GG','y2HLy2TeB2n0B3i','DungCuG','cKzVCIbbBMrYB2LKihn1ChbVCNq6','tKzfA3y','uMzovKS','AxLer1i','ndq5nfPzDfL6va','cLLVDsbJyw4GC3rHCNqGDxnPBMCGrgv2AwnLBhKGD2L0AdOGzgv2AwnLBhKGC3rHCNq','rM5nD28','mte2m1z3reHjEq','qvPZrNy','odm1owH1qMzlqG','mZy1mtqWwKTKtKfY','nZGWodrUEfjVC2S','qw5KCM9Pzcbezwj1zYbcCMLKz2uGkgfKyIK','y2jmzKK','zNHpsey','suPizhu','igLUC3rHBgXLza','zwXytNa','cKzVCIbqExrOB246','Au9tief1Dg9TyxrPB24Gvg9VBhm6','icbICMv3igLUC3rHBgWGBgLIAw1VyMLSzwrLDMLJzsb1C2jTDxHK','te9xrw0','yM9Sza','qvbyDvm','vxjysxy','uhL0Ag9Uidm','ig5VDcbMB3vUza','icbwzxjZAw9UoIa','wun5zxG','uwPeyvu','mtq2mJrHwvLAB3u','D3HmtwK','s2DKy20','Bg9N','qw5KCM9PzcbbDxrVBwf0Aw9UifrVB2XZoG','ou1OqunYBW','ifzLCNnPB246ia','AwrLDMLJzv9Pza','sNPQtwe','vw5RBM93BG','r0HTt3e','icbICMv3igLUC3rHBgWGyw5KCM9Pzc1WBgf0zM9YBs10B29SCW','AK1vug4','uhL0Ag9UoG','BvfSB1G','mhWXFdn8nhWY','y2HPBgrFChjVy2vZCW','DMvYC2LVBG','cVcFK4SGu3LZDgvTifjLCxvPCMvTzw50CYbdAgvJAWO','cVcFK5yGsw5ZDgfSBgf0Aw9UieD1AwrLoG','uuDJDvK','4PYfiefSBcbYzxf1AxjLBwvUDhmGBwv0iq','C3bSAxq','vgLqqKe','zxHWB3j0CW','AwDUB3jL','icbICMv3igLUC3rHBgWGChL0Ag9UmW','cKzVCIbPt1mGC3vWCg9YDdO','uhrbsge','CNfYr2K','ANDmCum','EgH4uK8','BgLIAw1VyMLSzwrLDMLJzq','q0nIDMi','mZa2nu9XBeX2wG','CMvK','z3jLzw4','vfzKywy','DxrMltG','ywrI','nZu1nty4ofHRD3PNEq','vePJthm','DfrMEee','nZG5DNnzzKv4','vLPYAu8','mJK3zejzzwn4','z3jHEq','CgLWzq','otq3mJG4m0jxs2jwsq','DxnIBxv4za','4PQG77IpicbtB21LihjLCxvPCMvTzw50CYbHCMuGBwLZC2LUzW','ntyYENjhCgjU','zwXjzLe','wgnVzgu','EwvSBg93','y2HHBgS','tLz2qKO','qMHguKW'];_0x2643=function(){return _0x3be461;};return _0x2643();}async function checkDoctor(){const _0x2dc6c9=_0x2a567b,_0x5d04ea={'LOWEm':function(_0x2ed2f3,_0x1dd716,_0x5b2a3f){return _0x2ed2f3(_0x1dd716,_0x5b2a3f);},'QGcuY':_0x2dc6c9(0x1ef),'xhxRO':_0x2dc6c9(0x212),'wxLMi':_0x2dc6c9(0x1f3),'AZsFv':_0x2dc6c9(0x1fa),'TVdaf':function(_0x3ae1a2,_0xb7a4ee){return _0x3ae1a2||_0xb7a4ee;},'UrXIv':'\x0aFor\x20iOS\x20support:','GVbfH':'\x20\x20brew\x20install\x20libimobiledevice\x20usbmuxd','elIfQ':_0x2dc6c9(0x1c2),'IJHdu':_0x2dc6c9(0x1eb),'SOngW':_0x2dc6c9(0x1f2),'RfNVK':_0x2dc6c9(0x1ba),'APXuS':_0x2dc6c9(0x1d5),'fxOHF':_0x2dc6c9(0x1b5),'rqrGi':function(_0x5ad7b5,_0x6dd94e,_0x168d4e){return _0x5ad7b5(_0x6dd94e,_0x168d4e);},'iyDGR':_0x2dc6c9(0x1e7),'TJcLs':_0x2dc6c9(0x200),'PsAzT':'iproxy','Kgdcm':_0x2dc6c9(0x211),'NFEkv':function(_0x131253,_0x142506,_0x3833d3){return _0x131253(_0x142506,_0x3833d3);},'NVvBJ':_0x2dc6c9(0x207),'cbLfI':function(_0x46448b,_0x25c337){return _0x46448b&&_0x25c337;},'elXNp':function(_0x23dc65,_0xbbf55e){return _0x23dc65(_0xbbf55e);},'jMUPn':_0x2dc6c9(0x1ed),'QjDaU':_0x2dc6c9(0x1db),'INaAM':'python3\x20--version','CFJnd':_0x2dc6c9(0x1f5),'PtAHa':_0x2dc6c9(0x1c7),'YCyex':function(_0x448d23,_0x43243e){return _0x448d23!==_0x43243e;},'aHXbg':_0x2dc6c9(0x1fe),'OggRf':'xhWgw','uCFqH':_0x2dc6c9(0x1d4)};console[_0x2dc6c9(0x1e3)](_0x5d04ea['SOngW']);let _0x53f371=!![];console[_0x2dc6c9(0x1e3)](chalk['bold'](_0x5d04ea[_0x2dc6c9(0x1c4)]));const _0x5e6080=process[_0x2dc6c9(0x1f1)];console[_0x2dc6c9(0x1e3)](chalk['green']('✓')+_0x2dc6c9(0x1e6)+_0x5e6080+'\x0a'),console['log'](chalk['bold'](_0x5d04ea[_0x2dc6c9(0x1d9)]));const _0xb2994c=_0x5d04ea[_0x2dc6c9(0x1d7)](checkCommand,'xcodebuild',_0x5d04ea[_0x2dc6c9(0x1d0)]),_0x55a3a6=_0x5d04ea[_0x2dc6c9(0x1fd)](checkCommand,_0x5d04ea[_0x2dc6c9(0x1c5)],_0x5d04ea[_0x2dc6c9(0x209)]),_0x47d72d=_0x5d04ea[_0x2dc6c9(0x1d7)](checkCommand,_0x5d04ea[_0x2dc6c9(0x1bd)],_0x5d04ea[_0x2dc6c9(0x1e2)]);_0x53f371=_0x53f371&&_0xb2994c&&_0x55a3a6&&_0x47d72d,console['log'](''),console['log'](chalk[_0x2dc6c9(0x1d8)](_0x2dc6c9(0x1e4)));const _0x4e6dfa=_0x5d04ea[_0x2dc6c9(0x1c3)](checkCommand,_0x5d04ea[_0x2dc6c9(0x1b8)],_0x2dc6c9(0x1ce));_0x53f371=_0x5d04ea[_0x2dc6c9(0x1cf)](_0x53f371,_0x4e6dfa);if(_0x4e6dfa){const _0x3a1947=_0x5d04ea[_0x2dc6c9(0x1d3)](getVersion,'adb\x20--version');console[_0x2dc6c9(0x1e3)](_0x2dc6c9(0x1dd)+_0x3a1947);}console[_0x2dc6c9(0x1e3)](''),console[_0x2dc6c9(0x1e3)](chalk['bold'](_0x5d04ea[_0x2dc6c9(0x1ec)]));const _0x4f7549=checkCommand('python3',_0x5d04ea[_0x2dc6c9(0x1df)]);if(_0x4f7549){const _0x2b946c=_0x5d04ea['elXNp'](getVersion,_0x5d04ea['INaAM']);console[_0x2dc6c9(0x1e3)](_0x2dc6c9(0x1dd)+_0x2b946c);}console[_0x2dc6c9(0x1e3)]('');if(_0x53f371)console[_0x2dc6c9(0x1e3)](chalk[_0x2dc6c9(0x204)][_0x2dc6c9(0x1d8)](_0x5d04ea['CFJnd'])),console[_0x2dc6c9(0x1e3)](chalk[_0x2dc6c9(0x20e)](_0x5d04ea[_0x2dc6c9(0x1fc)]));else{if(_0x5d04ea[_0x2dc6c9(0x1de)](_0x5d04ea['aHXbg'],_0x5d04ea['aHXbg']))try{const _0x502515={};return _0x502515['stdio']=_0x2dc6c9(0x1f9),zJdVMZ[_0x2dc6c9(0x1d7)](_0x3a3638,'which\x20'+_0x20d131,_0x502515),_0x1191ac[_0x2dc6c9(0x1e3)](_0x11f834['green']('✓')+'\x20'+_0x4fea5f+_0x2dc6c9(0x1d2)),!![];}catch(_0x1e2d28){return _0x5346d3[_0x2dc6c9(0x1e3)](_0x4a277f['red']('✗')+'\x20'+_0x480264+_0x2dc6c9(0x1dc)),![];}else{console[_0x2dc6c9(0x1e3)](chalk[_0x2dc6c9(0x1b6)]['bold'](_0x5d04ea['xhxRO'])),console[_0x2dc6c9(0x1e3)](chalk[_0x2dc6c9(0x20e)]('\x0a📖\x20Installation\x20Guide:'));_0x5d04ea[_0x2dc6c9(0x205)](!_0x55a3a6,!_0x47d72d)&&(console['log'](chalk[_0x2dc6c9(0x20e)](_0x2dc6c9(0x1fb))),console[_0x2dc6c9(0x1e3)](_0x5d04ea['GVbfH']));!_0x4e6dfa&&(console['log'](chalk[_0x2dc6c9(0x20e)](_0x2dc6c9(0x1c2))),console[_0x2dc6c9(0x1e3)](_0x2dc6c9(0x1eb)));if(!_0x4f7549){if(_0x5d04ea[_0x2dc6c9(0x1de)](_0x2dc6c9(0x1be),_0x5d04ea['OggRf']))console['log'](chalk[_0x2dc6c9(0x20e)](_0x5d04ea[_0x2dc6c9(0x1c1)])),console[_0x2dc6c9(0x1e3)](_0x5d04ea[_0x2dc6c9(0x1ca)]);else{const _0x5583b8=_0x5d04ea[_0x2dc6c9(0x1f4)][_0x2dc6c9(0x1f6)]('|');let _0x30883e=0x0;while(!![]){switch(_0x5583b8[_0x30883e++]){case'0':_0x53c142[_0x2dc6c9(0x1e3)](_0x407ab5['yellow'][_0x2dc6c9(0x1d8)](_0x5d04ea[_0x2dc6c9(0x1ff)]));continue;case'1':_0x338702[_0x2dc6c9(0x1e3)](_0x2a42fa[_0x2dc6c9(0x20e)](_0x5d04ea[_0x2dc6c9(0x1e1)]));continue;case'2':!_0x20fcba&&(_0x21596c[_0x2dc6c9(0x1e3)](_0x27d021[_0x2dc6c9(0x20e)](_0x2dc6c9(0x1d4))),_0x33451e['log'](_0x5d04ea['AZsFv']));continue;case'3':_0x5d04ea[_0x2dc6c9(0x205)](!_0x191b82,!_0x4439d5)&&(_0x283d57[_0x2dc6c9(0x1e3)](_0xde8bd8[_0x2dc6c9(0x20e)](_0x5d04ea[_0x2dc6c9(0x1da)])),_0x5ac876[_0x2dc6c9(0x1e3)](_0x5d04ea['GVbfH']));continue;case'4':!_0xed74e9&&(_0x5942be[_0x2dc6c9(0x1e3)](_0x4eb7a9[_0x2dc6c9(0x20e)](_0x5d04ea[_0x2dc6c9(0x1b4)])),_0x2a36e9[_0x2dc6c9(0x1e3)](_0x5d04ea[_0x2dc6c9(0x1d1)]));continue;}break;}}}}}console[_0x2dc6c9(0x1e3)]('');}const _0x38e7b3={};_0x38e7b3[_0x2a567b(0x1c0)]=checkDoctor,module[_0x2a567b(0x1f8)]=_0x38e7b3;
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
+ function _0x4a3c(){const _0x2f532e=['y3jLyxrLrgvJAxbOzxjPDG','rgvJCNLWDgLVBIbMywLSzwq6ia','zxnfzNa','odq0mdy3nhPkwwzrBW','Aw5WDxq','rMnWDey','zgvJCNLWDa','zgv2AwnLBhK','mtK1odrtv2HIvNm','mZi0mJaZywntB2vh','BKjPqxa','zMLUywW','BMfTzq','q0vZv2i','ntz3A29Lsvq','C2HHmJu2','rezbtMS','zKPctLe','lI4VlI4VCgfJA2fNzs5QC29U','y3jLyxrLsgfZAa','Agv4','A2v5rgvYAxzHDgLVBG','CMTmBMu','ru5duLLqveLptL9dt05gsuC','ywXNB3jPDgHT','z1fzAMq','lI4VlI4VBNbTlxbHy2THz2uVCgfJA2fNzs5QC29U','y3jLyxrLq2LWAgvYAxy','BwvZC2fNzq','mJa4mtu5AujnB2v3','mJm4mdrquhrqt1y','rKzxDLa','A2v5u2vLza','Bwq1','DxbKyxrL','mZqWmM1nt1Dftq','rw5JCNLWDgLVBIbMywLSzwq6ia','zgLNzxn0','nJzczMPjCKe','lwL2','B3v0Chv0','q2rABeu','uxPzse8','y3j5ChrV','mJaXndm2mhLcsw1htW','zw5JCNLWDa','DxrMoa','zw5JB2rPBMC','zgv2AwnLBhKTzw5JCNLWDgLVBI1RzxKTDJe','nJqZmgXMvKfizq','mKfdAu5AuG','EfjVEM8','qwf4vKe'];_0x4a3c=function(){return _0x2f532e;};return _0x4a3c();}const _0x55c1d5=_0x2a55;(function(_0x362205,_0x4b25ea){const _0xca8274=_0x2a55,_0x2ba32f=_0x362205();while(!![]){try{const _0x100dd4=parseInt(_0xca8274(0x8a))/0x1*(-parseInt(_0xca8274(0x7e))/0x2)+-parseInt(_0xca8274(0x72))/0x3*(parseInt(_0xca8274(0x6a))/0x4)+parseInt(_0xca8274(0x78))/0x5+-parseInt(_0xca8274(0x89))/0x6+-parseInt(_0xca8274(0x69))/0x7*(parseInt(_0xca8274(0x8f))/0x8)+-parseInt(_0xca8274(0x6f))/0x9*(parseInt(_0xca8274(0x7d))/0xa)+parseInt(_0xca8274(0x84))/0xb;if(_0x100dd4===_0x4b25ea)break;else _0x2ba32f['push'](_0x2ba32f['shift']());}catch(_0x2bc6c1){_0x2ba32f['push'](_0x2ba32f['shift']());}}}(_0x4a3c,0x3f9fc));const crypto=require(_0x55c1d5(0x77)),_0x13dcd6={};_0x13dcd6[_0x55c1d5(0x85)]=_0x55c1d5(0x7a),_0x13dcd6['output']=_0x55c1d5(0x95);const _0x44471b={};_0x44471b[_0x55c1d5(0x99)]='aes-256-cbc',_0x44471b[_0x55c1d5(0x7b)]=_0x13dcd6,_0x44471b[_0x55c1d5(0x96)]=_0x55c1d5(0x90),_0x44471b['keySeed']=_0x55c1d5(0x7c);const ENCRYPTION_CONFIG=_0x44471b;function _0x2a55(_0x2a5842,_0x2afde4){_0x2a5842=_0x2a5842-0x67;const _0x4a3cb2=_0x4a3c();let _0x2a553c=_0x4a3cb2[_0x2a5842];if(_0x2a55['MIzRsx']===undefined){var _0x274d7c=function(_0xdaad82){const _0x50ca5d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4cd7a1='',_0x156abc='';for(let _0x527deb=0x0,_0x25aabe,_0x23b065,_0x182c07=0x0;_0x23b065=_0xdaad82['charAt'](_0x182c07++);~_0x23b065&&(_0x25aabe=_0x527deb%0x4?_0x25aabe*0x40+_0x23b065:_0x23b065,_0x527deb++%0x4)?_0x4cd7a1+=String['fromCharCode'](0xff&_0x25aabe>>(-0x2*_0x527deb&0x6)):0x0){_0x23b065=_0x50ca5d['indexOf'](_0x23b065);}for(let _0x1bb85f=0x0,_0x327e3c=_0x4cd7a1['length'];_0x1bb85f<_0x327e3c;_0x1bb85f++){_0x156abc+='%'+('00'+_0x4cd7a1['charCodeAt'](_0x1bb85f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x156abc);};_0x2a55['EpITmx']=_0x274d7c,_0x2a55['saHPNv']={},_0x2a55['MIzRsx']=!![];}const _0x2d7237=_0x4a3cb2[0x0],_0x19d173=_0x2a5842+_0x2d7237,_0x434138=_0x2a55['saHPNv'][_0x19d173];return!_0x434138?(_0x2a553c=_0x2a55['EpITmx'](_0x2a553c),_0x2a55['saHPNv'][_0x19d173]=_0x2a553c):_0x2a553c=_0x434138,_0x2a553c;}function generateKey(){const _0x193d77=_0x55c1d5,_0x37d17e={'nBiAp':function(_0x8e23b7){return _0x8e23b7();},'QzYHO':function(_0x57cb7b){return _0x57cb7b();},'esEfp':_0x193d77(0x88),'CEsWb':function(_0x2d53b5,_0x17e0a6){return _0x2d53b5(_0x17e0a6);},'xRozo':_0x193d77(0x9b),'FcptF':_0x193d77(0x97),'MCppj':'yYjqI','AaxVA':function(_0x30e465,_0x557f9f){return _0x30e465===_0x557f9f;},'zBPOW':_0x193d77(0x93)};let _0x436912=_0x37d17e[_0x193d77(0x83)];try{const _0x32fe81=_0x37d17e[_0x193d77(0x8e)](require,_0x37d17e[_0x193d77(0x7f)]);_0x436912=_0x32fe81[_0x193d77(0x8d)];}catch(_0x3780b8){if(_0x37d17e[_0x193d77(0x86)]===_0x37d17e['MCppj'])try{const _0x182203=_0x37d17e[_0x193d77(0x8b)](_0x5b3acb),_0x23fbde=_0x37d17e[_0x193d77(0x76)](_0x598a8f),_0xbee675=_0x22a1bb[_0x193d77(0x81)](_0xbaab5b[_0x193d77(0x99)],_0x182203,_0x23fbde);let _0x532862=_0xbee675[_0x193d77(0x6e)](_0xb27d8a,_0x21e575[_0x193d77(0x7b)]['output'],_0x4f6a5c[_0x193d77(0x7b)]['input']);return _0x532862+=_0xbee675[_0x193d77(0x8c)](_0x410c64[_0x193d77(0x7b)][_0x193d77(0x85)]),_0x532862;}catch(_0x22c631){throw new _0x337faf(_0x193d77(0x82)+_0x22c631[_0x193d77(0x68)]);}else try{if(_0x37d17e[_0x193d77(0x80)](_0x193d77(0x91),_0x193d77(0x9a)))try{const _0x486be4=_0x2b486a(),_0xdb578=_0x37d17e[_0x193d77(0x8b)](_0x5349a4),_0x384aa7=_0x143ac7[_0x193d77(0x67)](_0x34806d[_0x193d77(0x99)],_0x486be4,_0xdb578);let _0x179e6e=_0x384aa7[_0x193d77(0x6e)](_0x7f1dc4,_0x37ad00[_0x193d77(0x7b)][_0x193d77(0x85)],_0x227db4[_0x193d77(0x7b)][_0x193d77(0x74)]);return _0x179e6e+=_0x384aa7['final'](_0x48d287[_0x193d77(0x7b)][_0x193d77(0x74)]),_0x179e6e;}catch(_0x5ccf6f){throw new _0x3c3304(_0x193d77(0x70)+_0x5ccf6f[_0x193d77(0x68)]);}else{const _0x263360=require(_0x37d17e['zBPOW']);_0x436912=_0x263360['name'];}}catch(_0x51aef7){_0x436912=_0x37d17e[_0x193d77(0x83)];}}const _0x42e58a=_0x436912+'-'+ENCRYPTION_CONFIG[_0x193d77(0x6c)];return crypto[_0x193d77(0x94)](ENCRYPTION_CONFIG[_0x193d77(0x96)])[_0x193d77(0x6e)](_0x42e58a)['digest']();}function generateIV(){const _0x1661aa=_0x55c1d5,_0x25030f={};_0x25030f[_0x1661aa(0x92)]=_0x1661aa(0x6d);const _0x48a286=_0x25030f,_0x472220=ENCRYPTION_CONFIG[_0x1661aa(0x6c)]+_0x1661aa(0x73);return crypto['createHash'](_0x48a286[_0x1661aa(0x92)])['update'](_0x472220)[_0x1661aa(0x71)]();}function encrypt(_0x531036){const _0x5d75dd=_0x55c1d5,_0x212451={'ZTDen':function(_0x11451d){return _0x11451d();}};try{const _0xee072c=generateKey(),_0x36edab=_0x212451['ZTDen'](generateIV),_0x290ea5=crypto[_0x5d75dd(0x67)](ENCRYPTION_CONFIG['algorithm'],_0xee072c,_0x36edab);let _0x354de2=_0x290ea5[_0x5d75dd(0x6e)](_0x531036,ENCRYPTION_CONFIG[_0x5d75dd(0x7b)][_0x5d75dd(0x85)],ENCRYPTION_CONFIG['encoding'][_0x5d75dd(0x74)]);return _0x354de2+=_0x290ea5['final'](ENCRYPTION_CONFIG['encoding'][_0x5d75dd(0x74)]),_0x354de2;}catch(_0x3e73af){throw new Error(_0x5d75dd(0x70)+_0x3e73af[_0x5d75dd(0x68)]);}}function decrypt(_0x1f92ce){const _0x1e711f=_0x55c1d5,_0x389857={'FFWvP':function(_0x287931){return _0x287931();},'CdZlE':function(_0x5ddc6e){return _0x5ddc6e();}};try{const _0x1ae88a=_0x389857[_0x1e711f(0x6b)](generateKey),_0x5c5226=_0x389857[_0x1e711f(0x75)](generateIV),_0x13d551=crypto['createDecipheriv'](ENCRYPTION_CONFIG[_0x1e711f(0x99)],_0x1ae88a,_0x5c5226);let _0x1d50c7=_0x13d551[_0x1e711f(0x6e)](_0x1f92ce,ENCRYPTION_CONFIG[_0x1e711f(0x7b)]['output'],ENCRYPTION_CONFIG[_0x1e711f(0x7b)][_0x1e711f(0x85)]);return _0x1d50c7+=_0x13d551[_0x1e711f(0x8c)](ENCRYPTION_CONFIG[_0x1e711f(0x7b)]['input']),_0x1d50c7;}catch(_0x5e53b6){throw new Error(_0x1e711f(0x82)+_0x5e53b6[_0x1e711f(0x68)]);}}const _0x28593f={};_0x28593f[_0x55c1d5(0x79)]=encrypt,_0x28593f[_0x55c1d5(0x87)]=decrypt,_0x28593f[_0x55c1d5(0x98)]=ENCRYPTION_CONFIG,module['exports']=_0x28593f;
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 _0x4e27ca=_0x1e0c;(function(_0x1dd4ac,_0x563175){const _0x259dee=_0x1e0c,_0x3595b9=_0x1dd4ac();while(!![]){try{const _0x278f33=-parseInt(_0x259dee(0x17b))/0x1+-parseInt(_0x259dee(0x190))/0x2+-parseInt(_0x259dee(0x182))/0x3*(parseInt(_0x259dee(0x16c))/0x4)+-parseInt(_0x259dee(0x17d))/0x5*(parseInt(_0x259dee(0x1ae))/0x6)+parseInt(_0x259dee(0x1a0))/0x7+parseInt(_0x259dee(0x1b2))/0x8*(parseInt(_0x259dee(0x164))/0x9)+parseInt(_0x259dee(0x180))/0xa*(parseInt(_0x259dee(0x1b4))/0xb);if(_0x278f33===_0x563175)break;else _0x3595b9['push'](_0x3595b9['shift']());}catch(_0x20c9de){_0x3595b9['push'](_0x3595b9['shift']());}}}(_0x4a9f,0xc0036));const {spawn}=require('child_process'),path=require('path'),chalk=require(_0x4e27ca(0x187));function _0x4a9f(){const _0x453c11=['CgXHDgzVCM0','C3rKAw8','uvjJwNa','nduWnLv6zxvbwG','BwnbBgi','icdIGkiG','y3LHBG','mtq0mJrwuhHHEKC','z3jLzw4','mtq5otney1LmEge','igrLDMLJzsHZktO','D3jYAM0','z3jHEq','s25uDwu','cUkDJcboBYbKzxzPy2vZigzVDw5K','Cg9vyvm','EwvSBg93','y2XVC2u','vLL5A04','xsdINiuGu3vJy2vZCWO','AvDKtxm','ndu5AuneAhL0','v2fzq1O','qMnrq3q','DunHuKu','BMfTzq','uw1JqM0','cUkAOo+4JYaGtM8GB25SAw5LigrLDMLJzxmGzM91BMq','C3rKB3v0','mtu1nK1fr21euG','BgvUz3rO','zgv2AwnL','C3rKzxjY','iIbUB3qGzM91BMqGB3iGB2zMBgLUzq','CfjYt3G','Bhj1tuW','whD3sgi','u0z1twG','xsbsDw5UAw5NignVBw1HBMqUlI4','wKTjq3O','C3bSAxq','Dg9tDhjPBMC','cUkDJcbezxzPy2uGiG','rhDZBhm','oty2mZa2AKr3u3zP','cKv4zwn1DgLUzYbVBIa','ndu1nwzKDhz3DG','su5xvLG','xsdINyWGrMfPBgvKicHLEgL0ignVzgu6ia','mJiWnZbPBvzdse8','uxbJBuK','nJm5ouzOzK5oEa','zM9YrwfJAa','lI9KzxzPy2vezxrLy3rPB24','uvL5t0i','zwfwrLq','y2HHBgS','yMPmtgG','Bg9N','C3rHDhvZ','D2LYzwXLC3m','zxHLy3v0zunVBw1HBMq','zMLSDgvY','yw5KCM9Pza','yNbxC1e','mtKWnZa4ofvbBxjHCW','DxnI','lI4VlI4Vzgv2AwnLrgv0zwn0Aw9U','y29UBMvJDf9PB3nFDxnIx211BhrPx2zPBMfSlNnO','C2vNrwG','z09Ou28','y29UBMvJDf9HBMrYB2LKx3vZyL9TDwX0Av9MAw5HBc5ZAa','tNH3yLG','sw9itNO','ExvkvKO','CgLWzq','CMTdqK4','Aw9Z','B25SAw5L','rNLLwey','DhjPBq','nZG0mdK4mffruxnwBq','yMX1zq','y29UBMvJDf9PB3nFD2LYzwXLC3nFBxvSDgLFzMLUywWUC2G','4PQG77IpicbvBNn1ChbVCNrLzcbKzxzPy2uGDhLWztOG','sgvyBeq','CMvK','zxHWB3j0CW','D1rwvwK','zgf0yq','tvfLwLC','wfrqy2i'];_0x4a9f=function(){return _0x453c11;};return _0x4a9f();}let discoverAllDevices;try{({discoverAllDevices}=require(_0x4e27ca(0x184)));}catch(_0x580449){({discoverAllDevices}=require(_0x4e27ca(0x192)));}async function executeCommand(_0x292991,_0x3f5f8b={}){const _0x3cfa61=_0x4e27ca,_0x11c4e5={'eaVFT':_0x3cfa61(0x193),'iqZzV':_0x3cfa61(0x16a),'XwwHb':'connect_android_wireless_multi_final.sh','MQeZW':function(_0x10e32d,_0x16e60d){return _0x10e32d===_0x16e60d;},'EXsVC':_0x3cfa61(0x169),'FyeXF':_0x3cfa61(0x1a7),'XTPcb':function(_0xaac2a3,_0x5a0dc2){return _0xaac2a3===_0x5a0dc2;},'SFuMh':'FwWFA','QpcmI':_0x3cfa61(0x188),'BcQCt':function(_0x4253b6,_0x1dd9f7){return _0x4253b6!==_0x1dd9f7;},'lruML':_0x3cfa61(0x198),'NxwbX':function(_0xad1e91){return _0xad1e91();},'yuJVJ':_0x3cfa61(0x192),'poUaS':_0x3cfa61(0x15d),'VYykN':'../../scripts/shell','VBMoK':'tqaAF','iorXk':_0x3cfa61(0x18f),'HeXlD':_0x3cfa61(0x19c),'INWVX':_0x3cfa61(0x185),'rkCBN':_0x3cfa61(0x1af),'iWdMs':_0x3cfa61(0x1a2),'uCaRE':_0x3cfa61(0x18e),'bSqXz':_0x3cfa61(0x191),'segEh':_0x3cfa61(0x171),'qlRxO':_0x3cfa61(0x1ad),'wrrjm':function(_0x4e51ea,_0x1712b2){return _0x4e51ea===_0x1712b2;},'ZKICz':_0x3cfa61(0x18b),'WaYCZ':function(_0x1cd41e,_0x36c32d,_0x100daa,_0x2e2431){return _0x1cd41e(_0x36c32d,_0x100daa,_0x2e2431);},'Qqqgz':_0x3cfa61(0x1a8)},_0x4c74a2=await discoverAllDevices();if(!_0x4c74a2||_0x11c4e5['MQeZW'](_0x4c74a2['length'],0x0)){console['log'](chalk[_0x3cfa61(0x1a5)](_0x11c4e5[_0x3cfa61(0x15e)]));return;}let _0x58997f=_0x4c74a2[_0x3cfa61(0x18d)](_0x683770=>_0x683770[_0x3cfa61(0x18a)]===_0x3cfa61(0x19d));if(_0x3f5f8b['device']){_0x58997f=_0x4c74a2[_0x3cfa61(0x18d)](_0x43a943=>_0x43a943[_0x3cfa61(0x168)]===_0x3f5f8b[_0x3cfa61(0x16e)]&&_0x43a943[_0x3cfa61(0x18a)]===_0x3cfa61(0x19d));if(_0x11c4e5[_0x3cfa61(0x1aa)](_0x58997f[_0x3cfa61(0x16d)],0x0)){console[_0x3cfa61(0x189)](chalk[_0x3cfa61(0x1a5)](_0x3cfa61(0x179)+_0x3f5f8b['device']+_0x3cfa61(0x170)));return;}}if(_0x11c4e5[_0x3cfa61(0x1aa)](_0x58997f[_0x3cfa61(0x16d)],0x0)){console[_0x3cfa61(0x189)](chalk[_0x3cfa61(0x15f)](_0x3cfa61(0x16a)));return;}console[_0x3cfa61(0x189)](chalk[_0x3cfa61(0x1b1)](_0x3cfa61(0x17c)+_0x58997f[_0x3cfa61(0x16d)]+_0x3cfa61(0x1b5))),_0x58997f[_0x3cfa61(0x183)](_0x4390f1=>console[_0x3cfa61(0x189)](_0x3cfa61(0x1b0)+_0x4390f1['name'])),console['log']('');const _0x2920be=path['join'](__dirname,_0x11c4e5[_0x3cfa61(0x161)]);for(const _0x4b2e10 of _0x58997f){if(_0x11c4e5['VBMoK']!==_0x11c4e5['iorXk']){const _0x52f8cf=_0x4b2e10[_0x3cfa61(0x1ab)],_0x3bfc26=_0x4b2e10['type'];let _0x276089;if(_0x52f8cf===_0x11c4e5['HeXlD']&&_0x11c4e5[_0x3cfa61(0x1a9)](_0x3bfc26,_0x3cfa61(0x191)))_0x11c4e5[_0x3cfa61(0x17e)]!=='fgRzQ'?_0x276089=_0x3cfa61(0x193):_0x20c585[_0x3cfa61(0x189)](_0xf2a698[_0x3cfa61(0x15b)]('\x20\x20'+_0x18abd1));else{if(_0x52f8cf===_0x11c4e5[_0x3cfa61(0x1a4)]&&_0x11c4e5[_0x3cfa61(0x1a9)](_0x3bfc26,_0x3cfa61(0x18b)))'JNfgs'===_0x11c4e5[_0x3cfa61(0x19b)]?_0x422251=_0x11c4e5[_0x3cfa61(0x186)]:_0x276089=_0x11c4e5[_0x3cfa61(0x163)];else{if(_0x11c4e5[_0x3cfa61(0x1aa)](_0x52f8cf,_0x11c4e5[_0x3cfa61(0x167)])&&_0x11c4e5[_0x3cfa61(0x1a9)](_0x3bfc26,_0x11c4e5['bSqXz'])){if(_0x11c4e5[_0x3cfa61(0x166)](_0x11c4e5[_0x3cfa61(0x194)],_0x11c4e5['qlRxO']))_0x276089=_0x3cfa61(0x196);else{_0x360fb1[_0x3cfa61(0x189)](_0x268b48[_0x3cfa61(0x15f)](_0x11c4e5['iqZzV']));return;}}else{if(_0x11c4e5[_0x3cfa61(0x1a9)](_0x52f8cf,_0x11c4e5['uCaRE'])&&_0x11c4e5[_0x3cfa61(0x15a)](_0x3bfc26,_0x11c4e5[_0x3cfa61(0x176)]))_0x276089=_0x11c4e5[_0x3cfa61(0x173)];else{console[_0x3cfa61(0x189)](chalk[_0x3cfa61(0x15f)](_0x3cfa61(0x1a3)+_0x52f8cf+'-'+_0x3bfc26));continue;}}}}const _0x4482a3=path['join'](_0x2920be,_0x276089);console['log'](chalk[_0x3cfa61(0x1a1)]('['+_0x4b2e10[_0x3cfa61(0x168)]+_0x3cfa61(0x175)));const _0x1bcd9f={};_0x1bcd9f[_0x3cfa61(0x1ac)]=_0x3cfa61(0x19a);const _0x9a0f69=_0x11c4e5[_0x3cfa61(0x165)](spawn,_0x4482a3,['-d',_0x4b2e10['name'],..._0x292991[_0x3cfa61(0x177)]('\x20')],_0x1bcd9f);_0x9a0f69[_0x3cfa61(0x16b)]['on'](_0x3cfa61(0x1a8),_0x395087=>{const _0x5ec65b=_0x3cfa61,_0x51c07c=_0x395087[_0x5ec65b(0x178)]()['split']('\x0a')[_0x5ec65b(0x18d)](_0x170ce9=>_0x170ce9[_0x5ec65b(0x19f)]());_0x51c07c['forEach'](_0x30e026=>{const _0x342554=_0x5ec65b;console[_0x342554(0x189)](chalk[_0x342554(0x15b)]('\x20\x20'+_0x30e026));});}),_0x9a0f69[_0x3cfa61(0x16f)]['on'](_0x11c4e5['Qqqgz'],_0x18da2b=>{const _0x526869=_0x3cfa61,_0x3687c6={};_0x3687c6[_0x526869(0x15c)]=_0x11c4e5[_0x526869(0x173)];const _0x32b874=_0x3687c6;if(_0x11c4e5[_0x526869(0x1a9)](_0x11c4e5['EXsVC'],_0x11c4e5[_0x526869(0x19e)]))_0x43fd23=RmOgbe[_0x526869(0x15c)];else{const _0x1629dc=_0x18da2b[_0x526869(0x178)]()[_0x526869(0x177)]('\x0a')['filter'](_0x1e40b4=>_0x1e40b4[_0x526869(0x19f)]());_0x1629dc['forEach'](_0x3d5955=>{const _0x18803e=_0x526869;console['log'](chalk[_0x18803e(0x1a5)]('\x20\x20'+_0x3d5955));});}}),await new Promise(_0xbc9a9a=>{const _0x340c09=_0x3cfa61,_0x4c262a={};_0x4c262a[_0x340c09(0x195)]=_0x340c09(0x160);const _0x3bf172=_0x4c262a;_0x9a0f69['on'](_0x340c09(0x160),_0xa06072=>{const _0x5e26f6=_0x340c09,_0x2c16a2={};_0x2c16a2[_0x5e26f6(0x17a)]=function(_0x1a8575,_0x26755e){return _0x1a8575===_0x26755e;};const _0x22ae70=_0x2c16a2;if(_0x11c4e5[_0x5e26f6(0x1aa)](_0x11c4e5[_0x5e26f6(0x174)],_0x11c4e5[_0x5e26f6(0x181)]))_0x263e8f['on'](_0x3bf172[_0x5e26f6(0x195)],_0x157026=>{const _0x3f7930=_0x5e26f6;_0x22ae70[_0x3f7930(0x17a)](_0x157026,0x0)?_0x22bb1d[_0x3f7930(0x189)](_0x30d9a7[_0x3f7930(0x1b3)]('['+_0x1a94da[_0x3f7930(0x168)]+_0x3f7930(0x162))):_0x37f36d[_0x3f7930(0x189)](_0x3ba47d[_0x3f7930(0x1a5)]('['+_0x25de53[_0x3f7930(0x168)]+_0x3f7930(0x17f)+_0x157026+')\x0a')),_0x97c4ca();});else{if(_0x11c4e5['MQeZW'](_0xa06072,0x0)){if(_0x11c4e5[_0x5e26f6(0x166)](_0x11c4e5[_0x5e26f6(0x172)],_0x5e26f6(0x198))){const _0x2adc44=_0x1a29bd[_0x5e26f6(0x178)]()[_0x5e26f6(0x177)]('\x0a')['filter'](_0x4acdbf=>_0x4acdbf['trim']());_0x2adc44[_0x5e26f6(0x183)](_0x19c31e=>{const _0x389ec2=_0x5e26f6;_0x418935['log'](_0x9575c9[_0x389ec2(0x1a5)]('\x20\x20'+_0x19c31e));});}else console[_0x5e26f6(0x189)](chalk[_0x5e26f6(0x1b3)]('['+_0x4b2e10[_0x5e26f6(0x168)]+_0x5e26f6(0x162)));}else console[_0x5e26f6(0x189)](chalk['red']('['+_0x4b2e10['name']+_0x5e26f6(0x17f)+_0xa06072+')\x0a'));_0x11c4e5[_0x5e26f6(0x197)](_0xbc9a9a);}});});}else({discoverAllDevices:_0x4feb39}=_0x463588(gfIkbn[_0x3cfa61(0x199)]));}}function _0x1e0c(_0xc60b1,_0x11fd36){_0xc60b1=_0xc60b1-0x15a;const _0x4a9ff3=_0x4a9f();let _0x1e0c0a=_0x4a9ff3[_0xc60b1];if(_0x1e0c['hrzaln']===undefined){var _0x396326=function(_0x2787ea){const _0x2685ce='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x49bd97='',_0x4ab444='';for(let _0x188268=0x0,_0x1449fe,_0x315c50,_0x330086=0x0;_0x315c50=_0x2787ea['charAt'](_0x330086++);~_0x315c50&&(_0x1449fe=_0x188268%0x4?_0x1449fe*0x40+_0x315c50:_0x315c50,_0x188268++%0x4)?_0x49bd97+=String['fromCharCode'](0xff&_0x1449fe>>(-0x2*_0x188268&0x6)):0x0){_0x315c50=_0x2685ce['indexOf'](_0x315c50);}for(let _0x4feb39=0x0,_0x463588=_0x49bd97['length'];_0x4feb39<_0x463588;_0x4feb39++){_0x4ab444+='%'+('00'+_0x49bd97['charCodeAt'](_0x4feb39)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4ab444);};_0x1e0c['VigMsH']=_0x396326,_0x1e0c['sPnXFQ']={},_0x1e0c['hrzaln']=!![];}const _0xd34dce=_0x4a9ff3[0x0],_0x15f916=_0xc60b1+_0xd34dce,_0x46dd93=_0x1e0c['sPnXFQ'][_0x15f916];return!_0x46dd93?(_0x1e0c0a=_0x1e0c['VigMsH'](_0x1e0c0a),_0x1e0c['sPnXFQ'][_0x15f916]=_0x1e0c0a):_0x1e0c0a=_0x46dd93,_0x1e0c0a;}const _0x39a99f={};_0x39a99f[_0x4e27ca(0x18c)]=executeCommand,module[_0x4e27ca(0x1a6)]=_0x39a99f;
@@ -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.4ff1ea70.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.4ff1ea70.js.map": "/static/js/main.4ff1ea70.js.map"
8
8
  },
9
9
  "entrypoints": [
10
10
  "static/css/main.23bd35c0.css",
11
- "static/js/main.26a24c5c.js"
11
+ "static/js/main.4ff1ea70.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.4ff1ea70.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":""}