@lokalise/fastify-extras
Version:
Opinionated set of fastify plugins, commonly used in Lokalise
56 lines • 1.55 kB
JavaScript
import { add, init } from '@amplitude/analytics-node';
import fp from 'fastify-plugin';
import { Amplitude } from './Amplitude.js';
function plugin(fastify, config, next) {
const amplitudeInstance = new Amplitude(config.isEnabled);
fastify.decorate('amplitude', amplitudeInstance);
if (!config.isEnabled) {
return next();
}
if (!config.apiKey) {
return next(Error('Amplitude key not defined'));
}
init(config.apiKey, config.options)
.promise.then(() => {
if (config.apiUsageTracking) {
enableApiUsageTracking(fastify, amplitudeInstance, config.apiUsageTracking);
}
if (config.plugins) {
for (const e of config.plugins) {
add(e);
}
}
next();
})
.catch((err) => {
next(err);
});
}
function enableApiUsageTracking(fastify, amplitude, eventCreationFn) {
fastify.addHook('onResponse', (req, res, done) => {
const event = eventCreationFn(req, res);
if (event) {
amplitude.track(event);
}
return done();
});
}
/**
* Use this method to register the amplitude plugin on your fastify instance.
*
* Example of usage:
* ```ts
* await app.register(amplitudePlugin, {
* isEnabled: true,
* apiKey: 'dummy-api-key',
* options: {
* serverZone: 'EU',
* },
* })
* ```
*/
export const amplitudePlugin = fp(plugin, {
fastify: '5.x',
name: 'amplitude-plugin',
});
//# sourceMappingURL=amplitudePlugin.js.map