Skip to content

Commit 8cf5ae9

Browse files
Revert "Use default browser when opening devtools (#9975)" (#10399)
This reverts commit f5e9fca. Co-authored-by: Carmen Popoviciu <[email protected]>
1 parent 565c3a3 commit 8cf5ae9

File tree

5 files changed

+71
-92
lines changed

5 files changed

+71
-92
lines changed

.changeset/wise-pillows-brake.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/wrangler/src/api/startDevWorker/ProxyController.ts

Lines changed: 38 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { randomUUID } from "node:crypto";
33
import events from "node:events";
44
import path from "node:path";
55
import { LogLevel, Miniflare, Mutex, Response } from "miniflare";
6-
import dedent from "ts-dedent";
76
import inspectorProxyWorkerPath from "worker:startDevWorker/InspectorProxyWorker";
87
import proxyWorkerPath from "worker:startDevWorker/ProxyWorker";
98
import WebSocket from "ws";
@@ -104,7 +103,7 @@ export class ProxyController extends Controller<ProxyControllerEventMap> {
104103
// However, the proxy worker only makes outgoing requests to the user Worker Miniflare instance, which _should_ receive CF-Connecting-IP
105104
stripCfConnectingIp: false,
106105
serviceBindings: {
107-
PROXY_CONTROLLER: async (req: Request): Promise<Response> => {
106+
PROXY_CONTROLLER: async (req): Promise<Response> => {
108107
const message =
109108
(await req.json()) as ProxyWorkerOutgoingRequestBody;
110109

@@ -143,76 +142,43 @@ export class ProxyController extends Controller<ProxyControllerEventMap> {
143142
};
144143

145144
if (this.latestConfig.dev.inspector !== false && !inVscodeJsDebugTerminal) {
146-
proxyWorkerOptions.workers.push(
147-
{
148-
name: "InspectorProxyWorker",
149-
compatibilityDate: "2023-12-18",
150-
compatibilityFlags: [
151-
"nodejs_compat",
152-
"increase_websocket_message_size",
153-
],
154-
modulesRoot: path.dirname(inspectorProxyWorkerPath),
155-
modules: [{ type: "ESModule", path: inspectorProxyWorkerPath }],
156-
durableObjects: {
157-
DURABLE_OBJECT: {
158-
className: "InspectorProxyWorker",
159-
unsafePreventEviction: true,
160-
},
145+
proxyWorkerOptions.workers.push({
146+
name: "InspectorProxyWorker",
147+
compatibilityDate: "2023-12-18",
148+
compatibilityFlags: [
149+
"nodejs_compat",
150+
"increase_websocket_message_size",
151+
],
152+
modulesRoot: path.dirname(inspectorProxyWorkerPath),
153+
modules: [{ type: "ESModule", path: inspectorProxyWorkerPath }],
154+
durableObjects: {
155+
DURABLE_OBJECT: {
156+
className: "InspectorProxyWorker",
157+
unsafePreventEviction: true,
161158
},
162-
serviceBindings: {
163-
PROXY_CONTROLLER: async (req: Request): Promise<Response> => {
164-
const body =
165-
(await req.json()) as InspectorProxyWorkerOutgoingRequestBody;
159+
},
160+
serviceBindings: {
161+
PROXY_CONTROLLER: async (req): Promise<Response> => {
162+
const body =
163+
(await req.json()) as InspectorProxyWorkerOutgoingRequestBody;
166164

167-
return this.onInspectorProxyWorkerRequest(body);
168-
},
169-
},
170-
bindings: {
171-
PROXY_CONTROLLER_AUTH_SECRET: this.secret,
165+
return this.onInspectorProxyWorkerRequest(body);
172166
},
173-
174-
unsafeDirectSockets: [
175-
{
176-
host: this.latestConfig.dev?.inspector?.hostname,
177-
port: this.latestConfig.dev?.inspector?.port ?? 0,
178-
},
179-
],
180-
// no need to use file-system, so don't
181-
cache: false,
182-
unsafeEphemeralDurableObjects: true,
183167
},
184-
{
185-
name: "DevtoolsProxyWorker",
186-
compatibilityDate: "2025-01-01",
187-
modules: [
188-
{
189-
type: "ESModule",
190-
contents: dedent/* javascript */ `
191-
export default {
192-
fetch(request) {
193-
const url = new URL(request.url);
194-
url.host = "devtools.devprod.cloudflare.dev"
195-
url.protocol = "https"
196-
url.port = 443
197-
return fetch(url.toString(), request)
198-
}
199-
}
200-
`,
201-
path: "index.js",
202-
},
203-
],
204-
unsafeDirectSockets: [
205-
{
206-
host: this.latestConfig.dev?.inspector?.hostname,
207-
port: 0,
208-
},
209-
],
168+
bindings: {
169+
PROXY_CONTROLLER_AUTH_SECRET: this.secret,
170+
},
210171

211-
// no need to use file-system, so don't
212-
cache: false,
213-
unsafeEphemeralDurableObjects: true,
214-
}
215-
);
172+
unsafeDirectSockets: [
173+
{
174+
host: this.latestConfig.dev?.inspector?.hostname,
175+
port: this.latestConfig.dev?.inspector?.port ?? 0,
176+
},
177+
],
178+
// no need to use file-system, so don't
179+
cache: false,
180+
unsafeEphemeralDurableObjects: true,
181+
});
216182
}
217183

218184
const proxyWorkerOptionsChanged = didMiniflareOptionsChange(
@@ -246,13 +212,10 @@ export class ProxyController extends Controller<ProxyControllerEventMap> {
246212
this.latestConfig.dev.inspector === false || inVscodeJsDebugTerminal
247213
? Promise.resolve(undefined)
248214
: proxyWorker.unsafeGetDirectURL("InspectorProxyWorker"),
249-
this.latestConfig.dev.inspector === false || inVscodeJsDebugTerminal
250-
? Promise.resolve(undefined)
251-
: proxyWorker.unsafeGetDirectURL("DevtoolsProxyWorker"),
252215
])
253-
.then(([url, inspectorUrl, devtoolsUrl]) => {
216+
.then(([url, inspectorUrl]) => {
254217
if (!inspectorUrl || inVscodeJsDebugTerminal) {
255-
return [url, undefined, undefined];
218+
return [url, undefined];
256219
}
257220
// Don't connect the inspector proxy worker until we have a valid ready Miniflare instance.
258221
// Otherwise, tearing down the ProxyController immediately after setting it up
@@ -261,12 +224,11 @@ export class ProxyController extends Controller<ProxyControllerEventMap> {
261224
return this.reconnectInspectorProxyWorker().then(() => [
262225
url,
263226
inspectorUrl,
264-
devtoolsUrl,
265227
]);
266228
})
267-
.then(([url, inspectorUrl, devtoolsUrl]) => {
229+
.then(([url, inspectorUrl]) => {
268230
assert(url);
269-
this.emitReadyEvent(proxyWorker, url, inspectorUrl, devtoolsUrl);
231+
this.emitReadyEvent(proxyWorker, url, inspectorUrl);
270232
})
271233
.catch((error) => {
272234
if (this._torndown) {
@@ -613,15 +575,13 @@ export class ProxyController extends Controller<ProxyControllerEventMap> {
613575
emitReadyEvent(
614576
proxyWorker: Miniflare,
615577
url: URL,
616-
inspectorUrl: URL | undefined,
617-
devtoolsUrl: URL | undefined
578+
inspectorUrl: URL | undefined
618579
) {
619580
const data: ReadyEvent = {
620581
type: "ready",
621582
proxyWorker,
622583
url,
623584
inspectorUrl,
624-
devtoolsUrl,
625585
};
626586

627587
this.emit("ready", data);

packages/wrangler/src/api/startDevWorker/events.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ export type ReadyEvent = {
8787
type: "ready";
8888
proxyWorker: Miniflare;
8989
url: URL;
90-
devtoolsUrl: URL | undefined;
9190
inspectorUrl: URL | undefined;
9291
};
9392

packages/wrangler/src/dev/hotkeys.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,13 @@ export default function registerDevHotKeys(
2727
// Don't display this hotkey if we're in a VSCode debug session
2828
disabled: !!process.env.VSCODE_INSPECTOR_OPTIONS,
2929
handler: async () => {
30-
const { inspectorUrl, devtoolsUrl } =
31-
await primaryDevEnv.proxy.ready.promise;
30+
const { inspectorUrl } = await primaryDevEnv.proxy.ready.promise;
3231

33-
if (!inspectorUrl || !devtoolsUrl) {
32+
if (!inspectorUrl) {
3433
logger.warn("DevTools is not available while in a debug terminal");
3534
} else {
3635
// TODO: refactor this function to accept a whole URL (not just .port and assuming .hostname)
3736
await openInspector(
38-
devtoolsUrl,
3937
parseInt(inspectorUrl.port),
4038
primaryDevEnv.config.latestConfig?.name
4139
);

packages/wrangler/src/dev/inspect.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { readFileSync } from "fs";
2+
import os from "node:os";
23
import { fileURLToPath, URL } from "node:url";
34
import path from "path";
45
import open from "open";
@@ -248,7 +249,6 @@ export function maybeHandleNetworkLoadResource(
248249
* Opens the chrome debugger
249250
*/
250251
export const openInspector = async (
251-
devtoolsUrl: URL,
252252
inspectorPort: number,
253253
worker: string | undefined
254254
) => {
@@ -259,10 +259,37 @@ export const openInspector = async (
259259
query.set("domain", worker);
260260
}
261261
query.set("debugger", "true");
262-
const url = new URL(`/js_app?${query.toString()}`, devtoolsUrl);
263-
const errorMessage = "Failed to open inspector.";
262+
const url = `https://devtools.devprod.cloudflare.dev/js_app?${query.toString()}`;
263+
const errorMessage =
264+
"Failed to open inspector.\nInspector depends on having a Chromium-based browser installed, maybe you need to install one?";
264265

265-
const childProcess = await open(url.href);
266+
// see: https://github.com/sindresorhus/open/issues/177#issue-610016699
267+
let braveBrowser: string;
268+
switch (os.platform()) {
269+
case "darwin":
270+
case "win32":
271+
braveBrowser = "Brave";
272+
break;
273+
default:
274+
braveBrowser = "brave";
275+
}
276+
277+
const childProcess = await open(url, {
278+
app: [
279+
{
280+
name: open.apps.chrome,
281+
},
282+
{
283+
name: braveBrowser,
284+
},
285+
{
286+
name: open.apps.edge,
287+
},
288+
{
289+
name: open.apps.firefox,
290+
},
291+
],
292+
});
266293
childProcess.on("error", () => {
267294
logger.warn(errorMessage);
268295
});

0 commit comments

Comments
 (0)