@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 +29 -0
- package/dist/android-device.d.ts +2 -2
- package/dist/android-device.d.ts.map +1 -1
- package/dist/android-device.js +18 -15
- package/dist/android-device.js.map +1 -1
- package/dist/device.d.ts +6 -3
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +17 -8
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +201 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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)
|
package/dist/android-device.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/android-device.js
CHANGED
|
@@ -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
|
|
50
|
-
return
|
|
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,
|
|
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,
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"android-device.js","sourceRoot":"","sources":["../android-device.ts"],"names":[],"mappings":";;AA2EA,oDAwBC;AAuDD,0DA0BC;AApLD,iDAAyC;AACzC,+BAAiC;AAGjC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAS1C,+CAA+C;AAC/C,+DAA+D;AAC/D,MAAM,cAAc,GAA2B;IAC7C,MAAM;IACN,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY;IAChF,MAAM;IACN,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY;IAChF,SAAS,EAAE,eAAe;IAC1B,MAAM;IACN,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY;IAChF,SAAS,EAAE,eAAe;IAC1B,MAAM;IACN,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY;IAChF,MAAM;IACN,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY;IAChF,SAAS,EAAE,eAAe;IAC1B,MAAM;IACN,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY;IAChF,SAAS,EAAE,eAAe;IAC1B,MAAM;IACN,SAAS,EAAE,eAAe,EAAI,SAAS,EAAE,aAAa;IACtD,SAAS,EAAE,YAAY,EAAO,SAAS,EAAE,aAAa;IACtD,OAAO;IACP,SAAS,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB;IAC9D,SAAS,EAAE,iBAAiB,EAAO,SAAS,EAAE,gBAAgB;IAC9D,SAAS;IACT,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB;IAC1D,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB;IAC1D,SAAS;IACT,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB;IAC1D,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB;IAC1D,WAAW;IACX,SAAS,EAAE,eAAe,EAAI,SAAS,EAAE,eAAe;IACxD,SAAS,EAAE,eAAe,EAAI,SAAS,EAAE,eAAe;IACxD,SAAS,EAAE,eAAe,EAAI,SAAS,EAAE,eAAe;IACxD,SAAS,EAAE,eAAe,EAAI,SAAS,EAAE,eAAe;CACzD,CAAC;AAEF,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,SAAS,OAAO,CAAC,MAAqB,EAAE,GAAG,IAAc;IACvD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,IAAI,CAAC,GAAW,EAAE,GAAW,EAAE,MAAqB;IAC3D,OAAO,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACnF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SAC1B,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC;IACtB,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,KAAK,EAAE,CAAC;AACtF,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,SAAwB,IAAI;IAClF,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GACpE,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAU,MAAM,CAAC,EAAG,0BAA0B;QAC/E,IAAI,CAAC,GAAG,EAAE,qBAAqB,EAAY,MAAM,CAAC,EAAG,sBAAsB;QAC3E,IAAI,CAAC,GAAG,EAAE,8BAA8B,EAAG,MAAM,CAAC,EAAG,sBAAsB;QAC3E,IAAI,CAAC,GAAG,EAAE,0BAA0B,EAAO,MAAM,CAAC,EAAG,sBAAsB;QAC3E,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAe,MAAM,CAAC,EAAG,4BAA4B;QACjF,IAAI,CAAC,GAAG,EAAE,0BAA0B,EAAE,MAAM,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE,wBAAwB,EAAI,MAAM,CAAC,EAAG,gCAAgC;QAChF,IAAI,CAAC,GAAG,EAAE,yBAAyB,EAAG,MAAM,CAAC,EAAG,oBAAoB;QACpE,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAK,MAAM,CAAC,EAAG,yBAAyB;KAC1E,CAAC,CAAC;IAEL,MAAM,IAAI,GAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;IACnF,MAAM,KAAK,GAAG,WAAW,CAAC;IAE1B,IAAI,eAAuB,CAAC;IAC5B,IAAI,KAAK;QAAQ,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,cAAc,EAAE,CAAC;SAChF,IAAI,IAAI;QAAI,eAAe,GAAG,IAAI,CAAC;SACnC,IAAI,IAAI;QAAI,eAAe,GAAG,IAAI,CAAC;;QACvB,eAAe,GAAG,WAAW,cAAc,EAAE,CAAC;IAE/D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,UAAU,GAA2B;IACzC,uBAAuB,EAAmB,OAAO;IACjD,8BAA8B,EAAY,aAAa;IACvD,4BAA4B,EAAc,SAAS;IACnD,yCAAyC,EAAC,QAAQ;IAClD,gCAAgC,EAAU,eAAe;IACzD,yBAAyB,EAAiB,aAAa;IACvD,mCAAmC,EAAO,kBAAkB;IAC5D,mCAAmC,EAAO,UAAU;IACpD,6BAA6B,EAAa,iBAAiB;IAC3D,wCAAwC,EAAE,aAAa;IACvD,oBAAoB,EAAsB,QAAQ;IAClD,uBAAuB,EAAmB,WAAW;IACrD,yBAAyB,EAAiB,SAAS;IACnD,qBAAqB,EAAqB,UAAU;IACpD,mBAAmB,EAAuB,WAAW;IACrD,cAAc,EAA4B,UAAU;IACpD,qBAAqB,EAAqB,aAAa;IACvD,sBAAsB,EAAoB,UAAU;IACpD,oBAAoB,EAAsB,QAAQ;IAClD,sBAAsB,EAAoB,UAAU;IACpD,WAAW,EAA+B,OAAO;IACjD,qBAAqB,EAAqB,OAAO;IACjD,8BAA8B,EAAY,SAAS;IACnD,2BAA2B,EAAe,MAAM;IAChD,4BAA4B,EAAc,OAAO;IACjD,mBAAmB,EAAuB,SAAS;IACnD,yBAAyB,EAAiB,SAAS;IACnD,oBAAoB,EAAsB,SAAS;IACnD,mCAAmC,EAAO,QAAQ;IAClD,iBAAiB,EAAyB,MAAM;IAChD,8BAA8B,EAAY,QAAQ;IAClD,aAAa,EAA6B,MAAM;IAChD,kBAAkB,EAAwB,WAAW;IACrD,wBAAwB,EAAkB,WAAW;IACrD,4BAA4B,EAAc,QAAQ;IAClD,8BAA8B,EAAY,cAAc;IACxD,+BAA+B,EAAW,oBAAoB;IAC9D,8BAA8B,EAAY,oBAAoB;CAC/D,CAAC;AAEF,SAAS,cAAc,CAAC,SAAiB;IACvC,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IACxD,oEAAoE;IACpE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAAC,GAAW,EAAE,SAAwB,IAAI;IACrF,IAAI,CAAC;QACH,uFAAuF;QACvF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QAE3I,0EAA0E;QAC1E,MAAM,SAAS,GACb,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAEpD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAC5C,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAC9D,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAC/C,CAAC;QAEF,MAAM,WAAW,GAAI,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACpE,MAAM,WAAW,GAAI,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACpE,MAAM,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,KAAK,WAAW,GAAG;YAChE,CAAC,CAAC,WAAW,IAAI,WAAW,IAAI,IAAI,CAAC;QACnD,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
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
|
-
|
|
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
|
|
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
|
package/dist/device.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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;
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":"
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmC,UAAU,EAAE,aAAa,
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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 (
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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",
|