devicely 1.0.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 (54) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +243 -0
  3. package/bin/devicely.js +3 -0
  4. package/config/apps_presets.conf +271 -0
  5. package/config/devices.conf +20 -0
  6. package/lib/aiProviders.js +518 -0
  7. package/lib/aiProviders.js.backup +301 -0
  8. package/lib/aiProvidersConfig.js +176 -0
  9. package/lib/aiProviders_new.js +70 -0
  10. package/lib/androidDeviceDetection.js +2 -0
  11. package/lib/appMappings.js +1 -0
  12. package/lib/deviceDetection.js +2 -0
  13. package/lib/devices.conf +20 -0
  14. package/lib/devices.js +1 -0
  15. package/lib/doctor.js +1 -0
  16. package/lib/executor.js +1 -0
  17. package/lib/fix_logs.sh +18 -0
  18. package/lib/frontend/asset-manifest.json +13 -0
  19. package/lib/frontend/index.html +1 -0
  20. package/lib/frontend/static/css/main.23bd35c0.css +2 -0
  21. package/lib/frontend/static/css/main.23bd35c0.css.map +1 -0
  22. package/lib/frontend/static/js/main.3f13aeaf.js +1 -0
  23. package/lib/frontend/static/js/main.3f13aeaf.js.LICENSE.txt +48 -0
  24. package/lib/frontend/static/js/main.3f13aeaf.js.map +1 -0
  25. package/lib/frontend/voice-test.html +156 -0
  26. package/lib/index.js +1 -0
  27. package/lib/package-lock.json +1678 -0
  28. package/lib/package.json +30 -0
  29. package/lib/server.js +1 -0
  30. package/lib/server.js.bak +3380 -0
  31. package/package.json +78 -0
  32. package/scripts/postinstall.js +110 -0
  33. package/scripts/shell/android_device_control +0 -0
  34. package/scripts/shell/connect_android_usb +0 -0
  35. package/scripts/shell/connect_android_usb_multi_final +0 -0
  36. package/scripts/shell/connect_android_wireless +0 -0
  37. package/scripts/shell/connect_android_wireless_multi_final +0 -0
  38. package/scripts/shell/connect_ios_usb +0 -0
  39. package/scripts/shell/connect_ios_usb_multi_final +0 -0
  40. package/scripts/shell/connect_ios_wireless_multi_final +0 -0
  41. package/scripts/shell/find_element_coordinates +0 -0
  42. package/scripts/shell/find_wda +0 -0
  43. package/scripts/shell/install_uiautomator2 +0 -0
  44. package/scripts/shell/ios_device_control +0 -0
  45. package/scripts/shell/setup +0 -0
  46. package/scripts/shell/setup_android +0 -0
  47. package/scripts/shell/start +0 -0
  48. package/scripts/shell/test_android_locators +0 -0
  49. package/scripts/shell/test_connect +0 -0
  50. package/scripts/shell/test_device_detection +0 -0
  51. package/scripts/shell/test_fixes +0 -0
  52. package/scripts/shell/test_getlocators_fix +0 -0
  53. package/scripts/shell/test_recording_feature +0 -0
  54. package/scripts/shell/verify_distribution +0 -0
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ # Replace verbose console.log with log.debug for debugging statements
4
+ sed -i.bak '
5
+ s/console\.log(`✅ Found .* connected devices`)/log.debug(`✅ Found .* connected devices`)/g
6
+ s/console\.log(`Device details:/log.debug(`Device details:/g
7
+ s/console\.log(`iOS USB:/log.debug(`iOS USB:/g
8
+ s/console\.log(`Android USB:/log.debug(`Android USB:/g
9
+ s/console\.log(`.*EXECUTE.*START`)/log.debug(`&`)/g
10
+ s/console\.log(`.*EXECUTION COMPLETE`)/log.debug(`&`)/g
11
+ s/console\.log(`Waiting for .* device execution/log.debug(`Waiting for .* device execution/g
12
+ s/console\.log(`\[.*\] Creating execution promise/log.debug(`[${deviceName}] Creating execution promise/g
13
+ s/console\.log(`.*ExecuteCommand summary:/log.info(`ExecuteCommand summary:/g
14
+ s/console\.log(`Calling executeCommand/log.debug(`Calling executeCommand/g
15
+ s/console\.log(`executeCommand completed/log.debug(`executeCommand completed/g
16
+ ' server.js
17
+
18
+ echo "Fixed logging in server.js"
@@ -0,0 +1,13 @@
1
+ {
2
+ "files": {
3
+ "main.css": "/static/css/main.23bd35c0.css",
4
+ "main.js": "/static/js/main.3f13aeaf.js",
5
+ "index.html": "/index.html",
6
+ "main.23bd35c0.css.map": "/static/css/main.23bd35c0.css.map",
7
+ "main.3f13aeaf.js.map": "/static/js/main.3f13aeaf.js.map"
8
+ },
9
+ "entrypoints": [
10
+ "static/css/main.23bd35c0.css",
11
+ "static/js/main.3f13aeaf.js"
12
+ ]
13
+ }
@@ -0,0 +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.3f13aeaf.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,2 @@
1
+ @keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInRight{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.15)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes glow{0%,to{box-shadow:0 0 5px #1890ff80}50%{box-shadow:0 0 20px #1890ffcc,0 0 30px #1890ff99}}.fade-in{animation:fadeIn .5s ease-out}.slide-in-right{animation:slideInRight .5s ease-out}.slide-in-left{animation:slideInLeft .5s ease-out}.scale-in{animation:scaleIn .4s cubic-bezier(.34,1.56,.64,1)}.pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.ping{animation:ping 2s cubic-bezier(0,0,.2,1) infinite}.bounce{animation:bounce 1s ease-in-out infinite}.float{animation:float 3s ease-in-out infinite}.shimmer{animation:shimmer 2s infinite;background:linear-gradient(90deg,#fff0 0,#ffffff4d 50%,#fff0);background-size:1000px 100%}.rotate{animation:rotate 1s linear}.glow{animation:glow 2s ease-in-out infinite}*{-webkit-tap-highlight-color:transparent}.smooth-transition{transition:all .3s cubic-bezier(.4,0,.2,1)}.smooth-hover:hover{box-shadow:0 10px 25px #00000026;transform:translateY(-2px)}.glass{background:#ffffff1a;border:1px solid #fff3}.glass,.glass-dark{backdrop-filter:blur(10px) saturate(180%);-webkit-backdrop-filter:blur(10px) saturate(180%)}.glass-dark{background:#0003;border:1px solid #ffffff1a}.card-hover{transition:all .3s cubic-bezier(.4,0,.2,1)}.card-hover:hover{box-shadow:0 20px 40px #0003;transform:translateY(-4px) scale(1.02)}.ripple{overflow:hidden;position:relative}.ripple:after{background:#ffffff80;border-radius:50%;content:"";height:0;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);transition:width .6s,height .6s;width:0}.ripple:active:after{height:300px;width:300px}::-webkit-scrollbar{height:10px;width:10px}::-webkit-scrollbar-track{background:#0000000d;border-radius:10px}::-webkit-scrollbar-thumb{background:#0000004d;border-radius:10px;-webkit-transition:all .3s ease;transition:all .3s ease}::-webkit-scrollbar-thumb:hover{background:#00000080}.skeleton{animation:shimmer 1.5s infinite;background:linear-gradient(90deg,#c8c8c84d 25%,#c8c8c880 50%,#c8c8c84d 75%);background-size:200% 100%;border-radius:8px}:focus-visible{border-radius:4px;outline:2px solid #1890ff99;outline-offset:2px}.no-select{-webkit-user-select:none;user-select:none}.gradient-text{-webkit-text-fill-color:#0000;background:linear-gradient(135deg,#1890ff,#9254de);-webkit-background-clip:text;background-clip:text}.shadow-soft{box-shadow:0 2px 8px #00000014,0 4px 16px #00000014}.shadow-medium{box-shadow:0 4px 12px #0000001a,0 8px 24px #0000001a}.shadow-strong{box-shadow:0 8px 24px #00000026,0 16px 48px #00000026}.stagger-item{animation:fadeIn .5s ease-out forwards;opacity:0}.stagger-item:first-child{animation-delay:.05s}.stagger-item:nth-child(2){animation-delay:.1s}.stagger-item:nth-child(3){animation-delay:.15s}.stagger-item:nth-child(4){animation-delay:.2s}.stagger-item:nth-child(5){animation-delay:.25s}.stagger-item:nth-child(6){animation-delay:.3s}.stagger-item:nth-child(7){animation-delay:.35s}.stagger-item:nth-child(8){animation-delay:.4s}.micro-bounce:hover{animation:bounce .5s ease}.micro-rotate:hover{animation:rotate .5s ease}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
2
+ /*# sourceMappingURL=main.23bd35c0.css.map*/
@@ -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":""}