@@ -2,11 +2,29 @@ import { contextBridge, ipcRenderer } from 'electron';
2
2
3
3
import type { ContextMenuDefinition } from './context-menu' ;
4
4
5
+ // These are technically asynchronous, but they're so fast that
6
+ // they're effectively sychronously available - this seems to
7
+ // run before inline scripts in the page itself, let alone the
8
+ // main app code. Nonetheless, to be safe the UI can wait for
9
+ // the preload promise here to confirm it's definitely ready.
10
+ let desktopVersion : string | undefined ;
11
+ let authToken : string | undefined ;
12
+
13
+ const preloadPromise = Promise . all ( [
14
+ ipcRenderer . invoke ( 'get-desktop-version' ) . then ( result => {
15
+ desktopVersion = result ;
16
+ } ) ,
17
+ ipcRenderer . invoke ( 'get-server-auth-token' ) . then ( result => {
18
+ authToken = result ;
19
+ } )
20
+ ] ) ;
21
+
5
22
contextBridge . exposeInMainWorld ( 'desktopApi' , {
6
- desktopVersion : ( ) =>
7
- ipcRenderer . invoke ( 'get-desktop-version' ) ,
8
- serverAuthToken : ( ) =>
9
- ipcRenderer . invoke ( 'get-server-auth-token' ) ,
23
+ waitUntilDesktopApiReady : ( ) => preloadPromise . then ( ( ) => { } ) ,
24
+
25
+ getDesktopVersion : ( ) => desktopVersion ,
26
+ getServerAuthToken : ( ) => authToken ,
27
+
10
28
selectApplication : ( ) =>
11
29
ipcRenderer . invoke ( 'select-application' ) ,
12
30
openContextMenu : ( options : ContextMenuDefinition ) =>
0 commit comments