react-native-permission-handler 0.1.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.
Files changed (41) hide show
  1. package/README.md +212 -53
  2. package/dist/chunk-EU3KPRTI.mjs +81 -0
  3. package/dist/chunk-EU3KPRTI.mjs.map +1 -0
  4. package/dist/chunk-NFEGQTCC.mjs +27 -0
  5. package/dist/chunk-NFEGQTCC.mjs.map +1 -0
  6. package/dist/engines/expo.d.mts +18 -0
  7. package/dist/engines/expo.d.ts +18 -0
  8. package/dist/engines/expo.js +58 -0
  9. package/dist/engines/expo.js.map +1 -0
  10. package/dist/engines/expo.mjs +35 -0
  11. package/dist/engines/expo.mjs.map +1 -0
  12. package/dist/engines/rnp.d.mts +22 -0
  13. package/dist/engines/rnp.d.ts +22 -0
  14. package/dist/engines/rnp.js +83 -0
  15. package/dist/engines/rnp.js.map +1 -0
  16. package/dist/engines/rnp.mjs +12 -0
  17. package/dist/engines/rnp.mjs.map +1 -0
  18. package/dist/index.d.mts +7 -107
  19. package/dist/index.d.ts +7 -107
  20. package/dist/index.js +175 -76
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +98 -70
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/types-QXyq8VnD.d.mts +122 -0
  25. package/dist/types-QXyq8VnD.d.ts +122 -0
  26. package/package.json +27 -2
  27. package/src/components/permission-gate.tsx +10 -3
  28. package/src/engines/expo.test.ts +122 -0
  29. package/src/engines/expo.ts +45 -0
  30. package/src/engines/resolve.test.ts +85 -0
  31. package/src/engines/resolve.ts +11 -0
  32. package/src/engines/rnp-fallback.ts +23 -0
  33. package/src/engines/rnp.test.ts +122 -0
  34. package/src/engines/rnp.ts +68 -0
  35. package/src/engines/use-engine.ts +10 -0
  36. package/src/hooks/use-multiple-permissions.test.ts +94 -54
  37. package/src/hooks/use-multiple-permissions.ts +52 -39
  38. package/src/hooks/use-permission-handler.test.ts +59 -49
  39. package/src/hooks/use-permission-handler.ts +11 -40
  40. package/src/index.ts +3 -0
  41. package/src/types.ts +20 -3
