Permissions.
Queries navigator.permissions for camera, mic, geolocation, clipboard, sensors, and notifications. Shows current state without triggering prompts.
Read-only — running this never grants or revokes anything. Safari has limited Permissions API support; many APIs read as 'not-supported' there even when the feature works.
We call navigator.permissions.query({ name: ... }) for each API in turn. The browser returns a PermissionStatus with a state field. APIs not recognised by the browser throw, which we catch and label 'not-supported'.
This API was originally Chromium-only; Firefox added it in 2017, Safari in 2022 (partial). On Safari you'll see many APIs read 'not-supported' even when the underlying feature works — that's an API gap, not a permission denial.