puppeteer/puppeteer · warning · UnsupportedOperation
allowWithoutSanitization is not supported by WebDriver BiDi
Error message
allowWithoutSanitization is not supported by WebDriver BiDi
What it means
PermissionDescriptor.allowWithoutSanitization (used by the clipboard-sanitized-write permission) has no representation in WebDriver BiDi's permission model, so setPermission() throws UnsupportedOperation up front rather than silently dropping the flag.
Source
Thrown at packages/puppeteer-core/src/bidi/BrowserContext.ts:324
);
}
override async setPermission(
origin: string | '*',
...permissions: Array<{
permission: PermissionDescriptor;
state: PermissionState;
}>
): Promise<void> {
if (origin === '*') {
throw new UnsupportedOperation(
'Origin (*) is not supported by WebDriver BiDi',
);
}
await Promise.all(
permissions.map(permission => {
if (permission.permission.allowWithoutSanitization) {
throw new UnsupportedOperation(
'allowWithoutSanitization is not supported by WebDriver BiDi',
);
}
if (permission.permission.panTiltZoom) {
throw new UnsupportedOperation(
'panTiltZoom is not supported by WebDriver BiDi',
);
}
if (permission.permission.userVisibleOnly) {
throw new UnsupportedOperation(
'userVisibleOnly is not supported by WebDriver BiDi',
);
}
return this.userContext.setPermissions(
origin,
{
name: permission.permission.name,
},View on GitHub (pinned to d484e21c17)
Solutions
- Drop allowWithoutSanitization from the descriptor (use plain 'clipboard-write' / 'clipboard-read' instead).
- If the sanitized-write behaviour is required, use a CDP-backed browser instead of pure BiDi.
Example fix
// before
await context.setPermission(origin, { permission: { name: 'clipboard-write', allowWithoutSanitization: true }, state: 'granted' });
// after
await context.setPermission(origin, { permission: { name: 'clipboard-write' }, state: 'granted' }); Defensive patterns
Strategy: validation
Validate before calling
for (const p of permissions) { if (p.permission.allowWithoutSanitization) throw new Error('allowWithoutSanitization unsupported under BiDi'); } Type guard
const isBiDiSafeDescriptor = (d: PermissionDescriptor) => !d.allowWithoutSanitization && !d.panTiltZoom && !d.userVisibleOnly;
Prevention
- Strip allowWithoutSanitization/panTiltZoom/userVisibleOnly before calling setPermission under BiDi.
When it happens
Trigger: Calling setPermission() with a descriptor whose allowWithoutSanitization is true (clipboard-sanitized-write use case).
Common situations: Migrating clipboard-write code that relied on the sanitized-write capability from CDP to BiDi; copying PermissionDescriptor shapes from the web platform.
Related errors
- Origin (*) is not supported by WebDriver BiDi
- panTiltZoom is not supported by WebDriver BiDi
- userVisibleOnly is not supported by WebDriver BiDi
- Firefox is not supported in BiDi over CDP mode.
- Unknown permission: ${permission}
AI-assisted analysis of puppeteer/puppeteer@d484e21c17 (2026-08-12).
Data as JSON: /api/errors/57732540e7fd2cc4.
Report an issue: GitHub.