{"version":3,"file":"impl-DvjEDoWg.mjs","names":[],"sources":["../src/commands/inventory/pull-datapoints/impl.ts"],"sourcesContent":["import { DataCategoryType } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient } from '@transcend-io/sdk';\nimport colors from 'colors';\nimport { uniq, groupBy } from 'lodash-es';\n\nimport { ADMIN_DASH_DATAPOINTS } from '../../../constants.js';\nimport type { LocalContext } from '../../../context.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { pullAllDatapoints } from '../../../lib/data-inventory/index.js';\nimport { writeLargeCsv } from '../../../lib/helpers/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface PullDatapointsCommandFlags {\n  auth: string;\n  file: string;\n  transcendUrl: string;\n  dataSiloIds?: string[];\n  includeAttributes: boolean;\n  includeGuessedCategories: boolean;\n  parentCategories?: DataCategoryType[];\n  subCategories?: string[];\n}\n\nexport async function pullDatapoints(\n  this: LocalContext,\n  {\n    auth,\n    file,\n    transcendUrl,\n    dataSiloIds,\n    includeAttributes,\n    includeGuessedCategories,\n    parentCategories,\n    subCategories = [],\n  }: PullDatapointsCommandFlags,\n): Promise<void> {\n  doneInputValidation(this.process.exit);\n\n  try {\n    // Create a GraphQL client\n    const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n    const dataPoints = await pullAllDatapoints(client, {\n      dataSiloIds,\n      includeGuessedCategories,\n      parentCategories,\n      includeAttributes,\n      subCategories, // TODO: https://transcend.height.app/T-40482 - do by name not ID\n    });\n\n    logger.info(colors.magenta(`Writing datapoints to file \"${file}\"...`));\n    let headers: string[] = [];\n    const inputs = dataPoints.map((point) => {\n      const result = {\n        'Property ID': point.id,\n        'Data Silo': point.dataSilo.title,\n        Object: point.dataPoint.name,\n        'Object Path': point.dataPoint.path.join('.'),\n        Property: point.name,\n        'Property Description': point.description,\n        'Data Categories': point.categories\n          .map((category) => `${category.category}:${category.name}`)\n          .join(', '),\n        'Guessed Category': point.pendingCategoryGuesses?.[0]\n          ? `${point.pendingCategoryGuesses![0]!.category.category}:${\n              point.pendingCategoryGuesses![0]!.category.name\n            }`\n          : '',\n        'Processing Purposes': point.purposes\n          .map((purpose) => `${purpose.purpose}:${purpose.name}`)\n          .join(', '),\n        ...Object.entries(\n          groupBy(point.attributeValues || [], ({ attributeKey }) => attributeKey.name),\n        ).reduce(\n          (acc, [key, values]) => {\n            acc[key] = values.map((value) => value.name).join(',');\n            return acc;\n          },\n          {} as Record<string, string>,\n        ),\n      };\n      headers = uniq([...headers, ...Object.keys(result)]);\n      return result;\n    });\n    await writeLargeCsv(file, inputs, headers);\n  } catch (err) {\n    logger.error(colors.red(`An error occurred syncing the datapoints: ${err.message}`));\n    this.process.exit(1);\n  }\n\n  // Indicate success\n  logger.info(\n    colors.green(\n      `Successfully synced datapoints to disk at ${file}! View at ${ADMIN_DASH_DATAPOINTS}`,\n    ),\n  );\n}\n"],"mappings":"gXAuBA,eAAsB,EAEpB,CACE,OACA,OACA,eACA,cACA,oBACA,2BACA,mBACA,gBAAgB,EAAE,EAEL,CACf,EAAoB,KAAK,QAAQ,KAAK,CAEtC,GAAI,CAIF,IAAM,EAAa,MAAM,EAFV,EAA4B,EAAc,EAER,CAAE,CACjD,cACA,2BACA,mBACA,oBACA,gBACD,CAAC,CAEF,EAAO,KAAK,EAAO,QAAQ,+BAA+B,EAAK,MAAM,CAAC,CACtE,IAAI,EAAoB,EAAE,CAiC1B,MAAM,EAAc,EAhCL,EAAW,IAAK,GAAU,CACvC,IAAM,EAAS,CACb,cAAe,EAAM,GACrB,YAAa,EAAM,SAAS,MAC5B,OAAQ,EAAM,UAAU,KACxB,cAAe,EAAM,UAAU,KAAK,KAAK,IAAI,CAC7C,SAAU,EAAM,KAChB,uBAAwB,EAAM,YAC9B,kBAAmB,EAAM,WACtB,IAAK,GAAa,GAAG,EAAS,SAAS,GAAG,EAAS,OAAO,CAC1D,KAAK,KAAK,CACb,mBAAoB,EAAM,yBAAyB,GAC/C,GAAG,EAAM,uBAAwB,GAAI,SAAS,SAAS,GACrD,EAAM,uBAAwB,GAAI,SAAS,OAE7C,GACJ,sBAAuB,EAAM,SAC1B,IAAK,GAAY,GAAG,EAAQ,QAAQ,GAAG,EAAQ,OAAO,CACtD,KAAK,KAAK,CACb,GAAG,OAAO,QACR,EAAQ,EAAM,iBAAmB,EAAE,EAAG,CAAE,kBAAmB,EAAa,KAAK,CAC9E,CAAC,QACC,EAAK,CAAC,EAAK,MACV,EAAI,GAAO,EAAO,IAAK,GAAU,EAAM,KAAK,CAAC,KAAK,IAAI,CAC/C,GAET,EAAE,CACH,CACF,CAED,MADA,GAAU,EAAK,CAAC,GAAG,EAAS,GAAG,OAAO,KAAK,EAAO,CAAC,CAAC,CAC7C,GAEuB,CAAE,EAAQ,OACnC,EAAK,CACZ,EAAO,MAAM,EAAO,IAAI,6CAA6C,EAAI,UAAU,CAAC,CACpF,KAAK,QAAQ,KAAK,EAAE,CAItB,EAAO,KACL,EAAO,MACL,6CAA6C,EAAK,YAAY,IAC/D,CACF"}