devicely 2.1.4 → 2.1.5

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 (89) hide show
  1. package/bin/devicely.js +105 -1
  2. package/lib/androidDeviceDetection.js +276 -1
  3. package/lib/appMappings.js +337 -1
  4. package/lib/deviceDetection.js +394 -1
  5. package/lib/devices.js +54 -1
  6. package/lib/doctor.js +94 -1
  7. package/lib/executor.js +104 -1
  8. package/lib/logger.js +35 -1
  9. package/lib/scriptLoader.js +75 -1
  10. package/lib/server.js +3483 -1
  11. package/package.json +3 -12
  12. package/scripts/compile-shell-scripts.js +208 -0
  13. package/scripts/encrypt-shell-simple.js +75 -0
  14. package/scripts/obfuscate-shell.js +160 -0
  15. package/scripts/shell/android_device_control +0 -0
  16. package/scripts/shell/android_device_control.sh +848 -0
  17. package/scripts/shell/apps_presets.conf +271 -0
  18. package/scripts/shell/connect_android_usb +0 -0
  19. package/scripts/shell/connect_android_usb_multi_final +0 -0
  20. package/scripts/shell/connect_android_usb_multi_final.sh +289 -0
  21. package/scripts/shell/connect_android_wireless +0 -0
  22. package/scripts/shell/connect_android_wireless.sh +58 -0
  23. package/scripts/shell/connect_android_wireless_multi_final +0 -0
  24. package/scripts/shell/connect_android_wireless_multi_final.sh +476 -0
  25. package/scripts/shell/connect_ios_usb +0 -0
  26. package/scripts/shell/connect_ios_usb_multi_final +0 -0
  27. package/scripts/shell/connect_ios_usb_multi_final.sh +4225 -0
  28. package/scripts/shell/connect_ios_wireless_multi_final +0 -0
  29. package/scripts/shell/connect_ios_wireless_multi_final.sh +4167 -0
  30. package/scripts/shell/create_production_scripts +0 -0
  31. package/scripts/shell/create_production_scripts.sh +38 -0
  32. package/scripts/shell/devices.conf +24 -0
  33. package/scripts/shell/diagnose_wireless_ios +0 -0
  34. package/scripts/shell/find_element_coordinates +0 -0
  35. package/scripts/shell/find_wda +0 -0
  36. package/scripts/shell/install_uiautomator2 +0 -0
  37. package/scripts/shell/install_uiautomator2.sh +93 -0
  38. package/scripts/shell/ios_device_control +0 -0
  39. package/scripts/shell/ios_device_control.sh +220 -0
  40. package/scripts/shell/organize_project +0 -0
  41. package/scripts/shell/organize_project.sh +59 -0
  42. package/scripts/shell/pre-publish-check +0 -0
  43. package/scripts/shell/pre-publish-check.sh +238 -0
  44. package/scripts/shell/publish +0 -0
  45. package/scripts/shell/publish-to-npm +0 -0
  46. package/scripts/shell/publish-to-npm.sh +366 -0
  47. package/scripts/shell/publish.sh +100 -0
  48. package/scripts/shell/setup +0 -0
  49. package/scripts/shell/setup.sh +121 -0
  50. package/scripts/shell/setup_android +0 -0
  51. package/scripts/shell/start +0 -0
  52. package/scripts/shell/start.sh +59 -0
  53. package/scripts/shell/sync-to-npm-package-final +0 -0
  54. package/scripts/shell/sync-to-npm-package-final.sh +60 -0
  55. package/scripts/shell/test-local-package.sh +95 -0
  56. package/scripts/shell/test_android_locators +0 -0
  57. package/scripts/shell/test_connect +0 -0
  58. package/scripts/shell/test_device_detection +0 -0
  59. package/scripts/shell/test_fixes +0 -0
  60. package/scripts/shell/test_getlocators_fix +0 -0
  61. package/scripts/shell/test_recording_feature +0 -0
  62. package/scripts/shell/verify-shell-protection +0 -0
  63. package/scripts/shell/verify-shell-protection.sh +73 -0
  64. package/scripts/shell/verify_distribution +0 -0
  65. package/lib/package-lock.json +0 -1678
  66. package/lib/package.json +0 -30
  67. package/lib/screenshots/screenshot_ios_iPhone17_20260205_225900.png +0 -0
  68. package/lib/screenshots/screenshot_ios_iPhone17_20260205_225942.png +0 -0
  69. package/lib/screenshots/screenshot_ios_iPhone17_20260205_231101.png +0 -0
  70. package/lib/screenshots/screenshot_ios_iPhone17_20260205_232911.png +0 -0
  71. package/lib/screenshots/screenshot_ios_iPhone17_20260208_095103.png +0 -0
  72. package/lib/screenshots/screenshot_ios_iPhone17_20260208_095720.png +0 -0
  73. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115040.png +0 -0
  74. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115047.png +0 -0
  75. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115118.png +0 -0
  76. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115125.png +0 -0
  77. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_115143.png +0 -0
  78. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120107.png +0 -0
  79. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120118.png +0 -0
  80. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120137.png +0 -0
  81. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_120201.png +0 -0
  82. package/lib/screenshots/screenshot_ios_iPhoneXR17x_20260206_134529.png +0 -0
  83. package/scripts/shell/android_device_control.enc +0 -1
  84. package/scripts/shell/connect_android_usb_multi_final.enc +0 -1
  85. package/scripts/shell/connect_android_wireless.enc +0 -1
  86. package/scripts/shell/connect_android_wireless_multi_final.enc +0 -1
  87. package/scripts/shell/connect_ios_usb_multi_final.enc +0 -1
  88. package/scripts/shell/connect_ios_wireless_multi_final.enc +0 -1
  89. package/scripts/shell/ios_device_control.enc +0 -1
