@ankhorage/permissions 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +143 -0
  4. package/dist/client/types.d.ts +19 -0
  5. package/dist/client/types.d.ts.map +1 -0
  6. package/dist/client/types.js +2 -0
  7. package/dist/client/types.js.map +1 -0
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +6 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/manager/createPermissionManager.d.ts +31 -0
  13. package/dist/manager/createPermissionManager.d.ts.map +1 -0
  14. package/dist/manager/createPermissionManager.js +39 -0
  15. package/dist/manager/createPermissionManager.js.map +1 -0
  16. package/dist/metadata/index.d.ts +8 -0
  17. package/dist/metadata/index.d.ts.map +1 -0
  18. package/dist/metadata/index.js +8 -0
  19. package/dist/metadata/index.js.map +1 -0
  20. package/dist/react/index.d.ts +66 -0
  21. package/dist/react/index.d.ts.map +1 -0
  22. package/dist/react/index.js +91 -0
  23. package/dist/react/index.js.map +1 -0
  24. package/dist/registry/permissions.d.ts +52 -0
  25. package/dist/registry/permissions.d.ts.map +1 -0
  26. package/dist/registry/permissions.js +108 -0
  27. package/dist/registry/permissions.js.map +1 -0
  28. package/dist/state/permissionState.d.ts +43 -0
  29. package/dist/state/permissionState.d.ts.map +1 -0
  30. package/dist/state/permissionState.js +44 -0
  31. package/dist/state/permissionState.js.map +1 -0
  32. package/dist/testing/index.d.ts +49 -0
  33. package/dist/testing/index.d.ts.map +1 -0
  34. package/dist/testing/index.js +95 -0
  35. package/dist/testing/index.js.map +1 -0
  36. package/dist/web/index.d.ts +60 -0
  37. package/dist/web/index.d.ts.map +1 -0
  38. package/dist/web/index.js +234 -0
  39. package/dist/web/index.js.map +1 -0
  40. package/package.json +114 -0
  41. package/src/client/types.ts +19 -0
  42. package/src/index.ts +31 -0
  43. package/src/manager/createPermissionManager.test.ts +67 -0
  44. package/src/manager/createPermissionManager.ts +54 -0
  45. package/src/metadata/index.ts +7 -0
  46. package/src/react/index.test.ts +11 -0
  47. package/src/react/index.tsx +170 -0
  48. package/src/registry/permissions.test.ts +37 -0
  49. package/src/registry/permissions.ts +128 -0
  50. package/src/state/permissionState.test.ts +54 -0
  51. package/src/state/permissionState.ts +86 -0
  52. package/src/testing/index.test.ts +57 -0
  53. package/src/testing/index.ts +168 -0
  54. package/src/web/index.test.ts +205 -0
  55. package/src/web/index.ts +390 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @ankhorage/permissions
