Skip to content

Commit 3827e92

Browse files
committed
chore: targeting for plugin
1 parent 197d803 commit 3827e92

File tree

5 files changed

+56
-2
lines changed

5 files changed

+56
-2
lines changed

packages/plugin-session-replay-browser/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
"dependencies": {
4242
"@amplitude/analytics-core": "^2.15.0",
4343
"@amplitude/session-replay-browser": "^1.25.3",
44+
"@amplitude/analytics-client-common": ">=1 <3",
45+
"@amplitude/analytics-types": ">=1 <3",
4446
"idb-keyval": "^6.2.1",
4547
"tslib": "^2.4.1"
4648
},
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { IdentifyOperation } from '@amplitude/analytics-types';
2+
3+
export const PROPERTY_ADD_OPERATIONS = [
4+
IdentifyOperation.SET,
5+
IdentifyOperation.SET_ONCE,
6+
IdentifyOperation.ADD,
7+
IdentifyOperation.APPEND,
8+
IdentifyOperation.PREPEND,
9+
IdentifyOperation.POSTINSERT,
10+
IdentifyOperation.POSTINSERT,
11+
];
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Event, IdentifyOperation } from '@amplitude/analytics-types';
2+
import { PROPERTY_ADD_OPERATIONS } from './constants';
3+
4+
export const parseUserProperties = (event: Event) => {
5+
if (!event.user_properties) {
6+
return;
7+
}
8+
let userPropertiesObj = {};
9+
const userPropertyKeys = Object.keys(event.user_properties);
10+
11+
userPropertyKeys.forEach((identifyKey) => {
12+
if (PROPERTY_ADD_OPERATIONS.includes(identifyKey as IdentifyOperation)) {
13+
const typedUserPropertiesOperation =
14+
event.user_properties && (event.user_properties[identifyKey as IdentifyOperation] as Record<string, any>);
15+
userPropertiesObj = {
16+
...userPropertiesObj,
17+
...typedUserPropertiesOperation,
18+
};
19+
}
20+
});
21+
return userPropertiesObj;
22+
};

packages/plugin-session-replay-browser/src/session-replay.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import { BrowserClient, BrowserConfig, EnrichmentPlugin, Event } from '@amplitude/analytics-core';
1+
import { BrowserClient, BrowserConfig, EnrichmentPlugin, Event, SpecialEventType } from '@amplitude/analytics-core';
22
import * as sessionReplay from '@amplitude/session-replay-browser';
3+
import { getAnalyticsConnector } from '@amplitude/analytics-client-common';
4+
import { parseUserProperties } from './helpers';
35
import { SessionReplayOptions } from './typings/session-replay';
46
import { VERSION } from './version';
57
import { AmplitudeSessionReplay } from '@amplitude/session-replay-browser';
@@ -21,6 +23,7 @@ export class SessionReplayPlugin implements EnrichmentPlugin<BrowserClient, Brow
2123
init: sessionReplay.init,
2224
setSessionId: sessionReplay.setSessionId,
2325
shutdown: sessionReplay.shutdown,
26+
evaluateTargetingAndCapture: sessionReplay.evaluateTargetingAndCapture,
2427
};
2528

2629
constructor(options?: SessionReplayOptions) {
@@ -52,6 +55,8 @@ export class SessionReplayPlugin implements EnrichmentPlugin<BrowserClient, Brow
5255
};
5356
}
5457
}
58+
const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;
59+
const userProperties = identityStore.getIdentity().userProperties;
5560

5661
this.srInitOptions = {
5762
instanceName: this.config.instanceName,
@@ -77,6 +82,7 @@ export class SessionReplayPlugin implements EnrichmentPlugin<BrowserClient, Brow
7782
performanceConfig: this.options.performanceConfig,
7883
storeType: this.options.storeType,
7984
experimental: this.options.experimental,
85+
userProperties: userProperties,
8086
omitElementTags: this.options.omitElementTags,
8187
applyBackgroundColorToBlockedElements: this.options.applyBackgroundColorToBlockedElements,
8288
interactionConfig: this.options.interactionConfig,
@@ -140,6 +146,11 @@ export class SessionReplayPlugin implements EnrichmentPlugin<BrowserClient, Brow
140146
// Treating config.sessionId as source of truth, if the event's session id doesn't match, the
141147
// event is not of the current session (offline/late events). In that case, don't tag the events
142148
if (sessionId && sessionId === event.session_id) {
149+
let userProperties;
150+
if (event.event_type === SpecialEventType.IDENTIFY) {
151+
userProperties = parseUserProperties(event);
152+
}
153+
await this.sr.evaluateTargetingAndCapture({ event, userProperties });
143154
const sessionRecordingProperties = this.sessionReplay.getSessionReplayProperties();
144155
event.event_properties = {
145156
...event.event_properties,
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import sessionReplay from './session-replay-factory';
2-
export const { init, setSessionId, getSessionId, getSessionReplayProperties, flush, shutdown } = sessionReplay;
2+
export const {
3+
init,
4+
setSessionId,
5+
getSessionId,
6+
getSessionReplayProperties,
7+
flush,
8+
shutdown,
9+
evaluateTargetingAndCapture,
10+
} = sessionReplay;
311
export { SessionReplayOptions, StoreType } from './typings/session-replay';
412
export { SafeLoggerProvider } from './logger';
513
export { AmplitudeSessionReplay } from './typings/session-replay';

0 commit comments

Comments
 (0)