react-native-notify-sphere 1.2.0 → 1.2.1

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.
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  import messaging from '@react-native-firebase/messaging';
4
- import notifee, { AndroidImportance, AndroidStyle, EventType } from '@notifee/react-native';
4
+ import DeviceInfo from 'react-native-device-info';
5
+ import notifee, { AndroidImportance, AndroidVisibility, AndroidStyle, EventType } from '@notifee/react-native';
5
6
  import axios from 'axios';
6
7
  import AsyncStorage from '@react-native-async-storage/async-storage';
7
8
  import { PermissionsAndroid, Platform } from 'react-native';
8
9
  const STORAGE_KEY_TOKEN = '@notifysphere_fcm_token';
9
10
  const STORAGE_KEY_SUB_ID = '@notifysphere_subscription_id';
10
11
  const STORAGE_KEY_USER_HASH = '@notifysphere_user_hash';
12
+ const STORAGE_KEY_CHANNELS = '@notifysphere_channels';
11
13
 
12
14
  // ─── Type definitions ──────────────────────────────────────────────────────────
13
15
 
@@ -17,6 +19,8 @@ const STORAGE_KEY_USER_HASH = '@notifysphere_user_hash';
17
19
 
18
20
  /** Normalised notification data delivered to the consumer callback */
19
21
 
22
+ /** Shape of a single notification channel returned by the registration API */
23
+
20
24
  // ─── Internal logger ──────────────────────────────────────────────────────────
21
25
 
22
26
  let _debug = false;
@@ -29,10 +33,17 @@ const warn = (...args) => {
29
33
  // Errors are always surfaced regardless of the debug flag
30
34
  const logError = (...args) => console.error('[NotifySphere]', ...args);
31
35
 
36
+ // ─── SDK version ──────────────────────────────────────────────────────────────
37
+
38
+ const SDK_VERSION = '1.2.1';
39
+
40
+ // ─── Device info result shape ─────────────────────────────────────────────────
41
+
32
42
  // ─── Default endpoints ────────────────────────────────────────────────────────
33
43
 
34
44
  const DEFAULT_BASE_URL = 'https://api.notifysphere.in/client/';
35
45
  // const DEFAULT_BASE_URL = 'https://apinotify.dothejob.in';
46
+ //const DEFAULT_BASE_URL = 'https://apinotify.dothejob.in/client/';
36
47
 
37
48
  // ─── NotifySphere class ───────────────────────────────────────────────────────
38
49
 
@@ -135,6 +146,41 @@ class NotifySphere {
135
146
  }
136
147
  }
137
148
 
149
+ // ─── Device info ──────────────────────────────────────────────────────────
150
+
151
+ /**
152
+ * Collects device metadata sent to the registration API.
153
+ * Uses react-native-device-info for model, carrier, and app version.
154
+ * Falls back gracefully if any call fails so registration is never blocked.
155
+ */
156
+ static async getDeviceInfo() {
157
+ try {
158
+ // getCarrier() is the only async call — run everything in parallel
159
+ const [carrier] = await Promise.all([DeviceInfo.getCarrier().catch(() => '')]);
160
+ return {
161
+ sdk: SDK_VERSION,
162
+ device_model: DeviceInfo.getModel(),
163
+ device_os: Platform.OS,
164
+ device_version: DeviceInfo.getSystemVersion(),
165
+ carrier: carrier ?? '',
166
+ app_version: DeviceInfo.getVersion(),
167
+ // Intl is available in Hermes/JSC without any extra package
168
+ timezone_id: Intl.DateTimeFormat().resolvedOptions().timeZone ?? ''
169
+ };
170
+ } catch (err) {
171
+ warn('getDeviceInfo failed, using fallback values:', err);
172
+ return {
173
+ sdk: SDK_VERSION,
174
+ device_model: '',
175
+ device_os: Platform.OS,
176
+ device_version: String(Platform.Version),
177
+ carrier: '',
178
+ app_version: '',
179
+ timezone_id: ''
180
+ };
181
+ }
182
+ }
183
+
138
184
  // ─── User details fingerprint ─────────────────────────────────────────────
139
185
 
140
186
  /**
@@ -177,7 +223,7 @@ class NotifySphere {
177
223
  static async initialize(config) {
178
224
  _debug = config.debug ?? false;
179
225
  NotifySphere.appId = config.appId;
180
- NotifySphere.baseUrl = NotifySphere.enforceHttps(config.baseUrl ?? DEFAULT_BASE_URL);
226
+ NotifySphere.baseUrl = NotifySphere.enforceHttps(config.baseUrl ?? DEFAULT_BASE_URL, true);
181
227
  NotifySphere.trackingUrl = NotifySphere.enforceHttps(config.trackingUrl ?? `${NotifySphere.baseUrl}${config.appId}/onpress/handle`);
182
228
  NotifySphere.deliveryUrl = NotifySphere.enforceHttps(config.deliveryUrl ?? `${NotifySphere.baseUrl}${config.appId}/delivery/confirm`);
183
229
  NotifySphere.apiKey = config.apiKey ?? null;
@@ -200,7 +246,16 @@ class NotifySphere {
200
246
  // ── Only call the registration API when the FCM token OR any user
201
247
  // detail has changed. This avoids a redundant network call on every
202
248
  // app open while still syncing updates (email, phone, location, etc.)
203
- const [cachedToken, cachedUserHash] = await Promise.all([AsyncStorage.getItem(STORAGE_KEY_TOKEN), AsyncStorage.getItem(STORAGE_KEY_USER_HASH)]);
249
+ const [cachedToken, cachedUserHash, cachedChannels] = await Promise.all([AsyncStorage.getItem(STORAGE_KEY_TOKEN), AsyncStorage.getItem(STORAGE_KEY_USER_HASH), AsyncStorage.getItem(STORAGE_KEY_CHANNELS)]);
250
+
251
+ // Re-create all backend-configured channels on every launch so they
252
+ // always exist before a background notification arrives — even after
253
+ // a reinstall or app-data clear. Notifee's createChannel is idempotent.
254
+ if (cachedChannels) {
255
+ const channels = JSON.parse(cachedChannels);
256
+ await NotifySphere.createChannelsFromConfig(channels);
257
+ log('Channels restored from cache:', channels.length);
258
+ }
204
259
  const currentUserHash = NotifySphere.buildUserHash(config);
205
260
  let subscriptionId = cachedSubId ?? undefined;
206
261
  const tokenChanged = fcmToken !== cachedToken;
@@ -234,6 +289,7 @@ class NotifySphere {
234
289
  * Extracted so it can also be called from the token-refresh watcher.
235
290
  */
