@digicms/cms
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
107 lines (91 loc) • 3.4 kB
JavaScript
/* eslint-disable no-unreachable */
/* eslint-disable no-unused-vars */
'use strict';
const os = require('os');
const path = require('path');
const _ = require('lodash');
const { map, values, sumBy, pipe, flatMap, propEq } = require('lodash/fp');
const isDocker = require('is-docker');
const fetch = require('node-fetch');
const ciEnv = require('ci-info');
const { isUsingTypeScriptSync } = require('@strapi/typescript-utils');
const { env } = require('@strapi/utils');
const machineID = require('../../utils/machine-id');
const { generateAdminUserHash } = require('./admin-user-hash');
const defaultQueryOpts = {
timeout: 1000,
headers: { 'Content-Type': 'application/json' },
};
const ANALYTICS_URI = 'https://analytics.strapi.io';
/**
* Add properties from the package.json strapi key in the metadata
* @param {object} metadata
*/
const addPackageJsonStrapiMetadata = (metadata, strapi) => {
const { packageJsonStrapi = {} } = strapi.config;
_.defaults(metadata, packageJsonStrapi);
};
/**
* Create a send function for event with all the necessary metadatas
* @param {Object} strapi strapi app
* @returns {Function} (event, payload) -> Promise{boolean}
*/
module.exports = (strapi) => {
const { uuid } = strapi.config;
const deviceId = machineID();
const serverRootPath = strapi.dirs.app.root;
const adminRootPath = path.join(strapi.dirs.app.root, 'src', 'admin');
const getNumberOfDynamicZones = () => {
return pipe(
map('attributes'),
flatMap(values),
sumBy(propEq('type', 'dynamiczone'))
)(strapi.contentTypes);
};
const anonymousUserProperties = {
environment: strapi.config.environment,
os: os.type(),
osPlatform: os.platform(),
osArch: os.arch(),
osRelease: os.release(),
nodeVersion: process.versions.node,
};
const anonymousGroupProperties = {
docker: process.env.DOCKER || isDocker(),
isCI: ciEnv.isCI,
version: strapi.config.get('info.strapi'),
useTypescriptOnServer: isUsingTypeScriptSync(serverRootPath),
useTypescriptOnAdmin: isUsingTypeScriptSync(adminRootPath),
projectId: uuid,
isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',
numberOfAllContentTypes: _.size(strapi.contentTypes), // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.
numberOfComponents: _.size(strapi.components),
numberOfDynamicZones: getNumberOfDynamicZones(),
};
addPackageJsonStrapiMetadata(anonymousGroupProperties, strapi);
return async (event, payload = {}, opts = {}) => {
const userId = generateAdminUserHash(strapi);
// const reqParams = {
// method: 'POST',
// body: JSON.stringify({
// event,
// userId,
// deviceId,
// eventProperties: payload.eventProperties,
// userProperties: userId ? { ...anonymousUserProperties, ...payload.userProperties } : {},
// groupProperties: {
// ...anonymousGroupProperties,
// projectType: strapi.EE ? 'Enterprise' : 'Community',
// ...payload.groupProperties,
// },
// }),
// ..._.merge({}, defaultQueryOpts, opts),
// };
try {
// const res = await fetch(`${ANALYTICS_URI}/api/v2/track`, reqParams);
return true;
} catch (err) {
return false;
}
};
};