@autifyhq/aximo-cli 0.4.0 → 0.6.0

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 (96) hide show
  1. package/README.md +219 -38
  2. package/dist/cli.js +5 -0
  3. package/dist/client.d.ts +2 -0
  4. package/dist/client.js +18 -0
  5. package/dist/commands/device/device-config.d.ts +14 -0
  6. package/dist/commands/device/device-config.js +46 -0
  7. package/dist/commands/device/device-config.test.d.ts +1 -0
  8. package/dist/commands/device/device-config.test.js +56 -0
  9. package/dist/commands/device/doctor.d.ts +13 -0
  10. package/dist/commands/device/doctor.js +142 -25
  11. package/dist/commands/device/doctor.test.js +61 -1
  12. package/dist/commands/device/register.d.ts +2 -0
  13. package/dist/commands/device/register.js +50 -32
  14. package/dist/commands/device/register.test.d.ts +1 -0
  15. package/dist/commands/device/register.test.js +95 -0
  16. package/dist/commands/device/unregister.d.ts +5 -3
  17. package/dist/commands/device/unregister.js +32 -33
  18. package/dist/commands/device/unregister.test.d.ts +1 -0
  19. package/dist/commands/device/unregister.test.js +73 -0
  20. package/dist/commands/mobile/connect-core.d.ts +12 -0
  21. package/dist/commands/mobile/connect-core.js +88 -0
  22. package/dist/commands/mobile/connect.d.ts +9 -0
  23. package/dist/commands/mobile/connect.js +35 -0
  24. package/dist/commands/mobile/connect.test.d.ts +1 -0
  25. package/dist/commands/mobile/connect.test.js +87 -0
  26. package/dist/commands/mobile/doctor.d.ts +28 -0
  27. package/dist/commands/mobile/doctor.js +162 -0
  28. package/dist/commands/mobile/index.d.ts +2 -0
  29. package/dist/commands/mobile/index.js +16 -0
  30. package/dist/commands/mobile/install.d.ts +43 -0
  31. package/dist/commands/mobile/install.js +76 -0
  32. package/dist/commands/mobile/install.test.d.ts +1 -0
  33. package/dist/commands/mobile/install.test.js +104 -0
  34. package/dist/commands/mobile/list.d.ts +10 -0
  35. package/dist/commands/mobile/list.js +30 -0
  36. package/dist/commands/mobile/paths.d.ts +14 -0
  37. package/dist/commands/mobile/paths.js +71 -0
  38. package/dist/commands/mobile/register-core.d.ts +19 -0
  39. package/dist/commands/mobile/register-core.js +46 -0
  40. package/dist/commands/mobile/register.d.ts +37 -0
  41. package/dist/commands/mobile/register.js +57 -0
  42. package/dist/commands/mobile/register.test.d.ts +1 -0
  43. package/dist/commands/mobile/register.test.js +91 -0
  44. package/dist/commands/mobile/setup.d.ts +27 -0
  45. package/dist/commands/mobile/setup.js +100 -0
  46. package/dist/commands/mobile/setup.test.d.ts +1 -0
  47. package/dist/commands/mobile/setup.test.js +49 -0
  48. package/dist/commands/mobile/unregister.d.ts +14 -0
  49. package/dist/commands/mobile/unregister.js +37 -0
  50. package/dist/commands/schema.js +29 -0
  51. package/dist/commands/session/create.d.ts +5 -0
  52. package/dist/commands/session/create.js +6 -0
  53. package/dist/index.d.ts +3 -0
  54. package/dist/index.js +3 -0
  55. package/dist/mobile-control/app-install.d.ts +21 -0
  56. package/dist/mobile-control/app-install.js +28 -0
  57. package/dist/mobile-control/app-install.test.d.ts +1 -0
  58. package/dist/mobile-control/app-install.test.js +78 -0
  59. package/dist/mobile-control/appium-controller.d.ts +42 -0
  60. package/dist/mobile-control/appium-controller.js +372 -0
  61. package/dist/mobile-control/appium-controller.test.d.ts +1 -0
  62. package/dist/mobile-control/appium-controller.test.js +252 -0
  63. package/dist/mobile-control/appium-import.d.ts +7 -0
  64. package/dist/mobile-control/appium-import.js +6 -0
  65. package/dist/mobile-control/appium-import.test.d.ts +1 -0
  66. package/dist/mobile-control/appium-import.test.js +9 -0
  67. package/dist/mobile-control/appium-server.d.ts +30 -0
  68. package/dist/mobile-control/appium-server.js +110 -0
  69. package/dist/mobile-control/appium-server.test.d.ts +1 -0
  70. package/dist/mobile-control/appium-server.test.js +108 -0
  71. package/dist/mobile-control/controller.d.ts +22 -0
  72. package/dist/mobile-control/controller.js +1 -0
  73. package/dist/mobile-control/devices.d.ts +23 -0
  74. package/dist/mobile-control/devices.js +129 -0
  75. package/dist/mobile-control/devices.test.d.ts +1 -0
  76. package/dist/mobile-control/devices.test.js +75 -0
  77. package/dist/mobile-control/exec.d.ts +6 -0
  78. package/dist/mobile-control/exec.js +13 -0
  79. package/dist/mobile-control/ios-signing.d.ts +28 -0
  80. package/dist/mobile-control/ios-signing.js +38 -0
  81. package/dist/mobile-control/ios-signing.test.d.ts +1 -0
  82. package/dist/mobile-control/ios-signing.test.js +73 -0
  83. package/dist/mobile-control/tunnel.d.ts +15 -0
  84. package/dist/mobile-control/tunnel.js +165 -0
  85. package/dist/mobile-control/tunnel.test.d.ts +1 -0
  86. package/dist/mobile-control/tunnel.test.js +155 -0
  87. package/dist/mobile-control/webdriver.d.ts +31 -0
  88. package/dist/mobile-control/webdriver.js +137 -0
  89. package/dist/mobile-control/webdriver.test.d.ts +1 -0
  90. package/dist/mobile-control/webdriver.test.js +45 -0
  91. package/dist/proxy.d.ts +11 -0
  92. package/dist/proxy.js +85 -0
  93. package/dist/proxy.test.d.ts +1 -0
  94. package/dist/proxy.test.js +72 -0
  95. package/dist/types.d.ts +1 -0
  96. package/package.json +5 -2
