{"version":3,"file":"sender.mjs","sources":["../../../src/services/metrics/sender.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport isDocker from 'is-docker';\nimport ciEnv from 'ci-info';\nimport tsUtils from '@strapi/typescript-utils';\nimport { env } from '@strapi/utils';\nimport type { Strapi } from '@strapi/types';\nimport machineID from '../../utils/machine-id';\nimport { generateAdminUserHash } from './admin-user-hash';\n\nexport interface Payload {\n  eventProperties?: Record<string, unknown>;\n  userProperties?: Record<string, unknown>;\n  groupProperties?: Record<string, unknown>;\n}\n\nexport type Sender = (\n  event: string,\n  payload?: Payload,\n  opts?: Record<string, unknown>\n) => Promise<boolean>;\n\nconst defaultQueryOpts = {\n  timeout: 1000,\n  headers: { 'Content-Type': 'application/json' },\n};\n\nconst ANALYTICS_URI = 'https://analytics.strapi.io';\n\n/**\n * Add properties from the package.json strapi key in the metadata\n */\nconst addPackageJsonStrapiMetadata = (metadata: Record<string, unknown>, strapi: Strapi) => {\n  const { packageJsonStrapi = {} } = strapi.config;\n\n  _.defaults(metadata, packageJsonStrapi);\n};\n\n/**\n * Create a send function for event with all the necessary metadatas\n */\nexport default (strapi: Strapi): Sender => {\n  const { uuid } = strapi.config;\n  const deviceId = machineID();\n\n  const serverRootPath = strapi.dirs.app.root;\n  const adminRootPath = path.join(strapi.dirs.app.root, 'src', 'admin');\n\n  const anonymousUserProperties = {\n    environment: strapi.config.environment,\n    os: os.type(),\n    osPlatform: os.platform(),\n    osArch: os.arch(),\n    osRelease: os.release(),\n    nodeVersion: process.versions.node,\n  };\n\n  const anonymousGroupProperties = {\n    docker: process.env.DOCKER || isDocker(),\n    isCI: ciEnv.isCI,\n    version: strapi.config.get('info.strapi'),\n    useTypescriptOnServer: tsUtils.isUsingTypeScriptSync(serverRootPath),\n    useTypescriptOnAdmin: tsUtils.isUsingTypeScriptSync(adminRootPath),\n    projectId: uuid,\n    isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',\n  };\n\n  addPackageJsonStrapiMetadata(anonymousGroupProperties, strapi);\n\n  return async (event: string, payload: Payload = {}, opts = {}) => {\n    const userId = generateAdminUserHash(strapi);\n\n    const reqParams = {\n      method: 'POST',\n      body: JSON.stringify({\n        event,\n        userId,\n        deviceId,\n        eventProperties: payload.eventProperties,\n        userProperties: userId ? { ...anonymousUserProperties, ...payload.userProperties } : {},\n        groupProperties: {\n          ...anonymousGroupProperties,\n          projectType: strapi.EE ? 'Enterprise' : 'Community',\n          ...payload.groupProperties,\n        },\n      }),\n      ..._.merge({ headers: { 'X-Strapi-Event': event } }, defaultQueryOpts, opts),\n    };\n\n    try {\n      const res = await strapi.fetch(`${ANALYTICS_URI}/api/v2/track`, reqParams);\n      return res.ok;\n    } catch (err) {\n      return false;\n    }\n  };\n};\n"],"names":["machineID"],"mappings":";;;;;;;;;AAuBA,MAAM,mBAAmB;AAAA,EACvB,SAAS;AAAA,EACT,SAAS,EAAE,gBAAgB,mBAAmB;AAChD;AAEA,MAAM,gBAAgB;AAKtB,MAAM,+BAA+B,CAAC,UAAmC,WAAmB;AAC1F,QAAM,EAAE,oBAAoB,CAAA,MAAO,OAAO;AAExC,IAAA,SAAS,UAAU,iBAAiB;AACxC;AAKA,MAAe,eAAA,CAAC,WAA2B;AACnC,QAAA,EAAE,KAAK,IAAI,OAAO;AACxB,QAAM,WAAWA;AAEX,QAAA,iBAAiB,OAAO,KAAK,IAAI;AACjC,QAAA,gBAAgB,KAAK,KAAK,OAAO,KAAK,IAAI,MAAM,OAAO,OAAO;AAEpE,QAAM,0BAA0B;AAAA,IAC9B,aAAa,OAAO,OAAO;AAAA,IAC3B,IAAI,GAAG,KAAK;AAAA,IACZ,YAAY,GAAG,SAAS;AAAA,IACxB,QAAQ,GAAG,KAAK;AAAA,IAChB,WAAW,GAAG,QAAQ;AAAA,IACtB,aAAa,QAAQ,SAAS;AAAA,EAAA;AAGhC,QAAM,2BAA2B;AAAA,IAC/B,QAAQ,QAAQ,IAAI,UAAU,SAAS;AAAA,IACvC,MAAM,MAAM;AAAA,IACZ,SAAS,OAAO,OAAO,IAAI,aAAa;AAAA,IACxC,uBAAuB,QAAQ,sBAAsB,cAAc;AAAA,IACnE,sBAAsB,QAAQ,sBAAsB,aAAa;AAAA,IACjE,WAAW;AAAA,IACX,uBAAuB,IAAI,kBAAkB,IAAI,MAAM;AAAA,EAAA;AAGzD,+BAA6B,0BAA0B,MAAM;AAE7D,SAAO,OAAO,OAAe,UAAmB,CAAA,GAAI,OAAO,CAAA,MAAO;AAC1D,UAAA,SAAS,sBAAsB,MAAM;AAE3C,UAAM,YAAY;AAAA,MAChB,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,QAAQ;AAAA,QACzB,gBAAgB,SAAS,EAAE,GAAG,yBAAyB,GAAG,QAAQ,eAAe,IAAI,CAAC;AAAA,QACtF,iBAAiB;AAAA,UACf,GAAG;AAAA,UACH,aAAa,OAAO,KAAK,eAAe;AAAA,UACxC,GAAG,QAAQ;AAAA,QACb;AAAA,MAAA,CACD;AAAA,MACD,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,MAAM,EAAA,GAAK,kBAAkB,IAAI;AAAA,IAAA;AAGzE,QAAA;AACF,YAAM,MAAM,MAAM,OAAO,MAAM,GAAG,aAAa,iBAAiB,SAAS;AACzE,aAAO,IAAI;AAAA,aACJ,KAAK;AACL,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}