236
291
  static async registerDevice(config, fcmToken, userHash) {
292
+ const devInfo = await NotifySphere.getDeviceInfo();
237
293
  const res = await axios.post(`${NotifySphere.baseUrl}${config.appId}/users`, {
238
294
  applicationUserId: config.applicationUserId,
239
295
  token: fcmToken,
@@ -246,7 +302,14 @@ class NotifySphere {
246
302
  state: config.state,
247
303
  email: config.email,
248
304
  phone: config.phone,
249
- tags: config.tags
305
+ tags: config.tags,
306
+ sdk: devInfo.sdk,
307
+ device_model: devInfo.device_model,
308
+ device_os: devInfo.device_os,
309
+ device_version: devInfo.device_version,
310
+ carrier: devInfo.carrier,
311
+ app_version: devInfo.app_version,
312
+ timezone_id: devInfo.timezone_id
250
313
  }
251
314
  }, {
252
315
  headers: {
@@ -262,6 +325,16 @@ class NotifySphere {
262
325
  const subscriptionId = res.data?.subscription_id;
263
326
  NotifySphere.subscriptionId = subscriptionId ?? null;
264
327
 
328
+ // Extract channels from the response and create them immediately.
329
+ // This ensures every backend-configured channel exists on the device
330
+ // before any background / terminated-state notification can arrive.
331
+ const channels = res.data?.notification_channels;
332
+ if (channels && channels.length > 0) {
333
+ await NotifySphere.createChannelsFromConfig(channels);
334
+ await AsyncStorage.setItem(STORAGE_KEY_CHANNELS, JSON.stringify(channels));
335
+ log('Channels created and cached from registration response:', channels.length);
336
+ }
337
+
265
338
  // Persist token, subscription_id, and user hash for future launch comparisons
266
339
  const hash = userHash ?? NotifySphere.buildUserHash(config);
267
340
  await Promise.all([AsyncStorage.setItem(STORAGE_KEY_TOKEN, fcmToken), AsyncStorage.setItem(STORAGE_KEY_USER_HASH, hash), subscriptionId ? AsyncStorage.setItem(STORAGE_KEY_SUB_ID, subscriptionId) : Promise.resolve()]);
@@ -314,7 +387,10 @@ class NotifySphere {
314
387
  }
315
388
  }, {
316
389
  headers: {
317
- 'Content-Type': 'application/json'
390
+ 'Content-Type': 'application/json',
391
+ ...(NotifySphere.apiKey ? {
392
+ Authorization: `Bearer ${NotifySphere.apiKey}`
393
+ } : {})
318
394
  },
319
395
  maxBodyLength: 1024 * 50,
320
396
  timeout: 10000
@@ -374,9 +450,35 @@ class NotifySphere {
374
450
  if (config?.subscriptionId) {
375
451
  NotifySphere.subscriptionId = config.subscriptionId;
376
452
  }
453
+
454
+ // Pre-create the default channel immediately so it is guaranteed to exist
455
+ // (with sound enabled) before any background or terminated-state message
456
+ // arrives. Without this, the channel would be created inside the async
457
+ // background handler — on some devices that races with the notification
458
+ // display and results in a silent notification.
459
+ notifee.createChannel({
460
+ id: 'channel_default',
461
+ name: 'Default Channel',
462
+ importance: AndroidImportance.HIGH,
463
+ lights: true,
464
+ lightColor: '#0000FF',
465
+ vibration: true
466
+ });
377
467
  messaging().setBackgroundMessageHandler(async remoteMessage => {
378
468
  const msg = remoteMessage;
379
- // Run both in parallel — display and delivery receipt
469
+
470
+ // Always display via Notifee so the backend-configured channel (with its
471
+ // custom sound, importance, and LED settings) is used in every state.
472
+ //
473
+ // On iOS, setBackgroundMessageHandler never fires for messages that
474
+ // contain a `notification` field — APNs intercepts them — so there is
475
+ // no duplicate risk on iOS.
476
+ //
477
+ // On Android, if the FCM payload contains a `notification` field, FCM
478
+ // will also auto-display, which causes a duplicate notification. To avoid
479
+ // this, the backend should send data-only messages to Android tokens
480
+ // (omit the top-level `notification` field). Notifee then has full
481
+ // control over display and sound in all states.
380
482
  await Promise.all([NotifySphere.displayLocalNotification(msg), NotifySphere.callbackOnDelivery(msg)]);
381
483
  });
382
484
  notifee.onBackgroundEvent(async ({
@@ -443,6 +545,70 @@ class NotifySphere {
443
545
  NotifySphere.unsubscribers.push(unsubMessage, unsubOpened, unsubForeground);
444
546
  }
445
547
 
548
+ // ─── Private: backend channel helpers ────────────────────────────────────
549
+
550
+ /** Maps the backend importance value to a Notifee AndroidImportance level. */
551
+ static mapImportance(value) {
552
+ const v = value ?? 3;
553
+ if (v >= 4) return AndroidImportance.HIGH;
554
+ if (v === 3) return AndroidImportance.DEFAULT;
555
+ if (v === 2) return AndroidImportance.LOW;
556
+ if (v === 1) return AndroidImportance.MIN;
557
+ return AndroidImportance.DEFAULT;
558
+ }
559
+
560
+ /** Maps the backend lockScreen value to a Notifee AndroidVisibility level. */
561
+ static mapVisibility(lockScreen) {
562
+ if (lockScreen === 1) return AndroidVisibility.PUBLIC;
563
+ if (lockScreen === -1) return AndroidVisibility.SECRET;
564
+ return AndroidVisibility.PRIVATE;
565
+ }
566
+
567
+ /**
568
+ * Creates Notifee channels from the array returned by the registration API.
569
+ * Called immediately after registration and on every subsequent launch from
570
+ * the AsyncStorage cache — so channels always exist before any notification
571
+ * arrives, including in background / terminated state.
572
+ */
573
+ static async createChannelsFromConfig(channels) {
574
+ for (const ch of channels) {
575
+ // sound === 'Custom' → use soundDetail as the raw resource name
576
+ // sound === 'None' → no sound (don't spread sound key)
577
+ // sound === 'Default' → omit key so Android uses system default
578
+ let soundValue;
579
+ if (ch.sound === 'Custom' && ch.soundDetail) {
580
+ soundValue = ch.soundDetail.replace(/\..+$/, ''); // strip extension
581
+ }
582
+ // 'None' and 'Default' intentionally leave soundValue as undefined
583
+
584
+ console.log('this is sound value', soundValue);
585
+ const channelDef = {
586
+ id: ch.channel_id,
587
+ name: ch.name,
588
+ importance: NotifySphere.mapImportance(ch.Importance),
589
+ lights: (ch.LED ?? 0) === 1,
590
+ vibration: (ch.vibration ?? 0) === 1,
591
+ visibility: NotifySphere.mapVisibility(ch.lockScreen),
592
+ ...(ch.description ? {
593
+ description: ch.description
594
+ } : {}),
595
+ ...(ch.led_color ? {
596
+ lightColor: ch.led_color
597
+ } : {}),
598
+ // Only spread sound when it is a real custom resource name.
599
+ // For 'Default', omitting the key tells Android to use the system
600
+ // default sound. For 'None', omitting it silences the channel only
601
+ // if importance is set to LOW/MIN — HIGH importance always plays sound.
602
+ ...(soundValue ? {
603
+ sound: soundValue
604
+ } : {})
605
+ };
606
+ await notifee.createChannel(channelDef);
607
+ NotifySphere.createdChannels.add(ch.channel_id);
608
+ log('Channel created from backend config:', ch.channel_id, `(${ch.name})`);
609
+ }
610
+ }
611
+
446
612
  // ─── Private: channel management ─────────────────────────────────────────
447
613
 
448
614
  /**
@@ -457,7 +623,13 @@ class NotifySphere {
457
623
  id,
458
624
  name,
459
625
  importance: AndroidImportance.HIGH,
460
- sound: soundName !== 'default' ? soundName : undefined,
626
+ // For custom sounds, use the raw resource name (without extension).
627
+ // For 'default', omit the field entirely so Android uses the device's
628
+ // default notification sound. Setting it to undefined explicitly can
629
+ // be treated as "no sound" by Notifee on some devices.
630
+ ...(soundName !== 'default' ? {
631
+ sound: soundName
632
+ } : {}),
461
633
  lights: true,
462
634
  lightColor: '#0000FF',
463
635
  vibration: true
@@ -473,7 +645,11 @@ class NotifySphere {
473
645
  // Use || so empty strings fall back just like null/undefined
474
646
  const soundRaw = remoteMessage.data?.sound || 'default';
475
647
  const soundName = soundRaw.replace(/\..+$/, '');
476
- const channelId = `channel_${soundName}`;
648
+
649
+ // If the backend specifies a channelId (e.g. a UUID created on the dashboard),
650
+ // use it directly — this lets the backend control which channel the notification
651
+ // is assigned to. Otherwise fall back to a channel derived from the sound name.
652
+ const channelId = remoteMessage.data?.channelId || `channel_${soundName}`;
477
653
  await NotifySphere.ensureChannel(channelId, `Channel ${soundName}`, soundRaw);
478
654
 
479
655
  // Resolve image — empty string treated same as missing
@@ -483,19 +659,31 @@ class NotifySphere {
483
659
  const title = remoteMessage.data?.title || remoteMessage.notification?.title || undefined;
484
660
  const body = remoteMessage.data?.body || remoteMessage.notification?.body || undefined;
485
661
 
486
- // smallIcon falls back to 'ic_stat_onesignal_default' if empty/missing
487
- // largeIcon is removed entirely
488
- const smallIcon = NotifySphere.resolveIcon(remoteMessage.data?.smallIcon) ?? 'ic_stat_onesignal_default';
662
+ // Resolve smallIcon and largeIcon both fall back to
663
+ // 'ic_stat_notifysphere_default' if not provided in the payload.
664
+ // Add a drawable with this name to your app's res/drawable folder.
665
+ const smallIconResolved = NotifySphere.resolveIcon(remoteMessage.data?.smallIcon) ?? 'ic_stat_notifysphere_default';
666
+ const largeIconResolved = NotifySphere.resolveIcon(remoteMessage.data?.largeIcon) ?? 'ic_stat_notifysphere_default';
667
+
668
+ // Determine Android expand style:
669
+ // - Image present → BIGPICTURE (shows image when expanded)
670
+ // - Long body (>44 chars) → BIGTEXT (shows full text when expanded)
671
+ // - Otherwise → no style (single-line collapsed notification)
672
+ const androidStyle = image ? {
673
+ type: AndroidStyle.BIGPICTURE,
674
+ picture: image
675
+ } : body && body.length > 44 ? {
676
+ type: AndroidStyle.BIGTEXT,
677
+ text: body
678
+ } : undefined;
489
679
  await notifee.displayNotification({
490
680
  title,
491
681
  body,
492
682
  android: {
493
683
  channelId,
494
- smallIcon,
495
- style: image ? {
496
- type: AndroidStyle.BIGPICTURE,
497
- picture: image
498
- } : undefined
684
+ smallIcon: smallIconResolved,
685
+ largeIcon: largeIconResolved,
686
+ style: androidStyle
499
687
  },
500
688
  ios: {
501
689
  sound: soundRaw,
@@ -525,12 +713,17 @@ class NotifySphere {
525
713
  /**
526
714
  * Rejects plain HTTP URLs to prevent user data (FCM token, email, phone,
527
715
  * location) being sent over an unencrypted connection.
716
+ * Also ensures the URL ends with a trailing slash so appId is always
717
+ * correctly appended (e.g. baseUrl + appId + '/users').
528
718
  */
529
- static enforceHttps(url) {
719
+ static enforceHttps(url, ensureTrailingSlash = false) {
530
720
  if (url.startsWith('http://')) {
531
721
  logError(`Insecure URL rejected: "${url}". NotifySphere only allows HTTPS endpoints.`);
532
722
  throw new Error(`NotifySphere: insecure HTTP URL is not allowed — use HTTPS instead.`);
533
723
  }
724
+ if (ensureTrailingSlash && !url.endsWith('/')) {
725
+ return url + '/';
726
+ }
534
727
  return url;
535
728
  }
536
729
 
@@ -1 +1 @@
1
- {"version":3,"names":["messaging","notifee","AndroidImportance","AndroidStyle","EventType","axios","AsyncStorage","PermissionsAndroid","Platform","STORAGE_KEY_TOKEN","STORAGE_KEY_SUB_ID","STORAGE_KEY_USER_HASH","_debug","log","args","console","warn","logError","error","DEFAULT_BASE_URL","NotifySphere","callback","fcmToken","appId","subscriptionId","baseUrl","trackingUrl","deliveryUrl","apiKey","unsubscribers","initialized","createdChannels","Set","callbackOnpress","notification","status","notificationId","data","notification_id","headers","response","post","subscription_id","onPressStatus","maxBodyLength","timeout","sendCallback","err","callbackOnDelivery","remoteMessage","onDeliveredStatus","checkApplicationPermission","OS","Version","granted","request","PERMISSIONS","POST_NOTIFICATIONS","RESULTS","GRANTED","authStatus","requestPermission","AuthorizationStatus","AUTHORIZED","PROVISIONAL","buildUserHash","config","fields","applicationUserId","type","name","lat","long","city","state","email","phone","tags","JSON","stringify","Object","keys","sort","reduce","acc","k","initialize","debug","enforceHttps","hasPermission","undefined","getToken","cachedSubId","getItem","cachedToken","cachedUserHash","Promise","all","currentUserHash","tokenChanged","userChanged","registerDevice","ensureChannel","setupListeners","watchTokenRefresh","userHash","res","token","user","userName","Authorization","hash","setItem","resolve","unsubRefresh","onTokenRefresh","newToken","existingHash","push","updateTags","params","onNotification","setBackgroundHandler","setBackgroundMessageHandler","msg","displayLocalNotification","onBackgroundEvent","detail","PRESS","destroy","unsub","unsubMessage","onMessage","unsubOpened","onNotificationOpenedApp","messageId","getInitialNotification","then","catch","unsubForeground","onForegroundEvent","id","sound","has","soundName","replace","channelDef","importance","HIGH","lights","lightColor","vibration","createChannel","add","soundRaw","channelId","image","imageUrl","android","ios","attachments","url","title","body","smallIcon","resolveIcon","displayNotification","style","BIGPICTURE","picture","foregroundPresentationOptions","alert","badge","value","startsWith","Error","isFirebase","notif"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["messaging","DeviceInfo","notifee","AndroidImportance","AndroidVisibility","AndroidStyle","EventType","axios","AsyncStorage","PermissionsAndroid","Platform","STORAGE_KEY_TOKEN","STORAGE_KEY_SUB_ID","STORAGE_KEY_USER_HASH","STORAGE_KEY_CHANNELS","_debug","log","args","console","warn","logError","error","SDK_VERSION","DEFAULT_BASE_URL","NotifySphere","callback","fcmToken","appId","subscriptionId","baseUrl","trackingUrl","deliveryUrl","apiKey","unsubscribers","initialized","createdChannels","Set","callbackOnpress","notification","status","notificationId","data","notification_id","headers","response","post","subscription_id","onPressStatus","maxBodyLength","timeout","sendCallback","err","callbackOnDelivery","remoteMessage","onDeliveredStatus","checkApplicationPermission","OS","Version","granted","request","PERMISSIONS","POST_NOTIFICATIONS","RESULTS","GRANTED","authStatus","requestPermission","AuthorizationStatus","AUTHORIZED","PROVISIONAL","getDeviceInfo","carrier","Promise","all","getCarrier","catch","sdk","device_model","getModel","device_os","device_version","getSystemVersion","app_version","getVersion","timezone_id","Intl","DateTimeFormat","resolvedOptions","timeZone","String","buildUserHash","config","fields","applicationUserId","type","name","lat","long","city","state","email","phone","tags","JSON","stringify","Object","keys","sort","reduce","acc","k","initialize","debug","enforceHttps","hasPermission","undefined","getToken","cachedSubId","getItem","cachedToken","cachedUserHash","cachedChannels","channels","parse","createChannelsFromConfig","length","currentUserHash","tokenChanged","userChanged","registerDevice","ensureChannel","setupListeners","watchTokenRefresh","userHash","devInfo","res","token","user","userName","Authorization","notification_channels","setItem","hash","resolve","unsubRefresh","onTokenRefresh","newToken","existingHash","push","updateTags","params","onNotification","setBackgroundHandler","createChannel","id","importance","HIGH","lights","lightColor","vibration","setBackgroundMessageHandler","msg","displayLocalNotification","onBackgroundEvent","detail","PRESS","destroy","unsub","unsubMessage","onMessage","unsubOpened","onNotificationOpenedApp","messageId","getInitialNotification","then","unsubForeground","onForegroundEvent","mapImportance","value","v","DEFAULT","LOW","MIN","mapVisibility","lockScreen","PUBLIC","SECRET","PRIVATE","ch","soundValue","sound","soundDetail","replace","channelDef","channel_id","Importance","LED","visibility","description","led_color","add","has","soundName","soundRaw","channelId","image","imageUrl","android","ios","attachments","url","title","body","smallIconResolved","resolveIcon","smallIcon","largeIconResolved","largeIcon","androidStyle","BIGPICTURE","picture","BIGTEXT","text","displayNotification","style","foregroundPresentationOptions","alert","badge","ensureTrailingSlash","startsWith","Error","endsWith","isFirebase","notif"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -40,6 +40,27 @@ export type NotificationData = {
40
40
  sound?: string;
41
41
  };
42
42
  export type NotificationCallback = (notification: NotificationData, type?: string) => void;
43
+ /** Shape of a single notification channel returned by the registration API */
44
+ export interface BackendChannelConfig {
45
+ channel_id: string;
46
+ name: string;
47
+ description?: string;
48
+ /** Android importance level sent by backend — mapped to AndroidImportance */
49
+ Importance?: number;
50
+ /** 1 = enable LED, 0 = disable */
51
+ LED?: number;
52
+ led_color?: string | null;
53
+ /** 'Custom' | 'Default' | 'None' */
54
+ sound?: string;
55
+ /** Raw resource name used when sound === 'Custom' (e.g. 'nowait_sound') */
56
+ soundDetail?: string;
57
+ /** 1 = vibration on, 0 = off */
58
+ vibration?: number;
59
+ vibrationDetail?: string | null;
60
+ badge?: number;
61
+ /** 1 = PUBLIC, 0 = PRIVATE, -1 = SECRET */
62
+ lockScreen?: number;
63
+ }
43
64
  export type InitializeConfig = {
44
65
  /** Your application's user ID for this device */
45
66
  applicationUserId: number;
@@ -115,6 +136,12 @@ declare class NotifySphere {
115
136
  */
116
137
  private static callbackOnDelivery;
117
138
  static checkApplicationPermission(): Promise<boolean>;
139
+ /**
140
+ * Collects device metadata sent to the registration API.
141
+ * Uses react-native-device-info for model, carrier, and app version.
142
+ * Falls back gracefully if any call fails so registration is never blocked.
143
+ */
144
+ private static getDeviceInfo;
118
145
  /**
119
146
  * Builds a stable string fingerprint of all user-profile fields.
120
147
  * Used to detect whether any detail has changed since the last registration,
@@ -209,6 +236,17 @@ declare class NotifySphere {
209
236
  */
210
237
  static destroy(): void;
211
238
  private static setupListeners;
239
+ /** Maps the backend importance value to a Notifee AndroidImportance level. */
240
+ private static mapImportance;
241
+ /** Maps the backend lockScreen value to a Notifee AndroidVisibility level. */
242
+ private static mapVisibility;
243
+ /**
244
+ * Creates Notifee channels from the array returned by the registration API.
245
+ * Called immediately after registration and on every subsequent launch from
246
+ * the AsyncStorage cache — so channels always exist before any notification
247
+ * arrives, including in background / terminated state.
248
+ */
249
+ private static createChannelsFromConfig;
212
250
  /**
213
251
  * Creates a notification channel if it hasn't been created yet this session.
214
252
  * Notifee handles idempotency across app restarts; this in-memory guard
@@ -225,6 +263,8 @@ declare class NotifySphere {
225
263
  /**
226
264
  * Rejects plain HTTP URLs to prevent user data (FCM token, email, phone,
227
265
  * location) being sent over an unencrypted connection.
266
+ * Also ensures the URL ends with a trailing slash so appId is always
267
+ * correctly appended (e.g. baseUrl + appId + '/users').
228
268
  */
229
269
  private static enforceHttps;
230
270
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-notify-sphere",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Notify sphere npm package",
5
5
  "main": "./lib/module/index",
6
6
  "types": "lib/typescript/src/index.d.ts",
@@ -78,6 +78,7 @@
78
78
  "react": "19.1.0",
79
79
  "react-native": "0.81.1",
80
80
  "react-native-builder-bob": "^0.40.13",
81
+ "react-native-device-info": "^15.0.1",
81
82
  "release-it": "^19.0.4",
82
83
  "turbo": "^2.5.6",
83
84
  "typescript": "^5.9.2"
@@ -91,7 +92,8 @@
91
92
  "@react-native-firebase/app": "^22.2.1",
92
93
  "@react-native-firebase/messaging": "^22.2.1",
93
94
  "react": "*",
94
- "react-native": "*"
95
+ "react-native": "*",
96
+ "react-native-device-info": ">=10.0.0"
95
97
  },
96
98
  "workspaces": [
97
99
  "example"
package/src/index.tsx CHANGED
@@ -1,6 +1,8 @@
1
1
  import messaging from '@react-native-firebase/messaging';
2
+ import DeviceInfo from 'react-native-device-info';
2
3
  import notifee, {
3
4
  AndroidImportance,
5
+ AndroidVisibility,
4
6
  AndroidStyle,
5
7
  EventType,
6
8
  type AndroidChannel,
@@ -9,9 +11,10 @@ import axios from 'axios';
9
11
  import AsyncStorage from '@react-native-async-storage/async-storage';
10
12
  import { PermissionsAndroid, Platform } from 'react-native';
11
13
 
12
- const STORAGE_KEY_TOKEN = '@notifysphere_fcm_token';
13
- const STORAGE_KEY_SUB_ID = '@notifysphere_subscription_id';
14
+ const STORAGE_KEY_TOKEN = '@notifysphere_fcm_token';
15
+ const STORAGE_KEY_SUB_ID = '@notifysphere_subscription_id';
14
16
  const STORAGE_KEY_USER_HASH = '@notifysphere_user_hash';
17
+ const STORAGE_KEY_CHANNELS = '@notifysphere_channels';
15
18
 
16
19
  // ─── Type definitions ──────────────────────────────────────────────────────────
17
20
 
@@ -52,6 +55,28 @@ export type NotificationCallback = (
52
55
  type?: string
53
56
  ) => void;
54
57
 
58
+ /** Shape of a single notification channel returned by the registration API */
59
+ export interface BackendChannelConfig {
60
+ channel_id: string;
61
+ name: string;
62
+ description?: string;
63
+ /** Android importance level sent by backend — mapped to AndroidImportance */
64
+ Importance?: number;
65
+ /** 1 = enable LED, 0 = disable */
66
+ LED?: number;
67
+ led_color?: string | null;
68
+ /** 'Custom' | 'Default' | 'None' */
69
+ sound?: string;
70
+ /** Raw resource name used when sound === 'Custom' (e.g. 'nowait_sound') */
71
+ soundDetail?: string;
72
+ /** 1 = vibration on, 0 = off */
73
+ vibration?: number;
74
+ vibrationDetail?: string | null;
75
+ badge?: number;
76
+ /** 1 = PUBLIC, 0 = PRIVATE, -1 = SECRET */
77
+ lockScreen?: number;
78
+ }
79
+
55
80
  export type InitializeConfig = {
56
81
  /** Your application's user ID for this device */
57
82
  applicationUserId: number;
@@ -113,10 +138,27 @@ const warn = (...args: unknown[]) => {
113
138
  const logError = (...args: unknown[]) =>
114
139
  console.error('[NotifySphere]', ...args);
115
140
 
141
+ // ─── SDK version ──────────────────────────────────────────────────────────────
142
+
143
+ const SDK_VERSION = '1.2.1';
144
+
145
+ // ─── Device info result shape ─────────────────────────────────────────────────
146
+
147
+ interface DeviceInfoResult {
148
+ sdk: string;
149
+ device_model: string;
150
+ device_os: string;
151
+ device_version: string;
152
+ carrier: string;
153
+ app_version: string;
154
+ timezone_id: string;
155
+ }
156
+
116
157
  // ─── Default endpoints ────────────────────────────────────────────────────────
117
158
 
118
159
  const DEFAULT_BASE_URL = 'https://api.notifysphere.in/client/';
119
160
  // const DEFAULT_BASE_URL = 'https://apinotify.dothejob.in';
161
+ //const DEFAULT_BASE_URL = 'https://apinotify.dothejob.in/client/';
120
162
 
121
163
  // ─── NotifySphere class ───────────────────────────────────────────────────────
122
164
 
@@ -236,6 +278,44 @@ class NotifySphere {
236
278
  }
237
279
  }
238
280
 
281
+ // ─── Device info ──────────────────────────────────────────────────────────
282
+
283
+ /**
284
+ * Collects device metadata sent to the registration API.
285
+ * Uses react-native-device-info for model, carrier, and app version.
286
+ * Falls back gracefully if any call fails so registration is never blocked.
287
+ */
288
+ private static async getDeviceInfo(): Promise<DeviceInfoResult> {
289
+ try {
290
+ // getCarrier() is the only async call — run everything in parallel
291
+ const [carrier] = await Promise.all([
292
+ DeviceInfo.getCarrier().catch(() => ''),
293
+ ]);
294
+
295
+ return {
296
+ sdk: SDK_VERSION,
297
+ device_model: DeviceInfo.getModel(),
298
+ device_os: Platform.OS,
299
+ device_version: DeviceInfo.getSystemVersion(),
300
+ carrier: carrier ?? '',
301
+ app_version: DeviceInfo.getVersion(),
302
+ // Intl is available in Hermes/JSC without any extra package
303
+ timezone_id: Intl.DateTimeFormat().resolvedOptions().timeZone ?? '',
304
+ };
305
+ } catch (err) {
306
+ warn('getDeviceInfo failed, using fallback values:', err);
307
+ return {
308
+ sdk: SDK_VERSION,
309
+ device_model: '',
310
+ device_os: Platform.OS,
311
+ device_version: String(Platform.Version),
312
+ carrier: '',
313
+ app_version: '',
314
+ timezone_id: '',
315
+ };
316
+ }
317
+ }
318
+
239
319
  // ─── User details fingerprint ─────────────────────────────────────────────
240
320
 
241
321
  /**
@@ -286,7 +366,7 @@ class NotifySphere {
286
366
  ): Promise<string | undefined> {
287
367
  _debug = config.debug ?? false;
288
368
  NotifySphere.appId = config.appId;
289
- NotifySphere.baseUrl = NotifySphere.enforceHttps(config.baseUrl ?? DEFAULT_BASE_URL);
369
+ NotifySphere.baseUrl = NotifySphere.enforceHttps(config.baseUrl ?? DEFAULT_BASE_URL, true);
290
370
  NotifySphere.trackingUrl = NotifySphere.enforceHttps(
291
371
  config.trackingUrl ?? `${NotifySphere.baseUrl}${config.appId}/onpress/handle`
292
372
  );
@@ -315,11 +395,21 @@ class NotifySphere {
315
395
  // ── Only call the registration API when the FCM token OR any user
316
396
  // detail has changed. This avoids a redundant network call on every
317
397
  // app open while still syncing updates (email, phone, location, etc.)
318
- const [cachedToken, cachedUserHash] = await Promise.all([
398
+ const [cachedToken, cachedUserHash, cachedChannels] = await Promise.all([
319
399
  AsyncStorage.getItem(STORAGE_KEY_TOKEN),
320
400
  AsyncStorage.getItem(STORAGE_KEY_USER_HASH),
401
+ AsyncStorage.getItem(STORAGE_KEY_CHANNELS),
321
402
  ]);
322
403
 
404
+ // Re-create all backend-configured channels on every launch so they
405
+ // always exist before a background notification arrives — even after
406
+ // a reinstall or app-data clear. Notifee's createChannel is idempotent.
407
+ if (cachedChannels) {
408
+ const channels = JSON.parse(cachedChannels) as BackendChannelConfig[];
409
+ await NotifySphere.createChannelsFromConfig(channels);
410
+ log('Channels restored from cache:', channels.length);
411
+ }
412
+
323
413
  const currentUserHash = NotifySphere.buildUserHash(config);
324
414
  let subscriptionId: string | undefined = cachedSubId ?? undefined;
325
415
 
@@ -369,6 +459,8 @@ class NotifySphere {
369
459
  fcmToken: string,
370
460
  userHash?: string
371
461
  ): Promise<string | undefined> {
462
+
463
+ const devInfo = await NotifySphere.getDeviceInfo();
372
464
  const res = await axios.post(
373
465
  `${NotifySphere.baseUrl}${config.appId}/users`,
374
466
  {
@@ -384,6 +476,13 @@ class NotifySphere {
384
476
  email: config.email,
385
477
  phone: config.phone,
386
478
  tags: config.tags,
479
+ sdk: devInfo.sdk,
480
+ device_model: devInfo.device_model,
481
+ device_os: devInfo.device_os,
482
+ device_version: devInfo.device_version,
483
+ carrier: devInfo.carrier,
484
+ app_version: devInfo.app_version,
485
+ timezone_id: devInfo.timezone_id,
387
486
  },
388
487
  },
389
488
  {
@@ -402,6 +501,17 @@ class NotifySphere {
402
501
  const subscriptionId: string | undefined = res.data?.subscription_id;
403
502
  NotifySphere.subscriptionId = subscriptionId ?? null;
404
503
 
504
+ // Extract channels from the response and create them immediately.
505
+ // This ensures every backend-configured channel exists on the device
506
+ // before any background / terminated-state notification can arrive.
507
+ const channels: BackendChannelConfig[] | undefined =
508
+ res.data?.notification_channels;
509
+ if (channels && channels.length > 0) {
510
+ await NotifySphere.createChannelsFromConfig(channels);
511
+ await AsyncStorage.setItem(STORAGE_KEY_CHANNELS, JSON.stringify(channels));
512
+ log('Channels created and cached from registration response:', channels.length);
513
+ }
514
+
405
515
  // Persist token, subscription_id, and user hash for future launch comparisons
406
516
  const hash = userHash ?? NotifySphere.buildUserHash(config);
407
517
  await Promise.all([
@@ -471,9 +581,14 @@ class NotifySphere {
471
581
  user: { tags: params.tags },
472
582
  },
473
583
  {
474
- headers: { 'Content-Type': 'application/json' },
584
+ headers: {
585
+ 'Content-Type': 'application/json',
586
+ ...(NotifySphere.apiKey
587
+ ? { Authorization: `Bearer ${NotifySphere.apiKey}` }
588
+ : {}),
589
+ },
475
590
  maxBodyLength: 1024 * 50,
476
- timeout: 10000,
591
+ timeout: 10000,
477
592
  }
478
593
  );
479
594
 
@@ -552,9 +667,35 @@ class NotifySphere {
552
667
  NotifySphere.subscriptionId = config.subscriptionId;
553
668
  }
554
669
 
670
+ // Pre-create the default channel immediately so it is guaranteed to exist
671
+ // (with sound enabled) before any background or terminated-state message
672
+ // arrives. Without this, the channel would be created inside the async
673
+ // background handler — on some devices that races with the notification
674
+ // display and results in a silent notification.
675
+ notifee.createChannel({
676
+ id: 'channel_default',
677
+ name: 'Default Channel',
678
+ importance: AndroidImportance.HIGH,
679
+ lights: true,
680
+ lightColor: '#0000FF',
681
+ vibration: true,
682
+ });
683
+
555
684
  messaging().setBackgroundMessageHandler(async (remoteMessage) => {
556
685
  const msg = remoteMessage as FirebaseRemoteMessage;
557
- // Run both in parallel — display and delivery receipt
686
+
687
+ // Always display via Notifee so the backend-configured channel (with its
688
+ // custom sound, importance, and LED settings) is used in every state.
689
+ //
690
+ // On iOS, setBackgroundMessageHandler never fires for messages that
691
+ // contain a `notification` field — APNs intercepts them — so there is
692
+ // no duplicate risk on iOS.
693
+ //
694
+ // On Android, if the FCM payload contains a `notification` field, FCM
695
+ // will also auto-display, which causes a duplicate notification. To avoid
696
+ // this, the backend should send data-only messages to Android tokens
697
+ // (omit the top-level `notification` field). Notifee then has full
698
+ // control over display and sound in all states.
558
699
  await Promise.all([
559
700
  NotifySphere.displayLocalNotification(msg),
560
701
  NotifySphere.callbackOnDelivery(msg),
@@ -647,6 +788,68 @@ class NotifySphere {
647
788
  );
648
789
  }
649
790
 
791
+ // ─── Private: backend channel helpers ────────────────────────────────────
792
+
793
+ /** Maps the backend importance value to a Notifee AndroidImportance level. */
794
+ private static mapImportance(value: number | undefined): AndroidImportance {
795
+ const v = value ?? 3;
796
+ if (v >= 4) return AndroidImportance.HIGH;
797
+ if (v === 3) return AndroidImportance.DEFAULT;
798
+ if (v === 2) return AndroidImportance.LOW;
799
+ if (v === 1) return AndroidImportance.MIN;
800
+ return AndroidImportance.DEFAULT;
801
+ }
802
+
803
+ /** Maps the backend lockScreen value to a Notifee AndroidVisibility level. */
804
+ private static mapVisibility(lockScreen: number | undefined): AndroidVisibility {
805
+ if (lockScreen === 1) return AndroidVisibility.PUBLIC;
806
+ if (lockScreen === -1) return AndroidVisibility.SECRET;
807
+ return AndroidVisibility.PRIVATE;
808
+ }
809
+
810
+ /**
811
+ * Creates Notifee channels from the array returned by the registration API.
812
+ * Called immediately after registration and on every subsequent launch from
813
+ * the AsyncStorage cache — so channels always exist before any notification
814
+ * arrives, including in background / terminated state.
815
+ */
816
+ private static async createChannelsFromConfig(
817
+ channels: BackendChannelConfig[]
818
+ ): Promise<void> {
819
+ for (const ch of channels) {
820
+ // sound === 'Custom' → use soundDetail as the raw resource name
821
+ // sound === 'None' → no sound (don't spread sound key)
822
+ // sound === 'Default' → omit key so Android uses system default
823
+ let soundValue: string | undefined;
824
+ if (ch.sound === 'Custom' && ch.soundDetail) {
825
+ soundValue = ch.soundDetail.replace(/\..+$/, ''); // strip extension
826
+ }
827
+ // 'None' and 'Default' intentionally leave soundValue as undefined
828
+
829
+ console.log('this is sound value',soundValue)
830
+
831
+ const channelDef: AndroidChannel = {
832
+ id: ch.channel_id,
833
+ name: ch.name,
834
+ importance: NotifySphere.mapImportance(ch.Importance),
835
+ lights: (ch.LED ?? 0) === 1,
836
+ vibration: (ch.vibration ?? 0) === 1,
837
+ visibility: NotifySphere.mapVisibility(ch.lockScreen),
838
+ ...(ch.description ? { description: ch.description } : {}),
839
+ ...(ch.led_color ? { lightColor: ch.led_color } : {}),
840
+ // Only spread sound when it is a real custom resource name.
841
+ // For 'Default', omitting the key tells Android to use the system
842
+ // default sound. For 'None', omitting it silences the channel only
843
+ // if importance is set to LOW/MIN — HIGH importance always plays sound.
844
+ ...(soundValue ? { sound: soundValue } : {}),
845
+ };
846
+
847
+ await notifee.createChannel(channelDef);
848
+ NotifySphere.createdChannels.add(ch.channel_id);
849
+ log('Channel created from backend config:', ch.channel_id, `(${ch.name})`);
850
+ }
851
+ }
852
+
650
853
  // ─── Private: channel management ─────────────────────────────────────────
651
854
 
652
855
  /**
@@ -666,7 +869,11 @@ class NotifySphere {
666
869
  id,
667
870
  name,
668
871
  importance: AndroidImportance.HIGH,
669
- sound: soundName !== 'default' ? soundName : undefined,
872
+ // For custom sounds, use the raw resource name (without extension).
873
+ // For 'default', omit the field entirely so Android uses the device's
874
+ // default notification sound. Setting it to undefined explicitly can
875
+ // be treated as "no sound" by Notifee on some devices.
876
+ ...(soundName !== 'default' ? { sound: soundName } : {}),
670
877
  lights: true,
671
878
  lightColor: '#0000FF',
672
879
  vibration: true,
@@ -685,7 +892,11 @@ class NotifySphere {
685
892
  // Use || so empty strings fall back just like null/undefined
686
893
  const soundRaw = remoteMessage.data?.sound || 'default';
687
894
  const soundName = soundRaw.replace(/\..+$/, '');
688
- const channelId = `channel_${soundName}`;
895
+
896
+ // If the backend specifies a channelId (e.g. a UUID created on the dashboard),
897
+ // use it directly — this lets the backend control which channel the notification
898
+ // is assigned to. Otherwise fall back to a channel derived from the sound name.
899
+ const channelId = remoteMessage.data?.channelId || `channel_${soundName}`;
689
900
 
690
901
  await NotifySphere.ensureChannel(channelId, `Channel ${soundName}`, soundRaw);
691
902
 
@@ -703,20 +914,34 @@ class NotifySphere {
703
914
  const body =
704
915
  remoteMessage.data?.body || remoteMessage.notification?.body || undefined;
705
916
 
706
- // smallIcon falls back to 'ic_stat_onesignal_default' if empty/missing
707
- // largeIcon is removed entirely
708
- const smallIcon =
709
- NotifySphere.resolveIcon(remoteMessage.data?.smallIcon) ?? 'ic_stat_onesignal_default';
917
+ // Resolve smallIcon and largeIcon both fall back to
918
+ // 'ic_stat_notifysphere_default' if not provided in the payload.
919
+ // Add a drawable with this name to your app's res/drawable folder.
920
+ const smallIconResolved =
921
+ NotifySphere.resolveIcon(remoteMessage.data?.smallIcon) ??
922
+ 'ic_stat_notifysphere_default';
923
+ const largeIconResolved =
924
+ NotifySphere.resolveIcon(remoteMessage.data?.largeIcon) ??
925
+ 'ic_stat_notifysphere_default';
926
+
927
+ // Determine Android expand style:
928
+ // - Image present → BIGPICTURE (shows image when expanded)
929
+ // - Long body (>44 chars) → BIGTEXT (shows full text when expanded)
930
+ // - Otherwise → no style (single-line collapsed notification)
931
+ const androidStyle = image
932
+ ? ({ type: AndroidStyle.BIGPICTURE, picture: image } as const)
933
+ : body && body.length > 44
934
+ ? ({ type: AndroidStyle.BIGTEXT, text: body } as const)
935
+ : undefined;
710
936
 
711
937
  await notifee.displayNotification({
712
938
  title,
713
939
  body,
714
940
  android: {
715
941
  channelId,
716
- smallIcon,
717
- style: image
718
- ? { type: AndroidStyle.BIGPICTURE, picture: image }
719
- : undefined,
942
+ smallIcon: smallIconResolved,
943
+ largeIcon: largeIconResolved,
944
+ style: androidStyle,
720
945
  },
721
946
  ios: {
722
947
  sound: soundRaw,
@@ -744,8 +969,10 @@ class NotifySphere {
744
969
  /**
745
970
  * Rejects plain HTTP URLs to prevent user data (FCM token, email, phone,
746
971
  * location) being sent over an unencrypted connection.
972
+ * Also ensures the URL ends with a trailing slash so appId is always
973
+ * correctly appended (e.g. baseUrl + appId + '/users').
747
974
  */
748
- private static enforceHttps(url: string): string {
975
+ private static enforceHttps(url: string, ensureTrailingSlash = false): string {
749
976
  if (url.startsWith('http://')) {
750
977
  logError(
751
978
  `Insecure URL rejected: "${url}". NotifySphere only allows HTTPS endpoints.`
@@ -754,6 +981,9 @@ class NotifySphere {
754
981
  `NotifySphere: insecure HTTP URL is not allowed — use HTTPS instead.`
755
982
  );
756
983
  }
984
+ if (ensureTrailingSlash && !url.endsWith('/')) {
985
+ return url + '/';
986
+ }
757
987
  return url;
758
988
  }
759
989