@goliapkg/sentori-react-native 2.1.0 → 3.0.0

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 (50) hide show
  1. package/android/build.gradle +12 -0
  2. package/android/src/main/AndroidManifest.xml +24 -1
  3. package/android/src/main/java/com/sentori/SentoriFirebaseMessagingService.kt +56 -0
  4. package/android/src/main/java/com/sentori/SentoriModule.kt +43 -0
  5. package/android/src/main/java/com/sentori/SentoriPushNotifications.kt +293 -0
  6. package/ios/SentoriModule.swift +39 -0
  7. package/ios/SentoriPushNotifications.swift +303 -0
  8. package/lib/capture.d.ts +6 -1
  9. package/lib/capture.d.ts.map +1 -1
  10. package/lib/capture.js +49 -2
  11. package/lib/capture.js.map +1 -1
  12. package/lib/compat/sentry.d.ts +14 -0
  13. package/lib/compat/sentry.d.ts.map +1 -1
  14. package/lib/compat/sentry.js +6 -0
  15. package/lib/compat/sentry.js.map +1 -1
  16. package/lib/config.d.ts +12 -18
  17. package/lib/config.d.ts.map +1 -1
  18. package/lib/config.js.map +1 -1
  19. package/lib/expo-compat.d.ts +270 -0
  20. package/lib/expo-compat.d.ts.map +1 -0
  21. package/lib/expo-compat.js +500 -0
  22. package/lib/expo-compat.js.map +1 -0
  23. package/lib/index.d.ts +17 -0
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +18 -0
  26. package/lib/index.js.map +1 -1
  27. package/lib/init.d.ts +7 -0
  28. package/lib/init.d.ts.map +1 -1
  29. package/lib/init.js +3 -0
  30. package/lib/init.js.map +1 -1
  31. package/lib/native.d.ts +17 -0
  32. package/lib/native.d.ts.map +1 -1
  33. package/lib/native.js +57 -0
  34. package/lib/native.js.map +1 -1
  35. package/lib/push.d.ts +58 -0
  36. package/lib/push.d.ts.map +1 -0
  37. package/lib/push.js +294 -0
  38. package/lib/push.js.map +1 -0
  39. package/package.json +9 -5
  40. package/src/__tests__/before-send.test.ts +72 -0
  41. package/src/__tests__/compat-sentry.test.ts +121 -0
  42. package/src/__tests__/push.test.ts +178 -0
  43. package/src/capture.ts +48 -2
  44. package/src/compat/sentry.ts +8 -0
  45. package/src/config.ts +12 -15
  46. package/src/expo-compat.ts +698 -0
  47. package/src/index.ts +40 -0
  48. package/src/init.ts +10 -0
  49. package/src/native.ts +102 -0
  50. package/src/push.ts +382 -0
