@loyalytics/swan-react-native-sdk 2.7.0 → 2.7.1-beta.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 (27) hide show
  1. package/ios/SwanNotificationContentExtension/Info.plist +2 -0
  2. package/ios/SwanNotificationContentExtension/MainInterface.storyboard +1 -2
  3. package/ios/SwanNotificationContentExtension/NotificationViewController.swift +5 -4
  4. package/ios/SwanNotificationContentExtension/templates/CarouselView.swift +6 -11
  5. package/lib/commonjs/index.js +57 -5
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/utils/SharedCredentialsManager.js +26 -0
  8. package/lib/commonjs/utils/SharedCredentialsManager.js.map +1 -1
  9. package/lib/commonjs/version.js +1 -1
  10. package/lib/commonjs/version.js.map +1 -1
  11. package/lib/module/index.js +57 -5
  12. package/lib/module/index.js.map +1 -1
  13. package/lib/module/utils/SharedCredentialsManager.js +26 -0
  14. package/lib/module/utils/SharedCredentialsManager.js.map +1 -1
  15. package/lib/module/version.js +1 -1
  16. package/lib/module/version.js.map +1 -1
  17. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  18. package/lib/typescript/commonjs/src/utils/SharedCredentialsManager.d.ts +13 -0
  19. package/lib/typescript/commonjs/src/utils/SharedCredentialsManager.d.ts.map +1 -1
  20. package/lib/typescript/commonjs/src/version.d.ts +1 -1
  21. package/lib/typescript/commonjs/src/version.d.ts.map +1 -1
  22. package/lib/typescript/module/src/index.d.ts.map +1 -1
  23. package/lib/typescript/module/src/utils/SharedCredentialsManager.d.ts +13 -0
  24. package/lib/typescript/module/src/utils/SharedCredentialsManager.d.ts.map +1 -1
  25. package/lib/typescript/module/src/version.d.ts +1 -1
  26. package/lib/typescript/module/src/version.d.ts.map +1 -1
  27. package/package.json +1 -1
@@ -177,6 +177,32 @@ class SharedCredentialsManager {
177
177
  }
178
178
  }
179
179
 