@@ -0,0 +1,38 @@
1
+ #!/bin/bash
2
+
3
+ # This script adds QUIET mode to all shell scripts
4
+ # In QUIET mode, only errors and final success/failure are shown
5
+
6
+ add_quiet_mode() {
7
+ local script="$1"
8
+ echo "Processing: $script"
9
+
10
+ # Backup original
11
+ cp "$script" "$script.bak"
12
+
13
+ # Add QUIET mode at the beginning (after shebang)
14
+ sed -i '' '2i\
15
+ # Production mode - minimal logging\
16
+ QUIET_MODE="${DEVICELY_QUIET:-false}"\
17
+ log_info() { [ "$QUIET_MODE" != "true" ] && echo "$@"; }\
18
+ log_success() { echo "$@"; } # Always show success\
19
+ log_error() { echo "$@" >&2; } # Always show errors
20
+ ' "$script"
21
+
22
+ # Replace echo with log_info for non-critical messages
23
+ # Keep ✅ and ❌ messages visible (success/error)
24
+ sed -i '' 's/echo "\(.*[^✅❌].*\)"/log_info "\1"/g' "$script"
25
+
26
+ echo "✓ Updated: $script"
27
+ }
28
+
29
+ # Process main scripts
30
+ for script in connect_ios_usb_multi_final.sh android_device_control.sh ios_device_control.sh; do
31
+ if [ -f "$script" ]; then
32
+ add_quiet_mode "$script"
33
+ fi
34
+ done
35
+
36
+ echo ""
37
+ echo "✅ Scripts updated with QUIET mode"
38
+ echo "To enable: export DEVICELY_QUIET=true"
@@ -0,0 +1,24 @@
1
+ # Device Configuration (Auto-updated)
2
+ # Format: device_name,udid,ip_address,platform,type
3
+ # Platform: ios | android
4
+ # Type: usb | wireless
5
+ #
6
+ # 🔌 USB DEVICES: Automatically detected and saved here
7
+ # - No configuration needed for USB connection
8
+ # - Add IP address to enable wireless support later
9
+ #
10
+ # 📡 WIRELESS DEVICES: Manually add with IP address
11
+ # - Format: device_name,udid,ip_address,platform,wireless
12
+ # - iOS: Device must be paired in Xcode, WebDriverAgent running
13
+ # - Android: Enable wireless ADB first
14
+ #
15
+ # Example entries:
16
+ # MyiPhone,00008130-001A45C83ED8402E,,ios,usb (iOS USB - auto-detected)
17
+ # MyiPad,00008140-002B24361E41901C,192.168.1.100,ios,wireless (iOS Wireless)
18
+ # Pixel8,1A2B3C4D5E6F,,android,usb (Android USB - auto-detected)
19
+ # GalaxyS23,ABCD1234,192.168.1.150,android,wireless (Android Wireless)
20
+
21
+ iPhone17,00008150-001058D13478401C,,ios,usb
22
+ Pixel Tablet,emulator-5554,,android,usb
23
+ iPhone17,00008150-001058D13478401C,10.28.127.167,ios,wireless
24
+ 2109119DI,100.84.68.240:5555,100.84.68.240,android,wireless
Binary file
@@ -0,0 +1,93 @@
1
+ #!/bin/bash
2
+
3
+ # Install UIAutomator2 APKs on Android device
4
+
5
+ DEVICE_ID=$1
6
+
7
+ if [ -z "$DEVICE_ID" ]; then
8
+ echo "Usage: $0 <device_id>"
9
+ echo "Example: $0 100.87.246.132:5555"
10
+ exit 1
11
+ fi
12
+
13
+ echo "🔍 Looking for UIAutomator2 APKs..."
14
+
15
+ # Find APKs
16
+ APK_PATH="$HOME/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks"
17
+
18
+ if [ ! -d "$APK_PATH" ]; then
19
+ echo "❌ UIAutomator2 APKs not found!"
20
+ echo "Please run: appium driver install uiautomator2"
21
+ exit 1
22
+ fi
23
+
24
+ SERVER_APK=$(ls "$APK_PATH"/appium-uiautomator2-server-v*.apk 2>/dev/null | head -1)
25
+ TEST_APK="$APK_PATH/appium-uiautomator2-server-debug-androidTest.apk"
26
+
27
+ if [ -z "$SERVER_APK" ] || [ ! -f "$TEST_APK" ]; then
28
+ echo "❌ APK files not found!"
29
+ exit 1
30
+ fi
31
+
32
+ echo "✅ Found APKs:"
33
+ echo " Server: $SERVER_APK"
34
+ echo " Test: $TEST_APK"
35
+ echo ""
36
+
37
+ # Check if device is connected
38
+ adb -s "$DEVICE_ID" get-state >/dev/null 2>&1
39
+ if [ $? -ne 0 ]; then
40
+ echo "❌ Device $DEVICE_ID not connected!"
41
+ exit 1
42
+ fi
43
+
44
+ echo "📱 Device connected: $DEVICE_ID"
45
+ echo ""
46
+ echo "⚠️ IMPORTANT: On your device, you may see installation prompts."
47
+ echo " Please ALLOW the installation!"
48
+ echo ""
49
+ echo "📦 Installing UIAutomator2 Server..."
50
+
51
+ # Try to install with -g flag to grant all permissions
52
+ adb -s "$DEVICE_ID" install -r -g "$SERVER_APK"
53
+ if [ $? -ne 0 ]; then
54
+ echo ""
55
+ echo "⚠️ Installation failed or was canceled."
56
+ echo ""
57
+ echo "Please make sure:"
58
+ echo " 1. USB debugging is enabled"
59
+ echo " 2. 'Install via USB' is enabled in Developer Options"
60
+ echo " 3. You allowed the installation prompt on the device"
61
+ echo ""
62
+ echo "On Xiaomi/MIUI devices:"
63
+ echo " Settings → Additional Settings → Developer Options"
64
+ echo " → Enable 'Install via USB' AND 'USB debugging (Security settings)'"
65
+ echo ""
66
+ read -p "Press Enter to retry..."
67
+ adb -s "$DEVICE_ID" install -r -g "$SERVER_APK"
68
+ fi
69
+
70
+ echo ""
71
+ echo "📦 Installing UIAutomator2 Test APK..."
72
+
73
+ adb -s "$DEVICE_ID" install -r -g "$TEST_APK"
74
+ if [ $? -ne 0 ]; then
75
+ echo ""
76
+ echo "⚠️ Test APK installation failed."
77
+ read -p "Press Enter to retry..."
78
+ adb -s "$DEVICE_ID" install -r -g "$TEST_APK"
79
+ fi
80
+
81
+ echo ""
82
+ echo "🎉 UIAutomator2 installation complete!"
83
+ echo ""
84
+ echo "Verifying installation..."
85
+ adb -s "$DEVICE_ID" shell pm list packages | grep io.appium.uiautomator2
86
+
87
+ if [ $? -eq 0 ]; then
88
+ echo "✅ UIAutomator2 is now installed!"
89
+ echo "You can now use the 'getLocators' command."
90
+ else
91
+ echo "❌ Verification failed. Please try manual installation."
92
+ fi
93
+
Binary file
@@ -0,0 +1,220 @@
1
+ #!/bin/bash
2
+ # iOS Device Control - Restart/Shutdown/Status
3
+ # Supports both USB and Wireless devices
4
+
5
+ WDA_PORT=8100
6
+
7
+ show_usage() {
8
+ echo "Usage: $0 [restart|shutdown|status] [device_name|UDID]"
9
+ echo ""
10
+ echo "Commands:"
11
+ echo " restart - Restart the device"
12
+ echo " shutdown - Shutdown the device (USB only)"
13
+ echo " status - Show device status"
14
+ echo ""
15
+ echo "Examples:"
16
+ echo " $0 restart iphone16p"
17
+ echo " $0 status"
18
+ echo " $0 shutdown 00008140-001C24361E41801C"
19
+ exit 1
20
+ }
21
+
22
+ COMMAND=$1
23
+ DEVICE_ID=$2
24
+
25
+ if [ -z "$COMMAND" ]; then
26
+ show_usage
27
+ fi
28
+
29
+ # Load devices.conf
30
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
31
+ DEVICES_CONF="$SCRIPT_DIR/devices.conf"
32
+
33
+ # Find device info
34
+ find_device() {
35
+ local search_term=$1
36
+
37
+ # Check USB devices first
38
+ if command -v idevice_id >/dev/null 2>&1; then
39
+ USB_UDIDS=($(idevice_id -l 2>/dev/null))
40
+ for udid in "${USB_UDIDS[@]}"; do
41
+ if [[ "$udid" == "$search_term"* ]] || [ -z "$search_term" ]; then
42
+ echo "usb|$udid|local"
43
+ return 0
44
+ fi
45
+ # Get device name
46
+ DEV_NAME=$(ideviceinfo -u "$udid" -k DeviceName 2>/dev/null | tr -d '\n')
47
+ if [ "$DEV_NAME" == "$search_term" ]; then
48
+ echo "usb|$udid|local"
49
+ return 0
50
+ fi
51
+ done
52
+ fi
53
+
54
+ # Check wireless devices from config
55
+ if [ -f "$DEVICES_CONF" ]; then
56
+ while IFS=',' read -r name udid ip || [ -n "$name" ]; do
57
+ # Skip comments and empty lines
58
+ [[ "$name" =~ ^#.*$ ]] && continue
59
+ [ -z "$name" ] && continue
60
+
61
+ # Trim whitespace
62
+ name=$(echo "$name" | xargs)
63
+ udid=$(echo "$udid" | xargs)
64
+ ip=$(echo "$ip" | xargs)
65
+
66
+ if [ "$name" == "$search_term" ] || [ "$udid" == "$search_term" ] || [ -z "$search_term" ]; then
67
+ echo "wireless|$udid|$ip"
68
+ return 0
69
+ fi
70
+ done < "$DEVICES_CONF"
71
+ fi
72
+
73
+ echo "not_found||"
74
+ return 1
75
+ }
76
+
77
+ restart_device() {
78
+ local device_info=$(find_device "$DEVICE_ID")
79
+ IFS='|' read -r dev_type udid ip <<< "$device_info"
80
+
81
+ if [ "$dev_type" == "not_found" ]; then
82
+ echo "❌ Device not found: $DEVICE_ID"
83
+ exit 1
84
+ fi
85
+
86
+ echo "🔄 Restarting device: $DEVICE_ID"
87
+
88
+ if [ "$dev_type" == "usb" ]; then
89
+ echo "→ Using USB restart methods..."
90
+
91
+ # Try idevicediagnostics first
92
+ if command -v idevicediagnostics >/dev/null 2>&1; then
93
+ if idevicediagnostics -u "$udid" restart 2>/dev/null; then
94
+ echo "✅ Device restart initiated (idevicediagnostics)"
95
+ return 0
96
+ fi
97
+ fi
98
+
99
+ # Try devicectl (Xcode)
100
+ if command -v xcrun >/dev/null 2>&1; then
101
+ DC_OUT=$(xcrun devicectl device reboot --device "$udid" 2>&1)
102
+ if echo "$DC_OUT" | grep -qi "restart\|reboot\|success" || [ $? -eq 0 ]; then
103
+ echo "✅ Device restart initiated (devicectl)"
104
+ return 0
105
+ fi
106
+ fi
107
+
108
+ echo "❌ All restart methods failed"
109
+ return 1
110
+ else
111
+ # Wireless - use WDA
112
+ echo "→ Using WDA restart (wireless)..."
113
+ R=$(curl -s -X POST "http://${ip}:${WDA_PORT}/wda/device/restart" \
114
+ -H 'Content-Type: application/json' -d '{}' -m 10)
115
+
116
+ if echo "$R" | grep -q '"value"'; then
117
+ echo "✅ Device restart initiated (WDA)"
118
+ return 0
119
+ else
120
+ echo "❌ WDA restart failed"
121
+ return 1
122
+ fi
123
+ fi
124
+ }
125
+
126
+ shutdown_device() {
127
+ local device_info=$(find_device "$DEVICE_ID")
128
+ IFS='|' read -r dev_type udid ip <<< "$device_info"
129
+
130
+ if [ "$dev_type" == "not_found" ]; then
131
+ echo "❌ Device not found: $DEVICE_ID"
132
+ exit 1
133
+ fi
134
+
135
+ if [ "$dev_type" != "usb" ]; then
136
+ echo "❌ Shutdown only supported for USB devices"
137
+ echo " Use 'restart' command for wireless devices"
138
+ exit 1
139
+ fi
140
+
141
+ echo "⚠️ Shutting down device: $DEVICE_ID"
142
+ echo " This will power off the device completely"
143
+
144
+ if command -v idevicediagnostics >/dev/null 2>&1; then
145
+ if idevicediagnostics -u "$udid" shutdown 2>/dev/null; then
146
+ echo "✅ Device shutdown initiated"
147
+ return 0
148
+ fi
149
+ fi
150
+
151
+ echo "❌ Shutdown failed - libimobiledevice not available"
152
+ return 1
153
+ }
154
+
155
+ show_status() {
156
+ echo "📱 Device Status"
157
+ echo ""
158
+
159
+ # USB Devices
160
+ if command -v idevice_id >/dev/null 2>&1; then
161
+ USB_UDIDS=($(idevice_id -l 2>/dev/null))
162
+ if [ ${#USB_UDIDS[@]} -gt 0 ]; then
163
+ echo "USB Devices:"
164
+ for udid in "${USB_UDIDS[@]}"; do
165
+ DEV_NAME=$(ideviceinfo -u "$udid" -k DeviceName 2>/dev/null)
166
+ DEV_VERSION=$(ideviceinfo -u "$udid" -k ProductVersion 2>/dev/null)
167
+ echo " 🔌 $DEV_NAME"
168
+ echo " UDID: $udid"
169
+ echo " iOS: $DEV_VERSION"
170
+ echo ""
171
+ done
172
+ else
173
+ echo "USB Devices: None"
174
+ echo ""
175
+ fi
176
+ else
177
+ echo "⚠️ libimobiledevice not installed (USB detection disabled)"
178
+ echo " Install: brew install libimobiledevice"
179
+ echo ""
180
+ fi
181
+
182
+ # Wireless Devices
183
+ if [ -f "$DEVICES_CONF" ]; then
184
+ echo "Wireless Devices (from config):"
185
+ while IFS=',' read -r name udid ip || [ -n "$name" ]; do
186
+ [[ "$name" =~ ^#.*$ ]] && continue
187
+ [ -z "$name" ] && continue
188
+
189
+ name=$(echo "$name" | xargs)
190
+ ip=$(echo "$ip" | xargs)
191
+
192
+ # Check connectivity
193
+ if curl -s --connect-timeout 2 "http://${ip}:${WDA_PORT}/status" | grep -q '"state"'; then
194
+ echo " 📡 $name ✅ Online"
195
+ else
196
+ echo " 📡 $name ⚠️ Offline"
197
+ fi
198
+ echo " IP: $ip"
199
+ echo ""
200
+ done < "$DEVICES_CONF"
201
+ else
202
+ echo "No devices.conf found"
203
+ fi
204
+ }
205
+
206
+ case "$COMMAND" in
207
+ restart|reboot)
208
+ restart_device
209
+ ;;
210
+ shutdown|poweroff)
211
+ shutdown_device
212
+ ;;
213
+ status)
214
+ show_status
215
+ ;;
216
+ *)
217
+ echo "❌ Unknown command: $COMMAND"
218
+ show_usage
219
+ ;;
220
+ esac
Binary file
@@ -0,0 +1,59 @@
1
+ #!/bin/bash
2
+ # Project Organization Script
3
+
4
+ echo "📁 Organizing Devicely Project Structure..."
5
+ echo ""
6
+
7
+ # Create directory structure
8
+ mkdir -p docs/fixes
9
+ mkdir -p docs/guides
10
+ mkdir -p scripts/utilities
11
+ mkdir -p scripts/testing
12
+ mkdir -p .archive
13
+
14
+ # Move documentation files
15
+ echo "📄 Organizing documentation..."
16
+ mv *_FIX*.md docs/fixes/ 2>/dev/null
17
+ mv *_FIXES.md docs/fixes/ 2>/dev/null
18
+ mv AI_*.md docs/fixes/ 2>/dev/null
19
+ mv IMPLEMENTATION*.md docs/fixes/ 2>/dev/null
20
+ mv FINAL_*.md docs/fixes/ 2>/dev/null
21
+
22
+ mv *_GUIDE*.md docs/guides/ 2>/dev/null
23
+ mv TROUBLESHOOTING.md docs/guides/ 2>/dev/null
24
+ mv HOW_TO_*.md docs/guides/ 2>/dev/null
25
+
26
+ # Move test scripts
27
+ echo "🧪 Organizing test scripts..."
28
+ mv test_*.sh scripts/testing/ 2>/dev/null
29
+ mv test_*.js scripts/testing/ 2>/dev/null
30
+ mv validate-*.js scripts/testing/ 2>/dev/null
31
+
32
+ # Move utility scripts
33
+ echo "🔧 Organizing utility scripts..."
34
+ mv clean_*.sh scripts/utilities/ 2>/dev/null
35
+ mv clean_*.js scripts/utilities/ 2>/dev/null
36
+ mv find_*.sh scripts/utilities/ 2>/dev/null
37
+ mv diagnose_*.sh scripts/utilities/ 2>/dev/null
38
+ mv verify_*.sh scripts/utilities/ 2>/dev/null
39
+
40
+ # Move old/obsolete files to archive
41
+ echo "📦 Archiving obsolete files..."
42
+ mv connect_android_usb.sh .archive/ 2>/dev/null
43
+ mv connect_ios_usb.sh .archive/ 2>/dev/null
44
+ mv setup_android.sh .archive/ 2>/dev/null
45
+
46
+ # Keep important files in root
47
+ echo "✅ Keeping in root:"
48
+ echo " - README.md"
49
+ echo " - start.sh"
50
+ echo " - setup.sh"
51
+ echo " - devices.conf"
52
+ echo " - apps_presets.conf"
53
+ echo " - Core control scripts"
54
+
55
+ echo ""
56
+ echo "✅ Project organized!"
57
+ echo ""
58
+ echo "📊 New structure:"
59
+ tree -L 2 -d . 2>/dev/null || ls -la
Binary file