@blitzdev/iphone-mcp 0.1.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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/child-env.d.ts +1 -0
  4. package/dist/child-env.js +61 -0
  5. package/dist/child-env.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +318 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/device-client.d.ts +2 -0
  10. package/dist/device-client.js +15 -0
  11. package/dist/device-client.js.map +1 -0
  12. package/dist/execution-context.d.ts +33 -0
  13. package/dist/execution-context.js +66 -0
  14. package/dist/execution-context.js.map +1 -0
  15. package/dist/idb/ax-scan-client.d.ts +27 -0
  16. package/dist/idb/ax-scan-client.js +244 -0
  17. package/dist/idb/ax-scan-client.js.map +1 -0
  18. package/dist/idb/idb-client.d.ts +34 -0
  19. package/dist/idb/idb-client.js +288 -0
  20. package/dist/idb/idb-client.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +15 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/logger.d.ts +3 -0
  25. package/dist/logger.js +6 -0
  26. package/dist/logger.js.map +1 -0
  27. package/dist/mcp-server.d.ts +2 -0
  28. package/dist/mcp-server.js +649 -0
  29. package/dist/mcp-server.js.map +1 -0
  30. package/dist/types.d.ts +75 -0
  31. package/dist/types.js +7 -0
  32. package/dist/types.js.map +1 -0
  33. package/dist/ui-filters.d.ts +11 -0
  34. package/dist/ui-filters.js +100 -0
  35. package/dist/ui-filters.js.map +1 -0
  36. package/dist/viewer/server.d.ts +5 -0
  37. package/dist/viewer/server.js +233 -0
  38. package/dist/viewer/server.js.map +1 -0
  39. package/dist/wda/device-discovery.d.ts +12 -0
  40. package/dist/wda/device-discovery.js +91 -0
  41. package/dist/wda/device-discovery.js.map +1 -0
  42. package/dist/wda/wda-client.d.ts +38 -0
  43. package/dist/wda/wda-client.js +314 -0
  44. package/dist/wda/wda-client.js.map +1 -0
  45. package/dist/wda/wda-manager.d.ts +29 -0
  46. package/dist/wda/wda-manager.js +263 -0
  47. package/dist/wda/wda-manager.js.map +1 -0
  48. package/dist/wda/wda-scan.d.ts +3 -0
  49. package/dist/wda/wda-scan.js +41 -0
  50. package/dist/wda/wda-scan.js.map +1 -0
  51. package/package.json +40 -0
  52. package/src/idb/ax-scan/Makefile +30 -0
  53. package/src/idb/ax-scan/ax-scan.m +168 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAoD,MAAM,YAAY,CAAA;AAEnG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC7C,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACpE,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC/C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CACrE,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAChG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACtE,CAAC,CAAA;AAEF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC1C,CAAC,CAAA;AAEF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC7F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC1E,CAAC,CAAA;AAEF,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC3G,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACpH,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;CAClG,CAAC,CAAC,QAAQ,EAAE,CAAA;AAEb,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACjF,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE;;;;;;oEAMiD;QAC9D,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;YACnG,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SAC5E;KACF,EACD,KAAK,EAAE,EAAE,IAAI,GAAG,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE;QAC5C,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,IAAI,WAAW,MAAM,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAA;YAClD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAE5C,IAAI,WAAW,GAAG,GAAG,EAAE,YAAY,GAAG,GAAG,CAAA;YACzC,IAAI,CAAC;gBACH,IAAI,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;oBACvC,MAAM,IAAI,GAAG,MAAO,MAA+B,CAAC,aAAa,EAAE,CAAA;oBACnE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;oBACxB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;oBACvD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAA;oBAC3C,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;oBACxB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC5B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAE9B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACjD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAuB,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;YAE/F,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC9E,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAChI,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE;;;;;;;;;;6DAU0C;QACvD,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC1G,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAChG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SACvF;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE;QAC5D,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,MAAM,SAAS,IAAI,EAAE,CAAC,CAAA;QAChE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,YAAY,GAAG,+BAA+B,CAAA;YAElD,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACvC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;oBACtC,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;oBAC3C,MAAK;gBACP,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACzC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;oBACvE,YAAY,GAAG,gBAAgB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAA;oBAC7E,MAAK;gBACP,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAC1C,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;oBAC5D,YAAY,GAAG,WAAW,CAAC,CAAC,MAAM,SAAS,CAAA;oBAC3C,MAAK;gBACP,CAAC;gBACD,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAC7C,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAC9B,YAAY,GAAG,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAA;oBACxC,MAAK;gBACP,CAAC;gBACD,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACvC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;oBACxC,YAAY,GAAG,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAA;oBACtC,MAAK;gBACP,CAAC;gBACD,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAC/C,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;oBAC5C,YAAY,GAAG,yBAAyB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;oBAClE,MAAK;gBACP,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,GAAY,IAAI,CAAA;YACrC,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAA;gBAC9E,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC;oBACvB,iBAAiB,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;gBACrD,CAAC;qBAAM,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;oBAChC,iBAAiB,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBACvG,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAA4D,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA;YACvG,IAAI,iBAAiB;gBAAE,MAAM,CAAC,kBAAkB,GAAG,iBAAiB,CAAA;YAEpE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAClI,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE;;;;;;uEAMoD;QACjE,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACxF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SAC5F;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE;QACrD,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,OAAO,CAAC,MAAM,SAAS,IAAI,EAAE,CAAC,CAAA;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAa,EAAE,CAAA;YAE5B,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzC,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBACvC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;wBACtC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;wBAC1C,MAAK;oBACP,CAAC;oBACD,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBACzC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;wBACvE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;wBAC5E,MAAK;oBACP,CAAC;oBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBAC1C,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;wBAC5D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,SAAS,CAAC,CAAA;wBAC1C,MAAK;oBACP,CAAC;oBACD,KAAK,YAAY,CAAC,CAAC,CAAC;wBAClB,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBAC7C,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;wBAC9B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;wBACvC,MAAK;oBACP,CAAC;oBACD,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBACvC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;wBACxC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;wBACrC,MAAK;oBACP,CAAC;oBACD,KAAK,cAAc,CAAC,CAAC,CAAC;wBACpB,MAAM,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBAC/C,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;wBAC5C,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wBACjE,MAAK;oBACP,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,GAAY,IAAI,CAAA;YACrC,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAA;gBAC9E,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC;oBACvB,iBAAiB,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;gBACrD,CAAC;qBAAM,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;oBAChC,iBAAiB,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBACvG,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAA+D,EAAE,cAAc,EAAE,OAAO,EAAE,CAAA;YACtG,IAAI,iBAAiB;gBAAE,MAAM,CAAC,kBAAkB,GAAG,iBAAiB,CAAA;YAEpE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAChI,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,0FAA0F;QACvG,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SAC9E;KACF,EACD,KAAK,EAAE,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE,EAAE;QAC5B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,SAAS,MAAM,CAAC,CAAA;YAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,SAAS,SAAS,CAAC,CAAA;YAElF,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;gBAC1C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;gBAC3C,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC1C,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;wBAC5H,IAAI,KAAK;4BAAE,MAAM,CAAC,KAAK,CAAC,CAAA;;4BACnB,OAAO,EAAE,CAAA;oBAChB,CAAC,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC/D,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;oBACxG,IAAI,KAAK;wBAAE,MAAM,CAAC,KAAK,CAAC,CAAA;;wBACnB,OAAO,CAAC,MAAM,CAAC,CAAA;gBACtB,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YACF,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;YAC1D,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,QAAQ,CACN,MAAM,EACN,CAAC,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EACjH,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,CAAC,KAAK,EAAE,EAAE;oBACR,IAAI,KAAK;wBAAE,MAAM,CAAC,KAAK,CAAC,CAAA;;wBACnB,OAAO,EAAE,CAAA;gBAChB,CAAC,CACF,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;aACxD,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACnI,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,WAAW,EAAE;;;;;;;;;;;;;;wEAcqD;QAClE,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;iBACxG,QAAQ,CAAC,uBAAuB,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;YAClG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SAC9E;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE,EAAE;QAC3C,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,MAAM,UAAU,KAAK,IAAI,QAAQ,SAAS,IAAI,EAAE,CAAC,CAAA;QACrF,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YAEzE,IAAI,WAAsB,CAAA;YAC1B,IAAI,WAAW,GAAG,GAAG,EAAE,YAAY,GAAG,GAAG,CAAA;YAEzC,IAAI,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,YAAY,CAAyB,CAAA;gBAC1E,WAAW,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,MAAoB,CAAC,CAAA;gBAC7D,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;oBACzC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;oBACxB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC5B,CAAC;gBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;gBACrD,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAoB,CAAC,CAAA;gBACrD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;oBACzC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAA;oBACxB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC5B,CAAC;gBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,WAA0B,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;YAE9G,MAAM,OAAO,GAAqC,EAAE,CAAA;YACpD,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,OAAO,EAAE,EAAE,CAAC,CAAA;YACjF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;YAEhF,OAAO,EAAE,OAAO,EAAE,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC1H,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;QACjC,IAAI,CAAC;YACH,IAAI,UAAU,GAAoD,EAAE,CAAA;YACpE,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3E,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;wBACrG,IAAI,KAAK;4BAAE,MAAM,CAAC,KAAK,CAAC,CAAA;;4BACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;oBAC1B,CAAC,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;gBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC/B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAsD,EAAE,CAAC;oBACvG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;4BAC9B,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;wBAChF,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;YAED,MAAM,eAAe,GAAG,MAAM,mBAAmB,EAAE,CAAA;YAEnD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACrG,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC9H,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EAAE;;;;;;;;qDAQkC;QAC/C,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAA;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAA;YAEpD,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/B,IAAI,UAAU,GAA6C,IAAI,CAAA;gBAC/D,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBACnD,UAAU,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAA;gBAC7C,CAAC;gBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBAE7B,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,MAAM,EAAE,WAAW;gCACnB,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,WAAW,EAAE,UAAU;6BACxB,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;iBACH,CAAA;YACH,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5B,IAAI,UAAU,GAA6C,IAAI,CAAA;gBAC/D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,CAAyB,CAAA;oBACtE,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;gBAC3C,CAAC;gBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBAE7B,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,MAAM,EAAE,QAAQ;gCAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,WAAW,EAAE,GAAG,CAAC,IAAI;gCACrB,KAAK,EAAE,GAAG,CAAC,KAAK;gCAChB,eAAe,EAAE,GAAG,CAAC,cAAc;gCACnC,UAAU,EAAE,GAAG,CAAC,SAAS;gCACzB,WAAW,EAAE,UAAU;6BACxB,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;iBACH,CAAA;YACH,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,MAAM,EAAE,WAAW;gCACnB,OAAO,EAAE,8DAA8D;gCACvE,UAAU,EAAE,GAAG,CAAC,UAAU;gCAC1B,gBAAgB,EAAE,GAAG,CAAC,eAAe;6BACtC,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;iBACH,CAAA;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxE,CAAC;aACH,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACxI,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE;;;;;;;;;4JASyI;QACtJ,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;SAC7F;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;QACxB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,aAAa,CAAA;YAChD,MAAM,KAAK,GAA2B;gBACpC,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,CAAC;gBACjB,uBAAuB,EAAE,CAAC;gBAC1B,KAAK,EAAE,CAAC;aACT,CAAA;YACD,MAAM,UAAU,GAAG,CAAC,CAAA;YACpB,MAAM,gBAAgB,GAAa,EAAE,CAAA;YAErC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC7D,gBAAgB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC/D,IAAI,aAAa,EAAE,CAAC;oBAClB,KAAK,CAAC,gBAAgB,CAAC;wBACrB,MAAM,EAAE,wBAAwB;wBAChC,MAAM,EAAE;4BACN,aAAa;4BACb,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;4BACnC,KAAK,EAAE,UAAU;4BACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;yBAC1B;qBACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,IAAI,UAAU,GAA6C,IAAI,CAAA;YAC/D,IAAI,CAAC;gBACH,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;YAC3C,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAE7B,MAAM,SAAS,GAAG,oBAAoB,UAAU,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAA;YAEnF,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,MAAM,EAAE,WAAW;4BACnB,IAAI;4BACJ,UAAU,EAAE,SAAS;4BACrB,WAAW,EAAE,UAAU;4BACvB,SAAS,EAAE,gBAAgB;yBAC5B,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,2EAA2E,SAAS,EAAE;qBACrG,CAAC;aACH,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAChI,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;YAC3G,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SAC9E;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE,EAAE;QACtC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAuB,QAAQ,SAAS,IAAI,EAAE,CAAC,CAAA;QACjE,IAAI,CAAC;YACH,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAyB,CAAA;gBAClE,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;gBAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;gBACjC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC/B,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,QAAQ,EAAE,EAAE,CAAC;aACnE,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5H,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SAC9E;KACF,EACD,KAAK,EAAE,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE,EAAE;QAC5B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC;YACH,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAAC;iBAC3G,CAAA;YACH,CAAC;YAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;YAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;YAExD,IAAI,IAAI,GAAG,cAAc,QAAQ,CAAC,MAAM,MAAM,CAAA;YAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAA;YAC7C,CAAC;YACD,IAAI,IAAI,kBAAkB,UAAU,CAAC,MAAM,MAAM,CAAA;YACjD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAA;YAC7C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;aACxD,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3H,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;IACH,CAAC,CACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,75 @@
