diff --git a/packages/core/playground/vite.config.ts b/packages/core/playground/vite.config.ts index f8b97fa5..77e5a362 100644 --- a/packages/core/playground/vite.config.ts +++ b/packages/core/playground/vite.config.ts @@ -45,6 +45,7 @@ export default defineConfig({ // For local playground only. As a user you don't install this plugin directly. DevTools({ builtinDevTools: false, + authId: 'test-fixed-auth-id', }), DevToolsRolldownUI(), UnoCSS(), diff --git a/packages/core/src/node/plugins/index.ts b/packages/core/src/node/plugins/index.ts index 710a116b..7c67fd8c 100644 --- a/packages/core/src/node/plugins/index.ts +++ b/packages/core/src/node/plugins/index.ts @@ -9,16 +9,21 @@ export interface DevToolsOptions { * @default true */ builtinDevTools?: boolean + /** + * Use a fixed auth id for all clients connecting to the devtools. + */ + authId?: string } export async function DevTools(options: DevToolsOptions = {}): Promise { const { builtinDevTools = true, + authId, } = options const plugins = [ DevToolsInjection(), - DevToolsServer(), + DevToolsServer({ authId }), ] if (builtinDevTools) { diff --git a/packages/core/src/node/plugins/server.ts b/packages/core/src/node/plugins/server.ts index 54fdec98..2b2a87a9 100644 --- a/packages/core/src/node/plugins/server.ts +++ b/packages/core/src/node/plugins/server.ts @@ -34,7 +34,11 @@ export function renderDockImportsMap(docks: Iterable): string ].join('\n') } -export function DevToolsServer(): Plugin { +export interface DevToolsServerOptions { + authId?: string +} + +export function DevToolsServer(options: DevToolsServerOptions = {}): Plugin { let context: DevToolsNodeContext return { name: 'vite:devtools:server', @@ -51,6 +55,7 @@ export function DevToolsServer(): Plugin { cwd: viteDevServer.config.root, hostWebSocket: host, context, + authId: options.authId, }) viteDevServer.middlewares.use(DEVTOOLS_MOUNT_PATH, middleware) }, diff --git a/packages/core/src/node/ws.ts b/packages/core/src/node/ws.ts index 1a4c06d1..e3205164 100644 --- a/packages/core/src/node/ws.ts +++ b/packages/core/src/node/ws.ts @@ -20,6 +20,7 @@ export interface CreateWsServerOptions { hostWebSocket: string base?: string context: DevToolsNodeContext + authId?: string } const ANONYMOUS_SCOPE = 'vite:anonymous:' @@ -117,6 +118,7 @@ export async function createWsServer(options: CreateWsServerOptions) { return { backend: 'websocket', websocket: port, + ...(options.authId ? { authId: options.authId } : {}), } } diff --git a/packages/kit/src/client/rpc.ts b/packages/kit/src/client/rpc.ts index 302a8dbb..d82d570b 100644 --- a/packages/kit/src/client/rpc.ts +++ b/packages/kit/src/client/rpc.ts @@ -184,7 +184,7 @@ export async function getDevToolsRpcClient( const context: DevToolsClientContext = { rpc: undefined!, } - const authId = getConnectionAuthIdFromWindows(options.authId) + const authId = getConnectionAuthIdFromWindows(options.authId ?? connectionMeta.authId) const clientRpc: DevToolsClientRpcHost = new RpcFunctionsCollectorBase(context) async function fetchJsonFromBases(path: string): Promise { diff --git a/packages/kit/src/types/vite-plugin.ts b/packages/kit/src/types/vite-plugin.ts index 18ccf196..58dac795 100644 --- a/packages/kit/src/types/vite-plugin.ts +++ b/packages/kit/src/types/vite-plugin.ts @@ -86,4 +86,5 @@ export interface DevToolsNodeUtils { export interface ConnectionMeta { backend: 'websocket' | 'static' websocket?: number | string + authId?: string }