react-native-radar 4.33.0 → 4.35.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 +1 -1
  2. package/android/src/main/java/com/radar/RadarModuleImpl.java +28 -0
  3. package/android/src/newarch/java/com/radar/RadarModule.kt +49 -2
  4. package/android/src/oldarch/java/com/radar/RadarModule.java +30 -2
  5. package/dist/@types/RadarNativeInterface.d.ts +5 -0
  6. package/dist/NativeRadar.d.ts +5 -0
  7. package/dist/helpers.d.ts +1 -0
  8. package/dist/helpers.js +3 -1
  9. package/dist/index.native.js +15 -0
  10. package/dist/ui/map.jsx +32 -4
  11. package/dist/version.d.ts +1 -1
  12. package/dist/version.js +1 -1
  13. package/ios/RNRadar.h +3 -2
  14. package/ios/RNRadar.mm +38 -2
  15. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Headers/Radar.h +3 -4
  16. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Headers/RadarSDK-Swift.h +1 -1
  17. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Headers/RadarSdkConfiguration.h +1 -0
  18. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Info.plist +0 -0
  19. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios.abi.json +1447 -88
  20. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +36 -2
  21. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  22. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios.swiftinterface +36 -2
  23. package/ios/RadarSDK.xcframework/ios-arm64/RadarSDK.framework/RadarSDK +0 -0
  24. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Headers/Radar.h +3 -4
  25. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Headers/RadarSDK-Swift.h +2 -2
  26. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Headers/RadarSdkConfiguration.h +1 -0
  27. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Info.plist +0 -0
  28. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +1447 -88
  29. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +36 -2
  30. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  31. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +36 -2
  32. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +1447 -88
  33. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +36 -2
  34. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  35. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/Modules/RadarSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +36 -2
  36. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/RadarSDK +0 -0
  37. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/_CodeSignature/CodeDirectory +0 -0
  38. package/ios/RadarSDK.xcframework/ios-arm64_x86_64-simulator/RadarSDK.framework/_CodeSignature/CodeResources +27 -27
  39. package/ios/RadarSDKMotion.xcframework/Info.plist +5 -5
  40. package/ios/RadarSDKMotion.xcframework/ios-arm64/RadarSDKMotion.framework/Info.plist +0 -0
  41. package/ios/RadarSDKMotion.xcframework/ios-arm64_x86_64-simulator/RadarSDKMotion.framework/Info.plist +0 -0
  42. package/ios/RadarSDKMotion.xcframework/ios-arm64_x86_64-simulator/RadarSDKMotion.framework/_CodeSignature/CodeDirectory +0 -0
  43. package/ios/RadarSDKMotion.xcframework/ios-arm64_x86_64-simulator/RadarSDKMotion.framework/_CodeSignature/CodeResources +1 -1
  44. package/package.json +1 -1
  45. package/src/@types/RadarNativeInterface.ts +5 -0
  46. package/src/NativeRadar.ts +5 -0
  47. package/src/helpers.js +5 -1
  48. package/src/index.native.ts +15 -0
  49. package/src/ui/map.jsx +32 -4
  50. package/src/version.ts +1 -1
@@ -1,4 +1,4 @@
1
- def radar_sdk_version = '3.32.3'
1
+ def radar_sdk_version = '3.34.0'
2
2
 
