jiti-meet/react/features/analytics/handlers/AmplitudeHandler.js

69 lines
1.8 KiB
JavaScript
Raw Normal View History

2019-01-03 13:54:02 +00:00
import AbstractHandler from './AbstractHandler';
2020-01-30 16:57:41 +00:00
import { amplitude, fixDeviceID } from './amplitude';
2019-01-03 13:54:02 +00:00
/**
* Analytics handler for Amplitude.
*/
export default class AmplitudeHandler extends AbstractHandler {
2019-01-03 13:54:02 +00:00
/**
* Creates new instance of the Amplitude analytics handler.
*
* @param {Object} options -
* @param {string} options.amplitudeAPPKey - The Amplitude app key required
* by the Amplitude API.
*/
constructor(options) {
super(options);
2019-01-03 13:54:02 +00:00
2019-05-29 15:24:50 +00:00
const { amplitudeAPPKey, host, user } = options;
2019-01-03 13:54:02 +00:00
if (!amplitudeAPPKey) {
throw new Error('Failed to initialize Amplitude handler, no APP key');
2019-01-03 13:54:02 +00:00
}
this._enabled = true;
this._amplitudeOptions = {
host
};
2019-11-29 15:01:46 +00:00
amplitude.getInstance(this._amplitudeOptions).init(amplitudeAPPKey, undefined, { includeReferrer: true });
2020-01-30 16:57:41 +00:00
fixDeviceID(amplitude.getInstance(this._amplitudeOptions));
2019-05-29 15:24:50 +00:00
if (user) {
amplitude.getInstance(this._amplitudeOptions).setUserId(user);
}
2019-01-03 13:54:02 +00:00
}
/**
* Sets the Amplitude user properties.
*
* @param {Object} userProps - The user portperties.
2019-01-03 13:54:02 +00:00
* @returns {void}
*/
setUserProperties(userProps) {
2019-01-03 13:54:02 +00:00
if (this._enabled) {
amplitude.getInstance(this._amplitudeOptions)
.setUserProperties(userProps);
2019-01-03 13:54:02 +00:00
}
}
/**
* Sends an event to Amplitude. The format of the event is described
* in AnalyticsAdapter in lib-jitsi-meet.
*
* @param {Object} event - The event in the format specified by
* lib-jitsi-meet.
* @returns {void}
*/
sendEvent(event) {
if (this._shouldIgnore(event)) {
return;
}
amplitude.getInstance(this._amplitudeOptions).logEvent(
2019-01-03 13:54:02 +00:00
this._extractName(event),
event);
}
}