@@ -0,0 +1,35 @@
1
+ import "../chunk-NFEGQTCC.mjs";
2
+
3
+ // src/engines/expo.ts
4
+ import { Linking } from "react-native";
5
+ function mapExpoStatus(result) {
6
+ if (result.status === "granted") return "granted";
7
+ if (result.status === "undetermined") return "denied";
8
+ if (result.status === "denied") {
9
+ return result.canAskAgain ? "denied" : "blocked";
10
+ }
11
+ return "unavailable";
12
+ }
13
+ function createExpoEngine(config) {
14
+ return {
15
+ async check(permission) {
16
+ const mod = config.permissions[permission];
17
+ if (!mod) return "unavailable";
18
+ const result = await mod.getPermissionsAsync();
19
+ return mapExpoStatus(result);
20
+ },
21
+ async request(permission) {
22
+ const mod = config.permissions[permission];
23
+ if (!mod) return "unavailable";
24
+ const result = await mod.requestPermissionsAsync();
25
+ return mapExpoStatus(result);
26
+ },
27
+ async openSettings() {
28
+ await Linking.openSettings();
29
+ }
30
+ };
31
+ }
32
+ export {
33
+ createExpoEngine
34
+ };
35
+ //# sourceMappingURL=expo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/engines/expo.ts"],"sourcesContent":["import { Linking } from \"react-native\";\nimport type { PermissionEngine, PermissionStatus } from \"../types\";\n\nexport interface ExpoPermissionModule {\n getPermissionsAsync: () => Promise<{ status: string; canAskAgain: boolean }>;\n requestPermissionsAsync: () => Promise<{ status: string; canAskAgain: boolean }>;\n}\n\nexport interface ExpoEngineConfig {\n permissions: Record<string, ExpoPermissionModule>;\n}\n\nfunction mapExpoStatus(result: {\n status: string;\n canAskAgain: boolean;\n}): PermissionStatus {\n if (result.status === \"granted\") return \"granted\";\n if (result.status === \"undetermined\") return \"denied\";\n if (result.status === \"denied\") {\n return result.canAskAgain ? \"denied\" : \"blocked\";\n }\n return \"unavailable\";\n}\n\nexport function createExpoEngine(config: ExpoEngineConfig): PermissionEngine {\n return {\n async check(permission: string): Promise<PermissionStatus> {\n const mod = config.permissions[permission];\n if (!mod) return \"unavailable\";\n const result = await mod.getPermissionsAsync();\n return mapExpoStatus(result);\n },\n\n async request(permission: string): Promise<PermissionStatus> {\n const mod = config.permissions[permission];\n if (!mod) return \"unavailable\";\n const result = await mod.requestPermissionsAsync();\n return mapExpoStatus(result);\n },\n\n async openSettings(): Promise<void> {\n await Linking.openSettings();\n },\n };\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AAYxB,SAAS,cAAc,QAGF;AACnB,MAAI,OAAO,WAAW,UAAW,QAAO;AACxC,MAAI,OAAO,WAAW,eAAgB,QAAO;AAC7C,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,OAAO,cAAc,WAAW;AAAA,EACzC;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAA4C;AAC3E,SAAO;AAAA,IACL,MAAM,MAAM,YAA+C;AACzD,YAAM,MAAM,OAAO,YAAY,UAAU;AACzC,UAAI,CAAC,IAAK,QAAO;AACjB,YAAM,SAAS,MAAM,IAAI,oBAAoB;AAC7C,aAAO,cAAc,MAAM;AAAA,IAC7B;AAAA,IAEA,MAAM,QAAQ,YAA+C;AAC3D,YAAM,MAAM,OAAO,YAAY,UAAU;AACzC,UAAI,CAAC,IAAK,QAAO;AACjB,YAAM,SAAS,MAAM,IAAI,wBAAwB;AACjD,aAAO,cAAc,MAAM;AAAA,IAC7B;AAAA,IAEA,MAAM,eAA8B;AAClC,YAAM,QAAQ,aAAa;AAAA,IAC7B;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,22 @@
1
+ import { P as PermissionEngine } from '../types-QXyq8VnD.mjs';
2
+
3
+ /**
4
+ * Cross-platform permission constants for use with the RNP engine.
5
+ * Each resolves to the correct platform-specific string at runtime.
6
+ */
7
+ declare const Permissions: {
8
+ readonly CAMERA: string;
9
+ readonly MICROPHONE: string;
10
+ readonly CONTACTS: string;
11
+ readonly CALENDARS: string;
12
+ readonly CALENDARS_WRITE_ONLY: string;
13
+ readonly LOCATION_WHEN_IN_USE: string;
14
+ readonly LOCATION_ALWAYS: string;
15
+ readonly PHOTO_LIBRARY: string;
16
+ readonly PHOTO_LIBRARY_ADD_ONLY: string;
17
+ readonly BLUETOOTH: string;
18
+ readonly NOTIFICATIONS: "notifications";
19
+ };
20
+ declare function createRNPEngine(): PermissionEngine;
21
+
22
+ export { Permissions, createRNPEngine };
@@ -0,0 +1,22 @@
1
+ import { P as PermissionEngine } from '../types-QXyq8VnD.js';
2
+
3
+ /**
4
+ * Cross-platform permission constants for use with the RNP engine.
5
+ * Each resolves to the correct platform-specific string at runtime.
6
+ */
7
+ declare const Permissions: {
8
+ readonly CAMERA: string;
9
+ readonly MICROPHONE: string;
10
+ readonly CONTACTS: string;
11
+ readonly CALENDARS: string;
12
+ readonly CALENDARS_WRITE_ONLY: string;
13
+ readonly LOCATION_WHEN_IN_USE: string;
14
+ readonly LOCATION_ALWAYS: string;
15
+ readonly PHOTO_LIBRARY: string;
16
+ readonly PHOTO_LIBRARY_ADD_ONLY: string;
17
+ readonly BLUETOOTH: string;
18
+ readonly NOTIFICATIONS: "notifications";
19
+ };
20
+ declare function createRNPEngine(): PermissionEngine;
21
+
22
+ export { Permissions, createRNPEngine };
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/engines/rnp.ts
21
+ var rnp_exports = {};
22
+ __export(rnp_exports, {
23
+ Permissions: () => Permissions,
24
+ createRNPEngine: () => createRNPEngine
25
+ });
26
+ module.exports = __toCommonJS(rnp_exports);
27
+ var import_react_native = require("react-native");
28
+ var import_react_native_permissions = require("react-native-permissions");
29
+ function p(ios, android) {
30
+ return import_react_native.Platform.select({ ios, android, default: ios }) ?? ios;
31
+ }
32
+ var Permissions = {
33
+ CAMERA: p("ios.permission.CAMERA", "android.permission.CAMERA"),
34
+ MICROPHONE: p("ios.permission.MICROPHONE", "android.permission.RECORD_AUDIO"),
35
+ CONTACTS: p("ios.permission.CONTACTS", "android.permission.READ_CONTACTS"),
36
+ CALENDARS: p("ios.permission.CALENDARS", "android.permission.READ_CALENDAR"),
37
+ CALENDARS_WRITE_ONLY: p(
38
+ "ios.permission.CALENDARS_WRITE_ONLY",
39
+ "android.permission.WRITE_CALENDAR"
40
+ ),
41
+ LOCATION_WHEN_IN_USE: p(
42
+ "ios.permission.LOCATION_WHEN_IN_USE",
43
+ "android.permission.ACCESS_FINE_LOCATION"
44
+ ),
45
+ LOCATION_ALWAYS: p(
46
+ "ios.permission.LOCATION_ALWAYS",
47
+ "android.permission.ACCESS_BACKGROUND_LOCATION"
48
+ ),
49
+ PHOTO_LIBRARY: p("ios.permission.PHOTO_LIBRARY", "android.permission.READ_MEDIA_IMAGES"),
50
+ PHOTO_LIBRARY_ADD_ONLY: p(
51
+ "ios.permission.PHOTO_LIBRARY_ADD_ONLY",
52
+ "android.permission.WRITE_EXTERNAL_STORAGE"
53
+ ),
54
+ BLUETOOTH: p("ios.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"),
55
+ NOTIFICATIONS: "notifications"
56
+ };
57
+ function createRNPEngine() {
58
+ return {
59
+ async check(permission) {
60
+ if (permission === "notifications") {
61
+ const result = await (0, import_react_native_permissions.checkNotifications)();
62
+ return result.status;
63
+ }
64
+ return await (0, import_react_native_permissions.check)(permission);
65
+ },
66
+ async request(permission) {
67
+ if (permission === "notifications") {
68
+ const result = await (0, import_react_native_permissions.requestNotifications)(["alert", "badge", "sound"]);
69
+ return result.status;
70
+ }
71
+ return await (0, import_react_native_permissions.request)(permission);
72
+ },
73
+ async openSettings() {
74
+ await (0, import_react_native_permissions.openSettings)();
75
+ }
76
+ };
77
+ }
78
+ // Annotate the CommonJS export names for ESM import in node:
79
+ 0 && (module.exports = {
80
+ Permissions,
81
+ createRNPEngine
82
+ });
83
+ //# sourceMappingURL=rnp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/engines/rnp.ts"],"sourcesContent":["import { Platform } from \"react-native\";\nimport {\n type Permission,\n check,\n checkNotifications,\n openSettings,\n request,\n requestNotifications,\n} from \"react-native-permissions\";\nimport type { PermissionEngine, PermissionStatus } from \"../types\";\n\nfunction p(ios: string, android: string): string {\n return Platform.select({ ios, android, default: ios }) ?? ios;\n}\n\n/**\n * Cross-platform permission constants for use with the RNP engine.\n * Each resolves to the correct platform-specific string at runtime.\n */\nexport const Permissions = {\n CAMERA: p(\"ios.permission.CAMERA\", \"android.permission.CAMERA\"),\n MICROPHONE: p(\"ios.permission.MICROPHONE\", \"android.permission.RECORD_AUDIO\"),\n CONTACTS: p(\"ios.permission.CONTACTS\", \"android.permission.READ_CONTACTS\"),\n CALENDARS: p(\"ios.permission.CALENDARS\", \"android.permission.READ_CALENDAR\"),\n CALENDARS_WRITE_ONLY: p(\n \"ios.permission.CALENDARS_WRITE_ONLY\",\n \"android.permission.WRITE_CALENDAR\",\n ),\n LOCATION_WHEN_IN_USE: p(\n \"ios.permission.LOCATION_WHEN_IN_USE\",\n \"android.permission.ACCESS_FINE_LOCATION\",\n ),\n LOCATION_ALWAYS: p(\n \"ios.permission.LOCATION_ALWAYS\",\n \"android.permission.ACCESS_BACKGROUND_LOCATION\",\n ),\n PHOTO_LIBRARY: p(\"ios.permission.PHOTO_LIBRARY\", \"android.permission.READ_MEDIA_IMAGES\"),\n PHOTO_LIBRARY_ADD_ONLY: p(\n \"ios.permission.PHOTO_LIBRARY_ADD_ONLY\",\n \"android.permission.WRITE_EXTERNAL_STORAGE\",\n ),\n BLUETOOTH: p(\"ios.permission.BLUETOOTH\", \"android.permission.BLUETOOTH_CONNECT\"),\n NOTIFICATIONS: \"notifications\",\n} as const;\n\nexport function createRNPEngine(): PermissionEngine {\n return {\n async check(permission: string): Promise<PermissionStatus> {\n if (permission === \"notifications\") {\n const result = await checkNotifications();\n return result.status as PermissionStatus;\n }\n return (await check(permission as Permission)) as PermissionStatus;\n },\n\n async request(permission: string): Promise<PermissionStatus> {\n if (permission === \"notifications\") {\n const result = await requestNotifications([\"alert\", \"badge\", \"sound\"]);\n return result.status as PermissionStatus;\n }\n return (await request(permission as Permission)) as PermissionStatus;\n },\n\n async openSettings(): Promise<void> {\n await openSettings();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAyB;AACzB,sCAOO;AAGP,SAAS,EAAE,KAAa,SAAyB;AAC/C,SAAO,6BAAS,OAAO,EAAE,KAAK,SAAS,SAAS,IAAI,CAAC,KAAK;AAC5D;AAMO,IAAM,cAAc;AAAA,EACzB,QAAQ,EAAE,yBAAyB,2BAA2B;AAAA,EAC9D,YAAY,EAAE,6BAA6B,iCAAiC;AAAA,EAC5E,UAAU,EAAE,2BAA2B,kCAAkC;AAAA,EACzE,WAAW,EAAE,4BAA4B,kCAAkC;AAAA,EAC3E,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,EACF;AAAA,EACA,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,EACF;AAAA,EACA,eAAe,EAAE,gCAAgC,sCAAsC;AAAA,EACvF,wBAAwB;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW,EAAE,4BAA4B,sCAAsC;AAAA,EAC/E,eAAe;AACjB;AAEO,SAAS,kBAAoC;AAClD,SAAO;AAAA,IACL,MAAM,MAAM,YAA+C;AACzD,UAAI,eAAe,iBAAiB;AAClC,cAAM,SAAS,UAAM,oDAAmB;AACxC,eAAO,OAAO;AAAA,MAChB;AACA,aAAQ,UAAM,uCAAM,UAAwB;AAAA,IAC9C;AAAA,IAEA,MAAM,QAAQ,YAA+C;AAC3D,UAAI,eAAe,iBAAiB;AAClC,cAAM,SAAS,UAAM,sDAAqB,CAAC,SAAS,SAAS,OAAO,CAAC;AACrE,eAAO,OAAO;AAAA,MAChB;AACA,aAAQ,UAAM,yCAAQ,UAAwB;AAAA,IAChD;AAAA,IAEA,MAAM,eAA8B;AAClC,gBAAM,8CAAa;AAAA,IACrB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,12 @@
1
+ import {
2
+ Permissions,
3
+ createRNPEngine,
4
+ init_rnp
5
+ } from "../chunk-EU3KPRTI.mjs";
6
+ import "../chunk-NFEGQTCC.mjs";
7
+ init_rnp();
8
+ export {
9
+ Permissions,
10
+ createRNPEngine
11
+ };
12
+ //# sourceMappingURL=rnp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/index.d.mts CHANGED
@@ -1,110 +1,9 @@
1
- import { Permission, PermissionStatus } from 'react-native-permissions';
1
+ import { P as PermissionEngine, a as PermissionFlowState, b as PermissionFlowEvent, c as PermissionHandlerConfig, d as PermissionHandlerResult, M as MultiplePermissionsConfig, e as MultiplePermissionsResult, f as PermissionCallbacks, g as PrePromptConfig, B as BlockedPromptConfig } from './types-QXyq8VnD.mjs';
2
+ export { h as MultiPermissionEntry, i as PermissionStatus } from './types-QXyq8VnD.mjs';
2
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
4
  import { ReactNode } from 'react';
