mirror of
https://github.com/anomalyco/opencode.git
synced 2026-11-06 16:07:28 +00:00
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import type { Page } from "@playwright/test"
|
|
|
|
export async function recordNotifications(page: Page) {
|
|
const notifications: { title: string; body?: string }[] = []
|
|
|
|
const sounds: string[] = []
|
|
|
|
await page.exposeBinding("recordNotification", (_source, notification: { title: string; body?: string }) => {
|
|
notifications.push(notification)
|
|
})
|
|
await page.exposeBinding("recordNotificationSound", (_source, src: string) => {
|
|
sounds.push(src)
|
|
})
|
|
await page.addInitScript(() => {
|
|
// SAFETY: exposeBinding above installs these callbacks before the app starts.
|
|
const host: Window & {
|
|
recordNotification?: (notification: { title: string; body?: string }) => Promise<void>
|
|
recordNotificationSound?: (src: string) => Promise<void>
|
|
} = window
|
|
|
|
document.hasFocus = () => false
|
|
Object.defineProperty(window, "Notification", {
|
|
value: class extends EventTarget {
|
|
static permission = "granted"
|
|
onclick: (() => void) | null = null
|
|
|
|
constructor(title: string, options?: NotificationOptions) {
|
|
super()
|
|
void host.recordNotification!({ title, body: options?.body })
|
|
}
|
|
|
|
close() {}
|
|
},
|
|
})
|
|
Object.defineProperty(window, "Audio", {
|
|
value: class {
|
|
currentTime = 0
|
|
|
|
constructor(readonly src: string) {}
|
|
|
|
play() {
|
|
return host.recordNotificationSound!(this.src)
|
|
}
|
|
|
|
pause() {}
|
|
},
|
|
})
|
|
})
|
|
|
|
return { notifications, sounds }
|
|
}
|