@8bitbish/screenshot-service 1.0.2 → 1.1.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.
package/README.md CHANGED
@@ -34,6 +34,23 @@ npx @8bitbish/screenshot-service test-android
34
34
 
35
35
  ## Usage
36
36
 
37
+ ### Listing connected devices (1.1.0+)
38
+
39
+ ```typescript
40
+ import { listDevices } from '@8bitbish/screenshot-service'
41
+
42
+ const devices = await listDevices()
43
+ // [
44
+ // { id: '00008110-...', platform: 'ios', name: 'iPhone 14', model: 'iPhone14,7', softwareVersion: 'iOS 26.4.2', available: true },
45
+ // { id: 'R5CW13B2FWT', platform: 'android', name: 'Galaxy S23 Ultra', model: 'SM-S918B', softwareVersion: 'One UI 8.0', available: true },
46
+ // ]
47
+ ```
48
+
49
+ Use `device.id` to target a specific device in capture calls. Duplicate ADB endpoints
50
+ that point to the same physical phone are deduped to a single entry.
51
+
52
+ ### Capturing
53
+
37
54
  ```typescript
38
55
  import {
39
56
  triggerPhoneScreenshot,
@@ -56,6 +73,10 @@ fs.writeFileSync('iphone.png', ios.image)
56
73
  // Android — no tunnel needed
57
74
  const android = await triggerAndroidScreenshot({ includeLocation: true })
58
75
  fs.writeFileSync('android.png', android.image)
76
+
77
+ // Target a specific device by id from listDevices()
78
+ const ofGalaxy = await triggerAndroidScreenshot({ deviceId: 'R5CW13B2FWT' })
79
+ const ofiPhone = await triggerPhoneScreenshot({ deviceId: '00008110-...' })
59
80
  // android.device.{model, name, androidVersion, softwareVersion}
60
81
  // same foregroundApp + location shape as iOS
61
82
 
@@ -69,14 +90,20 @@ fs.writeFileSync('recording.mov', rec.video)
69
90
  ## API
70
91
 
71
92
  ```typescript
93
+ listDevices(): Promise<ConnectedDevice[]>
94
+ // returns { id, platform: 'ios'|'android', name, model, softwareVersion, available, unavailableReason? }
95
+ // — duplicate ADB endpoints to the same phone are deduped.
96
+
72
97
  triggerPhoneScreenshot(opts?: {
73
98
  timeout?: number // default 30000
74
99
  includeLocation?: boolean // default false
100
+ deviceId?: string // iOS UDID from listDevices(); default: first connected
75
101
  }): Promise<ScreenshotResult>
76
102
 
77
103
  triggerAndroidScreenshot(opts?: {
78
104
  timeout?: number
79
105
  includeLocation?: boolean
106
+ deviceId?: string // Android ro.serialno from listDevices(); default: best available (awake preferred)
80
107
  }): Promise<AndroidScreenshotResult>
81
108
 
