@plushanalytics/react-native-session-replay 1.2.5 → 3.0.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/README.md +85 -3
- package/lib/commonjs/adapters/mobileReplayAdapter.js +98 -0
- package/lib/commonjs/adapters/mobileReplayAdapter.js.map +1 -0
- package/lib/commonjs/client.js +41 -0
- package/lib/commonjs/client.js.map +1 -0
- package/lib/commonjs/index.js +31 -37
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/nativeBridge.js +45 -0
- package/lib/commonjs/nativeBridge.js.map +1 -0
- package/lib/commonjs/provider.js +45 -0
- package/lib/commonjs/provider.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/adapters/mobileReplayAdapter.js +93 -0
- package/lib/module/adapters/mobileReplayAdapter.js.map +1 -0
- package/lib/module/client.js +32 -0
- package/lib/module/client.js.map +1 -0
- package/lib/module/index.js +3 -33
- package/lib/module/index.js.map +1 -1
- package/lib/module/nativeBridge.js +36 -0
- package/lib/module/nativeBridge.js.map +1 -0
- package/lib/module/provider.js +39 -0
- package/lib/module/provider.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/commonjs/src/adapters/mobileReplayAdapter.d.ts +8 -0
- package/lib/typescript/commonjs/src/adapters/mobileReplayAdapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/client.d.ts +6 -0
- package/lib/typescript/commonjs/src/client.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +4 -28
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeBridge.d.ts +29 -0
- package/lib/typescript/commonjs/src/nativeBridge.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/provider.d.ts +12 -0
- package/lib/typescript/commonjs/src/provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types.d.ts +21 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/module/src/adapters/mobileReplayAdapter.d.ts +8 -0
- package/lib/typescript/module/src/adapters/mobileReplayAdapter.d.ts.map +1 -0
- package/lib/typescript/module/src/client.d.ts +6 -0
- package/lib/typescript/module/src/client.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +4 -28
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeBridge.d.ts +29 -0
- package/lib/typescript/module/src/nativeBridge.d.ts.map +1 -0
- package/lib/typescript/module/src/provider.d.ts +12 -0
- package/lib/typescript/module/src/provider.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +21 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/package.json +22 -25
- package/src/adapters/mobileReplayAdapter.ts +113 -0
- package/src/client.ts +42 -0
- package/src/index.tsx +23 -79
- package/src/nativeBridge.ts +79 -0
- package/src/provider.tsx +46 -0
- package/src/types.ts +59 -0
- /package/{posthog-react-native-session-replay.podspec → plush-react-native-session-replay.podspec} +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NativeModules, Platform } from 'react-native';
|
|
4
|
+
const LINKING_ERROR = `The package '@plushanalytics/react-native-session-replay' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
|
|
5
|
+
ios: "- You have run 'pod install'\n",
|
|
6
|
+
default: ''
|
|
7
|
+
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
8
|
+
const PosthogReactNativeSessionReplay = NativeModules.PosthogReactNativeSessionReplay ? NativeModules.PosthogReactNativeSessionReplay : new Proxy({}, {
|
|
9
|
+
get() {
|
|
10
|
+
throw new Error(LINKING_ERROR);
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
export function start(sessionId, sdkOptions, sdkReplayConfig, decideReplayConfig) {
|
|
14
|
+
return PosthogReactNativeSessionReplay.start(sessionId, sdkOptions, sdkReplayConfig, decideReplayConfig);
|
|
15
|
+
}
|
|
16
|
+
export function startSession(sessionId) {
|
|
17
|
+
return PosthogReactNativeSessionReplay.startSession(sessionId);
|
|
18
|
+
}
|
|
19
|
+
export function endSession() {
|
|
20
|
+
return PosthogReactNativeSessionReplay.endSession();
|
|
21
|
+
}
|
|
22
|
+
export function isEnabled() {
|
|
23
|
+
return PosthogReactNativeSessionReplay.isEnabled();
|
|
24
|
+
}
|
|
25
|
+
export function identify(distinctId, anonymousId) {
|
|
26
|
+
return PosthogReactNativeSessionReplay.identify(distinctId, anonymousId);
|
|
27
|
+
}
|
|
28
|
+
const PostHogReactNativeSessionReplay = {
|
|
29
|
+
start,
|
|
30
|
+
startSession,
|
|
31
|
+
endSession,
|
|
32
|
+
isEnabled,
|
|
33
|
+
identify
|
|
34
|
+
};
|
|
35
|
+
export default PostHogReactNativeSessionReplay;
|
|
36
|
+
//# sourceMappingURL=nativeBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","PosthogReactNativeSessionReplay","Proxy","get","Error","start","sessionId","sdkOptions","sdkReplayConfig","decideReplayConfig","startSession","endSession","isEnabled","identify","distinctId","anonymousId","PostHogReactNativeSessionReplay"],"sourceRoot":"../../src","sources":["nativeBridge.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,sGAAsG,GACtGD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,+BAA+B,GACnCN,aAAa,CAACM,+BAA+B,GACzCN,aAAa,CAACM,+BAA+B,GAC7C,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEP,OAAO,SAASQ,KAAKA,CACnBC,SAAiB,EACjBC,UAAkC,EAClCC,eAAuC,EACvCC,kBAA0C,EAC3B;EACf,OAAOR,+BAA+B,CAACI,KAAK,CAC1CC,SAAS,EACTC,UAAU,EACVC,eAAe,EACfC,kBACF,CAAC;AACH;AAEA,OAAO,SAASC,YAAYA,CAACJ,SAAiB,EAAiB;EAC7D,OAAOL,+BAA+B,CAACS,YAAY,CAACJ,SAAS,CAAC;AAChE;AAEA,OAAO,SAASK,UAAUA,CAAA,EAAkB;EAC1C,OAAOV,+BAA+B,CAACU,UAAU,CAAC,CAAC;AACrD;AAEA,OAAO,SAASC,SAASA,CAAA,EAAqB;EAC5C,OAAOX,+BAA+B,CAACW,SAAS,CAAC,CAAC;AACpD;AAEA,OAAO,SAASC,QAAQA,CACtBC,UAAkB,EAClBC,WAAmB,EACJ;EACf,OAAOd,+BAA+B,CAACY,QAAQ,CAACC,UAAU,EAAEC,WAAW,CAAC;AAC1E;AAmBA,MAAMC,+BAAsE,GAAG;EAC7EX,KAAK;EACLK,YAAY;EACZC,UAAU;EACVC,SAAS;EACTC;AACF,CAAC;AAED,eAAeG,+BAA+B","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { createContext, useContext, useEffect, useRef } from "react";
|
|
4
|
+
import { createPlushAnalyticsClient } from "./client.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
const PlushAnalyticsContext = /*#__PURE__*/createContext(null);
|
|
7
|
+
export function PlushAnalyticsProvider({
|
|
8
|
+
children,
|
|
9
|
+
config,
|
|
10
|
+
client
|
|
11
|
+
}) {
|
|
12
|
+
const clientRef = useRef(null);
|
|
13
|
+
if (!clientRef.current) {
|
|
14
|
+
if (client) {
|
|
15
|
+
clientRef.current = client;
|
|
16
|
+
} else if (config) {
|
|
17
|
+
clientRef.current = createPlushAnalyticsClient(config);
|
|
18
|
+
} else {
|
|
19
|
+
throw new Error("PlushAnalyticsProvider requires either a `client` or `config` prop.");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
return () => {
|
|
24
|
+
void clientRef.current?.shutdown();
|
|
25
|
+
};
|
|
26
|
+
}, []);
|
|
27
|
+
return /*#__PURE__*/_jsx(PlushAnalyticsContext.Provider, {
|
|
28
|
+
value: clientRef.current,
|
|
29
|
+
children: children
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function usePlushAnalytics() {
|
|
33
|
+
const context = useContext(PlushAnalyticsContext);
|
|
34
|
+
if (!context) {
|
|
35
|
+
throw new Error("usePlushAnalytics must be used inside PlushAnalyticsProvider.");
|
|
36
|
+
}
|
|
37
|
+
return context;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createContext","useContext","useEffect","useRef","createPlushAnalyticsClient","jsx","_jsx","PlushAnalyticsContext","PlushAnalyticsProvider","children","config","client","clientRef","current","Error","shutdown","Provider","value","usePlushAnalytics","context"],"sourceRoot":"../../src","sources":["provider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAC3E,SAASC,0BAA0B,QAAmC,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASjF,MAAMC,qBAAqB,gBAAGP,aAAa,CAAwB,IAAI,CAAC;AAExE,OAAO,SAASQ,sBAAsBA,CAAC;EACrCC,QAAQ;EACRC,MAAM;EACNC;AAC2B,CAAC,EAAsB;EAClD,MAAMC,SAAS,GAAGT,MAAM,CAA8B,IAAI,CAAC;EAE3D,IAAI,CAACS,SAAS,CAACC,OAAO,EAAE;IACtB,IAAIF,MAAM,EAAE;MACVC,SAAS,CAACC,OAAO,GAAGF,MAAM;IAC5B,CAAC,MAAM,IAAID,MAAM,EAAE;MACjBE,SAAS,CAACC,OAAO,GAAGT,0BAA0B,CAACM,MAAM,CAAC;IACxD,CAAC,MAAM;MACL,MAAM,IAAII,KAAK,CAAC,qEAAqE,CAAC;IACxF;EACF;EAEAZ,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACX,KAAKU,SAAS,CAACC,OAAO,EAAEE,QAAQ,CAAC,CAAC;IACpC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBAAOT,IAAA,CAACC,qBAAqB,CAACS,QAAQ;IAACC,KAAK,EAAEL,SAAS,CAACC,OAAQ;IAAAJ,QAAA,EAAEA;EAAQ,CAAiC,CAAC;AAC9G;AAEA,OAAO,SAASS,iBAAiBA,CAAA,EAAmB;EAClD,MAAMC,OAAO,GAAGlB,UAAU,CAACM,qBAAqB,CAAC;EACjD,IAAI,CAACY,OAAO,EAAE;IACZ,MAAM,IAAIL,KAAK,CAAC,+DAA+D,CAAC;EAClF;EAEA,OAAOK,OAAO;AAChB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReplayRecorderAdapter } from "../types";
|
|
2
|
+
type AdapterDefaults = {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
endpoint: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function createMobileReplayRecorderAdapter(defaults: AdapterDefaults): ReplayRecorderAdapter;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=mobileReplayAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobileReplayAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/mobileReplayAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,qBAAqB,EAA2B,MAAM,UAAU,CAAC;AAGnG,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAuEF,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,eAAe,GAAG,qBAAqB,CAmClG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlushAnalyticsClient } from "@plushanalytics/javascript";
|
|
2
|
+
import type { PlushAnalyticsConfig, SessionRecordingOptions } from "./types";
|
|
3
|
+
export { PlushAnalyticsClient };
|
|
4
|
+
export declare function createPlushAnalyticsClient(config: PlushAnalyticsConfig): PlushAnalyticsClient;
|
|
5
|
+
export type { SessionRecordingOptions };
|
|
6
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAWhC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAoB7F;AAGD,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1,29 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}, decideReplayConfig: {
|
|
6
|
-
[key: string]: any;
|
|
7
|
-
}): Promise<void>;
|
|
8
|
-
export declare function startSession(sessionId: string): Promise<void>;
|
|
9
|
-
export declare function endSession(): Promise<void>;
|
|
10
|
-
export declare function isEnabled(): Promise<boolean>;
|
|
11
|
-
export declare function identify(distinctId: string, anonymousId: string): Promise<void>;
|
|
12
|
-
export interface PostHogReactNativeSessionReplayModule {
|
|
13
|
-
start: (sessionId: string, sdkOptions: {
|
|
14
|
-
[key: string]: any;
|
|
15
|
-
}, // options from SDK such as apiKey
|
|
16
|
-
sdkReplayConfig: {
|
|
17
|
-
[key: string]: any;
|
|
18
|
-
}, // config from SDK
|
|
19
|
-
decideReplayConfig: {
|
|
20
|
-
[key: string]: any;
|
|
21
|
-
}) => Promise<void>;
|
|
22
|
-
startSession: (sessionId: string) => Promise<void>;
|
|
23
|
-
endSession: () => Promise<void>;
|
|
24
|
-
isEnabled: () => Promise<boolean>;
|
|
25
|
-
identify: (distinctId: string, anonymousId: string) => Promise<void>;
|
|
26
|
-
}
|
|
27
|
-
declare const PostHogReactNativeSessionReplay: PostHogReactNativeSessionReplayModule;
|
|
28
|
-
export default PostHogReactNativeSessionReplay;
|
|
1
|
+
export { createPlushAnalyticsClient, PlushAnalyticsClient } from "./client";
|
|
2
|
+
export { createMobileReplayRecorderAdapter } from "./adapters/mobileReplayAdapter";
|
|
3
|
+
export { PlushAnalyticsProvider, usePlushAnalytics } from "./provider";
|
|
4
|
+
export type { EventEnvelope, EventType, FlushResult, GroupOptions, IdentifyOptions, JsonValue, MobileReplayConfig, PlushAnalytics, PlushAnalyticsConfig, ReplayChunkEnvelope, ReplayRecordEmission, ReplayRecorderAdapter, RetryOptions, ScreenOptions, SessionRecordingOptions, StorageAdapter, TrackOptions, UnifiedBatchPayload } from "./types";
|
|
29
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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":"AAAA,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare function start(sessionId: string, sdkOptions: {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
}, sdkReplayConfig: {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}, decideReplayConfig: {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function startSession(sessionId: string): Promise<void>;
|
|
9
|
+
export declare function endSession(): Promise<void>;
|
|
10
|
+
export declare function isEnabled(): Promise<boolean>;
|
|
11
|
+
export declare function identify(distinctId: string, anonymousId: string): Promise<void>;
|
|
12
|
+
export interface PostHogReactNativeSessionReplayModule {
|
|
13
|
+
start: (sessionId: string, sdkOptions: {
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}, // options from SDK such as apiKey
|
|
16
|
+
sdkReplayConfig: {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}, // config from SDK
|
|
19
|
+
decideReplayConfig: {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}) => Promise<void>;
|
|
22
|
+
startSession: (sessionId: string) => Promise<void>;
|
|
23
|
+
endSession: () => Promise<void>;
|
|
24
|
+
isEnabled: () => Promise<boolean>;
|
|
25
|
+
identify: (distinctId: string, anonymousId: string) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
declare const PostHogReactNativeSessionReplay: PostHogReactNativeSessionReplayModule;
|
|
28
|
+
export default PostHogReactNativeSessionReplay;
|
|
29
|
+
//# sourceMappingURL=nativeBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeBridge.d.ts","sourceRoot":"","sources":["../../../../src/nativeBridge.ts"],"names":[],"mappings":"AAoBA,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAClC,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EACvC,kBAAkB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5C;AAED,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,CACL,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,kCAAkC;IACtE,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,kBAAkB;IAC3D,kBAAkB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KACvC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAElC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,QAAA,MAAM,+BAA+B,EAAE,qCAMtC,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type PlushAnalyticsClient } from "./client";
|
|
3
|
+
import type { PlushAnalytics, PlushAnalyticsConfig } from "./types";
|
|
4
|
+
type PlushAnalyticsProviderProps = {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
config?: PlushAnalyticsConfig;
|
|
7
|
+
client?: PlushAnalyticsClient;
|
|
8
|
+
};
|
|
9
|
+
export declare function PlushAnalyticsProvider({ children, config, client }: PlushAnalyticsProviderProps): React.ReactElement;
|
|
10
|
+
export declare function usePlushAnalytics(): PlushAnalytics;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAC5E,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpE,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACP,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,CAoBlD;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAOlD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EventEnvelope, EventType, FlushResult, GroupOptions, IdentifyOptions, JsonValue, PlushAnalytics as CorePlushAnalytics, PlushAnalyticsConfig as CoreConfig, ReplayChunkEnvelope, ReplayRecordEmission, ReplayRecorderAdapter, RetryOptions, ScreenOptions, SessionRecordingOptions as CoreSessionRecordingOptions, StorageAdapter, TrackOptions, UnifiedBatchPayload } from "@plushanalytics/javascript";
|
|
2
|
+
export type MobileReplayConfig = {
|
|
3
|
+
maskAllTextInputs?: boolean;
|
|
4
|
+
maskAllImages?: boolean;
|
|
5
|
+
maskAllSandboxedViews?: boolean;
|
|
6
|
+
captureLog?: boolean;
|
|
7
|
+
captureNetworkTelemetry?: boolean;
|
|
8
|
+
throttleDelayMs?: number;
|
|
9
|
+
};
|
|
10
|
+
export type SessionRecordingOptions = CoreSessionRecordingOptions & {
|
|
11
|
+
replayHost?: string;
|
|
12
|
+
replaySnapshotPath?: string;
|
|
13
|
+
replayConfig?: MobileReplayConfig;
|
|
14
|
+
};
|
|
15
|
+
export type PlushAnalyticsConfig = CoreConfig;
|
|
16
|
+
export type { EventEnvelope, EventType, FlushResult, GroupOptions, IdentifyOptions, JsonValue, ReplayChunkEnvelope, ReplayRecordEmission, ReplayRecorderAdapter, RetryOptions, ScreenOptions, StorageAdapter, TrackOptions, UnifiedBatchPayload };
|
|
17
|
+
export type PlushAnalytics = Omit<CorePlushAnalytics, "startSessionRecording" | "startReplay"> & {
|
|
18
|
+
startSessionRecording: (options?: SessionRecordingOptions) => Promise<void>;
|
|
19
|
+
startReplay: (options?: SessionRecordingOptions) => Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,cAAc,IAAI,kBAAkB,EACpC,oBAAoB,IAAI,UAAU,EAClC,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,uBAAuB,IAAI,2BAA2B,EACtD,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,2BAA2B,GAAG;IAElE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE9C,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,aAAa,CAAC,GAAG;IAC/F,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReplayRecorderAdapter } from "../types";
|
|
2
|
+
type AdapterDefaults = {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
endpoint: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function createMobileReplayRecorderAdapter(defaults: AdapterDefaults): ReplayRecorderAdapter;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=mobileReplayAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobileReplayAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/mobileReplayAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,qBAAqB,EAA2B,MAAM,UAAU,CAAC;AAGnG,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAuEF,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,eAAe,GAAG,qBAAqB,CAmClG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlushAnalyticsClient } from "@plushanalytics/javascript";
|
|
2
|
+
import type { PlushAnalyticsConfig, SessionRecordingOptions } from "./types";
|
|
3
|
+
export { PlushAnalyticsClient };
|
|
4
|
+
export declare function createPlushAnalyticsClient(config: PlushAnalyticsConfig): PlushAnalyticsClient;
|
|
5
|
+
export type { SessionRecordingOptions };
|
|
6
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAWhC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAoB7F;AAGD,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1,29 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}, decideReplayConfig: {
|
|
6
|
-
[key: string]: any;
|
|
7
|
-
}): Promise<void>;
|
|
8
|
-
export declare function startSession(sessionId: string): Promise<void>;
|
|
9
|
-
export declare function endSession(): Promise<void>;
|
|
10
|
-
export declare function isEnabled(): Promise<boolean>;
|
|
11
|
-
export declare function identify(distinctId: string, anonymousId: string): Promise<void>;
|
|
12
|
-
export interface PostHogReactNativeSessionReplayModule {
|
|
13
|
-
start: (sessionId: string, sdkOptions: {
|
|
14
|
-
[key: string]: any;
|
|
15
|
-
}, // options from SDK such as apiKey
|
|
16
|
-
sdkReplayConfig: {
|
|
17
|
-
[key: string]: any;
|
|
18
|
-
}, // config from SDK
|
|
19
|
-
decideReplayConfig: {
|
|
20
|
-
[key: string]: any;
|
|
21
|
-
}) => Promise<void>;
|
|
22
|
-
startSession: (sessionId: string) => Promise<void>;
|
|
23
|
-
endSession: () => Promise<void>;
|
|
24
|
-
isEnabled: () => Promise<boolean>;
|
|
25
|
-
identify: (distinctId: string, anonymousId: string) => Promise<void>;
|
|
26
|
-
}
|
|
27
|
-
declare const PostHogReactNativeSessionReplay: PostHogReactNativeSessionReplayModule;
|
|
28
|
-
export default PostHogReactNativeSessionReplay;
|
|
1
|
+
export { createPlushAnalyticsClient, PlushAnalyticsClient } from "./client";
|
|
2
|
+
export { createMobileReplayRecorderAdapter } from "./adapters/mobileReplayAdapter";
|
|
3
|
+
export { PlushAnalyticsProvider, usePlushAnalytics } from "./provider";
|
|
4
|
+
export type { EventEnvelope, EventType, FlushResult, GroupOptions, IdentifyOptions, JsonValue, MobileReplayConfig, PlushAnalytics, PlushAnalyticsConfig, ReplayChunkEnvelope, ReplayRecordEmission, ReplayRecorderAdapter, RetryOptions, ScreenOptions, SessionRecordingOptions, StorageAdapter, TrackOptions, UnifiedBatchPayload } from "./types";
|
|
29
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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":"AAAA,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare function start(sessionId: string, sdkOptions: {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
}, sdkReplayConfig: {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}, decideReplayConfig: {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function startSession(sessionId: string): Promise<void>;
|
|
9
|
+
export declare function endSession(): Promise<void>;
|
|
10
|
+
export declare function isEnabled(): Promise<boolean>;
|
|
11
|
+
export declare function identify(distinctId: string, anonymousId: string): Promise<void>;
|
|
12
|
+
export interface PostHogReactNativeSessionReplayModule {
|
|
13
|
+
start: (sessionId: string, sdkOptions: {
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}, // options from SDK such as apiKey
|
|
16
|
+
sdkReplayConfig: {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}, // config from SDK
|
|
19
|
+
decideReplayConfig: {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}) => Promise<void>;
|
|
22
|
+
startSession: (sessionId: string) => Promise<void>;
|
|
23
|
+
endSession: () => Promise<void>;
|
|
24
|
+
isEnabled: () => Promise<boolean>;
|
|
25
|
+
identify: (distinctId: string, anonymousId: string) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
declare const PostHogReactNativeSessionReplay: PostHogReactNativeSessionReplayModule;
|
|
28
|
+
export default PostHogReactNativeSessionReplay;
|
|
29
|
+
//# sourceMappingURL=nativeBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeBridge.d.ts","sourceRoot":"","sources":["../../../../src/nativeBridge.ts"],"names":[],"mappings":"AAoBA,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAClC,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EACvC,kBAAkB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5C;AAED,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,CACL,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,kCAAkC;IACtE,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,kBAAkB;IAC3D,kBAAkB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KACvC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAElC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,QAAA,MAAM,+BAA+B,EAAE,qCAMtC,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type PlushAnalyticsClient } from "./client";
|
|
3
|
+
import type { PlushAnalytics, PlushAnalyticsConfig } from "./types";
|
|
4
|
+
type PlushAnalyticsProviderProps = {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
config?: PlushAnalyticsConfig;
|
|
7
|
+
client?: PlushAnalyticsClient;
|
|
8
|
+
};
|
|
9
|
+
export declare function PlushAnalyticsProvider({ children, config, client }: PlushAnalyticsProviderProps): React.ReactElement;
|
|
10
|
+
export declare function usePlushAnalytics(): PlushAnalytics;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAC5E,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpE,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACP,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,CAoBlD;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAOlD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EventEnvelope, EventType, FlushResult, GroupOptions, IdentifyOptions, JsonValue, PlushAnalytics as CorePlushAnalytics, PlushAnalyticsConfig as CoreConfig, ReplayChunkEnvelope, ReplayRecordEmission, ReplayRecorderAdapter, RetryOptions, ScreenOptions, SessionRecordingOptions as CoreSessionRecordingOptions, StorageAdapter, TrackOptions, UnifiedBatchPayload } from "@plushanalytics/javascript";
|
|
2
|
+
export type MobileReplayConfig = {
|
|
3
|
+
maskAllTextInputs?: boolean;
|
|
4
|
+
maskAllImages?: boolean;
|
|
5
|
+
maskAllSandboxedViews?: boolean;
|
|
6
|
+
captureLog?: boolean;
|
|
7
|
+
captureNetworkTelemetry?: boolean;
|
|
8
|
+
throttleDelayMs?: number;
|
|
9
|
+
};
|
|
10
|
+
export type SessionRecordingOptions = CoreSessionRecordingOptions & {
|
|
11
|
+
replayHost?: string;
|
|
12
|
+
replaySnapshotPath?: string;
|
|
13
|
+
replayConfig?: MobileReplayConfig;
|
|
14
|
+
};
|
|
15
|
+
export type PlushAnalyticsConfig = CoreConfig;
|
|
16
|
+
export type { EventEnvelope, EventType, FlushResult, GroupOptions, IdentifyOptions, JsonValue, ReplayChunkEnvelope, ReplayRecordEmission, ReplayRecorderAdapter, RetryOptions, ScreenOptions, StorageAdapter, TrackOptions, UnifiedBatchPayload };
|
|
17
|
+
export type PlushAnalytics = Omit<CorePlushAnalytics, "startSessionRecording" | "startReplay"> & {
|
|
18
|
+
startSessionRecording: (options?: SessionRecordingOptions) => Promise<void>;
|
|
19
|
+
startReplay: (options?: SessionRecordingOptions) => Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,cAAc,IAAI,kBAAkB,EACpC,oBAAoB,IAAI,UAAU,EAClC,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,uBAAuB,IAAI,2BAA2B,EACtD,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,2BAA2B,GAAG;IAElE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE9C,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,aAAa,CAAC,GAAG;IAC/F,qBAAqB,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plushanalytics/react-native-session-replay",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "React Native SDK for Plush Analytics events + session replay ingestion.",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
6
|
"main": "./lib/commonjs/index.js",
|
|
7
7
|
"module": "./lib/module/index.js",
|
|
@@ -36,30 +36,26 @@
|
|
|
36
36
|
"!**/__mocks__",
|
|
37
37
|
"!**/.*"
|
|
38
38
|
],
|
|
39
|
-
"scripts": {
|
|
40
|
-
"example": "pnpm --filter plush-react-native-session-replay-example",
|
|
41
|
-
"test": "jest",
|
|
42
|
-
"typecheck": "tsc",
|
|
43
|
-
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
44
|
-
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
45
|
-
"prepare": "bob build",
|
|
46
|
-
"changeset": "changeset"
|
|
47
|
-
},
|
|
48
39
|
"keywords": [
|
|
49
40
|
"react-native",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
41
|
+
"analytics",
|
|
42
|
+
"session-replay",
|
|
43
|
+
"plushanalytics"
|
|
52
44
|
],
|
|
53
45
|
"repository": {
|
|
54
46
|
"type": "git",
|
|
55
|
-
"url": "
|
|
47
|
+
"url": "https://github.com/plush-analytics/sdks.git",
|
|
48
|
+
"directory": "plush-react-native-session-replay"
|
|
56
49
|
},
|
|
57
50
|
"author": "Plush Analytics",
|
|
58
51
|
"license": "MIT",
|
|
59
52
|
"bugs": {
|
|
60
|
-
"url": "https://github.com/plush-analytics/
|
|
53
|
+
"url": "https://github.com/plush-analytics/sdks/issues"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://github.com/plush-analytics/sdks/tree/main/plush-react-native-session-replay",
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@plushanalytics/javascript": "^0.1.6"
|
|
61
58
|
},
|
|
62
|
-
"homepage": "https://github.com/plush-analytics/plush-react-native-session-replay#readme",
|
|
63
59
|
"publishConfig": {
|
|
64
60
|
"registry": "https://registry.npmjs.org/"
|
|
65
61
|
},
|
|
@@ -82,18 +78,10 @@
|
|
|
82
78
|
"turbo": "^2.0.0",
|
|
83
79
|
"typescript": "^5.2.2"
|
|
84
80
|
},
|
|
85
|
-
"pnpm": {
|
|
86
|
-
"overrides": {
|
|
87
|
-
"@types/react": "^18.2.44",
|
|
88
|
-
"node-forge": "1.3.2",
|
|
89
|
-
"fast-xml-parser": "5.3.4"
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
81
|
"peerDependencies": {
|
|
93
82
|
"react": "*",
|
|
94
83
|
"react-native": "*"
|
|
95
84
|
},
|
|
96
|
-
"packageManager": "pnpm@10.24.0+sha512.01ff8ae71b4419903b65c60fb2dc9d34cf8bb6e06d03bde112ef38f7a34d6904c424ba66bea5cdcf12890230bf39f9580473140ed9c946fef328b6e5238a345a",
|
|
97
85
|
"jest": {
|
|
98
86
|
"preset": "react-native",
|
|
99
87
|
"modulePathIgnorePatterns": [
|
|
@@ -161,5 +149,14 @@
|
|
|
161
149
|
"type": "module-legacy",
|
|
162
150
|
"languages": "kotlin-swift",
|
|
163
151
|
"version": "0.41.2"
|
|
152
|
+
},
|
|
153
|
+
"scripts": {
|
|
154
|
+
"example": "pnpm --filter plush-react-native-session-replay-example",
|
|
155
|
+
"build": "bob build",
|
|
156
|
+
"test": "jest",
|
|
157
|
+
"typecheck": "tsc -p tsconfig.build.json --noEmit",
|
|
158
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
159
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
160
|
+
"changeset": "changeset"
|
|
164
161
|
}
|
|
165
|
-
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { MobileReplayConfig, ReplayRecorderAdapter, SessionRecordingOptions } from "../types";
|
|
2
|
+
import * as replayModule from "../nativeBridge";
|
|
3
|
+
|
|
4
|
+
type AdapterDefaults = {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
endpoint: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const DEFAULT_SNAPSHOT_PATH = "/v1/events/batch";
|
|
10
|
+
const UUID_PATTERN =
|
|
11
|
+
/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
12
|
+
|
|
13
|
+
function assertNonEmpty(value: string, field: string): void {
|
|
14
|
+
if (!value || !value.trim()) {
|
|
15
|
+
throw new Error(`${field} is required.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function normalizeHost(value: string): string {
|
|
20
|
+
return value.replace(/\/+$/, "");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function normalizeSnapshotPath(value: string | undefined): string {
|
|
24
|
+
const trimmed = value?.trim();
|
|
25
|
+
if (!trimmed) return DEFAULT_SNAPSHOT_PATH;
|
|
26
|
+
return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function isUuid(value: string): boolean {
|
|
30
|
+
return UUID_PATTERN.test(value);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function generateUuid(): string {
|
|
34
|
+
const cryptoApi = globalThis.crypto as Crypto | undefined;
|
|
35
|
+
if (cryptoApi?.randomUUID) return cryptoApi.randomUUID();
|
|
36
|
+
|
|
37
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (char) => {
|
|
38
|
+
const random = Math.floor(Math.random() * 16);
|
|
39
|
+
const value = char === "x" ? random : (random & 0x3) | 0x8;
|
|
40
|
+
return value.toString(16);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function normalizeReplayConfig(config: MobileReplayConfig | undefined): Record<string, unknown> {
|
|
45
|
+
return {
|
|
46
|
+
maskAllTextInputs: config?.maskAllTextInputs ?? true,
|
|
47
|
+
maskAllImages: config?.maskAllImages ?? true,
|
|
48
|
+
maskAllSandboxedViews: config?.maskAllSandboxedViews ?? true,
|
|
49
|
+
captureLog: config?.captureLog ?? true,
|
|
50
|
+
captureNetworkTelemetry: config?.captureNetworkTelemetry ?? true,
|
|
51
|
+
throttleDelayMs: config?.throttleDelayMs ?? 1000
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function resolveSessionId(options?: SessionRecordingOptions): string {
|
|
56
|
+
const requestedSessionId = options?.sessionId?.trim();
|
|
57
|
+
if (requestedSessionId && isUuid(requestedSessionId)) {
|
|
58
|
+
return requestedSessionId;
|
|
59
|
+
}
|
|
60
|
+
return generateUuid();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function assertNoPosthogDotCom(host: string): void {
|
|
64
|
+
const lowered = host.toLowerCase();
|
|
65
|
+
const hostName = (() => {
|
|
66
|
+
try {
|
|
67
|
+
return new URL(host).hostname.toLowerCase();
|
|
68
|
+
} catch {
|
|
69
|
+
return lowered;
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
|
|
73
|
+
if (hostName === "posthog.com" || hostName.endsWith(".posthog.com")) {
|
|
74
|
+
throw new Error("replayHost must not point to posthog.com (or a subdomain).");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function createMobileReplayRecorderAdapter(defaults: AdapterDefaults): ReplayRecorderAdapter {
|
|
79
|
+
assertNonEmpty(defaults.apiKey, "apiKey");
|
|
80
|
+
assertNonEmpty(defaults.endpoint, "endpoint");
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
start: async ({ onSessionId, options }) => {
|
|
84
|
+
const host = normalizeHost(options?.replayHost?.trim() || defaults.endpoint);
|
|
85
|
+
assertNoPosthogDotCom(host);
|
|
86
|
+
const snapshotPath = normalizeSnapshotPath(options?.replaySnapshotPath);
|
|
87
|
+
const activeSessionId = resolveSessionId(options);
|
|
88
|
+
|
|
89
|
+
const sdkOptions = {
|
|
90
|
+
apiKey: defaults.apiKey,
|
|
91
|
+
host,
|
|
92
|
+
debug: false,
|
|
93
|
+
distinctId: options?.userId?.trim() || "",
|
|
94
|
+
anonymousId: "",
|
|
95
|
+
sdkVersion: "plushanalytics-react-native",
|
|
96
|
+
flushAt: 20
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
await replayModule.start(
|
|
100
|
+
activeSessionId,
|
|
101
|
+
sdkOptions,
|
|
102
|
+
normalizeReplayConfig(options?.replayConfig),
|
|
103
|
+
{ endpoint: snapshotPath }
|
|
104
|
+
);
|
|
105
|
+
await replayModule.startSession(activeSessionId);
|
|
106
|
+
onSessionId?.(activeSessionId);
|
|
107
|
+
|
|
108
|
+
return () => {
|
|
109
|
+
void replayModule.endSession();
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|