@@ -0,0 +1,500 @@
1
+ // v2.18 — `expo-notifications` drop-in shim.
2
+ //
3
+ // Customers coming from `expo-notifications` change ONE line:
4
+ //
5
+ // - import * as Notifications from 'expo-notifications'
6
+ // + import * as Notifications from '@goliapkg/sentori-react-native/expo-compat'
7
+ //
8
+ // …and most of their existing code keeps compiling. The API
9
+ // surface here mirrors expo-notifications' public exports; under the
10
+ // hood every call routes through the same `sentori.push.*` native
11
+ // module the rest of the SDK uses.
12
+ //
13
+ // What works — P0 surface, covered by the existing native module:
14
+ //
15
+ // getPermissionsAsync — non-prompting status read
16
+ // requestPermissionsAsync — OS prompt + permission flow
17
+ // getDevicePushTokenAsync — raw APNs (iOS) / FCM (Android) token
18
+ // getExpoPushTokenAsync — same as device token, wrapped in
19
+ // { type: 'expo', data } shape;
20
+ // NOT a real exp.host token — see
21
+ // recipe for the server-side change
22
+ // addNotificationReceivedListener — foreground notification callback
23
+ // addNotificationResponseReceivedListener — tap callback
24
+ // setNotificationHandler — presentation behaviour hook
25
+ // unregisterForNotificationsAsync — revoke + drop cached handle
26
+ // addPushTokenListener — rebind on token rotation
27
+ // AndroidImportance / IosAuthorizationStatus / DEFAULT_ACTION_IDENTIFIER
28
+ //
29
+ // What's not implemented yet (each throws a tagged Error with a
30
+ // pointer at the migration recipe — silent no-ops would be worse):
31
+ //
32
+ // scheduleNotificationAsync + the 7 SchedulableTriggerInputTypes
33
+ // getBadgeCountAsync / setBadgeCountAsync
34
+ // setNotificationChannelAsync + the channel-group CRUD
35
+ // setNotificationCategoryAsync + interactive actions
36
+ // useLastNotificationResponse + getLastNotificationResponseAsync
37
+ // subscribeToTopicAsync / unsubscribeFromTopicAsync
38
+ // registerTaskAsync (background task)
39
+ // getPresentedNotificationsAsync / dismissNotificationAsync
40
+ //
41
+ // The "not implemented" list will close in follow-up minor releases
42
+ // as the native module grows. Anything in expo-notifications that
43
+ // requires native code we don't have today goes here; nothing here
44
+ // is a permanent gap.
45
+ import { logger } from '@goliapkg/sentori-core';
46
+ import { pushDrainState, pushGetStatus, pushRegister, pushRequestPermission, pushUnregister, } from './native';
47
+ // ── Constants — same values as expo-notifications ─────────────────
48
+ export const DEFAULT_ACTION_IDENTIFIER = 'expo.modules.notifications.actions.DEFAULT';
49
+ export const AndroidImportance = {
50
+ NONE: 0,
51
+ MIN: 1,
52
+ LOW: 2,
53
+ DEFAULT: 3,
54
+ HIGH: 4,
55
+ MAX: 5,
56
+ };
57
+ export const AndroidNotificationPriority = {
58
+ MIN: 'min',
59
+ LOW: 'low',
60
+ DEFAULT: 'default',
61
+ HIGH: 'high',
62
+ MAX: 'max',
63
+ };
64
+ export const AndroidNotificationVisibility = {
65
+ PUBLIC: 1,
66
+ PRIVATE: 0,
67
+ SECRET: -1,
68
+ };
69
+ export const IosAuthorizationStatus = {
70
+ NOT_DETERMINED: 0,
71
+ DENIED: 1,
72
+ AUTHORIZED: 2,
73
+ PROVISIONAL: 3,
74
+ EPHEMERAL: 4,
75
+ };
76
+ export const IosAlertStyle = {
77
+ NONE: 0,
78
+ BANNER: 1,
79
+ ALERT: 2,
80
+ };
81
+ // 7 SchedulableTriggerInputTypes — re-exported for compile parity
82
+ // even though scheduleNotificationAsync throws. Customers that
83
+ // destructure these from the module won't break their build.
84
+ export const SchedulableTriggerInputTypes = {
85
+ TIME_INTERVAL: 'timeInterval',
86
+ DATE: 'date',
87
+ CALENDAR: 'calendar',
88
+ DAILY: 'daily',
89
+ WEEKLY: 'weekly',
90
+ MONTHLY: 'monthly',
91
+ YEARLY: 'yearly',
92
+ };
93
+ // ── Module state (handler + drain loop + listener registry) ───────
94
+ const RECEIVED_LISTENERS = new Set();
95
+ const RESPONSE_LISTENERS = new Set();
96
+ const TOKEN_LISTENERS = new Set();
97
+ let _handler = null;
98
+ let _drainInterval = null;
99
+ let _lastDeviceToken = null;
100
+ // ── Permissions ───────────────────────────────────────────────────
101
+ /**
102
+ * Returns the OS-reported notification permission status without
103
+ * prompting. Mirrors `Notifications.getPermissionsAsync()`.
104
+ */
105
+ export async function getPermissionsAsync() {
106
+ const native = await pushGetStatus();
107
+ return coercePermissionStatus(native);
108
+ }
109
+ /**
110
+ * Triggers the OS permission prompt the first time, otherwise
111
+ * returns the cached decision. Mirrors
112
+ * `Notifications.requestPermissionsAsync()`.
113
+ *
114
+ * `options.ios.allowProvisional` is accepted for API parity but
115
+ * silently falls back to a regular authorization request — the
116
+ * underlying native module doesn't surface the provisional flag
117
+ * separately yet. Follow up: thread the `provisional` option
118
+ * through `SentoriPushNotifications.requestPermission(...)` on iOS.
119
+ */
120
+ export async function requestPermissionsAsync(options) {
121
+ if (options?.ios?.allowProvisional) {
122
+ logger.debug('push.expo-compat', 'allowProvisional requested — falls back to regular authorization in this release');
123
+ }
124
+ const native = await pushRequestPermission();
125
+ return coercePermissionStatus(native);
126
+ }
127
+ function coercePermissionStatus(native) {
128
+ const grantedStatuses = new Set(['granted', 'provisional', 'ephemeral']);
129
+ let status;
130
+ if (native === 'granted' || native === 'provisional' || native === 'ephemeral') {
131
+ status = 'granted';
132
+ }
133
+ else if (native === 'denied') {
134
+ status = 'denied';
135
+ }
136
+ else {
137
+ status = 'undetermined';
138
+ }
139
+ const granted = native != null && grantedStatuses.has(native);
140
+ const iosStatus = native === 'granted'
141
+ ? IosAuthorizationStatus.AUTHORIZED
142
+ : native === 'denied'
143
+ ? IosAuthorizationStatus.DENIED
144
+ : native === 'provisional'
145
+ ? IosAuthorizationStatus.PROVISIONAL
146
+ : native === 'ephemeral'
147
+ ? IosAuthorizationStatus.EPHEMERAL
148
+ : IosAuthorizationStatus.NOT_DETERMINED;
149
+ return {
150
+ status,
151
+ granted,
152
+ expires: 'never',
153
+ canAskAgain: status === 'undetermined',
154
+ ios: {
155
+ status: iosStatus,
156
+ allowsAlert: granted,
157
+ allowsBadge: granted,
158
+ allowsSound: granted,
159
+ },
160
+ android: { status },
161
+ };
162
+ }
163
+ // ── Token retrieval ───────────────────────────────────────────────
164
+ const TOKEN_TIMEOUT_MS = 8000;
165
+ const TOKEN_POLL_INTERVAL_MS = 200;
166
+ /**
167
+ * Returns the raw APNs (iOS) or FCM (Android) token. Mirrors
168
+ * `Notifications.getDevicePushTokenAsync()` — for customers who
169
+ * already wire the device token to a custom backend, the migration
170
+ * is literally a one-line import change.
171
+ */
172
+ export async function getDevicePushTokenAsync() {
173
+ await pushRegister();
174
+ return waitForDeviceToken();
175
+ }
176
+ /**
177
+ * `expo-notifications`'s `getExpoPushTokenAsync` returns a
178
+ * `ExponentPushToken[...]` string that Expo's exp.host service uses
179
+ * to route to APNs / FCM. We don't run that service — `data` here
180
+ * is the raw native token wrapped in the same envelope shape so
181
+ * destructuring code keeps compiling.
182
+ *
183
+ * **Server-side change required:** instead of POSTing to
184
+ * `https://exp.host/--/api/v2/push/send`, your backend should POST
185
+ * to Sentori's ingest. See the migration recipe.
186
+ */
187
+ export async function getExpoPushTokenAsync(_options) {
188
+ const tok = await getDevicePushTokenAsync();
189
+ return { type: 'expo', data: tok.data };
190
+ }
191
+ async function waitForDeviceToken() {
192
+ const start = Date.now();
193
+ while (Date.now() - start < TOKEN_TIMEOUT_MS) {
194
+ const state = await pushDrainState();
195
+ if (state.error) {
196
+ throw new Error(`Push registration failed: ${state.error}`);
197
+ }
198
+ if (state.token) {
199
+ // Forward the buffered events to anyone who's already
200
+ // subscribed — they would otherwise be lost since the drain
201
+ // call here consumed them.
202
+ forwardBufferedEvents(state.notifications, state.taps);
203
+ const tok = {
204
+ type: platformOs(),
205
+ data: state.token,
206
+ };
207
+ _lastDeviceToken = tok;
208
+ for (const cb of TOKEN_LISTENERS) {
209
+ try {
210
+ cb(tok);
211
+ }
212
+ catch (e) {
213
+ logger.warn('push.expo-compat', 'pushTokenListener threw', e);
214
+ }
215
+ }
216
+ return tok;
217
+ }
218
+ forwardBufferedEvents(state.notifications, state.taps);
219
+ await sleep(TOKEN_POLL_INTERVAL_MS);
220
+ }
221
+ throw new Error(`Push token not received within ${TOKEN_TIMEOUT_MS} ms`);
222
+ }
223
+ /**
224
+ * Mirrors `Notifications.unregisterForNotificationsAsync()`. Calls
225
+ * the native unregister + stops the drain loop.
226
+ */
227
+ export async function unregisterForNotificationsAsync() {
228
+ pushUnregister();
229
+ _lastDeviceToken = null;
230
+ stopDrainLoop();
231
+ }
232
+ // ── Listeners ─────────────────────────────────────────────────────
233
+ /**
234
+ * Foreground notification callback. Mirrors
235
+ * `Notifications.addNotificationReceivedListener()`. The first
236
+ * subscription starts a 1 Hz native-buffer drain loop; the last
237
+ * unsubscribe stops it.
238
+ */
239
+ export function addNotificationReceivedListener(listener) {
240
+ RECEIVED_LISTENERS.add(listener);
241
+ ensureDrainLoop();
242
+ return {
243
+ remove: () => {
244
+ RECEIVED_LISTENERS.delete(listener);
245
+ maybeStopDrainLoop();
246
+ },
247
+ };
248
+ }
249
+ /**
250
+ * User-tapped-a-notification callback. Mirrors
251
+ * `Notifications.addNotificationResponseReceivedListener()`.
252
+ */
253
+ export function addNotificationResponseReceivedListener(listener) {
254
+ RESPONSE_LISTENERS.add(listener);
255
+ ensureDrainLoop();
256
+ return {
257
+ remove: () => {
258
+ RESPONSE_LISTENERS.delete(listener);
259
+ maybeStopDrainLoop();
260
+ },
261
+ };
262
+ }
263
+ /**
264
+ * Token-rotation callback. Mirrors
265
+ * `Notifications.addPushTokenListener()`. Fires once per new token —
266
+ * the native side detects rotation and pushes into the buffer; the
267
+ * shared drain loop forwards it here.
268
+ */
269
+ export function addPushTokenListener(listener) {
270
+ TOKEN_LISTENERS.add(listener);
271
+ return {
272
+ remove: () => {
273
+ TOKEN_LISTENERS.delete(listener);
274
+ },
275
+ };
276
+ }
277
+ /**
278
+ * Presentation behaviour hook. Mirrors
279
+ * `Notifications.setNotificationHandler()`. The handler runs once
280
+ * per foreground notification before the listener fan-out; it can
281
+ * suppress the banner/sound/badge.
282
+ *
283
+ * Today the SDK always shows the system banner because that's the
284
+ * native delegate's hard-coded behaviour. The handler's
285
+ * `handleNotification` is still invoked so customer logic that
286
+ * inspects the notification can run, but the returned
287
+ * `NotificationBehavior` flags don't override presentation yet.
288
+ * Follow up: pipe these flags through
289
+ * `SentoriPushNotifications` so willPresent can return what the
290
+ * handler asked for.
291
+ */
292
+ export function setNotificationHandler(handler) {
293
+ _handler = handler;
294
+ }
295
+ export function scheduleNotificationAsync(_args) {
296
+ throw mkUnsupported('scheduleNotificationAsync', 'local-scheduling');
297
+ }
298
+ export function cancelScheduledNotificationAsync(_id) {
299
+ throw mkUnsupported('cancelScheduledNotificationAsync', 'local-scheduling');
300
+ }
301
+ export function cancelAllScheduledNotificationsAsync() {
302
+ throw mkUnsupported('cancelAllScheduledNotificationsAsync', 'local-scheduling');
303
+ }
304
+ export function getAllScheduledNotificationsAsync() {
305
+ throw mkUnsupported('getAllScheduledNotificationsAsync', 'local-scheduling');
306
+ }
307
+ export function getNextTriggerDateAsync(_trigger) {
308
+ throw mkUnsupported('getNextTriggerDateAsync', 'local-scheduling');
309
+ }
310
+ export function setBadgeCountAsync(_count, _options) {
311
+ throw mkUnsupported('setBadgeCountAsync', 'badge');
312
+ }
313
+ export function getBadgeCountAsync() {
314
+ throw mkUnsupported('getBadgeCountAsync', 'badge');
315
+ }
316
+ export function setNotificationChannelAsync(_id, _channel) {
317
+ throw mkUnsupported('setNotificationChannelAsync', 'android-channels');
318
+ }
319
+ export function getNotificationChannelAsync(_id) {
320
+ throw mkUnsupported('getNotificationChannelAsync', 'android-channels');
321
+ }
322
+ export function getNotificationChannelsAsync() {
323
+ throw mkUnsupported('getNotificationChannelsAsync', 'android-channels');
324
+ }
325
+ export function deleteNotificationChannelAsync(_id) {
326
+ throw mkUnsupported('deleteNotificationChannelAsync', 'android-channels');
327
+ }
328
+ export function setNotificationChannelGroupAsync(_id, _group) {
329
+ throw mkUnsupported('setNotificationChannelGroupAsync', 'android-channels');
330
+ }
331
+ export function setNotificationCategoryAsync(_id, _actions, _options) {
332
+ throw mkUnsupported('setNotificationCategoryAsync', 'categories');
333
+ }
334
+ export function getNotificationCategoriesAsync() {
335
+ throw mkUnsupported('getNotificationCategoriesAsync', 'categories');
336
+ }
337
+ export function deleteNotificationCategoryAsync(_id) {
338
+ throw mkUnsupported('deleteNotificationCategoryAsync', 'categories');
339
+ }
340
+ export function useLastNotificationResponse() {
341
+ // Hook contract: keep it a no-throw hook so the host's React tree
342
+ // still mounts. Returns null. Customers who depend on this for
343
+ // deep-link-from-cold-start should fall back to subscribing on
344
+ // mount and relying on the early-drain.
345
+ return null;
346
+ }
347
+ export function getLastNotificationResponseAsync() {
348
+ return Promise.resolve(null);
349
+ }
350
+ export function clearLastNotificationResponseAsync() {
351
+ return Promise.resolve();
352
+ }
353
+ export function subscribeToTopicAsync(_topic) {
354
+ throw mkUnsupported('subscribeToTopicAsync', 'topics');
355
+ }
356
+ export function unsubscribeFromTopicAsync(_topic) {
357
+ throw mkUnsupported('unsubscribeFromTopicAsync', 'topics');
358
+ }
359
+ export function registerTaskAsync(_taskName) {
360
+ throw mkUnsupported('registerTaskAsync', 'background-task');
361
+ }
362
+ export function unregisterTaskAsync(_taskName) {
363
+ throw mkUnsupported('unregisterTaskAsync', 'background-task');
364
+ }
365
+ export function dismissNotificationAsync(_id) {
366
+ throw mkUnsupported('dismissNotificationAsync', 'dismissal');
367
+ }
368
+ export function dismissAllNotificationsAsync() {
369
+ throw mkUnsupported('dismissAllNotificationsAsync', 'dismissal');
370
+ }
371
+ export function getPresentedNotificationsAsync() {
372
+ throw mkUnsupported('getPresentedNotificationsAsync', 'dismissal');
373
+ }
374
+ function mkUnsupported(name, slug) {
375
+ return new Error(`${name} is not implemented in @goliapkg/sentori-react-native/expo-compat yet. ` +
376
+ `See the migration recipe at /docs/recipes/migrate-from-expo-notifications/#${slug} ` +
377
+ `for the workaround, or wait for a follow-up minor release where the native module ` +
378
+ `will surface the underlying capability.`);
379
+ }
380
+ // ── Drain-loop plumbing — pumps native buffer into listeners ──────
381
+ const DRAIN_INTERVAL_MS = 1000;
382
+ function ensureDrainLoop() {
383
+ if (_drainInterval)
384
+ return;
385
+ _drainInterval = setInterval(() => {
386
+ void pumpOnce();
387
+ }, DRAIN_INTERVAL_MS);
388
+ }
389
+ function maybeStopDrainLoop() {
390
+ if (RECEIVED_LISTENERS.size > 0)
391
+ return;
392
+ if (RESPONSE_LISTENERS.size > 0)
393
+ return;
394
+ stopDrainLoop();
395
+ }
396
+ function stopDrainLoop() {
397
+ if (_drainInterval) {
398
+ clearInterval(_drainInterval);
399
+ _drainInterval = null;
400
+ }
401
+ }
402
+ async function pumpOnce() {
403
+ const state = await pushDrainState();
404
+ forwardBufferedEvents(state.notifications, state.taps);
405
+ }
406
+ function forwardBufferedEvents(rawNotifications, rawTaps) {
407
+ for (const raw of rawNotifications) {
408
+ const notification = coerceNotification(raw);
409
+ // Run the optional handler before fan-out (best-effort — we
410
+ // don't currently use its returned NotificationBehavior to
411
+ // gate native presentation).
412
+ if (_handler) {
413
+ try {
414
+ void _handler.handleNotification(notification).catch((err) => {
415
+ logger.warn('push.expo-compat', 'handleNotification threw', err);
416
+ });
417
+ }
418
+ catch (e) {
419
+ logger.warn('push.expo-compat', 'setNotificationHandler.handleNotification threw', e);
420
+ }
421
+ }
422
+ for (const cb of RECEIVED_LISTENERS) {
423
+ try {
424
+ cb(notification);
425
+ }
426
+ catch (e) {
427
+ logger.warn('push.expo-compat', 'notification listener threw', e);
428
+ }
429
+ }
430
+ }
431
+ for (const raw of rawTaps) {
432
+ const notification = coerceNotification(raw);
433
+ const response = {
434
+ actionIdentifier: DEFAULT_ACTION_IDENTIFIER,
435
+ notification,
436
+ };
437
+ for (const cb of RESPONSE_LISTENERS) {
438
+ try {
439
+ cb(response);
440
+ }
441
+ catch (e) {
442
+ logger.warn('push.expo-compat', 'response listener threw', e);
443
+ }
444
+ }
445
+ }
446
+ }
447
+ function coerceNotification(raw) {
448
+ const userInfo = raw.userInfo ?? {};
449
+ const id = raw.id ?? '';
450
+ const date = typeof raw.receivedAt === 'number'
451
+ ? Math.round(raw.receivedAt * 1000)
452
+ : Date.now();
453
+ return {
454
+ date,
455
+ request: {
456
+ identifier: id,
457
+ content: {
458
+ title: raw.title ?? null,
459
+ subtitle: raw.subtitle ?? null,
460
+ body: raw.body ?? null,
461
+ data: userInfo,
462
+ categoryIdentifier: raw.category ?? null,
463
+ },
464
+ trigger: null,
465
+ },
466
+ };
467
+ }
468
+ // ── Tiny platform helpers ─────────────────────────────────────────
469
+ function platformOs() {
470
+ try {
471
+ const rn = require('react-native');
472
+ const os = rn.Platform?.OS;
473
+ if (os === 'ios' || os === 'android')
474
+ return os;
475
+ }
476
+ catch {
477
+ /* unavailable */
478
+ }
479
+ return 'ios';
480
+ }
481
+ function sleep(ms) {
482
+ return new Promise((resolve) => setTimeout(resolve, ms));
483
+ }
484
+ // ── Test-only helpers ─────────────────────────────────────────────
485
+ /** Returns the last device token returned by getDevicePushTokenAsync.
486
+ * Used in tests + the migration recipe. */
487
+ export function __getLastDeviceTokenForTests() {
488
+ return _lastDeviceToken;
489
+ }
490
+ /** Resets module-scoped state. Test-only — do not call from
491
+ * production code. */
492
+ export function __resetForTests() {
493
+ RECEIVED_LISTENERS.clear();
494
+ RESPONSE_LISTENERS.clear();
495
+ TOKEN_LISTENERS.clear();
496
+ _handler = null;
497
+ _lastDeviceToken = null;
498
+ stopDrainLoop();
499
+ }
500
+ //# sourceMappingURL=expo-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expo-compat.js","sourceRoot":"","sources":["../src/expo-compat.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -76,6 +76,13 @@ export { captureError, captureException, captureMessage, captureStep, getUser, s
76
76
  export { startMoment, startSpan, startTrace, withScopedSpan, type SpanContextLike, type StartSpanOptions, } from '@goliapkg/sentori-core';
