@mixpanel/react-native-session-replay 1.2.0 → 1.3.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/MixpanelReactNativeSessionReplay.podspec +1 -1
- package/README.md +2 -0
- package/android/build.gradle +1 -1
- package/lib/module/index.js +177 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +102 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +2 -24
- package/src/index.tsx +194 -3
- package/android/app/build/generated/source/codegen/java/com/facebook/fbreact/specs/NativeMixpanelReactNativeSessionReplaySpec.java +0 -62
- package/android/app/build/generated/source/codegen/jni/CMakeLists.txt +0 -36
- package/android/app/build/generated/source/codegen/jni/MixpanelReactNativeSessionReplaySpec-generated.cpp +0 -68
- package/android/app/build/generated/source/codegen/jni/MixpanelReactNativeSessionReplaySpec.h +0 -31
- package/android/app/build/generated/source/codegen/jni/react/renderer/components/MixpanelReactNativeSessionReplaySpec/MixpanelReactNativeSessionReplaySpecJSI-generated.cpp +0 -67
- package/android/app/build/generated/source/codegen/jni/react/renderer/components/MixpanelReactNativeSessionReplaySpec/MixpanelReactNativeSessionReplaySpecJSI.h +0 -125
- package/android/generated/java/com/mpsessionreplay/NativeMpSessionReplaySpec.java +0 -49
- package/android/generated/jni/CMakeLists.txt +0 -36
- package/android/generated/jni/RNMpSessionReplaySpec-generated.cpp +0 -50
- package/android/generated/jni/RNMpSessionReplaySpec.h +0 -31
- package/android/generated/jni/react/renderer/components/RNMpSessionReplaySpec/RNMpSessionReplaySpecJSI-generated.cpp +0 -51
- package/android/generated/jni/react/renderer/components/RNMpSessionReplaySpec/RNMpSessionReplaySpecJSI.h +0 -98
|
@@ -15,7 +15,7 @@ Pod::Spec.new do |s|
|
|
|
15
15
|
|
|
16
16
|
s.source_files = "ios/**/*.{h,m,mm,cpp,swift}"
|
|
17
17
|
s.private_header_files = "ios/**/*.h"
|
|
18
|
-
s.dependency 'MixpanelSessionReplay', '1.
|
|
18
|
+
s.dependency 'MixpanelSessionReplay', '1.5.1'
|
|
19
19
|
# Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
|
|
20
20
|
# See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
|
|
21
21
|
if respond_to?(:install_modules_dependencies, true)
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Mixpanel React Native Session Replay
|
|
2
2
|
|
|
3
|
+
##### _June 10, 2026_ - [v1.3.0](https://github.com/mixpanel/mixpanel-react-native-session-replay/releases/tag/v1.3.0)
|
|
4
|
+
|
|
3
5
|
Official React Native turbo module for Mixpanel Session Replay. Capture and analyze user interactions in your mobile app by bridging Mixpanel's native iOS and Android session replay SDKs to React Native.
|
|
4
6
|
|
|
5
7
|
## Features
|
package/android/build.gradle
CHANGED
|
@@ -79,7 +79,7 @@ dependencies {
|
|
|
79
79
|
implementation "com.mixpanel.android:mixpanel-android:8.0.2"
|
|
80
80
|
|
|
81
81
|
// Mixpanel Android Session Replay SDK dependency
|
|
82
|
-
implementation "com.mixpanel.android:mixpanel-android-session-replay:1.
|
|
82
|
+
implementation "com.mixpanel.android:mixpanel-android-session-replay:1.4.0"
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
react {
|
package/lib/module/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Platform } from 'react-native';
|
|
3
|
+
import { Platform, processColor } from 'react-native';
|
|
4
4
|
import MixpanelReactNativeSessionReplay from "./NativeMixpanelReactNativeSessionReplay.js";
|
|
5
5
|
export let MPSessionReplayMask = /*#__PURE__*/function (MPSessionReplayMask) {
|
|
6
6
|
MPSessionReplayMask["Text"] = "text";
|
|
@@ -15,6 +15,139 @@ export let MPSessionReplayRemoteSettingsMode = /*#__PURE__*/function (MPSessionR
|
|
|
15
15
|
MPSessionReplayRemoteSettingsMode["Fallback"] = "fallback";
|
|
16
16
|
return MPSessionReplayRemoteSettingsMode;
|
|
17
17
|
}({});
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Base URLs for Mixpanel's managed data residency regions.
|
|
21
|
+
*
|
|
22
|
+
* Pass one of these constants to {@link MPSessionReplayConfig.serverURL} to route
|
|
23
|
+
* session replay traffic to the matching region, or pass any other `https://` URL
|
|
24
|
+
* to send traffic through a custom endpoint (for example, a corporate proxy).
|
|
25
|
+
*/
|
|
26
|
+
export const MPDataResidency = {
|
|
27
|
+
/** US data residency (default): `https://api.mixpanel.com`. */
|
|
28
|
+
US: 'https://api.mixpanel.com',
|
|
29
|
+
/** EU data residency: `https://api-eu.mixpanel.com`. */
|
|
30
|
+
EU: 'https://api-eu.mixpanel.com',
|
|
31
|
+
/** India data residency: `https://api-in.mixpanel.com`. */
|
|
32
|
+
IN: 'https://api-in.mixpanel.com'
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Color configuration for the on-device debug mask overlay.
|
|
37
|
+
*
|
|
38
|
+
* Each color accepts any React Native [`ColorValue`](https://reactnative.dev/docs/colors)
|
|
39
|
+
* — for example `'red'`, `'#FF0000'`, `'rgba(255, 0, 0, 0.5)'`, or `0xFFFF0000`.
|
|
40
|
+
* Setting any of `maskColor`, `autoMaskColor`, or `unmaskColor` to `null` hides that
|
|
41
|
+
* category from the overlay.
|
|
42
|
+
*
|
|
43
|
+
* The overlay only renders when `__DEV__` is `true` — `debugOptions` is ignored in
|
|
44
|
+
* production bundles regardless of what is passed.
|
|
45
|
+
*/
|
|
46
|
+
export class MPDebugOverlayColors {
|
|
47
|
+
/**
|
|
48
|
+
* Color used to draw regions that are explicitly masked (sensitive views / text input).
|
|
49
|
+
* Set to `null` to hide masked regions from the overlay.
|
|
50
|
+
*
|
|
51
|
+
* - **Default:** `'red'`
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Color used to draw regions that are auto-masked (text, images, web views, maps).
|
|
56
|
+
* Set to `null` to hide auto-masked regions from the overlay.
|
|
57
|
+
*
|
|
58
|
+
* - **Default:** `'orange'`
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Color used to draw regions explicitly excluded from masking (safe views).
|
|
63
|
+
* Set to `null` to hide unmask regions from the overlay.
|
|
64
|
+
*
|
|
65
|
+
* - **Default:** `'green'`
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Opacity of the overlay, from `0.0` (fully transparent) to `1.0` (fully opaque).
|
|
70
|
+
*
|
|
71
|
+
* - **Default:** `0.5`
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
constructor({
|
|
75
|
+
maskColor = 'red',
|
|
76
|
+
autoMaskColor = 'orange',
|
|
77
|
+
unmaskColor = 'green',
|
|
78
|
+
alpha = 0.5
|
|
79
|
+
} = {}) {
|
|
80
|
+
this.maskColor = maskColor;
|
|
81
|
+
this.autoMaskColor = autoMaskColor;
|
|
82
|
+
this.unmaskColor = unmaskColor;
|
|
83
|
+
this.alpha = alpha;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Configuration for Session Replay debug features.
|
|
89
|
+
*
|
|
90
|
+
* When `overlayColors` is non-null, the SDK renders a visual overlay on top of the app
|
|
91
|
+
* showing which regions are masked, auto-masked, or explicitly unmasked. Set
|
|
92
|
+
* `overlayColors` to `null` to disable the overlay while keeping `MPDebugOptions`
|
|
93
|
+
* available for future debug features.
|
|
94
|
+
*
|
|
95
|
+
* Debug features only render when `__DEV__` is `true`. In production bundles
|
|
96
|
+
* (`__DEV__ === false`), `debugOptions` is dropped before reaching the native SDK so
|
|
97
|
+
* the overlay never ships to end users.
|
|
98
|
+
*/
|
|
99
|
+
export class MPDebugOptions {
|
|
100
|
+
/**
|
|
101
|
+
* Color configuration for the debug mask overlay. When `null`, the overlay is disabled.
|
|
102
|
+
*
|
|
103
|
+
* - **Default:** `new MPDebugOverlayColors()` (overlay enabled with default colors)
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
constructor({
|
|
107
|
+
overlayColors = new MPDebugOverlayColors()
|
|
108
|
+
} = {}) {
|
|
109
|
+
this.overlayColors = overlayColors;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function processOverlayColor(color) {
|
|
113
|
+
if (color === null || color === undefined) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
// `processColor` returns the ARGB integer in the form expected by each native platform:
|
|
117
|
+
// a signed 32-bit Int on Android (kotlinx.serialization Int) and an unsigned 32-bit
|
|
118
|
+
// value on iOS (Swift Int is 64-bit, so it decodes without overflow). Invalid color
|
|
119
|
+
// strings yield `undefined` — treat those the same as `null` (hide the category).
|
|
120
|
+
const processed = processColor(color);
|
|
121
|
+
if (typeof processed !== 'number') {
|
|
122
|
+
console.warn(`MixpanelSessionReplay: invalid debug overlay color ${JSON.stringify(color)} — that category will be hidden from the overlay.`);
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return processed;
|
|
126
|
+
}
|
|
127
|
+
function serializeDebugOptions(debugOptions) {
|
|
128
|
+
if (debugOptions === null) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
// Hard-gate debug features on `__DEV__` so they are never sent to native in
|
|
132
|
+
// production bundles. The Android SDK already restricts the overlay to debuggable
|
|
133
|
+
// builds, but the iOS SDK ships as a release XCFramework and would otherwise
|
|
134
|
+
// render the overlay in production if a customer forgot to gate the call site.
|
|
135
|
+
if (!__DEV__) {
|
|
136
|
+
if (debugOptions.overlayColors !== null) {
|
|
137
|
+
console.warn('MixpanelSessionReplay: `debugOptions` is ignored in production builds (__DEV__ is false).');
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
const overlayColors = debugOptions.overlayColors;
|
|
142
|
+
return {
|
|
143
|
+
overlayColors: overlayColors === null ? null : {
|
|
144
|
+
maskColor: processOverlayColor(overlayColors.maskColor),
|
|
145
|
+
autoMaskColor: processOverlayColor(overlayColors.autoMaskColor),
|
|
146
|
+
unmaskColor: processOverlayColor(overlayColors.unmaskColor),
|
|
147
|
+
alpha: overlayColors.alpha
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
18
151
|
export class MPSessionReplayConfig {
|
|
19
152
|
/**
|
|
20
153
|
* Determines whether replay events will only be flushed to the server when the device has a WiFi connection.
|
|
@@ -88,6 +221,36 @@ export class MPSessionReplayConfig {
|
|
|
88
221
|
* - **Default:** `disabled`
|
|
89
222
|
*/
|
|
90
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Enables on-device debug features such as the visual mask overlay.
|
|
226
|
+
*
|
|
227
|
+
* When non-null, the SDK renders a colored overlay on top of the app showing which
|
|
228
|
+
* regions are masked, auto-masked, or explicitly unmasked — useful for verifying
|
|
229
|
+
* masking coverage during development. Pass `new MPDebugOptions()` to enable the
|
|
230
|
+
* overlay with default colors, or customize via `MPDebugOverlayColors`.
|
|
231
|
+
*
|
|
232
|
+
* `debugOptions` is only honored when `__DEV__` is `true`. In production bundles
|
|
233
|
+
* it is dropped before reaching the native SDK, so it is safe to leave the option
|
|
234
|
+
* set unconditionally — the overlay will not render for end users.
|
|
235
|
+
*
|
|
236
|
+
* - **Default:** `null` (disabled)
|
|
237
|
+
*/
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Base URL used to send session replay data to Mixpanel.
|
|
241
|
+
*
|
|
242
|
+
* Use one of the {@link MPDataResidency} constants to target a managed region
|
|
243
|
+
* (`MPDataResidency.US`, `MPDataResidency.EU`, `MPDataResidency.IN`), or pass any
|
|
244
|
+
* fully-qualified `https://` URL to route traffic through a custom endpoint such
|
|
245
|
+
* as a corporate proxy.
|
|
246
|
+
*
|
|
247
|
+
* The URL must use `https://`. The underlying native SDKs validate the URL
|
|
248
|
+
* during `initialize` — invalid URLs cause `initialize` to reject with an error
|
|
249
|
+
* on both platforms.
|
|
250
|
+
*
|
|
251
|
+
* - **Default:** `MPDataResidency.US` (`https://api.mixpanel.com`)
|
|
252
|
+
*/
|
|
253
|
+
|
|
91
254
|
constructor({
|
|
92
255
|
wifiOnly = true,
|
|
93
256
|
autoStartRecording = true,
|
|
@@ -95,7 +258,9 @@ export class MPSessionReplayConfig {
|
|
|
95
258
|
autoMaskedViews = [MPSessionReplayMask.Image, MPSessionReplayMask.Text, MPSessionReplayMask.Web, MPSessionReplayMask.Map],
|
|
96
259
|
flushInterval = 10,
|
|
97
260
|
enableLogging = false,
|
|
98
|
-
remoteSettingsMode = MPSessionReplayRemoteSettingsMode.Disabled
|
|
261
|
+
remoteSettingsMode = MPSessionReplayRemoteSettingsMode.Disabled,
|
|
262
|
+
debugOptions = null,
|
|
263
|
+
serverURL = MPDataResidency.US
|
|
99
264
|
} = {}) {
|
|
100
265
|
this.wifiOnly = wifiOnly;
|
|
101
266
|
this.autoStartRecording = autoStartRecording;
|
|
@@ -104,6 +269,8 @@ export class MPSessionReplayConfig {
|
|
|
104
269
|
this.flushInterval = flushInterval;
|
|
105
270
|
this.enableLogging = enableLogging;
|
|
106
271
|
this.remoteSettingsMode = remoteSettingsMode;
|
|
272
|
+
this.debugOptions = debugOptions;
|
|
273
|
+
this.serverURL = serverURL;
|
|
107
274
|
}
|
|
108
275
|
transformMaskValueForPlatform(value) {
|
|
109
276
|
if (Platform.OS === 'android') {
|
|
@@ -125,10 +292,16 @@ export class MPSessionReplayConfig {
|
|
|
125
292
|
flushInterval: this.flushInterval,
|
|
126
293
|
enableLogging: this.enableLogging,
|
|
127
294
|
remoteSettingsMode: transformedRemoteSettingsMode,
|
|
128
|
-
|
|
295
|
+
debugOptions: serializeDebugOptions(this.debugOptions),
|
|
296
|
+
// The native SDKs spell the server URL field differently — Android's
|
|
297
|
+
// kotlinx.serialization expects `serverUrl`, iOS's Codable expects `serverURL`.
|
|
129
298
|
...Platform.select({
|
|
130
299
|
ios: {
|
|
131
|
-
enableSessionReplayOniOS26AndLater: true
|
|
300
|
+
enableSessionReplayOniOS26AndLater: true,
|
|
301
|
+
serverURL: this.serverURL
|
|
302
|
+
},
|
|
303
|
+
android: {
|
|
304
|
+
serverUrl: this.serverURL
|
|
132
305
|
},
|
|
133
306
|
default: {}
|
|
134
307
|
})
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","MixpanelReactNativeSessionReplay","MPSessionReplayMask","MPSessionReplayRemoteSettingsMode","
|
|
1
|
+
{"version":3,"names":["Platform","processColor","MixpanelReactNativeSessionReplay","MPSessionReplayMask","MPSessionReplayRemoteSettingsMode","MPDataResidency","US","EU","IN","MPDebugOverlayColors","constructor","maskColor","autoMaskColor","unmaskColor","alpha","MPDebugOptions","overlayColors","processOverlayColor","color","undefined","processed","console","warn","JSON","stringify","serializeDebugOptions","debugOptions","__DEV__","MPSessionReplayConfig","wifiOnly","autoStartRecording","recordingSessionsPercent","autoMaskedViews","Image","Text","Web","Map","flushInterval","enableLogging","remoteSettingsMode","Disabled","serverURL","transformMaskValueForPlatform","value","OS","charAt","toUpperCase","slice","toJSON","transformedAutoMaskedViews","filter","mask","map","transformedRemoteSettingsMode","config","select","ios","enableSessionReplayOniOS26AndLater","android","serverUrl","default","initialize","token","distinctId","Error","json","startRecording","stopRecording","isRecording","identify","getReplayId","flush","MPSessionReplayView","MPSessionReplay"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,YAAY,QAAyB,cAAc;AACtE,OAAOC,gCAAgC,MAAM,6CAA0C;AAEvF,WAAYC,mBAAmB,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA;AAO/B,WAAYC,iCAAiC,0BAAjCA,iCAAiC;EAAjCA,iCAAiC;EAAjCA,iCAAiC;EAAjCA,iCAAiC;EAAA,OAAjCA,iCAAiC;AAAA;;AAM7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAA6D,GAAG;EAC3E;EACAC,EAAE,EAAE,0BAA0B;EAC9B;EACAC,EAAE,EAAE,6BAA6B;EACjC;EACAC,EAAE,EAAE;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,CAAC;EAChC;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;;EAGEC,WAAWA,CAAC;IACVC,SAAS,GAAG,KAAK;IACjBC,aAAa,GAAG,QAAQ;IACxBC,WAAW,GAAG,OAAO;IACrBC,KAAK,GAAG;EACqB,CAAC,GAAG,CAAC,CAAC,EAAE;IACrC,IAAI,CAACH,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,CAAC;EAC1B;AACF;AACA;AACA;AACA;;EAGEL,WAAWA,CAAC;IACVM,aAAa,GAAG,IAAIP,oBAAoB,CAAC;EAClB,CAAC,GAAG,CAAC,CAAC,EAAE;IAC/B,IAAI,CAACO,aAAa,GAAGA,aAAa;EACpC;AACF;AAEA,SAASC,mBAAmBA,CAACC,KAAwB,EAAiB;EACpE,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKC,SAAS,EAAE;IACzC,OAAO,IAAI;EACb;EACA;EACA;EACA;EACA;EACA,MAAMC,SAAS,GAAGnB,YAAY,CAACiB,KAAK,CAAC;EACrC,IAAI,OAAOE,SAAS,KAAK,QAAQ,EAAE;IACjCC,OAAO,CAACC,IAAI,CACV,sDAAsDC,IAAI,CAACC,SAAS,CAACN,KAAK,CAAC,mDAC7E,CAAC;IACD,OAAO,IAAI;EACb;EACA,OAAOE,SAAS;AAClB;AAEA,SAASK,qBAAqBA,CAC5BC,YAAmC,EACpB;EACf,IAAIA,YAAY,KAAK,IAAI,EAAE;IACzB,OAAO,IAAI;EACb;EACA;EACA;EACA;EACA;EACA,IAAI,CAACC,OAAO,EAAE;IACZ,IAAID,YAAY,CAACV,aAAa,KAAK,IAAI,EAAE;MACvCK,OAAO,CAACC,IAAI,CACV,2FACF,CAAC;IACH;IACA,OAAO,IAAI;EACb;EACA,MAAMN,aAAa,GAAGU,YAAY,CAACV,aAAa;EAChD,OAAO;IACLA,aAAa,EACXA,aAAa,KAAK,IAAI,GAClB,IAAI,GACJ;MACEL,SAAS,EAAEM,mBAAmB,CAACD,aAAa,CAACL,SAAS,CAAC;MACvDC,aAAa,EAAEK,mBAAmB,CAACD,aAAa,CAACJ,aAAa,CAAC;MAC/DC,WAAW,EAAEI,mBAAmB,CAACD,aAAa,CAACH,WAAW,CAAC;MAC3DC,KAAK,EAAEE,aAAa,CAACF;IACvB;EACR,CAAC;AACH;AAEA,OAAO,MAAMc,qBAAqB,CAAC;EACjC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAG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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ColorValue } from 'react-native';
|
|
1
2
|
export declare enum MPSessionReplayMask {
|
|
2
3
|
Text = "text",
|
|
3
4
|
Web = "web",
|
|
@@ -9,6 +10,76 @@ export declare enum MPSessionReplayRemoteSettingsMode {
|
|
|
9
10
|
Strict = "strict",
|
|
10
11
|
Fallback = "fallback"
|
|
11
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Base URLs for Mixpanel's managed data residency regions.
|
|
15
|
+
*
|
|
16
|
+
* Pass one of these constants to {@link MPSessionReplayConfig.serverURL} to route
|
|
17
|
+
* session replay traffic to the matching region, or pass any other `https://` URL
|
|
18
|
+
* to send traffic through a custom endpoint (for example, a corporate proxy).
|
|
19
|
+
*/
|
|
20
|
+
export declare const MPDataResidency: Readonly<Record<'US' | 'EU' | 'IN', string>>;
|
|
21
|
+
/**
|
|
22
|
+
* Color configuration for the on-device debug mask overlay.
|
|
23
|
+
*
|
|
24
|
+
* Each color accepts any React Native [`ColorValue`](https://reactnative.dev/docs/colors)
|
|
25
|
+
* — for example `'red'`, `'#FF0000'`, `'rgba(255, 0, 0, 0.5)'`, or `0xFFFF0000`.
|
|
26
|
+
* Setting any of `maskColor`, `autoMaskColor`, or `unmaskColor` to `null` hides that
|
|
27
|
+
* category from the overlay.
|
|
28
|
+
*
|
|
29
|
+
* The overlay only renders when `__DEV__` is `true` — `debugOptions` is ignored in
|
|
30
|
+
* production bundles regardless of what is passed.
|
|
31
|
+
*/
|
|
32
|
+
export declare class MPDebugOverlayColors {
|
|
33
|
+
/**
|
|
34
|
+
* Color used to draw regions that are explicitly masked (sensitive views / text input).
|
|
35
|
+
* Set to `null` to hide masked regions from the overlay.
|
|
36
|
+
*
|
|
37
|
+
* - **Default:** `'red'`
|
|
38
|
+
*/
|
|
39
|
+
maskColor: ColorValue | null;
|
|
40
|
+
/**
|
|
41
|
+
* Color used to draw regions that are auto-masked (text, images, web views, maps).
|
|
42
|
+
* Set to `null` to hide auto-masked regions from the overlay.
|
|
43
|
+
*
|
|
44
|
+
* - **Default:** `'orange'`
|
|
45
|
+
*/
|
|
46
|
+
autoMaskColor: ColorValue | null;
|
|
47
|
+
/**
|
|
48
|
+
* Color used to draw regions explicitly excluded from masking (safe views).
|
|
49
|
+
* Set to `null` to hide unmask regions from the overlay.
|
|
50
|
+
*
|
|
51
|
+
* - **Default:** `'green'`
|
|
52
|
+
*/
|
|
53
|
+
unmaskColor: ColorValue | null;
|
|
54
|
+
/**
|
|
55
|
+
* Opacity of the overlay, from `0.0` (fully transparent) to `1.0` (fully opaque).
|
|
56
|
+
*
|
|
57
|
+
* - **Default:** `0.5`
|
|
58
|
+
*/
|
|
59
|
+
alpha: number;
|
|
60
|
+
constructor({ maskColor, autoMaskColor, unmaskColor, alpha, }?: Partial<MPDebugOverlayColors>);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Configuration for Session Replay debug features.
|
|
64
|
+
*
|
|
65
|
+
* When `overlayColors` is non-null, the SDK renders a visual overlay on top of the app
|
|
66
|
+
* showing which regions are masked, auto-masked, or explicitly unmasked. Set
|
|
67
|
+
* `overlayColors` to `null` to disable the overlay while keeping `MPDebugOptions`
|
|
68
|
+
* available for future debug features.
|
|
69
|
+
*
|
|
70
|
+
* Debug features only render when `__DEV__` is `true`. In production bundles
|
|
71
|
+
* (`__DEV__ === false`), `debugOptions` is dropped before reaching the native SDK so
|
|
72
|
+
* the overlay never ships to end users.
|
|
73
|
+
*/
|
|
74
|
+
export declare class MPDebugOptions {
|
|
75
|
+
/**
|
|
76
|
+
* Color configuration for the debug mask overlay. When `null`, the overlay is disabled.
|
|
77
|
+
*
|
|
78
|
+
* - **Default:** `new MPDebugOverlayColors()` (overlay enabled with default colors)
|
|
79
|
+
*/
|
|
80
|
+
overlayColors: MPDebugOverlayColors | null;
|
|
81
|
+
constructor({ overlayColors, }?: Partial<MPDebugOptions>);
|
|
82
|
+
}
|
|
12
83
|
export declare class MPSessionReplayConfig {
|
|
13
84
|
/**
|
|
14
85
|
* Determines whether replay events will only be flushed to the server when the device has a WiFi connection.
|
|
@@ -82,7 +153,37 @@ export declare class MPSessionReplayConfig {
|
|
|
82
153
|
* - **Default:** `disabled`
|
|
83
154
|
*/
|
|
84
155
|
remoteSettingsMode: MPSessionReplayRemoteSettingsMode;
|
|
85
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Enables on-device debug features such as the visual mask overlay.
|
|
158
|
+
*
|
|
159
|
+
* When non-null, the SDK renders a colored overlay on top of the app showing which
|
|
160
|
+
* regions are masked, auto-masked, or explicitly unmasked — useful for verifying
|
|
161
|
+
* masking coverage during development. Pass `new MPDebugOptions()` to enable the
|
|
162
|
+
* overlay with default colors, or customize via `MPDebugOverlayColors`.
|
|
163
|
+
*
|
|
164
|
+
* `debugOptions` is only honored when `__DEV__` is `true`. In production bundles
|
|
165
|
+
* it is dropped before reaching the native SDK, so it is safe to leave the option
|
|
166
|
+
* set unconditionally — the overlay will not render for end users.
|
|
167
|
+
*
|
|
168
|
+
* - **Default:** `null` (disabled)
|
|
169
|
+
*/
|
|
170
|
+
debugOptions: MPDebugOptions | null;
|
|
171
|
+
/**
|
|
172
|
+
* Base URL used to send session replay data to Mixpanel.
|
|
173
|
+
*
|
|
174
|
+
* Use one of the {@link MPDataResidency} constants to target a managed region
|
|
175
|
+
* (`MPDataResidency.US`, `MPDataResidency.EU`, `MPDataResidency.IN`), or pass any
|
|
176
|
+
* fully-qualified `https://` URL to route traffic through a custom endpoint such
|
|
177
|
+
* as a corporate proxy.
|
|
178
|
+
*
|
|
179
|
+
* The URL must use `https://`. The underlying native SDKs validate the URL
|
|
180
|
+
* during `initialize` — invalid URLs cause `initialize` to reject with an error
|
|
181
|
+
* on both platforms.
|
|
182
|
+
*
|
|
183
|
+
* - **Default:** `MPDataResidency.US` (`https://api.mixpanel.com`)
|
|
184
|
+
*/
|
|
185
|
+
serverURL: string;
|
|
186
|
+
constructor({ wifiOnly, autoStartRecording, recordingSessionsPercent, autoMaskedViews, flushInterval, enableLogging, remoteSettingsMode, debugOptions, serverURL, }?: Partial<MPSessionReplayConfig>);
|
|
86
187
|
private transformMaskValueForPlatform;
|
|
87
188
|
toJSON(): string;
|
|
88
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"
|
|
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": "@mixpanel/react-native-session-replay",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Official React Native turbo module for Mixpanel Session Replay",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -37,8 +37,7 @@
|
|
|
37
37
|
"typecheck": "tsc",
|
|
38
38
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
39
39
|
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
40
|
-
"prepare": "bob build"
|
|
41
|
-
"release": "release-it --only-version"
|
|
40
|
+
"prepare": "bob build"
|
|
42
41
|
},
|
|
43
42
|
"keywords": [
|
|
44
43
|
"react-native",
|
|
@@ -74,7 +73,6 @@
|
|
|
74
73
|
"@react-native-community/cli": "15.0.0-alpha.2",
|
|
75
74
|
"@react-native/babel-preset": "0.79.2",
|
|
76
75
|
"@react-native/eslint-config": "^0.78.0",
|
|
77
|
-
"@release-it/conventional-changelog": "^9.0.2",
|
|
78
76
|
"@types/jest": "^29.5.5",
|
|
79
77
|
"@types/react": "^19.0.0",
|
|
80
78
|
"commitlint": "^19.6.1",
|
|
@@ -87,7 +85,6 @@
|
|
|
87
85
|
"react": "19.0.0",
|
|
88
86
|
"react-native": "0.79.2",
|
|
89
87
|
"react-native-builder-bob": "^0.40.13",
|
|
90
|
-
"release-it": "^17.10.0",
|
|
91
88
|
"turbo": "^1.10.7",
|
|
92
89
|
"typescript": "^5.8.3"
|
|
93
90
|
},
|
|
@@ -111,25 +108,6 @@
|
|
|
111
108
|
"@commitlint/config-conventional"
|
|
112
109
|
]
|
|
113
110
|
},
|
|
114
|
-
"release-it": {
|
|
115
|
-
"git": {
|
|
116
|
-
"commitMessage": "chore: release ${version}",
|
|
117
|
-
"tagName": "v${version}"
|
|
118
|
-
},
|
|
119
|
-
"npm": {
|
|
120
|
-
"publish": true
|
|
121
|
-
},
|
|
122
|
-
"github": {
|
|
123
|
-
"release": true
|
|
124
|
-
},
|
|
125
|
-
"plugins": {
|
|
126
|
-
"@release-it/conventional-changelog": {
|
|
127
|
-
"preset": {
|
|
128
|
-
"name": "angular"
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
111
|
"prettier": {
|
|
134
112
|
"quoteProps": "consistent",
|
|
135
113
|
"singleQuote": true,
|