{"version":3,"file":"impl-BwuWn3TM.mjs","names":[],"sources":["../src/commands/inventory/pull-unstructured-discovery-files/impl.ts"],"sourcesContent":["import type { UnstructuredSubDataPointRecommendationStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient } from '@transcend-io/sdk';\nimport colors from 'colors';\nimport { uniq } from 'lodash-es';\n\nimport type { LocalContext } from '../../../context.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { pullUnstructuredSubDataPointRecommendations } from '../../../lib/data-inventory/index.js';\nimport { writeLargeCsv } from '../../../lib/helpers/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface PullUnstructuredDiscoveryFilesCommandFlags {\n  auth: string;\n  file: string;\n  transcendUrl: string;\n  dataSiloIds?: string[];\n  subCategories?: string[];\n  status?: UnstructuredSubDataPointRecommendationStatus[];\n  includeEncryptedSnippets: boolean;\n}\n\nexport async function pullUnstructuredDiscoveryFiles(\n  this: LocalContext,\n  {\n    auth,\n    file,\n    transcendUrl,\n    dataSiloIds,\n    subCategories,\n    status,\n    includeEncryptedSnippets,\n  }: PullUnstructuredDiscoveryFilesCommandFlags,\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 entries = await pullUnstructuredSubDataPointRecommendations(client, {\n      dataSiloIds,\n      subCategories, // TODO: https://transcend.height.app/T-40482 - do by name not ID\n      status,\n      includeEncryptedSnippets,\n    });\n\n    logger.info(colors.magenta(`Writing unstructured discovery files to file \"${file}\"...`));\n    let headers: string[] = [];\n    const inputs = entries.map((entry) => {\n      const result = {\n        'Entry ID': entry.id,\n        'Data Silo ID': entry.dataSiloId,\n        'Object Path ID': entry.scannedObjectPathId,\n        'Object ID': entry.scannedObjectId,\n        ...(includeEncryptedSnippets\n          ? { Entry: entry.name, 'Context Snippet': entry.contextSnippet }\n          : {}),\n        'Data Category': `${entry.dataSubCategory.category}:${entry.dataSubCategory.name}`,\n        'Classification Status': entry.status,\n        'Confidence Score': entry.confidence,\n        'Classification Method': entry.classificationMethod,\n        'Classifier Version': entry.classifierVersion,\n      };\n      headers = uniq([...headers, ...Object.keys(result)]);\n      return result;\n    });\n    await writeLargeCsv(file, inputs, headers);\n  } catch (err) {\n    logger.error(\n      colors.red(`An error occurred syncing the unstructured discovery files: ${err.message}`),\n    );\n    this.process.exit(1);\n  }\n\n  // Indicate success\n  logger.info(colors.green(`Successfully synced unstructured discovery files to disk at ${file}!`));\n}\n"],"mappings":"gVAqBA,eAAsB,EAEpB,CACE,OACA,OACA,eACA,cACA,gBACA,SACA,4BAEa,CACf,EAAoB,KAAK,QAAQ,KAAK,CAEtC,GAAI,CAIF,IAAM,EAAU,MAAM,EAFP,EAA4B,EAAc,EAEe,CAAE,CACxE,cACA,gBACA,SACA,2BACD,CAAC,CAEF,EAAO,KAAK,EAAO,QAAQ,iDAAiD,EAAK,MAAM,CAAC,CACxF,IAAI,EAAoB,EAAE,CAmB1B,MAAM,EAAc,EAlBL,EAAQ,IAAK,GAAU,CACpC,IAAM,EAAS,CACb,WAAY,EAAM,GAClB,eAAgB,EAAM,WACtB,iBAAkB,EAAM,oBACxB,YAAa,EAAM,gBACnB,GAAI,EACA,CAAE,MAAO,EAAM,KAAM,kBAAmB,EAAM,eAAgB,CAC9D,EAAE,CACN,gBAAiB,GAAG,EAAM,gBAAgB,SAAS,GAAG,EAAM,gBAAgB,OAC5E,wBAAyB,EAAM,OAC/B,mBAAoB,EAAM,WAC1B,wBAAyB,EAAM,qBAC/B,qBAAsB,EAAM,kBAC7B,CAED,MADA,GAAU,EAAK,CAAC,GAAG,EAAS,GAAG,OAAO,KAAK,EAAO,CAAC,CAAC,CAC7C,GAEuB,CAAE,EAAQ,OACnC,EAAK,CACZ,EAAO,MACL,EAAO,IAAI,+DAA+D,EAAI,UAAU,CACzF,CACD,KAAK,QAAQ,KAAK,EAAE,CAItB,EAAO,KAAK,EAAO,MAAM,+DAA+D,EAAK,GAAG,CAAC"}