4
5
 
5
- /**
6
- * States of the permission flow state machine.
7
- */
8
- type PermissionFlowState = "idle" | "checking" | "prePrompt" | "requesting" | "granted" | "denied" | "blocked" | "blockedPrompt" | "openingSettings" | "recheckingAfterSettings" | "unavailable";
9
- /**
10
- * Events that drive state transitions.
11
- */
12
- type PermissionFlowEvent = {
13
- type: "CHECK";
14
- } | {
15
- type: "CHECK_RESULT";
16
- status: PermissionStatus;
17
- } | {
18
- type: "PRE_PROMPT_CONFIRM";
19
- } | {
20
- type: "PRE_PROMPT_DISMISS";
21
- } | {
22
- type: "REQUEST_RESULT";
23
- status: PermissionStatus;
24
- } | {
25
- type: "OPEN_SETTINGS";
26
- } | {
27
- type: "SETTINGS_RETURN";
28
- } | {
29
- type: "RECHECK_RESULT";
30
- status: PermissionStatus;
31
- };
32
- /**
33
- * Configuration for the pre-prompt modal.
34
- */
35
- interface PrePromptConfig {
36
- title: string;
37
- message: string;
38
- confirmLabel?: string;
39
- cancelLabel?: string;
40
- }
41
- /**
42
- * Configuration for the blocked-prompt modal.
43
- */
44
- interface BlockedPromptConfig {
45
- title: string;
46
- message: string;
47
- settingsLabel?: string;
48
- }
49
- /**
50
- * Callbacks for analytics and side effects.
51
- */
52
- interface PermissionCallbacks {
53
- onGrant?: () => void;
54
- onDeny?: () => void;
55
- onBlock?: () => void;
56
- onSettingsReturn?: (granted: boolean) => void;
57
- }
58
- /**
59
- * Configuration for usePermissionHandler.
60
- */
61
- interface PermissionHandlerConfig extends PermissionCallbacks {
62
- permission: Permission | "notifications";
63
- prePrompt: PrePromptConfig;
64
- blockedPrompt: BlockedPromptConfig;
65
- autoCheck?: boolean;
66
- recheckOnForeground?: boolean;
67
- }
68
- /**
69
- * Return type of usePermissionHandler.
70
- */
71
- interface PermissionHandlerResult {
72
- state: PermissionFlowState;
73
- nativeStatus: PermissionStatus | null;
74
- isGranted: boolean;
75
- isDenied: boolean;
76
- isBlocked: boolean;
77
- isChecking: boolean;
78
- isUnavailable: boolean;
79
- request: () => void;
80
- check: () => void;
81
- dismiss: () => void;
82
- openSettings: () => void;
83
- }
84
- /**
85
- * Configuration for a single permission within useMultiplePermissions.
86
- */
87
- interface MultiPermissionEntry extends PermissionCallbacks {
88
- permission: Permission | "notifications";
89
- prePrompt: PrePromptConfig;
90
- blockedPrompt: BlockedPromptConfig;
91
- }
92
- /**
93
- * Configuration for useMultiplePermissions.
94
- */
95
- interface MultiplePermissionsConfig {
96
- permissions: MultiPermissionEntry[];
97
- strategy: "sequential" | "parallel";
98
- onAllGranted?: () => void;
99
- }
100
- /**
101
- * Return type of useMultiplePermissions.
102
- */
103
- interface MultiplePermissionsResult {
104
- statuses: Record<string, PermissionFlowState>;
105
- allGranted: boolean;
106
- request: () => void;
107
- }
6
+ declare function setDefaultEngine(engine: PermissionEngine): void;
108
7
 
