@@ -19,19 +19,20 @@ import {
1919 CapletController ,
2020 makeChromeStorageAdapter ,
2121} from './controllers/index.ts' ;
22- import type { CapletManifest , LaunchResult } from './controllers/index.ts' ;
23-
24- defineGlobals ( ) ;
22+ import type {
23+ CapletControllerFacet ,
24+ CapletManifest ,
25+ LaunchResult ,
26+ } from './controllers/index.ts' ;
2527
2628const OFFSCREEN_DOCUMENT_PATH = '/offscreen.html' ;
2729const logger = new Logger ( 'background' ) ;
30+ const globals = defineGlobals ( ) ;
2831let bootPromise : Promise < void > | null = null ;
29- let kernelP : Promise < KernelFacade > ;
30- let ping : ( ) => Promise < void > ;
3132
3233// With this we can click the extension action button to wake up the service worker.
3334chrome . action . onClicked . addListener ( ( ) => {
34- ping ?.( ) . catch ( logger . error ) ;
35+ omnium . ping ?.( ) . catch ( logger . error ) ;
3536} ) ;
3637
3738// Install/update
@@ -111,17 +112,13 @@ async function main(): Promise<void> {
111112 } ,
112113 } ) ;
113114
114- kernelP = backgroundCapTP . getKernel ( ) ;
115+ const kernelP = backgroundCapTP . getKernel ( ) ;
116+ globals . setKernelP ( kernelP ) ;
115117
116- ping = async ( ) : Promise < void > => {
118+ globals . setPing ( async ( ) : Promise < void > => {
117119 const result = await E ( kernelP ) . ping ( ) ;
118120 logger . info ( result ) ;
119- } ;
120-
121- // Helper to get the kernel remote presence (for use with E())
122- const getKernel = async ( ) : Promise < KernelFacade > => {
123- return kernelP ;
124- } ;
121+ } ) ;
125122
126123 // Create storage adapter
127124 const storageAdapter = makeChromeStorageAdapter ( ) ;
@@ -162,28 +159,7 @@ async function main(): Promise<void> {
162159 } ,
163160 } ,
164161 ) ;
165-
166- Object . defineProperties ( globalThis . omnium , {
167- ping : {
168- value : ping ,
169- } ,
170- getKernel : {
171- value : getKernel ,
172- } ,
173- caplet : {
174- value : harden ( {
175- install : async ( manifest : CapletManifest , bundle ?: unknown ) =>
176- E ( capletController ) . install ( manifest , bundle ) ,
177- uninstall : async ( capletId : string ) =>
178- E ( capletController ) . uninstall ( capletId ) ,
179- list : async ( ) => E ( capletController ) . list ( ) ,
180- get : async ( capletId : string ) => E ( capletController ) . get ( capletId ) ,
181- getByService : async ( serviceName : string ) =>
182- E ( capletController ) . getByService ( serviceName ) ,
183- } ) ,
184- } ,
185- } ) ;
186- harden ( globalThis . omnium ) ;
162+ globals . setCapletController ( capletController ) ;
187163
188164 try {
189165 await offscreenStream . drain ( ( message ) => {
@@ -203,31 +179,67 @@ async function main(): Promise<void> {
203179 }
204180}
205181
182+ type GlobalSetters = {
183+ setKernelP : ( value : Promise < KernelFacade > ) => void ;
184+ setPing : ( value : ( ) => Promise < void > ) => void ;
185+ setCapletController : ( value : CapletControllerFacet ) => void ;
186+ } ;
187+
206188/**
207189 * Define globals accessible via the background console.
190+ *
191+ * @returns A device for setting the global values.
208192 */
209- function defineGlobals ( ) : void {
193+ function defineGlobals ( ) : GlobalSetters {
194+ Object . defineProperty ( globalThis , 'E' , {
195+ configurable : false ,
196+ enumerable : true ,
197+ writable : false ,
198+ value : E ,
199+ } ) ;
200+
210201 Object . defineProperty ( globalThis , 'omnium' , {
211202 configurable : false ,
212203 enumerable : true ,
213204 writable : false ,
214205 value : { } ,
215206 } ) ;
216207
208+ let kernelP : Promise < KernelFacade > ;
209+ let ping : ( ( ) => Promise < void > ) | undefined ;
210+ let capletController : CapletControllerFacet ;
211+
217212 Object . defineProperties ( globalThis . omnium , {
218213 ping : {
219214 get : ( ) => ping ,
220215 } ,
221216 getKernel : {
222217 value : async ( ) => kernelP ,
223218 } ,
219+ caplet : {
220+ value : harden ( {
221+ install : async ( manifest : CapletManifest , bundle ?: unknown ) =>
222+ E ( capletController ) . install ( manifest , bundle ) ,
223+ uninstall : async ( capletId : string ) =>
224+ E ( capletController ) . uninstall ( capletId ) ,
225+ list : async ( ) => E ( capletController ) . list ( ) ,
226+ get : async ( capletId : string ) => E ( capletController ) . get ( capletId ) ,
227+ getByService : async ( serviceName : string ) =>
228+ E ( capletController ) . getByService ( serviceName ) ,
229+ } ) ,
230+ } ,
224231 } ) ;
225232 harden ( globalThis . omnium ) ;
226233
227- Object . defineProperty ( globalThis , 'E' , {
228- configurable : false ,
229- enumerable : true ,
230- writable : false ,
231- value : E ,
232- } ) ;
234+ return {
235+ setKernelP : ( value ) => {
236+ kernelP = value ;
237+ } ,
238+ setPing : ( value ) => {
239+ ping = value ;
240+ } ,
241+ setCapletController : ( value ) => {
242+ capletController = value ;
243+ } ,
244+ } ;
233245}
0 commit comments