@8bitbish/screenshot-service 1.2.6 → 1.2.9
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/setup/detect.d.ts.map +1 -1
- package/dist/setup/detect.js +50 -4
- package/dist/setup/detect.js.map +1 -1
- package/dist/setup/install.d.ts +12 -10
- package/dist/setup/install.d.ts.map +1 -1
- package/dist/setup/install.js +226 -46
- package/dist/setup/install.js.map +1 -1
- package/dist/setup/types.d.ts +4 -0
- package/dist/setup/types.d.ts.map +1 -1
- package/dist/wizard/renderer/index.html +22 -7
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../setup/detect.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../setup/detect.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA+D7D,wBAAsB,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC,CAyB7D;AAwBD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAarE"}
|
package/dist/setup/detect.js
CHANGED
|
@@ -9,6 +9,7 @@ const python_1 = require("./python");
|
|
|
9
9
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
10
10
|
const PMD3 = ["-m", "pymobiledevice3"];
|
|
11
11
|
const ADB_CANDIDATES = ["/opt/homebrew/bin/adb", "/usr/local/bin/adb", "adb"];
|
|
12
|
+
const IDEVICEPAIR_CANDIDATES = ["/opt/homebrew/bin/idevicepair", "/usr/local/bin/idevicepair", "idevicepair"];
|
|
12
13
|
function commandExists(bin, args = ["--version"]) {
|
|
13
14
|
try {
|
|
14
15
|
(0, child_process_1.execFileSync)(bin, args, { stdio: "ignore", timeout: 3000 });
|
|
@@ -18,6 +19,28 @@ function commandExists(bin, args = ["--version"]) {
|
|
|
18
19
|
return false;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
22
|
+
function xcodeCltInstalled() {
|
|
23
|
+
// `xcode-select -p` prints the active developer dir and exits 0 only when CLT
|
|
24
|
+
// (or Xcode) is installed. On a fresh Mac it exits non-zero with "xcode-select:
|
|
25
|
+
// note: no developer tools were found".
|
|
26
|
+
try {
|
|
27
|
+
(0, child_process_1.execFileSync)("xcode-select", ["-p"], { stdio: "ignore", timeout: 3000 });
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function libimobiledeviceInstalled() {
|
|
35
|
+
for (const p of IDEVICEPAIR_CANDIDATES) {
|
|
36
|
+
try {
|
|
37
|
+
(0, child_process_1.execFileSync)(p, ["--help"], { stdio: "ignore", timeout: 3000 });
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch { }
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
21
44
|
function sudoersConfigured() {
|
|
22
45
|
// We can't read /etc/sudoers.d/* without root, but the file is world-readable
|
|
23
46
|
// when written via our postinstall (chmod 440 makes it root-only; checking
|
|
@@ -41,14 +64,28 @@ async function iosDeviceVisible(python) {
|
|
|
41
64
|
}
|
|
42
65
|
}
|
|
43
66
|
async function checkIosSetup() {
|
|
67
|
+
const xcodeCommandLineTools = xcodeCltInstalled();
|
|
44
68
|
const brew = commandExists("brew");
|
|
45
|
-
|
|
69
|
+
// Without CLT, invoking bare `python3` hits macOS's /usr/bin/python3 stub, which
|
|
70
|
+
// pops a system dialog ("python3 command requires the command line developer
|
|
71
|
+
// tools") behind the wizard. Skip detection until CLT lands — install handles it.
|
|
72
|
+
const python = xcodeCommandLineTools ? (0, python_1.findPython)() : null;
|
|
46
73
|
const pymobiledevice3 = python !== null;
|
|
74
|
+
const libimobiledevice = libimobiledeviceInstalled();
|
|
47
75
|
const sudoers = sudoersConfigured();
|
|
48
76
|
const deviceVisible = python ? await iosDeviceVisible(python) : false;
|
|
49
77
|
// sudoers is convenience (skip password prompt) — not required for capture to work
|
|
50
|
-
const ok = brew && pymobiledevice3;
|
|
51
|
-
return {
|
|
78
|
+
const ok = xcodeCommandLineTools && brew && pymobiledevice3 && libimobiledevice;
|
|
79
|
+
return {
|
|
80
|
+
xcodeCommandLineTools,
|
|
81
|
+
brew,
|
|
82
|
+
python,
|
|
83
|
+
pymobiledevice3,
|
|
84
|
+
libimobiledevice,
|
|
85
|
+
sudoers,
|
|
86
|
+
deviceVisible,
|
|
87
|
+
ok,
|
|
88
|
+
};
|
|
52
89
|
}
|
|
53
90
|
function findAdb() {
|
|
54
91
|
for (const p of ADB_CANDIDATES) {
|
|
@@ -73,8 +110,17 @@ async function androidDeviceConnected(adb) {
|
|
|
73
110
|
}
|
|
74
111
|
}
|
|
75
112
|
async function checkAndroidSetup() {
|
|
113
|
+
const xcodeCommandLineTools = xcodeCltInstalled();
|
|
114
|
+
const brew = commandExists("brew");
|
|
76
115
|
const adb = findAdb();
|
|
77
116
|
const deviceConnected = adb ? await androidDeviceConnected(adb) : false;
|
|
78
|
-
|
|
117
|
+
// ADB is the only hard requirement for capture; CLT + brew are only needed to install it.
|
|
118
|
+
return {
|
|
119
|
+
xcodeCommandLineTools,
|
|
120
|
+
brew,
|
|
121
|
+
adb,
|
|
122
|
+
deviceConnected,
|
|
123
|
+
ok: adb !== null,
|
|
124
|
+
};
|
|
79
125
|
}
|
|
80
126
|
//# sourceMappingURL=detect.js.map
|
package/dist/setup/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../setup/detect.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../setup/detect.ts"],"names":[],"mappings":"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"}
|
package/dist/setup/install.d.ts
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { SetupProgressCallback } from "./types";
|
|
2
2
|
/**
|
|
3
|
-
* Install everything iOS capture needs:
|
|
4
|
-
* 1.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
3
|
+
* Install everything iOS capture needs from scratch:
|
|
4
|
+
* 1. Xcode Command Line Tools (Homebrew prereq) — triggers macOS GUI + polls.
|
|
5
|
+
* 2. Homebrew itself, via `NONINTERACTIVE=1` + osascript-primed sudo.
|
|
6
|
+
* 3. python@3.13 via brew if no compatible python is present.
|
|
7
|
+
* 4. pymobiledevice3 via pip.
|
|
8
|
+
* 5. libimobiledevice via brew (needed for our trust filter via idevicepair validate).
|
|
9
|
+
* 6. Sudoers rule so the tunnel daemon starts without a password prompt.
|
|
9
10
|
*
|
|
10
|
-
* Each step emits progress.
|
|
11
|
-
* `status: "skipped"` so the wizard
|
|
11
|
+
* Each step emits progress. Already-satisfied steps come through as
|
|
12
|
+
* `status: "skipped"` so the wizard ticks them immediately.
|
|
12
13
|
*/
|
|
13
14
|
export declare function installIosDeps(onProgress?: SetupProgressCallback): Promise<void>;
|
|
14
15
|
/**
|
|
15
16
|
* Install everything Android capture needs:
|
|
16
|
-
* 1.
|
|
17
|
-
* 2.
|
|
17
|
+
* 1. Xcode Command Line Tools (Homebrew prereq).
|
|
18
|
+
* 2. Homebrew.
|
|
19
|
+
* 3. brew install android-platform-tools if adb is missing.
|
|
18
20
|
*
|
|
19
21
|
* Pairing/connecting a device is a separate step — see {@link pairAndroidWireless}
|
|
20
22
|
* and the `setup-android` wizard flow.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../setup/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAiB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../setup/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAiB,MAAM,SAAS,CAAC;AA4O/D;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,UAAU,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GtF;AAID;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD1F"}
|
package/dist/setup/install.js
CHANGED
|
@@ -10,6 +10,19 @@ const path_1 = require("path");
|
|
|
10
10
|
const detect_1 = require("./detect");
|
|
11
11
|
const python_1 = require("./python");
|
|
12
12
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
13
|
+
// Where Homebrew installs binaries on Apple Silicon vs Intel. We add both to
|
|
14
|
+
// PATH for child processes so newly-installed `brew` / `python3.13` / `pip` /
|
|
15
|
+
// `idevicepair` are found without needing a fresh shell session.
|
|
16
|
+
const BREW_BIN_PATHS = ["/opt/homebrew/bin", "/usr/local/bin"];
|
|
17
|
+
const BREW_INSTALL_URL = "https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh";
|
|
18
|
+
/** Returns a child-process env with Homebrew's bin dirs prepended to PATH. */
|
|
19
|
+
function brewEnv() {
|
|
20
|
+
const augmentedPath = [
|
|
21
|
+
...BREW_BIN_PATHS,
|
|
22
|
+
process.env.PATH || "",
|
|
23
|
+
].filter(Boolean).join(":");
|
|
24
|
+
return { ...process.env, PATH: augmentedPath };
|
|
25
|
+
}
|
|
13
26
|
function progressEmitter(cb, total) {
|
|
14
27
|
let index = 0;
|
|
15
28
|
return {
|
|
@@ -33,9 +46,12 @@ function progressEmitter(cb, total) {
|
|
|
33
46
|
// Stream a long-running subprocess and forward each stdout/stderr line to the
|
|
34
47
|
// progress callback's `log` field — gives the wizard a live log tail without
|
|
35
48
|
// any shell window.
|
|
36
|
-
async function runStreaming(bin, args, p, emit) {
|
|
49
|
+
async function runStreaming(bin, args, p, emit, opts = {}) {
|
|
37
50
|
return new Promise((resolve, reject) => {
|
|
38
|
-
const child = (0, child_process_1.spawn)(bin, args, {
|
|
51
|
+
const child = (0, child_process_1.spawn)(bin, args, {
|
|
52
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
53
|
+
env: opts.env ?? process.env,
|
|
54
|
+
});
|
|
39
55
|
const onLine = (chunk) => {
|
|
40
56
|
for (const line of chunk.toString("utf8").split("\n")) {
|
|
41
57
|
if (!line.trim())
|
|
@@ -67,45 +83,185 @@ async function runAsAdmin(script) {
|
|
|
67
83
|
catch { }
|
|
68
84
|
}
|
|
69
85
|
}
|
|
86
|
+
// ── Xcode Command Line Tools ─────────────────────────────────────────────────
|
|
87
|
+
function isCltInstalled() {
|
|
88
|
+
try {
|
|
89
|
+
(0, child_process_1.execFileSync)("xcode-select", ["-p"], { stdio: "ignore", timeout: 3000 });
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Estimates CLT install progress by measuring the on-disk size of
|
|
98
|
+
* /Library/Developer/CommandLineTools and comparing against the typical
|
|
99
|
+
* final size (~1.5 GB). Apple's installer doesn't expose its true %, so this
|
|
100
|
+
* is approximate — but it gives the user something to watch beyond elapsed
|
|
101
|
+
* seconds. Returns 0 while the folder is empty (download phase).
|
|
102
|
+
*/
|
|
103
|
+
function cltInstallPercent() {
|
|
104
|
+
try {
|
|
105
|
+
const out = (0, child_process_1.execFileSync)("du", ["-sk", "/Library/Developer/CommandLineTools"], { encoding: "utf8", timeout: 3000, stdio: ["ignore", "pipe", "ignore"] });
|
|
106
|
+
const kb = parseInt(out.split(/\s+/)[0], 10);
|
|
107
|
+
if (!kb || isNaN(kb))
|
|
108
|
+
return 0;
|
|
109
|
+
// CLT final size varies by macOS version, roughly 1.5–2 GB. 1.5 GB target.
|
|
110
|
+
const targetKb = 1500000;
|
|
111
|
+
return Math.min(95, Math.floor((kb / targetKb) * 100));
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Triggers the macOS CLT install GUI and polls until it completes (or times out).
|
|
119
|
+
*
|
|
120
|
+
* Apple owns the install UI — we can't auto-click "Install" in the system dialog,
|
|
121
|
+
* and there's no silent install path that doesn't require an Apple ID with a
|
|
122
|
+
* paid developer account. So we trigger the dialog and wait, surfacing elapsed
|
|
123
|
+
* time + an approximate percent (derived from install dir size) as the user
|
|
124
|
+
* waits.
|
|
125
|
+
*/
|
|
126
|
+
async function installXcodeCLT(p, emit) {
|
|
127
|
+
// `xcode-select --install` returns immediately after surfacing the dialog.
|
|
128
|
+
// It exits 0 even if the user later cancels; we rely on `-p` polling for truth.
|
|
129
|
+
try {
|
|
130
|
+
await execFileAsync("xcode-select", ["--install"], { timeout: 5000 });
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// "Install requested for command line developer tools" — already requested
|
|
134
|
+
// or already installing. Either way, continue to the poll loop.
|
|
135
|
+
}
|
|
136
|
+
emit?.({ ...p, log: "macOS is installing developer tools. Click Install in the dialog if it appeared.", status: "running" });
|
|
137
|
+
const pollIntervalMs = 5000;
|
|
138
|
+
const maxWaitMs = 30 * 60 * 1000; // 30 minutes
|
|
139
|
+
const startedAt = Date.now();
|
|
140
|
+
let lastReport = 0;
|
|
141
|
+
while (Date.now() - startedAt < maxWaitMs) {
|
|
142
|
+
if (isCltInstalled()) {
|
|
143
|
+
emit?.({ ...p, detail: "100% — done", status: "running" });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
await new Promise(r => setTimeout(r, pollIntervalMs));
|
|
147
|
+
const elapsedMs = Date.now() - startedAt;
|
|
148
|
+
const pct = cltInstallPercent();
|
|
149
|
+
const stageDetail = pct === 0
|
|
150
|
+
? `Downloading… (${formatElapsed(elapsedMs)} elapsed)`
|
|
151
|
+
: `${pct}% installed (${formatElapsed(elapsedMs)} elapsed)`;
|
|
152
|
+
emit?.({ ...p, detail: stageDetail, status: "running" });
|
|
153
|
+
// Report progress to the log box every ~30 s (less spammy than every 5 s)
|
|
154
|
+
if (elapsedMs - lastReport >= 30000) {
|
|
155
|
+
emit?.({ ...p, detail: stageDetail, log: stageDetail, status: "running" });
|
|
156
|
+
lastReport = elapsedMs;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
throw new Error("Xcode Command Line Tools install didn't complete within 30 minutes. " +
|
|
160
|
+
"Try running `xcode-select --install` from Terminal, then re-run setup.");
|
|
161
|
+
}
|
|
162
|
+
function formatElapsed(ms) {
|
|
163
|
+
const mins = Math.floor(ms / 60000);
|
|
164
|
+
const secs = Math.floor((ms % 60000) / 1000);
|
|
165
|
+
return `${mins}m ${secs.toString().padStart(2, "0")}s`;
|
|
166
|
+
}
|
|
167
|
+
// ── Homebrew ──────────────────────────────────────────────────────────────────
|
|
168
|
+
function isBrewInstalled() {
|
|
169
|
+
try {
|
|
170
|
+
(0, child_process_1.execFileSync)("brew", ["--version"], { stdio: "ignore", timeout: 3000, env: brewEnv() });
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Install Homebrew non-interactively.
|
|
179
|
+
*
|
|
180
|
+
* Apple's installer ordinarily wants both a "press Return" confirmation AND a
|
|
181
|
+
* sudo prompt for /opt/homebrew setup. We bypass the first with NONINTERACTIVE=1,
|
|
182
|
+
* and we prime sudo via osascript so the user enters their password once via
|
|
183
|
+
* macOS's native admin dialog (no terminal needed). The 5-minute sudo cache then
|
|
184
|
+
* carries the installer through its privileged operations.
|
|
185
|
+
*/
|
|
186
|
+
async function installHomebrew(p, emit) {
|
|
187
|
+
// 1) Prime sudo via osascript admin prompt. This pops the standard macOS
|
|
188
|
+
// password dialog. Once OK'd, sudo timestamp is set for ~5 minutes — enough
|
|
189
|
+
// for the Homebrew installer to run its `sudo` calls non-interactively.
|
|
190
|
+
emit?.({ ...p, log: "Requesting admin password for Homebrew install…", status: "running" });
|
|
191
|
+
try {
|
|
192
|
+
await runAsAdmin("sudo -v");
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
throw new Error("Admin password is required to install Homebrew. Cancel happened or wrong password — try again.");
|
|
196
|
+
}
|
|
197
|
+
// 2) Run the official installer with NONINTERACTIVE=1. Stream output to the log box.
|
|
198
|
+
emit?.({ ...p, log: "Running the Homebrew installer (this can take 3–5 minutes)…", status: "running" });
|
|
199
|
+
const installScript = `curl -fsSL ${BREW_INSTALL_URL} | /bin/bash`;
|
|
200
|
+
await runStreaming("/bin/bash", ["-c", installScript], p, emit, { env: { ...process.env, NONINTERACTIVE: "1" } });
|
|
201
|
+
// 3) Sanity check.
|
|
202
|
+
if (!isBrewInstalled()) {
|
|
203
|
+
throw new Error("Homebrew installer reported success but `brew --version` still fails. " +
|
|
204
|
+
"Try opening a fresh Terminal and running `brew --version` — if it works there, restart this app.");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
70
207
|
// ── iOS install ───────────────────────────────────────────────────────────────
|
|
71
208
|
/**
|
|
72
|
-
* Install everything iOS capture needs:
|
|
73
|
-
* 1.
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
209
|
+
* Install everything iOS capture needs from scratch:
|
|
210
|
+
* 1. Xcode Command Line Tools (Homebrew prereq) — triggers macOS GUI + polls.
|
|
211
|
+
* 2. Homebrew itself, via `NONINTERACTIVE=1` + osascript-primed sudo.
|
|
212
|
+
* 3. python@3.13 via brew if no compatible python is present.
|
|
213
|
+
* 4. pymobiledevice3 via pip.
|
|
214
|
+
* 5. libimobiledevice via brew (needed for our trust filter via idevicepair validate).
|
|
215
|
+
* 6. Sudoers rule so the tunnel daemon starts without a password prompt.
|
|
78
216
|
*
|
|
79
|
-
* Each step emits progress.
|
|
80
|
-
* `status: "skipped"` so the wizard
|
|
217
|
+
* Each step emits progress. Already-satisfied steps come through as
|
|
218
|
+
* `status: "skipped"` so the wizard ticks them immediately.
|
|
81
219
|
*/
|
|
82
220
|
async function installIosDeps(onProgress) {
|
|
83
221
|
if (process.platform !== "darwin") {
|
|
84
222
|
throw new Error("iOS capture is only supported on macOS.");
|
|
85
223
|
}
|
|
86
|
-
const TOTAL =
|
|
224
|
+
const TOTAL = 6;
|
|
87
225
|
const emit = progressEmitter(onProgress, TOTAL);
|
|
88
|
-
// ── Step 1: Homebrew ───────────────────────────────────────────────────────
|
|
89
226
|
const status = await (0, detect_1.checkIosSetup)();
|
|
90
|
-
|
|
227
|
+
// ── Step 1: Xcode Command Line Tools ─────────────────────────────────────
|
|
228
|
+
if (status.xcodeCommandLineTools) {
|
|
229
|
+
emit.skip("clt", "Xcode Command Line Tools");
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
const p = emit.next("Installing Xcode Command Line Tools", "clt");
|
|
233
|
+
try {
|
|
234
|
+
await installXcodeCLT(p, onProgress);
|
|
235
|
+
emit.update(p, { status: "done" });
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
emit.update(p, { status: "error", log: err.message });
|
|
239
|
+
throw err;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// ── Step 2: Homebrew ─────────────────────────────────────────────────────
|
|
243
|
+
if (status.brew || isBrewInstalled()) {
|
|
91
244
|
emit.skip("brew", "Homebrew");
|
|
92
245
|
}
|
|
93
246
|
else {
|
|
94
|
-
const p = emit.next("Homebrew
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
247
|
+
const p = emit.next("Installing Homebrew", "brew");
|
|
248
|
+
try {
|
|
249
|
+
await installHomebrew(p, onProgress);
|
|
250
|
+
emit.update(p, { status: "done" });
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
emit.update(p, { status: "error", log: err.message });
|
|
254
|
+
throw err;
|
|
255
|
+
}
|
|
100
256
|
}
|
|
101
|
-
// ── Step
|
|
257
|
+
// ── Step 3: python@3.13 ───────────────────────────────────────────────────
|
|
102
258
|
if (status.python) {
|
|
103
259
|
emit.skip("python", `Python (${status.python})`);
|
|
104
260
|
}
|
|
105
261
|
else {
|
|
106
262
|
const p = emit.next("Installing Python 3.13", "python");
|
|
107
263
|
try {
|
|
108
|
-
await runStreaming("brew", ["install", "python@3.13"], p, onProgress);
|
|
264
|
+
await runStreaming("brew", ["install", "python@3.13"], p, onProgress, { env: brewEnv() });
|
|
109
265
|
emit.update(p, { status: "done" });
|
|
110
266
|
}
|
|
111
267
|
catch (err) {
|
|
@@ -113,7 +269,7 @@ async function installIosDeps(onProgress) {
|
|
|
113
269
|
throw err;
|
|
114
270
|
}
|
|
115
271
|
}
|
|
116
|
-
// ── Step
|
|
272
|
+
// ── Step 4: pymobiledevice3 ───────────────────────────────────────────────
|
|
117
273
|
const python = status.python ?? (0, python_1.findPython)() ?? "python3.13";
|
|
118
274
|
if (status.pymobiledevice3) {
|
|
119
275
|
emit.skip("pymobiledevice3", "pymobiledevice3");
|
|
@@ -121,9 +277,22 @@ async function installIosDeps(onProgress) {
|
|
|
121
277
|
else {
|
|
122
278
|
const p = emit.next("Installing pymobiledevice3", "pymobiledevice3");
|
|
123
279
|
try {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
280
|
+
await runStreaming(python, ["-m", "pip", "install", "--break-system-packages", "--upgrade", "pymobiledevice3"], p, onProgress, { env: brewEnv() });
|
|
281
|
+
emit.update(p, { status: "done" });
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
emit.update(p, { status: "error", log: err.message });
|
|
285
|
+
throw err;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// ── Step 5: libimobiledevice (idevicepair for our trust filter) ──────────
|
|
289
|
+
if (status.libimobiledevice) {
|
|
290
|
+
emit.skip("libimobiledevice", "libimobiledevice");
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
const p = emit.next("Installing libimobiledevice", "libimobiledevice");
|
|
294
|
+
try {
|
|
295
|
+
await runStreaming("brew", ["install", "libimobiledevice"], p, onProgress, { env: brewEnv() });
|
|
127
296
|
emit.update(p, { status: "done" });
|
|
128
297
|
}
|
|
129
298
|
catch (err) {
|
|
@@ -131,7 +300,7 @@ async function installIosDeps(onProgress) {
|
|
|
131
300
|
throw err;
|
|
132
301
|
}
|
|
133
302
|
}
|
|
134
|
-
// ── Step
|
|
303
|
+
// ── Step 6: sudoers (optional but a major UX win) ─────────────────────────
|
|
135
304
|
if (status.sudoers) {
|
|
136
305
|
emit.skip("sudoers", "Passwordless tunnel configured");
|
|
137
306
|
}
|
|
@@ -159,47 +328,58 @@ async function installIosDeps(onProgress) {
|
|
|
159
328
|
// ── Android install ───────────────────────────────────────────────────────────
|
|
160
329
|
/**
|
|
161
330
|
* Install everything Android capture needs:
|
|
162
|
-
* 1.
|
|
163
|
-
* 2.
|
|
331
|
+
* 1. Xcode Command Line Tools (Homebrew prereq).
|
|
332
|
+
* 2. Homebrew.
|
|
333
|
+
* 3. brew install android-platform-tools if adb is missing.
|
|
164
334
|
*
|
|
165
335
|
* Pairing/connecting a device is a separate step — see {@link pairAndroidWireless}
|
|
166
336
|
* and the `setup-android` wizard flow.
|
|
167
337
|
*/
|
|
168
338
|
async function installAndroidDeps(onProgress) {
|
|
169
339
|
if (process.platform !== "darwin") {
|
|
170
|
-
// Linux users can apt/dnf install platform-tools themselves; we only auto-
|
|
171
|
-
// install on macOS for now. The wizard surfaces a manual-install message.
|
|
172
340
|
throw new Error("Auto-install of ADB is only supported on macOS. Install android-platform-tools via your package manager.");
|
|
173
341
|
}
|
|
174
|
-
const TOTAL =
|
|
342
|
+
const TOTAL = 3;
|
|
175
343
|
const emit = progressEmitter(onProgress, TOTAL);
|
|
176
344
|
const status = await (0, detect_1.checkAndroidSetup)();
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
345
|
+
// ── Step 1: Xcode Command Line Tools ─────────────────────────────────────
|
|
346
|
+
if (status.xcodeCommandLineTools) {
|
|
347
|
+
emit.skip("clt", "Xcode Command Line Tools");
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
const p = emit.next("Installing Xcode Command Line Tools", "clt");
|
|
351
|
+
try {
|
|
352
|
+
await installXcodeCLT(p, onProgress);
|
|
353
|
+
emit.update(p, { status: "done" });
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
emit.update(p, { status: "error", log: err.message });
|
|
357
|
+
throw err;
|
|
358
|
+
}
|
|
182
359
|
}
|
|
183
|
-
|
|
184
|
-
if (
|
|
360
|
+
// ── Step 2: Homebrew ─────────────────────────────────────────────────────
|
|
361
|
+
if (status.brew || isBrewInstalled()) {
|
|
185
362
|
emit.skip("brew", "Homebrew");
|
|
186
363
|
}
|
|
187
364
|
else {
|
|
188
|
-
const p = emit.next("Homebrew
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
365
|
+
const p = emit.next("Installing Homebrew", "brew");
|
|
366
|
+
try {
|
|
367
|
+
await installHomebrew(p, onProgress);
|
|
368
|
+
emit.update(p, { status: "done" });
|
|
369
|
+
}
|
|
370
|
+
catch (err) {
|
|
371
|
+
emit.update(p, { status: "error", log: err.message });
|
|
372
|
+
throw err;
|
|
373
|
+
}
|
|
194
374
|
}
|
|
195
|
-
// ADB
|
|
375
|
+
// ── Step 3: ADB ──────────────────────────────────────────────────────────
|
|
196
376
|
if (status.adb) {
|
|
197
377
|
emit.skip("adb", `adb (${status.adb})`);
|
|
198
378
|
}
|
|
199
379
|
else {
|
|
200
380
|
const p = emit.next("Installing android-platform-tools", "adb");
|
|
201
381
|
try {
|
|
202
|
-
await runStreaming("brew", ["install", "android-platform-tools"], p, onProgress);
|
|
382
|
+
await runStreaming("brew", ["install", "android-platform-tools"], p, onProgress, { env: brewEnv() });
|
|
203
383
|
emit.update(p, { status: "done" });
|
|
204
384
|
}
|
|
205
385
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../setup/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../setup/install.ts"],"names":[],"mappings":"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"}
|
package/dist/setup/types.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
export interface IosSetupStatus {
|
|
2
|
+
xcodeCommandLineTools: boolean;
|
|
2
3
|
brew: boolean;
|
|
3
4
|
python: string | null;
|
|
4
5
|
pymobiledevice3: boolean;
|
|
6
|
+
libimobiledevice: boolean;
|
|
5
7
|
sudoers: boolean;
|
|
6
8
|
deviceVisible: boolean;
|
|
7
9
|
ok: boolean;
|
|
8
10
|
}
|
|
9
11
|
export interface AndroidSetupStatus {
|
|
12
|
+
xcodeCommandLineTools: boolean;
|
|
13
|
+
brew: boolean;
|
|
10
14
|
adb: string | null;
|
|
11
15
|
deviceConnected: boolean;
|
|
12
16
|
ok: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../setup/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../setup/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -423,6 +423,9 @@
|
|
|
423
423
|
<section class="screen" id="screen-install">
|
|
424
424
|
<p class="lede" id="install-lede">Installing what's missing. This takes a couple of minutes.</p>
|
|
425
425
|
<ul class="step-list" id="install-list"></ul>
|
|
426
|
+
<div class="muted" id="clt-note" style="display: none; margin: 8px 0 4px">
|
|
427
|
+
macOS is installing developer tools. This can take 10–15 minutes. Leave the dialog open.
|
|
428
|
+
</div>
|
|
426
429
|
<div class="log-box">
|
|
427
430
|
<button class="log-toggle" id="log-toggle">Show details</button>
|
|
428
431
|
<div class="log-content" id="log-content"></div>
|
|
@@ -1021,10 +1024,12 @@
|
|
|
1021
1024
|
const status = await window.wizard.checkIos();
|
|
1022
1025
|
const list = $('detect-list');
|
|
1023
1026
|
list.innerHTML = '';
|
|
1024
|
-
renderStep(list, { id: '
|
|
1025
|
-
renderStep(list, { id: '
|
|
1026
|
-
renderStep(list, { id: '
|
|
1027
|
-
renderStep(list, { id: '
|
|
1027
|
+
renderStep(list, { id: 'clt', label: 'Xcode Command Line Tools', status: status.xcodeCommandLineTools ? 'done' : 'error' });
|
|
1028
|
+
renderStep(list, { id: 'brew', label: 'Homebrew', status: status.brew ? 'done' : 'error' });
|
|
1029
|
+
renderStep(list, { id: 'python', label: 'Python', status: status.pymobiledevice3 ? 'done' : 'error' });
|
|
1030
|
+
renderStep(list, { id: 'pmd3', label: 'pymobiledevice3', status: status.pymobiledevice3 ? 'done' : 'error' });
|
|
1031
|
+
renderStep(list, { id: 'libimobiledevice', label: 'libimobiledevice', status: status.libimobiledevice ? 'done' : 'error' });
|
|
1032
|
+
renderStep(list, { id: 'sudoers', label: 'Passwordless tunnel', status: status.sudoers ? 'done' : 'pending',
|
|
1028
1033
|
detail: status.sudoers ? '' : 'Optional — you can skip and enter your Mac password each session.' });
|
|
1029
1034
|
|
|
1030
1035
|
btnPrimary.style.display = '';
|
|
@@ -1044,13 +1049,17 @@
|
|
|
1044
1049
|
btnPrimary.disabled = true;
|
|
1045
1050
|
btnPrimary.textContent = 'Installing…';
|
|
1046
1051
|
|
|
1052
|
+
const cltNote = $('clt-note');
|
|
1053
|
+
cltNote.style.display = 'none';
|
|
1047
1054
|
const off = window.wizard.onInstallIosProgress((p) => {
|
|
1048
1055
|
renderStep($('install-list'), p);
|
|
1049
1056
|
if (p.log) appendLog(p.log);
|
|
1057
|
+
if (p.id === 'clt') cltNote.style.display = p.status === 'running' ? '' : 'none';
|
|
1050
1058
|
});
|
|
1051
1059
|
try {
|
|
1052
1060
|
await window.wizard.installIos();
|
|
1053
1061
|
btnPrimary.disabled = false;
|
|
1062
|
+
cltNote.style.display = 'none';
|
|
1054
1063
|
runDeviceManager();
|
|
1055
1064
|
} catch (err) {
|
|
1056
1065
|
btnPrimary.disabled = false;
|
|
@@ -1070,11 +1079,13 @@
|
|
|
1070
1079
|
const status = await window.wizard.checkAndroid();
|
|
1071
1080
|
const list = $('detect-list');
|
|
1072
1081
|
list.innerHTML = '';
|
|
1073
|
-
renderStep(list, { id: '
|
|
1082
|
+
renderStep(list, { id: 'clt', label: 'Xcode Command Line Tools', status: status.xcodeCommandLineTools ? 'done' : 'error' });
|
|
1083
|
+
renderStep(list, { id: 'brew', label: 'Homebrew', status: status.brew ? 'done' : 'error' });
|
|
1084
|
+
renderStep(list, { id: 'adb', label: 'ADB (Android Debug Bridge)', status: status.adb ? 'done' : 'error' });
|
|
1074
1085
|
|
|
1075
1086
|
btnPrimary.style.display = '';
|
|
1076
|
-
if (!status.
|
|
1077
|
-
btnPrimary.textContent = 'Install
|
|
1087
|
+
if (!status.ok) {
|
|
1088
|
+
btnPrimary.textContent = 'Install missing tools';
|
|
1078
1089
|
btnPrimary.onclick = runAndroidInstall;
|
|
1079
1090
|
} else {
|
|
1080
1091
|
runDeviceManager();
|
|
@@ -1087,13 +1098,17 @@
|
|
|
1087
1098
|
$('install-error').style.display = 'none';
|
|
1088
1099
|
btnPrimary.disabled = true;
|
|
1089
1100
|
btnPrimary.textContent = 'Installing…';
|
|
1101
|
+
const cltNote = $('clt-note');
|
|
1102
|
+
cltNote.style.display = 'none';
|
|
1090
1103
|
const off = window.wizard.onInstallAndroidProgress((p) => {
|
|
1091
1104
|
renderStep($('install-list'), p);
|
|
1092
1105
|
if (p.log) appendLog(p.log);
|
|
1106
|
+
if (p.id === 'clt') cltNote.style.display = p.status === 'running' ? '' : 'none';
|
|
1093
1107
|
});
|
|
1094
1108
|
try {
|
|
1095
1109
|
await window.wizard.installAndroid();
|
|
1096
1110
|
btnPrimary.disabled = false;
|
|
1111
|
+
cltNote.style.display = 'none';
|
|
1097
1112
|
runDeviceManager();
|
|
1098
1113
|
} catch (err) {
|
|
1099
1114
|
btnPrimary.disabled = false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@8bitbish/screenshot-service",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.9",
|
|
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",
|