1{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUserStatePath } from '@expo/config/build/getUserState';\nimport JsonFile from '@expo/json-file';\nimport TelemetryClient from '@expo/rudder-sdk-node';\nimport crypto from 'crypto';\nimport { boolish } from 'getenv';\nimport os from 'os';\n\nimport { CommandOptions } from './types';\n\nconst packageJson = require('../package.json');\n\n/** If telemetry is disabled by the user */\nconst EXPO_NO_TELEMETRY = boolish('EXPO_NO_TELEMETRY', false);\n/** If the tool is running in a sanboxed environment, either staging or local envs */\nconst EXPO_SANDBOX = boolish('EXPO_STAGING', false) || boolish('EXPO_LOCAL', false);\n\n/** The telemetry client instance to use */\nlet client: TelemetryClient | null = null;\n/** The anonymous identity ID */\nlet telemetryId: string | null = null;\n\nexport function getTelemetryClient() {\n  if (!client) {\n    client = new TelemetryClient(\n      EXPO_SANDBOX ? '24TKICqYKilXM480mA7ktgVDdea' : '24TKR7CQAaGgIrLTgu3Fp4OdOkI', // expo unified,\n      'https://cdp.expo.dev/v1/batch',\n      {\n        flushInterval: 300,\n      }\n    );\n\n    // Empty the telemetry queue on exit\n    process.on('SIGINT', () => client?.flush?.());\n    process.on('SIGTERM', () => client?.flush?.());\n  }\n\n  return client;\n}\n\n/** Get the randomly generated anonymous ID from the persistent storage, see @expo/cli */\nasync function getTelemetryIdAsync() {\n  const settings = new JsonFile<{ uuid?: string }>(getUserStatePath(), {\n    ensureDir: true,\n    jsonParseErrorDefault: {},\n    cantReadFileDefault: {},\n  });\n\n  let id = await settings.getAsync('uuid', null);\n\n  if (!id) {\n    id = crypto.randomUUID();\n    await settings.setAsync('uuid', id);\n  }\n\n  return id;\n}\n\nfunction getTelemetryContext() {\n  const PLATFORM_NAMES: Partial<Record<NodeJS.Platform, string>> = {\n    darwin: 'Mac',\n    win32: 'Windows',\n    linux: 'Linux',\n  };\n\n  return {\n    os: { name: PLATFORM_NAMES[os.platform()] ?? os.platform(), version: os.release() },\n    app: { name: 'create-expo-module', version: packageJson.version ?? undefined },\n  };\n}\n\ntype Event = {\n  event: 'create expo module';\n  properties: Record<string, any>;\n};\n\nexport async function logEventAsync(event: Event) {\n  if (EXPO_NO_TELEMETRY) {\n    return;\n  }\n\n  if (!telemetryId) {\n    telemetryId = await getTelemetryIdAsync();\n    getTelemetryClient().identify({ anonymousId: telemetryId });\n  }\n\n  const commonProperties = {\n    source: 'create-expo-module',\n    source_version: packageJson.version ?? undefined,\n  };\n\n  getTelemetryClient().track({\n    ...event,\n    properties: { ...event.properties, ...commonProperties },\n    anonymousId: telemetryId,\n    context: getTelemetryContext(),\n  });\n}\n\nexport function eventCreateExpoModule(packageManager: string, options: CommandOptions) {\n  return {\n    event: 'create expo module' as const, // DO NOT EDIT, unless knowing what you are doing\n    properties: {\n      nodeVersion: process.version,\n      packageManager,\n      withTemplate: !!options.source,\n      withReadme: options.withReadme,\n      withChangelog: options.withChangelog,\n      withExample: options.example,\n      local: !!options.local,\n    },\n  };\n}\n"]}