diff --git a/desktop/flipper-server-client/src/FlipperServerClient.tsx b/desktop/flipper-server-client/src/FlipperServerClient.tsx index 334cf7645..698245198 100644 --- a/desktop/flipper-server-client/src/FlipperServerClient.tsx +++ b/desktop/flipper-server-client/src/FlipperServerClient.tsx @@ -30,10 +30,15 @@ export type {FlipperServer, FlipperServerCommands, FlipperServerExecOptions}; export function createFlipperServer( host: string, port: number, - args: URLSearchParams, + tokenProvider: () => Promise, onStateChange: (state: FlipperServerState) => void, ): Promise { - const socket = new ReconnectingWebSocket(`ws://${host}:${port}?${args}`); + const URLProvider = async () => { + const token = await tokenProvider(); + return `ws://${host}:${port}?token=${token}`; + }; + + const socket = new ReconnectingWebSocket(URLProvider); return createFlipperServerWithSocket(socket as WebSocket, onStateChange); } @@ -49,7 +54,7 @@ export function createFlipperServerWithSocket( reject( new Error( `Failed to connect to the server in a timely manner. - It may be unresponsive. Run the following from the terminal + It may be unresponsive. Run the following from the terminal 'sudo kill -9 $(lsof -t -i :52342)' as to kill any existing running instance, if any.`, ), ); diff --git a/desktop/flipper-ui-browser/src/index.tsx b/desktop/flipper-ui-browser/src/index.tsx index 1bfc61297..ec80cf002 100644 --- a/desktop/flipper-ui-browser/src/index.tsx +++ b/desktop/flipper-ui-browser/src/index.tsx @@ -34,20 +34,26 @@ async function start() { setLoggerInstance(logger); const params = new URL(location.href).searchParams; - let token = params.get('token'); - if (!token) { - console.info( - '[flipper-client][ui-browser] Get token from manifest instead', - ); - const manifestResponse = await fetch('manifest.json'); - const manifest = await manifestResponse.json(); - token = manifest.token; - } - console.info( - '[flipper-client][ui-browser] Token is available: ', - token?.length != 0, - ); + const tokenProvider = async () => { + const providerParams = new URL(location.href).searchParams; + let token = providerParams.get('token'); + if (!token) { + console.info( + '[flipper-client][ui-browser] Get token from manifest instead', + ); + const manifestResponse = await fetch('manifest.json'); + const manifest = await manifestResponse.json(); + token = manifest.token; + } + + console.info( + '[flipper-client][ui-browser] Token is available: ', + token?.length != 0, + ); + + return token; + }; const openPlugin = params.get('open-plugin'); if (openPlugin) { @@ -66,13 +72,11 @@ async function start() { cachedDeepLinkURL = deeplinkURL.toString(); } - const searchParams = new URLSearchParams({token: token ?? ''}); - console.info('[flipper-client][ui-browser] Create WS client'); const flipperServer = await createFlipperServer( location.hostname, parseInt(location.port, 10), - searchParams, + tokenProvider, (state: FlipperServerState) => { switch (state) { case FlipperServerState.CONNECTING: @@ -213,7 +217,7 @@ async function initializePWA() { // getLogger() is not yet created when the electron app starts. // we can't create it here yet, as the real logger is wired up to // the redux store and the rest of the world. So we create a delegating logger -// that uses a simple implementation until the real one comes available +// that uses a simple implementation until the real one comes available. function createDelegatedLogger(): Logger { const naiveLogger: Logger = { track(...args: [any, any, any?, any?]) {