@amazon-devices/expo-notifications 2.0.9000000000-rn-83

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 (686) hide show
  1. package/.eslintrc.js +2 -0
  2. package/CHANGELOG.md +478 -0
  3. package/LICENSE +7 -0
  4. package/README.kepler.md +3 -0
  5. package/README.md +2003 -0
  6. package/THIRD_PARTY_NOTICES.txt +4 -0
  7. package/android/build.gradle +125 -0
  8. package/android/src/main/AndroidManifest.xml +39 -0
  9. package/android/src/main/java/expo/modules/notifications/Exceptions.kt +22 -0
  10. package/android/src/main/java/expo/modules/notifications/NotificationsPackage.java +34 -0
  11. package/android/src/main/java/expo/modules/notifications/Utils.kt +19 -0
  12. package/android/src/main/java/expo/modules/notifications/badge/BadgeHelper.kt +24 -0
  13. package/android/src/main/java/expo/modules/notifications/badge/BadgeModule.kt +22 -0
  14. package/android/src/main/java/expo/modules/notifications/notifications/ArgumentsNotificationContentBuilder.java +149 -0
  15. package/android/src/main/java/expo/modules/notifications/notifications/JSONNotificationContentBuilder.java +203 -0
  16. package/android/src/main/java/expo/modules/notifications/notifications/NotificationManager.java +119 -0
  17. package/android/src/main/java/expo/modules/notifications/notifications/NotificationSerializer.java +202 -0
  18. package/android/src/main/java/expo/modules/notifications/notifications/RemoteMessageSerializer.java +104 -0
  19. package/android/src/main/java/expo/modules/notifications/notifications/SoundResolver.java +58 -0
  20. package/android/src/main/java/expo/modules/notifications/notifications/background/BackgroundRemoteNotificationTaskConsumer.java +123 -0
  21. package/android/src/main/java/expo/modules/notifications/notifications/background/ExpoBackgroundNotificationTasksModule.kt +33 -0
  22. package/android/src/main/java/expo/modules/notifications/notifications/categories/ExpoNotificationCategoriesModule.kt +149 -0
  23. package/android/src/main/java/expo/modules/notifications/notifications/categories/serializers/ExpoNotificationsCategoriesSerializer.java +67 -0
  24. package/android/src/main/java/expo/modules/notifications/notifications/categories/serializers/NotificationsCategoriesSerializer.java +11 -0
  25. package/android/src/main/java/expo/modules/notifications/notifications/channels/AbstractNotificationsChannelsProvider.java +81 -0
  26. package/android/src/main/java/expo/modules/notifications/notifications/channels/AndroidXNotificationsChannelsProvider.java +38 -0
  27. package/android/src/main/java/expo/modules/notifications/notifications/channels/InvalidVibrationPatternException.java +14 -0
  28. package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationChannelGroupManagerModule.kt +70 -0
  29. package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationChannelManagerModule.kt +83 -0
  30. package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationsChannelsProvider.java +13 -0
  31. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/AndroidXNotificationsChannelGroupManager.java +67 -0
  32. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/AndroidXNotificationsChannelManager.java +196 -0
  33. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/NotificationsChannelGroupManager.java +28 -0
  34. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/NotificationsChannelManager.java +28 -0
  35. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/ExpoNotificationsChannelGroupSerializer.java +55 -0
  36. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/ExpoNotificationsChannelSerializer.java +101 -0
  37. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/NotificationsChannelGroupSerializer.java +20 -0
  38. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/NotificationsChannelSerializer.java +35 -0
  39. package/android/src/main/java/expo/modules/notifications/notifications/emitting/NotificationsEmitter.kt +78 -0
  40. package/android/src/main/java/expo/modules/notifications/notifications/enums/AudioContentType.java +45 -0
  41. package/android/src/main/java/expo/modules/notifications/notifications/enums/AudioUsage.java +55 -0
  42. package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationImportance.java +48 -0
  43. package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationPriority.java +51 -0
  44. package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationVisibility.java +44 -0
  45. package/android/src/main/java/expo/modules/notifications/notifications/handling/NotificationsHandler.kt +127 -0
  46. package/android/src/main/java/expo/modules/notifications/notifications/handling/SingleNotificationHandlerTask.java +131 -0
  47. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationBuilder.java +35 -0
  48. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationListener.java +37 -0
  49. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationManager.java +22 -0
  50. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationPresentationEffect.java +11 -0
  51. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationPresentationEffectsManager.java +7 -0
  52. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationTrigger.java +19 -0
  53. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/SchedulableNotificationTrigger.java +20 -0
  54. package/android/src/main/java/expo/modules/notifications/notifications/model/Notification.java +59 -0
  55. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationAction.java +63 -0
  56. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationBehavior.java +84 -0
  57. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationCategory.java +61 -0
  58. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java +356 -0
  59. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationRequest.java +66 -0
  60. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationResponse.java +60 -0
  61. package/android/src/main/java/expo/modules/notifications/notifications/model/TextInputNotificationAction.java +42 -0
  62. package/android/src/main/java/expo/modules/notifications/notifications/model/TextInputNotificationResponse.java +42 -0
  63. package/android/src/main/java/expo/modules/notifications/notifications/model/triggers/FirebaseNotificationTrigger.java +61 -0
  64. package/android/src/main/java/expo/modules/notifications/notifications/presentation/ExpoNotificationPresentationEffectsManager.java +63 -0
  65. package/android/src/main/java/expo/modules/notifications/notifications/presentation/ExpoNotificationPresentationModule.kt +113 -0
  66. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/BaseNotificationBuilder.java +50 -0
  67. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/CategoryAwareNotificationBuilder.java +80 -0
  68. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ChannelAwareNotificationBuilder.java +135 -0
  69. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java +295 -0
  70. package/android/src/main/java/expo/modules/notifications/notifications/presentation/effects/BaseNotificationEffect.java +53 -0
  71. package/android/src/main/java/expo/modules/notifications/notifications/scheduling/NotificationScheduler.kt +235 -0
  72. package/android/src/main/java/expo/modules/notifications/notifications/triggers/ChannelAwareTrigger.java +49 -0
  73. package/android/src/main/java/expo/modules/notifications/notifications/triggers/DailyTrigger.java +76 -0
  74. package/android/src/main/java/expo/modules/notifications/notifications/triggers/DateTrigger.java +64 -0
  75. package/android/src/main/java/expo/modules/notifications/notifications/triggers/TimeIntervalTrigger.java +87 -0
  76. package/android/src/main/java/expo/modules/notifications/notifications/triggers/WeeklyTrigger.java +85 -0
  77. package/android/src/main/java/expo/modules/notifications/notifications/triggers/YearlyTrigger.java +94 -0
  78. package/android/src/main/java/expo/modules/notifications/permissions/NotificationPermissionsModule.kt +124 -0
  79. package/android/src/main/java/expo/modules/notifications/serverregistration/InstallationId.java +134 -0
  80. package/android/src/main/java/expo/modules/notifications/serverregistration/RegistrationInfo.kt +24 -0
  81. package/android/src/main/java/expo/modules/notifications/serverregistration/ServerRegistrationModule.kt +32 -0
  82. package/android/src/main/java/expo/modules/notifications/service/ExpoFirebaseMessagingService.kt +15 -0
  83. package/android/src/main/java/expo/modules/notifications/service/NotificationForwarderActivity.kt +33 -0
  84. package/android/src/main/java/expo/modules/notifications/service/NotificationsService.kt +780 -0
  85. package/android/src/main/java/expo/modules/notifications/service/delegates/Base64Serialization.kt +33 -0
  86. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoCategoriesDelegate.kt +21 -0
  87. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoHandlingDelegate.kt +146 -0
  88. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoPresentationDelegate.kt +193 -0
  89. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoSchedulingDelegate.kt +117 -0
  90. package/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt +126 -0
  91. package/android/src/main/java/expo/modules/notifications/service/delegates/SharedPreferencesNotificationCategoriesStore.kt +106 -0
  92. package/android/src/main/java/expo/modules/notifications/service/delegates/SharedPreferencesNotificationsStore.kt +119 -0
  93. package/android/src/main/java/expo/modules/notifications/service/interfaces/CategoriesDelegate.kt +14 -0
  94. package/android/src/main/java/expo/modules/notifications/service/interfaces/FirebaseMessagingDelegate.kt +20 -0
  95. package/android/src/main/java/expo/modules/notifications/service/interfaces/HandlingDelegate.kt +10 -0
  96. package/android/src/main/java/expo/modules/notifications/service/interfaces/PresentationDelegate.kt +11 -0
  97. package/android/src/main/java/expo/modules/notifications/service/interfaces/SchedulingDelegate.kt +13 -0
  98. package/android/src/main/java/expo/modules/notifications/tokens/PushTokenManager.java +88 -0
  99. package/android/src/main/java/expo/modules/notifications/tokens/PushTokenModule.kt +91 -0
  100. package/android/src/main/java/expo/modules/notifications/tokens/interfaces/FirebaseTokenListener.java +16 -0
  101. package/android/src/main/java/expo/modules/notifications/tokens/interfaces/PushTokenListener.java +14 -0
  102. package/android/src/main/java/expo/modules/notifications/tokens/interfaces/PushTokenManager.java +22 -0
  103. package/android/src/main/res/values/strings.xml +4 -0
  104. package/app.plugin.js +1 -0
  105. package/build/BackgroundNotificationTasksModule.d.ts +4 -0
  106. package/build/BackgroundNotificationTasksModule.d.ts.map +1 -0
  107. package/build/BackgroundNotificationTasksModule.js +7 -0
  108. package/build/BackgroundNotificationTasksModule.js.map +1 -0
  109. package/build/BackgroundNotificationTasksModule.kepler.d.ts +3 -0
  110. package/build/BackgroundNotificationTasksModule.kepler.d.ts.map +1 -0
  111. package/build/BackgroundNotificationTasksModule.kepler.js +9 -0
  112. package/build/BackgroundNotificationTasksModule.kepler.js.map +1 -0
  113. package/build/BackgroundNotificationTasksModule.native.d.ts +4 -0
  114. package/build/BackgroundNotificationTasksModule.native.d.ts.map +1 -0
  115. package/build/BackgroundNotificationTasksModule.native.js +3 -0
  116. package/build/BackgroundNotificationTasksModule.native.js.map +1 -0
  117. package/build/BackgroundNotificationTasksModule.types.d.ts +11 -0
  118. package/build/BackgroundNotificationTasksModule.types.d.ts.map +1 -0
  119. package/build/BackgroundNotificationTasksModule.types.js +7 -0
  120. package/build/BackgroundNotificationTasksModule.types.js.map +1 -0
  121. package/build/BackgroundNotificationTasksModule.web.d.ts +6 -0
  122. package/build/BackgroundNotificationTasksModule.web.d.ts.map +1 -0
  123. package/build/BackgroundNotificationTasksModule.web.js +9 -0
  124. package/build/BackgroundNotificationTasksModule.web.js.map +1 -0
  125. package/build/BadgeModule.d.ts +4 -0
  126. package/build/BadgeModule.d.ts.map +1 -0
  127. package/build/BadgeModule.js +5 -0
  128. package/build/BadgeModule.js.map +1 -0
  129. package/build/BadgeModule.kepler.d.ts +3 -0
  130. package/build/BadgeModule.kepler.d.ts.map +1 -0
  131. package/build/BadgeModule.kepler.js +9 -0
  132. package/build/BadgeModule.kepler.js.map +1 -0
  133. package/build/BadgeModule.native.d.ts +4 -0
  134. package/build/BadgeModule.native.d.ts.map +1 -0
  135. package/build/BadgeModule.native.js +12 -0
  136. package/build/BadgeModule.native.js.map +1 -0
  137. package/build/BadgeModule.types.d.ts +10 -0
  138. package/build/BadgeModule.types.d.ts.map +1 -0
  139. package/build/BadgeModule.types.js +2 -0
  140. package/build/BadgeModule.types.js.map +1 -0
  141. package/build/BadgeModule.web.d.ts +4 -0
  142. package/build/BadgeModule.web.d.ts.map +1 -0
  143. package/build/BadgeModule.web.js +26 -0
  144. package/build/BadgeModule.web.js.map +1 -0
  145. package/build/DevicePushTokenAutoRegistration.fx.d.ts +15 -0
  146. package/build/DevicePushTokenAutoRegistration.fx.d.ts.map +1 -0
  147. package/build/DevicePushTokenAutoRegistration.fx.js +87 -0
  148. package/build/DevicePushTokenAutoRegistration.fx.js.map +1 -0
  149. package/build/NotificationCategoriesModule.d.ts +4 -0
  150. package/build/NotificationCategoriesModule.d.ts.map +1 -0
  151. package/build/NotificationCategoriesModule.js +13 -0
  152. package/build/NotificationCategoriesModule.js.map +1 -0
  153. package/build/NotificationCategoriesModule.kepler.d.ts +3 -0
  154. package/build/NotificationCategoriesModule.kepler.d.ts.map +1 -0
  155. package/build/NotificationCategoriesModule.kepler.js +10 -0
  156. package/build/NotificationCategoriesModule.kepler.js.map +1 -0
  157. package/build/NotificationCategoriesModule.native.d.ts +4 -0
  158. package/build/NotificationCategoriesModule.native.d.ts.map +1 -0
  159. package/build/NotificationCategoriesModule.native.js +3 -0
  160. package/build/NotificationCategoriesModule.native.js.map +1 -0
  161. package/build/NotificationCategoriesModule.types.d.ts +17 -0
  162. package/build/NotificationCategoriesModule.types.d.ts.map +1 -0
  163. package/build/NotificationCategoriesModule.types.js +2 -0
  164. package/build/NotificationCategoriesModule.types.js.map +1 -0
  165. package/build/NotificationCategoriesModule.web.d.ts +8 -0
  166. package/build/NotificationCategoriesModule.web.d.ts.map +1 -0
  167. package/build/NotificationCategoriesModule.web.js +12 -0
  168. package/build/NotificationCategoriesModule.web.js.map +1 -0
  169. package/build/NotificationChannelGroupManager.d.ts +4 -0
  170. package/build/NotificationChannelGroupManager.d.ts.map +1 -0
  171. package/build/NotificationChannelGroupManager.js +5 -0
  172. package/build/NotificationChannelGroupManager.js.map +1 -0
  173. package/build/NotificationChannelGroupManager.kepler.d.ts +3 -0
  174. package/build/NotificationChannelGroupManager.kepler.d.ts.map +1 -0
  175. package/build/NotificationChannelGroupManager.kepler.js +9 -0
  176. package/build/NotificationChannelGroupManager.kepler.js.map +1 -0
  177. package/build/NotificationChannelGroupManager.native.d.ts +4 -0
  178. package/build/NotificationChannelGroupManager.native.d.ts.map +1 -0
  179. package/build/NotificationChannelGroupManager.native.js +3 -0
  180. package/build/NotificationChannelGroupManager.native.js.map +1 -0
  181. package/build/NotificationChannelGroupManager.types.d.ts +28 -0
  182. package/build/NotificationChannelGroupManager.types.d.ts.map +1 -0
  183. package/build/NotificationChannelGroupManager.types.js +2 -0
  184. package/build/NotificationChannelGroupManager.types.js.map +1 -0
  185. package/build/NotificationChannelManager.d.ts +4 -0
  186. package/build/NotificationChannelManager.d.ts.map +1 -0
  187. package/build/NotificationChannelManager.js +5 -0
  188. package/build/NotificationChannelManager.js.map +1 -0
  189. package/build/NotificationChannelManager.kepler.d.ts +3 -0
  190. package/build/NotificationChannelManager.kepler.d.ts.map +1 -0
  191. package/build/NotificationChannelManager.kepler.js +9 -0
  192. package/build/NotificationChannelManager.kepler.js.map +1 -0
  193. package/build/NotificationChannelManager.native.d.ts +4 -0
  194. package/build/NotificationChannelManager.native.d.ts.map +1 -0
  195. package/build/NotificationChannelManager.native.js +3 -0
  196. package/build/NotificationChannelManager.native.js.map +1 -0
  197. package/build/NotificationChannelManager.types.d.ts +91 -0
  198. package/build/NotificationChannelManager.types.d.ts.map +1 -0
  199. package/build/NotificationChannelManager.types.js +53 -0
  200. package/build/NotificationChannelManager.types.js.map +1 -0
  201. package/build/NotificationPermissions.d.ts +56 -0
  202. package/build/NotificationPermissions.d.ts.map +1 -0
  203. package/build/NotificationPermissions.js +79 -0
  204. package/build/NotificationPermissions.js.map +1 -0
  205. package/build/NotificationPermissions.types.d.ts +94 -0
  206. package/build/NotificationPermissions.types.d.ts.map +1 -0
  207. package/build/NotificationPermissions.types.js +21 -0
  208. package/build/NotificationPermissions.types.js.map +1 -0
  209. package/build/NotificationPermissionsModule.d.ts +4 -0
  210. package/build/NotificationPermissionsModule.d.ts.map +1 -0
  211. package/build/NotificationPermissionsModule.js +67 -0
  212. package/build/NotificationPermissionsModule.js.map +1 -0
  213. package/build/NotificationPermissionsModule.kepler.d.ts +3 -0
  214. package/build/NotificationPermissionsModule.kepler.d.ts.map +1 -0
  215. package/build/NotificationPermissionsModule.kepler.js +9 -0
  216. package/build/NotificationPermissionsModule.kepler.js.map +1 -0
  217. package/build/NotificationPermissionsModule.native.d.ts +4 -0
  218. package/build/NotificationPermissionsModule.native.d.ts.map +1 -0
  219. package/build/NotificationPermissionsModule.native.js +3 -0
  220. package/build/NotificationPermissionsModule.native.js.map +1 -0
  221. package/build/NotificationPermissionsModule.types.d.ts +7 -0
  222. package/build/NotificationPermissionsModule.types.d.ts.map +1 -0
  223. package/build/NotificationPermissionsModule.types.js +2 -0
  224. package/build/NotificationPermissionsModule.types.js.map +1 -0
  225. package/build/NotificationPresenterModule.d.ts +4 -0
  226. package/build/NotificationPresenterModule.d.ts.map +1 -0
  227. package/build/NotificationPresenterModule.js +5 -0
  228. package/build/NotificationPresenterModule.js.map +1 -0
  229. package/build/NotificationPresenterModule.kepler.d.ts +4 -0
  230. package/build/NotificationPresenterModule.kepler.d.ts.map +1 -0
  231. package/build/NotificationPresenterModule.kepler.js +55 -0
  232. package/build/NotificationPresenterModule.kepler.js.map +1 -0
  233. package/build/NotificationPresenterModule.native.d.ts +4 -0
  234. package/build/NotificationPresenterModule.native.d.ts.map +1 -0
  235. package/build/NotificationPresenterModule.native.js +3 -0
  236. package/build/NotificationPresenterModule.native.js.map +1 -0
  237. package/build/NotificationPresenterModule.types.d.ts +9 -0
  238. package/build/NotificationPresenterModule.types.d.ts.map +1 -0
  239. package/build/NotificationPresenterModule.types.js +2 -0
  240. package/build/NotificationPresenterModule.types.js.map +1 -0
  241. package/build/NotificationScheduler.d.ts +4 -0
  242. package/build/NotificationScheduler.d.ts.map +1 -0
  243. package/build/NotificationScheduler.js +5 -0
  244. package/build/NotificationScheduler.js.map +1 -0
  245. package/build/NotificationScheduler.kepler.d.ts +4 -0
  246. package/build/NotificationScheduler.kepler.d.ts.map +1 -0
  247. package/build/NotificationScheduler.kepler.js +50 -0
  248. package/build/NotificationScheduler.kepler.js.map +1 -0
  249. package/build/NotificationScheduler.native.d.ts +4 -0
  250. package/build/NotificationScheduler.native.d.ts.map +1 -0
  251. package/build/NotificationScheduler.native.js +3 -0
  252. package/build/NotificationScheduler.native.js.map +1 -0
  253. package/build/NotificationScheduler.types.d.ts +65 -0
  254. package/build/NotificationScheduler.types.d.ts.map +1 -0
  255. package/build/NotificationScheduler.types.js +2 -0
  256. package/build/NotificationScheduler.types.js.map +1 -0
  257. package/build/Notifications.types.d.ts +666 -0
  258. package/build/Notifications.types.d.ts.map +1 -0
  259. package/build/Notifications.types.js +12 -0
  260. package/build/Notifications.types.js.map +1 -0
  261. package/build/NotificationsEmitter.d.ts +75 -0
  262. package/build/NotificationsEmitter.d.ts.map +1 -0
  263. package/build/NotificationsEmitter.js +95 -0
  264. package/build/NotificationsEmitter.js.map +1 -0
  265. package/build/NotificationsEmitterModule.d.ts +4 -0
  266. package/build/NotificationsEmitterModule.d.ts.map +1 -0
  267. package/build/NotificationsEmitterModule.js +12 -0
  268. package/build/NotificationsEmitterModule.js.map +1 -0
  269. package/build/NotificationsEmitterModule.kepler.d.ts +3 -0
  270. package/build/NotificationsEmitterModule.kepler.d.ts.map +1 -0
  271. package/build/NotificationsEmitterModule.kepler.js +9 -0
  272. package/build/NotificationsEmitterModule.kepler.js.map +1 -0
  273. package/build/NotificationsEmitterModule.native.d.ts +4 -0
  274. package/build/NotificationsEmitterModule.native.d.ts.map +1 -0
  275. package/build/NotificationsEmitterModule.native.js +3 -0
  276. package/build/NotificationsEmitterModule.native.js.map +1 -0
  277. package/build/NotificationsEmitterModule.types.d.ts +6 -0
  278. package/build/NotificationsEmitterModule.types.d.ts.map +1 -0
  279. package/build/NotificationsEmitterModule.types.js +2 -0
  280. package/build/NotificationsEmitterModule.types.js.map +1 -0
  281. package/build/NotificationsHandler.d.ts +60 -0
  282. package/build/NotificationsHandler.d.ts.map +1 -0
  283. package/build/NotificationsHandler.js +72 -0
  284. package/build/NotificationsHandler.js.map +1 -0
  285. package/build/NotificationsHandlerModule.d.ts +4 -0
  286. package/build/NotificationsHandlerModule.d.ts.map +1 -0
  287. package/build/NotificationsHandlerModule.js +12 -0
  288. package/build/NotificationsHandlerModule.js.map +1 -0
  289. package/build/NotificationsHandlerModule.kepler.d.ts +3 -0
  290. package/build/NotificationsHandlerModule.kepler.d.ts.map +1 -0
  291. package/build/NotificationsHandlerModule.kepler.js +9 -0
  292. package/build/NotificationsHandlerModule.kepler.js.map +1 -0
  293. package/build/NotificationsHandlerModule.native.d.ts +4 -0
  294. package/build/NotificationsHandlerModule.native.d.ts.map +1 -0
  295. package/build/NotificationsHandlerModule.native.js +3 -0
  296. package/build/NotificationsHandlerModule.native.js.map +1 -0
  297. package/build/NotificationsHandlerModule.types.d.ts +6 -0
  298. package/build/NotificationsHandlerModule.types.d.ts.map +1 -0
  299. package/build/NotificationsHandlerModule.types.js +2 -0
  300. package/build/NotificationsHandlerModule.types.js.map +1 -0
  301. package/build/PushTokenManager.d.ts +4 -0
  302. package/build/PushTokenManager.d.ts.map +1 -0
  303. package/build/PushTokenManager.js +12 -0
  304. package/build/PushTokenManager.js.map +1 -0
  305. package/build/PushTokenManager.kepler.d.ts +3 -0
  306. package/build/PushTokenManager.kepler.d.ts.map +1 -0
  307. package/build/PushTokenManager.kepler.js +9 -0
  308. package/build/PushTokenManager.kepler.js.map +1 -0
  309. package/build/PushTokenManager.native.d.ts +4 -0
  310. package/build/PushTokenManager.native.d.ts.map +1 -0
  311. package/build/PushTokenManager.native.js +3 -0
  312. package/build/PushTokenManager.native.js.map +1 -0
  313. package/build/PushTokenManager.types.d.ts +6 -0
  314. package/build/PushTokenManager.types.d.ts.map +1 -0
  315. package/build/PushTokenManager.types.js +2 -0
  316. package/build/PushTokenManager.types.js.map +1 -0
  317. package/build/ServerRegistrationModule.d.ts +4 -0
  318. package/build/ServerRegistrationModule.d.ts.map +1 -0
  319. package/build/ServerRegistrationModule.js +5 -0
  320. package/build/ServerRegistrationModule.js.map +1 -0
  321. package/build/ServerRegistrationModule.kepler.d.ts +3 -0
  322. package/build/ServerRegistrationModule.kepler.d.ts.map +1 -0
  323. package/build/ServerRegistrationModule.kepler.js +9 -0
  324. package/build/ServerRegistrationModule.kepler.js.map +1 -0
  325. package/build/ServerRegistrationModule.native.d.ts +4 -0
  326. package/build/ServerRegistrationModule.native.d.ts.map +1 -0
  327. package/build/ServerRegistrationModule.native.js +3 -0
  328. package/build/ServerRegistrationModule.native.js.map +1 -0
  329. package/build/ServerRegistrationModule.types.d.ts +7 -0
  330. package/build/ServerRegistrationModule.types.d.ts.map +1 -0
  331. package/build/ServerRegistrationModule.types.js +2 -0
  332. package/build/ServerRegistrationModule.types.js.map +1 -0
  333. package/build/ServerRegistrationModule.web.d.ts +4 -0
  334. package/build/ServerRegistrationModule.web.d.ts.map +1 -0
  335. package/build/ServerRegistrationModule.web.js +50 -0
  336. package/build/ServerRegistrationModule.web.js.map +1 -0
  337. package/build/TokenEmitter.d.ts +42 -0
  338. package/build/TokenEmitter.d.ts.map +1 -0
  339. package/build/TokenEmitter.js +44 -0
  340. package/build/TokenEmitter.js.map +1 -0
  341. package/build/Tokens.types.d.ts +99 -0
  342. package/build/Tokens.types.d.ts.map +1 -0
  343. package/build/Tokens.types.js +2 -0
  344. package/build/Tokens.types.js.map +1 -0
  345. package/build/cancelAllScheduledNotificationsAsync.d.ts +7 -0
  346. package/build/cancelAllScheduledNotificationsAsync.d.ts.map +1 -0
  347. package/build/cancelAllScheduledNotificationsAsync.js +14 -0
  348. package/build/cancelAllScheduledNotificationsAsync.js.map +1 -0
  349. package/build/cancelScheduledNotificationAsync.d.ts +22 -0
  350. package/build/cancelScheduledNotificationAsync.d.ts.map +1 -0
  351. package/build/cancelScheduledNotificationAsync.js +29 -0
  352. package/build/cancelScheduledNotificationAsync.js.map +1 -0
  353. package/build/deleteNotificationCategoryAsync.d.ts +11 -0
  354. package/build/deleteNotificationCategoryAsync.d.ts.map +1 -0
  355. package/build/deleteNotificationCategoryAsync.js +19 -0
  356. package/build/deleteNotificationCategoryAsync.js.map +1 -0
  357. package/build/deleteNotificationChannelAsync.android.d.ts +2 -0
  358. package/build/deleteNotificationChannelAsync.android.d.ts.map +1 -0
  359. package/build/deleteNotificationChannelAsync.android.js +9 -0
  360. package/build/deleteNotificationChannelAsync.android.js.map +1 -0
  361. package/build/deleteNotificationChannelAsync.d.ts +9 -0
  362. package/build/deleteNotificationChannelAsync.d.ts.map +1 -0
  363. package/build/deleteNotificationChannelAsync.js +11 -0
  364. package/build/deleteNotificationChannelAsync.js.map +1 -0
  365. package/build/deleteNotificationChannelGroupAsync.android.d.ts +2 -0
  366. package/build/deleteNotificationChannelGroupAsync.android.d.ts.map +1 -0
  367. package/build/deleteNotificationChannelGroupAsync.android.js +9 -0
  368. package/build/deleteNotificationChannelGroupAsync.android.js.map +1 -0
  369. package/build/deleteNotificationChannelGroupAsync.d.ts +9 -0
  370. package/build/deleteNotificationChannelGroupAsync.d.ts.map +1 -0
  371. package/build/deleteNotificationChannelGroupAsync.js +11 -0
  372. package/build/deleteNotificationChannelGroupAsync.js.map +1 -0
  373. package/build/dismissAllNotificationsAsync.d.ts +7 -0
  374. package/build/dismissAllNotificationsAsync.d.ts.map +1 -0
  375. package/build/dismissAllNotificationsAsync.js +14 -0
  376. package/build/dismissAllNotificationsAsync.js.map +1 -0
  377. package/build/dismissNotificationAsync.d.ts +8 -0
  378. package/build/dismissNotificationAsync.d.ts.map +1 -0
  379. package/build/dismissNotificationAsync.js +15 -0
  380. package/build/dismissNotificationAsync.js.map +1 -0
  381. package/build/getAllScheduledNotificationsAsync.d.ts +8 -0
  382. package/build/getAllScheduledNotificationsAsync.d.ts.map +1 -0
  383. package/build/getAllScheduledNotificationsAsync.js +14 -0
  384. package/build/getAllScheduledNotificationsAsync.js.map +1 -0
  385. package/build/getBadgeCountAsync.d.ts +8 -0
  386. package/build/getBadgeCountAsync.d.ts.map +1 -0
  387. package/build/getBadgeCountAsync.js +15 -0
  388. package/build/getBadgeCountAsync.js.map +1 -0
  389. package/build/getDevicePushTokenAsync.d.ts +8 -0
  390. package/build/getDevicePushTokenAsync.d.ts.map +1 -0
  391. package/build/getDevicePushTokenAsync.js +27 -0
  392. package/build/getDevicePushTokenAsync.js.map +1 -0
  393. package/build/getDevicePushTokenAsync.web.d.ts +3 -0
  394. package/build/getDevicePushTokenAsync.web.d.ts.map +1 -0
  395. package/build/getDevicePushTokenAsync.web.js +84 -0
  396. package/build/getDevicePushTokenAsync.web.js.map +1 -0
  397. package/build/getExpoPushTokenAsync.d.ts +40 -0
  398. package/build/getExpoPushTokenAsync.d.ts.map +1 -0
  399. package/build/getExpoPushTokenAsync.js +177 -0
  400. package/build/getExpoPushTokenAsync.js.map +1 -0
  401. package/build/getNextTriggerDateAsync.d.ts +26 -0
  402. package/build/getNextTriggerDateAsync.d.ts.map +1 -0
  403. package/build/getNextTriggerDateAsync.js +33 -0
  404. package/build/getNextTriggerDateAsync.js.map +1 -0
  405. package/build/getNotificationCategoriesAsync.d.ts +11 -0
  406. package/build/getNotificationCategoriesAsync.d.ts.map +1 -0
  407. package/build/getNotificationCategoriesAsync.js +18 -0
  408. package/build/getNotificationCategoriesAsync.js.map +1 -0
  409. package/build/getNotificationChannelAsync.android.d.ts +3 -0
  410. package/build/getNotificationChannelAsync.android.d.ts.map +1 -0
  411. package/build/getNotificationChannelAsync.android.js +9 -0
  412. package/build/getNotificationChannelAsync.android.js.map +1 -0
  413. package/build/getNotificationChannelAsync.d.ts +11 -0
  414. package/build/getNotificationChannelAsync.d.ts.map +1 -0
  415. package/build/getNotificationChannelAsync.js +13 -0
  416. package/build/getNotificationChannelAsync.js.map +1 -0
  417. package/build/getNotificationChannelGroupAsync.android.d.ts +3 -0
  418. package/build/getNotificationChannelGroupAsync.android.d.ts.map +1 -0
  419. package/build/getNotificationChannelGroupAsync.android.js +9 -0
  420. package/build/getNotificationChannelGroupAsync.android.js.map +1 -0
  421. package/build/getNotificationChannelGroupAsync.d.ts +12 -0
  422. package/build/getNotificationChannelGroupAsync.d.ts.map +1 -0
  423. package/build/getNotificationChannelGroupAsync.js +14 -0
  424. package/build/getNotificationChannelGroupAsync.js.map +1 -0
  425. package/build/getNotificationChannelGroupsAsync.android.d.ts +3 -0
  426. package/build/getNotificationChannelGroupsAsync.android.d.ts.map +1 -0
  427. package/build/getNotificationChannelGroupsAsync.android.js +9 -0
  428. package/build/getNotificationChannelGroupsAsync.android.js.map +1 -0
  429. package/build/getNotificationChannelGroupsAsync.d.ts +10 -0
  430. package/build/getNotificationChannelGroupsAsync.d.ts.map +1 -0
  431. package/build/getNotificationChannelGroupsAsync.js +12 -0
  432. package/build/getNotificationChannelGroupsAsync.js.map +1 -0
  433. package/build/getNotificationChannelsAsync.android.d.ts +3 -0
  434. package/build/getNotificationChannelsAsync.android.d.ts.map +1 -0
  435. package/build/getNotificationChannelsAsync.android.js +9 -0
  436. package/build/getNotificationChannelsAsync.android.js.map +1 -0
  437. package/build/getNotificationChannelsAsync.d.ts +10 -0
  438. package/build/getNotificationChannelsAsync.d.ts.map +1 -0
  439. package/build/getNotificationChannelsAsync.js +12 -0
  440. package/build/getNotificationChannelsAsync.js.map +1 -0
  441. package/build/getPresentedNotificationsAsync.d.ts +9 -0
  442. package/build/getPresentedNotificationsAsync.d.ts.map +1 -0
  443. package/build/getPresentedNotificationsAsync.js +15 -0
  444. package/build/getPresentedNotificationsAsync.js.map +1 -0
  445. package/build/index.d.ts +39 -0
  446. package/build/index.d.ts.map +1 -0
  447. package/build/index.js +39 -0
  448. package/build/index.js.map +1 -0
  449. package/build/kepler/NotificationContent.d.ts +43 -0
  450. package/build/kepler/NotificationContent.d.ts.map +1 -0
  451. package/build/kepler/NotificationContent.js +96 -0
  452. package/build/kepler/NotificationContent.js.map +1 -0
  453. package/build/kepler/index.d.ts +3 -0
  454. package/build/kepler/index.d.ts.map +1 -0
  455. package/build/kepler/index.js +15 -0
  456. package/build/kepler/index.js.map +1 -0
  457. package/build/kepler/native-notification-manager.d.ts +3 -0
  458. package/build/kepler/native-notification-manager.d.ts.map +1 -0
  459. package/build/kepler/native-notification-manager.js +10 -0
  460. package/build/kepler/native-notification-manager.js.map +1 -0
  461. package/build/kepler/types/NotificationManagerTypes.d.ts +373 -0
  462. package/build/kepler/types/NotificationManagerTypes.d.ts.map +1 -0
  463. package/build/kepler/types/NotificationManagerTypes.js +279 -0
  464. package/build/kepler/types/NotificationManagerTypes.js.map +1 -0
  465. package/build/kepler/types/index.d.ts +3 -0
  466. package/build/kepler/types/index.d.ts.map +1 -0
  467. package/build/kepler/types/index.js +15 -0
  468. package/build/kepler/types/index.js.map +1 -0
  469. package/build/presentNotificationAsync.d.ts +11 -0
  470. package/build/presentNotificationAsync.d.ts.map +1 -0
  471. package/build/presentNotificationAsync.js +22 -0
  472. package/build/presentNotificationAsync.js.map +1 -0
  473. package/build/registerTaskAsync.d.ts +29 -0
  474. package/build/registerTaskAsync.d.ts.map +1 -0
  475. package/build/registerTaskAsync.js +37 -0
  476. package/build/registerTaskAsync.js.map +1 -0
  477. package/build/scheduleNotificationAsync.d.ts +60 -0
  478. package/build/scheduleNotificationAsync.d.ts.map +1 -0
  479. package/build/scheduleNotificationAsync.js +261 -0
  480. package/build/scheduleNotificationAsync.js.map +1 -0
  481. package/build/setBadgeCountAsync.d.ts +19 -0
  482. package/build/setBadgeCountAsync.d.ts.map +1 -0
  483. package/build/setBadgeCountAsync.js +19 -0
  484. package/build/setBadgeCountAsync.js.map +1 -0
  485. package/build/setNotificationCategoryAsync.d.ts +15 -0
  486. package/build/setNotificationCategoryAsync.d.ts.map +1 -0
  487. package/build/setNotificationCategoryAsync.js +22 -0
  488. package/build/setNotificationCategoryAsync.js.map +1 -0
  489. package/build/setNotificationChannelAsync.android.d.ts +3 -0
  490. package/build/setNotificationChannelAsync.android.d.ts.map +1 -0
  491. package/build/setNotificationChannelAsync.android.js +9 -0
  492. package/build/setNotificationChannelAsync.android.js.map +1 -0
  493. package/build/setNotificationChannelAsync.d.ts +22 -0
  494. package/build/setNotificationChannelAsync.d.ts.map +1 -0
  495. package/build/setNotificationChannelAsync.js +24 -0
  496. package/build/setNotificationChannelAsync.js.map +1 -0
  497. package/build/setNotificationChannelGroupAsync.android.d.ts +3 -0
  498. package/build/setNotificationChannelGroupAsync.android.d.ts.map +1 -0
  499. package/build/setNotificationChannelGroupAsync.android.js +9 -0
  500. package/build/setNotificationChannelGroupAsync.android.js.map +1 -0
  501. package/build/setNotificationChannelGroupAsync.d.ts +12 -0
  502. package/build/setNotificationChannelGroupAsync.d.ts.map +1 -0
  503. package/build/setNotificationChannelGroupAsync.js +14 -0
  504. package/build/setNotificationChannelGroupAsync.js.map +1 -0
  505. package/build/unregisterForNotificationsAsync.d.ts +2 -0
  506. package/build/unregisterForNotificationsAsync.d.ts.map +1 -0
  507. package/build/unregisterForNotificationsAsync.js +10 -0
  508. package/build/unregisterForNotificationsAsync.js.map +1 -0
  509. package/build/unregisterTaskAsync.d.ts +7 -0
  510. package/build/unregisterTaskAsync.d.ts.map +1 -0
  511. package/build/unregisterTaskAsync.js +15 -0
  512. package/build/unregisterTaskAsync.js.map +1 -0
  513. package/build/useLastNotificationResponse.d.ts +38 -0
  514. package/build/useLastNotificationResponse.d.ts.map +1 -0
  515. package/build/useLastNotificationResponse.js +63 -0
  516. package/build/useLastNotificationResponse.js.map +1 -0
  517. package/build/utils/keplerUuidUtils.d.ts +5 -0
  518. package/build/utils/keplerUuidUtils.d.ts.map +1 -0
  519. package/build/utils/keplerUuidUtils.js +15 -0
  520. package/build/utils/keplerUuidUtils.js.map +1 -0
  521. package/build/utils/updateDevicePushTokenAsync.d.ts +3 -0
  522. package/build/utils/updateDevicePushTokenAsync.d.ts.map +1 -0
  523. package/build/utils/updateDevicePushTokenAsync.js +115 -0
  524. package/build/utils/updateDevicePushTokenAsync.js.map +1 -0
  525. package/expo-module.config.json +20 -0
  526. package/ios/EXNotifications/Building/EXNotificationBuilder.h +19 -0
  527. package/ios/EXNotifications/Building/EXNotificationBuilder.m +91 -0
  528. package/ios/EXNotifications/EXBadgeModule.h +11 -0
  529. package/ios/EXNotifications/EXBadgeModule.m +36 -0
  530. package/ios/EXNotifications/EXServerRegistrationModule.h +19 -0
  531. package/ios/EXNotifications/EXServerRegistrationModule.m +194 -0
  532. package/ios/EXNotifications/Notifications/Background/EXBackgroundNotificationTasksModule.h +16 -0
  533. package/ios/EXNotifications/Notifications/Background/EXBackgroundNotificationTasksModule.m +62 -0
  534. package/ios/EXNotifications/Notifications/Background/EXBackgroundRemoteNotificationConsumer.h +14 -0
  535. package/ios/EXNotifications/Notifications/Background/EXBackgroundRemoteNotificationConsumer.m +51 -0
  536. package/ios/EXNotifications/Notifications/Categories/EXNotificationCategoriesModule.h +25 -0
  537. package/ios/EXNotifications/Notifications/Categories/EXNotificationCategoriesModule.m +217 -0
  538. package/ios/EXNotifications/Notifications/EXNotificationCenterDelegate.h +29 -0
  539. package/ios/EXNotifications/Notifications/EXNotificationCenterDelegate.m +209 -0
  540. package/ios/EXNotifications/Notifications/EXNotificationSerializer.h +16 -0
  541. package/ios/EXNotifications/Notifications/EXNotificationSerializer.m +232 -0
  542. package/ios/EXNotifications/Notifications/EXNotificationsDelegate.h +27 -0
  543. package/ios/EXNotifications/Notifications/Emitter/EXNotificationsEmitter.h +17 -0
  544. package/ios/EXNotifications/Notifications/Emitter/EXNotificationsEmitter.m +114 -0
  545. package/ios/EXNotifications/Notifications/Handler/EXNotificationsHandlerModule.h +12 -0
  546. package/ios/EXNotifications/Notifications/Handler/EXNotificationsHandlerModule.m +109 -0
  547. package/ios/EXNotifications/Notifications/Handler/EXSingleNotificationHandlerTask.h +33 -0
  548. package/ios/EXNotifications/Notifications/Handler/EXSingleNotificationHandlerTask.m +124 -0
  549. package/ios/EXNotifications/Notifications/NSDictionary+EXNotificationsVerifyingClass.h +7 -0
  550. package/ios/EXNotifications/Notifications/NSDictionary+EXNotificationsVerifyingClass.m +19 -0
  551. package/ios/EXNotifications/Notifications/Presenting/EXNotificationPresentationModule.h +13 -0
  552. package/ios/EXNotifications/Notifications/Presenting/EXNotificationPresentationModule.m +124 -0
  553. package/ios/EXNotifications/Notifications/Scheduling/EXNotificationSchedulerModule.h +21 -0
  554. package/ios/EXNotifications/Notifications/Scheduling/EXNotificationSchedulerModule.m +263 -0
  555. package/ios/EXNotifications/Permissions/EXLegacyRemoteNotificationPermissionRequester.h +13 -0
  556. package/ios/EXNotifications/Permissions/EXLegacyRemoteNotificationPermissionRequester.m +135 -0
  557. package/ios/EXNotifications/Permissions/EXNotificationPermissionsModule.h +8 -0
  558. package/ios/EXNotifications/Permissions/EXNotificationPermissionsModule.m +67 -0
  559. package/ios/EXNotifications/Permissions/EXRemoteNotificationPermissionSingletonModule.h +29 -0
  560. package/ios/EXNotifications/Permissions/EXRemoteNotificationPermissionSingletonModule.m +68 -0
  561. package/ios/EXNotifications/Permissions/EXUserFacingNotificationsPermissionsRequester.h +15 -0
  562. package/ios/EXNotifications/Permissions/EXUserFacingNotificationsPermissionsRequester.m +202 -0
  563. package/ios/EXNotifications/PushToken/EXPushTokenListener.h +14 -0
  564. package/ios/EXNotifications/PushToken/EXPushTokenManager.h +24 -0
  565. package/ios/EXNotifications/PushToken/EXPushTokenManager.m +63 -0
  566. package/ios/EXNotifications/PushToken/EXPushTokenModule.h +9 -0
  567. package/ios/EXNotifications/PushToken/EXPushTokenModule.m +154 -0
  568. package/ios/EXNotifications.podspec +25 -0
  569. package/package.json +67 -0
  570. package/plugin/build/withNotifications.d.ts +28 -0
  571. package/plugin/build/withNotifications.js +12 -0
  572. package/plugin/build/withNotificationsAndroid.d.ts +42 -0
  573. package/plugin/build/withNotificationsAndroid.js +184 -0
  574. package/plugin/build/withNotificationsIOS.d.ts +14 -0
  575. package/plugin/build/withNotificationsIOS.js +58 -0
  576. package/plugin/jest.config.js +1 -0
  577. package/plugin/src/withNotifications.ts +40 -0
  578. package/plugin/src/withNotificationsAndroid.ts +239 -0
  579. package/plugin/src/withNotificationsIOS.ts +78 -0
  580. package/plugin/tsconfig.json +9 -0
  581. package/src/BackgroundNotificationTasksModule.kepler.ts +8 -0
  582. package/src/BackgroundNotificationTasksModule.native.ts +7 -0
  583. package/src/BackgroundNotificationTasksModule.ts +8 -0
  584. package/src/BackgroundNotificationTasksModule.types.ts +12 -0
  585. package/src/BackgroundNotificationTasksModule.web.ts +8 -0
  586. package/src/BadgeModule.kepler.ts +8 -0
  587. package/src/BadgeModule.native.ts +15 -0
  588. package/src/BadgeModule.ts +6 -0
  589. package/src/BadgeModule.types.ts +11 -0
  590. package/src/BadgeModule.web.ts +28 -0
  591. package/src/DevicePushTokenAutoRegistration.fx.ts +119 -0
  592. package/src/NotificationCategoriesModule.kepler.ts +10 -0
  593. package/src/NotificationCategoriesModule.native.ts +7 -0
  594. package/src/NotificationCategoriesModule.ts +15 -0
  595. package/src/NotificationCategoriesModule.types.ts +22 -0
  596. package/src/NotificationCategoriesModule.web.ts +17 -0
  597. package/src/NotificationChannelGroupManager.kepler.ts +8 -0
  598. package/src/NotificationChannelGroupManager.native.ts +7 -0
  599. package/src/NotificationChannelGroupManager.ts +6 -0
  600. package/src/NotificationChannelGroupManager.types.ts +34 -0
  601. package/src/NotificationChannelManager.kepler.ts +8 -0
  602. package/src/NotificationChannelManager.native.ts +5 -0
  603. package/src/NotificationChannelManager.ts +6 -0
  604. package/src/NotificationChannelManager.types.ts +115 -0
  605. package/src/NotificationPermissions.ts +91 -0
  606. package/src/NotificationPermissions.types.ts +102 -0
  607. package/src/NotificationPermissionsModule.kepler.ts +8 -0
  608. package/src/NotificationPermissionsModule.native.ts +7 -0
  609. package/src/NotificationPermissionsModule.ts +83 -0
  610. package/src/NotificationPermissionsModule.types.ts +13 -0
  611. package/src/NotificationPresenterModule.kepler.ts +67 -0
  612. package/src/NotificationPresenterModule.native.ts +5 -0
  613. package/src/NotificationPresenterModule.ts +6 -0
  614. package/src/NotificationPresenterModule.types.ts +13 -0
  615. package/src/NotificationScheduler.kepler.ts +63 -0
  616. package/src/NotificationScheduler.native.ts +5 -0
  617. package/src/NotificationScheduler.ts +6 -0
  618. package/src/NotificationScheduler.types.ts +89 -0
  619. package/src/Notifications.types.ts +722 -0
  620. package/src/NotificationsEmitter.ts +111 -0
  621. package/src/NotificationsEmitterModule.kepler.ts +8 -0
  622. package/src/NotificationsEmitterModule.native.ts +5 -0
  623. package/src/NotificationsEmitterModule.ts +17 -0
  624. package/src/NotificationsEmitterModule.types.ts +7 -0
  625. package/src/NotificationsHandler.ts +120 -0
  626. package/src/NotificationsHandlerModule.kepler.ts +8 -0
  627. package/src/NotificationsHandlerModule.native.ts +5 -0
  628. package/src/NotificationsHandlerModule.ts +17 -0
  629. package/src/NotificationsHandlerModule.types.ts +10 -0
  630. package/src/PushTokenManager.kepler.ts +8 -0
  631. package/src/PushTokenManager.native.ts +5 -0
  632. package/src/PushTokenManager.ts +17 -0
  633. package/src/PushTokenManager.types.ts +6 -0
  634. package/src/ServerRegistrationModule.kepler.ts +8 -0
  635. package/src/ServerRegistrationModule.native.ts +7 -0
  636. package/src/ServerRegistrationModule.ts +6 -0
  637. package/src/ServerRegistrationModule.types.ts +7 -0
  638. package/src/ServerRegistrationModule.web.ts +56 -0
  639. package/src/TokenEmitter.ts +56 -0
  640. package/src/Tokens.types.ts +110 -0
  641. package/src/cancelAllScheduledNotificationsAsync.ts +16 -0
  642. package/src/cancelScheduledNotificationAsync.ts +31 -0
  643. package/src/deleteNotificationCategoryAsync.ts +23 -0
  644. package/src/deleteNotificationChannelAsync.android.ts +11 -0
  645. package/src/deleteNotificationChannelAsync.ts +10 -0
  646. package/src/deleteNotificationChannelGroupAsync.android.ts +11 -0
  647. package/src/deleteNotificationChannelGroupAsync.ts +10 -0
  648. package/src/dismissAllNotificationsAsync.ts +16 -0
  649. package/src/dismissNotificationAsync.ts +19 -0
  650. package/src/getAllScheduledNotificationsAsync.ts +17 -0
  651. package/src/getBadgeCountAsync.ts +17 -0
  652. package/src/getDevicePushTokenAsync.ts +31 -0
  653. package/src/getDevicePushTokenAsync.web.ts +122 -0
  654. package/src/getExpoPushTokenAsync.ts +238 -0
  655. package/src/getNextTriggerDateAsync.ts +38 -0
  656. package/src/getNotificationCategoriesAsync.ts +21 -0
  657. package/src/getNotificationChannelAsync.android.ts +13 -0
  658. package/src/getNotificationChannelAsync.ts +16 -0
  659. package/src/getNotificationChannelGroupAsync.android.ts +14 -0
  660. package/src/getNotificationChannelGroupAsync.ts +17 -0
  661. package/src/getNotificationChannelGroupsAsync.android.ts +13 -0
  662. package/src/getNotificationChannelGroupsAsync.ts +15 -0
  663. package/src/getNotificationChannelsAsync.android.ts +11 -0
  664. package/src/getNotificationChannelsAsync.ts +13 -0
  665. package/src/getPresentedNotificationsAsync.ts +18 -0
  666. package/src/index.ts +38 -0
  667. package/src/kepler/NotificationContent.ts +119 -0
  668. package/src/kepler/index.ts +16 -0
  669. package/src/kepler/native-notification-manager.ts +10 -0
  670. package/src/kepler/types/NotificationManagerTypes.ts +508 -0
  671. package/src/kepler/types/index.ts +16 -0
  672. package/src/presentNotificationAsync.ts +32 -0
  673. package/src/registerTaskAsync.ts +39 -0
  674. package/src/scheduleNotificationAsync.ts +335 -0
  675. package/src/setBadgeCountAsync.ts +32 -0
  676. package/src/setNotificationCategoryAsync.ts +37 -0
  677. package/src/setNotificationChannelAsync.android.ts +15 -0
  678. package/src/setNotificationChannelAsync.ts +28 -0
  679. package/src/setNotificationChannelGroupAsync.android.ts +18 -0
  680. package/src/setNotificationChannelGroupAsync.ts +21 -0
  681. package/src/unregisterForNotificationsAsync.ts +11 -0
  682. package/src/unregisterTaskAsync.ts +17 -0
  683. package/src/useLastNotificationResponse.ts +70 -0
  684. package/src/utils/keplerUuidUtils.ts +29 -0
  685. package/src/utils/updateDevicePushTokenAsync.ts +147 -0
  686. package/tsconfig.json +9 -0