1
+ export type ButtonType = 'HOME' | 'LOCK' | 'SIDE_BUTTON' | 'APPLE_PAY' | 'SIRI';
2
+ export interface DeviceActionMap {
3
+ tap: {
4
+ x: number;
5
+ y: number;
6
+ duration?: number;
7
+ };
8
+ swipe: {
9
+ fromX: number;
10
+ fromY: number;
11
+ toX: number;
12
+ toY: number;
13
+ duration?: number;
14
+ delta?: number;
15
+ };
16
+ button: {
17
+ button: ButtonType;
18
+ duration?: number;
19
+ };
20
+ 'input-text': {
21
+ text: string;
22
+ };
23
+ key: {
24
+ key: number | string;
25
+ duration?: number;
26
+ };
27
+ 'key-sequence': {
28
+ keySequence: (number | string)[];
29
+ };
30
+ 'describe-all': {
31
+ nested?: boolean;
32
+ };
33
+ 'describe-point': {
34
+ x: number;
35
+ y: number;
36
+ nested?: boolean;
37
+ };
38
+ }
39
+ export type DeviceAction = keyof DeviceActionMap;
40
+ export interface DeviceClient {
41
+ tap(x: number, y: number, duration?: number): Promise<void>;
42
+ swipe(fromX: number, fromY: number, toX: number, toY: number, duration?: number, delta?: number): Promise<void>;
43
+ pressButton(button: ButtonType, duration?: number): Promise<void>;
44
+ inputText(text: string): Promise<void>;
45
+ pressKey(key: number | string, duration?: number): Promise<void>;
46
+ pressKeySequence(keySequence: (number | string)[]): Promise<void>;
47
+ describeAll(nested?: boolean): Promise<unknown>;
48
+ describePoint(x: number, y: number, nested?: boolean): Promise<unknown>;
49
+ screenshot(): Promise<Buffer>;
50
+ }
51
+ export declare function isPhysicalDeviceUdid(udid: string): boolean;
52
+ export interface UIElement {
53
+ type?: string;
54
+ AXLabel?: string | null;
55
+ label?: string | null;
56
+ title?: string | null;
57
+ name?: string | null;
58
+ AXValue?: string | null;
59
+ value?: string | null;
60
+ frame?: {
61
+ x: number;
62
+ y: number;
63
+ width: number;
64
+ height: number;
65
+ };
66
+ [key: string]: unknown;
67
+ }
68
+ export type ScanRegion = 'full' | 'top-half' | 'bottom-half' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
69
+ export interface ScanCommand {
70
+ grid_step: number;
71
+ x_start: number;
72
+ y_start: number;
73
+ x_end: number;
74
+ y_end: number;
75
+ }
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ const SIMULATOR_UUID_RE = /^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/;
2
+ export function isPhysicalDeviceUdid(udid) {
3
+ if (udid === 'booted')
4
+ return false;
5
+ return !SIMULATOR_UUID_RE.test(udid);
6
+ }
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA2BA,MAAM,iBAAiB,GAAG,+EAA+E,CAAA;AAEzG,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACnC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { UIElement } from './types.js';
2
+ export declare function filterUnlabeledOther(elements: UIElement[]): UIElement[];
3
+ export declare function filterVisibleCoords(elements: UIElement[], screenWidth: number, screenHeight: number): UIElement[];
4
+ export declare function filterInteractiveTypes(elements: UIElement[]): UIElement[];
5
+ export declare function dedup(elements: UIElement[]): UIElement[];
6
+ export interface ScanResult {
7
+ elements: UIElement[];
8
+ warning?: string;
9
+ }
10
+ export declare function applyScanUiFilters(rawElements: UIElement[], screenWidth: number, screenHeight: number, query?: string): ScanResult;
11
+ export declare function applyDescribeScreenFilters(rawElements: UIElement[], screenWidth: number, screenHeight: number): UIElement[];
@@ -0,0 +1,100 @@
1
+ const INTERACTIVE_TYPES = new Set([
2
+ 'Button', 'Link', 'TextField', 'SecureTextField', 'TextView',
3
+ 'SearchField', 'Switch', 'TabBar', 'Icon', 'Cell',
4
+ 'Slider', 'Toggle', 'Picker', 'SegmentedControl', 'Stepper',
5
+ 'MenuItem', 'MenuBarItem', 'Tab',
6
+ ]);
7
+ export function filterUnlabeledOther(elements) {
8
+ return elements.filter(el => el.type !== 'Other' || Boolean(el.AXLabel || el.label || el.title || el.name));
9
+ }
10
+ export function filterVisibleCoords(elements, screenWidth, screenHeight) {
11
+ return elements.filter(el => {
12
+ const f = el.frame;
13
+ if (!f)
14
+ return false;
15
+ const cx = f.x + f.width / 2;
16
+ const cy = f.y + f.height / 2;
17
+ return cx >= 0 && cx <= screenWidth && cy >= 0 && cy <= screenHeight;
18
+ });
19
+ }
20
+ export function filterInteractiveTypes(elements) {
21
+ return elements.filter(el => el.type && INTERACTIVE_TYPES.has(el.type));
22
+ }
23
+ export function dedup(elements) {
24
+ const seen = new Set();
25
+ return elements.filter(el => {
26
+ const label = el.AXLabel ?? el.label ?? el.title ?? '';
27
+ const f = el.frame;
28
+ const key = `${el.type}|${label}|${f?.x},${f?.y},${f?.width},${f?.height}`;
29
+ if (seen.has(key))
30
+ return false;
31
+ seen.add(key);
32
+ return true;
33
+ });
34
+ }
35
+ function escapeRegex(s) {
36
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
37
+ }
38
+ function elementMatchesQuery(el, re) {
39
+ const fields = [el.AXLabel, el.label, el.title, el.name, el.AXValue, el.value];
40
+ for (const f of fields) {
41
+ if (f && re.test(f))
42
+ return true;
43
+ }
44
+ return false;
45
+ }
46
+ function grepElements(elements, query) {
47
+ const re = new RegExp(escapeRegex(query), 'i');
48
+ return elements.filter(el => elementMatchesQuery(el, re));
49
+ }
50
+ export function applyScanUiFilters(rawElements, screenWidth, screenHeight, query) {
51
+ const base = dedup(filterUnlabeledOther(rawElements));
52
+ const visible = filterVisibleCoords(base, screenWidth, screenHeight);
53
+ const interactive = filterInteractiveTypes(base);
54
+ const visibleInteractive = filterInteractiveTypes(visible);
55
+ if (!query) {
56
+ return { elements: visibleInteractive };
57
+ }
58
+ const p1 = grepElements(visibleInteractive, query);
59
+ if (p1.length > 0)
60
+ return { elements: p1 };
61
+ const p2 = grepElements(interactive, query);
62
+ if (p2.length > 0) {
63
+ return {
64
+ elements: p2,
65
+ warning: `Matched ${p2.length} interactive element(s) but they may be off-screen. Scroll to bring them into view.`,
66
+ };
67
+ }
68
+ const p3 = grepElements(visible, query);
69
+ if (p3.length > 0) {
70
+ const hasOversizedContainer = p3.some(el => {
71
+ if (el.type !== 'Other')
72
+ return false;
73
+ const f = el.frame;
74
+ if (!f)
75
+ return false;
76
+ return f.width > screenWidth * 0.8 && f.height > screenHeight * 0.4;
77
+ });
78
+ return {
79
+ elements: p3,
80
+ warning: hasOversizedContainer
81
+ ? `Matched element(s) contain "${query}" in their label but are large container elements. The exact tap target is somewhere within that frame; use coordinate guessing or describe_point to narrow it down.`
82
+ : undefined,
83
+ };
84
+ }
85
+ const p4 = grepElements(base, query);
86
+ if (p4.length > 0) {
87
+ return {
88
+ elements: p4,
89
+ warning: `No visible interactive match. Found ${p4.length} element(s) matching "${query}" — may be off-screen or non-interactive.`,
90
+ };
91
+ }
92
+ return {
93
+ elements: visibleInteractive,
94
+ warning: `No elements matching "${query}" found. Returning all ${visibleInteractive.length} visible interactive elements instead.`,
95
+ };
96
+ }
97
+ export function applyDescribeScreenFilters(rawElements, screenWidth, screenHeight) {
98
+ return filterVisibleCoords(filterUnlabeledOther(rawElements), screenWidth, screenHeight);
99
+ }
100
+ //# sourceMappingURL=ui-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-filters.js","sourceRoot":"","sources":["../src/ui-filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type Server } from 'node:http';
2
+ export declare function createViewerServer(): {
3
+ server: Server;
4
+ start: (port: number) => Promise<number>;
5
+ };
@@ -0,0 +1,233 @@
1
+ import express from 'express';
2
+ import { createServer } from 'node:http';
3
+ import { WebSocketServer, WebSocket } from 'ws';
4
+ import { log } from '../logger.js';
5
+ import { getDeviceClient } from '../device-client.js';
6
+ const VIEWER_HTML = `<!DOCTYPE html>
7
+ <html>
8
+ <head>
9
+ <meta charset="utf-8">
10
+ <meta name="viewport" content="width=device-width, initial-scale=1">
11
+ <title>blitz-iphone-mcp viewer</title>
12
+ <style>
13
+ * { margin: 0; padding: 0; box-sizing: border-box; }
14
+ body { background: #1a1a1a; display: flex; justify-content: center; align-items: center; height: 100vh; font-family: system-ui; }
15
+ .device-frame {
16
+ background: #2C2B2C;
17
+ border-radius: 44px;
18
+ padding: 16px;
19
+ box-shadow: 0 20px 60px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.05);
20
+ }
21
+ .screen-container {
22
+ background: #000;
23
+ border-radius: 32px;
24
+ overflow: hidden;
25
+ position: relative;
26
+ }
27
+ canvas {
28
+ display: block;
29
+ width: 100%;
30
+ height: 100%;
31
+ }
32
+ .status {
33
+ position: fixed;
34
+ bottom: 16px;
35
+ left: 50%;
36
+ transform: translateX(-50%);
37
+ color: #666;
38
+ font-size: 12px;
39
+ }
40
+ .no-device {
41
+ color: #888;
42
+ text-align: center;
43
+ padding: 40px;
44
+ font-size: 14px;
45
+ }
46
+ </style>
47
+ </head>
48
+ <body>
49
+ <div id="root">
50
+ <div class="no-device" id="no-device">Connecting to device...</div>
51
+ </div>
52
+ <div class="status" id="status"></div>
53
+ <script>
54
+ const params = new URLSearchParams(location.search);
55
+ const udid = params.get('udid');
56
+ if (!udid) {
57
+ document.getElementById('no-device').textContent = 'No device UDID specified. Use ?udid=DEVICE_UDID';
58
+ } else {
59
+ const root = document.getElementById('root');
60
+ root.innerHTML = '';
61
+ const frame = document.createElement('div');
62
+ frame.className = 'device-frame';
63
+ const container = document.createElement('div');
64
+ container.className = 'screen-container';
65
+ const canvas = document.createElement('canvas');
66
+ container.appendChild(canvas);
67
+ frame.appendChild(container);
68
+ root.appendChild(frame);
69
+
70
+ const ctx = canvas.getContext('2d');
71
+ const status = document.getElementById('status');
72
+ let frameCount = 0;
73
+ let lastFpsTime = Date.now();
74
+
75
+ const wsProto = location.protocol === 'https:' ? 'wss:' : 'ws:';
76
+ const ws = new WebSocket(wsProto + '//' + location.host + '/stream/' + encodeURIComponent(udid));
77
+ ws.binaryType = 'arraybuffer';
78
+
79
+ ws.onopen = () => { status.textContent = 'Connected'; };
80
+ ws.onclose = () => { status.textContent = 'Disconnected'; };
81
+ ws.onerror = () => { status.textContent = 'Connection error'; };
82
+
83
+ ws.onmessage = (event) => {
84
+ const blob = new Blob([event.data], { type: 'image/png' });
85
+ const url = URL.createObjectURL(blob);
86
+ const img = new Image();
87
+ img.onload = () => {
88
+ if (canvas.width !== img.width || canvas.height !== img.height) {
89
+ canvas.width = img.width;
90
+ canvas.height = img.height;
91
+ const aspect = img.width / img.height;
92
+ const maxH = window.innerHeight - 100;
93
+ const h = Math.min(maxH, 800);
94
+ container.style.width = Math.round(h * aspect) + 'px';
95
+ container.style.height = h + 'px';
96
+ }
97
+ ctx.drawImage(img, 0, 0);
98
+ URL.revokeObjectURL(url);
99
+ frameCount++;
100
+ const now = Date.now();
101
+ if (now - lastFpsTime >= 1000) {
102
+ status.textContent = frameCount + ' fps';
103
+ frameCount = 0;
104
+ lastFpsTime = now;
105
+ }
106
+ };
107
+ img.src = url;
108
+ };
109
+ }
110
+ </script>
111
+ </body>
112
+ </html>`;
113
+ const activeRelays = new Map();
114
+ const MAX_CONSECUTIVE_FAILURES = 10;
115
+ function startRelay(udid, client, ws) {
116
+ const existing = activeRelays.get(udid);
117
+ if (existing) {
118
+ existing.clients.add(ws);
119
+ log('ViewerRelay', 'log', `Client joined relay for ${udid} (${existing.clients.size} clients)`);
120
+ return;
121
+ }
122
+ const clients = new Set([ws]);
123
+ let pending = false;
124
+ let consecutiveFailures = 0;
125
+ const intervalId = setInterval(async () => {
126
+ if (pending || clients.size === 0)
127
+ return;
128
+ pending = true;
129
+ try {
130
+ const pngBuffer = await client.screenshot();
131
+ consecutiveFailures = 0;
132
+ for (const c of clients) {
133
+ if (c.readyState === WebSocket.OPEN)
134
+ c.send(pngBuffer);
135
+ }
136
+ }
137
+ catch (e) {
138
+ consecutiveFailures++;
139
+ if (consecutiveFailures <= 3 || consecutiveFailures === MAX_CONSECUTIVE_FAILURES) {
140
+ log('ViewerRelay', 'warn', `Screenshot poll failed for ${udid} (${consecutiveFailures}/${MAX_CONSECUTIVE_FAILURES}): ${e}`);
141
+ }
142
+ if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
143
+ log('ViewerRelay', 'warn', `Stopping relay for ${udid} after ${MAX_CONSECUTIVE_FAILURES} consecutive failures`);
144
+ for (const c of clients)
145
+ c.close(1011, 'WDA session lost');
146
+ clearInterval(intervalId);
147
+ activeRelays.delete(udid);
148
+ }
149
+ }
150
+ finally {
151
+ pending = false;
152
+ }
153
+ }, 50);
154
+ activeRelays.set(udid, { clients, intervalId });
155
+ log('ViewerRelay', 'log', `Started relay for ${udid}`);
156
+ }
157
+ function removeClientFromRelay(udid, ws) {
158
+ const relay = activeRelays.get(udid);
159
+ if (!relay)
160
+ return;
161
+ relay.clients.delete(ws);
162
+ if (relay.clients.size === 0) {
163
+ clearInterval(relay.intervalId);
164
+ activeRelays.delete(udid);
165
+ log('ViewerRelay', 'log', `Stopped relay for ${udid} (no clients)`);
166
+ }
167
+ }
168
+ export function createViewerServer() {
169
+ const app = express();
170
+ app.get('/', (_req, res) => {
171
+ res.type('html').send(VIEWER_HTML);
172
+ });
173
+ app.get('/health', (_req, res) => {
174
+ res.json({ ok: true });
175
+ });
176
+ const httpServer = createServer(app);
177
+ const wss = new WebSocketServer({ noServer: true });
178
+ httpServer.on('upgrade', (req, socket, head) => {
179
+ const rawUrl = req.url ?? '';
180
+ let pathname = '';
181
+ try {
182
+ pathname = new URL(rawUrl, 'http://localhost').pathname;
183
+ }
184
+ catch {
185
+ return;
186
+ }
187
+ const match = pathname.match(/^\/stream\/([^/]+)$/);
188
+ if (!match)
189
+ return;
190
+ wss.handleUpgrade(req, socket, head, (ws) => {
191
+ wss.emit('connection', ws, req, match[1]);
192
+ });
193
+ });
194
+ wss.on('connection', (ws, _req, udid) => {
195
+ const decodedUdid = decodeURIComponent(udid);
196
+ log('ViewerRelay', 'log', `WS connected for device ${decodedUdid}`);
197
+ void (async () => {
198
+ try {
199
+ const client = await getDeviceClient(decodedUdid);
200
+ startRelay(decodedUdid, client, ws);
201
+ ws.on('close', () => removeClientFromRelay(decodedUdid, ws));
202
+ ws.on('error', () => removeClientFromRelay(decodedUdid, ws));
203
+ }
204
+ catch (e) {
205
+ log('ViewerRelay', 'error', `Failed to start relay for ${decodedUdid}: ${e}`);
206
+ ws.close(1011, 'Failed to connect to device');
207
+ }
208
+ })();
209
+ });
210
+ const start = (port) => {
211
+ return new Promise((resolve, reject) => {
212
+ const tryPort = (p) => {
213
+ httpServer.once('error', (err) => {
214
+ if (err.code === 'EADDRINUSE' && p < port + 50) {
215
+ tryPort(p + 1);
216
+ }
217
+ else {
218
+ reject(err);
219
+ }
220
+ });
221
+ httpServer.listen(p, () => {
222
+ const addr = httpServer.address();
223
+ const boundPort = typeof addr === 'object' && addr ? addr.port : p;
224
+ log('Viewer', 'log', `Viewer server listening on http://localhost:${boundPort}`);
225
+ resolve(boundPort);
226
+ });
227
+ };
228
+ tryPort(port);
229
+ });
230
+ };
231
+ return { server: httpServer, start };
232
+ }
233
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface PhysicalDevice {
2
+ udid: string;
3
+ name: string;
4
+ model: string;
5
+ connectionType: 'usb' | 'wifi' | 'both';
6
+ paired: boolean;
7
+ developerModeEnabled: boolean;
8
+ wdaInstalled: boolean;
9
+ wdaRunning: boolean;
10
+ }
11
+ export declare function listPhysicalDevices(): Promise<PhysicalDevice[]>;
12
+ export declare function getPhysicalDevice(udid: string): Promise<PhysicalDevice | null>;
@@ -0,0 +1,91 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { log } from '../logger.js';
4
+ import { childEnv } from '../child-env.js';
5
+ import { WDAClient } from './wda-client.js';
6
+ const execAsync = promisify(exec);
7
+ export async function listPhysicalDevices() {
8
+ const devices = new Map();
9
+ try {
10
+ const { stdout } = await execAsync('xcrun devicectl list devices --json-output /dev/stdout 2>/dev/null', { env: childEnv() });
11
+ const jsonStart = stdout.indexOf('{');
12
+ if (jsonStart < 0)
13
+ throw new Error('No JSON in devicectl output');
14
+ const json = JSON.parse(stdout.substring(jsonStart));
15
+ const deviceList = json?.result?.devices ?? [];
16
+ for (const d of deviceList) {
17
+ const udid = d.hardwareProperties?.udid ?? d.identifier;
18
+ if (!udid)
19
+ continue;
20
+ if (d.connectionProperties?.transportType === 'localNetwork' && !d.hardwareProperties?.platform?.includes('iOS')) {
21
+ continue;
22
+ }
23
+ const connectionType = d.connectionProperties?.transportType === 'wired' ? 'usb'
24
+ : d.connectionProperties?.transportType === 'localNetwork' ? 'wifi'
25
+ : 'usb';
26
+ devices.set(udid, {
27
+ udid,
28
+ name: d.deviceProperties?.name ?? 'iPhone',
29
+ model: d.hardwareProperties?.marketingName ?? d.hardwareProperties?.productType ?? 'iPhone',
30
+ connectionType,
31
+ paired: true,
32
+ developerModeEnabled: d.deviceProperties?.developerModeStatus === 'enabled',
33
+ wdaInstalled: false,
34
+ wdaRunning: false,
35
+ });
36
+ }
37
+ }
38
+ catch {
39
+ log('DeviceDiscovery', 'log', 'xcrun devicectl not available, falling back to system_profiler');
40
+ }
41
+ if (devices.size === 0) {
42
+ try {
43
+ const { stdout } = await execAsync('system_profiler SPUSBDataType -json 2>/dev/null', { env: childEnv() });
44
+ const json = JSON.parse(stdout);
45
+ const usbItems = json?.SPUSBDataType ?? [];
46
+ const findIPhones = (items) => {
47
+ for (const item of items) {
48
+ const name = item._name;
49
+ const serial = item.serial_num;
50
+ if (name && serial && (name.includes('iPhone') || name.includes('iPad'))) {
51
+ devices.set(serial, {
52
+ udid: serial,
53
+ name,
54
+ model: name,
55
+ connectionType: 'usb',
56
+ paired: true,
57
+ developerModeEnabled: true,
58
+ wdaInstalled: false,
59
+ wdaRunning: false,
60
+ });
61
+ }
62
+ if (item._items && Array.isArray(item._items)) {
63
+ findIPhones(item._items);
64
+ }
65
+ }
66
+ };
67
+ findIPhones(usbItems);
68
+ }
69
+ catch {
70
+ log('DeviceDiscovery', 'log', 'system_profiler fallback also failed');
71
+ }
72
+ }
73
+ const deviceList = Array.from(devices.values());
74
+ await Promise.all(deviceList.map(async (device) => {
75
+ try {
76
+ const client = WDAClient.getInstance(device.udid);
77
+ const running = await client.isReachable();
78
+ device.wdaRunning = running;
79
+ device.wdaInstalled = running;
80
+ }
81
+ catch {
82
+ // WDA not reachable
83
+ }
84
+ }));
85
+ return deviceList;
86
+ }
87
+ export async function getPhysicalDevice(udid) {
88
+ const devices = await listPhysicalDevices();
89
+ return devices.find(d => d.udid === udid) ?? null;
90
+ }
91
+ //# sourceMappingURL=device-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-discovery.js","sourceRoot":"","sources":["../../src/wda/device-discovery.ts"],"names":[],"mappings":"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"}