better error messages

This commit is contained in:
2026-09-27 19:47:36 -04:00
parent f0f2e30e08
commit 02ca1888f2

View File

@@ -1,47 +1,32 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Notaquest</title> <title>Notaquest</title>
<script src="https://cdn.jsdelivr.net/npm/tweetnacl@1.0.3/nacl-fast.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/tweetnacl@1.0.3/nacl-fast.min.js"></script>
<link <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" />
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
/>
<meta <meta name="description"
name="description" content="Enable ADB on your Meta Quest without creating a developer organization or verifying with a credit card. One-click tool using Web Bluetooth." />
content="Enable ADB on your Meta Quest without creating a developer organization or verifying with a credit card. One-click tool using Web Bluetooth." <meta name="keywords"
/> content="meta quest, quest 3, adb, developer mode, sideload, sidequest, no organization, web bluetooth" />
<meta
name="keywords"
content="meta quest, quest 3, adb, developer mode, sideload, sidequest, no organization, web bluetooth"
/>
<!-- Open Graph (social sharing) --> <!-- Open Graph (social sharing) -->
<meta <meta property="og:title" content="Notaquest - Enable ADB on Meta Quest without a developer org" />
property="og:title" <meta property="og:description"
content="Notaquest - Enable ADB on Meta Quest without a developer org" content="Skip the organization, skip the credit card. Enable ADB on your Quest from a web page." />
/>
<meta
property="og:description"
content="Skip the organization, skip the credit card. Enable ADB on your Quest from a web page."
/>
<meta property="og:url" content="https://notaquest.owendeed.com" /> <meta property="og:url" content="https://notaquest.owendeed.com" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<!-- Twitter/X --> <!-- Twitter/X -->
<meta name="twitter:card" content="summary" /> <meta name="twitter:card" content="summary" />
<meta <meta name="twitter:title" content="Notaquest - Enable ADB on Meta Quest without a developer org" />
name="twitter:title" <meta name="twitter:description"
content="Notaquest - Enable ADB on Meta Quest without a developer org" content="Skip the organization, skip the credit card. Enable ADB on your Quest from a web page." />
/>
<meta
name="twitter:description"
content="Skip the organization, skip the credit card. Enable ADB on your Quest from a web page."
/>
</head> </head>
<body> <body>
<main class="container"> <main class="container">
<h1>Notaquest</h1> <h1>Notaquest</h1>
@@ -79,7 +64,7 @@
</p> </p>
<p> <p>
currently only tested on meta quest 3 but should work on other devices. currently only tested on meta quest 3 but should work on other devices.
make a gitea issue (link at the bottom) if it doesn't work for any make a github issue (link at the bottom) if it doesn't work for any
reason. reason.
</p> </p>
<details> <details>
@@ -88,9 +73,7 @@
meta's api blocks requests from websites (CORS). the proxy forwards meta's api blocks requests from websites (CORS). the proxy forwards
your request to graph.oculus.com and nothing else. nothing is stored your request to graph.oculus.com and nothing else. nothing is stored
or logged. you can or logged. you can
<a href="https://api.notaquest.owendeed.com" target="_blank" <a href="https://api.notaquest.owendeed.com" target="_blank">view the live worker source code</a>
>view the live worker source code</a
>
or check the network tab yourself. the code is a literal quine or check the network tab yourself. the code is a literal quine
program, if i change it, it will change. program, if i change it, it will change.
</p> </p>
@@ -152,14 +135,10 @@
</details> </details>
<br /> <br />
<a href="https://www.tampermonkey.net/">tampermonkey website</a><br /> <a href="https://www.tampermonkey.net/">tampermonkey website</a><br />
<a <a href="https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo">chrome (+chromium
href="https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo" based browsers) extension</a>
>chrome (+chromium based browsers) extension</a
>
<br /> <br />
<a href="https://addons.mozilla.org/firefox/addon/tampermonkey/" <a href="https://addons.mozilla.org/firefox/addon/tampermonkey/">firefox (+firefox based browsers) extension</a>
>firefox (+firefox based browsers) extension</a
>
</details> </details>
<details> <details>
<summary>automated method (tampermonkey required)</summary> <summary>automated method (tampermonkey required)</summary>
@@ -183,11 +162,9 @@
</p> </p>
</li> </li>
<li> <li>
<button <button onclick="
onclick="
window.location.href = 'https://secure.oculus.com/#notaquest' window.location.href = 'https://secure.oculus.com/#notaquest'
" ">
>
get token automatically (tampermonkey script must be installed) get token automatically (tampermonkey script must be installed)
</button> </button>
</li> </li>
@@ -201,11 +178,7 @@
<ol> <ol>
<li> <li>
Log into Log into
<a <a href="https://developers.meta.com/horizon/manage/" target="_blank">developers.meta.com/horizon/manage/</a>
href="https://developers.meta.com/horizon/manage/"
target="_blank"
>developers.meta.com/horizon/manage/</a
>
</li> </li>
<li>Press F12 to open developer tools</li> <li>Press F12 to open developer tools</li>
<li>Application -> Cookies -> click the site</li> <li>Application -> Cookies -> click the site</li>
@@ -213,11 +186,7 @@
<li>Paste it below</li> <li>Paste it below</li>
</ol> </ol>
</details> </details>
<input <input id="token" placeholder="paste your Meta token here" style="width: 100%; max-width: 500px" />
id="token"
placeholder="paste your Meta token here"
style="width: 100%; max-width: 500px"
/>
<br /><br /> <br /><br />
<button onclick="showQR()"> <button onclick="showQR()">
generate prefilled token qr code for mobile generate prefilled token qr code for mobile
@@ -229,12 +198,8 @@
<button id="go" onclick="enableADB()">enable adb</button> <button id="go" onclick="enableADB()">enable adb</button>
<p id="nobt" style="display: none"></p> <p id="nobt" style="display: none"></p>
<p id="status"></p> <p id="status"></p>
<a href="https://github.com/owenthepuppy/notaquest/issues" <a href="https://github.com/owenthepuppy/notaquest/issues">report an issue here</a><br />
>report an issue here</a <a href="https://gitea.owendeed.com/Toasterkitten/notaquest">view the source here</a><br />
><br />
<a href="https://gitea.owendeed.com/Toasterkitten/notaquest"
>view the source here</a
><br />
<a href="https://owenfeldman.com">a project by owenfeldman.com</a> <a href="https://owenfeldman.com">a project by owenfeldman.com</a>
</main> </main>
<script src="https://cdn.jsdelivr.net/npm/qrcode-generator@1.4.4/qrcode.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/qrcode-generator@1.4.4/qrcode.min.js"></script>
@@ -509,15 +474,29 @@
encrypt(devReq, sharedKey), encrypt(devReq, sharedKey),
); );
if (devRespRaw.length) { if (devRespRaw.length) {
var devResp = parseProto(decrypt(devRespRaw, sharedKey)); var decrypted = decrypt(devRespRaw, sharedKey);
if (decrypted) {
var devResp = parseProto(decrypted);
if (devResp[2] === 0) { if (devResp[2] === 0) {
status( status("done! adb should be enabled. restarting your headset may be required for it to work.");
"done! adb should be enabled. restarting your headset may be required for it to work.",
);
return; return;
} }
if (devResp[3]) {
var errMsg = new TextDecoder().decode(devResp[3]);
if (errMsg.toLowerCase().includes("internet")) {
status("your quest isn't connected to wifi. connect it to wifi and try again.");
return;
}
status("quest rejected the command in a way i don't understand. do basic debugging, reboot, new token, all the normal stuff. if not working still, send a github issue with this data (it shouldn't have private info): " + errMsg);
return;
}
status("quest responded but said something i don't understand. this is not an issue i have encountered yet. do basic debugging, reboot, new token, all the normal stuff. if not working still, send a github issue with this data (it shouldn't have private info): response fields: " + JSON.stringify(Object.fromEntries(Object.entries(devResp).map(([k, v]) => [k, v instanceof Uint8Array ? Array.from(v).map(b => b.toString(16)).join('') : v]))));
} else {
status("quest responded but decryption failed. something went very wrong, try a new token, if that doesn't work, make a github issue. raw length: " + devRespRaw.length);
}
} else {
status("no response from quest for dev mode command. BLE connection may have dropped, or the Quest refused something silently.");
} }
status("sent! check if adb is enabled.");
} catch (e) { } catch (e) {
status( status(
"error: " + "error: " +
@@ -528,4 +507,5 @@
} }
</script> </script>
</body> </body>
</html> </html>