@@ -0,0 +1,263 @@
1
+ // Copyright 2018-present 650 Industries. All rights reserved.
2
+
3
+ #import <EXNotifications/EXNotificationSchedulerModule.h>
4
+ #import <EXNotifications/EXNotificationSerializer.h>
5
+ #import <EXNotifications/EXNotificationBuilder.h>
6
+ #import <EXNotifications/NSDictionary+EXNotificationsVerifyingClass.h>
7
+
8
+ #import <UserNotifications/UserNotifications.h>
9
+
10
+ static NSString * const notificationTriggerTypeKey = @"type";
11
+ static NSString * const notificationTriggerRepeatsKey = @"repeats";
12
+
13
+ static NSString * const intervalNotificationTriggerType = @"timeInterval";
14
+ static NSString * const intervalNotificationTriggerIntervalKey = @"seconds";
15
+
16
+ static NSString * const dailyNotificationTriggerType = @"daily";
17
+ static NSString * const dailyNotificationTriggerHourKey = @"hour";
18
+ static NSString * const dailyNotificationTriggerMinuteKey = @"minute";
19
+
20
+ static NSString * const weeklyNotificationTriggerType = @"weekly";
21
+ static NSString * const weeklyNotificationTriggerWeekdayKey = @"weekday";
22
+ static NSString * const weeklyNotificationTriggerHourKey = @"hour";
23
+ static NSString * const weeklyNotificationTriggerMinuteKey = @"minute";
24
+
25
+ static NSString * const yearlyNotificationTriggerType = @"yearly";
26
+ static NSString * const yearlyNotificationTriggerDayKey = @"day";
27
+ static NSString * const yearlyNotificationTriggerMonthKey = @"month";
28
+ static NSString * const yearlyNotificationTriggerHourKey = @"hour";
29
+ static NSString * const yearlyNotificationTriggerMinuteKey = @"minute";
30
+
31
+ static NSString * const dateNotificationTriggerType = @"date";
32
+ static NSString * const dateNotificationTriggerTimestampKey = @"timestamp";
33
+
34
+ static NSString * const calendarNotificationTriggerType = @"calendar";
35
+ static NSString * const calendarNotificationTriggerComponentsKey = @"value";
36
+ static NSString * const calendarNotificationTriggerTimezoneKey = @"timezone";
37
+
38
+
39
+
40
+ @interface EXNotificationSchedulerModule ()
41
+
42
+ @property (nonatomic, weak) id<EXNotificationBuilder> builder;
43
+
44
+ @end
45
+
46
+ @implementation EXNotificationSchedulerModule
47
+
48
+ EX_EXPORT_MODULE(ExpoNotificationScheduler);
49
+
50
+ - (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry
51
+ {
52
+ _builder = [moduleRegistry getModuleImplementingProtocol:@protocol(EXNotificationBuilder)];
53
+ }
54
+
55
+ # pragma mark - Exported methods
56
+
57
+ EX_EXPORT_METHOD_AS(getAllScheduledNotificationsAsync,
58
+ getAllScheduledNotifications:(EXPromiseResolveBlock)resolve reject:(EXPromiseRejectBlock)reject
59
+ )
60
+ {
61
+ [[UNUserNotificationCenter currentNotificationCenter] getPendingNotificationRequestsWithCompletionHandler:^(NSArray<UNNotificationRequest *> * _Nonnull requests) {
62
+ resolve([self serializeNotificationRequests:requests]);
63
+ }];
64
+ }
65
+
66
+ EX_EXPORT_METHOD_AS(scheduleNotificationAsync,
67
+ scheduleNotification:(NSString *)identifier notificationSpec:(NSDictionary *)notificationSpec triggerSpec:(NSDictionary *)triggerSpec resolve:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject)
68
+ {
69
+ @try {
70
+ UNNotificationRequest *request = [self buildNotificationRequestWithIdentifier:identifier content:notificationSpec trigger:triggerSpec];
71
+ [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
72
+ if (error) {
73
+ NSString *message = [NSString stringWithFormat:@"Failed to schedule notification. %@", error];
74
+ reject(@"ERR_NOTIFICATIONS_FAILED_TO_SCHEDULE", message, error);
75
+ } else {
76
+ resolve(identifier);
77
+ }
78
+ }];
79
+ } @catch (NSException *exception) {
80
+ NSString *message = [NSString stringWithFormat:@"Failed to schedule notification. %@", exception];
81
+ reject(@"ERR_NOTIFICATIONS_FAILED_TO_SCHEDULE", message, nil);
82
+ }
83
+ }
84
+
85
+ EX_EXPORT_METHOD_AS(cancelScheduledNotificationAsync,
86
+ cancelNotification:(NSString *)identifier resolve:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject)
87
+ {
88
+ [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:@[identifier]];
89
+ resolve(nil);
90
+ }
91
+
92
+ EX_EXPORT_METHOD_AS(cancelAllScheduledNotificationsAsync,
93
+ cancelAllNotificationsWithResolver:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject)
94
+ {
95
+ [[UNUserNotificationCenter currentNotificationCenter] removeAllPendingNotificationRequests];
96
+ resolve(nil);
97
+ }
98
+
99
+ EX_EXPORT_METHOD_AS(getNextTriggerDateAsync,
100
+ getNextTriggerDate:(NSDictionary *)triggerSpec resolve:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject)
101
+ {
102
+ @try {
103
+ UNNotificationTrigger *trigger = [self triggerFromParams:triggerSpec];
104
+ if ([trigger isKindOfClass:[UNCalendarNotificationTrigger class]]) {
105
+ UNCalendarNotificationTrigger *calendarTrigger = (UNCalendarNotificationTrigger *)trigger;
106
+ NSDate *nextTriggerDate = [calendarTrigger nextTriggerDate];
107
+ // We want to return milliseconds from this method.
108
+ resolve(nextTriggerDate ? @([nextTriggerDate timeIntervalSince1970] * 1000) : [NSNull null]);
109
+ } else if ([trigger isKindOfClass:[UNTimeIntervalNotificationTrigger class]]) {
110
+ UNTimeIntervalNotificationTrigger *timeIntervalTrigger = (UNTimeIntervalNotificationTrigger *)trigger;
111
+ NSDate *nextTriggerDate = [timeIntervalTrigger nextTriggerDate];
112
+ // We want to return milliseconds from this method.
113
+ resolve(nextTriggerDate ? @([nextTriggerDate timeIntervalSince1970] * 1000) : [NSNull null]);
114
+ } else {
115
+ NSString *message = [NSString stringWithFormat:@"It is not possible to get next trigger date for triggers other than calendar-based. Provided trigger resulted in %@ trigger.", NSStringFromClass([trigger class])];
116
+ reject(@"ERR_NOTIFICATIONS_INVALID_CALENDAR_TRIGGER", message, nil);
117
+ }
118
+ } @catch (NSException *exception) {
119
+ NSString *message = [NSString stringWithFormat:@"Failed to get next trigger date. %@", exception];
120
+ reject(@"ERR_NOTIFICATIONS_FAILED_TO_GET_NEXT_TRIGGER_DATE", message, nil);
121
+ }
122
+ }
123
+
124
+ - (UNNotificationRequest *)buildNotificationRequestWithIdentifier:(NSString *)identifier
125
+ content:(NSDictionary *)contentInput
126
+ trigger:(NSDictionary *)triggerInput
127
+ {
128
+ UNNotificationContent *content = [_builder notificationContentFromRequest:contentInput];
129
+ UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:[self triggerFromParams:triggerInput]];
130
+ return request;
131
+ }
132
+
133
+ - (NSArray * _Nonnull)serializeNotificationRequests:(NSArray<UNNotificationRequest *> * _Nonnull) requests
134
+ {
135
+ NSMutableArray *serializedRequests = [NSMutableArray new];
136
+ for (UNNotificationRequest *request in requests) {
137
+ [serializedRequests addObject:[EXNotificationSerializer serializedNotificationRequest:request]];
138
+ }
139
+ return serializedRequests;
140
+ }
141
+
142
+ - (UNNotificationTrigger *)triggerFromParams:(NSDictionary *)params
143
+ {
144
+ if (!params) {
145
+ // nil trigger is a valid trigger
146
+ return nil;
147
+ }
148
+ if (![params isKindOfClass:[NSDictionary class]]) {
149
+ NSString *reason = [NSString stringWithFormat:@"Unknown notification trigger declaration passed in, expected a dictionary, received %@.", NSStringFromClass(params.class)];
150
+ @throw [NSException exceptionWithName:NSInvalidArgumentException reason:reason userInfo:nil];
151
+ }
152
+ NSString *triggerType = params[notificationTriggerTypeKey];
153
+ if ([intervalNotificationTriggerType isEqualToString:triggerType]) {
154
+ NSNumber *interval = [params objectForKey:intervalNotificationTriggerIntervalKey verifyingClass:[NSNumber class]];
155
+ NSNumber *repeats = [params objectForKey:notificationTriggerRepeatsKey verifyingClass:[NSNumber class]];
156
+
157
+ return [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:[interval unsignedIntegerValue]
158
+ repeats:[repeats boolValue]];
159
+ } else if ([dateNotificationTriggerType isEqualToString:triggerType]) {
160
+ NSNumber *timestampMs = [params objectForKey:dateNotificationTriggerTimestampKey verifyingClass:[NSNumber class]];
161
+ NSUInteger timestamp = [timestampMs unsignedIntegerValue] / 1000;
162
+ NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
163
+
164
+ return [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:[date timeIntervalSinceNow]
165
+ repeats:NO];
166
+
167
+ } else if ([dailyNotificationTriggerType isEqualToString:triggerType]) {
168
+ NSNumber *hour = [params objectForKey:dailyNotificationTriggerHourKey verifyingClass:[NSNumber class]];
169
+ NSNumber *minute = [params objectForKey:dailyNotificationTriggerMinuteKey verifyingClass:[NSNumber class]];
170
+ NSDateComponents *dateComponents = [NSDateComponents new];
171
+ dateComponents.hour = [hour integerValue];
172
+ dateComponents.minute = [minute integerValue];
173
+
174
+ return [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:dateComponents
175
+ repeats:YES];
176
+ } else if ([weeklyNotificationTriggerType isEqualToString:triggerType]) {
177
+ NSNumber *weekday = [params objectForKey:weeklyNotificationTriggerWeekdayKey verifyingClass:[NSNumber class]];
178
+ NSNumber *hour = [params objectForKey:weeklyNotificationTriggerHourKey verifyingClass:[NSNumber class]];
179
+ NSNumber *minute = [params objectForKey:weeklyNotificationTriggerMinuteKey verifyingClass:[NSNumber class]];
180
+ NSDateComponents *dateComponents = [NSDateComponents new];
181
+ dateComponents.weekday = [weekday integerValue];
182
+ dateComponents.hour = [hour integerValue];
183
+ dateComponents.minute = [minute integerValue];
184
+
185
+ return [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:dateComponents
186
+ repeats:YES];
187
+ } else if ([yearlyNotificationTriggerType isEqualToString:triggerType]) {
188
+ NSNumber *day = [params objectForKey:yearlyNotificationTriggerDayKey verifyingClass:[NSNumber class]];
189
+ NSNumber *month = [params objectForKey:yearlyNotificationTriggerMonthKey verifyingClass:[NSNumber class]];
190
+ NSNumber *hour = [params objectForKey:yearlyNotificationTriggerHourKey verifyingClass:[NSNumber class]];
191
+ NSNumber *minute = [params objectForKey:yearlyNotificationTriggerMinuteKey verifyingClass:[NSNumber class]];
192
+ NSDateComponents *dateComponents = [NSDateComponents new];
193
+ dateComponents.day = [day integerValue];
194
+ dateComponents.month = [month integerValue] + 1; // iOS uses 1-12 based numbers for months
195
+ dateComponents.hour = [hour integerValue];
196
+ dateComponents.minute = [minute integerValue];
197
+
198
+ return [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:dateComponents
199
+ repeats:YES];
200
+ } else if ([calendarNotificationTriggerType isEqualToString:triggerType]) {
201
+ NSDateComponents *dateComponents = [self dateComponentsFromParams:params[calendarNotificationTriggerComponentsKey]];
202
+ NSNumber *repeats = [params objectForKey:notificationTriggerRepeatsKey verifyingClass:[NSNumber class]];
203
+
204
+ return [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:dateComponents
205
+ repeats:[repeats boolValue]];
206
+ } else {
207
+ NSString *reason = [NSString stringWithFormat:@"Unknown notification trigger type: %@.", triggerType];
208
+ @throw [NSException exceptionWithName:NSInvalidArgumentException reason:reason userInfo:nil];
209
+ }
210
+ }
211
+
212
+ - (NSDateComponents *)dateComponentsFromParams:(NSDictionary<NSString *, id> *)params
213
+ {
214
+ NSDateComponents *dateComponents = [NSDateComponents new];
215
+
216
+ // TODO: Verify that DoW matches JS getDay()
217
+ dateComponents.calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierISO8601];
218
+
219
+ if ([params objectForKey:calendarNotificationTriggerTimezoneKey verifyingClass:[NSString class]]) {
220
+ dateComponents.timeZone = [[NSTimeZone alloc] initWithName:params[calendarNotificationTriggerTimezoneKey]];
221
+ }
222
+
223
+ for (NSString *key in [self automatchedDateComponentsKeys]) {
224
+ if (params[key]) {
225
+ NSNumber *value = [params objectForKey:key verifyingClass:[NSNumber class]];
226
+ [dateComponents setValue:[value unsignedIntegerValue] forComponent:[self calendarUnitFor:key]];
227
+ }
228
+ }
229
+
230
+ return dateComponents;
231
+ }
232
+
233
+ - (NSDictionary<NSString *, NSNumber *> *)dateComponentsMatchMap
234
+ {
235
+ static NSDictionary *map;
236
+ if (!map) {
237
+ map = @{
238
+ @"year": @(NSCalendarUnitYear),
239
+ @"month": @(NSCalendarUnitMonth),
240
+ @"day": @(NSCalendarUnitDay),
241
+ @"hour": @(NSCalendarUnitHour),
242
+ @"minute": @(NSCalendarUnitMinute),
243
+ @"second": @(NSCalendarUnitSecond),
244
+ @"weekday": @(NSCalendarUnitWeekday),
245
+ @"weekOfMonth": @(NSCalendarUnitWeekOfMonth),
246
+ @"weekOfYear": @(NSCalendarUnitWeekOfYear),
247
+ @"weekdayOrdinal": @(NSCalendarUnitWeekdayOrdinal)
248
+ };
249
+ }
250
+ return map;
251
+ }
252
+
253
+ - (NSArray<NSString *> *)automatchedDateComponentsKeys
254
+ {
255
+ return [[self dateComponentsMatchMap] allKeys];
256
+ }
257
+
258
+ - (NSCalendarUnit)calendarUnitFor:(NSString *)key
259
+ {
260
+ return [[self dateComponentsMatchMap][key] unsignedIntegerValue];
261
+ }
262
+
263
+ @end
@@ -0,0 +1,13 @@
1
+ // Copyright 2016-present 650 Industries. All rights reserved.
2
+
3
+ #import <ExpoModulesCore/EXPermissionsInterface.h>
4
+ #import <EXNotifications/EXRemoteNotificationPermissionSingletonModule.h>
5
+
6
+ // TODO: Remove once we deprecate and remove "notifications" permission type
7
+ @interface EXLegacyRemoteNotificationPermissionRequester : NSObject <EXPermissionsRequester, EXRemoteNotificationPermissionDelegate>
8
+
9
+ - (instancetype)initWithUserNotificationPermissionRequester:(id<EXPermissionsRequester>)userNotificationPermissionRequester
10
+ permissionPublisher:(id<EXRemoteNotificationPermissionProgressPublisher>)permissionProgressPublisher
11
+ withMethodQueue:(dispatch_queue_t)methodQueue;
12
+
13
+ @end
@@ -0,0 +1,135 @@
1
+ // Copyright 2016-present 650 Industries. All rights reserved.
2
+
3
+ #import <EXNotifications/EXLegacyRemoteNotificationPermissionRequester.h>
4
+ #import <ExpoModulesCore/EXUtilities.h>
5
+
6
+ @interface EXLegacyRemoteNotificationPermissionRequester ()
7
+
8
+ @property (nonatomic, strong) EXPromiseResolveBlock resolve;
9
+ @property (nonatomic, strong) EXPromiseRejectBlock reject;
10
+ @property (nonatomic, assign) BOOL remoteNotificationsRegistrationIsPending;
11
+ @property (nonatomic, weak) id<EXPermissionsRequester> userNotificationPermissionRequester;
12
+ @property (nonatomic, weak) dispatch_queue_t methodQueue;
13
+ @property (nonatomic, weak) id<EXRemoteNotificationPermissionProgressPublisher> permissionProgressPublisher;
14
+
15
+ @end
16
+
17
+ @implementation EXLegacyRemoteNotificationPermissionRequester
18
+
19
+ + (NSString *)permissionType
20
+ {
21
+ return @"notifications";
22
+ }
23
+
24
+ - (instancetype)initWithUserNotificationPermissionRequester:(id<EXPermissionsRequester>)userNotificationPermissionRequester
25
+ permissionPublisher:(id<EXRemoteNotificationPermissionProgressPublisher>)permissionProgressPublisher
26
+ withMethodQueue:(dispatch_queue_t)methodQueue
27
+ {
28
+ if (self = [super init]) {
29
+ _remoteNotificationsRegistrationIsPending = NO;
30
+ _permissionProgressPublisher = permissionProgressPublisher;
31
+ _userNotificationPermissionRequester = userNotificationPermissionRequester;
32
+ _methodQueue = methodQueue;
33
+ }
34
+ return self;
35
+ }
36
+
37
+ - (NSDictionary *)getPermissions
38
+ {
39
+ __block EXPermissionStatus status;
40
+ [EXUtilities performSynchronouslyOnMainThread:^{
41
+ status = (UMSharedApplication().isRegisteredForRemoteNotifications) ?
42
+ EXPermissionStatusGranted :
43
+ EXPermissionStatusUndetermined;
44
+ }];
45
+ NSMutableDictionary *permissions = [[_userNotificationPermissionRequester getPermissions] mutableCopy];
46
+
47
+ [permissions setValuesForKeysWithDictionary:@{
48
+ @"status": @(status),
49
+
50
+ }];
51
+ return permissions;
52
+ }
53
+
54
+ - (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject
55
+ {
56
+ if (_resolve != nil || _reject != nil) {
57
+ reject(@"E_AWAIT_PROMISE", @"Another request for the same permission is already being handled.", nil);
58
+ return;
59
+ }
60
+
61
+ _resolve = resolve;
62
+ _reject = reject;
63
+
64
+ BOOL __block isRegisteredForRemoteNotifications = NO;
65
+ [EXUtilities performSynchronouslyOnMainThread:^{
66
+ isRegisteredForRemoteNotifications = UMSharedApplication().isRegisteredForRemoteNotifications;
67
+ }];
68
+
69
+ if (isRegisteredForRemoteNotifications) {
70
+ // resolve immediately if already registered
71
+ [self _maybeConsumeResolverWithCurrentPermissions];
72
+ } else {
73
+ [_permissionProgressPublisher addDelegate:self];
74
+ EX_WEAKIFY(self)
75
+ [_userNotificationPermissionRequester requestPermissionsWithResolver:^(NSDictionary *permission){
76
+ EX_STRONGIFY(self)
77
+ EXPermissionStatus localNotificationsStatus = [[permission objectForKey:@"status"] intValue];
78
+ // We may assume that `EXLocalNotificationRequester`'s permission request will always finish
79
+ // when the user responds to the dialog or has already responded in the past.
80
+ // However, `UIApplication.registerForRemoteNotification` results in calling
81
+ // `application:didRegisterForRemoteNotificationsWithDeviceToken:` or
82
+ // `application:didFailToRegisterForRemoteNotificationsWithError:` on the application delegate
83
+ // ONLY when the notifications are enabled in settings (by allowing sound, alerts or app badge).
84
+ // So, when the local notifications are disabled, the application delegate's callbacks will not be called instantly.
85
+ if (localNotificationsStatus == EXPermissionStatusDenied) {
86
+ [self _clearObserver];
87
+ [self _maybeConsumeResolverWithCurrentPermissions];
88
+ } else {
89
+ self.remoteNotificationsRegistrationIsPending = YES;
90
+ dispatch_async(dispatch_get_main_queue(), ^{
91
+ [UMSharedApplication() registerForRemoteNotifications];
92
+ });
93
+ }
94
+ } rejecter:^(NSString *code, NSString *message, NSError *error){
95
+ [self _clearObserver];
96
+ if (self.reject) {
97
+ self.reject(code, message, error);
98
+ }
99
+ }];
100
+ }
101
+ }
102
+
103
+ - (void)dealloc
104
+ {
105
+ [self _clearObserver];
106
+ }
107
+
108
+ - (void)handleDidFinishRegisteringForRemoteNotifications
109
+ {
110
+ [self _clearObserver];
111
+ EX_WEAKIFY(self)
112
+ dispatch_async(_methodQueue, ^{
113
+ EX_STRONGIFY(self)
114
+ [self _maybeConsumeResolverWithCurrentPermissions];
115
+ });
116
+ }
117
+
118
+ - (void)_clearObserver
119
+ {
120
+ [_permissionProgressPublisher removeDelegate:self];
121
+ _remoteNotificationsRegistrationIsPending = NO;
122
+ }
123
+
124
+ - (void)_maybeConsumeResolverWithCurrentPermissions
125
+ {
126
+ if (!_remoteNotificationsRegistrationIsPending) {
127
+ if (_resolve) {
128
+ _resolve([self getPermissions]);
129
+ _resolve = nil;
130
+ _reject = nil;
131
+ }
132
+ }
133
+ }
134
+
135
+ @end
@@ -0,0 +1,8 @@
1
+ // Copyright 2018-present 650 Industries. All rights reserved.
2
+
3
+ #import <ExpoModulesCore/EXExportedModule.h>
4
+ #import <ExpoModulesCore/EXModuleRegistryConsumer.h>
5
+
6
+ @interface EXNotificationPermissionsModule : EXExportedModule <EXModuleRegistryConsumer>
7
+
8
+ @end
@@ -0,0 +1,67 @@
1
+ // Copyright 2018-present 650 Industries. All rights reserved.
2
+
3
+ #import <EXNotifications/EXNotificationPermissionsModule.h>
4
+
5
+ #import <ExpoModulesCore/EXPermissionsInterface.h>
6
+ #import <ExpoModulesCore/EXPermissionsMethodsDelegate.h>
7
+
8
+ #import <EXNotifications/EXLegacyRemoteNotificationPermissionRequester.h>
9
+ #import <EXNotifications/EXUserFacingNotificationsPermissionsRequester.h>
10
+
11
+ @interface EXNotificationPermissionsModule ()
12
+
13
+ @property (nonatomic, weak) id<EXPermissionsInterface> permissionsManager;
14
+ @property (nonatomic, strong) EXUserFacingNotificationsPermissionsRequester *requester;
15
+ @property (nonatomic, strong) EXLegacyRemoteNotificationPermissionRequester *legacyRemoteNotificationsRequester;
16
+
17
+ @end
18
+
19
+ @implementation EXNotificationPermissionsModule
20
+
21
+ EX_EXPORT_MODULE(ExpoNotificationPermissionsModule);
22
+
23
+ - (instancetype)init
24
+ {
25
+ if (self = [super init]) {
26
+ _requester = [[EXUserFacingNotificationsPermissionsRequester alloc] initWithMethodQueue:self.methodQueue];
27
+ }
28
+ return self;
29
+ }
30
+
31
+ # pragma mark - Exported methods
32
+
33
+ EX_EXPORT_METHOD_AS(getPermissionsAsync,
34
+ getPermissionsAsync:(EXPromiseResolveBlock)resolve
35
+ rejecter:(EXPromiseRejectBlock)reject)
36
+ {
37
+ [EXPermissionsMethodsDelegate getPermissionWithPermissionsManager:_permissionsManager
38
+ withRequester:[EXUserFacingNotificationsPermissionsRequester class]
39
+ resolve:resolve
40
+ reject:reject];
41
+ }
42
+
43
+ EX_EXPORT_METHOD_AS(requestPermissionsAsync,
44
+ requestPermissionsAsync:(NSDictionary *)requestedPermissions
45
+ requester:(EXPromiseResolveBlock)resolve
46
+ rejecter:(EXPromiseRejectBlock)reject)
47
+ {
48
+ [EXUserFacingNotificationsPermissionsRequester setRequestedPermissions:requestedPermissions];
49
+ [EXPermissionsMethodsDelegate askForPermissionWithPermissionsManager:_permissionsManager
50
+ withRequester:[EXUserFacingNotificationsPermissionsRequester class]
51
+ resolve:resolve
52
+ reject:reject];
53
+ }
54
+
55
+ # pragma mark - EXModuleRegistryConsumer
56
+
57
+ - (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry {
58
+ _permissionsManager = [moduleRegistry getModuleImplementingProtocol:@protocol(EXPermissionsInterface)];
59
+ if (!_legacyRemoteNotificationsRequester) {
60
+ // TODO: Remove once we deprecate and remove "notifications" permission type
61
+ _legacyRemoteNotificationsRequester = [[EXLegacyRemoteNotificationPermissionRequester alloc] initWithUserNotificationPermissionRequester:_requester permissionPublisher:[moduleRegistry getSingletonModuleForName:@"RemoteNotificationPermissionPublisher"] withMethodQueue:self.methodQueue];
62
+ }
63
+ [EXPermissionsMethodsDelegate registerRequesters:@[_requester, _legacyRemoteNotificationsRequester]
64
+ withPermissionsManager:_permissionsManager];
65
+ }
66
+
67
+ @end
@@ -0,0 +1,29 @@
1
+ // Copyright 2018-present 650 Industries. All rights reserved.
2
+
3
+ #import <Foundation/Foundation.h>
4
+ #import <UIKit/UIKit.h>
5
+ #import <ExpoModulesCore/EXSingletonModule.h>
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ @protocol EXRemoteNotificationPermissionDelegate
10
+
11
+ - (void)handleDidFinishRegisteringForRemoteNotifications;
12
+
13
+ @end
14
+
15
+ @protocol EXRemoteNotificationPermissionProgressPublisher
16
+
17
+ - (void)addDelegate:(id<EXRemoteNotificationPermissionDelegate>)delegate;
18
+ - (void)removeDelegate:(id<EXRemoteNotificationPermissionDelegate>)delegate;
19
+
20
+ @end
21
+
22
+ @interface EXRemoteNotificationPermissionSingletonModule : EXSingletonModule <UIApplicationDelegate, EXRemoteNotificationPermissionProgressPublisher>
23
+
24
+ - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)token;
25
+ - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
26
+
27
+ @end
28
+
29
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,68 @@
1
+
2
+ // Copyright 2018-present 650 Industries. All rights reserved.
3
+
4
+ #import <EXNotifications/EXRemoteNotificationPermissionSingletonModule.h>
5
+ #import <ExpoModulesCore/EXDefines.h>
6
+
7
+ @interface EXRemoteNotificationPermissionSingletonModule ()
8
+
9
+ @property (nonatomic, strong) NSPointerArray *delegates;
10
+
11
+ @end
12
+
13
+ @implementation EXRemoteNotificationPermissionSingletonModule
14
+
15
+ EX_REGISTER_SINGLETON_MODULE(RemoteNotificationPermissionPublisher);
16
+
17
+ - (instancetype)init
18
+ {
19
+ if (self = [super init]) {
20
+ _delegates = [NSPointerArray weakObjectsPointerArray];
21
+ }
22
+ return self;
23
+ }
24
+
25
+ # pragma mark - UIApplicationDelegate
26
+
27
+ - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)token
28
+ {
29
+ // Copying the array in case delegates remove themselves while handling the "did finish" event
30
+ NSPointerArray *immutableDelegates = [_delegates copy];
31
+ for (int i = 0; i < immutableDelegates.count; i++) {
32
+ id pointer = [immutableDelegates pointerAtIndex:i];
33
+ [pointer handleDidFinishRegisteringForRemoteNotifications];
34
+ }
35
+ }
36
+
37
+ - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
38
+ {
39
+ // Copying the array in case delegates remove themselves while handling the "did finish" event
40
+ NSPointerArray *immutableDelegates = [_delegates copy];
41
+ for (int i = 0; i < immutableDelegates.count; i++) {
42
+ id pointer = [_delegates pointerAtIndex:i];
43
+ [pointer handleDidFinishRegisteringForRemoteNotifications];
44
+ }
45
+ }
46
+
47
+ # pragma mark - EXNotificationCenterDelegate
48
+
49
+ - (void)addDelegate:(id<EXRemoteNotificationPermissionDelegate>)delegate
50
+ {
51
+ [_delegates addPointer:(__bridge void * _Nullable)(delegate)];
52
+ }
53
+
54
+ - (void)removeDelegate:(id<EXRemoteNotificationPermissionDelegate>)delegate
55
+ {
56
+ for (int i = 0; i < _delegates.count; i++) {
57
+ id pointer = [_delegates pointerAtIndex:i];
58
+ if (pointer == (__bridge void * _Nullable)(delegate) || !pointer) {
59
+ [_delegates removePointerAtIndex:i];
60
+ i--;
61
+ }
62
+ }
63
+ // compact doesn't work, that's why we need the `|| !pointer` above
64
+ // http://www.openradar.me/15396578
65
+ [_delegates compact];
66
+ }
67
+
68
+ @end
@@ -0,0 +1,15 @@
1
+ // Copyright 2019-present 650 Industries. All rights reserved.
2
+
3
+ #import <ExpoModulesCore/EXPermissionsInterface.h>
4
+
5
+ @interface EXUserFacingNotificationsPermissionsRequester : NSObject <EXPermissionsRequester>
6
+
7
+ - (instancetype)initWithMethodQueue:(dispatch_queue_t)methodQueue;
8
+
9
+ - (void)requestPermissions:(NSDictionary *)permissions
10
+ withResolver:(EXPromiseResolveBlock)resolve
11
+ rejecter:(EXPromiseRejectBlock)reject;
12
+
13
+ + (void)setRequestedPermissions:(NSDictionary *)permissions;
14
+
15
+ @end