{"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, generateInstallId } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\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\n/**\n * Add properties from the package.json strapi key in the metadata\n */\nconst addPackageJsonStrapiMetadata = (metadata: Record<string, unknown>, strapi: Core.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 metadata\n */\nexport default (strapi: Core.Strapi): Sender => {\n  const { uuid, installId: installIdFromPackageJson } = strapi.config;\n\n  const installId = generateInstallId(uuid, installIdFromPackageJson);\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    aiLicenseKey: env('STRAPI_ADMIN_AI_LICENSE', null),\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        installId,\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 analyticsUrl = env('STRAPI_ANALYTICS_URL', 'https://analytics.strapi.io');\n      const res = await strapi.fetch(`${analyticsUrl}/api/v2/track`, reqParams);\n      return res.ok;\n    } catch (err) {\n      return false;\n    }\n  };\n};\n"],"names":["defaultQueryOpts","timeout","headers","addPackageJsonStrapiMetadata","metadata","strapi","packageJsonStrapi","config","_","defaults","uuid","installId","installIdFromPackageJson","generateInstallId","serverRootPath","dirs","app","root","adminRootPath","path","join","anonymousUserProperties","environment","os","type","osPlatform","platform","osArch","arch","osRelease","release","nodeVersion","process","versions","node","anonymousGroupProperties","docker","env","DOCKER","isDocker","isCI","ciEnv","version","get","useTypescriptOnServer","tsUtils","isUsingTypeScriptSync","useTypescriptOnAdmin","projectId","isHostedOnStrapiCloud","aiLicenseKey","event","payload","opts","userId","generateAdminUserHash","reqParams","method","body","JSON","stringify","eventProperties","userProperties","groupProperties","projectType","EE","merge","analyticsUrl","res","fetch","ok","err"],"mappings":"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"}