77
77
  export { close, flush } from './lifecycle';
78
78
  export type { CaptureMessageOptions, MessageLevel, } from '@goliapkg/sentori-core';
79
+ /** v2.3 — logger surface re-exported from core so hosts can
80
+ * `import { setLogLevel } from '@goliapkg/sentori-react-native'`
81
+ * per design §3 ("Production override"). `setLogTransport` lets
82
+ * hosts route Sentori-internal lines into their own log
83
+ * aggregator (Datadog, etc.). */
84
+ export { getLogLevel, type LogLevel, logger, type LogTransport, setLogLevel, setLogTransport, } from '@goliapkg/sentori-core';
85
+ export type { ReadyInfo } from './config';
79
86
  export { ErrorBoundary } from './error-boundary';
80
87
  export { FeedbackButton, type FeedbackButtonHandle, type FeedbackButtonProps } from './feedback-widget';
81
88
  export { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
@@ -94,5 +101,15 @@ export { probeNativeScreenshot, probeNativeWireframe, startAnrWatchdog, stopAnrW
94
101
  export { drainReplay, startReplay, stopReplay } from './replay';
95
102
  export { endSession, markSessionCrashed, startSession, } from './session-tracker';
96
103
  export { type NavigationRefLike, useTraceNavigation } from './navigation';
104
+ import * as _push from './push';
105
+ export declare const push: {
106
+ register: typeof _push.register;
107
+ unregister: typeof _push.unregister;
108
+ getCachedIpt: typeof _push.getCachedIpt;
109
+ getStatus: typeof _push.getStatus;
110
+ requestPermission: typeof _push.requestPermission;
111
+ };
112
+ export type { PushRegisterOptions, PushRegisterResult, PushNotificationPayload, } from './push';
113
+ export type { PushMessage, PushOptions, PushPriority, PushReceipt, PushTicket, PushTicketStatus, } from '@goliapkg/sentori-core';
97
114
  export type { Event, SentoriError, Frame, Breadcrumb, BreadcrumbType, Device, DeviceOS, App, User, Tags, EventKind, Platform, } from './types';
98
115
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -69,6 +69,12 @@ export { addBreadcrumb } from './breadcrumbs';
69
69
  export { captureError, captureException, captureMessage, captureStep, getUser, sendUserFeedback, setTag, setTags, setUser, } from './capture';
70
70
  export { startMoment, startSpan, startTrace, withScopedSpan, } from '@goliapkg/sentori-core';
71
71
  export { close, flush } from './lifecycle';
72
+ /** v2.3 — logger surface re-exported from core so hosts can
73
+ * `import { setLogLevel } from '@goliapkg/sentori-react-native'`
74
+ * per design §3 ("Production override"). `setLogTransport` lets
75
+ * hosts route Sentori-internal lines into their own log
76
+ * aggregator (Datadog, etc.). */
77
+ export { getLogLevel, logger, setLogLevel, setLogTransport, } from '@goliapkg/sentori-core';
72
78
  export { ErrorBoundary } from './error-boundary';
73
79
  export { FeedbackButton } from './feedback-widget';
74
80
  export { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
@@ -87,4 +93,16 @@ export { probeNativeScreenshot, probeNativeWireframe, startAnrWatchdog, stopAnrW
87
93
  export { drainReplay, startReplay, stopReplay } from './replay';
88
94
  export { endSession, markSessionCrashed, startSession, } from './session-tracker';
89
95
  export { useTraceNavigation } from './navigation';
96
+ // v2.9 — Push notifications (iOS this release; v2.10 lights Android).
97
+ // Surfaced as a `sentori.push` sub-namespace from the default barrel.
98
+ // Opt-in: `sentori.push.register({...})` triggers the OS permission
99
+ // prompt. Sentori never prompts on its own.
100
+ import * as _push from './push';
101
+ export const push = {
102
+ register: _push.register,
103
+ unregister: _push.unregister,
104
+ getCachedIpt: _push.getCachedIpt,
105
+ getStatus: _push.getStatus,
106
+ requestPermission: _push.requestPermission,
107
+ };
90
108
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/init.d.ts CHANGED
@@ -138,6 +138,13 @@ export type InitOptions = {
138
138
  * SDK is live instead of scanning the console. The `ReadyInfo`
139
139
  * carries native-module bind status + cold-start timing. */
140
140
  onReady?: (info: ReadyInfo) => void;
141
+ /** v2.3 — mutate-or-drop hook on each outbound event (sync).
142
+ * Return the event to ship it (possibly mutated), or `null` to
143
+ * drop. See `BeforeSendHook` for the throwing / non-event
144
+ * fallback policy. Used for host-side PII scrubbing the SDK
145
+ * can't do automatically; server-side privacy_lab still runs
146
+ * regardless. */
147
+ beforeSend?: import('@goliapkg/sentori-core').BeforeSendHook;
141
148
  };
142
149
  export declare const init: (options: InitOptions) => void;
143
150
  export type { AttachmentMeta };
package/lib/init.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
package/lib/init.js CHANGED
@@ -65,6 +65,9 @@ export const init = (options) => {
65
65
  // carries the customer journey. Defaults false to preserve v1
66
66
  // breadcrumb shape on upgrade.
67
67
  trackAutoBreadcrumb: options.capture?.trackAutoBreadcrumb === true,
68
+ // v2.3 — host-side beforeSend hook (sync). Stored on Config so
69
+ // capture.ts can pull it without re-resolving the InitOptions.
70
+ beforeSend: options.beforeSend,
68
71
  });
69
72
  // Tell the native crash handler about the config so the JSON it writes
70
73
  // on the next NSException / Java uncaught carries release + env.