3
3
  buildscript {
4
4
  ext.getExtOrDefault = {name ->
@@ -165,6 +165,30 @@ public class RadarModuleImpl {
165
165
  promise.resolve(product);
166
166
  }
167
167
 
168
+ public void setUserLanguage(String userLanguage) {
169
+ Radar.setUserLanguage(userLanguage);
170
+ }
171
+
172
+ public void getUserLanguage(final Promise promise) {
173
+ if (promise == null) {
174
+ return;
175
+ }
176
+
177
+ promise.resolve(Radar.getUserLanguage());
178
+ }
179
+
180
+ public void isSharing(final Promise promise) {
181
+ if (promise == null) {
182
+ return;
183
+ }
184
+
185
+ promise.resolve(Radar.isSharing());
186
+ }
187
+
188
+ public void clearSharing() {
189
+ Radar.clearSharing();
190
+ }
191
+
168
192
 
169
193
  public void setAnonymousTrackingEnabled(boolean enabled) {
170
194
  Radar.setAnonymousTrackingEnabled(enabled);
@@ -1169,6 +1193,10 @@ public class RadarModuleImpl {
1169
1193
  Radar.ipGeocode(new Radar.RadarIpGeocodeCallback() {
1170
1194
 
1171
1195
  public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarAddress address, boolean proxy) {
1196
+ onComplete(status, address, proxy, null);
1197
+ }
1198
+
1199
+ public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarAddress address, boolean proxy, @Nullable Throwable throwable) {
1172
1200
  if (status == Radar.RadarStatus.SUCCESS) {
1173
1201
  try {
1174
1202
  WritableMap map = Arguments.createMap();
@@ -40,9 +40,12 @@ import org.json.JSONObject
40
40
  @ReactModule(name = RadarModule.NAME)
41
41
  class RadarModule(reactContext: ReactApplicationContext) :
42
42
  NativeRadarSpec(reactContext), PermissionListener {
43
+ @Volatile
44
+ private var isInvalidated = false
43
45
 
44
46
  private val radarReceiver = object : RadarReceiver() {
45
47
  override fun onEventsReceived(context: Context, events: Array<RadarEvent>, user: RadarUser?) {
48
+ if (isInvalidated) return
46
49
  val eventBlob = Arguments.createMap().apply {
47
50
  var eventsArray = Arguments.createArray()
48
51
  for (event in events) {
@@ -57,6 +60,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
57
60
  }
58
61
 
59
62
  override fun onLocationUpdated(context: Context, location: Location, user: RadarUser) {
63
+ if (isInvalidated) return
60
64
  val eventBlob = Arguments.createMap().apply {
61
65
  putString("location", Radar.jsonForLocation(location).toString())
62
66
  putString("user", user.toJson().toString())
@@ -65,6 +69,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
65
69
  }
66
70
 
67
71
  override fun onClientLocationUpdated(context: Context, location: Location, stopped: Boolean, source: Radar.RadarLocationSource) {
72
+ if (isInvalidated) return
68
73
  val eventBlob = Arguments.createMap().apply {
69
74
  putString("location", Radar.jsonForLocation(location).toString())
70
75
  putBoolean("stopped", stopped)
@@ -74,6 +79,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
74
79
  }
75
80
 
76
81
  override fun onError(context: Context, status: Radar.RadarStatus) {
82
+ if (isInvalidated) return
77
83
  val eventBlob = Arguments.createMap().apply {
78
84
  putString("status", status.toString())
79
85
  }
@@ -81,6 +87,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
81
87
  }
82
88
 
83
89
  override fun onLog(context: Context, message: String) {
90
+ if (isInvalidated) return
84
91
  val eventBlob = Arguments.createMap().apply {
85
92
  putString("message", message)
86
93
  }
@@ -90,6 +97,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
90
97
 
91
98
  private val radarInAppMessageReceiver = object : RadarInAppMessageReceiver {
92
99
  override fun onNewInAppMessage(message: RadarInAppMessage) {
100
+ if (isInvalidated) return
93
101
  try {
94
102
  val eventBlob = Arguments.createMap().apply {
95
103
  putMap("inAppMessage", RadarUtils.mapForJson(JSONObject(message.toJson())))
@@ -101,6 +109,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
101
109
  }
102
110
 
103
111
  override fun onInAppMessageDismissed(message: RadarInAppMessage) {
112
+ if (isInvalidated) return
104
113
  try {
105
114
  val eventBlob = Arguments.createMap().apply {
106
115
  putMap("inAppMessage", RadarUtils.mapForJson(JSONObject(message.toJson())))
@@ -112,6 +121,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
112
121
  }
113
122
 
114
123
  override fun onInAppMessageButtonClicked(message: RadarInAppMessage) {
124
+ if (isInvalidated) return
115
125
  try {
116
126
  val eventBlob = Arguments.createMap().apply {
117
127
  putMap("inAppMessage", RadarUtils.mapForJson(JSONObject(message.toJson())))
@@ -125,6 +135,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
125
135
 
126
136
  private val radarVerifiedReceiver = object : RadarVerifiedReceiver() {
127
137
  override fun onTokenUpdated(context: Context, token: RadarVerifiedLocationToken) {
138
+ if (isInvalidated) return
128
139
  val eventBlob = Arguments.createMap().apply {
129
140
  putString("token", token.toJson().toString())
130
141
  }
@@ -140,10 +151,26 @@ class RadarModule(reactContext: ReactApplicationContext) :
140
151
  return NAME
141
152
  }
142
153
 
154
+ override fun invalidate() {
155
+ isInvalidated = true
156
+
157
+ // Detach from the process-level Radar singleton so this stale module
158
+ // instance stops receiving callbacks after its JS runtime is gone.
159
+ Radar.setReceiver(null)
160
+
161
+ try {
162
+ Radar.setVerifiedReceiver(null)
163
+ } catch (e: Exception) {
164
+ Log.e(TAG, "Error detaching verified receiver", e)
165
+ }
166
+
167
+ super.invalidate()
168
+ }
169
+
143
170
  override fun initialize(publishableKey: String, fraud: Boolean, options: ReadableMap?): Unit {
144
171
  val editor = reactApplicationContext.getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit()
145
172
  editor.putString("x_platform_sdk_type", "ReactNative")
146
- editor.putString("x_platform_sdk_version", "4.33.0")
173
+ editor.putString("x_platform_sdk_version", "4.35.0")
147
174
  editor.apply()
148
175
 
149
176
  Radar.initialize(reactApplicationContext, publishableKey, radarReceiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud, null, radarInAppMessageReceiver, currentActivity)
@@ -155,7 +182,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
155
182
  override fun initializeWithAuthToken(authToken: String, fraud: Boolean, options: ReadableMap?): Unit {
156
183
  val editor = reactApplicationContext.getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit()
157
184
  editor.putString("x_platform_sdk_type", "ReactNative")
158
- editor.putString("x_platform_sdk_version", "4.33.0")
185
+ editor.putString("x_platform_sdk_version", "4.35.0")
159
186
  editor.apply()
160
187
 
161
188
  val initOptions = io.radar.sdk.RadarInitializeOptions.builder()
@@ -224,6 +251,22 @@ class RadarModule(reactContext: ReactApplicationContext) :
224
251
  radarModuleImpl.getProduct(promise)
225
252
  }
226
253
 
254
+ override fun setUserLanguage(language: String?): Unit {
255
+ radarModuleImpl.setUserLanguage(language)
256
+ }
257
+
258
+ override fun getUserLanguage(promise: Promise): Unit {
259
+ radarModuleImpl.getUserLanguage(promise)
260
+ }
261
+
262
+ override fun isSharing(promise: Promise): Unit {
263
+ radarModuleImpl.isSharing(promise)
264
+ }
265
+
266
+ override fun clearSharing(): Unit {
267
+ radarModuleImpl.clearSharing()
268
+ }
269
+
227
270
  override fun setAnonymousTrackingEnabled(enabled: Boolean): Unit {
228
271
  radarModuleImpl.setAnonymousTrackingEnabled(enabled)
229
272
  }
@@ -456,6 +499,10 @@ class RadarModule(reactContext: ReactApplicationContext) :
456
499
  radarModuleImpl.getPublishableKey(promise)
457
500
  }
458
501
 
502
+ override fun getMobileOrigin(promise: Promise): Unit {
503
+ promise.resolve(reactApplicationContext.packageName)
504
+ }
505
+
459
506
  override fun showInAppMessage(inAppMessage: ReadableMap): Unit {
460
507
  radarModuleImpl.showInAppMessage(inAppMessage)
461
508
  }
@@ -102,7 +102,7 @@ public class RadarModule extends ReactContextBaseJavaModule implements Permissio
102
102
  this.fraud = fraud;
103
103
  SharedPreferences.Editor editor = getReactApplicationContext().getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit();
104
104
  editor.putString("x_platform_sdk_type", "ReactNative");
105
- editor.putString("x_platform_sdk_version", "4.33.0");
105
+ editor.putString("x_platform_sdk_version", "4.35.0");
106
106
  editor.apply();
107
107
  Radar.initialize(getReactApplicationContext(), publishableKey, receiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud, null, inAppMessageReceiver, getCurrentActivity());
108
108
  if (fraud) {
@@ -115,7 +115,7 @@ public class RadarModule extends ReactContextBaseJavaModule implements Permissio
115
115
  this.fraud = fraud;
116
116
  SharedPreferences.Editor editor = getReactApplicationContext().getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit();
117
117
  editor.putString("x_platform_sdk_type", "ReactNative");
118
- editor.putString("x_platform_sdk_version", "4.33.0");
118
+ editor.putString("x_platform_sdk_version", "4.35.0");
119
119
  editor.apply();
120
120
 
121
121
  io.radar.sdk.RadarInitializeOptions.Builder builder = io.radar.sdk.RadarInitializeOptions.builder()
@@ -289,6 +289,26 @@ public class RadarModule extends ReactContextBaseJavaModule implements Permissio
289
289
  radarModuleImpl.getProduct(promise);
290
290
  }
291
291
 
292
+ @ReactMethod
293
+ public void setUserLanguage(String userLanguage) {
294
+ radarModuleImpl.setUserLanguage(userLanguage);
295
+ }
296
+
297
+ @ReactMethod
298
+ public void getUserLanguage(final Promise promise) {
299
+ radarModuleImpl.getUserLanguage(promise);
300
+ }
301
+
302
+ @ReactMethod
303
+ public void isSharing(final Promise promise) {
304
+ radarModuleImpl.isSharing(promise);
305
+ }
306
+
307
+ @ReactMethod
308
+ public void clearSharing() {
309
+ radarModuleImpl.clearSharing();
310
+ }
311
+
292
312
  @ReactMethod
293
313
  public void getVerifiedLocationToken(final Promise promise) {
294
314
  radarModuleImpl.getVerifiedLocationToken(promise);
@@ -474,6 +494,14 @@ public class RadarModule extends ReactContextBaseJavaModule implements Permissio
474
494
  radarModuleImpl.getPublishableKey(promise);
475
495
  }
476
496
 
497
+ @ReactMethod
498
+ public void getMobileOrigin(final Promise promise) {
499
+ if (promise == null) {
500
+ return;
501
+ }
502
+ promise.resolve(getReactApplicationContext().getPackageName());
503
+ }
504
+
477
505
  @ReactMethod
478
506
  public void showInAppMessage(ReadableMap inAppMessageMap) {
479
507
  radarModuleImpl.showInAppMessage(inAppMessageMap);
@@ -15,6 +15,10 @@ export interface RadarNativeInterface {
15
15
  removeTags: (tags: string[]) => void;
16
16
  setProduct(product: string): void;
17
17
  getProduct: () => Promise<string>;
18
+ setUserLanguage: (language: string | null) => void;
19
+ getUserLanguage: () => Promise<string | null>;
20
+ isSharing: () => Promise<boolean>;
21
+ clearSharing: () => void;
18
22
  setAnonymousTrackingEnabled: (enabled: boolean) => void;
19
23
  getPermissionsStatus: () => Promise<RadarPermissionsStatus>;
20
24
  requestPermissions: (background: boolean) => Promise<RadarPermissionsStatus>;
@@ -75,4 +79,5 @@ export interface RadarNativeInterface {
75
79
  onInAppMessageClicked: (callback: RadarInAppMessageClickedCallback | null) => void;
76
80
  getHost: () => Promise<string>;
77
81
  getPublishableKey: () => Promise<string>;
82
+ getMobileOrigin: () => Promise<string>;
78
83
  }
@@ -50,6 +50,10 @@ export interface Spec extends TurboModule {
50
50
  removeTags(tags: Array<string>): void;
51
51
  setProduct(product: string): void;
52
52
  getProduct(): Promise<string>;
53
+ setUserLanguage(language: string | null): void;
54
+ getUserLanguage(): Promise<string>;
55
+ isSharing(): Promise<boolean>;
56
+ clearSharing(): void;
53
57
  setAnonymousTrackingEnabled(enabled: boolean): void;
54
58
  getLocation(desiredAccuracy: string | null): Promise<Object>;
55
59
  trackVerified(trackVerifiedOptions: Object | null): Promise<Object>;
@@ -92,6 +96,7 @@ export interface Spec extends TurboModule {
92
96
  nativeSdkVersion(): Promise<string>;
93
97
  getHost(): Promise<string>;
94
98
  getPublishableKey(): Promise<string>;
99
+ getMobileOrigin(): Promise<string>;
95
100
  showInAppMessage(inAppMessage: Object): void;
96
101
  setPushNotificationToken(token: string): void;
97
102
  isInitialized(): Promise<boolean>;
package/dist/helpers.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export function getHost(): Promise<string>;
2
2
  export function getPublishableKey(): Promise<string>;
3
+ export function getMobileOrigin(): Promise<string>;
package/dist/helpers.js CHANGED
@@ -3,9 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPublishableKey = exports.getHost = void 0;
6
+ exports.getMobileOrigin = exports.getPublishableKey = exports.getHost = void 0;
7
7
  const index_native_1 = __importDefault(require("./index.native"));
8
8
  const getHost = () => (index_native_1.default.getHost());
9
9
  exports.getHost = getHost;
10
10
  const getPublishableKey = () => (index_native_1.default.getPublishableKey());
11
11
  exports.getPublishableKey = getPublishableKey;
12
+ const getMobileOrigin = () => (index_native_1.default.getMobileOrigin());
13
+ exports.getMobileOrigin = getMobileOrigin;
@@ -256,6 +256,18 @@ const Radar = {
256
256
  getProduct: function () {
257
257
  return NativeRadar.getProduct();
258
258
  },
259
+ setUserLanguage: function (language) {
260
+ return NativeRadar.setUserLanguage(language);
261
+ },
262
+ getUserLanguage: function () {
263
+ return NativeRadar.getUserLanguage();
264
+ },
265
+ isSharing: function () {
266
+ return NativeRadar.isSharing();
267
+ },
268
+ clearSharing: function () {
269
+ return NativeRadar.clearSharing();
270
+ },
259
271
  setAnonymousTrackingEnabled: function (enabled) {
260
272
  return NativeRadar.setAnonymousTrackingEnabled(enabled);
261
273
  },
@@ -388,6 +400,9 @@ const Radar = {
388
400
  getPublishableKey: function () {
389
401
  return NativeRadar.getPublishableKey();
390
402
  },
403
+ getMobileOrigin: function () {
404
+ return NativeRadar.getMobileOrigin();
405
+ },
391
406
  isInitialized: function () {
392
407
  return NativeRadar.isInitialized();
393
408
  },
package/dist/ui/map.jsx CHANGED
@@ -1,23 +1,26 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { View, Image } from 'react-native';
3
3
  import Radar from '../index.native';
4
- import { getHost, getPublishableKey } from '../helpers';
4
+ import { getHost, getPublishableKey, getMobileOrigin } from '../helpers';
5
5
  import styles from './styles';
6
6
 
7
7
  let MapLibreGL;
8
8
  let MapLibreMap;
9
9
  let GeoJSONSource;
10
10
  let Layer;
11
+ let TransformRequestManager;
11
12
  try {
12
13
  MapLibreGL = require('@maplibre/maplibre-react-native');
13
14
  MapLibreMap = MapLibreGL.Map;
14
15
  GeoJSONSource = MapLibreGL.GeoJSONSource;
15
16
  Layer = MapLibreGL.Layer;
17
+ TransformRequestManager = MapLibreGL.TransformRequestManager;
16
18
  } catch (e) {
17
19
  MapLibreGL = null;
18
20
  MapLibreMap = null;
19
21
  GeoJSONSource = null;
20
22
  Layer = null;
23
+ TransformRequestManager = null;
21
24
  }
22
25
 
23
26
  const DEFAULT_STYLE = 'radar-default-v1';
@@ -49,10 +52,35 @@ const RadarMap = ({ mapOptions, children }) => {
49
52
  const [userLocation, setUserLocation] = useState(null);
50
53
 
51
54
  useEffect(() => {
52
- createStyleURL(mapOptions?.mapStyle || DEFAULT_STYLE).then((result) => {
55
+ const setup = async () => {
56
+ const host = await getHost();
57
+
58
+ if (TransformRequestManager) {
59
+ try {
60
+ const mobileOrigin = await getMobileOrigin();
61
+ if (mobileOrigin) {
62
+ const mapHostPattern = `${host
63
+ .replace(/^https?:\/\//, '')
64
+ .replace(/\./g, '\\.')}/maps/`;
65
+ TransformRequestManager.addHeader({
66
+ id: 'radar-mobile-origin',
67
+ name: 'X-Radar-Mobile-Origin',
68
+ value: mobileOrigin,
69
+ match: mapHostPattern,
70
+ });
71
+ }
72
+ } catch (err) {
73
+ // eslint-disable-next-line no-console
74
+ console.warn(`Radar SDK: Failed to set mobile origin header: ${err}`);
75
+ }
76
+ }
77
+
78
+ const result = await createStyleURL(mapOptions?.mapStyle || DEFAULT_STYLE);
53
79
  setStyleURL(result);
54
- });
55
- }, [mapOptions]);
80
+ };
81
+
82
+ setup();
83
+ }, [mapOptions?.mapStyle]);
56
84
 
57
85
  useEffect(() => {
58
86
  Radar.getLocation().then((result) => {
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "4.33.0";
1
+ export declare const VERSION = "4.35.0";
package/dist/version.js CHANGED
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // This file contains the version of the react-native-radar package
5
5
  // It should be updated to match the version in package.json
6
- exports.VERSION = '4.33.0';
6
+ exports.VERSION = '4.35.0';
package/ios/RNRadar.h CHANGED
@@ -6,11 +6,12 @@
6
6
 
7
7
  #import <RadarSDK/RadarSDK.h>
8
8
  #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTInvalidating.h>
9
10
 
10
11
  #ifdef RCT_NEW_ARCH_ENABLED
11
- @interface RNRadar : NativeRadarSpecBase <NativeRadarSpec, RadarDelegate, CLLocationManagerDelegate, RadarVerifiedDelegate, RadarInAppMessageProtocol>
12
+ @interface RNRadar : NativeRadarSpecBase <NativeRadarSpec, RadarDelegate, CLLocationManagerDelegate, RadarVerifiedDelegate, RadarInAppMessageProtocol, RCTInvalidating>
12
13
  #else
13
- @interface RNRadar : RCTEventEmitter <RCTBridgeModule, RadarDelegate, CLLocationManagerDelegate, RadarVerifiedDelegate, RadarInAppMessageProtocol>
14
+ @interface RNRadar : RCTEventEmitter <RCTBridgeModule, RadarDelegate, CLLocationManagerDelegate, RadarVerifiedDelegate, RadarInAppMessageProtocol, RCTInvalidating>
14
15
  #endif
15
16
 
16
17
  @end
package/ios/RNRadar.mm CHANGED
@@ -55,6 +55,22 @@ RCT_EXPORT_MODULE()
55
55
  hasListeners = NO;
56
56
  }
57
57
 
58
+ - (void)invalidate {
59
+ #ifdef RCT_NEW_ARCH_ENABLED
60
+ jsEventEmitterReady = NO;
61
+ #endif
62
+ hasListeners = NO;
63
+
64
+ // Detach from the process-level Radar singleton so a stale module
65
+ // instance doesn't continue to receive events.
66
+ [Radar setDelegate:nil];
67
+ [Radar setVerifiedDelegate:nil];
68
+ [Radar setInAppMessageDelegate:nil];
69
+
70
+ locationManager.delegate = nil;
71
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
72
+ }
73
+
58
74
  #ifdef RCT_NEW_ARCH_ENABLED
59
75
  - (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper {
60
76
  [super setEventEmitterCallback:eventEmitterCallbackWrapper];
@@ -217,7 +233,7 @@ RCT_EXPORT_MODULE()
217
233
  RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey fraud:(BOOL)fraud options:(NSDictionary *)options) {
218
234
  _publishableKey = publishableKey;
219
235
  [[NSUserDefaults standardUserDefaults] setObject:@"ReactNative" forKey:@"radar-xPlatformSDKType"];
220
- [[NSUserDefaults standardUserDefaults] setObject:@"4.33.0" forKey:@"radar-xPlatformSDKVersion"];
236
+ [[NSUserDefaults standardUserDefaults] setObject:@"4.35.0" forKey:@"radar-xPlatformSDKVersion"];
221
237
 
222
238
  RadarInitializeOptions *radarOptions = [[RadarInitializeOptions alloc] init];
223
239
  if (options != nil) {
@@ -240,7 +256,7 @@ RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey fraud:(BOOL)fraud option
240
256
  RCT_EXPORT_METHOD(initializeWithAuthToken:(NSString *)authToken fraud:(BOOL)fraud options:(NSDictionary *)options) {
241
257
  _publishableKey = nil;
242
258
  [[NSUserDefaults standardUserDefaults] setObject:@"ReactNative" forKey:@"radar-xPlatformSDKType"];
243
- [[NSUserDefaults standardUserDefaults] setObject:@"4.33.0" forKey:@"radar-xPlatformSDKVersion"];
259
+ [[NSUserDefaults standardUserDefaults] setObject:@"4.35.0" forKey:@"radar-xPlatformSDKVersion"];
244
260
  RadarInitializeOptions *radarOptions = [[RadarInitializeOptions alloc] init];
245
261
  if (options != nil) {
246
262
  id silentPushValue = options[@"silentPush"];
@@ -323,6 +339,22 @@ RCT_EXPORT_METHOD(getProduct:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseR
323
339
  resolve([Radar getProduct]);
324
340
  }
325
341
 
342
+ RCT_EXPORT_METHOD(setUserLanguage:(NSString *)userLanguage) {
343
+ [Radar setUserLanguage:userLanguage];
344
+ }
345
+
346
+ RCT_EXPORT_METHOD(getUserLanguage:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
347
+ resolve([Radar getUserLanguage]);
348
+ }
349
+
350
+ RCT_EXPORT_METHOD(isSharing:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
351
+ resolve(@([Radar isSharing]));
352
+ }
353
+
354
+ RCT_EXPORT_METHOD(clearSharing) {
355
+ [Radar clearSharing];
356
+ }
357
+
326
358
  RCT_EXPORT_METHOD(setAnonymousTrackingEnabled:(BOOL)enabled) {
327
359
  [Radar setAnonymousTrackingEnabled:enabled];
328
360
  }
@@ -335,6 +367,10 @@ RCT_EXPORT_METHOD(getPublishableKey:(RCTPromiseResolveBlock)resolve reject:(RCTP
335
367
  resolve(_publishableKey);
336
368
  }
337
369
 
370
+ RCT_EXPORT_METHOD(getMobileOrigin:(RCTPromiseResolveBlock) resolve reject:(RCTPromiseRejectBlock)reject) {
371
+ resolve([[NSBundle mainBundle] bundleIdentifier]);
372
+ }
373
+
338
374
  RCT_EXPORT_METHOD(getPermissionsStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
339
375
  CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
340
376
  NSString *statusStr;
@@ -1323,8 +1323,7 @@ typedef void (^_Nonnull RadarIndoorsScanCompletionHandler)(NSString *_Nullable r
1323
1323
 
1324
1324
  @see https://radar.com/documentation/api#ip-geocode
1325
1325
  */
1326
- + (void)ipGeocodeWithCompletionHandler:(RadarIPGeocodeCompletionHandler)completionHandler
1327
- __attribute__((deprecated("Use ipGeocodeWithErrorCompletionHandler: to also receive the underlying NSError on network/parse errors.")));
1326
+ + (void)ipGeocodeWithCompletionHandler:(RadarIPGeocodeCompletionHandler)completionHandler NS_SWIFT_NAME(ipGeocode(completionHandler:));
1328
1327
 
1329
1328
  /**
1330
1329
  Geocodes the device's current IP address, converting IP address to partial address. The completion handler also receives the underlying NSError when the failure originated from a caught network, parse, or exception error — forward it to an error collector (Sentry, Crashlytics, etc.) to capture diagnostics.
@@ -1333,8 +1332,8 @@ typedef void (^_Nonnull RadarIndoorsScanCompletionHandler)(NSString *_Nullable r
1333
1332
 
1334
1333
  @see https://radar.com/documentation/api#ip-geocode
1335
1334
  */
1336
- + (void)ipGeocodeWithErrorCompletionHandler:(RadarIPGeocodeWithErrorCompletionHandler)completionHandler NS_SWIFT_NAME(ipGeocode(completionHandler:));
1337
-
1335
+ + (void)ipGeocodeWithErrorCompletionHandler:(RadarIPGeocodeWithErrorCompletionHandler)completionHandler
1336
+ NS_SWIFT_NAME(ipGeocode(completionHandler:)) NS_SWIFT_DISABLE_ASYNC;
1338
1337
 
1339
1338
  /**
1340
1339
  Validates an address, attaching a verification status, property type, and ZIP+4.
@@ -1,6 +1,6 @@
1
1
  #if 0
2
2
  #elif defined(__arm64__) && __arm64__
3
- // Generated by Apple Swift version 6.3.2 (swiftlang-6.3.2.1.108 clang-2100.1.1.101)
3
+ // Generated by Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101)
4
4
  #ifndef RADARSDK_SWIFT_H
5
5
  #define RADARSDK_SWIFT_H
6
6
  #pragma clang diagnostic push
@@ -42,6 +42,7 @@ NS_ASSUME_NONNULL_BEGIN
42
42
  - (NSArray<RadarRemoteTrackingOptions *> *_Nullable)remoteTrackingOptions;
43
43
  - (instancetype)initWithDict:(NSDictionary *_Nullable)dict;
44
44
  - (NSDictionary *)dictionaryValue;
45
+ + (RadarSdkConfiguration *_Nullable)current;
45
46
  @end
46
47
 
47
48
  /**