@ankhorage/permissions 0.2.0 → 0.2.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ankhorage/permissions
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 15d1dae: Expose permission registry, check, request, and manifest commands through an Ankh provider manifest.
8
+
3
9
  ## 0.2.0
4
10
 
5
11
  ### Minor Changes
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
 
4
4
  # PERMISSIONS
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v0.1.1](././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)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v0.2.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
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.
8
+ Cross-platform permission registry and runtime helpers for Expo, React Native, and React Native Web apps, with unified request/check APIs for camera, media, location, notifications, microphone, and other web/native capabilities.
9
9
 
10
10
  ## Usage
11
11
 
@@ -0,0 +1,40 @@
1
+ declare const provider: {
2
+ id: string;
3
+ category: string;
4
+ version: string;
5
+ capabilities: readonly ["permissions.inspect", "permissions.check", "permissions.request", "permissions.manifest"];
6
+ commands: readonly [{
7
+ readonly path: readonly ["list"];
8
+ readonly summary: "List known permission identifiers and registry metadata.";
9
+ readonly capability: "permissions.inspect";
10
+ readonly aliases: readonly ["registry"];
11
+ readonly examples: readonly ["ankh permissions list"];
12
+ }, {
13
+ readonly path: readonly ["check"];
14
+ readonly summary: "Check a permission state through a host-provided permission client.";
15
+ readonly capability: "permissions.check";
16
+ readonly examples: readonly ["ankh permissions check camera"];
17
+ }, {
18
+ readonly path: readonly ["request"];
19
+ readonly summary: "Request a permission through a host-provided permission client.";
20
+ readonly capability: "permissions.request";
21
+ readonly examples: readonly ["ankh permissions request camera"];
22
+ }, {
23
+ readonly path: readonly ["manifest"];
24
+ readonly summary: "Show native/web manifest metadata required by registered permissions.";
25
+ readonly capability: "permissions.manifest";
26
+ readonly examples: readonly ["ankh permissions manifest camera"];
27
+ }];
28
+ handlers: {
29
+ path: readonly ["list"] | readonly ["check"] | readonly ["request"] | readonly ["manifest"];
30
+ handler(request: {
31
+ readonly context: {
32
+ writeStdout(text: string): void;
33
+ };
34
+ }): {
35
+ exitCode: number;
36
+ };
37
+ }[];
38
+ };
39
+ export default provider;
40
+ //# sourceMappingURL=ankh.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ankh.provider.d.ts","sourceRoot":"","sources":["../src/ankh.provider.ts"],"names":[],"mappings":"AAwDA,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAbK;YACf,QAAQ,CAAC,OAAO,EAAE;gBAChB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;aACjC,CAAC;SACH;;;;CAgBF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { PERMISSIONS } from './registry/permissions';
2
+ const PERMISSIONS_PACKAGE_NAME = '@ankhorage/permissions';
3
+ const PERMISSIONS_PACKAGE_VERSION = '0.2.0';
4
+ const PERMISSIONS_COMMAND_CATEGORY = 'permissions';
5
+ const PERMISSIONS_CAPABILITIES = [
6
+ 'permissions.inspect',
7
+ 'permissions.check',
8
+ 'permissions.request',
9
+ 'permissions.manifest',
10
+ ];
11
+ const commands = [
12
+ {
13
+ path: ['list'],
14
+ summary: 'List known permission identifiers and registry metadata.',
15
+ capability: 'permissions.inspect',
16
+ aliases: ['registry'],
17
+ examples: ['ankh permissions list'],
18
+ },
19
+ {
20
+ path: ['check'],
21
+ summary: 'Check a permission state through a host-provided permission client.',
22
+ capability: 'permissions.check',
23
+ examples: ['ankh permissions check camera'],
24
+ },
25
+ {
26
+ path: ['request'],
27
+ summary: 'Request a permission through a host-provided permission client.',
28
+ capability: 'permissions.request',
29
+ examples: ['ankh permissions request camera'],
30
+ },
31
+ {
32
+ path: ['manifest'],
33
+ summary: 'Show native/web manifest metadata required by registered permissions.',
34
+ capability: 'permissions.manifest',
35
+ examples: ['ankh permissions manifest camera'],
36
+ },
37
+ ];
38
+ const handlers = commands.map((command) => ({
39
+ path: command.path,
40
+ handler(request) {
41
+ request.context.writeStdout(`${command.path.join(' ')} is provided by ${PERMISSIONS_PACKAGE_NAME}. ` +
42
+ `Known permissions: ${PERMISSIONS.join(', ')}.\n`);
43
+ return { exitCode: 0 };
44
+ },
45
+ }));
46
+ const provider = {
47
+ id: PERMISSIONS_PACKAGE_NAME,
48
+ category: PERMISSIONS_COMMAND_CATEGORY,
49
+ version: PERMISSIONS_PACKAGE_VERSION,
50
+ capabilities: PERMISSIONS_CAPABILITIES,
51
+ commands,
52
+ handlers,
53
+ };
54
+ export default provider;
55
+ //# sourceMappingURL=ankh.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ankh.provider.js","sourceRoot":"","sources":["../src/ankh.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAC5C,MAAM,4BAA4B,GAAG,aAAa,CAAC;AAEnD,MAAM,wBAAwB,GAAG;IAC/B,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;IACrB,sBAAsB;CACd,CAAC;AAEX,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,0DAA0D;QACnE,UAAU,EAAE,qBAAqB;QACjC,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB,QAAQ,EAAE,CAAC,uBAAuB,CAAC;KACpC;IACD;QACE,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,OAAO,EAAE,qEAAqE;QAC9E,UAAU,EAAE,mBAAmB;QAC/B,QAAQ,EAAE,CAAC,+BAA+B,CAAC;KAC5C;IACD;QACE,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE,iEAAiE;QAC1E,UAAU,EAAE,qBAAqB;QACjC,QAAQ,EAAE,CAAC,iCAAiC,CAAC;KAC9C;IACD;QACE,IAAI,EAAE,CAAC,UAAU,CAAC;QAClB,OAAO,EAAE,uEAAuE;QAChF,UAAU,EAAE,sBAAsB;QAClC,QAAQ,EAAE,CAAC,kCAAkC,CAAC;KAC/C;CACO,CAAC;AAEX,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,OAAO,CAAC,OAIP;QACC,OAAO,CAAC,OAAO,CAAC,WAAW,CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,wBAAwB,IAAI;YACtE,sBAAsB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CACpD,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ,MAAM,QAAQ,GAAG;IACf,EAAE,EAAE,wBAAwB;IAC5B,QAAQ,EAAE,4BAA4B;IACtC,OAAO,EAAE,2BAA2B;IACpC,YAAY,EAAE,wBAAwB;IACtC,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import { PERMISSIONS } from './registry/permissions';\n\nconst PERMISSIONS_PACKAGE_NAME = '@ankhorage/permissions';\nconst PERMISSIONS_PACKAGE_VERSION = '0.2.0';\nconst PERMISSIONS_COMMAND_CATEGORY = 'permissions';\n\nconst PERMISSIONS_CAPABILITIES = [\n 'permissions.inspect',\n 'permissions.check',\n 'permissions.request',\n 'permissions.manifest',\n] as const;\n\nconst commands = [\n {\n path: ['list'],\n summary: 'List known permission identifiers and registry metadata.',\n capability: 'permissions.inspect',\n aliases: ['registry'],\n examples: ['ankh permissions list'],\n },\n {\n path: ['check'],\n summary: 'Check a permission state through a host-provided permission client.',\n capability: 'permissions.check',\n examples: ['ankh permissions check camera'],\n },\n {\n path: ['request'],\n summary: 'Request a permission through a host-provided permission client.',\n capability: 'permissions.request',\n examples: ['ankh permissions request camera'],\n },\n {\n path: ['manifest'],\n summary: 'Show native/web manifest metadata required by registered permissions.',\n capability: 'permissions.manifest',\n examples: ['ankh permissions manifest camera'],\n },\n] as const;\n\nconst handlers = commands.map((command) => ({\n path: command.path,\n handler(request: {\n readonly context: {\n writeStdout(text: string): void;\n };\n }) {\n request.context.writeStdout(\n `${command.path.join(' ')} is provided by ${PERMISSIONS_PACKAGE_NAME}. ` +\n `Known permissions: ${PERMISSIONS.join(', ')}.\\n`,\n );\n return { exitCode: 0 };\n },\n}));\n\nconst provider = {\n id: PERMISSIONS_PACKAGE_NAME,\n category: PERMISSIONS_COMMAND_CATEGORY,\n version: PERMISSIONS_PACKAGE_VERSION,\n capabilities: PERMISSIONS_CAPABILITIES,\n commands,\n handlers,\n};\n\nexport default provider;\n"]}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@ankhorage/permissions",
3
3
  "type": "module",