@@ -0,0 +1,72 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import { getGlobalDispatcher, setGlobalDispatcher } from "undici";
3
+ import { isPrivateHost, installProxySupport, resolveNoProxy } from "./proxy.js";
4
+ describe("isPrivateHost", () => {
5
+ it("treats loopback as private", () => {
6
+ expect(isPrivateHost("localhost")).toBe(true);
7
+ expect(isPrivateHost("127.0.0.1")).toBe(true);
8
+ expect(isPrivateHost("::1")).toBe(true);
9
+ expect(isPrivateHost("[::1]")).toBe(true);
10
+ });
11
+ it("treats RFC1918 / link-local IPv4 as private", () => {
12
+ expect(isPrivateHost("10.1.2.3")).toBe(true);
13
+ expect(isPrivateHost("172.30.193.138")).toBe(true); // the on-prem repro
14
+ expect(isPrivateHost("192.168.0.5")).toBe(true);
15
+ expect(isPrivateHost("169.254.10.10")).toBe(true);
16
+ });
17
+ it("treats 172.x outside 16-31 as public", () => {
18
+ expect(isPrivateHost("172.15.0.1")).toBe(false);
19
+ expect(isPrivateHost("172.32.0.1")).toBe(false);
20
+ });
21
+ it("treats IPv6 ULA / link-local as private", () => {
22
+ expect(isPrivateHost("fd00::1")).toBe(true);
23
+ expect(isPrivateHost("fe80::1")).toBe(true);
24
+ });
25
+ it("treats public hosts as not private", () => {
26
+ expect(isPrivateHost("aximo.autify.com")).toBe(false);
27
+ expect(isPrivateHost("8.8.8.8")).toBe(false);
28
+ expect(isPrivateHost("2606:4700::1")).toBe(false);
29
+ });
30
+ it("treats DNS names that start like IPv6 ULA/link-local as public", () => {
31
+ expect(isPrivateHost("fd.example.com")).toBe(false);
32
+ expect(isPrivateHost("fc00.example.com")).toBe(false);
33
+ expect(isPrivateHost("fe80.example.com")).toBe(false);
34
+ });
35
+ });
36
+ describe("resolveNoProxy", () => {
37
+ it("always forces loopback direct", () => {
38
+ expect(resolveNoProxy({}, null).split(",")).toEqual(["localhost", "127.0.0.1", "::1"]);
39
+ });
40
+ it("adds a private server host so the on-prem link stays direct", () => {
41
+ const result = resolveNoProxy({}, "172.30.193.138").split(",");
42
+ expect(result).toContain("172.30.193.138");
43
+ });
44
+ it("leaves a public server host to the proxy", () => {
45
+ expect(resolveNoProxy({}, "aximo.autify.com")).not.toContain("aximo.autify.com");
46
+ });
47
+ it("preserves an existing NO_PROXY and dedupes", () => {
48
+ const result = resolveNoProxy({ NO_PROXY: "example.com, localhost" }, "10.0.0.1");
49
+ const parts = result.split(",");
50
+ expect(parts).toContain("example.com");
51
+ expect(parts).toContain("10.0.0.1");
52
+ expect(parts.filter((p) => p === "localhost")).toHaveLength(1);
53
+ });
54
+ });
55
+ describe("installProxySupport", () => {
56
+ // installProxySupport sets a global undici dispatcher; restore it so the
57
+ // proxy agent doesn't leak into other tests' fetch() calls.
58
+ const original = getGlobalDispatcher();
59
+ afterEach(() => setGlobalDispatcher(original));
60
+ it("is a no-op when no proxy env is set", async () => {
61
+ const env = {};
62
+ expect(await installProxySupport(env)).toBe(false);
63
+ expect(env["NO_PROXY"]).toBeUndefined();
64
+ });
65
+ it("installs a dispatcher and writes NO_PROXY when a proxy is set", async () => {
66
+ const env = { HTTPS_PROXY: "http://proxy.local:8080" };
67
+ expect(await installProxySupport(env)).toBe(true);
68
+ const noProxy = env["NO_PROXY"] ?? "";
69
+ expect(noProxy.split(",")).toContain("127.0.0.1");
70
+ expect(env["no_proxy"]).toBe(noProxy);
71
+ });
72
+ });
package/dist/types.d.ts CHANGED
@@ -37,6 +37,7 @@ export interface CreateSessionInput {
37
37
  uploadType?: FileType | undefined;
38
38
  appName?: string | undefined;
39
39
  bundleId?: string | undefined;
40
+ userDeviceId?: string | undefined;
40
41
  }
41
42
  export interface CreateSessionResult {
42
43
  success: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autifyhq/aximo-cli",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Autify Aximo Command Line Interface (CLI)",
5
5
  "keywords": [
6
6
  "autify",
@@ -37,7 +37,10 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@modelcontextprotocol/sdk": "^1.29.0",
40
+ "appium": "^3.5.2",
40
41
  "citty": "0.2.2",
42
+ "socket.io-client": "^4.8.1",
43
+ "undici": "^7.28.0",
41
44
  "ws": "^8.18.0",
42
45
  "zod": "^3.25.76"
43
46
  },
@@ -59,7 +62,7 @@
59
62
  "vitest": "4.1.4"
60
63
  },
61
64
  "engines": {
62
- "node": ">=20"
65
+ "node": ">=20.18.1"
63
66
  },
64
67
  "scripts": {
65
68
  "build": "tsc",