82
109
  fetchLatestPhoneRecording(opts?: {
@@ -84,6 +111,7 @@ fetchLatestPhoneRecording(opts?: {
84
111
  waitTimeout?: number // default 300000 (5 min)
85
112
  timeout?: number
86
113
  includeLocation?: boolean
114
+ deviceId?: string // iOS UDID; default: first connected
87
115
  }): Promise<PhoneRecordingResult>
88
116
 
89
117
  fetchLatestAndroidRecording(opts?: {
@@ -91,6 +119,7 @@ fetchLatestAndroidRecording(opts?: {
91
119
  waitTimeout?: number
92
120
  timeout?: number
93
121
  includeLocation?: boolean
122
+ deviceId?: string // Android ro.serialno; default: best available
94
123
  }): Promise<AndroidRecordingResult>
95
124
 
96
125
  // iOS tunnel control (Android needs no tunnel — ADB handles it)
@@ -5,6 +5,6 @@ export interface AndroidDeviceInfo {
5
5
  androidVersion: string;
6
6
  softwareVersion: string;
7
7
  }
8
- export declare function getAndroidDeviceInfo(adb: string): Promise<AndroidDeviceInfo>;
9
- export declare function getAndroidForegroundApp(adb: string): Promise<ForegroundApp | null>;
8
+ export declare function getAndroidDeviceInfo(adb: string, serial?: string | null): Promise<AndroidDeviceInfo>;
9
+ export declare function getAndroidForegroundApp(adb: string, serial?: string | null): Promise<ForegroundApp | null>;
10
10
  //# sourceMappingURL=android-device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"android-device.d.ts","sourceRoot":"","sources":["../android-device.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;CACxB;AA4DD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBlF;AAuDD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA0BxF"}
1
+ {"version":3,"file":"android-device.d.ts","sourceRoot":"","sources":["../android-device.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;CACxB;AAgED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBhH;AAuDD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA0BtH"}
@@ -46,8 +46,11 @@ function samsungModelName(modelNumber) {
46
46
  const base = modelNumber.match(/^(SM-[A-Z]\d{3})/)?.[1];
47
47
  return base ? (SAMSUNG_MODELS[base] ?? null) : null;
48
48
  }
49
- function prop(adb, key) {
50
- return execFileAsync(adb, ["shell", "getprop", key], { timeout: 5000 })
49
+ function adbArgs(serial, ...args) {
50
+ return serial ? ["-s", serial, ...args] : args;
51
+ }
52
+ function prop(adb, key, serial) {
53
+ return execFileAsync(adb, adbArgs(serial, "shell", "getprop", key), { timeout: 5000 })
51
54
  .then(r => r.stdout.trim())
52
55
  .catch(() => "");
53
56
  }
@@ -60,17 +63,17 @@ function formatOneUi(raw) {
60
63
  const patch = n % 100;
61
64
  return patch > 0 ? `One UI ${major}.${minor}.${patch}` : `One UI ${major}.${minor}`;
62
65
  }
63
- async function getAndroidDeviceInfo(adb) {
66
+ async function getAndroidDeviceInfo(adb, serial = null) {
64
67
  const [n1, n2, n3, n4, modelNumber, androidVersion, oneui, miui, emui] = await Promise.all([
65
- prop(adb, "ro.product.marketname"), // Samsung (most firmware)
66
- prop(adb, "ro.vendor.oem.model"), // Samsung alternative
67
- prop(adb, "ro.product.vendor.marketname"), // Samsung alternative
68
- prop(adb, "ro.config.marketing_name"), // Samsung alternative
69
- prop(adb, "ro.product.model"), // raw model number fallback
70
- prop(adb, "ro.build.version.release"),
71
- prop(adb, "ro.build.version.oneui"), // Samsung: "80000" → One UI 8.0
72
- prop(adb, "ro.miui.ui.version.name"), // Xiaomi: "MIUI 14"
73
- prop(adb, "ro.build.version.emui"), // Huawei: "EmotionUI 12"
68
+ prop(adb, "ro.product.marketname", serial), // Samsung (most firmware)
69
+ prop(adb, "ro.vendor.oem.model", serial), // Samsung alternative
70
+ prop(adb, "ro.product.vendor.marketname", serial), // Samsung alternative
71
+ prop(adb, "ro.config.marketing_name", serial), // Samsung alternative
72
+ prop(adb, "ro.product.model", serial), // raw model number fallback
73
+ prop(adb, "ro.build.version.release", serial),
74
+ prop(adb, "ro.build.version.oneui", serial), // Samsung: "80000" → One UI 8.0
75
+ prop(adb, "ro.miui.ui.version.name", serial), // Xiaomi: "MIUI 14"
76
+ prop(adb, "ro.build.version.emui", serial), // Huawei: "EmotionUI 12"
74
77
  ]);
75
78
  const name = n1 || n2 || n3 || n4 || samsungModelName(modelNumber) || modelNumber;
76
79
  const model = modelNumber;
@@ -137,16 +140,16 @@ function resolveAppName(packageId) {
137
140
  const segment = meaningful[meaningful.length - 1] ?? parts[parts.length - 1];
138
141
  return segment.charAt(0).toUpperCase() + segment.slice(1);
139
142
  }
140
- async function getAndroidForegroundApp(adb) {
143
+ async function getAndroidForegroundApp(adb, serial = null) {
141
144
  try {
142
145
  // "dumpsys window windows" omits focus data on Android 12+ — use base "dumpsys window"
143
- const { stdout } = await execFileAsync(adb, ["shell", "dumpsys", "window"], { timeout: 8000, maxBuffer: 20 * 1024 * 1024 });
146
+ const { stdout } = await execFileAsync(adb, adbArgs(serial, "shell", "dumpsys", "window"), { timeout: 8000, maxBuffer: 20 * 1024 * 1024 });
144
147
  // mFocusedWindow gives the cleanest format; mCurrentFocus is the fallback
145
148
  const packageId = stdout.match(/mFocusedWindow=([^\s/]+)\//)?.[1] ??
146
149
  stdout.match(/mCurrentFocus=Window\{[^}]+\s+([^\s/}]+)\//)?.[1];
147
150
  if (!packageId || packageId === "null")
148
151
  return null;
149
- const { stdout: pkgOut } = await execFileAsync(adb, ["shell", "dumpsys", "package", packageId], { timeout: 8000, maxBuffer: 50 * 1024 * 1024 });
152
+ const { stdout: pkgOut } = await execFileAsync(adb, adbArgs(serial, "shell", "dumpsys", "package", packageId), { timeout: 8000, maxBuffer: 50 * 1024 * 1024 });
150
153
  const versionName = pkgOut.match(/versionName=(\S+)/)?.[1] ?? null;
151
154
  const versionCode = pkgOut.match(/versionCode=(\d+)/)?.[1] ?? null;
152
155
  const version = versionName && versionCode ? `${versionName} (${versionCode})`
@@ -1 +1 @@
1
- {"version":3,"file":"android-device.js","sourceRoot":"","sources":["../android-device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"android-device.js","sourceRoot":"","sources":["../android-device.ts"],"names":[],"mappings":"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"}
package/dist/device.d.ts CHANGED
@@ -8,11 +8,14 @@ export interface ForegroundApp {
8
8
  name: string;
9
9
  version: string | null;
10
10
  }
11
- export declare function getDeviceInfo(python: string): Promise<DeviceInfo>;
11
+ /** Builds pymobiledevice3 args with optional `--udid` targeting a specific device. */
12
+ export declare function pmd3Args(udid: string | null, ...args: string[]): string[];
13
+ export declare const MODEL_NAMES: Record<string, string>;
14
+ export declare function getDeviceInfo(python: string, udid?: string | null): Promise<DeviceInfo>;
12
15
  /**
13
16
  * Returns the foreground app at time of call.
14
- * Uses foregroundRunning flag from proclist; cross-references applist for version.
17
+ * Uses foregroundRunning flag from proclist; cross-references apps query for version.
15
18
  * Returns null if detection fails — this is best-effort.
16
19
  */
17
- export declare function getForegroundApp(python: string): Promise<ForegroundApp | null>;
20
+ export declare function getForegroundApp(python: string, udid?: string | null): Promise<ForegroundApp | null>;
18
21
  //# sourceMappingURL=device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AA+BD,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBvE;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAyBpF"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEzE;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2B9C,CAAC;AAEF,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBnG;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA2BhH"}
package/dist/device.js CHANGED
@@ -1,12 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MODEL_NAMES = void 0;
4
+ exports.pmd3Args = pmd3Args;
3
5
  exports.getDeviceInfo = getDeviceInfo;
4
6
  exports.getForegroundApp = getForegroundApp;
5
7
  const child_process_1 = require("child_process");
6
8
  const util_1 = require("util");
7
9
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
8
10
  const PMD3 = ["-m", "pymobiledevice3"];
9
- const MODEL_NAMES = {
11
+ /** Builds pymobiledevice3 args with optional `--udid` targeting a specific device. */
12
+ function pmd3Args(udid, ...args) {
13
+ return udid ? [...PMD3, ...args, "--udid", udid] : [...PMD3, ...args];
14
+ }
15
+ exports.MODEL_NAMES = {
10
16
  "iPhone12,1": "iPhone 11",
11
17
  "iPhone12,3": "iPhone 11 Pro",
12
18
  "iPhone12,5": "iPhone 11 Pro Max",
@@ -34,26 +40,29 @@ const MODEL_NAMES = {
34
40
  "iPhone17,3": "iPhone 16",
35
41
  "iPhone17,4": "iPhone 16 Plus",
36
42
  };
37
- async function getDeviceInfo(python) {
43
+ async function getDeviceInfo(python, udid = null) {
44
+ // usbmux list returns ALL connected devices; pick the one matching udid, else the first.
38
45
  const { stdout } = await execFileAsync(python, [...PMD3, "usbmux", "list"], { timeout: 5000 });
39
46
  const devices = JSON.parse(stdout);
40
47
  if (!devices.length)
41
48
  throw new Error("No iPhone found. Is it plugged in or on the same WiFi?");
42
- const d = devices[0];
49
+ const d = udid ? devices.find((x) => x.Identifier === udid) : devices[0];
50
+ if (!d)
51
+ throw new Error(`iPhone with UDID ${udid} is not connected.`);
43
52
  return {
44
53
  model: d.ProductType,
45
- name: MODEL_NAMES[d.ProductType] ?? d.ProductType,
54
+ name: exports.MODEL_NAMES[d.ProductType] ?? d.ProductType,
46
55
  iosVersion: d.ProductVersion,
47
56
  };
48
57
  }
49
58
  /**
50
59
  * Returns the foreground app at time of call.
51
- * Uses foregroundRunning flag from proclist; cross-references applist for version.
60
+ * Uses foregroundRunning flag from proclist; cross-references apps query for version.
52
61
  * Returns null if detection fails — this is best-effort.
53
62
  */
54
- async function getForegroundApp(python) {
63
+ async function getForegroundApp(python, udid = null) {
55
64
  try {
56
- const { stdout } = await execFileAsync(python, [...PMD3, "developer", "dvt", "proclist"], { timeout: 10000 });
65
+ const { stdout } = await execFileAsync(python, pmd3Args(udid, "developer", "dvt", "proclist"), { timeout: 10000 });
57
66
  const procs = JSON.parse(stdout);
58
67
  const fg = procs.find(p => p["foregroundRunning"] && p["isApplication"]);
59
68
  if (!fg)
@@ -63,7 +72,7 @@ async function getForegroundApp(python) {
63
72
  if (!bundleId)
64
73
  return null;
65
74
  // apps query gives CFBundleShortVersionString + CFBundleVersion for this one app
66
- const { stdout: qOut } = await execFileAsync(python, [...PMD3, "apps", "query", bundleId], { timeout: 8000 });
75
+ const { stdout: qOut } = await execFileAsync(python, pmd3Args(udid, "apps", "query", bundleId), { timeout: 8000 });
67
76
  const meta = JSON.parse(qOut)?.[bundleId] ?? {};
68
77
  const short = meta["CFBundleShortVersionString"] ?? null;
69
78
  const build = meta["CFBundleVersion"] ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -39,12 +39,16 @@ export declare function triggerPhoneScreenshot(options?: {
39
39
  timeout?: number;
40
40
  /** Include approximate location via IP geolocation. Default: false */
41
41
  includeLocation?: boolean;
42
+ /** UDID of a specific iPhone to target. Get from listDevices(). Default: first connected. */
43
+ deviceId?: string;
42
44
  }): Promise<ScreenshotResult>;
43
45
  export declare function triggerAndroidScreenshot(options?: {
44
46
  /** Max ms to wait for the screenshot. Default: 30000 */
45
47
  timeout?: number;
46
48
  /** Include approximate location via IP geolocation. Default: false */
47
49
  includeLocation?: boolean;
50
+ /** ro.serialno of a specific Android to target. Get from listDevices(). Default: best available. */
51
+ deviceId?: string;
48
52
  }): Promise<AndroidScreenshotResult>;
49
53
  export interface PhoneRecordingResult {
50
54
  video: Buffer;
@@ -65,11 +69,45 @@ export declare function fetchLatestPhoneRecording(options?: {
65
69
  waitTimeout?: number;
66
70
  timeout?: number;
67
71
  includeLocation?: boolean;
72
+ /** UDID of a specific iPhone to target. Get from listDevices(). Default: first connected. */
73
+ deviceId?: string;
68
74
  }): Promise<PhoneRecordingResult>;
69
75
  export declare function fetchLatestAndroidRecording(options?: {
70
76
  waitForNew?: boolean;
71
77
  waitTimeout?: number;
72
78
  timeout?: number;
73
79
  includeLocation?: boolean;
80
+ /** ro.serialno of a specific Android to target. Get from listDevices(). Default: best available. */
81
+ deviceId?: string;
74
82
  }): Promise<AndroidRecordingResult>;
83
+ /**
84
+ * One connected device (iOS or Android) discovered by listDevices().
85
+ * The `id` is the value to pass back as `options.deviceId` for capture calls.
86
+ */
87
+ export interface ConnectedDevice {
88
+ /** Stable opaque ID. iOS = UDID, Android = ro.serialno. Pass as `options.deviceId`. */
89
+ id: string;
90
+ /** Which platform this device runs on. */
91
+ platform: "ios" | "android";
92
+ /** Friendly display name: "iPhone 14", "Galaxy S23 Ultra". Falls back to model when unknown. */
93
+ name: string;
94
+ /** Raw hardware identifier: "iPhone14,7", "SM-S918B". */
95
+ model: string;
96
+ /** OS/software label: "iOS 26.4.2", "One UI 8.0". */
97
+ softwareVersion: string;
98
+ /** True if a screenshot/recording call would succeed right now. */
99
+ available: boolean;
100
+ /** Human-readable reason if unavailable (e.g. "screen off"). */
101
+ unavailableReason?: string;
102
+ }
103
+ /**
104
+ * List every connected device across iOS and Android, with friendly names.
105
+ *
106
+ * Use the returned `id` field to target a specific device in screenshot/recording
107
+ * calls, e.g. `triggerPhoneScreenshot({ deviceId: device.id })`.
108
+ *
109
+ * Duplicate ADB endpoints pointing to the same physical phone are collapsed
110
+ * to a single entry.
111
+ */
112
+ export declare function listDevices(): Promise<ConnectedDevice[]>;
75
113
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ exports.triggerPhoneScreenshot = triggerPhoneScreenshot;
8
8
  exports.triggerAndroidScreenshot = triggerAndroidScreenshot;
9
9
  exports.fetchLatestPhoneRecording = fetchLatestPhoneRecording;
10
10
  exports.fetchLatestAndroidRecording = fetchLatestAndroidRecording;
11
+ exports.listDevices = listDevices;
11
12
  const child_process_1 = require("child_process");
12
13
  const util_1 = require("util");
13
14
  const promises_1 = require("fs/promises");
@@ -135,11 +136,93 @@ function saveAndroidIp(lines) {
135
136
  catch { }
136
137
  }
137
138
  }
138
- async function ensureAndroidDevice(adb) {
139
+ function adbArgs(serial, ...args) {
140
+ return serial ? ["-s", serial, ...args] : args;
141
+ }
142
+ async function probeAndroidEndpoint(adb, endpoint) {
143
+ try {
144
+ const { stdout } = await execFileAsync(adb, ["-s", endpoint, "shell", 'getprop ro.serialno; echo "===WAKE==="; dumpsys power | grep "mWakefulness="'], { timeout: 5000 });
145
+ const [serialPart, wakePart = ""] = stdout.split("===WAKE===");
146
+ const physicalSerial = (serialPart || "").trim();
147
+ const wakefulness = wakePart.match(/mWakefulness=(\w+)/)?.[1] ?? "";
148
+ if (!physicalSerial)
149
+ return null;
150
+ return { endpoint, physicalSerial, wakefulness };
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ }
156
+ function wakeScore(state) {
157
+ if (state === "Awake")
158
+ return 3;
159
+ if (state === "Dreaming")
160
+ return 2;
161
+ if (state === "Dozing")
162
+ return 2;
163
+ if (state === "Asleep")
164
+ return 1;
165
+ return 0;
166
+ }
167
+ /**
168
+ * Pick the best ADB endpoint to use.
169
+ * - If deviceId (physical ro.serialno) is provided, return its endpoint or throw.
170
+ * - Otherwise: probe each endpoint, dedupe by physical serial, rank by wake state.
171
+ * Ties broken by saved-wireless preference.
172
+ * - Single-device case skips the probe entirely (zero overhead).
173
+ */
174
+ async function pickEndpoint(adb, lines, deviceId) {
175
+ const endpoints = lines.map(l => l.trim().split(/\s/)[0]);
176
+ // Fast path: one device and no targeting needed.
177
+ if (endpoints.length === 1 && !deviceId)
178
+ return endpoints[0];
179
+ const probes = (await Promise.all(endpoints.map(e => probeAndroidEndpoint(adb, e))))
180
+ .filter((p) => p !== null);
181
+ if (deviceId) {
182
+ const match = probes.find(p => p.physicalSerial === deviceId);
183
+ if (!match) {
184
+ throw new Error(`Android device "${deviceId}" is not connected. ` +
185
+ `Use listDevices() to see what's available.`);
186
+ }
187
+ return match.endpoint;
188
+ }
189
+ // Dedupe by physical serial; prefer the saved wireless endpoint when collapsing duplicates.
190
+ let saved = "";
191
+ try {
192
+ saved = (0, fs_1.readFileSync)(ANDROID_IP_FILE, "utf8").trim();
193
+ }
194
+ catch { }
195
+ const byPhysical = new Map();
196
+ for (const p of probes) {
197
+ const existing = byPhysical.get(p.physicalSerial);
198
+ if (!existing || p.endpoint === saved)
199
+ byPhysical.set(p.physicalSerial, p);
200
+ }
201
+ // Rank by wake state, ties broken by saved-wireless preference.
202
+ const ranked = [...byPhysical.values()].sort((a, b) => {
203
+ const ds = wakeScore(b.wakefulness) - wakeScore(a.wakefulness);
204
+ if (ds !== 0)
205
+ return ds;
206
+ if (a.endpoint === saved)
207
+ return -1;
208
+ if (b.endpoint === saved)
209
+ return 1;
210
+ return 0;
211
+ });
212
+ if (!ranked.length) {
213
+ // Should not happen if lines.length > 0, but be defensive.
214
+ return endpoints[0];
215
+ }
216
+ if (wakeScore(ranked[0].wakefulness) <= 1) {
217
+ throw new Error(`Connected Android device${ranked.length > 1 ? "s are" : " is"} asleep. Wake the screen and retry.`);
218
+ }
219
+ return ranked[0].endpoint;
220
+ }
221
+ async function ensureAndroidDevice(adb, deviceId) {
139
222
  let lines = getConnectedAdbLines(adb);
140
223
  if (lines.length) {
141
224
  saveAndroidIp(lines);
142
- return;
225
+ return pickEndpoint(adb, lines, deviceId);
143
226
  }
144
227
  // No device — try reconnecting to the last known wireless IP
145
228
  let saved = "";
@@ -155,7 +238,7 @@ async function ensureAndroidDevice(adb) {
155
238
  lines = getConnectedAdbLines(adb);
156
239
  if (lines.length) {
157
240
  saveAndroidIp(lines);
158
- return;
241
+ return pickEndpoint(adb, lines, deviceId);
159
242
  }
160
243
  }
161
244
  throw new Error("No Android device found.\n" +
@@ -166,13 +249,14 @@ async function ensureAndroidDevice(adb) {
166
249
  async function triggerPhoneScreenshot(options) {
167
250
  const timeout = options?.timeout ?? 30000;
168
251
  const includeLocation = options?.includeLocation ?? false;
252
+ const udid = options?.deviceId ?? null;
169
253
  const python = findPython();
170
254
  // Start tunnel on first call — stays alive for the session
171
255
  await startTunnel();
172
256
  // Mount developer image (instant no-op if already mounted)
173
- await execFileAsync(python, [...PMD3, "mounter", "auto-mount"], { timeout }).catch(() => { });
257
+ await execFileAsync(python, (0, device_1.pmd3Args)(udid, "mounter", "auto-mount"), { timeout }).catch(() => { });
174
258
  // Kick off non-DVT metadata fetches in parallel with the screenshot
175
- const deviceInfoPromise = (0, device_1.getDeviceInfo)(python);
259
+ const deviceInfoPromise = (0, device_1.getDeviceInfo)(python, udid);
176
260
  const locationPromise = includeLocation ? (0, location_1.getLocation)() : Promise.resolve(null);
177
261
  // Retry screenshot until tunnel has connected to device (typically 1–3 retries)
178
262
  const outPath = (0, path_1.join)((0, os_1.tmpdir)(), `iphone-screenshot-${Date.now()}.png`);
@@ -180,7 +264,7 @@ async function triggerPhoneScreenshot(options) {
180
264
  try {
181
265
  for (let i = 0; i < maxAttempts; i++) {
182
266
  try {
183
- await execFileAsync(python, [...PMD3, "developer", "dvt", "screenshot", outPath], { timeout });
267
+ await execFileAsync(python, (0, device_1.pmd3Args)(udid, "developer", "dvt", "screenshot", outPath), { timeout });
184
268
  if ((0, fs_1.existsSync)(outPath))
185
269
  break;
186
270
  }
@@ -194,7 +278,7 @@ async function triggerPhoneScreenshot(options) {
194
278
  const [image, device, foregroundApp, location] = await Promise.all([
195
279
  (0, promises_1.readFile)(outPath),
196
280
  deviceInfoPromise,
197
- (0, device_1.getForegroundApp)(python),
281
+ (0, device_1.getForegroundApp)(python, udid),
198
282
  locationPromise,
199
283
  ]);
200
284
  return { image, device, foregroundApp, capturedAt: new Date(), location };
@@ -207,25 +291,26 @@ async function triggerPhoneScreenshot(options) {
207
291
  async function triggerAndroidScreenshot(options) {
208
292
  const timeout = options?.timeout ?? 30000;
209
293
  const includeLocation = options?.includeLocation ?? false;
294
+ const deviceId = options?.deviceId ?? null;
210
295
  const adb = findAdb();
211
- // Verify a device is reachable (auto-reconnects to last known wireless IP if needed)
212
- await ensureAndroidDevice(adb);
296
+ // Verify a device is reachable; pick the right endpoint (resolves deviceId, or auto-picks by wake state)
297
+ const serial = await ensureAndroidDevice(adb, deviceId);
213
298
  // Non-screenshot metadata can run in parallel
214
- const deviceInfoPromise = (0, android_device_1.getAndroidDeviceInfo)(adb);
299
+ const deviceInfoPromise = (0, android_device_1.getAndroidDeviceInfo)(adb, serial);
215
300
  const locationPromise = includeLocation ? (0, location_1.getLocation)() : Promise.resolve(null);
216
301
  // Capture screenshot — adb exec-out returns raw PNG bytes directly
217
- const { stdout: image } = await execFileAsync(adb, ["exec-out", "screencap", "-p"], { timeout, encoding: "buffer", maxBuffer: 50 * 1024 * 1024 });
302
+ const { stdout: image } = await execFileAsync(adb, adbArgs(serial, "exec-out", "screencap", "-p"), { timeout, encoding: "buffer", maxBuffer: 50 * 1024 * 1024 });
218
303
  // Run foreground app detection after screenshot (avoids any command contention)
219
304
  const [device, foregroundApp, location] = await Promise.all([
220
305
  deviceInfoPromise,
221
- (0, android_device_1.getAndroidForegroundApp)(adb),
306
+ (0, android_device_1.getAndroidForegroundApp)(adb, serial),
222
307
  locationPromise,
223
308
  ]);
224
309
  return { image, device, foregroundApp, capturedAt: new Date(), location };
225
310
  }
226
311
  // ── iOS recording fetch ───────────────────────────────────────────────────────
227
- async function listDcim(python) {
228
- const { stdout } = await execFileAsync(python, [...PMD3, "afc", "ls", "/DCIM/100APPLE"], { timeout: 10000 });
312
+ async function listDcim(python, udid) {
313
+ const { stdout } = await execFileAsync(python, (0, device_1.pmd3Args)(udid, "afc", "ls", "/DCIM/100APPLE"), { timeout: 10000 });
229
314
  return stdout.split("\n")
230
315
  .map((l) => l.trim())
231
316
  .filter((l) => /\.(mov|mp4|MOV|MP4)$/.test(l));
@@ -235,17 +320,18 @@ async function fetchLatestPhoneRecording(options) {
235
320
  const waitTimeout = options?.waitTimeout ?? 300000;
236
321
  const timeout = options?.timeout ?? 60000;
237
322
  const includeLocation = options?.includeLocation ?? false;
323
+ const udid = options?.deviceId ?? null;
238
324
  const python = findPython();
239
325
  await startTunnel();
240
- const deviceInfoPromise = (0, device_1.getDeviceInfo)(python);
326
+ const deviceInfoPromise = (0, device_1.getDeviceInfo)(python, udid);
241
327
  const locationPromise = includeLocation ? (0, location_1.getLocation)() : Promise.resolve(null);
242
328
  let targetFile;
243
329
  if (waitForNew) {
244
- const snapshot = new Set(await listDcim(python));
330
+ const snapshot = new Set(await listDcim(python, udid));
245
331
  const deadline = Date.now() + waitTimeout;
246
332
  let found;
247
333
  while (Date.now() < deadline) {
248
- const current = await listDcim(python);
334
+ const current = await listDcim(python, udid);
249
335
  found = current.find(f => !snapshot.has(f));
250
336
  if (found)
251
337
  break;
@@ -256,18 +342,18 @@ async function fetchLatestPhoneRecording(options) {
256
342
  targetFile = found;
257
343
  }
258
344
  else {
259
- const files = await listDcim(python);
345
+ const files = await listDcim(python, udid);
260
346
  if (!files.length)
261
347
  throw new Error("No video files found in DCIM/100APPLE on the device");
262
348
  targetFile = files.sort()[files.length - 1];
263
349
  }
264
350
  const tmpPath = (0, path_1.join)((0, os_1.tmpdir)(), `iphone-recording-${Date.now()}.mov`);
265
351
  try {
266
- await execFileAsync(python, [...PMD3, "afc", "pull", "-i", targetFile, tmpPath], { timeout });
352
+ await execFileAsync(python, (0, device_1.pmd3Args)(udid, "afc", "pull", "-i", targetFile, tmpPath), { timeout });
267
353
  const [video, device, foregroundApp, location] = await Promise.all([
268
354
  (0, promises_1.readFile)(tmpPath),
269
355
  deviceInfoPromise,
270
- (0, device_1.getForegroundApp)(python),
356
+ (0, device_1.getForegroundApp)(python, udid),
271
357
  locationPromise,
272
358
  ]);
273
359
  return { video, device, foregroundApp, capturedAt: new Date(), location };
@@ -277,10 +363,8 @@ async function fetchLatestPhoneRecording(options) {
277
363
  }
278
364
  }
279
365
  // ── Android recording fetch ───────────────────────────────────────────────────
280
- async function queryLatestAndroidVideo(adb) {
281
- const { stdout } = await execFileAsync(adb, ["shell", "content", "query",
282
- "--uri", "content://media/external/video/media",
283
- "--projection", "_id:_data:date_modified"], { timeout: 8000, maxBuffer: 5 * 1024 * 1024 });
366
+ async function queryLatestAndroidVideo(adb, serial = null) {
367
+ const { stdout } = await execFileAsync(adb, adbArgs(serial, "shell", "content", "query", "--uri", "content://media/external/video/media", "--projection", "_id:_data:date_modified"), { timeout: 8000, maxBuffer: 5 * 1024 * 1024 });
284
368
  // Each row: "Row: N _id=X, _data=/path/to/file.mp4, date_modified=Y"
285
369
  const rows = stdout.split("\n").filter((l) => l.trim().startsWith("Row:"));
286
370
  if (!rows.length)
@@ -306,18 +390,19 @@ async function fetchLatestAndroidRecording(options) {
306
390
  const waitTimeout = options?.waitTimeout ?? 300000;
307
391
  const timeout = options?.timeout ?? 60000;
308
392
  const includeLocation = options?.includeLocation ?? false;
393
+ const deviceId = options?.deviceId ?? null;
309
394
  const adb = findAdb();
310
- await ensureAndroidDevice(adb);
311
- const deviceInfoPromise = (0, android_device_1.getAndroidDeviceInfo)(adb);
395
+ const serial = await ensureAndroidDevice(adb, deviceId);
396
+ const deviceInfoPromise = (0, android_device_1.getAndroidDeviceInfo)(adb, serial);
312
397
  const locationPromise = includeLocation ? (0, location_1.getLocation)() : Promise.resolve(null);
313
398
  let devicePath;
314
399
  if (waitForNew) {
315
- const snapshot = await queryLatestAndroidVideo(adb);
400
+ const snapshot = await queryLatestAndroidVideo(adb, serial);
316
401
  const snapshotId = snapshot?.id ?? null;
317
402
  const deadline = Date.now() + waitTimeout;
318
403
  let found;
319
404
  while (Date.now() < deadline) {
320
- const latest = await queryLatestAndroidVideo(adb);
405
+ const latest = await queryLatestAndroidVideo(adb, serial);
321
406
  if (latest && latest.id !== snapshotId) {
322
407
  found = latest.path;
323
408
  break;
@@ -329,18 +414,18 @@ async function fetchLatestAndroidRecording(options) {
329
414
  devicePath = found;
330
415
  }
331
416
  else {
332
- const latest = await queryLatestAndroidVideo(adb);
417
+ const latest = await queryLatestAndroidVideo(adb, serial);
333
418
  if (!latest)
334
419
  throw new Error("No video files found on the Android device");
335
420
  devicePath = latest.path;
336
421
  }
337
422
  const tmpPath = (0, path_1.join)((0, os_1.tmpdir)(), `android-recording-${Date.now()}.mp4`);
338
423
  try {
339
- await execFileAsync(adb, ["pull", devicePath, tmpPath], { timeout });
424
+ await execFileAsync(adb, adbArgs(serial, "pull", devicePath, tmpPath), { timeout });
340
425
  const [video, device, foregroundApp, location] = await Promise.all([
341
426
  (0, promises_1.readFile)(tmpPath),
342
427
  deviceInfoPromise,
343
- (0, android_device_1.getAndroidForegroundApp)(adb),
428
+ (0, android_device_1.getAndroidForegroundApp)(adb, serial),
344
429
  locationPromise,
345
430
  ]);
346
431
  return { video, device, foregroundApp, capturedAt: new Date(), location };
@@ -349,4 +434,89 @@ async function fetchLatestAndroidRecording(options) {
349
434
  await (0, promises_1.unlink)(tmpPath).catch(() => { });
350
435
  }
351
436
  }
437
+ async function listIosDevices() {
438
+ let python;
439
+ try {
440
+ python = findPython();
441
+ }
442
+ catch {
443
+ return [];
444
+ }
445
+ // Best-effort: kick the tunnel so usbmux list can see WiFi devices too.
446
+ await startTunnel().catch(() => { });
447
+ try {
448
+ const { stdout } = await execFileAsync(python, [...PMD3, "usbmux", "list"], { timeout: 5000 });
449
+ const devices = JSON.parse(stdout);
450
+ return devices.map(d => ({
451
+ id: d.Identifier,
452
+ platform: "ios",
453
+ name: device_1.MODEL_NAMES[d.ProductType] ?? d.ProductType,
454
+ model: d.ProductType,
455
+ softwareVersion: `iOS ${d.ProductVersion}`,
456
+ available: true, // usbmux list only returns currently-reachable devices
457
+ }));
458
+ }
459
+ catch {
460
+ return [];
461
+ }
462
+ }
463
+ async function listAndroidDevices() {
464
+ let adb;
465
+ try {
466
+ adb = findAdb();
467
+ }
468
+ catch {
469
+ return [];
470
+ }
471
+ const lines = getConnectedAdbLines(adb);
472
+ if (!lines.length)
473
+ return [];
474
+ const endpoints = lines.map((l) => l.trim().split(/\s/)[0]);
475
+ // Probe each endpoint for physical serial + wake state.
476
+ const probes = await Promise.all(endpoints.map(e => probeAndroidEndpoint(adb, e)));
477
+ // Dedupe by physical serial — same phone often appears as both an explicit IP:port and an mDNS entry.
478
+ let saved = "";
479
+ try {
480
+ saved = (0, fs_1.readFileSync)(ANDROID_IP_FILE, "utf8").trim();
481
+ }
482
+ catch { }
483
+ const byPhysical = new Map();
484
+ for (const p of probes) {
485
+ if (!p)
486
+ continue;
487
+ const existing = byPhysical.get(p.physicalSerial);
488
+ // Prefer the saved wireless endpoint when collapsing duplicates
489
+ if (!existing || p.endpoint === saved)
490
+ byPhysical.set(p.physicalSerial, p);
491
+ }
492
+ // Fetch rich device info for each unique physical device.
493
+ const unique = [...byPhysical.values()];
494
+ const infos = await Promise.all(unique.map(p => (0, android_device_1.getAndroidDeviceInfo)(adb, p.endpoint).catch(() => null)));
495
+ return unique.map((probe, i) => {
496
+ const info = infos[i];
497
+ const awake = probe.wakefulness === "Awake" || probe.wakefulness === "Dreaming" || probe.wakefulness === "Dozing";
498
+ return {
499
+ id: probe.physicalSerial,
500
+ platform: "android",
501
+ name: info?.name ?? probe.physicalSerial,
502
+ model: info?.model ?? "",
503
+ softwareVersion: info?.softwareVersion ?? "",
504
+ available: awake,
505
+ unavailableReason: awake ? undefined : (probe.wakefulness === "Asleep" ? "screen off" : "unknown state"),
506
+ };
507
+ });
508
+ }
509
+ /**
510
+ * List every connected device across iOS and Android, with friendly names.
511
+ *
512
+ * Use the returned `id` field to target a specific device in screenshot/recording
513
+ * calls, e.g. `triggerPhoneScreenshot({ deviceId: device.id })`.
514
+ *
515
+ * Duplicate ADB endpoints pointing to the same physical phone are collapsed
516
+ * to a single entry.
517
+ */
518
+ async function listDevices() {
519
+ const [ios, android] = await Promise.all([listIosDevices(), listAndroidDevices()]);
520
+ return [...ios, ...android];
521
+ }
352
522
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@8bitbish/screenshot-service",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Capture screenshots and recordings from connected iPhone and Android devices, with a built-in visual setup wizard.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",