@@ -16,6 +16,7 @@ import type { PreferencesAccess } from 'compass-preferences-model';
1616import { getOsInfo } from '@mongodb-js/get-os-info' ;
1717import { createIpcTrack } from '@mongodb-js/compass-telemetry' ;
1818import type { Response } from '@mongodb-js/devtools-proxy-support' ;
19+ import { pathToFileURL } from 'url' ;
1920
2021const { log, mongoLogId, debug } = createLogger ( 'COMPASS-AUTO-UPDATES' ) ;
2122const track = createIpcTrack ( ) ;
@@ -60,12 +61,25 @@ function isMismatchedArchDarwin(): boolean {
6061 return process . platform === 'darwin' && getSystemArch ( ) !== process . arch ;
6162}
6263
64+ async function waitForWindow ( timeout = 5_000 ) {
65+ const start = Date . now ( ) ;
66+ while ( start + timeout > Date . now ( ) ) {
67+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
68+ const window = BrowserWindow . getAllWindows ( ) [ 0 ] ;
69+ if ( window ) {
70+ return window ;
71+ }
72+ }
73+ return null ;
74+ }
75+
6376async function download ( url : string ) : Promise < void > {
64- const maybeWindow = BrowserWindow . getAllWindows ( ) [ 0 ] ;
77+ const maybeWindow = await waitForWindow ( ) ;
6578 if ( maybeWindow ) {
6679 await dl . download ( maybeWindow , url , {
6780 onCompleted ( file ) {
68- void shell . openExternal ( file . path ) ;
81+ const fileURL = pathToFileURL ( file . path ) . toString ( ) ;
82+ void shell . openExternal ( fileURL ) ;
6983 } ,
7084 } ) ;
7185 } else {
0 commit comments