109
8
  declare function transition(state: PermissionFlowState, event: PermissionFlowEvent): PermissionFlowState;
110
9
 
@@ -113,7 +12,8 @@ declare function usePermissionHandler(config: PermissionHandlerConfig): Permissi
113
12
  declare function useMultiplePermissions(config: MultiplePermissionsConfig): MultiplePermissionsResult;
114
13
 
115
14
  interface PermissionGateProps extends PermissionCallbacks {
116
- permission: Permission | "notifications";
15
+ permission: string;
16
+ engine?: PermissionEngine;
117
17
  prePrompt: PrePromptConfig;
118
18
  blockedPrompt: BlockedPromptConfig;
119
19
  children: ReactNode;
@@ -128,7 +28,7 @@ interface PermissionGateProps extends PermissionCallbacks {
128
28
  onOpenSettings: () => void;
129
29
  }) => ReactNode;
130
30
  }
131
- declare function PermissionGate({ permission, prePrompt, blockedPrompt, children, fallback, renderPrePrompt, renderBlockedPrompt, onGrant, onDeny, onBlock, onSettingsReturn, }: PermissionGateProps): react_jsx_runtime.JSX.Element;
31
+ declare function PermissionGate({ permission, engine, prePrompt, blockedPrompt, children, fallback, renderPrePrompt, renderBlockedPrompt, onGrant, onDeny, onBlock, onSettingsReturn, }: PermissionGateProps): react_jsx_runtime.JSX.Element;
132
32
 
