Skip to content

Commit d014ffd

Browse files
committed
refactor: Fix omnium background globals
1 parent ee93a06 commit d014ffd

1 file changed

Lines changed: 55 additions & 43 deletions

File tree

packages/omnium-gatherum/src/background.ts

Lines changed: 55 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2628
const OFFSCREEN_DOCUMENT_PATH = '/offscreen.html';
2729
const logger = new Logger('background');
30+
const globals = defineGlobals();
2831
let 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.
3334
chrome.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

Comments
 (0)