@myerscarpenter/quest-dev 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/commands/battery.d.ts +9 -0
- package/build/commands/battery.d.ts.map +1 -0
- package/build/commands/battery.js +31 -0
- package/build/commands/battery.js.map +1 -0
- package/build/commands/open.d.ts +1 -1
- package/build/commands/open.d.ts.map +1 -1
- package/build/commands/open.js +14 -14
- package/build/commands/open.js.map +1 -1
- package/build/commands/screenshot.d.ts +1 -1
- package/build/commands/screenshot.d.ts.map +1 -1
- package/build/commands/screenshot.js +55 -9
- package/build/commands/screenshot.js.map +1 -1
- package/build/commands/stay-awake.d.ts +14 -0
- package/build/commands/stay-awake.d.ts.map +1 -0
- package/build/commands/stay-awake.js +234 -0
- package/build/commands/stay-awake.js.map +1 -0
- package/build/index.js +49 -5
- package/build/index.js.map +1 -1
- package/build/utils/adb.d.ts +12 -7
- package/build/utils/adb.d.ts.map +1 -1
- package/build/utils/adb.js +138 -30
- package/build/utils/adb.js.map +1 -1
- package/build/utils/filename.d.ts +9 -0
- package/build/utils/filename.d.ts.map +1 -0
- package/build/utils/filename.js +17 -0
- package/build/utils/filename.js.map +1 -0
- package/build/utils/filename.test.d.ts +5 -0
- package/build/utils/filename.test.d.ts.map +1 -0
- package/build/utils/filename.test.js +40 -0
- package/build/utils/filename.test.js.map +1 -0
- package/package.json +2 -1
- package/src/commands/battery.ts +34 -0
- package/src/commands/open.ts +18 -14
- package/src/commands/screenshot.ts +61 -9
- package/src/commands/stay-awake.ts +254 -0
- package/src/index.ts +77 -9
- package/src/utils/adb.ts +148 -30
- package/src/utils/filename.test.ts +55 -0
- package/src/utils/filename.ts +18 -0
- package/tests/adb.test.ts +2 -2
package/build/index.js
CHANGED
|
@@ -11,6 +11,8 @@ import { dirname, join } from 'path';
|
|
|
11
11
|
import { screenshotCommand } from './commands/screenshot.js';
|
|
12
12
|
import { openCommand } from './commands/open.js';
|
|
13
13
|
import { startCommand, stopCommand, statusCommand, tailCommand } from './commands/logcat.js';
|
|
14
|
+
import { batteryCommand } from './commands/battery.js';
|
|
15
|
+
import { stayAwakeCommand, stayAwakeWatchdog } from './commands/stay-awake.js';
|
|
14
16
|
// Read version from package.json
|
|
15
17
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
18
|
const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
|
|
@@ -36,14 +38,20 @@ const cli = yargs(hideBin(process.argv))
|
|
|
36
38
|
.alias('help', 'h')
|
|
37
39
|
.epilog('Requires ADB and Quest connected via USB. Sets up CDP on port 9223 for cdp-cli.');
|
|
38
40
|
// Screenshot command
|
|
39
|
-
cli.command('screenshot <
|
|
40
|
-
return yargs
|
|
41
|
-
|
|
41
|
+
cli.command('screenshot <directory>', 'Take a screenshot from Quest and save to directory with auto-generated filename', (yargs) => {
|
|
42
|
+
return yargs
|
|
43
|
+
.positional('directory', {
|
|
44
|
+
describe: 'Output directory path (e.g., ~/screenshots)',
|
|
42
45
|
type: 'string',
|
|
43
46
|
demandOption: true
|
|
47
|
+
})
|
|
48
|
+
.option('caption', {
|
|
49
|
+
describe: 'Caption to embed in JPEG COM metadata',
|
|
50
|
+
type: 'string',
|
|
51
|
+
alias: 'c'
|
|
44
52
|
});
|
|
45
53
|
}, async (argv) => {
|
|
46
|
-
await screenshotCommand(argv.
|
|
54
|
+
await screenshotCommand(argv.directory, argv.caption);
|
|
47
55
|
});
|
|
48
56
|
// Open command
|
|
49
57
|
cli.command('open <url>', 'Open URL in Quest browser (sets up CDP debugging port forwarding)', (yargs) => {
|
|
@@ -57,9 +65,15 @@ cli.command('open <url>', 'Open URL in Quest browser (sets up CDP debugging port
|
|
|
57
65
|
describe: 'Close all other tabs before opening',
|
|
58
66
|
type: 'boolean',
|
|
59
67
|
default: false
|
|
68
|
+
})
|
|
69
|
+
.option('browser', {
|
|
70
|
+
describe: 'Browser package name (e.g., com.oculus.browser, org.chromium.chrome)',
|
|
71
|
+
type: 'string',
|
|
72
|
+
default: 'com.oculus.browser',
|
|
73
|
+
alias: 'b'
|
|
60
74
|
});
|
|
61
75
|
}, async (argv) => {
|
|
62
|
-
await openCommand(argv.url, argv.closeOthers);
|
|
76
|
+
await openCommand(argv.url, argv.closeOthers, argv.browser);
|
|
63
77
|
});
|
|
64
78
|
// Logcat command
|
|
65
79
|
cli.command('logcat <action>', 'Capture Android logcat to files (CRITICAL: always start before testing to avoid losing crash logs)', (yargs) => {
|
|
@@ -95,6 +109,36 @@ cli.command('logcat <action>', 'Capture Android logcat to files (CRITICAL: alway
|
|
|
95
109
|
process.exit(1);
|
|
96
110
|
}
|
|
97
111
|
});
|
|
112
|
+
// Battery command
|
|
113
|
+
cli.command('battery', 'Show Quest battery percentage and charging status', () => { }, async () => {
|
|
114
|
+
await batteryCommand();
|
|
115
|
+
});
|
|
116
|
+
// Stay-awake command
|
|
117
|
+
cli.command('stay-awake', 'Keep Quest screen awake (sets 24hr timeout, restores on Ctrl-C)', (yargs) => {
|
|
118
|
+
return yargs.option('idle-timeout', {
|
|
119
|
+
describe: 'Idle timeout in milliseconds (default: 300000 = 5 minutes)',
|
|
120
|
+
type: 'number',
|
|
121
|
+
default: 300000,
|
|
122
|
+
alias: 'i'
|
|
123
|
+
});
|
|
124
|
+
}, async (argv) => {
|
|
125
|
+
await stayAwakeCommand(argv.idleTimeout);
|
|
126
|
+
});
|
|
127
|
+
// Stay-awake watchdog (internal subcommand, spawned by stay-awake parent)
|
|
128
|
+
cli.command('stay-awake-watchdog', false, // Hide from help
|
|
129
|
+
(yargs) => {
|
|
130
|
+
return yargs
|
|
131
|
+
.option('parent-pid', {
|
|
132
|
+
type: 'number',
|
|
133
|
+
demandOption: true
|
|
134
|
+
})
|
|
135
|
+
.option('original-timeout', {
|
|
136
|
+
type: 'number',
|
|
137
|
+
demandOption: true
|
|
138
|
+
});
|
|
139
|
+
}, async (argv) => {
|
|
140
|
+
await stayAwakeWatchdog(argv.parentPid, argv.originalTimeout);
|
|
141
|
+
});
|
|
98
142
|
// Parse and execute
|
|
99
143
|
cli.parse();
|
|
100
144
|
//# 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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/utils/adb.d.ts
CHANGED
|
@@ -16,23 +16,23 @@ export declare function isPortListening(port: number): Promise<boolean>;
|
|
|
16
16
|
/**
|
|
17
17
|
* Idempotently set up ADB port forwarding for a given port
|
|
18
18
|
*/
|
|
19
|
-
export declare function ensurePortForwarding(port: number): Promise<void>;
|
|
19
|
+
export declare function ensurePortForwarding(port: number, browser?: string): Promise<void>;
|
|
20
20
|
/**
|
|
21
|
-
* Check if
|
|
21
|
+
* Check if browser is running
|
|
22
22
|
*/
|
|
23
|
-
export declare function isBrowserRunning(): Promise<boolean>;
|
|
23
|
+
export declare function isBrowserRunning(browser?: string): Promise<boolean>;
|
|
24
24
|
/**
|
|
25
|
-
* Launch
|
|
25
|
+
* Launch browser with a URL using am start
|
|
26
26
|
*/
|
|
27
|
-
export declare function launchBrowser(url: string): Promise<boolean>;
|
|
27
|
+
export declare function launchBrowser(url: string, browser?: string): Promise<boolean>;
|
|
28
28
|
/**
|
|
29
29
|
* Get CDP port
|
|
30
30
|
*/
|
|
31
|
-
export declare function getCDPPort(): number
|
|
31
|
+
export declare function getCDPPort(browser?: string): Promise<number>;
|
|
32
32
|
/**
|
|
33
33
|
* Set up only CDP forwarding (for external URLs that don't need reverse forwarding)
|
|
34
34
|
*/
|
|
35
|
-
export declare function ensureCDPForwarding(): Promise<void>;
|
|
35
|
+
export declare function ensureCDPForwarding(browser?: string): Promise<void>;
|
|
36
36
|
/**
|
|
37
37
|
* Check if USB file transfer is authorized on Quest
|
|
38
38
|
* After reboot, user must click notification to allow file access
|
|
@@ -43,4 +43,9 @@ export declare function checkUSBFileTransfer(): Promise<void>;
|
|
|
43
43
|
* Screenshots cannot be taken when the display is off
|
|
44
44
|
*/
|
|
45
45
|
export declare function checkQuestAwake(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Get Quest battery status
|
|
48
|
+
* Returns percentage and charging state in one line
|
|
49
|
+
*/
|
|
50
|
+
export declare function getBatteryStatus(): Promise<string>;
|
|
46
51
|
//# sourceMappingURL=adb.d.ts.map
|
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;AAiEH;;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,CAO/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;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1D;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyCxD"}
|
package/build/utils/adb.js
CHANGED
|
@@ -5,6 +5,61 @@ import which from 'which';
|
|
|
5
5
|
import net from 'net';
|
|
6
6
|
import { execCommand, execCommandFull } from './exec.js';
|
|
7
7
|
const CDP_PORT = 9223; // Chrome DevTools Protocol port (Quest browser default)
|
|
8
|
+
/**
|
|
9
|
+
* Get browser process PID
|
|
10
|
+
*/
|
|
11
|
+
async function getBrowserPID(packageName) {
|
|
12
|
+
try {
|
|
13
|
+
const result = await execCommandFull('adb', ['shell', `ps | grep ${packageName}`]);
|
|
14
|
+
if (!result.stdout)
|
|
15
|
+
return null;
|
|
16
|
+
// Parse ps output: USER PID PPID ... NAME
|
|
17
|
+
const lines = result.stdout.trim().split('\n');
|
|
18
|
+
for (const line of lines) {
|
|
19
|
+
if (line.includes('grep'))
|
|
20
|
+
continue; // Skip grep itself
|
|
21
|
+
const parts = line.trim().split(/\s+/);
|
|
22
|
+
if (parts.length >= 2) {
|
|
23
|
+
return parseInt(parts[1], 10); // PID is second column
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Detect CDP socket for a browser
|
|
34
|
+
* Returns socket name (e.g., "chrome_devtools_remote_12345")
|
|
35
|
+
*/
|
|
36
|
+
async function detectCDPSocket(packageName) {
|
|
37
|
+
const pid = await getBrowserPID(packageName);
|
|
38
|
+
if (pid) {
|
|
39
|
+
// Try PID-based socket first
|
|
40
|
+
try {
|
|
41
|
+
const result = await execCommandFull('adb', [
|
|
42
|
+
'shell',
|
|
43
|
+
`cat /proc/net/unix | grep chrome_devtools_remote_${pid}`
|
|
44
|
+
]);
|
|
45
|
+
if (result.stdout.includes(`chrome_devtools_remote_${pid}`)) {
|
|
46
|
+
return `chrome_devtools_remote_${pid}`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Fall through to default
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Default: generic socket (Quest Browser)
|
|
54
|
+
return 'chrome_devtools_remote';
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get CDP port for a socket
|
|
58
|
+
* Generic socket uses 9223, PID-based uses 9222
|
|
59
|
+
*/
|
|
60
|
+
function getCDPPortForSocket(socket) {
|
|
61
|
+
return socket === 'chrome_devtools_remote' ? 9223 : 9222;
|
|
62
|
+
}
|
|
8
63
|
/**
|
|
9
64
|
* Check if ADB is available on PATH
|
|
10
65
|
*/
|
|
@@ -107,8 +162,11 @@ export function isPortListening(port) {
|
|
|
107
162
|
/**
|
|
108
163
|
* Idempotently set up ADB port forwarding for a given port
|
|
109
164
|
*/
|
|
110
|
-
export async function ensurePortForwarding(port) {
|
|
165
|
+
export async function ensurePortForwarding(port, browser = 'com.oculus.browser') {
|
|
111
166
|
try {
|
|
167
|
+
// Detect CDP socket and port for this browser
|
|
168
|
+
const cdpSocket = await detectCDPSocket(browser);
|
|
169
|
+
const cdpPort = getCDPPortForSocket(cdpSocket);
|
|
112
170
|
// Check reverse forwarding (Quest -> Host for dev server)
|
|
113
171
|
const reverseList = await execCommand('adb', ['reverse', '--list']);
|
|
114
172
|
const reverseExists = reverseList.includes(`tcp:${port}`);
|
|
@@ -122,26 +180,26 @@ export async function ensurePortForwarding(port) {
|
|
|
122
180
|
// Check forward forwarding (Host -> Quest for CDP)
|
|
123
181
|
// First check if ADB already has this forwarding set up
|
|
124
182
|
const forwardList = await execCommand('adb', ['forward', '--list']);
|
|
125
|
-
const forwardExists = forwardList.includes(`tcp:${
|
|
183
|
+
const forwardExists = forwardList.includes(`tcp:${cdpPort}`) && forwardList.includes(cdpSocket);
|
|
126
184
|
if (forwardExists) {
|
|
127
|
-
console.log(`CDP port ${
|
|
185
|
+
console.log(`CDP port ${cdpPort} forwarding already set up`);
|
|
128
186
|
}
|
|
129
187
|
else {
|
|
130
188
|
// Check if something else is using the port
|
|
131
|
-
const cdpPortListening = await isPortListening(
|
|
189
|
+
const cdpPortListening = await isPortListening(cdpPort);
|
|
132
190
|
if (cdpPortListening) {
|
|
133
|
-
console.error(`Error: Port ${
|
|
191
|
+
console.error(`Error: Port ${cdpPort} is already in use by another process`);
|
|
134
192
|
console.error('');
|
|
135
|
-
console.error(
|
|
193
|
+
console.error(`CDP port forwarding requires port ${cdpPort} to be free.`);
|
|
136
194
|
console.error('Please stop the process using this port and try again.');
|
|
137
195
|
console.error('');
|
|
138
196
|
console.error('To find what is using the port:');
|
|
139
|
-
console.error(` lsof -i :${
|
|
197
|
+
console.error(` lsof -i :${cdpPort}`);
|
|
140
198
|
console.error('');
|
|
141
199
|
process.exit(1);
|
|
142
200
|
}
|
|
143
|
-
await execCommand('adb', ['forward', `tcp:${
|
|
144
|
-
console.log(`ADB forward port forwarding set up: Host:${
|
|
201
|
+
await execCommand('adb', ['forward', `tcp:${cdpPort}`, `localabstract:${cdpSocket}`]);
|
|
202
|
+
console.log(`ADB forward port forwarding set up: Host:${cdpPort} -> Quest:${cdpSocket} (CDP)`);
|
|
145
203
|
}
|
|
146
204
|
}
|
|
147
205
|
catch (error) {
|
|
@@ -150,22 +208,22 @@ export async function ensurePortForwarding(port) {
|
|
|
150
208
|
}
|
|
151
209
|
}
|
|
152
210
|
/**
|
|
153
|
-
* Check if
|
|
211
|
+
* Check if browser is running
|
|
154
212
|
*/
|
|
155
|
-
export async function isBrowserRunning() {
|
|
213
|
+
export async function isBrowserRunning(browser = 'com.oculus.browser') {
|
|
156
214
|
try {
|
|
157
|
-
const result = await execCommandFull('adb', ['shell',
|
|
158
|
-
return result.stdout.includes(
|
|
215
|
+
const result = await execCommandFull('adb', ['shell', `ps | grep ${browser}`]);
|
|
216
|
+
return result.stdout.includes(browser);
|
|
159
217
|
}
|
|
160
218
|
catch (error) {
|
|
161
219
|
return false;
|
|
162
220
|
}
|
|
163
221
|
}
|
|
164
222
|
/**
|
|
165
|
-
* Launch
|
|
223
|
+
* Launch browser with a URL using am start
|
|
166
224
|
*/
|
|
167
|
-
export async function launchBrowser(url) {
|
|
168
|
-
console.log('Launching
|
|
225
|
+
export async function launchBrowser(url, browser = 'com.oculus.browser') {
|
|
226
|
+
console.log('Launching browser...');
|
|
169
227
|
try {
|
|
170
228
|
await execCommand('adb', [
|
|
171
229
|
'shell',
|
|
@@ -175,49 +233,53 @@ export async function launchBrowser(url) {
|
|
|
175
233
|
'android.intent.action.VIEW',
|
|
176
234
|
'-d',
|
|
177
235
|
url,
|
|
178
|
-
|
|
236
|
+
browser
|
|
179
237
|
]);
|
|
180
|
-
console.log(`
|
|
238
|
+
console.log(`Browser launched with URL: ${url}`);
|
|
181
239
|
return true;
|
|
182
240
|
}
|
|
183
241
|
catch (error) {
|
|
184
|
-
console.error('Failed to launch
|
|
242
|
+
console.error('Failed to launch browser:', error.message);
|
|
185
243
|
return false;
|
|
186
244
|
}
|
|
187
245
|
}
|
|
188
246
|
/**
|
|
189
247
|
* Get CDP port
|
|
190
248
|
*/
|
|
191
|
-
export function getCDPPort() {
|
|
192
|
-
|
|
249
|
+
export async function getCDPPort(browser = 'com.oculus.browser') {
|
|
250
|
+
const cdpSocket = await detectCDPSocket(browser);
|
|
251
|
+
return getCDPPortForSocket(cdpSocket);
|
|
193
252
|
}
|
|
194
253
|
/**
|
|
195
254
|
* Set up only CDP forwarding (for external URLs that don't need reverse forwarding)
|
|
196
255
|
*/
|
|
197
|
-
export async function ensureCDPForwarding() {
|
|
256
|
+
export async function ensureCDPForwarding(browser = 'com.oculus.browser') {
|
|
198
257
|
try {
|
|
258
|
+
// Detect CDP socket and port for this browser
|
|
259
|
+
const cdpSocket = await detectCDPSocket(browser);
|
|
260
|
+
const cdpPort = getCDPPortForSocket(cdpSocket);
|
|
199
261
|
// Check forward forwarding (Host -> Quest for CDP)
|
|
200
262
|
const forwardList = await execCommand('adb', ['forward', '--list']);
|
|
201
|
-
const forwardExists = forwardList.includes(`tcp:${
|
|
263
|
+
const forwardExists = forwardList.includes(`tcp:${cdpPort}`) && forwardList.includes(cdpSocket);
|
|
202
264
|
if (forwardExists) {
|
|
203
|
-
console.log(`CDP port ${
|
|
265
|
+
console.log(`CDP port ${cdpPort} forwarding already set up`);
|
|
204
266
|
}
|
|
205
267
|
else {
|
|
206
268
|
// Check if something else is using the port
|
|
207
|
-
const cdpPortListening = await isPortListening(
|
|
269
|
+
const cdpPortListening = await isPortListening(cdpPort);
|
|
208
270
|
if (cdpPortListening) {
|
|
209
|
-
console.error(`Error: Port ${
|
|
271
|
+
console.error(`Error: Port ${cdpPort} is already in use by another process`);
|
|
210
272
|
console.error('');
|
|
211
|
-
console.error(
|
|
273
|
+
console.error(`CDP port forwarding requires port ${cdpPort} to be free.`);
|
|
212
274
|
console.error('Please stop the process using this port and try again.');
|
|
213
275
|
console.error('');
|
|
214
276
|
console.error('To find what is using the port:');
|
|
215
|
-
console.error(` lsof -i :${
|
|
277
|
+
console.error(` lsof -i :${cdpPort}`);
|
|
216
278
|
console.error('');
|
|
217
279
|
process.exit(1);
|
|
218
280
|
}
|
|
219
|
-
await execCommand('adb', ['forward', `tcp:${
|
|
220
|
-
console.log(`ADB forward port forwarding set up: Host:${
|
|
281
|
+
await execCommand('adb', ['forward', `tcp:${cdpPort}`, `localabstract:${cdpSocket}`]);
|
|
282
|
+
console.log(`ADB forward port forwarding set up: Host:${cdpPort} -> Quest:${cdpSocket} (CDP)`);
|
|
221
283
|
}
|
|
222
284
|
}
|
|
223
285
|
catch (error) {
|
|
@@ -258,4 +320,50 @@ export async function checkQuestAwake() {
|
|
|
258
320
|
process.exit(1);
|
|
259
321
|
}
|
|
260
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Get Quest battery status
|
|
325
|
+
* Returns percentage and charging state in one line
|
|
326
|
+
*/
|
|
327
|
+
export async function getBatteryStatus() {
|
|
328
|
+
const result = await execCommandFull('adb', ['shell', 'dumpsys', 'battery']);
|
|
329
|
+
if (result.code !== 0) {
|
|
330
|
+
throw new Error('Failed to get battery status');
|
|
331
|
+
}
|
|
332
|
+
// Parse battery info
|
|
333
|
+
let level = 0;
|
|
334
|
+
let acPowered = false;
|
|
335
|
+
let usbPowered = false;
|
|
336
|
+
let maxChargingCurrent = 0;
|
|
337
|
+
const lines = result.stdout.split('\n');
|
|
338
|
+
for (const line of lines) {
|
|
339
|
+
const trimmed = line.trim();
|
|
340
|
+
if (trimmed.startsWith('level: ')) {
|
|
341
|
+
level = parseInt(trimmed.substring(7), 10);
|
|
342
|
+
}
|
|
343
|
+
else if (trimmed.startsWith('AC powered: ')) {
|
|
344
|
+
acPowered = trimmed.substring(12) === 'true';
|
|
345
|
+
}
|
|
346
|
+
else if (trimmed.startsWith('USB powered: ')) {
|
|
347
|
+
usbPowered = trimmed.substring(13) === 'true';
|
|
348
|
+
}
|
|
349
|
+
else if (trimmed.startsWith('Max charging current: ')) {
|
|
350
|
+
maxChargingCurrent = parseInt(trimmed.substring(22), 10);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Determine charging state
|
|
354
|
+
let state;
|
|
355
|
+
if (acPowered || usbPowered) {
|
|
356
|
+
// Fast charging is typically > 2A (2000000 microamps)
|
|
357
|
+
if (maxChargingCurrent > 2000000) {
|
|
358
|
+
state = 'fast charging';
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
state = 'charging';
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
state = 'not charging';
|
|
366
|
+
}
|
|
367
|
+
return `${level}% ${state}`;
|
|
368
|
+
}
|
|
261
369
|
//# sourceMappingURL=adb.js.map
|
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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filename generation utilities for screenshots
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Generate UTC timestamp filename
|
|
6
|
+
* Format: screenshot-YYYY-MM-DD-HH-MM-SS-Z.jpg
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateScreenshotFilename(date?: Date): string;
|
|
9
|
+
//# sourceMappingURL=filename.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filename.d.ts","sourceRoot":"","sources":["../../src/utils/filename.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAS1E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filename generation utilities for screenshots
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Generate UTC timestamp filename
|
|
6
|
+
* Format: screenshot-YYYY-MM-DD-HH-MM-SS-Z.jpg
|
|
7
|
+
*/
|
|
8
|
+
export function generateScreenshotFilename(date = new Date()) {
|
|
9
|
+
const year = date.getUTCFullYear();
|
|
10
|
+
const month = String(date.getUTCMonth() + 1).padStart(2, '0');
|
|
11
|
+
const day = String(date.getUTCDate()).padStart(2, '0');
|
|
12
|
+
const hours = String(date.getUTCHours()).padStart(2, '0');
|
|
13
|
+
const minutes = String(date.getUTCMinutes()).padStart(2, '0');
|
|
14
|
+
const seconds = String(date.getUTCSeconds()).padStart(2, '0');
|
|
15
|
+
return `screenshot-${year}-${month}-${day}-${hours}-${minutes}-${seconds}-Z.jpg`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=filename.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filename.js","sourceRoot":"","sources":["../../src/utils/filename.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAa,IAAI,IAAI,EAAE;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE9D,OAAO,cAAc,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,QAAQ,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filename.test.d.ts","sourceRoot":"","sources":["../../src/utils/filename.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for filename generation utilities
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import { generateScreenshotFilename } from './filename.js';
|
|
6
|
+
describe('generateScreenshotFilename', () => {
|
|
7
|
+
it('formats UTC timestamp correctly', () => {
|
|
8
|
+
const date = new Date('2026-01-15T14:30:45Z');
|
|
9
|
+
expect(generateScreenshotFilename(date))
|
|
10
|
+
.toBe('screenshot-2026-01-15-14-30-45-Z.jpg');
|
|
11
|
+
});
|
|
12
|
+
it('pads single digits with zeros', () => {
|
|
13
|
+
const date = new Date('2026-01-05T08:09:03Z');
|
|
14
|
+
expect(generateScreenshotFilename(date))
|
|
15
|
+
.toBe('screenshot-2026-01-05-08-09-03-Z.jpg');
|
|
16
|
+
});
|
|
17
|
+
it('handles midnight correctly', () => {
|
|
18
|
+
const date = new Date('2026-12-31T00:00:00Z');
|
|
19
|
+
expect(generateScreenshotFilename(date))
|
|
20
|
+
.toBe('screenshot-2026-12-31-00-00-00-Z.jpg');
|
|
21
|
+
});
|
|
22
|
+
it('generates filename with current time when no date provided', () => {
|
|
23
|
+
const filename = generateScreenshotFilename();
|
|
24
|
+
// Verify format is correct
|
|
25
|
+
expect(filename).toMatch(/^screenshot-\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}-Z\.jpg$/);
|
|
26
|
+
// Extract timestamp from filename
|
|
27
|
+
const match = filename.match(/^screenshot-(\d{4})-(\d{2})-(\d{2})-(\d{2})-(\d{2})-(\d{2})-Z\.jpg$/);
|
|
28
|
+
expect(match).not.toBeNull();
|
|
29
|
+
if (match) {
|
|
30
|
+
const [, year, month, day, hours, minutes, seconds] = match;
|
|
31
|
+
const filenameDate = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day), parseInt(hours), parseInt(minutes), parseInt(seconds)));
|
|
32
|
+
// Verify the timestamp is reasonable (within last minute)
|
|
33
|
+
const now = new Date();
|
|
34
|
+
const diff = now.getTime() - filenameDate.getTime();
|
|
35
|
+
expect(diff).toBeGreaterThanOrEqual(0);
|
|
36
|
+
expect(diff).toBeLessThan(60000); // Within last 60 seconds
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=filename.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filename.test.js","sourceRoot":"","sources":["../../src/utils/filename.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;aACrC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;aACrC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;aACrC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;QAE9C,2BAA2B;QAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;QAEpF,kCAAkC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACpG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE7B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;YAC5D,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CACpC,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EACnB,QAAQ,CAAC,GAAG,CAAC,EACb,QAAQ,CAAC,KAAK,CAAC,EACf,QAAQ,CAAC,OAAO,CAAC,EACjB,QAAQ,CAAC,OAAO,CAAC,CAClB,CAAC,CAAC;YAEH,0DAA0D;YAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@myerscarpenter/quest-dev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "CLI for Meta Quest Browser development - screenshot and URL opening via ADB and cdp-cli",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"url": "https://github.com/myers/quest-dev"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
+
"exiftool-vendored": "^35.1.0",
|
|
40
41
|
"which": "^4.0.0",
|
|
41
42
|
"yargs": "^18.0.0"
|
|
42
43
|
},
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest battery command
|
|
3
|
+
* Shows battery percentage and charging status
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { checkADBPath, checkADBDevices, getBatteryStatus } from '../utils/adb.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Main battery command handler
|
|
10
|
+
*/
|
|
11
|
+
export async function batteryCommand(): Promise<void> {
|
|
12
|
+
// Check prerequisites (silent)
|
|
13
|
+
checkADBPath();
|
|
14
|
+
|
|
15
|
+
// Check devices without verbose output
|
|
16
|
+
try {
|
|
17
|
+
const { execCommand } = await import('../utils/exec.js');
|
|
18
|
+
const output = await execCommand('adb', ['devices']);
|
|
19
|
+
const lines = output.trim().split('\n').slice(1);
|
|
20
|
+
const devices = lines.filter(line => line.trim() && !line.includes('List of devices'));
|
|
21
|
+
|
|
22
|
+
if (devices.length === 0) {
|
|
23
|
+
console.error('Error: No ADB devices connected');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error('Error: Failed to list ADB devices');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Get and display battery status
|
|
32
|
+
const status = await getBatteryStatus();
|
|
33
|
+
console.log(status);
|
|
34
|
+
}
|