@knocklabs/expo 0.3.22-canary.2 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,389 @@
1
+ # @knocklabs/expo
2
+
3
+ ## 0.3.23
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [6539c97]
8
+ - @knocklabs/client@0.14.11
9
+ - @knocklabs/react-core@0.6.15
10
+ - @knocklabs/react-native@0.6.23
11
+
12
+ ## 0.3.22
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [e05ad61]
17
+ - Updated dependencies [e05ad61]
18
+ - Updated dependencies [e05ad61]
19
+ - @knocklabs/react-core@0.6.14
20
+ - @knocklabs/client@0.14.10
21
+ - @knocklabs/react-native@0.6.22
22
+
23
+ ## 0.3.22-canary.2
24
+
25
+ ### Patch Changes
26
+
27
+ - Updated dependencies [e69da7b]
28
+ - @knocklabs/react-core@0.6.14-canary.2
29
+ - @knocklabs/client@0.14.10-canary.2
30
+ - @knocklabs/react-native@0.6.22-canary.2
31
+
32
+ ## 0.3.22-canary.1
33
+
34
+ ### Patch Changes
35
+
36
+ - Updated dependencies [c76b2d9]
37
+ - @knocklabs/react-core@0.6.14-canary.1
38
+ - @knocklabs/client@0.14.10-canary.1
39
+ - @knocklabs/react-native@0.6.22-canary.1
40
+
41
+ ## 0.3.22-canary.0
42
+
43
+ ### Patch Changes
44
+
45
+ - Updated dependencies [86a72cc]
46
+ - @knocklabs/react-core@0.6.14-canary.0
47
+ - @knocklabs/client@0.14.10-canary.0
48
+ - @knocklabs/react-native@0.6.22-canary.0
49
+
50
+ ## 0.3.21
51
+
52
+ ### Patch Changes
53
+
54
+ - Updated dependencies [bea5604]
55
+ - @knocklabs/react-core@0.6.13
56
+ - @knocklabs/react-native@0.6.21
57
+
58
+ ## 0.3.20
59
+
60
+ ### Patch Changes
61
+
62
+ - b317a4e: bump @types/react-native-htmlview from 0.16.5 to 0.16.6
63
+ - Updated dependencies [b317a4e]
64
+ - @knocklabs/react-native@0.6.20
65
+
66
+ ## 0.3.19
67
+
68
+ ### Patch Changes
69
+
70
+ - Updated dependencies [4e73f12]
71
+ - @knocklabs/client@0.14.9
72
+ - @knocklabs/react-core@0.6.12
73
+ - @knocklabs/react-native@0.6.19
74
+
75
+ ## 0.3.18
76
+
77
+ ### Patch Changes
78
+
79
+ - Updated dependencies [dbbbaf7]
80
+ - @knocklabs/react-core@0.6.11
81
+ - @knocklabs/react-native@0.6.18
82
+
83
+ ## 0.3.17
84
+
85
+ ### Patch Changes
86
+
87
+ - Updated dependencies [337bade]
88
+ - @knocklabs/react-core@0.6.10
89
+ - @knocklabs/react-native@0.6.17
90
+
91
+ ## 0.3.16
92
+
93
+ ### Patch Changes
94
+
95
+ - e367c6f: Fix `ReferenceError` raised on feed initialization
96
+
97
+ @knocklabs/react-native@0.6.13 and @knocklabs/expo@0.3.13 contained a bug in which the error
98
+ `ReferenceError: Property 'crypto' doesn't exist` would occur when initializing a feed via any of
99
+ the following methods:
100
+
101
+ - The `KnockFeedProvider` context provider
102
+ - The `useNotifications` hook
103
+ - A call to `knock.feeds.initialize()`
104
+
105
+ This has been fixed by adding
106
+ [react-native-get-random-values](https://github.com/LinusU/react-native-get-random-values) as a
107
+ dependency of our React Native and Expo SDKs.
108
+
109
+ - Updated dependencies [e367c6f]
110
+ - @knocklabs/react-native@0.6.16
111
+
112
+ ## 0.3.15
113
+
114
+ ### Patch Changes
115
+
116
+ - Updated dependencies [329ee05]
117
+ - @knocklabs/react-core@0.6.9
118
+ - @knocklabs/client@0.14.8
119
+ - @knocklabs/react-native@0.6.15
120
+
121
+ ## 0.3.14
122
+
123
+ ### Patch Changes
124
+
125
+ - Updated dependencies [efd1005]
126
+ - @knocklabs/client@0.14.7
127
+ - @knocklabs/react-core@0.6.8
128
+ - @knocklabs/react-native@0.6.14
129
+
130
+ ## 0.3.13
131
+
132
+ ### Patch Changes
133
+
134
+ - Updated dependencies [a5c615e]
135
+ - @knocklabs/client@0.14.6
136
+ - @knocklabs/react-core@0.6.7
137
+ - @knocklabs/react-native@0.6.13
138
+
139
+ ## 0.3.12
140
+
141
+ ### Patch Changes
142
+
143
+ - Updated dependencies [8f00623]
144
+ - @knocklabs/client@0.14.5
145
+ - @knocklabs/react-core@0.6.6
146
+ - @knocklabs/react-native@0.6.12
147
+
148
+ ## 0.3.11
149
+
150
+ ### Patch Changes
151
+
152
+ - Updated dependencies [e800896]
153
+ - @knocklabs/react-core@0.6.5
154
+ - @knocklabs/client@0.14.4
155
+ - @knocklabs/react-native@0.6.11
156
+
157
+ ## 0.3.10
158
+
159
+ ### Patch Changes
160
+
161
+ - Updated dependencies [96d70bc]
162
+ - @knocklabs/react-core@0.6.4
163
+ - @knocklabs/react-native@0.6.10
164
+
165
+ ## 0.3.9
166
+
167
+ ### Patch Changes
168
+
169
+ - 1fb7094: Allow styling stroke width of the bell icon
170
+ - Updated dependencies [1fb7094]
171
+ - @knocklabs/react-native@0.6.9
172
+
173
+ ## 0.3.8
174
+
175
+ ### Patch Changes
176
+
177
+ - 43f9724: Allow styling bell icon and badge using `styleOverride` prop of `<NotificationIconButton>`
178
+ - Updated dependencies [43f9724]
179
+ - @knocklabs/react-native@0.6.8
180
+
181
+ ## 0.3.7
182
+
183
+ ### Patch Changes
184
+
185
+ - Updated dependencies [c97a1d9]
186
+ - @knocklabs/react-core@0.6.3
187
+ - @knocklabs/client@0.14.3
188
+ - @knocklabs/react-native@0.6.7
189
+
190
+ ## 0.3.6
191
+
192
+ ### Patch Changes
193
+
194
+ - Updated dependencies [b80a656]
195
+ - @knocklabs/react-native@0.6.6
196
+
197
+ ## 0.3.5
198
+
199
+ ### Patch Changes
200
+
201
+ - Updated dependencies [00439a2]
202
+ - @knocklabs/client@0.14.2
203
+ - @knocklabs/react-core@0.6.2
204
+ - @knocklabs/react-native@0.6.5
205
+
206
+ ## 0.3.4
207
+
208
+ ### Patch Changes
209
+
210
+ - Updated dependencies [4c41841]
211
+ - @knocklabs/client@0.14.1
212
+ - @knocklabs/react-core@0.6.1
213
+ - @knocklabs/react-native@0.6.4
214
+
215
+ ## 0.3.3
216
+
217
+ ### Patch Changes
218
+
219
+ - Updated dependencies [711948c]
220
+ - @knocklabs/react-core@0.6.0
221
+ - @knocklabs/client@0.14.0
222
+ - @knocklabs/react-native@0.6.3
223
+
224
+ ## 0.3.2
225
+
226
+ ### Patch Changes
227
+
228
+ - Updated dependencies [187abc1]
229
+ - @knocklabs/client@0.13.1
230
+ - @knocklabs/react-core@0.5.2
231
+ - @knocklabs/react-native@0.6.2
232
+
233
+ ## 0.3.1
234
+
235
+ ### Patch Changes
236
+
237
+ - Updated dependencies [4cd1b1e]
238
+ - @knocklabs/client@0.13.0
239
+ - @knocklabs/react-core@0.5.1
240
+ - @knocklabs/react-native@0.6.1
241
+
242
+ ## 0.3.0
243
+
244
+ ### Minor Changes
245
+
246
+ - 8ba5dcb: [JS] Support React 19 in React SDKs
247
+
248
+ ### Patch Changes
249
+
250
+ - Updated dependencies [8ba5dcb]
251
+ - @knocklabs/client@0.12.0
252
+ - @knocklabs/react-core@0.5.0
253
+ - @knocklabs/react-native@0.6.0
254
+
255
+ ## 0.2.12
256
+
257
+ ### Patch Changes
258
+
259
+ - Updated dependencies [226e319]
260
+ - @knocklabs/react-core@0.4.2
261
+ - @knocklabs/react-native@0.5.12
262
+
263
+ ## 0.2.11
264
+
265
+ ### Patch Changes
266
+
267
+ - Updated dependencies [1b86a0c]
268
+ - @knocklabs/react-core@0.4.1
269
+ - @knocklabs/react-native@0.5.11
270
+
271
+ ## 0.2.10
272
+
273
+ ### Patch Changes
274
+
275
+ - Updated dependencies [7904b65]
276
+ - @knocklabs/react-core@0.4.0
277
+ - @knocklabs/react-native@0.5.10
278
+
279
+ ## 0.2.9
280
+
281
+ ### Patch Changes
282
+
283
+ - Updated dependencies [8ea25f4]
284
+ - @knocklabs/client@0.11.4
285
+ - @knocklabs/react-core@0.3.4
286
+ - @knocklabs/react-native@0.5.9
287
+
288
+ ## 0.2.8
289
+
290
+ ### Patch Changes
291
+
292
+ - Updated dependencies [12bc993]
293
+ - Updated dependencies [4f76cd6]
294
+ - @knocklabs/react-core@0.3.3
295
+ - @knocklabs/client@0.11.3
296
+ - @knocklabs/react-native@0.5.8
297
+
298
+ ## 0.2.7
299
+
300
+ ### Patch Changes
301
+
302
+ - Updated dependencies [85418a0]
303
+ - Updated dependencies [2161d3f]
304
+ - Updated dependencies [8cc9338]
305
+ - Updated dependencies [da84a75]
306
+ - Updated dependencies [2161d3f]
307
+ - Updated dependencies [2161d3f]
308
+ - Updated dependencies [1ba1393]
309
+ - Updated dependencies [b4b5c02]
310
+ - @knocklabs/react-core@0.3.2
311
+ - @knocklabs/client@0.11.2
312
+ - @knocklabs/react-native@0.5.7
313
+
314
+ ## 0.2.6
315
+
316
+ ### Patch Changes
317
+
318
+ - Updated dependencies [b9f6712]
319
+ - @knocklabs/react-core@0.3.1
320
+ - @knocklabs/client@0.11.1
321
+ - @knocklabs/react-native@0.5.6
322
+
323
+ ## 0.2.5
324
+
325
+ ### Patch Changes
326
+
327
+ - Updated dependencies [013ad8d]
328
+ - @knocklabs/react-core@0.3.0
329
+ - @knocklabs/client@0.11.0
330
+ - @knocklabs/react-native@0.5.5
331
+
332
+ ## 0.2.4
333
+
334
+ ### Patch Changes
335
+
336
+ - Updated dependencies [26db496]
337
+ - Updated dependencies [988aaf9]
338
+ - @knocklabs/client@0.10.17
339
+ - @knocklabs/react-core@0.2.29
340
+ - @knocklabs/react-native@0.5.4
341
+
342
+ ## 0.2.3
343
+
344
+ ### Patch Changes
345
+
346
+ - Updated dependencies [bc99374]
347
+ - @knocklabs/client@0.10.16
348
+ - @knocklabs/react-core@0.2.28
349
+ - @knocklabs/react-native@0.5.3
350
+
351
+ ## 0.2.2
352
+
353
+ ### Patch Changes
354
+
355
+ - Updated dependencies [26166e3]
356
+ - @knocklabs/client@0.10.15
357
+ - @knocklabs/react-core@0.2.27
358
+ - @knocklabs/react-native@0.5.2
359
+
360
+ ## 0.2.1
361
+
362
+ ### Patch Changes
363
+
364
+ - Updated dependencies [7510909]
365
+ - @knocklabs/client@0.10.14
366
+ - @knocklabs/react-core@0.2.26
367
+ - @knocklabs/react-native@0.5.1
368
+
369
+ ## 0.2.0
370
+
371
+ ### Minor Changes
372
+
373
+ - 4ac1e67: Add KnockPushNotificationProvider
374
+
375
+ ### Patch Changes
376
+
377
+ - Updated dependencies [4ac1e67]
378
+ - @knocklabs/react-native@0.5.0
379
+
380
+ ## 0.1.0
381
+
382
+ ### Minor Changes
383
+
384
+ - a82e897: Move KnockExpoPushNotificationProvider to @knocklabs/expo
385
+
386
+ ### Patch Changes
387
+
388
+ - Updated dependencies [a82e897]
389
+ - @knocklabs/react-native@0.4.0
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./modules/push/KnockExpoPushNotificationProvider.js"),o=require("@knocklabs/react-native");exports.KnockExpoPushNotificationProvider=t.KnockExpoPushNotificationProvider;exports.useExpoPushNotifications=t.useExpoPushNotifications;Object.keys(o).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>o[e]})});
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("react/jsx-runtime"),b=require("@knocklabs/react-core"),N=require("@knocklabs/react-native"),w=require("expo-constants"),T=require("expo-device"),j=require("expo-notifications"),i=require("react"),_=t=>t&&typeof t=="object"&&"default"in t?t:{default:t};function x(t){if(t&&typeof t=="object"&&"default"in t)return t;const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const c in t)if(c!=="default"){const a=Object.getOwnPropertyDescriptor(t,c);Object.defineProperty(r,c,a.get?a:{enumerable:!0,get:()=>t[c]})}}return r.default=t,Object.freeze(r)}const d=_(w),q=x(T),s=x(j);s.setNotificationHandler({handleNotification:async()=>({shouldShowAlert:!0,shouldPlaySound:!0,shouldSetBadge:!0,shouldShowBanner:!0,shouldShowList:!0})});const R=async t=>({shouldShowAlert:!0,shouldPlaySound:!0,shouldSetBadge:!0,shouldShowBanner:!0,shouldShowList:!0}),v=i.createContext(void 0);async function D(){const{status:t}=await s.getPermissionsAsync();if(t!=="granted"){const{status:r}=await s.requestPermissionsAsync();return r}return t}async function A(){try{return!d.default.expoConfig||!d.default.expoConfig.extra||!d.default.expoConfig.extra.eas?(console.error("[Knock] Expo Project ID is not defined in the app configuration."),null):await s.getExpoPushTokenAsync({projectId:d.default.expoConfig.extra.eas.projectId})}catch(t){return console.error("[Knock] Error getting Expo push token:",t),null}}async function H(){return q.isDevice?await D()!=="granted"?(console.warn("[Knock] Push notification permission not granted"),null):A():(console.warn("[Knock] Must use physical device for Push Notifications"),null)}const O=({knockExpoChannelId:t,customNotificationHandler:r,children:c,autoRegister:a=!0})=>{const{registerPushTokenToChannel:p,unregisterPushTokenFromChannel:S}=N.usePushNotifications(),[u,m]=i.useState(null),n=b.useKnockClient(),[g,y]=i.useState(()=>()=>{}),[k,K]=i.useState(()=>()=>{}),C=i.useCallback(e=>{y(()=>e)},[]),E=i.useCallback(e=>{K(()=>e)},[]),l=i.useCallback(async()=>{try{n.log("[Knock] Registering for push notifications");const e=await H();n.log(`[Knock] Token received: ${e==null?void 0:e.data}`),e!=null&&e.data&&(n.log(`[Knock] Setting push token: ${e.data}`),m(e.data))}catch(e){console.error("[Knock] Error registering for push notifications:",e)}},[n]),P=i.useCallback(async(e,f)=>{const o=e.request.content.data.knock_message_id;return n.messages.updateStatus(o,f)},[n]);return i.useEffect(()=>{s.setNotificationHandler({handleNotification:r??R}),a&&l().then(()=>{u&&p(u,t).then(o=>{n.log("[Knock] setChannelData success")}).catch(o=>{console.error("[Knock] Error in setting push token or channel data",o)})}).catch(o=>{console.error("[Knock] Error in setting push token or channel data",o)});const e=s.addNotificationReceivedListener(o=>{n.log("[Knock] Expo Push Notification received in foreground:"),P(o,"interacted"),g(o)}),f=s.addNotificationResponseReceivedListener(o=>{n.log("[Knock] Expo Push Notification was interacted with"),P(o.notification,"interacted"),k(o)});return()=>{s.removeNotificationSubscription(e),s.removeNotificationSubscription(f)}},[l,g,k,r,a,u,t,n]),h.jsx(v.Provider,{value:{expoPushToken:u,registerForPushNotifications:l,registerPushTokenToChannel:p,unregisterPushTokenFromChannel:S,onNotificationReceived:C,onNotificationTapped:E},children:c})},I=t=>h.jsx(N.KnockPushNotificationProvider,{children:h.jsx(O,{...t})}),B=()=>{const t=i.useContext(v);if(t===void 0)throw new Error("[Knock] useExpoPushNotifications must be used within a KnockExpoPushNotificationProvider");return t};exports.KnockExpoPushNotificationProvider=I;exports.useExpoPushNotifications=B;
2
+ //# sourceMappingURL=KnockExpoPushNotificationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnockExpoPushNotificationProvider.js","sources":["../../../../src/modules/push/KnockExpoPushNotificationProvider.tsx"],"sourcesContent":["import { Message, MessageEngagementStatus } from \"@knocklabs/client\";\nimport { useKnockClient } from \"@knocklabs/react-core\";\nimport {\n type KnockPushNotificationContextType,\n KnockPushNotificationProvider,\n usePushNotifications,\n} from \"@knocklabs/react-native\";\nimport Constants from \"expo-constants\";\nimport * as Device from \"expo-device\";\nimport * as Notifications from \"expo-notifications\";\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\n\nexport interface KnockExpoPushNotificationContextType\n extends KnockPushNotificationContextType {\n expoPushToken: string | null;\n registerForPushNotifications: () => Promise<void>;\n onNotificationReceived: (\n handler: (notification: Notifications.Notification) => void,\n ) => void;\n onNotificationTapped: (\n handler: (response: Notifications.NotificationResponse) => void,\n ) => void;\n}\n\nNotifications.setNotificationHandler({\n handleNotification: async () => {\n return {\n shouldShowAlert: true,\n shouldPlaySound: true,\n shouldSetBadge: true,\n shouldShowBanner: true,\n shouldShowList: true,\n };\n },\n});\n\nconst defaultNotificationHandler = async (\n _notification: Notifications.Notification,\n): Promise<Notifications.NotificationBehavior> => {\n return {\n shouldShowAlert: true,\n shouldPlaySound: true,\n shouldSetBadge: true,\n shouldShowBanner: true,\n shouldShowList: true,\n };\n};\n\nconst KnockExpoPushNotificationContext = createContext<\n KnockExpoPushNotificationContextType | undefined\n>(undefined);\n\nexport interface KnockExpoPushNotificationProviderProps {\n knockExpoChannelId: string;\n customNotificationHandler?: (\n notification: Notifications.Notification,\n ) => Promise<Notifications.NotificationBehavior>;\n children?: React.ReactElement;\n autoRegister?: boolean;\n}\n\nasync function requestPushPermissionIfNeeded(): Promise<string> {\n const { status: existingStatus } = await Notifications.getPermissionsAsync();\n\n if (existingStatus !== \"granted\") {\n const { status } = await Notifications.requestPermissionsAsync();\n return status;\n }\n\n return existingStatus;\n}\n\nasync function getExpoPushToken(): Promise<Notifications.ExpoPushToken | null> {\n try {\n if (\n !Constants.expoConfig ||\n !Constants.expoConfig.extra ||\n !Constants.expoConfig.extra.eas\n ) {\n console.error(\n \"[Knock] Expo Project ID is not defined in the app configuration.\",\n );\n return null;\n }\n const token = await Notifications.getExpoPushTokenAsync({\n projectId: Constants.expoConfig.extra.eas.projectId,\n });\n return token;\n } catch (error) {\n console.error(\"[Knock] Error getting Expo push token:\", error);\n return null;\n }\n}\n\nasync function requestPermissionAndGetPushToken(): Promise<Notifications.ExpoPushToken | null> {\n // Check for device support\n if (!Device.isDevice) {\n console.warn(\"[Knock] Must use physical device for Push Notifications\");\n return null;\n }\n\n const permissionStatus = await requestPushPermissionIfNeeded();\n\n if (permissionStatus !== \"granted\") {\n console.warn(\"[Knock] Push notification permission not granted\");\n return null;\n }\n\n return getExpoPushToken();\n}\n\nconst InternalKnockExpoPushNotificationProvider: React.FC<\n KnockExpoPushNotificationProviderProps\n> = ({\n knockExpoChannelId,\n customNotificationHandler,\n children,\n autoRegister = true,\n}) => {\n const { registerPushTokenToChannel, unregisterPushTokenFromChannel } =\n usePushNotifications();\n const [expoPushToken, setExpoPushToken] = useState<string | null>(null);\n const knockClient = useKnockClient();\n\n const [notificationReceivedHandler, setNotificationReceivedHandler] =\n useState<(notification: Notifications.Notification) => void>(\n () => () => {},\n );\n\n const [notificationTappedHandler, setNotificationTappedHandler] = useState<\n (response: Notifications.NotificationResponse) => void\n >(() => () => {});\n\n const handleNotificationReceived = useCallback(\n (handler: (notification: Notifications.Notification) => void) => {\n setNotificationReceivedHandler(() => handler);\n },\n [],\n );\n\n const handleNotificationTapped = useCallback(\n (handler: (response: Notifications.NotificationResponse) => void) => {\n setNotificationTappedHandler(() => handler);\n },\n [],\n );\n\n const registerForPushNotifications = useCallback(async (): Promise<void> => {\n try {\n knockClient.log(`[Knock] Registering for push notifications`);\n const token = await requestPermissionAndGetPushToken();\n knockClient.log(`[Knock] Token received: ${token?.data}`);\n if (token?.data) {\n knockClient.log(`[Knock] Setting push token: ${token.data}`);\n setExpoPushToken(token.data);\n }\n } catch (error) {\n console.error(`[Knock] Error registering for push notifications:`, error);\n }\n }, [knockClient]);\n\n const updateKnockMessageStatusFromNotification = useCallback(\n async (\n notification: Notifications.Notification,\n status: MessageEngagementStatus,\n ): Promise<Message> => {\n const messageId = notification.request.content.data[\n \"knock_message_id\"\n ] as string;\n return knockClient.messages.updateStatus(messageId, status);\n },\n [knockClient],\n );\n\n useEffect(() => {\n Notifications.setNotificationHandler({\n handleNotification:\n customNotificationHandler ?? defaultNotificationHandler,\n });\n\n if (autoRegister) {\n registerForPushNotifications()\n .then(() => {\n if (expoPushToken) {\n registerPushTokenToChannel(expoPushToken, knockExpoChannelId)\n .then((_result) => {\n knockClient.log(\"[Knock] setChannelData success\");\n })\n .catch((_error) => {\n console.error(\n \"[Knock] Error in setting push token or channel data\",\n _error,\n );\n });\n }\n })\n .catch((_error) => {\n console.error(\n \"[Knock] Error in setting push token or channel data\",\n _error,\n );\n });\n }\n\n const notificationReceivedSubscription =\n Notifications.addNotificationReceivedListener((notification) => {\n knockClient.log(\n \"[Knock] Expo Push Notification received in foreground:\",\n );\n updateKnockMessageStatusFromNotification(notification, \"interacted\");\n notificationReceivedHandler(notification);\n });\n\n const notificationResponseSubscription =\n Notifications.addNotificationResponseReceivedListener((response) => {\n knockClient.log(\"[Knock] Expo Push Notification was interacted with\");\n updateKnockMessageStatusFromNotification(\n response.notification,\n \"interacted\",\n );\n notificationTappedHandler(response);\n });\n\n return () => {\n Notifications.removeNotificationSubscription(\n notificationReceivedSubscription,\n );\n Notifications.removeNotificationSubscription(\n notificationResponseSubscription,\n );\n };\n\n // TODO: Remove when possible and ensure dependency array is correct\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n registerForPushNotifications,\n notificationReceivedHandler,\n notificationTappedHandler,\n customNotificationHandler,\n autoRegister,\n expoPushToken,\n knockExpoChannelId,\n knockClient,\n ]);\n\n return (\n <KnockExpoPushNotificationContext.Provider\n value={{\n expoPushToken,\n registerForPushNotifications,\n registerPushTokenToChannel,\n unregisterPushTokenFromChannel,\n onNotificationReceived: handleNotificationReceived,\n onNotificationTapped: handleNotificationTapped,\n }}\n >\n {children}\n </KnockExpoPushNotificationContext.Provider>\n );\n};\n\nexport const KnockExpoPushNotificationProvider: React.FC<\n KnockExpoPushNotificationProviderProps\n> = (props) => {\n return (\n <KnockPushNotificationProvider>\n <InternalKnockExpoPushNotificationProvider {...props} />\n </KnockPushNotificationProvider>\n );\n};\n\nexport const useExpoPushNotifications =\n (): KnockExpoPushNotificationContextType => {\n const context = useContext(KnockExpoPushNotificationContext);\n if (context === undefined) {\n throw new Error(\n \"[Knock] useExpoPushNotifications must be used within a KnockExpoPushNotificationProvider\",\n );\n }\n return context;\n };\n"],"names":["Notifications","defaultNotificationHandler","_notification","KnockExpoPushNotificationContext","createContext","requestPushPermissionIfNeeded","existingStatus","status","getExpoPushToken","Constants","error","requestPermissionAndGetPushToken","Device","InternalKnockExpoPushNotificationProvider","knockExpoChannelId","customNotificationHandler","children","autoRegister","registerPushTokenToChannel","unregisterPushTokenFromChannel","usePushNotifications","expoPushToken","setExpoPushToken","useState","knockClient","useKnockClient","notificationReceivedHandler","setNotificationReceivedHandler","notificationTappedHandler","setNotificationTappedHandler","handleNotificationReceived","useCallback","handler","handleNotificationTapped","registerForPushNotifications","token","updateKnockMessageStatusFromNotification","notification","messageId","useEffect","_result","_error","notificationReceivedSubscription","notificationResponseSubscription","response","jsx","KnockExpoPushNotificationProvider","props","KnockPushNotificationProvider","useExpoPushNotifications","context","useContext"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { KnockExpoPushNotificationProvider as r, useExpoPushNotifications as t } from "./modules/push/KnockExpoPushNotificationProvider.mjs";
2
+ export * from "@knocklabs/react-native";
3
+ export {
4
+ r as KnockExpoPushNotificationProvider,
5
+ t as useExpoPushNotifications
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,151 @@
1
+ import { jsx as h } from "react/jsx-runtime";
2
+ import { useKnockClient as y } from "@knocklabs/react-core";
3
+ import { KnockPushNotificationProvider as C, usePushNotifications as T } from "@knocklabs/react-native";
4
+ import c from "expo-constants";
5
+ import * as R from "expo-device";
6
+ import * as i from "expo-notifications";
7
+ import { createContext as b, useContext as A, useState as f, useCallback as a, useEffect as H } from "react";
8
+ i.setNotificationHandler({
9
+ handleNotification: async () => ({
10
+ shouldShowAlert: !0,
11
+ shouldPlaySound: !0,
12
+ shouldSetBadge: !0,
13
+ shouldShowBanner: !0,
14
+ shouldShowList: !0
15
+ })
16
+ });
17
+ const I = async (t) => ({
18
+ shouldShowAlert: !0,
19
+ shouldPlaySound: !0,
20
+ shouldSetBadge: !0,
21
+ shouldShowBanner: !0,
22
+ shouldShowList: !0
23
+ }), N = b(void 0);
24
+ async function j() {
25
+ const { status: t } = await i.getPermissionsAsync();
26
+ if (t !== "granted") {
27
+ const { status: r } = await i.requestPermissionsAsync();
28
+ return r;
29
+ }
30
+ return t;
31
+ }
32
+ async function q() {
33
+ try {
34
+ return !c.expoConfig || !c.expoConfig.extra || !c.expoConfig.extra.eas ? (console.error(
35
+ "[Knock] Expo Project ID is not defined in the app configuration."
36
+ ), null) : await i.getExpoPushTokenAsync({
37
+ projectId: c.expoConfig.extra.eas.projectId
38
+ });
39
+ } catch (t) {
40
+ return console.error("[Knock] Error getting Expo push token:", t), null;
41
+ }
42
+ }
43
+ async function B() {
44
+ return R.isDevice ? await j() !== "granted" ? (console.warn("[Knock] Push notification permission not granted"), null) : q() : (console.warn("[Knock] Must use physical device for Push Notifications"), null);
45
+ }
46
+ const D = ({
47
+ knockExpoChannelId: t,
48
+ customNotificationHandler: r,
49
+ children: m,
50
+ autoRegister: l = !0
51
+ }) => {
52
+ const { registerPushTokenToChannel: p, unregisterPushTokenFromChannel: x } = T(), [s, v] = f(null), n = y(), [g, K] = f(
53
+ () => () => {
54
+ }
55
+ ), [k, S] = f(() => () => {
56
+ }), w = a(
57
+ (o) => {
58
+ K(() => o);
59
+ },
60
+ []
61
+ ), E = a(
62
+ (o) => {
63
+ S(() => o);
64
+ },
65
+ []
66
+ ), u = a(async () => {
67
+ try {
68
+ n.log("[Knock] Registering for push notifications");
69
+ const o = await B();
70
+ n.log(`[Knock] Token received: ${o == null ? void 0 : o.data}`), o != null && o.data && (n.log(`[Knock] Setting push token: ${o.data}`), v(o.data));
71
+ } catch (o) {
72
+ console.error("[Knock] Error registering for push notifications:", o);
73
+ }
74
+ }, [n]), P = a(
75
+ async (o, d) => {
76
+ const e = o.request.content.data.knock_message_id;
77
+ return n.messages.updateStatus(e, d);
78
+ },
79
+ [n]
80
+ );
81
+ return H(() => {
82
+ i.setNotificationHandler({
83
+ handleNotification: r ?? I
84
+ }), l && u().then(() => {
85
+ s && p(s, t).then((e) => {
86
+ n.log("[Knock] setChannelData success");
87
+ }).catch((e) => {
88
+ console.error(
89
+ "[Knock] Error in setting push token or channel data",
90
+ e
91
+ );
92
+ });
93
+ }).catch((e) => {
94
+ console.error(
95
+ "[Knock] Error in setting push token or channel data",
96
+ e
97
+ );
98
+ });
99
+ const o = i.addNotificationReceivedListener((e) => {
100
+ n.log(
101
+ "[Knock] Expo Push Notification received in foreground:"
102
+ ), P(e, "interacted"), g(e);
103
+ }), d = i.addNotificationResponseReceivedListener((e) => {
104
+ n.log("[Knock] Expo Push Notification was interacted with"), P(
105
+ e.notification,
106
+ "interacted"
107
+ ), k(e);
108
+ });
109
+ return () => {
110
+ i.removeNotificationSubscription(
111
+ o
112
+ ), i.removeNotificationSubscription(
113
+ d
114
+ );
115
+ };
116
+ }, [
117
+ u,
118
+ g,
119
+ k,
120
+ r,
121
+ l,
122
+ s,
123
+ t,
124
+ n
125
+ ]), /* @__PURE__ */ h(
126
+ N.Provider,
127
+ {
128
+ value: {
129
+ expoPushToken: s,
130
+ registerForPushNotifications: u,
131
+ registerPushTokenToChannel: p,
132
+ unregisterPushTokenFromChannel: x,
133
+ onNotificationReceived: w,
134
+ onNotificationTapped: E
135
+ },
136
+ children: m
137
+ }
138
+ );
139
+ }, G = (t) => /* @__PURE__ */ h(C, { children: /* @__PURE__ */ h(D, { ...t }) }), z = () => {
140
+ const t = A(N);
141
+ if (t === void 0)
142
+ throw new Error(
143
+ "[Knock] useExpoPushNotifications must be used within a KnockExpoPushNotificationProvider"
144
+ );
145
+ return t;
146
+ };
147
+ export {
148
+ G as KnockExpoPushNotificationProvider,
149
+ z as useExpoPushNotifications
150
+ };
151
+ //# sourceMappingURL=KnockExpoPushNotificationProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnockExpoPushNotificationProvider.mjs","sources":["../../../../src/modules/push/KnockExpoPushNotificationProvider.tsx"],"sourcesContent":["import { Message, MessageEngagementStatus } from \"@knocklabs/client\";\nimport { useKnockClient } from \"@knocklabs/react-core\";\nimport {\n type KnockPushNotificationContextType,\n KnockPushNotificationProvider,\n usePushNotifications,\n} from \"@knocklabs/react-native\";\nimport Constants from \"expo-constants\";\nimport * as Device from \"expo-device\";\nimport * as Notifications from \"expo-notifications\";\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\n\nexport interface KnockExpoPushNotificationContextType\n extends KnockPushNotificationContextType {\n expoPushToken: string | null;\n registerForPushNotifications: () => Promise<void>;\n onNotificationReceived: (\n handler: (notification: Notifications.Notification) => void,\n ) => void;\n onNotificationTapped: (\n handler: (response: Notifications.NotificationResponse) => void,\n ) => void;\n}\n\nNotifications.setNotificationHandler({\n handleNotification: async () => {\n return {\n shouldShowAlert: true,\n shouldPlaySound: true,\n shouldSetBadge: true,\n shouldShowBanner: true,\n shouldShowList: true,\n };\n },\n});\n\nconst defaultNotificationHandler = async (\n _notification: Notifications.Notification,\n): Promise<Notifications.NotificationBehavior> => {\n return {\n shouldShowAlert: true,\n shouldPlaySound: true,\n shouldSetBadge: true,\n shouldShowBanner: true,\n shouldShowList: true,\n };\n};\n\nconst KnockExpoPushNotificationContext = createContext<\n KnockExpoPushNotificationContextType | undefined\n>(undefined);\n\nexport interface KnockExpoPushNotificationProviderProps {\n knockExpoChannelId: string;\n customNotificationHandler?: (\n notification: Notifications.Notification,\n ) => Promise<Notifications.NotificationBehavior>;\n children?: React.ReactElement;\n autoRegister?: boolean;\n}\n\nasync function requestPushPermissionIfNeeded(): Promise<string> {\n const { status: existingStatus } = await Notifications.getPermissionsAsync();\n\n if (existingStatus !== \"granted\") {\n const { status } = await Notifications.requestPermissionsAsync();\n return status;\n }\n\n return existingStatus;\n}\n\nasync function getExpoPushToken(): Promise<Notifications.ExpoPushToken | null> {\n try {\n if (\n !Constants.expoConfig ||\n !Constants.expoConfig.extra ||\n !Constants.expoConfig.extra.eas\n ) {\n console.error(\n \"[Knock] Expo Project ID is not defined in the app configuration.\",\n );\n return null;\n }\n const token = await Notifications.getExpoPushTokenAsync({\n projectId: Constants.expoConfig.extra.eas.projectId,\n });\n return token;\n } catch (error) {\n console.error(\"[Knock] Error getting Expo push token:\", error);\n return null;\n }\n}\n\nasync function requestPermissionAndGetPushToken(): Promise<Notifications.ExpoPushToken | null> {\n // Check for device support\n if (!Device.isDevice) {\n console.warn(\"[Knock] Must use physical device for Push Notifications\");\n return null;\n }\n\n const permissionStatus = await requestPushPermissionIfNeeded();\n\n if (permissionStatus !== \"granted\") {\n console.warn(\"[Knock] Push notification permission not granted\");\n return null;\n }\n\n return getExpoPushToken();\n}\n\nconst InternalKnockExpoPushNotificationProvider: React.FC<\n KnockExpoPushNotificationProviderProps\n> = ({\n knockExpoChannelId,\n customNotificationHandler,\n children,\n autoRegister = true,\n}) => {\n const { registerPushTokenToChannel, unregisterPushTokenFromChannel } =\n usePushNotifications();\n const [expoPushToken, setExpoPushToken] = useState<string | null>(null);\n const knockClient = useKnockClient();\n\n const [notificationReceivedHandler, setNotificationReceivedHandler] =\n useState<(notification: Notifications.Notification) => void>(\n () => () => {},\n );\n\n const [notificationTappedHandler, setNotificationTappedHandler] = useState<\n (response: Notifications.NotificationResponse) => void\n >(() => () => {});\n\n const handleNotificationReceived = useCallback(\n (handler: (notification: Notifications.Notification) => void) => {\n setNotificationReceivedHandler(() => handler);\n },\n [],\n );\n\n const handleNotificationTapped = useCallback(\n (handler: (response: Notifications.NotificationResponse) => void) => {\n setNotificationTappedHandler(() => handler);\n },\n [],\n );\n\n const registerForPushNotifications = useCallback(async (): Promise<void> => {\n try {\n knockClient.log(`[Knock] Registering for push notifications`);\n const token = await requestPermissionAndGetPushToken();\n knockClient.log(`[Knock] Token received: ${token?.data}`);\n if (token?.data) {\n knockClient.log(`[Knock] Setting push token: ${token.data}`);\n setExpoPushToken(token.data);\n }\n } catch (error) {\n console.error(`[Knock] Error registering for push notifications:`, error);\n }\n }, [knockClient]);\n\n const updateKnockMessageStatusFromNotification = useCallback(\n async (\n notification: Notifications.Notification,\n status: MessageEngagementStatus,\n ): Promise<Message> => {\n const messageId = notification.request.content.data[\n \"knock_message_id\"\n ] as string;\n return knockClient.messages.updateStatus(messageId, status);\n },\n [knockClient],\n );\n\n useEffect(() => {\n Notifications.setNotificationHandler({\n handleNotification:\n customNotificationHandler ?? defaultNotificationHandler,\n });\n\n if (autoRegister) {\n registerForPushNotifications()\n .then(() => {\n if (expoPushToken) {\n registerPushTokenToChannel(expoPushToken, knockExpoChannelId)\n .then((_result) => {\n knockClient.log(\"[Knock] setChannelData success\");\n })\n .catch((_error) => {\n console.error(\n \"[Knock] Error in setting push token or channel data\",\n _error,\n );\n });\n }\n })\n .catch((_error) => {\n console.error(\n \"[Knock] Error in setting push token or channel data\",\n _error,\n );\n });\n }\n\n const notificationReceivedSubscription =\n Notifications.addNotificationReceivedListener((notification) => {\n knockClient.log(\n \"[Knock] Expo Push Notification received in foreground:\",\n );\n updateKnockMessageStatusFromNotification(notification, \"interacted\");\n notificationReceivedHandler(notification);\n });\n\n const notificationResponseSubscription =\n Notifications.addNotificationResponseReceivedListener((response) => {\n knockClient.log(\"[Knock] Expo Push Notification was interacted with\");\n updateKnockMessageStatusFromNotification(\n response.notification,\n \"interacted\",\n );\n notificationTappedHandler(response);\n });\n\n return () => {\n Notifications.removeNotificationSubscription(\n notificationReceivedSubscription,\n );\n Notifications.removeNotificationSubscription(\n notificationResponseSubscription,\n );\n };\n\n // TODO: Remove when possible and ensure dependency array is correct\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n registerForPushNotifications,\n notificationReceivedHandler,\n notificationTappedHandler,\n customNotificationHandler,\n autoRegister,\n expoPushToken,\n knockExpoChannelId,\n knockClient,\n ]);\n\n return (\n <KnockExpoPushNotificationContext.Provider\n value={{\n expoPushToken,\n registerForPushNotifications,\n registerPushTokenToChannel,\n unregisterPushTokenFromChannel,\n onNotificationReceived: handleNotificationReceived,\n onNotificationTapped: handleNotificationTapped,\n }}\n >\n {children}\n </KnockExpoPushNotificationContext.Provider>\n );\n};\n\nexport const KnockExpoPushNotificationProvider: React.FC<\n KnockExpoPushNotificationProviderProps\n> = (props) => {\n return (\n <KnockPushNotificationProvider>\n <InternalKnockExpoPushNotificationProvider {...props} />\n </KnockPushNotificationProvider>\n );\n};\n\nexport const useExpoPushNotifications =\n (): KnockExpoPushNotificationContextType => {\n const context = useContext(KnockExpoPushNotificationContext);\n if (context === undefined) {\n throw new Error(\n \"[Knock] useExpoPushNotifications must be used within a KnockExpoPushNotificationProvider\",\n );\n }\n return context;\n };\n"],"names":["Notifications","defaultNotificationHandler","_notification","KnockExpoPushNotificationContext","createContext","requestPushPermissionIfNeeded","existingStatus","status","getExpoPushToken","Constants","error","requestPermissionAndGetPushToken","Device","InternalKnockExpoPushNotificationProvider","knockExpoChannelId","customNotificationHandler","children","autoRegister","registerPushTokenToChannel","unregisterPushTokenFromChannel","usePushNotifications","expoPushToken","setExpoPushToken","useState","knockClient","useKnockClient","notificationReceivedHandler","setNotificationReceivedHandler","notificationTappedHandler","setNotificationTappedHandler","handleNotificationReceived","useCallback","handler","handleNotificationTapped","registerForPushNotifications","token","updateKnockMessageStatusFromNotification","notification","messageId","useEffect","_result","_error","notificationReceivedSubscription","notificationResponseSubscription","response","jsx","KnockExpoPushNotificationProvider","props","KnockPushNotificationProvider","useExpoPushNotifications","context","useContext"],"mappings":";;;;;;;AA8BAA,EAAc,uBAAuB;AAAA,EACnC,oBAAoB,aACX;AAAA,IACL,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,EAClB;AAEJ,CAAC;AAED,MAAMC,IAA6B,OACjCC,OAEO;AAAA,EACL,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,gBAAgB;AAClB,IAGIC,IAAmCC,EAEvC,MAAS;AAWX,eAAeC,IAAiD;AAC9D,QAAM,EAAE,QAAQC,EAAmB,IAAA,MAAMN,EAAc,oBAAoB;AAE3E,MAAIM,MAAmB,WAAW;AAChC,UAAM,EAAE,QAAAC,EAAA,IAAW,MAAMP,EAAc,wBAAwB;AACxD,WAAAO;AAAA,EAAA;AAGF,SAAAD;AACT;AAEA,eAAeE,IAAgE;AACzE,MAAA;AAEA,WAAA,CAACC,EAAU,cACX,CAACA,EAAU,WAAW,SACtB,CAACA,EAAU,WAAW,MAAM,OAEpB,QAAA;AAAA,MACN;AAAA,IACF,GACO,QAEK,MAAMT,EAAc,sBAAsB;AAAA,MACtD,WAAWS,EAAU,WAAW,MAAM,IAAI;AAAA,IAAA,CAC3C;AAAA,WAEMC,GAAO;AACN,mBAAA,MAAM,0CAA0CA,CAAK,GACtD;AAAA,EAAA;AAEX;AAEA,eAAeC,IAAgF;AAEzF,SAACC,EAAO,WAKa,MAAMP,EAA8B,MAEpC,aACvB,QAAQ,KAAK,kDAAkD,GACxD,QAGFG,EAAiB,KAXtB,QAAQ,KAAK,yDAAyD,GAC/D;AAWX;AAEA,MAAMK,IAEF,CAAC;AAAA,EACH,oBAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC,IAAe;AACjB,MAAM;AACJ,QAAM,EAAE,4BAAAC,GAA4B,gCAAAC,EAA+B,IACjEC,EAAqB,GACjB,CAACC,GAAeC,CAAgB,IAAIC,EAAwB,IAAI,GAChEC,IAAcC,EAAe,GAE7B,CAACC,GAA6BC,CAA8B,IAChEJ;AAAA,IACE,MAAM,MAAM;AAAA,IAAA;AAAA,EACd,GAEI,CAACK,GAA2BC,CAA4B,IAAIN,EAEhE,MAAM,MAAM;AAAA,EAAA,CAAE,GAEVO,IAA6BC;AAAA,IACjC,CAACC,MAAgE;AAC/D,MAAAL,EAA+B,MAAMK,CAAO;AAAA,IAC9C;AAAA,IACA,CAAA;AAAA,EACF,GAEMC,IAA2BF;AAAA,IAC/B,CAACC,MAAoE;AACnE,MAAAH,EAA6B,MAAMG,CAAO;AAAA,IAC5C;AAAA,IACA,CAAA;AAAA,EACF,GAEME,IAA+BH,EAAY,YAA2B;AACtE,QAAA;AACF,MAAAP,EAAY,IAAI,4CAA4C;AACtD,YAAAW,IAAQ,MAAMxB,EAAiC;AACrD,MAAAa,EAAY,IAAI,2BAA2BW,KAAA,gBAAAA,EAAO,IAAI,EAAE,GACpDA,KAAA,QAAAA,EAAO,SACTX,EAAY,IAAI,+BAA+BW,EAAM,IAAI,EAAE,GAC3Db,EAAiBa,EAAM,IAAI;AAAA,aAEtBzB,GAAO;AACN,cAAA,MAAM,qDAAqDA,CAAK;AAAA,IAAA;AAAA,EAC1E,GACC,CAACc,CAAW,CAAC,GAEVY,IAA2CL;AAAA,IAC/C,OACEM,GACA9B,MACqB;AACrB,YAAM+B,IAAYD,EAAa,QAAQ,QAAQ,KAC7C;AAEF,aAAOb,EAAY,SAAS,aAAac,GAAW/B,CAAM;AAAA,IAC5D;AAAA,IACA,CAACiB,CAAW;AAAA,EACd;AAEA,SAAAe,EAAU,MAAM;AACd,IAAAvC,EAAc,uBAAuB;AAAA,MACnC,oBACEe,KAA6Bd;AAAA,IAAA,CAChC,GAEGgB,KAC2BiB,EAAA,EAC1B,KAAK,MAAM;AACV,MAAIb,KACFH,EAA2BG,GAAeP,CAAkB,EACzD,KAAK,CAAC0B,MAAY;AACjB,QAAAhB,EAAY,IAAI,gCAAgC;AAAA,MAAA,CACjD,EACA,MAAM,CAACiB,MAAW;AACT,gBAAA;AAAA,UACN;AAAA,UACAA;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IACL,CACD,EACA,MAAM,CAACA,MAAW;AACT,cAAA;AAAA,QACN;AAAA,QACAA;AAAA,MACF;AAAA,IAAA,CACD;AAGL,UAAMC,IACJ1C,EAAc,gCAAgC,CAACqC,MAAiB;AAClD,MAAAb,EAAA;AAAA,QACV;AAAA,MACF,GACAY,EAAyCC,GAAc,YAAY,GACnEX,EAA4BW,CAAY;AAAA,IAAA,CACzC,GAEGM,IACJ3C,EAAc,wCAAwC,CAAC4C,MAAa;AAClE,MAAApB,EAAY,IAAI,oDAAoD,GACpEY;AAAA,QACEQ,EAAS;AAAA,QACT;AAAA,MACF,GACAhB,EAA0BgB,CAAQ;AAAA,IAAA,CACnC;AAEH,WAAO,MAAM;AACG,MAAA5C,EAAA;AAAA,QACZ0C;AAAA,MACF,GACc1C,EAAA;AAAA,QACZ2C;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GAIC;AAAA,IACDT;AAAA,IACAR;AAAA,IACAE;AAAA,IACAb;AAAA,IACAE;AAAA,IACAI;AAAA,IACAP;AAAA,IACAU;AAAA,EAAA,CACD,GAGC,gBAAAqB;AAAA,IAAC1C,EAAiC;AAAA,IAAjC;AAAA,MACC,OAAO;AAAA,QACL,eAAAkB;AAAA,QACA,8BAAAa;AAAA,QACA,4BAAAhB;AAAA,QACA,gCAAAC;AAAA,QACA,wBAAwBW;AAAA,QACxB,sBAAsBG;AAAA,MACxB;AAAA,MAEC,UAAAjB;AAAA,IAAA;AAAA,EACH;AAEJ,GAEa8B,IAET,CAACC,wBAEAC,GACC,EAAA,UAAA,gBAAAH,EAAChC,GAA2C,EAAA,GAAGkC,EAAO,CAAA,GACxD,GAISE,IACX,MAA4C;AACpC,QAAAC,IAAUC,EAAWhD,CAAgC;AAC3D,MAAI+C,MAAY;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEK,SAAAA;AACT;"}
@@ -0,0 +1,3 @@
1
+ export * from './modules/push';
2
+ export * from '@knocklabs/react-native';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { KnockPushNotificationContextType } from '@knocklabs/react-native';
2
+ import { default as React } from 'react';
3
+ import * as Notifications from "expo-notifications";
4
+ export interface KnockExpoPushNotificationContextType extends KnockPushNotificationContextType {
5
+ expoPushToken: string | null;
6
+ registerForPushNotifications: () => Promise<void>;
7
+ onNotificationReceived: (handler: (notification: Notifications.Notification) => void) => void;
8
+ onNotificationTapped: (handler: (response: Notifications.NotificationResponse) => void) => void;
9
+ }
10
+ export interface KnockExpoPushNotificationProviderProps {
11
+ knockExpoChannelId: string;
12
+ customNotificationHandler?: (notification: Notifications.Notification) => Promise<Notifications.NotificationBehavior>;
13
+ children?: React.ReactElement;
14
+ autoRegister?: boolean;
15
+ }
16
+ export declare const KnockExpoPushNotificationProvider: React.FC<KnockExpoPushNotificationProviderProps>;
17
+ export declare const useExpoPushNotifications: () => KnockExpoPushNotificationContextType;
18
+ //# sourceMappingURL=KnockExpoPushNotificationProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnockExpoPushNotificationProvider.d.ts","sourceRoot":"","sources":["../../../../src/modules/push/KnockExpoPushNotificationProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gCAAgC,EAGtC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,oCACf,SAAQ,gCAAgC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4BAA4B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,sBAAsB,EAAE,CACtB,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,KAAK,IAAI,KACxD,IAAI,CAAC;IACV,oBAAoB,EAAE,CACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,oBAAoB,KAAK,IAAI,KAC5D,IAAI,CAAC;CACX;AA8BD,MAAM,WAAW,sCAAsC;IACrD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,CAAC,EAAE,CAC1B,YAAY,EAAE,aAAa,CAAC,YAAY,KACrC,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA0MD,eAAO,MAAM,iCAAiC,EAAE,KAAK,CAAC,EAAE,CACtD,sCAAsC,CAOvC,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAC/B,oCAQH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './KnockExpoPushNotificationProvider';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/push/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knocklabs/expo",
3
- "version": "0.3.22-canary.2",
3
+ "version": "0.3.23",
4
4
  "author": "@knocklabs",
5
5
  "license": "MIT",
6
6
  "main": "dist/cjs/index.js",
@@ -49,9 +49,9 @@
49
49
  "react-native": "*"
50
50
  },
51
51
  "dependencies": {
52
- "@knocklabs/client": "workspace:^",
53
- "@knocklabs/react-core": "workspace:^",
54
- "@knocklabs/react-native": "workspace:^",
52
+ "@knocklabs/client": "^0.14.11",
53
+ "@knocklabs/react-core": "^0.6.15",
54
+ "@knocklabs/react-native": "^0.6.23",
55
55
  "react-native-gesture-handler": "^2.25.0",
56
56
  "react-native-render-html": "^6.3.4",
57
57
  "react-native-svg": "^15.12.0"
@@ -77,4 +77,4 @@
77
77
  "vite-plugin-dts": "^4.5.0",
78
78
  "vite-plugin-no-bundle": "^4.0.0"
79
79
  }
80
- }
80
+ }