2
+
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 90d6509: Implement the initial standalone cross-platform permission runtime.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ankhorage
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,143 @@
1
+ <!-- markdownlint-disable MD013 MD033 -->
2
+ <!-- This file is generated by Paradox. Do not edit manually. -->
3
+
4
+ # PERMISSIONS
5
+
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v0.0.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
+
8
+ 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.
9
+
10
+ ## Generated documentation
11
+
12
+ - [Interactive documentation app](././paradox/index.html)
13
+ - [Public API reference](././paradox/exports.md)
14
+ - [Component registry](././paradox/components.md)
15
+ - [Architecture overview](././paradox/diagrams/architecture-overview.mmd)
16
+ - [Module relationships](././paradox/diagrams/module-relationships.mmd)
17
+ - [Export graph](././paradox/diagrams/export-graph.mmd)
18
+ - [assertKnownPermission sequence](././paradox/diagrams/sequences/assert-known-permission.mmd)
19
+ - [createFakePermissionClient sequence](././paradox/diagrams/sequences/create-fake-permission-client.mmd)
20
+ - [createWebPermissionClient sequence](././paradox/diagrams/sequences/create-web-permission-client.mmd)
21
+ - [getPermissionDefinition sequence](././paradox/diagrams/sequences/get-permission-definition.mmd)
22
+ - [normalizePermissionState sequence](././paradox/diagrams/sequences/normalize-permission-state.mmd)
23
+ - [PermissionsProvider sequence](././paradox/diagrams/sequences/permissions-provider.mmd)
24
+ - [usePermission sequence](././paradox/diagrams/sequences/use-permission.mmd)
25
+ - [usePermissions sequence](././paradox/diagrams/sequences/use-permissions.mmd)
26
+
27
+ ## Public API
28
+
29
+ ### Utilities
30
+
31
+ <details>
32
+ <summary>createFakePermissionClient</summary>
33
+
34
+ ```ts
35
+ createFakePermissionClient(options?: FakePermissionClientOptions) => FakePermissionClient
36
+ ```
37
+
38
+ Creates a deterministic in-memory client for tests and examples.
39
+
40
+ Fake clients make permission flows testable without native devices, browser
41
+ prompts, simulators, or network access.
42
+
43
+ ```ts
44
+ const client = createFakePermissionClient({
45
+ initialStates: [{ permission: Permission.Camera, status: 'denied' }],
46
+ });
47
+ await client.request(Permission.Camera);
48
+ ```
49
+
50
+ Module: `src/testing/index.ts`
51
+ Source: `src/testing/index.ts:63:1`
52
+ Related symbols: `FakePermissionClient`, `FakePermissionClientOptions`
53
+
54
+ </details>
55
+
56
+ <details>
57
+ <summary>createPermissionManager</summary>
58
+
59
+ ```ts
60
+ createPermissionManager(client: PermissionClient) => PermissionManager
61
+ ```
62
+
63
+ Wraps a client with registry validation and normalized results.
64
+
65
+ Runtime permissions and build-time native configuration are separate concerns.
66
+ This manager checks or requests permissions through a client, but it does not
67
+ generate iOS usage descriptions, Android manifest entries, or Expo config
68
+ plugins.
69
+
70
+ ```ts
71
+ const permissions = createPermissionManager(client);
72
+ const camera = await permissions.getStatus(Permission.Camera);
73
+ const requested = camera.granted ? camera : await permissions.request(Permission.Camera);
74
+ ```
75
+
76
+ Module: `src/manager/createPermissionManager.ts`
77
+ Source: `src/manager/createPermissionManager.ts:32:1`
78
+ Related symbols: `PermissionClient`, `PermissionManager`
79
+
80
+ </details>
81
+
82
+ <details>
83
+ <summary>createWebPermissionClient</summary>
84
+
85
+ ```ts
86
+ createWebPermissionClient(options?: WebPermissionClientOptions) => PermissionClient
87
+ ```
88
+
89
+ Creates a browser permission client using guarded structural globals.
90
+
91
+ Unsupported web APIs resolve to `status: 'unavailable'`. The adapter does not
92
+ import DOM types and does not assume it is running in a browser.
93
+
94
+ Module: `src/web/index.ts`
95
+ Source: `src/web/index.ts:78:1`
96
+ Related symbols: `PermissionClient`, `WebPermissionClientOptions`
97
+
98
+ </details>
99
+
100
+ <details>
101
+ <summary>Permission</summary>
102
+
103
+ Common runtime permissions supported by the registry.
104
+
105
+ The registry is intentionally platform-neutral. Adapters translate each
106
+ permission into whatever a browser, React Native app, Expo app, or test
107
+ environment can actually check or request.
108
+
109
+ Module: `src/registry/permissions.ts`
110
+ Source: `src/registry/permissions.ts:9:1`
111
+
112
+ </details>
113
+
114
+ <details>
115
+ <summary>PermissionsProvider</summary>
116
+
117
+ ```ts
118
+ PermissionsProvider({
119
+ children,
120
+ client,
121
+ manager,
122
+ }: PermissionsProviderProps) => ReactNode
123
+ ```
124
+
125
+ Provides a permission manager to React hooks.
126
+
127
+ React helpers are framework-neutral. They depend on React only and do not
128
+ import browser, Expo, or React Native permission APIs.
129
+
130
+ Related types: `PermissionsProviderProps`
131
+
132
+ <details>
133
+ <summary>Props</summary>
134
+
135
+ | Prop | Type | Required | Default | Description |
136
+ | -------- | -------------------------------- | -------- | ------- | ----------- |
137
+ | children | `ReactNode \| undefined` | no | — | |
138
+ | client | `PermissionClient \| undefined` | no | — | |
139
+ | manager | `PermissionManager \| undefined` | no | — | |
140
+
141
+ </details>
142
+
143
+ </details>
@@ -0,0 +1,19 @@
1
+ import type { Permission } from '../registry/permissions';
2
+ import type { PermissionState } from '../state/permissionState';
3
+ /***
4
+ * Adapter-neutral interface for runtime permission checks and requests.
5
+ *
6
+ * @usage
7
+ * ```ts
8
+ * const state = await client.getStatus(Permission.Camera);
9
+ * if (!state.granted) {
10
+ * await client.request(Permission.Camera);
11
+ * }
12
+ * ```
13
+ */
14
+ export interface PermissionClient {
15
+ getStatus(permission: Permission): Promise<PermissionState>;
16
+ request(permission: Permission): Promise<PermissionState>;
17
+ openSettings?(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5D,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1D,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Permission } from '../registry/permissions';\nimport type { PermissionState } from '../state/permissionState';\n\n/***\n * Adapter-neutral interface for runtime permission checks and requests.\n *\n * @usage\n * ```ts\n * const state = await client.getStatus(Permission.Camera);\n * if (!state.granted) {\n * await client.request(Permission.Camera);\n * }\n * ```\n */\nexport interface PermissionClient {\n getStatus(permission: Permission): Promise<PermissionState>;\n request(permission: Permission): Promise<PermissionState>;\n openSettings?(): Promise<void>;\n}\n"]}
@@ -0,0 +1,12 @@
1
+ export type { PermissionClient } from './client/types';
2
+ export type { PermissionManager } from './manager/createPermissionManager';
3
+ export { createPermissionManager } from './manager/createPermissionManager';
4
+ export type { PermissionHookResult, PermissionsProviderProps, UsePermissionOptions, } from './react/index';
5
+ export { PermissionsProvider, usePermission, usePermissions } from './react/index';
6
+ export type { PermissionDefinition, PermissionEnvironment } from './registry/permissions';
7
+ export { assertKnownPermission, getPermissionDefinition, isPermission, Permission, PERMISSION_REGISTRY, PERMISSIONS, } from './registry/permissions';
8
+ export type { PermissionState, PermissionStatus } from './state/permissionState';
9
+ export { createPermissionState, isPermissionStatus, normalizePermissionState, PERMISSION_STATUSES, } from './state/permissionState';
10
+ export type { FakePermissionClient, FakePermissionClientOptions, FakePermissionStateSeed, } from './testing/index';
11
+ export { createFakePermissionClient } from './testing/index';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,oBAAoB,EACpB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { createPermissionManager } from './manager/createPermissionManager';
2
+ export { PermissionsProvider, usePermission, usePermissions } from './react/index';
3
+ export { assertKnownPermission, getPermissionDefinition, isPermission, Permission, PERMISSION_REGISTRY, PERMISSIONS, } from './registry/permissions';
4
+ export { createPermissionState, isPermissionStatus, normalizePermissionState, PERMISSION_STATUSES, } from './state/permissionState';
5
+ export { createFakePermissionClient } from './testing/index';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAM5E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export type { PermissionClient } from './client/types';\nexport type { PermissionManager } from './manager/createPermissionManager';\nexport { createPermissionManager } from './manager/createPermissionManager';\nexport type {\n PermissionHookResult,\n PermissionsProviderProps,\n UsePermissionOptions,\n} from './react/index';\nexport { PermissionsProvider, usePermission, usePermissions } from './react/index';\nexport type { PermissionDefinition, PermissionEnvironment } from './registry/permissions';\nexport {\n assertKnownPermission,\n getPermissionDefinition,\n isPermission,\n Permission,\n PERMISSION_REGISTRY,\n PERMISSIONS,\n} from './registry/permissions';\nexport type { PermissionState, PermissionStatus } from './state/permissionState';\nexport {\n createPermissionState,\n isPermissionStatus,\n normalizePermissionState,\n PERMISSION_STATUSES,\n} from './state/permissionState';\nexport type {\n FakePermissionClient,\n FakePermissionClientOptions,\n FakePermissionStateSeed,\n} from './testing/index';\nexport { createFakePermissionClient } from './testing/index';\n"]}
@@ -0,0 +1,31 @@
1
+ import type { PermissionClient } from '../client/types';
2
+ import { type Permission } from '../registry/permissions';
3
+ import { type PermissionState } from '../state/permissionState';
4
+ /***
5
+ * Public manager returned by `createPermissionManager`.
6
+ */
7
+ export interface PermissionManager {
8
+ getStatus(permission: Permission): Promise<PermissionState>;
9
+ request(permission: Permission): Promise<PermissionState>;
10
+ openSettings?(): Promise<void>;
11
+ }
12
+ /***
13
+ * Wraps a client with registry validation and normalized results.
14
+ *
15
+ * @readme
16
+ * Runtime permissions and build-time native configuration are separate concerns.
17
+ * This manager checks or requests permissions through a client, but it does not
18
+ * generate iOS usage descriptions, Android manifest entries, or Expo config
19
+ * plugins.
20
+ *
21
+ * @usage
22
+ * ```ts
23
+ * const permissions = createPermissionManager(client);
24
+ * const camera = await permissions.getStatus(Permission.Camera);
25
+ * const requested = camera.granted
26
+ * ? camera
27
+ * : await permissions.request(Permission.Camera);
28
+ * ```
29
+ */
30
+ export declare function createPermissionManager(client: PermissionClient): PermissionManager;
31
+ //# sourceMappingURL=createPermissionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPermissionManager.d.ts","sourceRoot":"","sources":["../../src/manager/createPermissionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5D,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1D,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAsBnF"}
@@ -0,0 +1,39 @@
1
+ import { assertKnownPermission } from '../registry/permissions';
2
+ import { normalizePermissionState } from '../state/permissionState';
3
+ /***
4
+ * Wraps a client with registry validation and normalized results.
5
+ *
6
+ * @readme
7
+ * Runtime permissions and build-time native configuration are separate concerns.
8
+ * This manager checks or requests permissions through a client, but it does not
9
+ * generate iOS usage descriptions, Android manifest entries, or Expo config
10
+ * plugins.
11
+ *
12
+ * @usage
13
+ * ```ts
14
+ * const permissions = createPermissionManager(client);
15
+ * const camera = await permissions.getStatus(Permission.Camera);
16
+ * const requested = camera.granted
17
+ * ? camera
18
+ * : await permissions.request(Permission.Camera);
19
+ * ```
20
+ */
21
+ export function createPermissionManager(client) {
22
+ const manager = {
23
+ async getStatus(permission) {
24
+ const knownPermission = assertKnownPermission(permission);
25
+ const state = await client.getStatus(knownPermission);
26
+ return normalizePermissionState(knownPermission, state);
27
+ },
28
+ async request(permission) {
29
+ const knownPermission = assertKnownPermission(permission);
30
+ const state = await client.request(knownPermission);
31
+ return normalizePermissionState(knownPermission, state);
32
+ },
33
+ };
34
+ if (client.openSettings !== undefined) {
35
+ manager.openSettings = () => client.openSettings?.() ?? Promise.resolve();
36
+ }
37
+ return manager;
38
+ }
39
+ //# sourceMappingURL=createPermissionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPermissionManager.js","sourceRoot":"","sources":["../../src/manager/createPermissionManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAmB,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAwB,MAAM,0BAA0B,CAAC;AAW1F;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAwB;IAC9D,MAAM,OAAO,GAAsB;QACjC,KAAK,CAAC,SAAS,CAAC,UAAU;YACxB,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAEtD,OAAO,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,UAAU;YACtB,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAEpD,OAAO,wBAAwB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;IAEF,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import type { PermissionClient } from '../client/types';\nimport { assertKnownPermission, type Permission } from '../registry/permissions';\nimport { normalizePermissionState, type PermissionState } from '../state/permissionState';\n\n/***\n * Public manager returned by `createPermissionManager`.\n */\nexport interface PermissionManager {\n getStatus(permission: Permission): Promise<PermissionState>;\n request(permission: Permission): Promise<PermissionState>;\n openSettings?(): Promise<void>;\n}\n\n/***\n * Wraps a client with registry validation and normalized results.\n *\n * @readme\n * Runtime permissions and build-time native configuration are separate concerns.\n * This manager checks or requests permissions through a client, but it does not\n * generate iOS usage descriptions, Android manifest entries, or Expo config\n * plugins.\n *\n * @usage\n * ```ts\n * const permissions = createPermissionManager(client);\n * const camera = await permissions.getStatus(Permission.Camera);\n * const requested = camera.granted\n * ? camera\n * : await permissions.request(Permission.Camera);\n * ```\n */\nexport function createPermissionManager(client: PermissionClient): PermissionManager {\n const manager: PermissionManager = {\n async getStatus(permission) {\n const knownPermission = assertKnownPermission(permission);\n const state = await client.getStatus(knownPermission);\n\n return normalizePermissionState(knownPermission, state);\n },\n\n async request(permission) {\n const knownPermission = assertKnownPermission(permission);\n const state = await client.request(knownPermission);\n\n return normalizePermissionState(knownPermission, state);\n },\n };\n\n if (client.openSettings !== undefined) {\n manager.openSettings = () => client.openSettings?.() ?? Promise.resolve();\n }\n\n return manager;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /***
2
+ * Public package metadata used by generated documentation and tooling.
3
+ */
4
+ export declare const permissionsPackageMetadata: {
5
+ readonly name: "@ankhorage/permissions";
6
+ readonly description: "Cross-platform permission registry and runtime helpers for TypeScript apps.";
7
+ };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;CAG7B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /***
2
+ * Public package metadata used by generated documentation and tooling.
3
+ */
4
+ export const permissionsPackageMetadata = {
5
+ name: '@ankhorage/permissions',
6
+ description: 'Cross-platform permission registry and runtime helpers for TypeScript apps.',
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,6EAA6E;CAClF,CAAC","sourcesContent":["/***\n * Public package metadata used by generated documentation and tooling.\n */\nexport const permissionsPackageMetadata = {\n name: '@ankhorage/permissions',\n description: 'Cross-platform permission registry and runtime helpers for TypeScript apps.',\n} as const;\n"]}
@@ -0,0 +1,66 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { PermissionClient } from '../client/types';
3
+ import { type PermissionManager } from '../manager/createPermissionManager';
4
+ import type { Permission } from '../registry/permissions';
5
+ import { type PermissionState, type PermissionStatus } from '../state/permissionState';
6
+ /***
7
+ * Props accepted by `PermissionsProvider`.
8
+ */
9
+ export interface PermissionsProviderProps {
10
+ readonly children: ReactNode;
11
+ readonly client?: PermissionClient;
12
+ readonly manager?: PermissionManager;
13
+ }
14
+ /***
15
+ * Options for `usePermission`.
16
+ */
17
+ export interface UsePermissionOptions {
18
+ readonly initialState?: PermissionState;
19
+ readonly refreshOnMount?: boolean;
20
+ }
21
+ /***
22
+ * Result returned by `usePermission`.
23
+ */
24
+ export interface PermissionHookResult {
25
+ readonly permission: Permission;
26
+ readonly status: PermissionStatus;
27
+ readonly canAskAgain?: boolean;
28
+ readonly granted: boolean;
29
+ readonly requestedAt?: Date;
30
+ readonly reason?: string;
31
+ readonly state: PermissionState;
32
+ readonly refresh: () => Promise<PermissionState>;
33
+ readonly request: () => Promise<PermissionState>;
34
+ readonly openSettings?: () => Promise<void>;
35
+ }
36
+ /***
37
+ * Provides a permission manager to React hooks.
38
+ *
39
+ * @readme
40
+ * React helpers are framework-neutral. They depend on React only and do not
41
+ * import browser, Expo, or React Native permission APIs.
42
+ */
43
+ export declare function PermissionsProvider({ children, client, manager, }: PermissionsProviderProps): ReactNode;
44
+ /***
45
+ * Reads the current permission manager from context.
46
+ */
47
+ export declare function usePermissions(): PermissionManager;
48
+ /***
49
+ * Tracks a single permission and exposes explicit refresh/request actions.
50
+ *
51
+ * @usage
52
+ * ```tsx
53
+ * const camera = usePermission(Permission.Camera, { refreshOnMount: true });
54
+ *
55
+ * return (
56
+ * <Button
57
+ * disabled={camera.granted}
58
+ * onPress={() => {
59
+ * void camera.request();
60
+ * }}
61
+ * />
62
+ * );
63
+ * ```
64
+ */
65
+ export declare function usePermission(permission: Permission, options?: UsePermissionOptions): PermissionHookResult;
66
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAIlC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE,wBAAwB,GAAG,SAAS,CActC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,iBAAiB,CAQlD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,oBAAyB,GACjC,oBAAoB,CAkDtB"}
@@ -0,0 +1,91 @@
1
+ import { createContext, createElement, useCallback, useContext, useEffect, useMemo, useState, } from 'react';
2
+ import { createPermissionManager, } from '../manager/createPermissionManager';
3
+ import { createPermissionState, normalizePermissionState, } from '../state/permissionState';
4
+ const PermissionsContext = createContext(undefined);
5
+ /***
6
+ * Provides a permission manager to React hooks.
7
+ *
8
+ * @readme
9
+ * React helpers are framework-neutral. They depend on React only and do not
10
+ * import browser, Expo, or React Native permission APIs.
11
+ */
12
+ export function PermissionsProvider({ children, client, manager, }) {
13
+ const resolvedManager = useMemo(() => {
14
+ if (manager !== undefined) {
15
+ return manager;
16
+ }
17
+ if (client !== undefined) {
18
+ return createPermissionManager(client);
19
+ }
20
+ throw new Error('PermissionsProvider requires a client or manager.');
21
+ }, [client, manager]);
22
+ return createElement(PermissionsContext.Provider, { value: resolvedManager }, children);
23
+ }
24
+ /***
25
+ * Reads the current permission manager from context.
26
+ */
27
+ export function usePermissions() {
28
+ const manager = useContext(PermissionsContext);
29
+ if (manager === undefined) {
30
+ throw new Error('usePermissions must be used within PermissionsProvider.');
31
+ }
32
+ return manager;
33
+ }
34
+ /***
35
+ * Tracks a single permission and exposes explicit refresh/request actions.
36
+ *
37
+ * @usage
38
+ * ```tsx
39
+ * const camera = usePermission(Permission.Camera, { refreshOnMount: true });
40
+ *
41
+ * return (
42
+ * <Button
43
+ * disabled={camera.granted}
44
+ * onPress={() => {
45
+ * void camera.request();
46
+ * }}
47
+ * />
48
+ * );
49
+ * ```
50
+ */
51
+ export function usePermission(permission, options = {}) {
52
+ const manager = usePermissions();
53
+ const [state, setState] = useState(() => (options.initialState === undefined
54
+ ? undefined
55
+ : normalizePermissionState(permission, options.initialState)) ??
56
+ createPermissionState({
57
+ permission,
58
+ status: 'unknown',
59
+ }));
60
+ const refresh = useCallback(async () => {
61
+ const nextState = await manager.getStatus(permission);
62
+ setState(nextState);
63
+ return nextState;
64
+ }, [manager, permission]);
65
+ const request = useCallback(async () => {
66
+ const nextState = await manager.request(permission);
67
+ setState(nextState);
68
+ return nextState;
69
+ }, [manager, permission]);
70
+ useEffect(() => {
71
+ if (options.refreshOnMount === true) {
72
+ void refresh();
73
+ }
74
+ }, [options.refreshOnMount, refresh]);
75
+ const openSettings = manager.openSettings === undefined
76
+ ? undefined
77
+ : () => manager.openSettings?.() ?? Promise.resolve();
78
+ return {
79
+ permission: state.permission,
80
+ status: state.status,
81
+ canAskAgain: state.canAskAgain,
82
+ granted: state.granted,
83
+ requestedAt: state.requestedAt,
84
+ reason: state.reason,
85
+ state,
86
+ refresh,
87
+ request,
88
+ openSettings,
89
+ };
90
+ }
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n createElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport type { PermissionClient } from '../client/types';\nimport {\n createPermissionManager,\n type PermissionManager,\n} from '../manager/createPermissionManager';\nimport type { Permission } from '../registry/permissions';\nimport {\n createPermissionState,\n normalizePermissionState,\n type PermissionState,\n type PermissionStatus,\n} from '../state/permissionState';\n\nconst PermissionsContext = createContext<PermissionManager | undefined>(undefined);\n\n/***\n * Props accepted by `PermissionsProvider`.\n */\nexport interface PermissionsProviderProps {\n readonly children: ReactNode;\n readonly client?: PermissionClient;\n readonly manager?: PermissionManager;\n}\n\n/***\n * Options for `usePermission`.\n */\nexport interface UsePermissionOptions {\n readonly initialState?: PermissionState;\n readonly refreshOnMount?: boolean;\n}\n\n/***\n * Result returned by `usePermission`.\n */\nexport interface PermissionHookResult {\n readonly permission: Permission;\n readonly status: PermissionStatus;\n readonly canAskAgain?: boolean;\n readonly granted: boolean;\n readonly requestedAt?: Date;\n readonly reason?: string;\n readonly state: PermissionState;\n readonly refresh: () => Promise<PermissionState>;\n readonly request: () => Promise<PermissionState>;\n readonly openSettings?: () => Promise<void>;\n}\n\n/***\n * Provides a permission manager to React hooks.\n *\n * @readme\n * React helpers are framework-neutral. They depend on React only and do not\n * import browser, Expo, or React Native permission APIs.\n */\nexport function PermissionsProvider({\n children,\n client,\n manager,\n}: PermissionsProviderProps): ReactNode {\n const resolvedManager = useMemo(() => {\n if (manager !== undefined) {\n return manager;\n }\n\n if (client !== undefined) {\n return createPermissionManager(client);\n }\n\n throw new Error('PermissionsProvider requires a client or manager.');\n }, [client, manager]);\n\n return createElement(PermissionsContext.Provider, { value: resolvedManager }, children);\n}\n\n/***\n * Reads the current permission manager from context.\n */\nexport function usePermissions(): PermissionManager {\n const manager = useContext(PermissionsContext);\n\n if (manager === undefined) {\n throw new Error('usePermissions must be used within PermissionsProvider.');\n }\n\n return manager;\n}\n\n/***\n * Tracks a single permission and exposes explicit refresh/request actions.\n *\n * @usage\n * ```tsx\n * const camera = usePermission(Permission.Camera, { refreshOnMount: true });\n *\n * return (\n * <Button\n * disabled={camera.granted}\n * onPress={() => {\n * void camera.request();\n * }}\n * />\n * );\n * ```\n */\nexport function usePermission(\n permission: Permission,\n options: UsePermissionOptions = {},\n): PermissionHookResult {\n const manager = usePermissions();\n const [state, setState] = useState<PermissionState>(\n () =>\n (options.initialState === undefined\n ? undefined\n : normalizePermissionState(permission, options.initialState)) ??\n createPermissionState({\n permission,\n status: 'unknown',\n }),\n );\n\n const refresh = useCallback(async () => {\n const nextState = await manager.getStatus(permission);\n setState(nextState);\n\n return nextState;\n }, [manager, permission]);\n\n const request = useCallback(async () => {\n const nextState = await manager.request(permission);\n setState(nextState);\n\n return nextState;\n }, [manager, permission]);\n\n useEffect(() => {\n if (options.refreshOnMount === true) {\n void refresh();\n }\n }, [options.refreshOnMount, refresh]);\n\n const openSettings =\n manager.openSettings === undefined\n ? undefined\n : () => manager.openSettings?.() ?? Promise.resolve();\n\n return {\n permission: state.permission,\n status: state.status,\n canAskAgain: state.canAskAgain,\n granted: state.granted,\n requestedAt: state.requestedAt,\n reason: state.reason,\n state,\n refresh,\n request,\n openSettings,\n };\n}\n"]}
@@ -0,0 +1,52 @@
1
+ /***
2
+ * Common runtime permissions supported by the registry.
3
+ *
4
+ * @readme
5
+ * The registry is intentionally platform-neutral. Adapters translate each
6
+ * permission into whatever a browser, React Native app, Expo app, or test
7
+ * environment can actually check or request.
8
+ */
9
+ export declare enum Permission {
10
+ Camera = "camera",
11
+ Microphone = "microphone",
12
+ MediaLibrary = "mediaLibrary",
13
+ MediaLibraryWrite = "mediaLibraryWrite",
14
+ LocationForeground = "locationForeground",
15
+ LocationBackground = "locationBackground",
16
+ Notifications = "notifications",
17
+ Clipboard = "clipboard"
18
+ }
19
+ /***
20
+ * Broad environment categories where a permission can be meaningful.
21
+ */
22
+ export type PermissionEnvironment = 'web' | 'native' | 'test';
23
+ /***
24
+ * Describes a known permission without coupling the registry to a platform SDK.
25
+ */
26
+ export interface PermissionDefinition {
27
+ readonly permission: Permission;
28
+ readonly label: string;
29
+ readonly description: string;
30
+ readonly environments: readonly PermissionEnvironment[];
31
+ }
32
+ /***
33
+ * Stable ordered list of known permissions.
34
+ */
35
+ export declare const PERMISSIONS: readonly [Permission.Camera, Permission.Microphone, Permission.MediaLibrary, Permission.MediaLibraryWrite, Permission.LocationForeground, Permission.LocationBackground, Permission.Notifications, Permission.Clipboard];
36
+ /***
37
+ * Metadata for known permissions.
38
+ */
39
+ export declare const PERMISSION_REGISTRY: Readonly<Record<Permission, PermissionDefinition>>;
40
+ /***
41
+ * Returns true when a string is a registered permission identifier.
42
+ */
43
+ export declare function isPermission(value: string): value is Permission;
44
+ /***
45
+ * Throws for programmer errors where an invalid permission reaches runtime.
46
+ */
47
+ export declare function assertKnownPermission(permission: string): Permission;
48
+ /***
49
+ * Reads registry metadata for a known permission.
50
+ */
51
+ export declare function getPermissionDefinition(permission: Permission): PermissionDefinition;
52
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/registry/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACzD;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,0NASd,CAAC;AAIX;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAiDlF,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAMpE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,oBAAoB,CAEpF"}