133
33
  interface DefaultPrePromptProps extends PrePromptConfig {
134
34
  visible: boolean;
@@ -143,4 +43,4 @@ interface DefaultBlockedPromptProps extends BlockedPromptConfig {
143
43
  }
144
44
  declare function DefaultBlockedPrompt({ visible, title, message, settingsLabel, onOpenSettings, }: DefaultBlockedPromptProps): react_jsx_runtime.JSX.Element;
145
45
 
146
- export { type BlockedPromptConfig, DefaultBlockedPrompt, type DefaultBlockedPromptProps, DefaultPrePrompt, type DefaultPrePromptProps, type MultiPermissionEntry, type MultiplePermissionsConfig, type MultiplePermissionsResult, type PermissionCallbacks, type PermissionFlowEvent, type PermissionFlowState, PermissionGate, type PermissionGateProps, type PermissionHandlerConfig, type PermissionHandlerResult, type PrePromptConfig, transition, useMultiplePermissions, usePermissionHandler };
46
+ export { BlockedPromptConfig, DefaultBlockedPrompt, type DefaultBlockedPromptProps, DefaultPrePrompt, type DefaultPrePromptProps, MultiplePermissionsConfig, MultiplePermissionsResult, PermissionCallbacks, PermissionEngine, PermissionFlowEvent, PermissionFlowState, PermissionGate, type PermissionGateProps, PermissionHandlerConfig, PermissionHandlerResult, PrePromptConfig, setDefaultEngine, transition, useMultiplePermissions, usePermissionHandler };
package/dist/index.d.ts CHANGED
@@ -1,110 +1,9 @@
1
- import { Permission, PermissionStatus } from 'react-native-permissions';
1
+ import { P as PermissionEngine, a as PermissionFlowState, b as PermissionFlowEvent, c as PermissionHandlerConfig, d as PermissionHandlerResult, M as MultiplePermissionsConfig, e as MultiplePermissionsResult, f as PermissionCallbacks, g as PrePromptConfig, B as BlockedPromptConfig } from './types-QXyq8VnD.js';
2
+ export { h as MultiPermissionEntry, i as PermissionStatus } from './types-QXyq8VnD.js';
2
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
4
  import { ReactNode } from 'react';
4
5
 
5
- /**
6
- * States of the permission flow state machine.
7
- */
8
- type PermissionFlowState = "idle" | "checking" | "prePrompt" | "requesting" | "granted" | "denied" | "blocked" | "blockedPrompt" | "openingSettings" | "recheckingAfterSettings" | "unavailable";
9
- /**
10
- * Events that drive state transitions.
11
- */
12
- type PermissionFlowEvent = {
13
- type: "CHECK";
14
- } | {
15
- type: "CHECK_RESULT";
16
- status: PermissionStatus;
17
- } | {
18
- type: "PRE_PROMPT_CONFIRM";
19
- } | {
20
- type: "PRE_PROMPT_DISMISS";
21
- } | {
22
- type: "REQUEST_RESULT";
23
- status: PermissionStatus;
24
- } | {
25
- type: "OPEN_SETTINGS";
26
- } | {
27
- type: "SETTINGS_RETURN";
28
- } | {
29
- type: "RECHECK_RESULT";
30
- status: PermissionStatus;
31
- };
32
- /**
33
- * Configuration for the pre-prompt modal.
34
- */
35
- interface PrePromptConfig {
36
- title: string;
37
- message: string;
38
- confirmLabel?: string;
39
- cancelLabel?: string;
40
- }
41
- /**
42
- * Configuration for the blocked-prompt modal.
43
- */
44
- interface BlockedPromptConfig {
45
- title: string;
46
- message: string;
47
- settingsLabel?: string;
48
- }
49
- /**
50
- * Callbacks for analytics and side effects.
51
- */
52
- interface PermissionCallbacks {
53
- onGrant?: () => void;
54
- onDeny?: () => void;
55
- onBlock?: () => void;
56
- onSettingsReturn?: (granted: boolean) => void;
57
- }
58
- /**
59
- * Configuration for usePermissionHandler.
60
- */
61
- interface PermissionHandlerConfig extends PermissionCallbacks {
62
- permission: Permission | "notifications";
63
- prePrompt: PrePromptConfig;
64
- blockedPrompt: BlockedPromptConfig;
65
- autoCheck?: boolean;
66
- recheckOnForeground?: boolean;
67
- }
68
- /**
69
- * Return type of usePermissionHandler.
70
- */
71
- interface PermissionHandlerResult {
72
- state: PermissionFlowState;
73
- nativeStatus: PermissionStatus | null;
74
- isGranted: boolean;
75
- isDenied: boolean;
76
- isBlocked: boolean;
77
- isChecking: boolean;
78
- isUnavailable: boolean;
79
- request: () => void;
80
- check: () => void;
81
- dismiss: () => void;
82
- openSettings: () => void;
83
- }
84
- /**
85
- * Configuration for a single permission within useMultiplePermissions.
86
- */
87
- interface MultiPermissionEntry extends PermissionCallbacks {
88
- permission: Permission | "notifications";
89
- prePrompt: PrePromptConfig;
90
- blockedPrompt: BlockedPromptConfig;
91
- }
92
- /**
93
- * Configuration for useMultiplePermissions.
94
- */
95
- interface MultiplePermissionsConfig {
96
- permissions: MultiPermissionEntry[];
97
- strategy: "sequential" | "parallel";
98
- onAllGranted?: () => void;
99
- }
100
- /**
101
- * Return type of useMultiplePermissions.
102
- */
103
- interface MultiplePermissionsResult {
104
- statuses: Record<string, PermissionFlowState>;
105
- allGranted: boolean;
106
- request: () => void;
107
- }
6
+ declare function setDefaultEngine(engine: PermissionEngine): void;
108
7
 
109
8
  declare function transition(state: PermissionFlowState, event: PermissionFlowEvent): PermissionFlowState;
110
9
 
@@ -113,7 +12,8 @@ declare function usePermissionHandler(config: PermissionHandlerConfig): Permissi
113
12
  declare function useMultiplePermissions(config: MultiplePermissionsConfig): MultiplePermissionsResult;
114
13
 
115
14
  interface PermissionGateProps extends PermissionCallbacks {
116
- permission: Permission | "notifications";
15
+ permission: string;
16
+ engine?: PermissionEngine;
117
17
  prePrompt: PrePromptConfig;
118
18
  blockedPrompt: BlockedPromptConfig;
119
19
  children: ReactNode;
@@ -128,7 +28,7 @@ interface PermissionGateProps extends PermissionCallbacks {
128
28
  onOpenSettings: () => void;
129
29
  }) => ReactNode;
130
30
  }