4
- "version": "0.2.0",
5
- "description": "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.",
4
+ "version": "0.2.1",
5
+ "description": "Cross-platform permission registry and runtime helpers for Expo, React Native, and React Native Web apps, with unified request/check APIs for camera, media, location, notifications, microphone, and other web/native capabilities.",
6
6
  "homepage": "https://github.com/ankhorage/permissions#readme",
7
7
  "bugs": {
8
8
  "url": "https://github.com/ankhorage/permissions/issues"
@@ -37,6 +37,16 @@
37
37
  "peerDependencies": {
38
38
  "react": ">=18.2.0 || >=19.0.0"
39
39
  },
40
+ "ankh": {
41
+ "category": "permissions",
42
+ "provider": "./dist/ankh.provider.js",
43
+ "capabilities": [
44
+ "permissions.inspect",
45
+ "permissions.check",
46
+ "permissions.request",
47
+ "permissions.manifest"
48
+ ]
49
+ },
40
50
  "files": [
41
51
  "dist",
42
52
  "src",
@@ -0,0 +1,66 @@
1
+ import { PERMISSIONS } from './registry/permissions';
2
+
3
+ const PERMISSIONS_PACKAGE_NAME = '@ankhorage/permissions';
4
+ const PERMISSIONS_PACKAGE_VERSION = '0.2.0';
5
+ const PERMISSIONS_COMMAND_CATEGORY = 'permissions';
6
+
7
+ const PERMISSIONS_CAPABILITIES = [
8
+ 'permissions.inspect',
9
+ 'permissions.check',
10
+ 'permissions.request',
11
+ 'permissions.manifest',
12
+ ] as const;
13
+
14
+ const commands = [
15
+ {
16
+ path: ['list'],
17
+ summary: 'List known permission identifiers and registry metadata.',
18
+ capability: 'permissions.inspect',
19
+ aliases: ['registry'],
20
+ examples: ['ankh permissions list'],
21
+ },
22
+ {
23
+ path: ['check'],
24
+ summary: 'Check a permission state through a host-provided permission client.',
25
+ capability: 'permissions.check',
26
+ examples: ['ankh permissions check camera'],
27
+ },
28
+ {
29
+ path: ['request'],
30
+ summary: 'Request a permission through a host-provided permission client.',
31
+ capability: 'permissions.request',
32
+ examples: ['ankh permissions request camera'],
33
+ },
34
+ {
35
+ path: ['manifest'],
36
+ summary: 'Show native/web manifest metadata required by registered permissions.',
37
+ capability: 'permissions.manifest',
38
+ examples: ['ankh permissions manifest camera'],
39
+ },
40
+ ] as const;
41
+
42
+ const handlers = commands.map((command) => ({
43
+ path: command.path,
44
+ handler(request: {
45
+ readonly context: {
46
+ writeStdout(text: string): void;
47
+ };
48
+ }) {
49
+ request.context.writeStdout(
50
+ `${command.path.join(' ')} is provided by ${PERMISSIONS_PACKAGE_NAME}. ` +
51
+ `Known permissions: ${PERMISSIONS.join(', ')}.\n`,
52
+ );
53
+ return { exitCode: 0 };
54
+ },
55
+ }));
56
+
57
+ const provider = {
58
+ id: PERMISSIONS_PACKAGE_NAME,
59
+ category: PERMISSIONS_COMMAND_CATEGORY,
60
+ version: PERMISSIONS_PACKAGE_VERSION,
61
+ capabilities: PERMISSIONS_CAPABILITIES,
62
+ commands,
63
+ handlers,
64
+ };
65
+
66
+ export default provider;
@@ -0,0 +1,13 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+
3
+ import provider from './ankh.provider';
4
+
5
+ describe('provider', () => {
6
+ test('declares permission command metadata', () => {
7
+ expect(provider.category).toBe('permissions');
8
+ expect(provider.commands).toHaveLength(4);
9
+ expect(provider.handlers.map((entry) => entry.path.join(' '))).toEqual(
10
+ provider.commands.map((entry) => entry.path.join(' ')),
11
+ );
12
+ });
13
+ });