@8bitbish/screenshot-service 1.1.1 → 1.2.1
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/dist/device.d.ts +18 -0
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +30 -0
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -14
- package/dist/index.js.map +1 -1
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +7 -0
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/preload.js +2 -0
- package/dist/wizard/renderer/index.html +318 -132
- package/package.json +1 -1
package/dist/device.d.ts
CHANGED
|
@@ -11,6 +11,24 @@ export interface ForegroundApp {
|
|
|
11
11
|
/** Builds pymobiledevice3 args with optional `--udid` targeting a specific device. */
|
|
12
12
|
export declare function pmd3Args(udid: string | null, ...args: string[]): string[];
|
|
13
13
|
export declare const MODEL_NAMES: Record<string, string>;
|
|
14
|
+
/**
|
|
15
|
+
* Returns whether Developer Mode is currently ON for the given iPhone.
|
|
16
|
+
* Resolves to false on any failure (device not trusted, command errors, etc.) — best-effort.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getDeveloperModeStatus(python: string, udid?: string | null): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Trigger the Developer Mode setup flow on the iPhone.
|
|
21
|
+
*
|
|
22
|
+
* iOS blocks the silent enable-developer-mode AMFI call when the device has a
|
|
23
|
+
* passcode set (which is effectively always). So instead we call
|
|
24
|
+
* reveal-developer-mode, which opens Settings → Privacy & Security → Developer
|
|
25
|
+
* Mode on the iPhone — the user still has to toggle it and restart, but they
|
|
26
|
+
* don't have to navigate Settings themselves.
|
|
27
|
+
*
|
|
28
|
+
* The device must be paired and trusted first. Resolves once the Settings
|
|
29
|
+
* jump-to is sent. State change happens after the user's on-device action.
|
|
30
|
+
*/
|
|
31
|
+
export declare function enableDeveloperMode(python: string, udid?: string | null): Promise<void>;
|
|
14
32
|
export declare function getDeviceInfo(python: string, udid?: string | null): Promise<DeviceInfo>;
|
|
15
33
|
/**
|
|
16
34
|
* Returns the foreground app at time of call.
|
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;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"}
|
|
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;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CASzG;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAInG;AAED,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
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MODEL_NAMES = void 0;
|
|
4
4
|
exports.pmd3Args = pmd3Args;
|
|
5
|
+
exports.getDeveloperModeStatus = getDeveloperModeStatus;
|
|
6
|
+
exports.enableDeveloperMode = enableDeveloperMode;
|
|
5
7
|
exports.getDeviceInfo = getDeviceInfo;
|
|
6
8
|
exports.getForegroundApp = getForegroundApp;
|
|
7
9
|
const child_process_1 = require("child_process");
|
|
@@ -40,6 +42,34 @@ exports.MODEL_NAMES = {
|
|
|
40
42
|
"iPhone17,3": "iPhone 16",
|
|
41
43
|
"iPhone17,4": "iPhone 16 Plus",
|
|
42
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Returns whether Developer Mode is currently ON for the given iPhone.
|
|
47
|
+
* Resolves to false on any failure (device not trusted, command errors, etc.) — best-effort.
|
|
48
|
+
*/
|
|
49
|
+
async function getDeveloperModeStatus(python, udid = null) {
|
|
50
|
+
try {
|
|
51
|
+
const { stdout } = await execFileAsync(python, pmd3Args(udid, "amfi", "developer-mode-status"), { timeout: 5000 });
|
|
52
|
+
return /true/i.test(stdout.trim());
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Trigger the Developer Mode setup flow on the iPhone.
|
|
60
|
+
*
|
|
61
|
+
* iOS blocks the silent enable-developer-mode AMFI call when the device has a
|
|
62
|
+
* passcode set (which is effectively always). So instead we call
|
|
63
|
+
* reveal-developer-mode, which opens Settings → Privacy & Security → Developer
|
|
64
|
+
* Mode on the iPhone — the user still has to toggle it and restart, but they
|
|
65
|
+
* don't have to navigate Settings themselves.
|
|
66
|
+
*
|
|
67
|
+
* The device must be paired and trusted first. Resolves once the Settings
|
|
68
|
+
* jump-to is sent. State change happens after the user's on-device action.
|
|
69
|
+
*/
|
|
70
|
+
async function enableDeveloperMode(python, udid = null) {
|
|
71
|
+
await execFileAsync(python, pmd3Args(udid, "amfi", "reveal-developer-mode"), { timeout: 10000 });
|
|
72
|
+
}
|
|
43
73
|
async function getDeviceInfo(python, udid = null) {
|
|
44
74
|
// usbmux list returns ALL connected devices; pick the one matching udid, else the first.
|
|
45
75
|
const { stdout } = await execFileAsync(python, [...PMD3, "usbmux", "list"], { timeout: 5000 });
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":";;;AAmBA,4BAEC;
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../device.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -100,8 +100,11 @@ export interface ConnectedDevice {
|
|
|
100
100
|
softwareVersion: string;
|
|
101
101
|
/** True if a screenshot/recording call would succeed right now. */
|
|
102
102
|
available: boolean;
|
|
103
|
-
/** Human-readable reason if unavailable (e.g. "screen off"). */
|
|
103
|
+
/** Human-readable reason if unavailable (e.g. "screen off", "developer mode off"). */
|
|
104
104
|
unavailableReason?: string;
|
|
105
|
+
/** iOS only: whether Developer Mode is enabled. Required for screenshots/recordings.
|
|
106
|
+
* Undefined for Android. */
|
|
107
|
+
developerMode?: boolean;
|
|
105
108
|
}
|
|
106
109
|
/**
|
|
107
110
|
* List every connected device across iOS and Android, with friendly names.
|
|
@@ -113,4 +116,19 @@ export interface ConnectedDevice {
|
|
|
113
116
|
* to a single entry.
|
|
114
117
|
*/
|
|
115
118
|
export declare function listDevices(): Promise<ConnectedDevice[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Trigger the Developer Mode enable flow on a specific iPhone.
|
|
121
|
+
*
|
|
122
|
+
* The device must already be paired and trusted. After this call resolves, the
|
|
123
|
+
* iPhone shows a system prompt: "Developer Mode required — Restart". The user
|
|
124
|
+
* must tap through on the device and complete the post-restart confirmation
|
|
125
|
+
* (tap Turn On + enter passcode). Once Developer Mode is on, the device's
|
|
126
|
+
* `developerMode` field in listDevices() flips to true.
|
|
127
|
+
*
|
|
128
|
+
* @param options.deviceId UDID of the iPhone to target. Omit to target the
|
|
129
|
+
* first connected iPhone (rare; usually pass an id).
|
|
130
|
+
*/
|
|
131
|
+
export declare function enableIosDeveloperMode(options?: {
|
|
132
|
+
deviceId?: string;
|
|
133
|
+
}): Promise<void>;
|
|
116
134
|
//# 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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.triggerAndroidScreenshot = triggerAndroidScreenshot;
|
|
|
9
9
|
exports.fetchLatestPhoneRecording = fetchLatestPhoneRecording;
|
|
10
10
|
exports.fetchLatestAndroidRecording = fetchLatestAndroidRecording;
|
|
11
11
|
exports.listDevices = listDevices;
|
|
12
|
+
exports.enableIosDeveloperMode = enableIosDeveloperMode;
|
|
12
13
|
const child_process_1 = require("child_process");
|
|
13
14
|
const util_1 = require("util");
|
|
14
15
|
const promises_1 = require("fs/promises");
|
|
@@ -219,8 +220,12 @@ async function pickEndpoint(adb, lines, deviceId) {
|
|
|
219
220
|
// Should not happen if lines.length > 0, but be defensive.
|
|
220
221
|
return endpoints[0];
|
|
221
222
|
}
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
// Auto-pick requires Awake. Dozing produces an Always-On Display screenshot which is rarely useful.
|
|
224
|
+
// To capture a sleeping/dozing phone deliberately, pass deviceId explicitly to bypass this check.
|
|
225
|
+
if (ranked[0].wakefulness !== "Awake") {
|
|
226
|
+
const state = ranked[0].wakefulness || "off";
|
|
227
|
+
throw new Error(`Connected Android device${ranked.length > 1 ? "s are" : " is"} not awake (${state}). ` +
|
|
228
|
+
`Wake the screen and retry, or pass a deviceId explicitly to capture anyway.`);
|
|
224
229
|
}
|
|
225
230
|
return ranked[0].endpoint;
|
|
226
231
|
}
|
|
@@ -453,15 +458,22 @@ async function listIosDevices() {
|
|
|
453
458
|
try {
|
|
454
459
|
const { stdout } = await execFileAsync(python, [...PMD3, "usbmux", "list"], { timeout: 5000 });
|
|
455
460
|
const devices = JSON.parse(stdout);
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
461
|
+
// Probe each iPhone's Developer Mode state in parallel — screenshots require it.
|
|
462
|
+
const devModes = await Promise.all(devices.map(d => (0, device_1.getDeveloperModeStatus)(python, d.Identifier)));
|
|
463
|
+
return devices.map((d, i) => {
|
|
464
|
+
const developerMode = devModes[i];
|
|
465
|
+
return {
|
|
466
|
+
id: d.Identifier,
|
|
467
|
+
platform: "ios",
|
|
468
|
+
name: device_1.MODEL_NAMES[d.ProductType] ?? d.ProductType,
|
|
469
|
+
nickname: d.DeviceName?.trim() || undefined,
|
|
470
|
+
model: d.ProductType,
|
|
471
|
+
softwareVersion: `iOS ${d.ProductVersion}`,
|
|
472
|
+
available: developerMode,
|
|
473
|
+
unavailableReason: developerMode ? undefined : "developer mode off",
|
|
474
|
+
developerMode,
|
|
475
|
+
};
|
|
476
|
+
});
|
|
465
477
|
}
|
|
466
478
|
catch {
|
|
467
479
|
return [];
|
|
@@ -501,7 +513,20 @@ async function listAndroidDevices() {
|
|
|
501
513
|
const infos = await Promise.all(unique.map(p => (0, android_device_1.getAndroidDeviceInfo)(adb, p.endpoint).catch(() => null)));
|
|
502
514
|
return unique.map((probe, i) => {
|
|
503
515
|
const info = infos[i];
|
|
504
|
-
|
|
516
|
+
// Only "Awake" counts as actively usable. On Samsung with Always-On Display,
|
|
517
|
+
// a screen-off phone reports "Dozing" — to the user it's off, so treat as unavailable.
|
|
518
|
+
const available = probe.wakefulness === "Awake";
|
|
519
|
+
let unavailableReason;
|
|
520
|
+
if (!available) {
|
|
521
|
+
if (probe.wakefulness === "Dozing")
|
|
522
|
+
unavailableReason = "screen off (ambient display)";
|
|
523
|
+
else if (probe.wakefulness === "Dreaming")
|
|
524
|
+
unavailableReason = "screensaver active";
|
|
525
|
+
else if (probe.wakefulness === "Asleep")
|
|
526
|
+
unavailableReason = "screen off";
|
|
527
|
+
else
|
|
528
|
+
unavailableReason = "screen off";
|
|
529
|
+
}
|
|
505
530
|
return {
|
|
506
531
|
id: probe.physicalSerial,
|
|
507
532
|
platform: "android",
|
|
@@ -509,8 +534,8 @@ async function listAndroidDevices() {
|
|
|
509
534
|
nickname: probe.nickname || undefined,
|
|
510
535
|
model: info?.model ?? "",
|
|
511
536
|
softwareVersion: info?.softwareVersion ?? "",
|
|
512
|
-
available
|
|
513
|
-
unavailableReason
|
|
537
|
+
available,
|
|
538
|
+
unavailableReason,
|
|
514
539
|
};
|
|
515
540
|
});
|
|
516
541
|
}
|
|
@@ -527,4 +552,23 @@ async function listDevices() {
|
|
|
527
552
|
const [ios, android] = await Promise.all([listIosDevices(), listAndroidDevices()]);
|
|
528
553
|
return [...ios, ...android];
|
|
529
554
|
}
|
|
555
|
+
// ── Developer Mode (iOS) ─────────────────────────────────────────────────────
|
|
556
|
+
/**
|
|
557
|
+
* Trigger the Developer Mode enable flow on a specific iPhone.
|
|
558
|
+
*
|
|
559
|
+
* The device must already be paired and trusted. After this call resolves, the
|
|
560
|
+
* iPhone shows a system prompt: "Developer Mode required — Restart". The user
|
|
561
|
+
* must tap through on the device and complete the post-restart confirmation
|
|
562
|
+
* (tap Turn On + enter passcode). Once Developer Mode is on, the device's
|
|
563
|
+
* `developerMode` field in listDevices() flips to true.
|
|
564
|
+
*
|
|
565
|
+
* @param options.deviceId UDID of the iPhone to target. Omit to target the
|
|
566
|
+
* first connected iPhone (rare; usually pass an id).
|
|
567
|
+
*/
|
|
568
|
+
async function enableIosDeveloperMode(options) {
|
|
569
|
+
const udid = options?.deviceId ?? null;
|
|
570
|
+
const python = findPython();
|
|
571
|
+
await startTunnel().catch(() => { }); // best-effort; amfi works over USB without tunnel
|
|
572
|
+
await (0, device_1.enableDeveloperMode)(python, udid);
|
|
573
|
+
}
|
|
530
574
|
//# 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../wizard/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../wizard/index.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,UAAU,EAAE,aAAa,CAAC;IAC1C,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF/E"}
|
package/dist/wizard/index.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSetupWindow = createSetupWindow;
|
|
4
4
|
const path_1 = require("path");
|
|
5
5
|
const setup_1 = require("../setup");
|
|
6
|
+
const index_1 = require("../index");
|
|
6
7
|
let cachedElectron = null;
|
|
7
8
|
function loadElectron() {
|
|
8
9
|
if (cachedElectron)
|
|
@@ -63,6 +64,8 @@ async function createSetupWindow(opts) {
|
|
|
63
64
|
checkAndroid: `wizard:${win.id}:check-android`,
|
|
64
65
|
installAndroid: `wizard:${win.id}:install-android`,
|
|
65
66
|
pairAndroid: `wizard:${win.id}:pair-android`,
|
|
67
|
+
listDevices: `wizard:${win.id}:list-devices`,
|
|
68
|
+
enableIosDevMode: `wizard:${win.id}:enable-ios-dev-mode`,
|
|
66
69
|
close: `wizard:${win.id}:close`,
|
|
67
70
|
};
|
|
68
71
|
// Expose channel names to renderer via initial-load query (read by preload).
|
|
@@ -89,6 +92,10 @@ async function createSetupWindow(opts) {
|
|
|
89
92
|
win.webContents.send(`${channels.pairAndroid}:progress`, p);
|
|
90
93
|
});
|
|
91
94
|
});
|
|
95
|
+
ipcMain.handle(channels.listDevices, async () => (0, index_1.listDevices)());
|
|
96
|
+
ipcMain.handle(channels.enableIosDevMode, async (_e, deviceId) => {
|
|
97
|
+
await (0, index_1.enableIosDeveloperMode)({ deviceId });
|
|
98
|
+
});
|
|
92
99
|
ipcMain.handle(channels.close, async () => {
|
|
93
100
|
if (!win.isDestroyed())
|
|
94
101
|
win.close();
|
package/dist/wizard/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../wizard/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../wizard/index.ts"],"names":[],"mappings":"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"}
|
package/dist/wizard/preload.js
CHANGED
|
@@ -49,5 +49,7 @@ contextBridge.exposeInMainWorld('wizard', {
|
|
|
49
49
|
onInstallAndroidProgress: (cb) => onProgress('installAndroid', cb),
|
|
50
50
|
pairAndroid: (opts) => invoke('pairAndroid', opts),
|
|
51
51
|
onPairAndroidProgress: (cb) => onProgress('pairAndroid', cb),
|
|
52
|
+
listDevices: () => invoke('listDevices'),
|
|
53
|
+
enableIosDevMode:(deviceId) => invoke('enableIosDevMode', deviceId),
|
|
52
54
|
close: () => invoke('close'),
|
|
53
55
|
});
|
|
@@ -256,6 +256,93 @@
|
|
|
256
256
|
margin: 12px 0;
|
|
257
257
|
white-space: pre-wrap;
|
|
258
258
|
}
|
|
259
|
+
/* Device manager rows */
|
|
260
|
+
.device-list { list-style: none; padding: 0; margin: 16px 0 20px; }
|
|
261
|
+
.device-row {
|
|
262
|
+
display: flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
gap: 12px;
|
|
265
|
+
padding: 14px 16px;
|
|
266
|
+
background: var(--panel);
|
|
267
|
+
border: 1px solid var(--border);
|
|
268
|
+
border-radius: 10px;
|
|
269
|
+
margin-bottom: 8px;
|
|
270
|
+
transition: background 1.5s ease, border-color 1.5s ease;
|
|
271
|
+
}
|
|
272
|
+
.device-row .dot {
|
|
273
|
+
flex: 0 0 10px;
|
|
274
|
+
width: 10px;
|
|
275
|
+
height: 10px;
|
|
276
|
+
border-radius: 999px;
|
|
277
|
+
background: var(--ok);
|
|
278
|
+
box-shadow: 0 0 0 0 rgba(61, 220, 151, 0);
|
|
279
|
+
}
|
|
280
|
+
.device-row.unavailable .dot {
|
|
281
|
+
background: transparent;
|
|
282
|
+
border: 1.5px solid var(--muted);
|
|
283
|
+
}
|
|
284
|
+
.device-row .body { flex: 1; min-width: 0; }
|
|
285
|
+
.device-row .name { font-weight: 600; font-size: 14.5px; }
|
|
286
|
+
.device-row .nickname { color: var(--muted); font-size: 12.5px; margin-left: 6px; }
|
|
287
|
+
.device-row .subtitle { color: var(--muted); font-size: 12.5px; margin-top: 2px; }
|
|
288
|
+
.device-row .status {
|
|
289
|
+
color: var(--muted);
|
|
290
|
+
font-size: 12px;
|
|
291
|
+
text-transform: uppercase;
|
|
292
|
+
letter-spacing: 0.06em;
|
|
293
|
+
}
|
|
294
|
+
.device-row.unavailable { opacity: 0.6; }
|
|
295
|
+
.device-row.needs-action {
|
|
296
|
+
opacity: 1;
|
|
297
|
+
border-color: rgba(241, 192, 98, 0.55);
|
|
298
|
+
background: rgba(241, 192, 98, 0.06);
|
|
299
|
+
}
|
|
300
|
+
.device-row.needs-action .dot {
|
|
301
|
+
background: var(--warn);
|
|
302
|
+
border: 0;
|
|
303
|
+
}
|
|
304
|
+
.device-row .row-action {
|
|
305
|
+
background: var(--warn);
|
|
306
|
+
color: #1a1d23;
|
|
307
|
+
border: 0;
|
|
308
|
+
border-radius: 6px;
|
|
309
|
+
padding: 6px 12px;
|
|
310
|
+
font: inherit;
|
|
311
|
+
font-weight: 600;
|
|
312
|
+
font-size: 12.5px;
|
|
313
|
+
cursor: pointer;
|
|
314
|
+
transition: background 0.12s ease, opacity 0.12s ease;
|
|
315
|
+
}
|
|
316
|
+
.device-row .row-action:hover { background: #ffcc70; }
|
|
317
|
+
.device-row .row-action:disabled { opacity: 0.5; cursor: default; }
|
|
318
|
+
.device-row .row-pending {
|
|
319
|
+
color: var(--warn);
|
|
320
|
+
font-size: 12px;
|
|
321
|
+
font-weight: 500;
|
|
322
|
+
}
|
|
323
|
+
.device-row.flash-new {
|
|
324
|
+
background: rgba(61, 220, 151, 0.14);
|
|
325
|
+
border-color: rgba(61, 220, 151, 0.55);
|
|
326
|
+
}
|
|
327
|
+
.empty-state {
|
|
328
|
+
padding: 26px 18px;
|
|
329
|
+
text-align: center;
|
|
330
|
+
border: 1px dashed var(--border);
|
|
331
|
+
border-radius: 12px;
|
|
332
|
+
color: var(--muted);
|
|
333
|
+
margin: 16px 0 20px;
|
|
334
|
+
}
|
|
335
|
+
.add-row {
|
|
336
|
+
display: flex;
|
|
337
|
+
gap: 10px;
|
|
338
|
+
}
|
|
339
|
+
.btn.ghost {
|
|
340
|
+
background: transparent;
|
|
341
|
+
color: var(--accent);
|
|
342
|
+
border: 1px solid var(--accent);
|
|
343
|
+
padding: 8px 14px;
|
|
344
|
+
}
|
|
345
|
+
.btn.ghost:hover { background: rgba(79, 139, 255, 0.10); }
|
|
259
346
|
@keyframes spin { to { transform: rotate(360deg); } }
|
|
260
347
|
::-webkit-scrollbar { width: 8px; height: 8px; }
|
|
261
348
|
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
|
|
@@ -353,6 +440,17 @@
|
|
|
353
440
|
<div class="error-box" id="pair-error" style="display: none"></div>
|
|
354
441
|
</section>
|
|
355
442
|
|
|
443
|
+
<!-- Screen: device manager (home screen after install) -->
|
|
444
|
+
<section class="screen" id="screen-device-manager">
|
|
445
|
+
<p class="lede" id="dm-lede">Your devices.</p>
|
|
446
|
+
<p class="muted" id="dm-sub">These are connected right now. Add as many as you want.</p>
|
|
447
|
+
<ul class="device-list" id="device-list"></ul>
|
|
448
|
+
<div class="empty-state" id="device-empty" style="display: none"></div>
|
|
449
|
+
<div class="add-row">
|
|
450
|
+
<button class="btn ghost" id="btn-add-device">+ Add another device</button>
|
|
451
|
+
</div>
|
|
452
|
+
</section>
|
|
453
|
+
|
|
356
454
|
<!-- Screen: done -->
|
|
357
455
|
<section class="screen" id="screen-done">
|
|
358
456
|
<div class="big-check">✓</div>
|
|
@@ -371,28 +469,30 @@
|
|
|
371
469
|
(() => {
|
|
372
470
|
const $ = (id) => document.getElementById(id);
|
|
373
471
|
const screens = {
|
|
374
|
-
detect:
|
|
375
|
-
install:
|
|
376
|
-
iosDevice:
|
|
377
|
-
androidChoice:
|
|
378
|
-
androidUsb:
|
|
379
|
-
androidWireless
|
|
380
|
-
|
|
472
|
+
detect: $('screen-detect'),
|
|
473
|
+
install: $('screen-install'),
|
|
474
|
+
iosDevice: $('screen-ios-device'),
|
|
475
|
+
androidChoice: $('screen-android-choice'),
|
|
476
|
+
androidUsb: $('screen-android-usb'),
|
|
477
|
+
androidWireless: $('screen-android-wireless'),
|
|
478
|
+
deviceManager: $('screen-device-manager'),
|
|
479
|
+
done: $('screen-done'),
|
|
381
480
|
};
|
|
382
|
-
const stepPill
|
|
481
|
+
const stepPill = $('step-pill');
|
|
383
482
|
const btnPrimary = $('btn-primary');
|
|
384
|
-
const btnBack
|
|
483
|
+
const btnBack = $('btn-back');
|
|
385
484
|
|
|
386
|
-
let platform
|
|
387
|
-
let
|
|
388
|
-
let
|
|
389
|
-
let history
|
|
485
|
+
let platform = null; // 'ios' | 'android'
|
|
486
|
+
let lastDevices = []; // most recent listDevices() result
|
|
487
|
+
let pendingAddSnapshot = null; // Set<string> of device IDs at the moment user clicked "+ Add"
|
|
488
|
+
let history = [];
|
|
489
|
+
const devModeRequested = new Set(); // device IDs for which we've already sent enableIosDevMode
|
|
390
490
|
|
|
391
491
|
function show(name, label) {
|
|
392
492
|
for (const k in screens) screens[k].classList.remove('active');
|
|
393
493
|
screens[name].classList.add('active');
|
|
394
494
|
stepPill.textContent = label;
|
|
395
|
-
btnBack.style.visibility = history.length ? 'visible' : 'hidden';
|
|
495
|
+
btnBack.style.visibility = history.length > 1 ? 'visible' : 'hidden';
|
|
396
496
|
}
|
|
397
497
|
|
|
398
498
|
function navigate(name, label) {
|
|
@@ -404,10 +504,13 @@
|
|
|
404
504
|
if (history.length <= 1) return;
|
|
405
505
|
history.pop();
|
|
406
506
|
const prev = history[history.length - 1];
|
|
507
|
+
pendingAddSnapshot = null; // bail out of "add device" mode
|
|
407
508
|
show(prev.name, prev.label);
|
|
509
|
+
// If we backed into the device manager, re-enter so its polling/buttons re-arm.
|
|
510
|
+
if (prev.name === 'deviceManager') runDeviceManager();
|
|
408
511
|
});
|
|
409
512
|
|
|
410
|
-
// ──
|
|
513
|
+
// ── Generic helpers ───────────────────────────────────────────────────────
|
|
411
514
|
function renderStep(listEl, p) {
|
|
412
515
|
let li = listEl.querySelector(`[data-id="${p.id}"]`);
|
|
413
516
|
if (!li) {
|
|
@@ -423,9 +526,8 @@
|
|
|
423
526
|
if (p.detail) detail.textContent = p.detail; else detail.textContent = '';
|
|
424
527
|
}
|
|
425
528
|
|
|
426
|
-
// ── Log tail ────────────────────────────────────────────────────────────────
|
|
427
529
|
const logContent = $('log-content');
|
|
428
|
-
const logToggle
|
|
530
|
+
const logToggle = $('log-toggle');
|
|
429
531
|
logToggle.addEventListener('click', () => {
|
|
430
532
|
const open = logContent.classList.toggle('open');
|
|
431
533
|
logToggle.textContent = open ? 'Hide details' : 'Show details';
|
|
@@ -435,57 +537,198 @@
|
|
|
435
537
|
logContent.scrollTop = logContent.scrollHeight;
|
|
436
538
|
}
|
|
437
539
|
|
|
438
|
-
// ── Live device polling ─────────────────────────────────────────────────────
|
|
439
|
-
// Polls every 1.5s while a "waiting for device" screen is active. Auto-advances
|
|
440
|
-
// to the done screen the moment the device shows up — no clicking required.
|
|
441
540
|
let livePollHandle = null;
|
|
442
541
|
function stopLivePoll() {
|
|
443
542
|
if (livePollHandle) { clearInterval(livePollHandle); livePollHandle = null; }
|
|
444
543
|
}
|
|
445
|
-
function startLivePoll(screenEl,
|
|
544
|
+
function startLivePoll(screenEl, tick, intervalMs = 1500) {
|
|
446
545
|
stopLivePoll();
|
|
447
546
|
livePollHandle = setInterval(async () => {
|
|
448
547
|
if (!screenEl.classList.contains('active')) { stopLivePoll(); return; }
|
|
449
|
-
try {
|
|
450
|
-
|
|
451
|
-
if (onDetected(status)) {
|
|
452
|
-
stopLivePoll();
|
|
453
|
-
}
|
|
454
|
-
} catch {}
|
|
455
|
-
}, 1500);
|
|
548
|
+
try { await tick(); } catch {}
|
|
549
|
+
}, intervalMs);
|
|
456
550
|
}
|
|
457
551
|
|
|
458
|
-
// ──
|
|
552
|
+
// ── Device manager (the home screen after install) ──────────────────────────
|
|
553
|
+
|
|
554
|
+
/** Renders a single ConnectedDevice row. */
|
|
555
|
+
function renderDeviceRow(listEl, d, justAddedIds) {
|
|
556
|
+
const existing = listEl.querySelector(`[data-id="${d.id}"]`);
|
|
557
|
+
const li = existing || document.createElement('li');
|
|
558
|
+
li.dataset.id = d.id;
|
|
559
|
+
|
|
560
|
+
const needsDevMode = d.platform === 'ios' && d.developerMode === false;
|
|
561
|
+
const flashNew = justAddedIds.has(d.id);
|
|
562
|
+
|
|
563
|
+
li.className = 'device-row' +
|
|
564
|
+
(needsDevMode ? ' needs-action' : (d.available ? '' : ' unavailable')) +
|
|
565
|
+
(flashNew ? ' flash-new' : '');
|
|
566
|
+
|
|
567
|
+
// Right side: button (dev-mode action) OR status (when unavailable for other reason) OR nothing
|
|
568
|
+
let rightSide = '';
|
|
569
|
+
if (needsDevMode) {
|
|
570
|
+
if (devModeRequested.has(d.id)) {
|
|
571
|
+
rightSide = `<span class="row-pending">On iPhone: toggle on & restart</span>`;
|
|
572
|
+
} else {
|
|
573
|
+
rightSide = `<button class="row-action" data-action="enable-dev-mode">Open on iPhone</button>`;
|
|
574
|
+
}
|
|
575
|
+
} else if (!d.available && d.unavailableReason) {
|
|
576
|
+
rightSide = `<span class="status">${escapeHtml(d.unavailableReason)}</span>`;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
li.innerHTML =
|
|
580
|
+
`<span class="dot"></span>` +
|
|
581
|
+
`<span class="body">` +
|
|
582
|
+
`<div><span class="name">${escapeHtml(d.nickname || d.name)}</span>${d.nickname ? `<span class="nickname">${escapeHtml(d.name)}</span>` : ''}</div>` +
|
|
583
|
+
`<div class="subtitle">${escapeHtml(d.model || '')}${d.softwareVersion ? ' · ' + escapeHtml(d.softwareVersion) : ''}</div>` +
|
|
584
|
+
`</span>` +
|
|
585
|
+
rightSide;
|
|
586
|
+
|
|
587
|
+
if (!existing) listEl.appendChild(li);
|
|
588
|
+
|
|
589
|
+
// Wire the action button (idempotent — re-attached on every render)
|
|
590
|
+
const actionBtn = li.querySelector('button.row-action');
|
|
591
|
+
if (actionBtn) {
|
|
592
|
+
actionBtn.onclick = () => sendEnableDevMode(d.id, actionBtn);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
async function sendEnableDevMode(deviceId, buttonEl) {
|
|
597
|
+
buttonEl.disabled = true;
|
|
598
|
+
buttonEl.textContent = 'Opening…';
|
|
599
|
+
try {
|
|
600
|
+
await window.wizard.enableIosDevMode(deviceId);
|
|
601
|
+
devModeRequested.add(deviceId);
|
|
602
|
+
// Re-render the row immediately so the action swaps to instructions.
|
|
603
|
+
const fresh = lastDevices.find(x => x.id === deviceId);
|
|
604
|
+
if (fresh) renderDeviceRow($('device-list'), fresh, new Set());
|
|
605
|
+
} catch (err) {
|
|
606
|
+
buttonEl.disabled = false;
|
|
607
|
+
buttonEl.textContent = 'Try again';
|
|
608
|
+
alert(`Couldn't open Developer Mode on the iPhone: ${err.message || err}`);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
function escapeHtml(s) {
|
|
612
|
+
return String(s).replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]));
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/** Returns the IDs of devices currently visible on `platform`. */
|
|
616
|
+
function deviceIdsFor(plat) {
|
|
617
|
+
return new Set(lastDevices.filter(d => d.platform === plat).map(d => d.id));
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/** Refresh the device manager list. Returns the fresh list. */
|
|
621
|
+
async function refreshDeviceManager(justAddedIds = new Set()) {
|
|
622
|
+
const devs = await window.wizard.listDevices();
|
|
623
|
+
lastDevices = devs;
|
|
624
|
+
// Clear "request sent" state for any iPhone whose Developer Mode has flipped to ON.
|
|
625
|
+
for (const id of Array.from(devModeRequested)) {
|
|
626
|
+
const d = devs.find(x => x.id === id);
|
|
627
|
+
if (!d || d.developerMode === true) devModeRequested.delete(id);
|
|
628
|
+
}
|
|
629
|
+
const mine = devs.filter(d => d.platform === platform);
|
|
630
|
+
const listEl = $('device-list');
|
|
631
|
+
const emptyEl = $('device-empty');
|
|
632
|
+
|
|
633
|
+
// Remove rows for devices that vanished
|
|
634
|
+
const presentIds = new Set(mine.map(d => d.id));
|
|
635
|
+
for (const li of Array.from(listEl.querySelectorAll('.device-row'))) {
|
|
636
|
+
if (!presentIds.has(li.dataset.id)) li.remove();
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
if (mine.length === 0) {
|
|
640
|
+
listEl.style.display = 'none';
|
|
641
|
+
emptyEl.style.display = '';
|
|
642
|
+
emptyEl.textContent = platform === 'ios'
|
|
643
|
+
? "No iPhones connected yet. Click “+ Add another iPhone” to get started."
|
|
644
|
+
: "No Android devices connected yet. Click “+ Add another Android device” to get started.";
|
|
645
|
+
} else {
|
|
646
|
+
listEl.style.display = '';
|
|
647
|
+
emptyEl.style.display = 'none';
|
|
648
|
+
for (const d of mine) renderDeviceRow(listEl, d, justAddedIds);
|
|
649
|
+
}
|
|
650
|
+
return mine;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
function enterDeviceManagerScreen() {
|
|
654
|
+
if (history[history.length - 1]?.name !== 'deviceManager') {
|
|
655
|
+
navigate('deviceManager', platform === 'ios' ? 'Your iPhones' : 'Your Android devices');
|
|
656
|
+
} else {
|
|
657
|
+
show('deviceManager', platform === 'ios' ? 'Your iPhones' : 'Your Android devices');
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
/** Activate the device manager screen with its polling and buttons. */
|
|
662
|
+
async function runDeviceManager(justAddedIds = new Set()) {
|
|
663
|
+
enterDeviceManagerScreen();
|
|
664
|
+
pendingAddSnapshot = null;
|
|
665
|
+
btnPrimary.style.display = '';
|
|
666
|
+
btnPrimary.disabled = false;
|
|
667
|
+
btnPrimary.textContent = 'Finish';
|
|
668
|
+
btnPrimary.onclick = finish;
|
|
669
|
+
$('dm-lede').textContent = platform === 'ios' ? 'Your iPhones' : 'Your Android devices';
|
|
670
|
+
$('dm-sub').textContent = platform === 'ios'
|
|
671
|
+
? 'Connected right now. Add as many as you want.'
|
|
672
|
+
: 'Connected right now. USB and wireless both work.';
|
|
673
|
+
$('btn-add-device').textContent = platform === 'ios' ? '+ Add another iPhone' : '+ Add another Android device';
|
|
674
|
+
$('btn-add-device').onclick = beginAddDevice;
|
|
675
|
+
|
|
676
|
+
await refreshDeviceManager(justAddedIds);
|
|
677
|
+
|
|
678
|
+
// Poll every 2s while this screen is active so disconnects/reconnects
|
|
679
|
+
// surface without user action.
|
|
680
|
+
startLivePoll(screens.deviceManager, () => refreshDeviceManager(), 2000);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/** Snapshot current device IDs and navigate into the appropriate add-flow. */
|
|
684
|
+
function beginAddDevice() {
|
|
685
|
+
pendingAddSnapshot = deviceIdsFor(platform);
|
|
686
|
+
if (platform === 'ios') {
|
|
687
|
+
navigate('iosDevice', 'Add an iPhone');
|
|
688
|
+
} else {
|
|
689
|
+
navigate('androidChoice', 'Add an Android');
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
/** Polled on iOS trust / Android USB screens — when a NEW device appears, return to manager. */
|
|
694
|
+
async function pollForNewDevice() {
|
|
695
|
+
const devs = await window.wizard.listDevices();
|
|
696
|
+
lastDevices = devs;
|
|
697
|
+
if (!pendingAddSnapshot) return;
|
|
698
|
+
const newOne = devs.find(d => d.platform === platform && !pendingAddSnapshot.has(d.id));
|
|
699
|
+
if (newOne) {
|
|
700
|
+
const justAdded = new Set([newOne.id]);
|
|
701
|
+
pendingAddSnapshot = null;
|
|
702
|
+
stopLivePoll();
|
|
703
|
+
runDeviceManager(justAdded);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// ── iOS flow ──────────────────────────────────────────────────────────────
|
|
459
708
|
async function runIosDetect() {
|
|
460
|
-
navigate('detect', '
|
|
709
|
+
navigate('detect', 'Checking');
|
|
461
710
|
btnPrimary.style.display = 'none';
|
|
462
711
|
const status = await window.wizard.checkIos();
|
|
463
|
-
lastIosStatus = status;
|
|
464
712
|
const list = $('detect-list');
|
|
465
713
|
list.innerHTML = '';
|
|
466
|
-
renderStep(list, { id: 'brew',
|
|
467
|
-
renderStep(list, { id: 'python',
|
|
468
|
-
renderStep(list, { id: 'pmd3',
|
|
469
|
-
renderStep(list, { id: 'sudoers', label: 'Passwordless tunnel',
|
|
470
|
-
|
|
714
|
+
renderStep(list, { id: 'brew', label: 'Homebrew', status: status.brew ? 'done' : 'error' });
|
|
715
|
+
renderStep(list, { id: 'python', label: 'Python', status: status.pymobiledevice3 ? 'done' : 'error' });
|
|
716
|
+
renderStep(list, { id: 'pmd3', label: 'pymobiledevice3', status: status.pymobiledevice3 ? 'done' : 'error' });
|
|
717
|
+
renderStep(list, { id: 'sudoers', label: 'Passwordless tunnel', status: status.sudoers ? 'done' : 'pending',
|
|
718
|
+
detail: status.sudoers ? '' : 'Optional — you can skip and enter your Mac password each session.' });
|
|
471
719
|
|
|
472
720
|
btnPrimary.style.display = '';
|
|
473
721
|
if (!status.ok) {
|
|
474
722
|
btnPrimary.textContent = 'Install missing tools';
|
|
475
723
|
btnPrimary.onclick = runIosInstall;
|
|
476
|
-
} else if (!status.deviceVisible) {
|
|
477
|
-
btnPrimary.textContent = 'Continue';
|
|
478
|
-
btnPrimary.onclick = () => navigate('iosDevice', 'Step 2 of 3');
|
|
479
724
|
} else {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
$('done-detail').textContent = 'Your iPhone is connected and ready.';
|
|
483
|
-
navigate('done', 'Done');
|
|
725
|
+
// Deps OK — skip straight to the device manager.
|
|
726
|
+
runDeviceManager();
|
|
484
727
|
}
|
|
485
728
|
}
|
|
486
729
|
|
|
487
730
|
async function runIosInstall() {
|
|
488
|
-
navigate('install', '
|
|
731
|
+
navigate('install', 'Installing');
|
|
489
732
|
$('install-list').innerHTML = '';
|
|
490
733
|
$('install-error').style.display = 'none';
|
|
491
734
|
btnPrimary.disabled = true;
|
|
@@ -495,12 +738,10 @@
|
|
|
495
738
|
renderStep($('install-list'), p);
|
|
496
739
|
if (p.log) appendLog(p.log);
|
|
497
740
|
});
|
|
498
|
-
|
|
499
741
|
try {
|
|
500
742
|
await window.wizard.installIos();
|
|
501
743
|
btnPrimary.disabled = false;
|
|
502
|
-
|
|
503
|
-
btnPrimary.onclick = () => navigate('iosDevice', 'Step 3 of 3');
|
|
744
|
+
runDeviceManager();
|
|
504
745
|
} catch (err) {
|
|
505
746
|
btnPrimary.disabled = false;
|
|
506
747
|
btnPrimary.textContent = 'Retry';
|
|
@@ -512,63 +753,38 @@
|
|
|
512
753
|
}
|
|
513
754
|
}
|
|
514
755
|
|
|
515
|
-
//
|
|
516
|
-
async function recheckIos() {
|
|
517
|
-
const status = await window.wizard.checkIos();
|
|
518
|
-
if (status.deviceVisible) {
|
|
519
|
-
$('done-detail').textContent = 'Your iPhone is connected and ready.';
|
|
520
|
-
navigate('done', 'Done');
|
|
521
|
-
btnPrimary.textContent = 'Finish';
|
|
522
|
-
btnPrimary.onclick = finish;
|
|
523
|
-
} else {
|
|
524
|
-
$('install-error').textContent = "Still can't see your iPhone. Make sure it's plugged in, unlocked, and you tapped Trust.";
|
|
525
|
-
$('install-error').style.display = '';
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
// ── Android flow ───────────────────────────────────────────────────────────
|
|
756
|
+
// ── Android flow ──────────────────────────────────────────────────────────
|
|
530
757
|
async function runAndroidDetect() {
|
|
531
|
-
navigate('detect', '
|
|
758
|
+
navigate('detect', 'Checking');
|
|
532
759
|
btnPrimary.style.display = 'none';
|
|
533
760
|
const status = await window.wizard.checkAndroid();
|
|
534
|
-
lastAndroidStatus = status;
|
|
535
761
|
const list = $('detect-list');
|
|
536
762
|
list.innerHTML = '';
|
|
537
763
|
renderStep(list, { id: 'adb', label: 'ADB (Android Debug Bridge)', status: status.adb ? 'done' : 'error' });
|
|
538
|
-
renderStep(list, { id: 'device', label: 'Android device', status: status.deviceConnected ? 'done' : 'pending' });
|
|
539
764
|
|
|
540
765
|
btnPrimary.style.display = '';
|
|
541
766
|
if (!status.adb) {
|
|
542
767
|
btnPrimary.textContent = 'Install ADB';
|
|
543
768
|
btnPrimary.onclick = runAndroidInstall;
|
|
544
|
-
} else if (!status.deviceConnected) {
|
|
545
|
-
btnPrimary.textContent = 'Connect a device';
|
|
546
|
-
btnPrimary.onclick = () => navigate('androidChoice', 'Step 2 of 3');
|
|
547
769
|
} else {
|
|
548
|
-
|
|
549
|
-
navigate('done', 'Done');
|
|
550
|
-
btnPrimary.textContent = 'Finish';
|
|
551
|
-
btnPrimary.onclick = finish;
|
|
770
|
+
runDeviceManager();
|
|
552
771
|
}
|
|
553
772
|
}
|
|
554
773
|
|
|
555
774
|
async function runAndroidInstall() {
|
|
556
|
-
navigate('install', '
|
|
775
|
+
navigate('install', 'Installing');
|
|
557
776
|
$('install-list').innerHTML = '';
|
|
558
777
|
$('install-error').style.display = 'none';
|
|
559
778
|
btnPrimary.disabled = true;
|
|
560
779
|
btnPrimary.textContent = 'Installing…';
|
|
561
|
-
|
|
562
780
|
const off = window.wizard.onInstallAndroidProgress((p) => {
|
|
563
781
|
renderStep($('install-list'), p);
|
|
564
782
|
if (p.log) appendLog(p.log);
|
|
565
783
|
});
|
|
566
|
-
|
|
567
784
|
try {
|
|
568
785
|
await window.wizard.installAndroid();
|
|
569
786
|
btnPrimary.disabled = false;
|
|
570
|
-
|
|
571
|
-
btnPrimary.onclick = () => navigate('androidChoice', 'Step 3 of 3');
|
|
787
|
+
runDeviceManager();
|
|
572
788
|
} catch (err) {
|
|
573
789
|
btnPrimary.disabled = false;
|
|
574
790
|
btnPrimary.textContent = 'Retry';
|
|
@@ -580,47 +796,29 @@
|
|
|
580
796
|
}
|
|
581
797
|
}
|
|
582
798
|
|
|
799
|
+
// USB / wireless choice
|
|
583
800
|
document.querySelectorAll('.choice').forEach(btn => {
|
|
584
801
|
btn.addEventListener('click', () => {
|
|
585
802
|
const conn = btn.dataset.conn;
|
|
586
803
|
if (conn === 'usb') {
|
|
587
|
-
navigate('androidUsb', '
|
|
588
|
-
btnPrimary.
|
|
589
|
-
|
|
590
|
-
// Auto-advance the moment ADB sees the phone — no clicking required.
|
|
591
|
-
startLivePoll(
|
|
592
|
-
screens.androidUsb,
|
|
593
|
-
() => window.wizard.checkAndroid(),
|
|
594
|
-
(status) => {
|
|
595
|
-
if (!status.deviceConnected) return false;
|
|
596
|
-
$('done-detail').textContent = 'Your Android device is connected and ready.';
|
|
597
|
-
navigate('done', 'Done');
|
|
598
|
-
btnPrimary.textContent = 'Finish';
|
|
599
|
-
btnPrimary.onclick = finish;
|
|
600
|
-
return true;
|
|
601
|
-
}
|
|
602
|
-
);
|
|
804
|
+
navigate('androidUsb', 'Add via USB');
|
|
805
|
+
btnPrimary.style.display = 'none';
|
|
806
|
+
startLivePoll(screens.androidUsb, pollForNewDevice);
|
|
603
807
|
} else {
|
|
604
|
-
|
|
808
|
+
// Clear form so this is a fresh entry — subsequent adds don't show stale credentials.
|
|
809
|
+
$('pair-ip').value = '';
|
|
810
|
+
$('pair-port').value = '';
|
|
811
|
+
$('pair-code').value = '';
|
|
812
|
+
$('pair-error').style.display = 'none';
|
|
813
|
+
$('pair-list').innerHTML = '';
|
|
814
|
+
navigate('androidWireless', 'Add via WiFi');
|
|
815
|
+
btnPrimary.style.display = '';
|
|
605
816
|
btnPrimary.textContent = 'Pair device';
|
|
606
817
|
btnPrimary.onclick = runAndroidPair;
|
|
607
818
|
}
|
|
608
819
|
});
|
|
609
820
|
});
|
|
610
821
|
|
|
611
|
-
async function recheckAndroid() {
|
|
612
|
-
const status = await window.wizard.checkAndroid();
|
|
613
|
-
if (status.deviceConnected) {
|
|
614
|
-
$('done-detail').textContent = 'Your Android device is connected and ready.';
|
|
615
|
-
navigate('done', 'Done');
|
|
616
|
-
btnPrimary.textContent = 'Finish';
|
|
617
|
-
btnPrimary.onclick = finish;
|
|
618
|
-
} else {
|
|
619
|
-
$('install-error').textContent = "No device detected yet. Check the cable, allow USB debugging on the phone, and try again.";
|
|
620
|
-
$('install-error').style.display = '';
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
|
|
624
822
|
async function runAndroidPair() {
|
|
625
823
|
const ip = $('pair-ip').value.trim();
|
|
626
824
|
const port = $('pair-port').value.trim();
|
|
@@ -637,14 +835,18 @@
|
|
|
637
835
|
const off = window.wizard.onPairAndroidProgress((p) => {
|
|
638
836
|
renderStep($('pair-list'), p);
|
|
639
837
|
});
|
|
640
|
-
|
|
641
838
|
try {
|
|
642
839
|
await window.wizard.pairAndroid({ ip, port, code });
|
|
643
840
|
btnPrimary.disabled = false;
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
841
|
+
// Refresh devices and return to manager with the new device highlighted (if it appeared).
|
|
842
|
+
const before = pendingAddSnapshot || deviceIdsFor(platform);
|
|
843
|
+
const devs = await window.wizard.listDevices();
|
|
844
|
+
lastDevices = devs;
|
|
845
|
+
const justAdded = new Set(
|
|
846
|
+
devs.filter(d => d.platform === platform && !before.has(d.id)).map(d => d.id)
|
|
847
|
+
);
|
|
848
|
+
pendingAddSnapshot = null;
|
|
849
|
+
runDeviceManager(justAdded);
|
|
648
850
|
} catch (err) {
|
|
649
851
|
btnPrimary.disabled = false;
|
|
650
852
|
btnPrimary.textContent = 'Try again';
|
|
@@ -660,34 +862,18 @@
|
|
|
660
862
|
window.wizard.close();
|
|
661
863
|
}
|
|
662
864
|
|
|
663
|
-
// ── Boot
|
|
865
|
+
// ── Boot ──────────────────────────────────────────────────────────────────
|
|
664
866
|
window.wizard.init().then(({ platform: p }) => {
|
|
665
867
|
platform = p;
|
|
666
868
|
$('title').textContent = p === 'ios' ? 'Set up iPhone capture' : 'Set up Android capture';
|
|
667
869
|
|
|
668
|
-
// When user clicks "Check again" on a device screen, route to the right recheck.
|
|
669
|
-
btnPrimary.addEventListener('click', () => {/* per-screen handlers attach onclick directly */});
|
|
670
|
-
|
|
671
870
|
if (p === 'ios') {
|
|
672
871
|
runIosDetect();
|
|
673
|
-
//
|
|
674
|
-
// AND start live polling so the wizard auto-advances the moment trust is granted.
|
|
872
|
+
// iOS trust screen → poll listDevices() for a NEW device (diff against snapshot).
|
|
675
873
|
const obs = new MutationObserver(() => {
|
|
676
874
|
if (screens.iosDevice.classList.contains('active')) {
|
|
677
|
-
btnPrimary.
|
|
678
|
-
|
|
679
|
-
startLivePoll(
|
|
680
|
-
screens.iosDevice,
|
|
681
|
-
() => window.wizard.checkIos(),
|
|
682
|
-
(status) => {
|
|
683
|
-
if (!status.deviceVisible) return false;
|
|
684
|
-
$('done-detail').textContent = 'Your iPhone is connected and ready.';
|
|
685
|
-
navigate('done', 'Done');
|
|
686
|
-
btnPrimary.textContent = 'Finish';
|
|
687
|
-
btnPrimary.onclick = finish;
|
|
688
|
-
return true;
|
|
689
|
-
}
|
|
690
|
-
);
|
|
875
|
+
btnPrimary.style.display = 'none';
|
|
876
|
+
startLivePoll(screens.iosDevice, pollForNewDevice);
|
|
691
877
|
}
|
|
692
878
|
});
|
|
693
879
|
obs.observe(screens.iosDevice, { attributes: true, attributeFilter: ['class'] });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@8bitbish/screenshot-service",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.1",
|
|
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",
|