131
- declare function PermissionGate({ permission, prePrompt, blockedPrompt, children, fallback, renderPrePrompt, renderBlockedPrompt, onGrant, onDeny, onBlock, onSettingsReturn, }: PermissionGateProps): react_jsx_runtime.JSX.Element;
31
+ declare function PermissionGate({ permission, engine, prePrompt, blockedPrompt, children, fallback, renderPrePrompt, renderBlockedPrompt, onGrant, onDeny, onBlock, onSettingsReturn, }: PermissionGateProps): react_jsx_runtime.JSX.Element;
132
32
 
133
33
  interface DefaultPrePromptProps extends PrePromptConfig {
134
34
  visible: boolean;
@@ -143,4 +43,4 @@ interface DefaultBlockedPromptProps extends BlockedPromptConfig {
143
43
  }
144
44
  declare function DefaultBlockedPrompt({ visible, title, message, settingsLabel, onOpenSettings, }: DefaultBlockedPromptProps): react_jsx_runtime.JSX.Element;
145
45
 
146
- export { type BlockedPromptConfig, DefaultBlockedPrompt, type DefaultBlockedPromptProps, DefaultPrePrompt, type DefaultPrePromptProps, type MultiPermissionEntry, type MultiplePermissionsConfig, type MultiplePermissionsResult, type PermissionCallbacks, type PermissionFlowEvent, type PermissionFlowState, PermissionGate, type PermissionGateProps, type PermissionHandlerConfig, type PermissionHandlerResult, type PrePromptConfig, transition, useMultiplePermissions, usePermissionHandler };
46
+ export { BlockedPromptConfig, DefaultBlockedPrompt, type DefaultBlockedPromptProps, DefaultPrePrompt, type DefaultPrePromptProps, MultiplePermissionsConfig, MultiplePermissionsResult, PermissionCallbacks, PermissionEngine, PermissionFlowEvent, PermissionFlowState, PermissionGate, type PermissionGateProps, PermissionHandlerConfig, PermissionHandlerResult, PrePromptConfig, setDefaultEngine, transition, useMultiplePermissions, usePermissionHandler };