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.
- package/README.md +212 -53
- package/dist/chunk-EU3KPRTI.mjs +81 -0
- package/dist/chunk-EU3KPRTI.mjs.map +1 -0
- package/dist/chunk-NFEGQTCC.mjs +27 -0
- package/dist/chunk-NFEGQTCC.mjs.map +1 -0
- package/dist/engines/expo.d.mts +18 -0
- package/dist/engines/expo.d.ts +18 -0
- package/dist/engines/expo.js +58 -0
- package/dist/engines/expo.js.map +1 -0
- package/dist/engines/expo.mjs +35 -0
- package/dist/engines/expo.mjs.map +1 -0
- package/dist/engines/rnp.d.mts +22 -0
- package/dist/engines/rnp.d.ts +22 -0
- package/dist/engines/rnp.js +83 -0
- package/dist/engines/rnp.js.map +1 -0
- package/dist/engines/rnp.mjs +12 -0
- package/dist/engines/rnp.mjs.map +1 -0
- package/dist/index.d.mts +7 -107
- package/dist/index.d.ts +7 -107
- package/dist/index.js +175 -76
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +98 -70
- package/dist/index.mjs.map +1 -1
- package/dist/types-QXyq8VnD.d.mts +122 -0
- package/dist/types-QXyq8VnD.d.ts +122 -0
- package/package.json +27 -2
- package/src/components/permission-gate.tsx +10 -3
- package/src/engines/expo.test.ts +122 -0
- package/src/engines/expo.ts +45 -0
- package/src/engines/resolve.test.ts +85 -0
- package/src/engines/resolve.ts +11 -0
- package/src/engines/rnp-fallback.ts +23 -0
- package/src/engines/rnp.test.ts +122 -0
- package/src/engines/rnp.ts +68 -0
- package/src/engines/use-engine.ts +10 -0
- package/src/hooks/use-multiple-permissions.test.ts +94 -54
- package/src/hooks/use-multiple-permissions.ts +52 -39
- package/src/hooks/use-permission-handler.test.ts +59 -49
- package/src/hooks/use-permission-handler.ts +11 -40
- package/src/index.ts +3 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,110 +1,9 @@
|
|
|
1
|
-
import {
|
|
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:
|
|
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 {
|
|
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 {
|
|
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:
|
|
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 {
|
|
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 };
|