@myerscarpenter/quest-dev 1.3.0 → 1.4.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/build/commands/open.d.ts.map +1 -1
- package/build/commands/open.js +9 -4
- package/build/commands/open.js.map +1 -1
- package/build/index.js +66 -10
- package/build/index.js.map +1 -1
- package/build/utils/adb.d.ts +6 -0
- package/build/utils/adb.d.ts.map +1 -1
- package/build/utils/adb.js +87 -18
- package/build/utils/adb.js.map +1 -1
- package/build/utils/config.d.ts +5 -0
- package/build/utils/config.d.ts.map +1 -1
- package/build/utils/config.js +27 -4
- package/build/utils/config.js.map +1 -1
- package/build/utils/verbose.d.ts +3 -0
- package/build/utils/verbose.d.ts.map +1 -0
- package/build/utils/verbose.js +13 -0
- package/build/utils/verbose.js.map +1 -0
- package/docs/tests-with-hardware.md +128 -0
- package/package.json +2 -1
- package/src/commands/open.ts +10 -3
- package/src/index.ts +72 -11
- package/src/utils/adb.ts +91 -17
- package/src/utils/config.ts +26 -4
- package/src/utils/verbose.ts +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2IH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,OAAe,EAC5B,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAwEf"}
|
package/build/commands/open.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Quest open command
|
|
3
3
|
* Opens a URL in Quest browser with proper ADB port forwarding
|
|
4
4
|
*/
|
|
5
|
-
import { checkADBPath, checkADBDevices, ensurePortForwarding, ensureCDPForwarding, isBrowserRunning, launchBrowser, getCDPPort } from '../utils/adb.js';
|
|
5
|
+
import { checkADBPath, checkADBDevices, ensurePortForwarding, ensureCDPForwarding, refreshCDPForwarding, isBrowserRunning, launchBrowser, getCDPPort } from '../utils/adb.js';
|
|
6
6
|
import { execCommandFull } from '../utils/exec.js';
|
|
7
7
|
/**
|
|
8
8
|
* Close all tabs except the one with the target URL
|
|
@@ -166,11 +166,16 @@ export async function openCommand(url, closeOthers = false, browser = 'com.oculu
|
|
|
166
166
|
await launchBrowser(url, browser);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
|
+
// Re-detect CDP socket now that browser is running.
|
|
170
|
+
// The initial forwarding may have used the generic socket before the browser
|
|
171
|
+
// had a PID, or may be stale from a previous browser process.
|
|
172
|
+
// Non-default browsers (e.g. org.chromium.chrome) often can't bind the generic
|
|
173
|
+
// chrome_devtools_remote socket and create a PID-specific one instead.
|
|
174
|
+
console.log('Waiting for browser to stabilize...');
|
|
175
|
+
await new Promise(resolve => setTimeout(resolve, browserRunning ? 2000 : 3000));
|
|
176
|
+
await refreshCDPForwarding(browser);
|
|
169
177
|
// Close other tabs if requested
|
|
170
178
|
if (closeOthers) {
|
|
171
|
-
// Wait for browser to stabilize after launch/navigation
|
|
172
|
-
console.log('Waiting for browser to stabilize...');
|
|
173
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
174
179
|
await closeOtherTabs(url, browser);
|
|
175
180
|
}
|
|
176
181
|
console.log('\nDone!\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -13,6 +13,8 @@ import { openCommand } from './commands/open.js';
|
|
|
13
13
|
import { startCommand, stopCommand, statusCommand, tailCommand } from './commands/logcat.js';
|
|
14
14
|
import { batteryCommand } from './commands/battery.js';
|
|
15
15
|
import { stayAwakeCommand, stayAwakeWatchdog, stayAwakeStatus, stayAwakeDisable } from './commands/stay-awake.js';
|
|
16
|
+
import { saveConfig, loadConfig } from './utils/config.js';
|
|
17
|
+
import { setVerbose } from './utils/verbose.js';
|
|
16
18
|
// Read version from package.json
|
|
17
19
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
20
|
const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
|
|
@@ -22,16 +24,18 @@ const cli = yargs(hideBin(process.argv))
|
|
|
22
24
|
.scriptName('quest-dev')
|
|
23
25
|
.version(version)
|
|
24
26
|
.usage('Usage: $0 <command> [options]')
|
|
25
|
-
.demandCommand(1, '
|
|
27
|
+
.demandCommand(1, '')
|
|
26
28
|
.strict()
|
|
29
|
+
.option('verbose', {
|
|
30
|
+
describe: 'Show detailed debug output',
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
default: false,
|
|
33
|
+
global: true,
|
|
34
|
+
})
|
|
27
35
|
.fail((msg, err, yargs) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
if (err) {
|
|
36
|
+
yargs.showHelp();
|
|
37
|
+
if (err)
|
|
32
38
|
console.error(err.message);
|
|
33
|
-
}
|
|
34
|
-
console.error('Run "quest-dev --help" for usage information.');
|
|
35
39
|
process.exit(1);
|
|
36
40
|
})
|
|
37
41
|
.help()
|
|
@@ -117,16 +121,16 @@ cli.command('battery', 'Show Quest battery percentage and charging status', () =
|
|
|
117
121
|
cli.command('stay-awake', 'Keep Quest awake (disables autosleep, guardian, dialogs)', (yargs) => {
|
|
118
122
|
return yargs
|
|
119
123
|
.option('pin', {
|
|
120
|
-
describe: 'Meta Store PIN (or
|
|
124
|
+
describe: 'Meta Store PIN (or save with: quest-dev config --pin)',
|
|
121
125
|
type: 'string',
|
|
122
126
|
})
|
|
123
127
|
.option('idle-timeout', {
|
|
124
|
-
describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or
|
|
128
|
+
describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or save with: quest-dev config)',
|
|
125
129
|
type: 'number',
|
|
126
130
|
alias: 'i',
|
|
127
131
|
})
|
|
128
132
|
.option('low-battery', {
|
|
129
|
-
describe: 'Exit when battery drops to this percentage (default: 10, or
|
|
133
|
+
describe: 'Exit when battery drops to this percentage (default: 10, or save with: quest-dev config)',
|
|
130
134
|
type: 'number',
|
|
131
135
|
})
|
|
132
136
|
.option('disable', {
|
|
@@ -156,6 +160,52 @@ cli.command('stay-awake', 'Keep Quest awake (disables autosleep, guardian, dialo
|
|
|
156
160
|
await stayAwakeCommand(argv.pin, argv.idleTimeout, argv.lowBattery, argv.verbose);
|
|
157
161
|
}
|
|
158
162
|
});
|
|
163
|
+
// Config command
|
|
164
|
+
cli.command('config', 'Save default settings for quest-dev commands', (yargs) => {
|
|
165
|
+
return yargs
|
|
166
|
+
.option('pin', {
|
|
167
|
+
describe: 'Meta Store PIN',
|
|
168
|
+
type: 'string',
|
|
169
|
+
})
|
|
170
|
+
.option('idle-timeout', {
|
|
171
|
+
describe: 'Idle timeout in milliseconds for stay-awake',
|
|
172
|
+
type: 'number',
|
|
173
|
+
})
|
|
174
|
+
.option('low-battery', {
|
|
175
|
+
describe: 'Exit stay-awake when battery drops to this percentage',
|
|
176
|
+
type: 'number',
|
|
177
|
+
})
|
|
178
|
+
.option('show', {
|
|
179
|
+
describe: 'Show current config and exit',
|
|
180
|
+
type: 'boolean',
|
|
181
|
+
default: false,
|
|
182
|
+
});
|
|
183
|
+
}, (argv) => {
|
|
184
|
+
if (argv.show) {
|
|
185
|
+
const config = loadConfig();
|
|
186
|
+
if (Object.keys(config).length === 0) {
|
|
187
|
+
console.log('No config found.');
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
console.log(JSON.stringify(config, null, 2));
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const values = {};
|
|
195
|
+
if (argv.pin !== undefined)
|
|
196
|
+
values.pin = argv.pin;
|
|
197
|
+
if (argv.idleTimeout !== undefined)
|
|
198
|
+
values.idleTimeout = argv.idleTimeout;
|
|
199
|
+
if (argv.lowBattery !== undefined)
|
|
200
|
+
values.lowBattery = argv.lowBattery;
|
|
201
|
+
if (Object.keys(values).length === 0) {
|
|
202
|
+
console.error('No config values provided. Use --pin, --idle-timeout, or --low-battery.');
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
saveConfig(values);
|
|
206
|
+
console.log('Config saved:');
|
|
207
|
+
console.log(JSON.stringify(values, null, 2));
|
|
208
|
+
});
|
|
159
209
|
// Stay-awake watchdog (internal subcommand, spawned by stay-awake parent)
|
|
160
210
|
cli.command('stay-awake-watchdog', false, // Hide from help
|
|
161
211
|
(yargs) => {
|
|
@@ -171,6 +221,12 @@ cli.command('stay-awake-watchdog', false, // Hide from help
|
|
|
171
221
|
}, async (argv) => {
|
|
172
222
|
await stayAwakeWatchdog(argv.parentPid, argv.pin);
|
|
173
223
|
});
|
|
224
|
+
// Set verbose flag before any command runs
|
|
225
|
+
cli.middleware((argv) => {
|
|
226
|
+
if (argv.verbose) {
|
|
227
|
+
setVerbose(true);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
174
230
|
// Parse and execute
|
|
175
231
|
cli.parse();
|
|
176
232
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/utils/adb.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ export declare function getCDPPort(browser?: string): Promise<number>;
|
|
|
33
33
|
* Set up only CDP forwarding (for external URLs that don't need reverse forwarding)
|
|
34
34
|
*/
|
|
35
35
|
export declare function ensureCDPForwarding(browser?: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Re-detect CDP socket after browser launch and update forwarding if needed.
|
|
38
|
+
* This handles the case where the initial forwarding used the generic socket
|
|
39
|
+
* (before the browser had a PID), but the browser created a PID-specific socket.
|
|
40
|
+
*/
|
|
41
|
+
export declare function refreshCDPForwarding(browser?: string): Promise<void>;
|
|
36
42
|
/**
|
|
37
43
|
* Check if USB file transfer is authorized on Quest
|
|
38
44
|
* After reboot, user must click notification to allow file access
|
package/build/utils/adb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuFH;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAiBrC;AAoBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB9D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB/F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,MAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1D;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;CACtD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAkC3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE3D"}
|
package/build/utils/adb.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import which from 'which';
|
|
5
5
|
import net from 'net';
|
|
6
6
|
import { execCommand, execCommandFull } from './exec.js';
|
|
7
|
+
import { verbose } from './verbose.js';
|
|
7
8
|
const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
|
|
8
9
|
/**
|
|
9
10
|
* Get browser process PID
|
|
@@ -11,20 +12,31 @@ const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
|
|
|
11
12
|
async function getBrowserPID(packageName) {
|
|
12
13
|
try {
|
|
13
14
|
const result = await execCommandFull('adb', ['shell', `ps | grep ${packageName}`]);
|
|
15
|
+
verbose('getBrowserPID ps output:', result.stdout?.trim());
|
|
14
16
|
if (!result.stdout)
|
|
15
17
|
return null;
|
|
16
18
|
// Parse ps output: USER PID PPID ... NAME
|
|
19
|
+
// Only match the main process (exact package name at end of line), not
|
|
20
|
+
// child processes like :sandboxed_process0 or :privileged_process0
|
|
17
21
|
const lines = result.stdout.trim().split('\n');
|
|
18
22
|
for (const line of lines) {
|
|
19
23
|
if (line.includes('grep'))
|
|
20
24
|
continue; // Skip grep itself
|
|
21
25
|
const parts = line.trim().split(/\s+/);
|
|
22
26
|
if (parts.length >= 2) {
|
|
23
|
-
|
|
27
|
+
// Check that the process name is exactly the package (last column)
|
|
28
|
+
const processName = parts[parts.length - 1];
|
|
29
|
+
if (processName === packageName) {
|
|
30
|
+
const pid = parseInt(parts[1], 10);
|
|
31
|
+
verbose('getBrowserPID found PID:', pid, 'for', packageName);
|
|
32
|
+
return pid;
|
|
33
|
+
}
|
|
24
34
|
}
|
|
25
35
|
}
|
|
36
|
+
verbose('getBrowserPID: no exact match for', packageName);
|
|
26
37
|
}
|
|
27
|
-
catch {
|
|
38
|
+
catch (e) {
|
|
39
|
+
verbose('getBrowserPID error:', e);
|
|
28
40
|
return null;
|
|
29
41
|
}
|
|
30
42
|
return null;
|
|
@@ -36,29 +48,39 @@ async function getBrowserPID(packageName) {
|
|
|
36
48
|
async function detectCDPSocket(packageName) {
|
|
37
49
|
const pid = await getBrowserPID(packageName);
|
|
38
50
|
if (pid) {
|
|
39
|
-
// Try PID-based socket
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
// Try PID-based socket, with retries (socket may take a moment to appear)
|
|
52
|
+
const socketName = `chrome_devtools_remote_${pid}`;
|
|
53
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
54
|
+
try {
|
|
55
|
+
const result = await execCommandFull('adb', [
|
|
56
|
+
'shell',
|
|
57
|
+
`cat /proc/net/unix | grep ${socketName}`
|
|
58
|
+
]);
|
|
59
|
+
if (result.stdout.includes(socketName)) {
|
|
60
|
+
verbose('detectCDPSocket: found PID-specific socket:', socketName, `(attempt ${attempt + 1})`);
|
|
61
|
+
return socketName;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// ignore
|
|
66
|
+
}
|
|
67
|
+
if (attempt < 4) {
|
|
68
|
+
verbose('detectCDPSocket: PID-specific socket not found yet, retrying in 1s...', `(attempt ${attempt + 1})`);
|
|
69
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
47
70
|
}
|
|
48
71
|
}
|
|
49
|
-
|
|
50
|
-
// Fall through to default
|
|
51
|
-
}
|
|
72
|
+
verbose('detectCDPSocket: PID-specific socket not found after retries:', socketName);
|
|
52
73
|
}
|
|
53
74
|
// Default: generic socket (Quest Browser)
|
|
75
|
+
verbose('detectCDPSocket: falling back to generic chrome_devtools_remote');
|
|
54
76
|
return 'chrome_devtools_remote';
|
|
55
77
|
}
|
|
56
78
|
/**
|
|
57
|
-
* Get CDP port for a socket
|
|
58
|
-
*
|
|
79
|
+
* Get CDP port for a socket.
|
|
80
|
+
* Always use 9223 regardless of socket type for consistency.
|
|
59
81
|
*/
|
|
60
|
-
function getCDPPortForSocket(
|
|
61
|
-
return
|
|
82
|
+
function getCDPPortForSocket(_socket) {
|
|
83
|
+
return CDP_PORT;
|
|
62
84
|
}
|
|
63
85
|
/**
|
|
64
86
|
* Check if ADB is available on PATH
|
|
@@ -213,9 +235,24 @@ export async function ensurePortForwarding(port, browser = 'com.oculus.browser')
|
|
|
213
235
|
export async function isBrowserRunning(browser = 'com.oculus.browser') {
|
|
214
236
|
try {
|
|
215
237
|
const result = await execCommandFull('adb', ['shell', `ps | grep ${browser}`]);
|
|
216
|
-
|
|
238
|
+
verbose('isBrowserRunning ps output:', result.stdout?.trim());
|
|
239
|
+
// Check for exact process name match (not _zygote or :sandboxed_process)
|
|
240
|
+
const lines = result.stdout?.trim().split('\n') || [];
|
|
241
|
+
for (const line of lines) {
|
|
242
|
+
if (line.includes('grep'))
|
|
243
|
+
continue;
|
|
244
|
+
const parts = line.trim().split(/\s+/);
|
|
245
|
+
const processName = parts[parts.length - 1];
|
|
246
|
+
if (processName === browser) {
|
|
247
|
+
verbose('isBrowserRunning:', browser, 'YES (PID', parts[1] + ')');
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
verbose('isBrowserRunning:', browser, 'NO (zygote/child only)');
|
|
252
|
+
return false;
|
|
217
253
|
}
|
|
218
254
|
catch (error) {
|
|
255
|
+
verbose('isBrowserRunning error:', error);
|
|
219
256
|
return false;
|
|
220
257
|
}
|
|
221
258
|
}
|
|
@@ -287,6 +324,38 @@ export async function ensureCDPForwarding(browser = 'com.oculus.browser') {
|
|
|
287
324
|
process.exit(1);
|
|
288
325
|
}
|
|
289
326
|
}
|
|
327
|
+
/**
|
|
328
|
+
* Re-detect CDP socket after browser launch and update forwarding if needed.
|
|
329
|
+
* This handles the case where the initial forwarding used the generic socket
|
|
330
|
+
* (before the browser had a PID), but the browser created a PID-specific socket.
|
|
331
|
+
*/
|
|
332
|
+
export async function refreshCDPForwarding(browser = 'com.oculus.browser') {
|
|
333
|
+
try {
|
|
334
|
+
const cdpSocket = await detectCDPSocket(browser);
|
|
335
|
+
const cdpPort = getCDPPortForSocket(cdpSocket);
|
|
336
|
+
// Check if forwarding already points to the correct socket
|
|
337
|
+
const forwardList = await execCommand('adb', ['forward', '--list']);
|
|
338
|
+
verbose('refreshCDPForwarding: detected socket:', cdpSocket, 'port:', cdpPort);
|
|
339
|
+
verbose('refreshCDPForwarding: current forwards:', forwardList.trim());
|
|
340
|
+
// Check exact match: the forward line must end with the exact socket name
|
|
341
|
+
const expectedForward = `tcp:${cdpPort} localabstract:${cdpSocket}`;
|
|
342
|
+
if (forwardList.includes(expectedForward)) {
|
|
343
|
+
verbose('refreshCDPForwarding: forwarding already correct');
|
|
344
|
+
return; // Already correct
|
|
345
|
+
}
|
|
346
|
+
// Remove existing forwarding on CDP port and re-create with correct socket
|
|
347
|
+
if (forwardList.includes(`tcp:${cdpPort}`)) {
|
|
348
|
+
verbose('refreshCDPForwarding: removing stale forwarding on port', cdpPort);
|
|
349
|
+
await execCommandFull('adb', ['forward', '--remove', `tcp:${cdpPort}`]);
|
|
350
|
+
}
|
|
351
|
+
await execCommand('adb', ['forward', `tcp:${cdpPort}`, `localabstract:${cdpSocket}`]);
|
|
352
|
+
console.log(`CDP forwarding updated: Host:${cdpPort} -> Quest:${cdpSocket}`);
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
// Non-fatal: CDP may still work with existing forwarding
|
|
356
|
+
console.log('Warning: Could not refresh CDP forwarding:', error.message);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
290
359
|
/**
|
|
291
360
|
* Check if USB file transfer is authorized on Quest
|
|
292
361
|
* After reboot, user must click notification to allow file access
|
package/build/utils/adb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb.js","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adb.js","sourceRoot":"","sources":["../../src/utils/adb.ts"],"names":[],"mappings":"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"}
|
package/build/utils/config.d.ts
CHANGED
|
@@ -12,6 +12,11 @@ export interface QuestDevConfig {
|
|
|
12
12
|
* First file found wins for each field.
|
|
13
13
|
*/
|
|
14
14
|
export declare function loadConfig(): QuestDevConfig;
|
|
15
|
+
/**
|
|
16
|
+
* Save config values to ~/.config/quest-dev/config.json
|
|
17
|
+
* Merges with existing config (doesn't overwrite unrelated fields).
|
|
18
|
+
*/
|
|
19
|
+
export declare function saveConfig(values: QuestDevConfig): string;
|
|
15
20
|
/**
|
|
16
21
|
* Resolve PIN from CLI flag, then config files
|
|
17
22
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAY3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAY3C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAiBzD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAc/C"}
|
package/build/utils/config.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Config file loading for quest-dev
|
|
3
3
|
* Resolves settings from CLI flags → .quest-dev.json → ~/.config/quest-dev/config.json
|
|
4
4
|
*/
|
|
5
|
-
import { readFileSync } from 'fs';
|
|
6
|
-
import { join } from 'path';
|
|
5
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
7
|
import { homedir } from 'os';
|
|
8
8
|
const CONFIG_LOCATIONS = [
|
|
9
9
|
join(process.cwd(), '.quest-dev.json'),
|
|
@@ -37,6 +37,30 @@ export function loadConfig() {
|
|
|
37
37
|
}
|
|
38
38
|
return merged;
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Save config values to ~/.config/quest-dev/config.json
|
|
42
|
+
* Merges with existing config (doesn't overwrite unrelated fields).
|
|
43
|
+
*/
|
|
44
|
+
export function saveConfig(values) {
|
|
45
|
+
const configPath = join(homedir(), '.config', 'quest-dev', 'config.json');
|
|
46
|
+
let existing = {};
|
|
47
|
+
try {
|
|
48
|
+
existing = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// No existing config, start fresh
|
|
52
|
+
}
|
|
53
|
+
const merged = { ...existing };
|
|
54
|
+
if (values.pin !== undefined)
|
|
55
|
+
merged.pin = values.pin;
|
|
56
|
+
if (values.idleTimeout !== undefined)
|
|
57
|
+
merged.idleTimeout = values.idleTimeout;
|
|
58
|
+
if (values.lowBattery !== undefined)
|
|
59
|
+
merged.lowBattery = values.lowBattery;
|
|
60
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
61
|
+
writeFileSync(configPath, JSON.stringify(merged, null, 2) + '\n');
|
|
62
|
+
return configPath;
|
|
63
|
+
}
|
|
40
64
|
/**
|
|
41
65
|
* Resolve PIN from CLI flag, then config files
|
|
42
66
|
*/
|
|
@@ -50,8 +74,7 @@ export function loadPin(cliPin) {
|
|
|
50
74
|
console.error('');
|
|
51
75
|
console.error('Provide a PIN via one of:');
|
|
52
76
|
console.error(' --pin <pin> CLI flag');
|
|
53
|
-
console.error('
|
|
54
|
-
console.error(' ~/.config/quest-dev/config.json { "pin": "1234" }');
|
|
77
|
+
console.error(' quest-dev config --pin <pin> Save as default');
|
|
55
78
|
console.error('');
|
|
56
79
|
console.error('The PIN is your Meta Store PIN for the logged-in account.');
|
|
57
80
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verbose.d.ts","sourceRoot":"","sources":["../../src/utils/verbose.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIhD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global verbose flag for debug output
|
|
3
|
+
*/
|
|
4
|
+
let _verbose = false;
|
|
5
|
+
export function setVerbose(v) {
|
|
6
|
+
_verbose = v;
|
|
7
|
+
}
|
|
8
|
+
export function verbose(...args) {
|
|
9
|
+
if (_verbose) {
|
|
10
|
+
console.log('[verbose]', ...args);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=verbose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verbose.js","sourceRoot":"","sources":["../../src/utils/verbose.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,QAAQ,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG,IAAe;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Hardware Tests
|
|
2
|
+
|
|
3
|
+
Tests that require a physical Quest device connected via ADB.
|
|
4
|
+
|
|
5
|
+
## stay-awake command
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Quest 3 connected via USB, ADB authorized
|
|
10
|
+
- Quest OS v44+
|
|
11
|
+
- Meta Store PIN known
|
|
12
|
+
- `.quest-dev.json` in project root: `{ "pin": "<pin>", "idleTimeout": 60000, "lowBattery": 15 }`
|
|
13
|
+
|
|
14
|
+
### Test 1: --status flag (read-only)
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
node build/index.js stay-awake --status
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Expected: Shows all four properties (disable_guardian, disable_dialogs, disable_autosleep, set_proximity_close) as false.
|
|
21
|
+
|
|
22
|
+
### Test 2: --status works without config file
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node build/index.js stay-awake --status
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Expected: No PIN needed for status — works without `.quest-dev.json`.
|
|
29
|
+
|
|
30
|
+
### Test 3: Enable test mode — short run
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
node build/index.js stay-awake --idle-timeout 30000
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Expected:
|
|
37
|
+
- Shows current properties (all false)
|
|
38
|
+
- Enables test mode (prints confirmation)
|
|
39
|
+
- Wakes screen
|
|
40
|
+
- Shows battery level
|
|
41
|
+
- Prints idle timeout and low battery threshold
|
|
42
|
+
|
|
43
|
+
Verify on device:
|
|
44
|
+
```bash
|
|
45
|
+
adb shell content call --uri content://com.oculus.rc --method GET_PROPERTY
|
|
46
|
+
```
|
|
47
|
+
Should show all true.
|
|
48
|
+
|
|
49
|
+
Then Ctrl-C. Should print "Restoring settings..." and "Test mode disabled". Verify properties restored to false.
|
|
50
|
+
|
|
51
|
+
### Test 4: --disable manual restore
|
|
52
|
+
|
|
53
|
+
Enable manually first:
|
|
54
|
+
```bash
|
|
55
|
+
adb shell content call --uri content://com.oculus.rc --method SET_PROPERTY \
|
|
56
|
+
--extra 'disable_guardian:b:true' --extra 'disable_dialogs:b:true' \
|
|
57
|
+
--extra 'disable_autosleep:b:true' --extra 'PIN:s:<pin>'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Then restore via CLI:
|
|
61
|
+
```bash
|
|
62
|
+
node build/index.js stay-awake --disable
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Expected: Reads PIN from config, restores all properties to false.
|
|
66
|
+
|
|
67
|
+
### Test 5: Battery monitoring
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
node build/index.js stay-awake --idle-timeout 120000
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Expected: Shows initial battery level. If charging, should log when battery crosses a 5% boundary (e.g. 85% → 90%). Monitor checks every 60s.
|
|
74
|
+
|
|
75
|
+
### Test 6: --verbose battery output
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
node build/index.js stay-awake --idle-timeout 120000 --verbose
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Expected: Prints battery level on every 60s check, not just at 5% boundaries.
|
|
82
|
+
|
|
83
|
+
### Test 7: SIGUSR1 extends idle timeout
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
node build/index.js stay-awake --pin <pin> --idle-timeout 20000 --verbose &
|
|
87
|
+
PID=$!
|
|
88
|
+
sleep 5
|
|
89
|
+
kill -USR1 $PID
|
|
90
|
+
sleep 5
|
|
91
|
+
kill -USR1 $PID
|
|
92
|
+
sleep 15
|
|
93
|
+
kill $PID
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Expected: Two timestamped `[HH:MM:SS] Activity detected, resetting idle timer` log lines. Process stays alive past the original 20s because signals keep resetting the timer.
|
|
97
|
+
|
|
98
|
+
### Test 8: CLI flags override config
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
node build/index.js stay-awake --idle-timeout 15000 --low-battery 20
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Expected: Should show "idle timeout: 15s, low battery exit: 20%" overriding the config values (60s / 15).
|
|
105
|
+
|
|
106
|
+
### Test 9: Config file values used as defaults
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
node build/index.js stay-awake
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Expected: Should show "idle timeout: 60s, low battery exit: 15%" (from `.quest-dev.json`).
|
|
113
|
+
|
|
114
|
+
### Test 10: Watchdog cleanup after kill -9
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
node build/index.js stay-awake --idle-timeout 120000 &
|
|
118
|
+
PARENT_PID=$!
|
|
119
|
+
sleep 3
|
|
120
|
+
adb shell content call --uri content://com.oculus.rc --method GET_PROPERTY
|
|
121
|
+
# Should show all true
|
|
122
|
+
kill -9 $PARENT_PID
|
|
123
|
+
sleep 8
|
|
124
|
+
adb shell content call --uri content://com.oculus.rc --method GET_PROPERTY
|
|
125
|
+
# Should show all false — watchdog restored them
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Expected: Watchdog detects parent death within ~5s and restores all properties to false.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@myerscarpenter/quest-dev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "CLI tools for Meta Quest development — stay awake, screenshots, URL opening, logcat, and battery via ADB",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"test:watch": "vitest",
|
|
16
16
|
"test:ui": "vitest --ui",
|
|
17
17
|
"test:coverage": "vitest run --coverage",
|
|
18
|
+
"install:global": "pnpm run build && pnpm pack && pnpm install -g $PWD/myerscarpenter-quest-dev-$(node -p \"require('./package.json').version\").tgz && rm myerscarpenter-quest-dev-$(node -p \"require('./package.json').version\").tgz",
|
|
18
19
|
"version:patch": "pnpm version patch",
|
|
19
20
|
"version:minor": "pnpm version minor",
|
|
20
21
|
"version:major": "pnpm version major"
|
package/src/commands/open.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
checkADBDevices,
|
|
9
9
|
ensurePortForwarding,
|
|
10
10
|
ensureCDPForwarding,
|
|
11
|
+
refreshCDPForwarding,
|
|
11
12
|
isBrowserRunning,
|
|
12
13
|
launchBrowser,
|
|
13
14
|
getCDPPort
|
|
@@ -203,11 +204,17 @@ export async function openCommand(
|
|
|
203
204
|
}
|
|
204
205
|
}
|
|
205
206
|
|
|
207
|
+
// Re-detect CDP socket now that browser is running.
|
|
208
|
+
// The initial forwarding may have used the generic socket before the browser
|
|
209
|
+
// had a PID, or may be stale from a previous browser process.
|
|
210
|
+
// Non-default browsers (e.g. org.chromium.chrome) often can't bind the generic
|
|
211
|
+
// chrome_devtools_remote socket and create a PID-specific one instead.
|
|
212
|
+
console.log('Waiting for browser to stabilize...');
|
|
213
|
+
await new Promise(resolve => setTimeout(resolve, browserRunning ? 2000 : 3000));
|
|
214
|
+
await refreshCDPForwarding(browser);
|
|
215
|
+
|
|
206
216
|
// Close other tabs if requested
|
|
207
217
|
if (closeOthers) {
|
|
208
|
-
// Wait for browser to stabilize after launch/navigation
|
|
209
|
-
console.log('Waiting for browser to stabilize...');
|
|
210
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
211
218
|
await closeOtherTabs(url, browser);
|
|
212
219
|
}
|
|
213
220
|
|
package/src/index.ts
CHANGED
|
@@ -15,6 +15,8 @@ import { openCommand } from './commands/open.js';
|
|
|
15
15
|
import { startCommand, stopCommand, statusCommand, tailCommand } from './commands/logcat.js';
|
|
16
16
|
import { batteryCommand } from './commands/battery.js';
|
|
17
17
|
import { stayAwakeCommand, stayAwakeWatchdog, stayAwakeStatus, stayAwakeDisable } from './commands/stay-awake.js';
|
|
18
|
+
import { saveConfig, loadConfig } from './utils/config.js';
|
|
19
|
+
import { setVerbose } from './utils/verbose.js';
|
|
18
20
|
|
|
19
21
|
// Read version from package.json
|
|
20
22
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -28,16 +30,17 @@ const cli = yargs(hideBin(process.argv))
|
|
|
28
30
|
.scriptName('quest-dev')
|
|
29
31
|
.version(version)
|
|
30
32
|
.usage('Usage: $0 <command> [options]')
|
|
31
|
-
.demandCommand(1, '
|
|
33
|
+
.demandCommand(1, '')
|
|
32
34
|
.strict()
|
|
35
|
+
.option('verbose', {
|
|
36
|
+
describe: 'Show detailed debug output',
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
default: false,
|
|
39
|
+
global: true,
|
|
40
|
+
})
|
|
33
41
|
.fail((msg, err, yargs) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
if (err) {
|
|
38
|
-
console.error(err.message);
|
|
39
|
-
}
|
|
40
|
-
console.error('Run "quest-dev --help" for usage information.');
|
|
42
|
+
yargs.showHelp();
|
|
43
|
+
if (err) console.error(err.message);
|
|
41
44
|
process.exit(1);
|
|
42
45
|
})
|
|
43
46
|
.help()
|
|
@@ -159,16 +162,16 @@ cli.command(
|
|
|
159
162
|
(yargs) => {
|
|
160
163
|
return yargs
|
|
161
164
|
.option('pin', {
|
|
162
|
-
describe: 'Meta Store PIN (or
|
|
165
|
+
describe: 'Meta Store PIN (or save with: quest-dev config --pin)',
|
|
163
166
|
type: 'string',
|
|
164
167
|
})
|
|
165
168
|
.option('idle-timeout', {
|
|
166
|
-
describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or
|
|
169
|
+
describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes, or save with: quest-dev config)',
|
|
167
170
|
type: 'number',
|
|
168
171
|
alias: 'i',
|
|
169
172
|
})
|
|
170
173
|
.option('low-battery', {
|
|
171
|
-
describe: 'Exit when battery drops to this percentage (default: 10, or
|
|
174
|
+
describe: 'Exit when battery drops to this percentage (default: 10, or save with: quest-dev config)',
|
|
172
175
|
type: 'number',
|
|
173
176
|
})
|
|
174
177
|
.option('disable', {
|
|
@@ -204,6 +207,57 @@ cli.command(
|
|
|
204
207
|
}
|
|
205
208
|
);
|
|
206
209
|
|
|
210
|
+
// Config command
|
|
211
|
+
cli.command(
|
|
212
|
+
'config',
|
|
213
|
+
'Save default settings for quest-dev commands',
|
|
214
|
+
(yargs) => {
|
|
215
|
+
return yargs
|
|
216
|
+
.option('pin', {
|
|
217
|
+
describe: 'Meta Store PIN',
|
|
218
|
+
type: 'string',
|
|
219
|
+
})
|
|
220
|
+
.option('idle-timeout', {
|
|
221
|
+
describe: 'Idle timeout in milliseconds for stay-awake',
|
|
222
|
+
type: 'number',
|
|
223
|
+
})
|
|
224
|
+
.option('low-battery', {
|
|
225
|
+
describe: 'Exit stay-awake when battery drops to this percentage',
|
|
226
|
+
type: 'number',
|
|
227
|
+
})
|
|
228
|
+
.option('show', {
|
|
229
|
+
describe: 'Show current config and exit',
|
|
230
|
+
type: 'boolean',
|
|
231
|
+
default: false,
|
|
232
|
+
});
|
|
233
|
+
},
|
|
234
|
+
(argv) => {
|
|
235
|
+
if (argv.show) {
|
|
236
|
+
const config = loadConfig();
|
|
237
|
+
if (Object.keys(config).length === 0) {
|
|
238
|
+
console.log('No config found.');
|
|
239
|
+
} else {
|
|
240
|
+
console.log(JSON.stringify(config, null, 2));
|
|
241
|
+
}
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const values: Record<string, unknown> = {};
|
|
246
|
+
if (argv.pin !== undefined) values.pin = argv.pin;
|
|
247
|
+
if (argv.idleTimeout !== undefined) values.idleTimeout = argv.idleTimeout;
|
|
248
|
+
if (argv.lowBattery !== undefined) values.lowBattery = argv.lowBattery;
|
|
249
|
+
|
|
250
|
+
if (Object.keys(values).length === 0) {
|
|
251
|
+
console.error('No config values provided. Use --pin, --idle-timeout, or --low-battery.');
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
saveConfig(values as any);
|
|
256
|
+
console.log('Config saved:');
|
|
257
|
+
console.log(JSON.stringify(values, null, 2));
|
|
258
|
+
}
|
|
259
|
+
);
|
|
260
|
+
|
|
207
261
|
// Stay-awake watchdog (internal subcommand, spawned by stay-awake parent)
|
|
208
262
|
cli.command(
|
|
209
263
|
'stay-awake-watchdog',
|
|
@@ -224,5 +278,12 @@ cli.command(
|
|
|
224
278
|
}
|
|
225
279
|
);
|
|
226
280
|
|
|
281
|
+
// Set verbose flag before any command runs
|
|
282
|
+
cli.middleware((argv) => {
|
|
283
|
+
if (argv.verbose) {
|
|
284
|
+
setVerbose(true);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
|
|
227
288
|
// Parse and execute
|
|
228
289
|
cli.parse();
|
package/src/utils/adb.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import which from 'which';
|
|
6
6
|
import net from 'net';
|
|
7
7
|
import { execCommand, execCommandFull } from './exec.js';
|
|
8
|
+
import { verbose } from './verbose.js';
|
|
8
9
|
|
|
9
10
|
const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
|
|
10
11
|
|
|
@@ -14,18 +15,29 @@ const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
|
|
|
14
15
|
async function getBrowserPID(packageName: string): Promise<number | null> {
|
|
15
16
|
try {
|
|
16
17
|
const result = await execCommandFull('adb', ['shell', `ps | grep ${packageName}`]);
|
|
18
|
+
verbose('getBrowserPID ps output:', result.stdout?.trim());
|
|
17
19
|
if (!result.stdout) return null;
|
|
18
20
|
|
|
19
21
|
// Parse ps output: USER PID PPID ... NAME
|
|
22
|
+
// Only match the main process (exact package name at end of line), not
|
|
23
|
+
// child processes like :sandboxed_process0 or :privileged_process0
|
|
20
24
|
const lines = result.stdout.trim().split('\n');
|
|
21
25
|
for (const line of lines) {
|
|
22
26
|
if (line.includes('grep')) continue; // Skip grep itself
|
|
23
27
|
const parts = line.trim().split(/\s+/);
|
|
24
28
|
if (parts.length >= 2) {
|
|
25
|
-
|
|
29
|
+
// Check that the process name is exactly the package (last column)
|
|
30
|
+
const processName = parts[parts.length - 1];
|
|
31
|
+
if (processName === packageName) {
|
|
32
|
+
const pid = parseInt(parts[1], 10);
|
|
33
|
+
verbose('getBrowserPID found PID:', pid, 'for', packageName);
|
|
34
|
+
return pid;
|
|
35
|
+
}
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
|
-
|
|
38
|
+
verbose('getBrowserPID: no exact match for', packageName);
|
|
39
|
+
} catch (e) {
|
|
40
|
+
verbose('getBrowserPID error:', e);
|
|
29
41
|
return null;
|
|
30
42
|
}
|
|
31
43
|
return null;
|
|
@@ -39,30 +51,40 @@ async function detectCDPSocket(packageName: string): Promise<string> {
|
|
|
39
51
|
const pid = await getBrowserPID(packageName);
|
|
40
52
|
|
|
41
53
|
if (pid) {
|
|
42
|
-
// Try PID-based socket
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
// Try PID-based socket, with retries (socket may take a moment to appear)
|
|
55
|
+
const socketName = `chrome_devtools_remote_${pid}`;
|
|
56
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
57
|
+
try {
|
|
58
|
+
const result = await execCommandFull('adb', [
|
|
59
|
+
'shell',
|
|
60
|
+
`cat /proc/net/unix | grep ${socketName}`
|
|
61
|
+
]);
|
|
62
|
+
if (result.stdout.includes(socketName)) {
|
|
63
|
+
verbose('detectCDPSocket: found PID-specific socket:', socketName, `(attempt ${attempt + 1})`);
|
|
64
|
+
return socketName;
|
|
65
|
+
}
|
|
66
|
+
} catch {
|
|
67
|
+
// ignore
|
|
68
|
+
}
|
|
69
|
+
if (attempt < 4) {
|
|
70
|
+
verbose('detectCDPSocket: PID-specific socket not found yet, retrying in 1s...', `(attempt ${attempt + 1})`);
|
|
71
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
50
72
|
}
|
|
51
|
-
} catch {
|
|
52
|
-
// Fall through to default
|
|
53
73
|
}
|
|
74
|
+
verbose('detectCDPSocket: PID-specific socket not found after retries:', socketName);
|
|
54
75
|
}
|
|
55
76
|
|
|
56
77
|
// Default: generic socket (Quest Browser)
|
|
78
|
+
verbose('detectCDPSocket: falling back to generic chrome_devtools_remote');
|
|
57
79
|
return 'chrome_devtools_remote';
|
|
58
80
|
}
|
|
59
81
|
|
|
60
82
|
/**
|
|
61
|
-
* Get CDP port for a socket
|
|
62
|
-
*
|
|
83
|
+
* Get CDP port for a socket.
|
|
84
|
+
* Always use 9223 regardless of socket type for consistency.
|
|
63
85
|
*/
|
|
64
|
-
function getCDPPortForSocket(
|
|
65
|
-
return
|
|
86
|
+
function getCDPPortForSocket(_socket: string): number {
|
|
87
|
+
return CDP_PORT;
|
|
66
88
|
}
|
|
67
89
|
|
|
68
90
|
/**
|
|
@@ -229,8 +251,22 @@ export async function ensurePortForwarding(
|
|
|
229
251
|
export async function isBrowserRunning(browser: string = 'com.oculus.browser'): Promise<boolean> {
|
|
230
252
|
try {
|
|
231
253
|
const result = await execCommandFull('adb', ['shell', `ps | grep ${browser}`]);
|
|
232
|
-
|
|
254
|
+
verbose('isBrowserRunning ps output:', result.stdout?.trim());
|
|
255
|
+
// Check for exact process name match (not _zygote or :sandboxed_process)
|
|
256
|
+
const lines = result.stdout?.trim().split('\n') || [];
|
|
257
|
+
for (const line of lines) {
|
|
258
|
+
if (line.includes('grep')) continue;
|
|
259
|
+
const parts = line.trim().split(/\s+/);
|
|
260
|
+
const processName = parts[parts.length - 1];
|
|
261
|
+
if (processName === browser) {
|
|
262
|
+
verbose('isBrowserRunning:', browser, 'YES (PID', parts[1] + ')');
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
verbose('isBrowserRunning:', browser, 'NO (zygote/child only)');
|
|
267
|
+
return false;
|
|
233
268
|
} catch (error) {
|
|
269
|
+
verbose('isBrowserRunning error:', error);
|
|
234
270
|
return false;
|
|
235
271
|
}
|
|
236
272
|
}
|
|
@@ -308,6 +344,44 @@ export async function ensureCDPForwarding(
|
|
|
308
344
|
}
|
|
309
345
|
}
|
|
310
346
|
|
|
347
|
+
/**
|
|
348
|
+
* Re-detect CDP socket after browser launch and update forwarding if needed.
|
|
349
|
+
* This handles the case where the initial forwarding used the generic socket
|
|
350
|
+
* (before the browser had a PID), but the browser created a PID-specific socket.
|
|
351
|
+
*/
|
|
352
|
+
export async function refreshCDPForwarding(
|
|
353
|
+
browser: string = 'com.oculus.browser'
|
|
354
|
+
): Promise<void> {
|
|
355
|
+
try {
|
|
356
|
+
const cdpSocket = await detectCDPSocket(browser);
|
|
357
|
+
const cdpPort = getCDPPortForSocket(cdpSocket);
|
|
358
|
+
|
|
359
|
+
// Check if forwarding already points to the correct socket
|
|
360
|
+
const forwardList = await execCommand('adb', ['forward', '--list']);
|
|
361
|
+
verbose('refreshCDPForwarding: detected socket:', cdpSocket, 'port:', cdpPort);
|
|
362
|
+
verbose('refreshCDPForwarding: current forwards:', forwardList.trim());
|
|
363
|
+
|
|
364
|
+
// Check exact match: the forward line must end with the exact socket name
|
|
365
|
+
const expectedForward = `tcp:${cdpPort} localabstract:${cdpSocket}`;
|
|
366
|
+
if (forwardList.includes(expectedForward)) {
|
|
367
|
+
verbose('refreshCDPForwarding: forwarding already correct');
|
|
368
|
+
return; // Already correct
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Remove existing forwarding on CDP port and re-create with correct socket
|
|
372
|
+
if (forwardList.includes(`tcp:${cdpPort}`)) {
|
|
373
|
+
verbose('refreshCDPForwarding: removing stale forwarding on port', cdpPort);
|
|
374
|
+
await execCommandFull('adb', ['forward', '--remove', `tcp:${cdpPort}`]);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
await execCommand('adb', ['forward', `tcp:${cdpPort}`, `localabstract:${cdpSocket}`]);
|
|
378
|
+
console.log(`CDP forwarding updated: Host:${cdpPort} -> Quest:${cdpSocket}`);
|
|
379
|
+
} catch (error) {
|
|
380
|
+
// Non-fatal: CDP may still work with existing forwarding
|
|
381
|
+
console.log('Warning: Could not refresh CDP forwarding:', (error as Error).message);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
311
385
|
/**
|
|
312
386
|
* Check if USB file transfer is authorized on Quest
|
|
313
387
|
* After reboot, user must click notification to allow file access
|
package/src/utils/config.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Resolves settings from CLI flags → .quest-dev.json → ~/.config/quest-dev/config.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { readFileSync } from 'fs';
|
|
7
|
-
import { join } from 'path';
|
|
6
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
7
|
+
import { join, dirname } from 'path';
|
|
8
8
|
import { homedir } from 'os';
|
|
9
9
|
|
|
10
10
|
export interface QuestDevConfig {
|
|
@@ -45,6 +45,29 @@ export function loadConfig(): QuestDevConfig {
|
|
|
45
45
|
return merged;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Save config values to ~/.config/quest-dev/config.json
|
|
50
|
+
* Merges with existing config (doesn't overwrite unrelated fields).
|
|
51
|
+
*/
|
|
52
|
+
export function saveConfig(values: QuestDevConfig): string {
|
|
53
|
+
const configPath = join(homedir(), '.config', 'quest-dev', 'config.json');
|
|
54
|
+
let existing: QuestDevConfig = {};
|
|
55
|
+
try {
|
|
56
|
+
existing = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
57
|
+
} catch {
|
|
58
|
+
// No existing config, start fresh
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const merged = { ...existing };
|
|
62
|
+
if (values.pin !== undefined) merged.pin = values.pin;
|
|
63
|
+
if (values.idleTimeout !== undefined) merged.idleTimeout = values.idleTimeout;
|
|
64
|
+
if (values.lowBattery !== undefined) merged.lowBattery = values.lowBattery;
|
|
65
|
+
|
|
66
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
67
|
+
writeFileSync(configPath, JSON.stringify(merged, null, 2) + '\n');
|
|
68
|
+
return configPath;
|
|
69
|
+
}
|
|
70
|
+
|
|
48
71
|
/**
|
|
49
72
|
* Resolve PIN from CLI flag, then config files
|
|
50
73
|
*/
|
|
@@ -58,8 +81,7 @@ export function loadPin(cliPin?: string): string {
|
|
|
58
81
|
console.error('');
|
|
59
82
|
console.error('Provide a PIN via one of:');
|
|
60
83
|
console.error(' --pin <pin> CLI flag');
|
|
61
|
-
console.error('
|
|
62
|
-
console.error(' ~/.config/quest-dev/config.json { "pin": "1234" }');
|
|
84
|
+
console.error(' quest-dev config --pin <pin> Save as default');
|
|
63
85
|
console.error('');
|
|
64
86
|
console.error('The PIN is your Meta Store PIN for the logged-in account.');
|
|
65
87
|
process.exit(1);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global verbose flag for debug output
|
|
3
|
+
*/
|
|
4
|
+
let _verbose = false;
|
|
5
|
+
|
|
6
|
+
export function setVerbose(v: boolean): void {
|
|
7
|
+
_verbose = v;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function verbose(...args: unknown[]): void {
|
|
11
|
+
if (_verbose) {
|
|
12
|
+
console.log('[verbose]', ...args);
|
|
13
|
+
}
|
|
14
|
+
}
|