diff --git a/packages/page-agent/src/PageAgent.ts b/packages/page-agent/src/PageAgent.ts index 75bfb9d..8aaf19a 100644 --- a/packages/page-agent/src/PageAgent.ts +++ b/packages/page-agent/src/PageAgent.ts @@ -198,7 +198,7 @@ export class PageAgent extends EventTarget { await onBeforeTask.call(this) // Show mask - this.pageController.showMask() + await this.pageController.showMask() if (this.#abortController) { this.#abortController.abort() @@ -556,7 +556,7 @@ export class PageAgent extends EventTarget { #onDone(text: string, success = true) { this.pageController.cleanUpHighlights() - this.pageController.hideMask() + this.pageController.hideMask() // No await - fire and forget this.#setStatus(success ? 'completed' : 'error') this.#abortController.abort() } diff --git a/packages/page-controller/src/PageController.ts b/packages/page-controller/src/PageController.ts index ef0984e..1e1f2d8 100644 --- a/packages/page-controller/src/PageController.ts +++ b/packages/page-controller/src/PageController.ts @@ -82,6 +82,7 @@ export class PageController extends EventTarget { /** Visual mask overlay for blocking user interaction during automation */ private mask: InstanceType | null = null + private maskReady: Promise | null = null constructor(config: PageControllerConfig = {}) { super() @@ -91,9 +92,10 @@ export class PageController extends EventTarget { patchReact(this) if (config.enableMask) { - this.initMask() + this.maskReady = this.initMask() } } + /** * Initialize mask asynchronously (dynamic import to avoid CSS loading in Node) */ @@ -369,7 +371,8 @@ export class PageController extends EventTarget { * Show the visual mask overlay. * Only works if enableMask was set to true in config. */ - showMask(): void { + async showMask(): Promise { + await this.maskReady this.mask?.show() } @@ -377,7 +380,8 @@ export class PageController extends EventTarget { * Hide the visual mask overlay. * Only works if enableMask was set to true in config. */ - hideMask(): void { + async hideMask(): Promise { + await this.maskReady this.mask?.hide() }