@goliapkg/sentori-react-native 2.2.0 → 3.1.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.
package/lib/native.js CHANGED
@@ -83,6 +83,63 @@ export function startAnrWatchdog(options) {
83
83
  // never throw from init helpers
84
84
  }
85
85
  }
86
+ // ── v2.9 push wrappers ──────────────────────────────────────────
87
+ /** Returns the current iOS push permission status without
88
+ * prompting. `null` when the native module isn't available. */
89
+ export async function pushGetStatus() {
90
+ const n = native();
91
+ if (!n?.pushGetStatus)
92
+ return null;
93
+ try {
94
+ return await n.pushGetStatus();
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /** Prompts for permission (or returns cached decision). `null` when
101
+ * the native module isn't available. */
102
+ export async function pushRequestPermission() {
103
+ const n = native();
104
+ if (!n?.pushRequestPermission)
105
+ return null;
106
+ try {
107
+ return await n.pushRequestPermission();
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
113
+ export function pushRegister() {
114
+ try {
115
+ native()?.pushRegister?.();
116
+ }
117
+ catch {
118
+ /* never throw */
119
+ }
120
+ }
121
+ export function pushUnregister() {
122
+ try {
123
+ native()?.pushUnregister?.();
124
+ }
125
+ catch {
126
+ /* never throw */
127
+ }
128
+ }
129
+ /** Snapshot + clear the native push buffers. Returns empty state
130
+ * when the native module isn't available. */
131
+ export async function pushDrainState() {
132
+ const n = native();
133
+ if (!n?.pushDrainState) {
134
+ return { notifications: [], taps: [] };
135
+ }
136
+ try {
137
+ return await n.pushDrainState();
138
+ }
139
+ catch {
140
+ return { notifications: [], taps: [] };
141
+ }
142
+ }
86
143
  export function stopAnrWatchdog() {
87
144
  try {
88
145
  native()?.stopAnrWatchdog?.();
package/lib/native.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
package/lib/push.d.ts ADDED
@@ -0,0 +1,61 @@
1
+ import { pushGetStatus, pushRequestPermission } from './native.js';
2
+ export type PushRegisterOptions = {
3
+ /** Identity-link hash. Pass `hashIdentities({ email }).email` if
4
+ * the host has run the v2.3 identity flow. Lets the server-side
5
+ * push routing target a specific user across all their devices. */
6
+ linkHash?: string;
7
+ /** Extra metadata to attach to the device_tokens row (e.g. app
8
+ * version, locale). Optional. */
9
+ metadata?: Record<string, unknown>;
10
+ /** Foreground notification arrival. Fires once per notification
11
+ * the SW or iOS native delegate hands us. */
12
+ onMessage?: (payload: PushNotificationPayload) => void;
13
+ /** User tapped a notification. Fires once per tap. */
14
+ onTap?: (data: unknown) => void;
15
+ /** Token registration completed — useful when the host wants the
16
+ * ipt handle in real time without awaiting `register()`. */
17
+ onToken?: (ipt: string) => void;
18
+ /** Any failure in the registration flow. The promise also
19
+ * rejects; this callback is convenience. */
20
+ onError?: (err: Error) => void;
21
+ /** Override the timeout when waiting for the native token to
22
+ * arrive after `registerForRemoteNotifications`. Defaults to
23
+ * 8000 ms; bump on slow networks / TestFlight provisioning
24
+ * delays. */
25
+ tokenTimeoutMs?: number;
26
+ };
27
+ export type PushRegisterResult = {
28
+ /** Stable device handle (`ipt_<uuid>`). */
29
+ ipt: string;
30
+ };
31
+ export type PushNotificationPayload = {
32
+ id?: string;
33
+ title?: string;
34
+ body?: string;
35
+ subtitle?: string;
36
+ category?: string;
37
+ userInfo?: Record<string, unknown>;
38
+ receivedAt?: number;
39
+ };
40
+ /**
41
+ * Run the iOS push opt-in flow. Returns the cached `ipt_*` handle
42
+ * on subsequent calls when permission is still granted.
43
+ */
44
+ export declare function register(opts?: PushRegisterOptions): Promise<PushRegisterResult>;
45
+ /**
46
+ * Revoke the cached handle (DELETE /v1/push/tokens/{ipt}) +
47
+ * unregister locally. Idempotent — repeat calls are no-ops.
48
+ */
49
+ export declare function unregister(): Promise<void>;
50
+ /** Returns the cached handle without hitting the network. Useful
51
+ * for skipping a re-register prompt across cold starts. */
52
+ export declare function getCachedIpt(): null | string;
53
+ /** Public re-export of the no-prompt status check. */
54
+ export { pushGetStatus as getStatus, pushRequestPermission as requestPermission };
55
+ /** v2.26 — set the host's current session id so the next ack carries
56
+ * it. Useful for v2.27 correlation (push -> session -> events). */
57
+ export declare function setSessionContext(sessionId: null | string): void;
58
+ /** Test-only hook to override Platform.OS detection. Production
59
+ * code paths must not call this. */
60
+ export declare function __setPlatformForTests(p: 'ios' | 'android' | 'unknown' | null): void;
61
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"AAoCA,OAAO,EAEL,aAAa,EAEb,qBAAqB,EAEtB,MAAM,aAAa,CAAA;AAqBpB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;wEAEoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;sCACkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;kDAC8C;IAC9C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACtD,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/B;iEAC6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B;iDAC6C;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B;;;kBAGc;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4B1F;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD;AAED;4DAC4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,GAAG,MAAM,CAE5C;AAED,sDAAsD;AACtD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAA;AAgNjF;oEACoE;AACpE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAEhE;AAiFD;qCACqC;AACrC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAEnF"}
package/lib/push.js ADDED
@@ -0,0 +1,386 @@
1
+ // v2.9 — React Native push notification opt-in (iOS in this release).
2
+ //
3
+ // Mirrors `@goliapkg/sentori-javascript`'s `registerWeb` ergonomics
4
+ // so a cross-platform host app reasons about both flows the same way.
5
+ //
6
+ // Flow:
7
+ // 1. `pushRequestPermission()` — OS prompt the first time, or
8
+ // returns the cached decision.
9
+ // 2. `pushRegister()` — kicks off
10
+ // `UIApplication.registerForRemoteNotifications`. The token
11
+ // arrives asynchronously via the AppDelegate swizzle and lands
12
+ // in the native buffer.
13
+ // 3. Poll `pushDrainState()` at 200 ms ticks for up to 8 s waiting
14
+ // for the token.
15
+ // 4. POST `/v1/push/tokens` with
16
+ // `provider: 'apns'`, `env: __DEV__ ? 'sandbox' : 'production'`,
17
+ // `nativeToken: <hex>`, `linkHash?`, `metadata`.
18
+ // 5. Cache the returned `ipt_*` handle (AsyncStorage when
19
+ // available, otherwise module-scoped).
20
+ // 6. Start a 1 Hz drain loop that fires `onMessage` / `onTap` from
21
+ // buffered events while the app is foreground. Pauses on
22
+ // background, resumes on active, per the perf iron rule.
23
+ import { addBreadcrumb, logger } from '@goliapkg/sentori-core';
24
+ import { track } from './track.js';
25
+ import { pushDrainState, pushGetStatus, pushRegister as nativePushRegister, pushRequestPermission, pushUnregister as nativePushUnregister, } from './native.js';
26
+ const STORAGE_KEY = 'sentori.push.ipt';
27
+ let _cachedIpt = null;
28
+ let _drainInterval = null;
29
+ let _appStateSubscription = null;
30
+ let _backgrounded = false;
31
+ let _onMessage = undefined;
32
+ let _onTap = undefined;
33
+ // v2.26 — confirmed delivery ack pipeline. msgIds extracted from
34
+ // received pushes are queued here and flushed to the server every
35
+ // 5 s. Server-side `push_sends.acked_at` flips from NULL to
36
+ // wall-clock on first ack. See docs/roadmap/v2.26.md.
37
+ const ACK_FLUSH_INTERVAL_MS = 5000;
38
+ let _ackQueue = [];
39
+ let _ackFlushInterval = null;
40
+ let _sessionId = null;
41
+ /**
42
+ * Run the iOS push opt-in flow. Returns the cached `ipt_*` handle
43
+ * on subsequent calls when permission is still granted.
44
+ */
45
+ export async function register(opts = {}) {
46
+ try {
47
+ const cfg = getRuntimeConfig();
48
+ // Bind callbacks up front so the buffer drain inside
49
+ // waitForToken can fire onMessage / onTap for events that arrive
50
+ // alongside or before the device token (e.g. user taps a push
51
+ // received during a previous launch — iOS replays it on
52
+ // delegate attach).
53
+ _onMessage = opts.onMessage;
54
+ _onTap = opts.onTap;
55
+ const status = await pushRequestPermission();
56
+ if (status !== 'granted' && status !== 'provisional' && status !== 'ephemeral') {
57
+ throw new Error(`Push permission '${status ?? 'unavailable'}'; cannot register`);
58
+ }
59
+ nativePushRegister();
60
+ const token = await waitForToken(opts.tokenTimeoutMs ?? 8000);
61
+ const ipt = await registerWithServer(cfg, token, opts);
62
+ _cachedIpt = ipt;
63
+ void persistIpt(ipt);
64
+ opts.onToken?.(ipt);
65
+ bindBufferDrain(opts.onMessage, opts.onTap);
66
+ return { ipt };
67
+ }
68
+ catch (e) {
69
+ const err = e instanceof Error ? e : new Error(String(e));
70
+ logger.warn('push', 'register failed:', err.message);
71
+ opts.onError?.(err);
72
+ throw err;
73
+ }
74
+ }
75
+ /**
76
+ * Revoke the cached handle (DELETE /v1/push/tokens/{ipt}) +
77
+ * unregister locally. Idempotent — repeat calls are no-ops.
78
+ */
79
+ export async function unregister() {
80
+ const cfg = tryGetRuntimeConfig();
81
+ const ipt = _cachedIpt ?? (await readPersistedIpt());
82
+ if (cfg && ipt) {
83
+ try {
84
+ await fetch(joinUrl(cfg.ingestUrl, `/v1/push/tokens/${ipt}`), {
85
+ method: 'DELETE',
86
+ headers: { authorization: `Bearer ${cfg.token}` },
87
+ });
88
+ }
89
+ catch (e) {
90
+ logger.warn('push', 'unregister server delete failed', e);
91
+ }
92
+ }
93
+ nativePushUnregister();
94
+ _cachedIpt = null;
95
+ void clearPersistedIpt();
96
+ teardownBufferDrain();
97
+ }
98
+ /** Returns the cached handle without hitting the network. Useful
99
+ * for skipping a re-register prompt across cold starts. */
100
+ export function getCachedIpt() {
101
+ return _cachedIpt;
102
+ }
103
+ /** Public re-export of the no-prompt status check. */
104
+ export { pushGetStatus as getStatus, pushRequestPermission as requestPermission };
105
+ function getRuntimeConfig() {
106
+ const cfg = tryGetRuntimeConfig();
107
+ if (!cfg) {
108
+ throw new Error('sentori is not initialised; call sentori.init() first');
109
+ }
110
+ return cfg;
111
+ }
112
+ function tryGetRuntimeConfig() {
113
+ // Dynamic require avoids a circular import — `./init` already
114
+ // depends on `./push` via the top-level barrel re-export.
115
+ try {
116
+ const conf = require('./config.js');
117
+ return conf.getConfig?.() ?? null;
118
+ }
119
+ catch {
120
+ return null;
121
+ }
122
+ }
123
+ async function waitForToken(timeoutMs) {
124
+ const start = Date.now();
125
+ while (Date.now() - start < timeoutMs) {
126
+ const state = await pushDrainState();
127
+ if (state.error) {
128
+ throw new Error(`APNs registration failed: ${state.error}`);
129
+ }
130
+ if (state.token) {
131
+ // Push any buffered events that arrived alongside the token
132
+ // straight back into the registered listeners (if any).
133
+ flushBuffered(state.notifications, state.taps);
134
+ return state.token;
135
+ }
136
+ flushBuffered(state.notifications, state.taps);
137
+ await new Promise((resolve) => setTimeout(resolve, 200));
138
+ }
139
+ throw new Error(`APNs token not received within ${timeoutMs} ms`);
140
+ }
141
+ async function registerWithServer(cfg, nativeToken, opts) {
142
+ // v2.10 — cross-platform. iOS routes via APNs with a
143
+ // sandbox/production env; Android routes via FCM with no env
144
+ // (FCM is a single host). Default to 'apns' when Platform.OS
145
+ // isn't detectable (e.g. unit tests).
146
+ const platform = detectPlatform();
147
+ const isAndroid = platform === 'android';
148
+ const env = isAndroid
149
+ ? undefined
150
+ : typeof __DEV__ !== 'undefined' && __DEV__
151
+ ? 'sandbox'
152
+ : 'production';
153
+ const body = {
154
+ provider: isAndroid ? 'fcm' : 'apns',
155
+ nativeToken,
156
+ linkHash: opts.linkHash,
157
+ metadata: opts.metadata ?? {},
158
+ };
159
+ if (env != null)
160
+ body.env = env;
161
+ const res = await fetch(joinUrl(cfg.ingestUrl, '/v1/push/tokens'), {
162
+ method: 'POST',
163
+ headers: {
164
+ authorization: `Bearer ${cfg.token}`,
165
+ 'content-type': 'application/json',
166
+ },
167
+ body: JSON.stringify(body),
168
+ });
169
+ if (!res.ok)
170
+ throw new Error(`/v1/push/tokens HTTP ${res.status}`);
171
+ const json = (await res.json());
172
+ if (typeof json.id !== 'string' || !json.id.startsWith('ipt_')) {
173
+ throw new Error('server did not return an ipt_* handle');
174
+ }
175
+ return json.id;
176
+ }
177
+ function bindBufferDrain(onMessage, onTap) {
178
+ _onMessage = onMessage;
179
+ _onTap = onTap;
180
+ teardownBufferDrain();
181
+ startAppStateWatch();
182
+ _drainInterval = setInterval(() => {
183
+ if (_backgrounded)
184
+ return;
185
+ void pumpOnce();
186
+ }, 1000);
187
+ }
188
+ function teardownBufferDrain() {
189
+ if (_drainInterval) {
190
+ clearInterval(_drainInterval);
191
+ _drainInterval = null;
192
+ }
193
+ _appStateSubscription?.remove();
194
+ _appStateSubscription = null;
195
+ if (_ackFlushInterval) {
196
+ clearInterval(_ackFlushInterval);
197
+ _ackFlushInterval = null;
198
+ }
199
+ _ackQueue = [];
200
+ }
201
+ async function pumpOnce() {
202
+ const state = await pushDrainState();
203
+ flushBuffered(state.notifications, state.taps);
204
+ }
205
+ function flushBuffered(notifications, taps) {
206
+ for (const raw of notifications) {
207
+ // v2.26 — Observability link-through (rule #4). If the server
208
+ // injected `_sentori.msgId` in v2.25+, drop a `push` breadcrumb,
209
+ // emit `sentori.push.received` track, and queue the ack.
210
+ autoCorrelate(raw, 'received');
211
+ _onMessage?.(coerceNotification(raw));
212
+ }
213
+ for (const raw of taps) {
214
+ autoCorrelate(raw, 'opened');
215
+ _onTap?.(raw.userInfo ?? raw);
216
+ }
217
+ }
218
+ /** v2.26 — process one drained notification or tap for downstream
219
+ * correlation. No-op if the payload didn't carry `_sentori.msgId`
220
+ * (e.g. older server, or push from a non-Sentori sender). */
221
+ function autoCorrelate(raw, eventType) {
222
+ const userInfo = raw.userInfo ?? raw;
223
+ const sentori = userInfo._sentori ?? undefined;
224
+ const msgId = typeof sentori?.msgId === 'string' ? sentori.msgId : undefined;
225
+ if (!msgId)
226
+ return;
227
+ const provider = guessProvider(raw);
228
+ const title = typeof raw.title === 'string' ? raw.title : undefined;
229
+ const body = typeof raw.body === 'string' ? raw.body : undefined;
230
+ // Breadcrumb buffer: O(1) in-memory push. Tag both event types
231
+ // ('received' vs 'opened') so a later captureException shows
232
+ // whether the user actually saw the push.
233
+ addBreadcrumb('push', { body, msgId, opened: eventType === 'opened', provider, title });
234
+ // Track event: reuses the existing SDK event pipeline. Two
235
+ // distinct names so dashboards can separate delivery from open.
236
+ const trackName = eventType === 'opened' ? 'sentori.push.opened' : 'sentori.push.received';
237
+ track(trackName, { msgId, provider });
238
+ // Enqueue ack — batched, see drainAckQueue.
239
+ enqueueAck(msgId);
240
+ }
241
+ function guessProvider(raw) {
242
+ if (typeof raw.provider === 'string')
243
+ return raw.provider;
244
+ // iOS native delegate sets `category`; FCM service sets a top-level
245
+ // `from`. Use either as a heuristic; default 'unknown' rather than
246
+ // crashing the pipeline.
247
+ if (raw.from)
248
+ return 'fcm';
249
+ if (raw.category)
250
+ return 'apns';
251
+ return 'unknown';
252
+ }
253
+ function enqueueAck(msgId) {
254
+ if (_ackQueue.includes(msgId))
255
+ return;
256
+ _ackQueue.push(msgId);
257
+ if (!_ackFlushInterval) {
258
+ _ackFlushInterval = setInterval(() => {
259
+ void drainAckQueue();
260
+ }, ACK_FLUSH_INTERVAL_MS);
261
+ }
262
+ }
263
+ async function drainAckQueue() {
264
+ if (_ackQueue.length === 0)
265
+ return;
266
+ const cfg = tryGetRuntimeConfig();
267
+ if (!cfg)
268
+ return;
269
+ const batch = _ackQueue.splice(0, _ackQueue.length);
270
+ // Fire-and-forget — server records first-ack only; subsequent
271
+ // requests are idempotent. Network failure means we lose that
272
+ // ack, which downgrades correlation precision but never breaks
273
+ // the user flow.
274
+ for (const msgId of batch) {
275
+ try {
276
+ await fetch(joinUrl(cfg.ingestUrl, `/v1/push/sends/${msgId}/ack`), {
277
+ body: JSON.stringify({ eventType: 'received', sessionId: _sessionId }),
278
+ headers: {
279
+ authorization: `Bearer ${cfg.token}`,
280
+ 'content-type': 'application/json',
281
+ },
282
+ method: 'POST',
283
+ });
284
+ }
285
+ catch {
286
+ /* best-effort; ignore */
287
+ }
288
+ }
289
+ }
290
+ /** v2.26 — set the host's current session id so the next ack carries
291
+ * it. Useful for v2.27 correlation (push -> session -> events). */
292
+ export function setSessionContext(sessionId) {
293
+ _sessionId = sessionId;
294
+ }
295
+ function coerceNotification(raw) {
296
+ return {
297
+ id: raw.id,
298
+ title: raw.title,
299
+ body: raw.body,
300
+ subtitle: raw.subtitle,
301
+ category: raw.category,
302
+ userInfo: raw.userInfo,
303
+ receivedAt: raw.receivedAt,
304
+ };
305
+ }
306
+ function startAppStateWatch() {
307
+ if (_appStateSubscription)
308
+ return;
309
+ try {
310
+ const rn = require('react-native');
311
+ const AppState = rn.AppState;
312
+ if (!AppState)
313
+ return;
314
+ _backgrounded = AppState.currentState === 'background';
315
+ _appStateSubscription = AppState.addEventListener('change', (state) => {
316
+ _backgrounded = state === 'background';
317
+ });
318
+ }
319
+ catch {
320
+ /* react-native unavailable (unit test) */
321
+ }
322
+ }
323
+ async function persistIpt(ipt) {
324
+ const storage = await tryAsyncStorage();
325
+ if (!storage)
326
+ return;
327
+ try {
328
+ await storage.setItem(STORAGE_KEY, ipt);
329
+ }
330
+ catch (e) {
331
+ logger.warn('push', 'AsyncStorage.setItem failed', e);
332
+ }
333
+ }
334
+ async function clearPersistedIpt() {
335
+ const storage = await tryAsyncStorage();
336
+ try {
337
+ await storage?.removeItem(STORAGE_KEY);
338
+ }
339
+ catch (e) {
340
+ logger.warn('push', 'AsyncStorage.removeItem failed', e);
341
+ }
342
+ }
343
+ async function readPersistedIpt() {
344
+ const storage = await tryAsyncStorage();
345
+ if (!storage)
346
+ return null;
347
+ try {
348
+ return await storage.getItem(STORAGE_KEY);
349
+ }
350
+ catch {
351
+ return null;
352
+ }
353
+ }
354
+ async function tryAsyncStorage() {
355
+ try {
356
+ const mod = require('@react-native-async-storage/async-storage');
357
+ return mod.default ?? null;
358
+ }
359
+ catch {
360
+ return null;
361
+ }
362
+ }
363
+ function joinUrl(base, path) {
364
+ return `${base.replace(/\/+$/, '')}${path}`;
365
+ }
366
+ let _platformOverride = null;
367
+ /** Test-only hook to override Platform.OS detection. Production
368
+ * code paths must not call this. */
369
+ export function __setPlatformForTests(p) {
370
+ _platformOverride = p;
371
+ }
372
+ function detectPlatform() {
373
+ if (_platformOverride != null)
374
+ return _platformOverride;
375
+ try {
376
+ const rn = require('react-native');
377
+ const os = rn.Platform?.OS;
378
+ if (os === 'ios' || os === 'android')
379
+ return os;
380
+ }
381
+ catch {
382
+ /* react-native unavailable */
383
+ }
384
+ return 'unknown';
385
+ }
386
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goliapkg/sentori-react-native",
3
- "version": "2.2.0",
3
+ "version": "3.1.0",
4
4
  "description": "Sentori SDK for React Native — JS-layer error capture, native crash handlers (iOS / Android), batched transport, fetch + react-navigation tracing.",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "author": "GOLIA K.K. <takagi@golia.jp> (https://golia.jp)",
@@ -32,6 +32,10 @@
32
32
  "types": "./lib/compat/sentry.d.ts",
33
33
  "default": "./lib/compat/sentry.js"
34
34
  },
35
+ "./expo-compat": {
36
+ "types": "./lib/expo-compat.d.ts",
37
+ "default": "./lib/expo-compat.js"
38
+ },
35
39
  "./feedback": {
36
40
  "types": "./lib/feedback.d.ts",
37
41
  "default": "./lib/feedback.js"
@@ -59,9 +63,9 @@
59
63
  "prepack": "bun run build"
60
64
  },
61
65
  "peerDependencies": {
62
- "expo-modules-core": ">=2.0",
63
- "react": ">=18",
64
- "react-native": ">=0.74"
66
+ "expo-modules-core": ">=55.0.0 <57.0.0",
67
+ "react": ">=19",
68
+ "react-native": ">=0.81.0"
65
69
  },
66
70
  "peerDependenciesMeta": {
67
71
  "@react-native-async-storage/async-storage": {
@@ -92,6 +96,6 @@
92
96
  "access": "public"
93
97
  },
94
98
  "dependencies": {
95
- "@goliapkg/sentori-core": "^1.2.0"
99
+ "@goliapkg/sentori-core": "^1.4.0"
96
100
  }
97
101
  }