@ankhorage/permissions
v0.2.0
Published
Cross-platform permission registry and runtime helpers for TypeScript apps, with unified request/check APIs for camera, media, location, notifications, microphone, etc. and web/native capabilities.
Maintainers
Readme
PERMISSIONS
Cross-platform permission registry and runtime helpers for TypeScript apps, with unified request/check APIs for camera, media, location, notifications, microphone, etc. and web/native capabilities.
Usage
Basic permissions runtime example.
Create a permission client, provide it at the app root, and use
usePermission to read, refresh, and request a normalized permission state.
Source: examples/basic/App.tsx
import {
createFakePermissionClient,
Permission,
PermissionsProvider,
usePermission,
} from '@ankhorage/permissions';
const permissionClient = createFakePermissionClient({
initialStates: [{ permission: Permission.Camera, status: 'denied' }],
requestStates: [{ permission: Permission.Camera, status: 'granted' }],
});
export default function BasicPermissionsExample() {
return (
<PermissionsProvider client={permissionClient}>
<CameraPermissionExample />
</PermissionsProvider>
);
}
function CameraPermissionExample() {
const camera = usePermission(Permission.Camera, { refreshOnMount: true });
return (
<>
<p>Camera permission: {camera.status}</p>
<button
type="button"
disabled={camera.granted}
onClick={() => {
void camera.request();
}}
>
Request camera permission
</button>
</>
);
}Expo permissions runtime example.
Create the Expo permission client from the optional Expo entrypoint, provide
it at the app root, and call request() only from an explicit user action.
Source: examples/expo/App.tsx
import { Permission, PermissionsProvider, usePermission } from '@ankhorage/permissions';
import { createPermissionClient } from '@ankhorage/permissions/expo';
const permissionClient = createPermissionClient();
export default function ExpoPermissionsExample() {
return (
<PermissionsProvider client={permissionClient}>
<CameraPermissionExample />
</PermissionsProvider>
);
}
function CameraPermissionExample() {
const camera = usePermission(Permission.Camera, { refreshOnMount: true });
return (
<>
<p>Camera permission: {camera.status}</p>
<button
type="button"
disabled={camera.granted}
onClick={() => {
void camera.request();
}}
>
Request camera permission
</button>
</>
);
}Generated documentation
- Interactive documentation app
- Public API reference
- Component registry
- Architecture overview
- Module relationships
- Export graph
- assertKnownPermission sequence
- createFakePermissionClient sequence
- createWebPermissionClient sequence
- getPermissionDefinition sequence
- normalizePermissionState sequence
- PermissionsProvider sequence
- usePermission sequence
- usePermissions sequence
Public API
Utilities
createFakePermissionClient(options?: FakePermissionClientOptions) => FakePermissionClientCreates a deterministic in-memory client for tests and examples.
Fake clients make permission flows testable without native devices, browser prompts, simulators, or network access.
Module: src/testing/index.ts
Source: src/testing/index.ts:55:1
Related symbols: FakePermissionClient, FakePermissionClientOptions
createPermissionManager(client: PermissionClient) => PermissionManagerCreates a permission manager from a runtime-specific client.
The manager validates permission names and normalizes client results. Native app configuration remains a separate build-time concern.
Module: src/manager/createPermissionManager.ts
Source: src/manager/createPermissionManager.ts:21:1
Related symbols: PermissionClient, PermissionManager
createWebPermissionClient(options?: WebPermissionClientOptions) => PermissionClientCreates a browser permission client using guarded structural globals.
Unsupported web APIs resolve to status: 'unavailable'. The adapter does not
import DOM types and does not assume it is running in a browser.
Module: src/web/index.ts
Source: src/web/index.ts:78:1
Related symbols: PermissionClient, WebPermissionClientOptions
Common runtime permissions supported by the registry.
The registry is intentionally platform-neutral. Adapters translate each permission into whatever a browser, React Native app, Expo app, or test environment can actually check or request.
Module: src/registry/permissions.ts
Source: src/registry/permissions.ts:9:1
PermissionsProvider({
children,
client,
manager,
}: PermissionsProviderProps) => ReactNodeProvides a permission manager to React hooks.
React helpers are framework-neutral. They depend on React only and do not import browser, Expo, or React Native permission APIs.
Related types: PermissionsProviderProps
| Prop | Type | Required | Default | Description |
| -------- | -------------------------------- | -------- | ------- | ----------- |
| children | ReactNode \| undefined | no | — | |
| client | PermissionClient \| undefined | no | — | |
| manager | PermissionManager \| undefined | no | — | |
