Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
92 lines
2.3 KiB
TypeScript
92 lines
2.3 KiB
TypeScript
import { Identify } from '@amplitude/analytics-core';
|
|
|
|
import logger from '../logger';
|
|
|
|
import AbstractHandler, { IEvent } from './AbstractHandler';
|
|
import { fixDeviceID } from './amplitude/fixDeviceID';
|
|
import amplitude, { initAmplitude } from './amplitude/lib';
|
|
|
|
/**
|
|
* Analytics handler for Amplitude.
|
|
*/
|
|
export default class AmplitudeHandler extends AbstractHandler {
|
|
|
|
/**
|
|
* Creates new instance of the Amplitude analytics handler.
|
|
*
|
|
* @param {Object} options - The amplitude options.
|
|
* @param {string} options.amplitudeAPPKey - The Amplitude app key required by the Amplitude API
|
|
* in the Amplitude events.
|
|
*/
|
|
constructor(options: any) {
|
|
super(options);
|
|
|
|
const {
|
|
amplitudeAPPKey,
|
|
user
|
|
} = options;
|
|
|
|
this._enabled = true;
|
|
|
|
initAmplitude(amplitudeAPPKey, user)
|
|
.then(() => {
|
|
logger.info('Amplitude initialized');
|
|
fixDeviceID(amplitude);
|
|
})
|
|
.catch(e => {
|
|
logger.error('Error initializing Amplitude', e);
|
|
this._enabled = false;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Sets the Amplitude user properties.
|
|
*
|
|
* @param {Object} userProps - The user properties.
|
|
* @returns {void}
|
|
*/
|
|
setUserProperties(userProps: any) {
|
|
if (this._enabled) {
|
|
const identify = new Identify();
|
|
|
|
// Set all properties
|
|
Object.entries(userProps).forEach(([ key, value ]) => {
|
|
identify.set(key, value as any);
|
|
});
|
|
|
|
amplitude.identify(identify);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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: IEvent) {
|
|
if (this._shouldIgnore(event)) {
|
|
return;
|
|
}
|
|
|
|
const eventName = this._extractName(event) ?? '';
|
|
|
|
amplitude.track(eventName, event);
|
|
}
|
|
|
|
/**
|
|
* Return amplitude identity information.
|
|
*
|
|
* @returns {Object}
|
|
*/
|
|
getIdentityProps() {
|
|
return {
|
|
sessionId: amplitude.getSessionId(),
|
|
deviceId: amplitude.getDeviceId(),
|
|
userId: amplitude.getUserId()
|
|
};
|
|
}
|
|
}
|