1import { NativeModulesProxy, ProxyNativeModule } from '@unimodules/core';
2import { PermissionResponse } from 'unimodules-permissions-interface';
3
4export enum IosAlertStyle {
5  NONE = 0,
6  BANNER = 1,
7  ALERT = 2,
8}
9
10export enum IosAllowsPreviews {
11  NEVER = 0,
12  ALWAYS = 1,
13  WHEN_AUTHENTICATED = 2,
14}
15
16export enum IosAuthorizationStatus {
17  NOT_DETERMINED = 0,
18  DENIED = 1,
19  AUTHORIZED = 2,
20  PROVISIONAL = 3,
21}
22
23export interface NotificationPermissionsStatus extends PermissionResponse {
24  android?: {
25    importance: number;
26    interruptionFilter?: number;
27  };
28  ios?: {
29    status: IosAuthorizationStatus;
30    allowsDisplayInNotificationCenter: boolean | null;
31    allowsDisplayOnLockScreen: boolean | null;
32    allowsDisplayInCarPlay: boolean | null;
33    allowsAlert: boolean | null;
34    allowsBadge: boolean | null;
35    allowsSound: boolean | null;
36    allowsCriticalAlerts?: boolean | null;
37    alertStyle: IosAlertStyle;
38    allowsPreviews?: IosAllowsPreviews;
39    providesAppNotificationSettings?: boolean;
40    allowsAnnouncements?: boolean | null;
41  };
42}
43
44export interface IosNotificationPermissionsRequest {
45  allowAlert?: boolean;
46  allowBadge?: boolean;
47  allowSound?: boolean;
48  allowDisplayInCarPlay?: boolean;
49  allowCriticalAlerts?: boolean;
50  provideAppNotificationSettings?: boolean;
51  allowProvisional?: boolean;
52  allowAnnouncements?: boolean;
53}
54
55export interface AndroidNotificationPermissionRequest {}
56
57export type NativeNotificationPermissionsRequest =
58  | IosNotificationPermissionsRequest
59  | AndroidNotificationPermissionRequest;
60
61export interface NotificationPermissionsModule extends ProxyNativeModule {
62  getPermissionsAsync: () => Promise<NotificationPermissionsStatus>;
63  requestPermissionsAsync: (
64    request: NativeNotificationPermissionsRequest
65  ) => Promise<NotificationPermissionsStatus>;
66}
67
68export default (NativeModulesProxy.ExpoNotificationPermissionsModule as any) as NotificationPermissionsModule;
69