180
+ /**
181
+ * Peek at template click data without clearing it.
182
+ * Used by createNotificationOpenedHandler to check if Content Extension
183
+ * wrote click data, without racing with checkPendingCarouselClick.
184
+ *
185
+ * @returns Click data object or null if no pending click data
186
+ */
187
+ static async peekTemplateClickData() {
188
+ const accessor = getAppGroupAccessor();
189
+ if (!accessor) return null;
190
+ if (_reactNative.Platform.OS !== 'ios') {
191
+ return null;
192
+ }
193
+ try {
194
+ const clickDataRaw = await accessor.getItem('swanTemplateClickData', this.APP_GROUP_ID);
195
+ if (!clickDataRaw) {
196
+ return null;
197
+ }
198
+ const clickData = typeof clickDataRaw === 'string' ? JSON.parse(clickDataRaw) : clickDataRaw;
199
+ return clickData;
200
+ } catch (error) {
201
+ _Logger.default.error('[SharedCredentials] Failed to peek template click data:', error);
202
+ return null;
203
+ }
204
+ }
205
+
180
206
  /**
181
207
  * Check if iOS Notification Service Extension is active/configured
182
208
  * Returns true if App Group is accessible (meaning NES is configured)
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativeBase","_interopRequireDefault","_Logger","e","__esModule","default","SwanAppGroup","NativeModules","SharedGroupPreferences","getAppGroupAccessor","SharedCredentialsManager","APP_GROUP_ID","CREDENTIALS_KEY","saveToAppGroup","credentials","accessor","Logger","log","Platform","OS","credentialsJson","JSON","stringify","credentialsBase64","Base64","encode","setItem","appId","deviceId","hasCDID","cdid","isProduction","error","readFromAppGroup","getItem","decode","parse","clearFromAppGroup","setAppGroupId","appGroupId","getAppGroupId","readTemplateClickData","clickDataRaw","clickData","isNotificationServiceExtensionActive","isNesActive","exports"],"sourceRoot":"../../../src","sources":["utils/SharedCredentialsManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_reactNativeBase","_interopRequireDefault","_Logger","e","__esModule","default","SwanAppGroup","NativeModules","SharedGroupPreferences","getAppGroupAccessor","SharedCredentialsManager","APP_GROUP_ID","CREDENTIALS_KEY","saveToAppGroup","credentials","accessor","Logger","log","Platform","OS","credentialsJson","JSON","stringify","credentialsBase64","Base64","encode","setItem","appId","deviceId","hasCDID","cdid","isProduction","error","readFromAppGroup","getItem","decode","parse","clearFromAppGroup","setAppGroupId","appGroupId","getAppGroupId","readTemplateClickData","clickDataRaw","clickData","peekTemplateClickData","isNotificationServiceExtensionActive","isNesActive","exports"],"sourceRoot":"../../../src","sources":["utils/SharedCredentialsManager.ts"],"mappings":"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","ignoreList":[]}
@@ -8,5 +8,5 @@ exports.SDK_VERSION = void 0;
8
8
  // This file is generated from package.json version during build.
9
9
  // See scripts/generate-version.js
10
10
 
11
- const SDK_VERSION = exports.SDK_VERSION = '2.7.0';
11
+ const SDK_VERSION = exports.SDK_VERSION = '2.7.1-beta.0';
12
12
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SDK_VERSION","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAEO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["SDK_VERSION","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAEO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,cAAc","ignoreList":[]}
@@ -138,8 +138,17 @@ const directAckSentIds = new Set();
138
138
  export function _resetClickDedup() {
139
139
  processedClickIds.clear();
140
140
  directAckSentIds.clear();
141
+ _lastCarouselClickHandledAt = 0;
141
142
  }
142
143
 
144
+ /**
145
+ * Timestamp of the last iOS carousel click handled by checkPendingCarouselClick().
146
+ * Used by createNotificationOpenedHandler to detect when checkPendingCarouselClick
147
+ * already consumed the one-time App Group click data, avoiding a duplicate
148
+ * NOTIFICATION_OPENED emission with the wrong (default) route.
149
+ */
150
+ let _lastCarouselClickHandledAt = 0;
151
+
143
152
  /**
144
153
  * Notification deep link payload
145
154
  * Emitted when user clicks on a push notification
@@ -1884,6 +1893,12 @@ export default class SwanSDK {
1884
1893
  return;
1885
1894
  }
1886
1895
 
1896
+ // Signal that we handled this iOS carousel click, so
1897
+ // createNotificationOpenedHandler can skip its duplicate emit.
1898
+ if (Platform.OS === 'ios') {
1899
+ _lastCarouselClickHandledAt = Date.now();
1900
+ }
1901
+
1887
1902
  // Send click ACK
1888
1903
  if (messageId) {
1889
1904
  this.sendNotificationAck(messageId, 'clicked');
@@ -3815,16 +3830,53 @@ export function createNotificationOpenedHandler() {
3815
3830
  // For carousel notifications, the default route is in 'defaultRoute' field
3816
3831
  let route = notificationData.route || notificationData.defaultRoute;
3817
3832
 
3818
- // For carousel on iOS, check for per-item route from Content Extension
3833
+ // For carousel on iOS, Content Extension writes per-item click data to
3834
+ // App Group. Two handlers race to read it:
3835
+ // 1. checkPendingCarouselClick() — fires on AppState 'active'
3836
+ // 2. This handler — fires on Firebase onNotificationOpenedApp
3837
+ //
3838
+ // readTemplateClickData() is destructive (clears after read), so the
3839
+ // second reader gets null and falls back to defaultRoute — wrong.
3840
+ //
3841
+ // Fix: peek (non-destructive) to check if data exists. If it does,
3842
+ // defer to checkPendingCarouselClick which has exponential backoff
3843
+ // and is the canonical iOS carousel click handler.
3844
+ // If no data: either already consumed or simple tap (no Content Extension).
3819
3845
  if (isIOSCarousel) {
3820
3846
  try {
3821
- const clickData = await SharedCredentialsManager.readTemplateClickData();
3847
+ const clickData = await SharedCredentialsManager.peekTemplateClickData();
3822
3848
  if (clickData?.route) {
3823
- Logger.log('[SwanSDK] Carousel item route from Content Extension:', clickData.route);
3824
- route = clickData.route;
3849
+ // Content Extension click data exists checkPendingCarouselClick
3850
+ // will read it (with backoff) and emit NOTIFICATION_OPENED.
3851
+ // Send ACKs here too as safety net: if app is already foregrounded,
3852
+ // AppState won't transition to 'active' so checkPendingCarouselClick
3853
+ // may never fire.
3854
+ Logger.log('[SwanSDK] iOS carousel click data found, deferring to checkPendingCarouselClick');
3855
+ if (messageId) {
3856
+ await sdkInstance.sendNotificationAck(messageId, 'delivered');
3857
+ }
3858
+ if (messageId) {
3859
+ await sdkInstance.sendNotificationAck(messageId, 'clicked');
3860
+ }
3861
+ return;
3862
+ }
3863
+
3864
+ // No click data from peek. Either:
3865
+ // (a) checkPendingCarouselClick already consumed it
3866
+ // (b) Simple tap — no Content Extension interaction
3867
+ // Brief wait then check if (a).
3868
+ await new Promise(r => setTimeout(r, 300));
3869
+ if (Date.now() - _lastCarouselClickHandledAt < 5000) {
3870
+ Logger.log('[SwanSDK] iOS carousel click already handled by checkPendingCarouselClick');
3871
+ if (messageId) {
3872
+ await sdkInstance.sendNotificationAck(messageId, 'clicked');
3873
+ }
3874
+ return;
3825
3875
  }
3876
+ // Case (b): simple tap, proceed with defaultRoute below
3877
+ Logger.log('[SwanSDK] iOS carousel simple tap, using defaultRoute:', route);
3826
3878
  } catch (err) {
3827
- Logger.warn('[SwanSDK] Failed to read Content Extension click data:', err);
3879
+ Logger.warn('[SwanSDK] Failed to peek Content Extension click data:', err);
3828
3880
  }
3829
3881
  }
3830
3882
  const deepLinkPayload = {