{"version":3,"file":"impl-VAGhrv8_.mjs","names":[],"sources":["../src/commands/inventory/pull/impl.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { join } from 'node:path';\n\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient } from '@transcend-io/sdk';\nimport { mapSeries } from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport { ADMIN_DASH_INTEGRATIONS } from '../../../constants.js';\nimport type { LocalContext } from '../../../context.js';\nimport { TranscendPullResource } from '../../../enums.js';\nimport { validateTranscendAuth } from '../../../lib/api-keys/index.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { pullTranscendConfiguration } from '../../../lib/graphql/index.js';\nimport { writeTranscendYaml } from '../../../lib/readTranscendYaml.js';\nimport { logger } from '../../../logger.js';\nimport { DEFAULT_CONSENT_TRACKER_STATUSES, DEFAULT_TRANSCEND_PULL_RESOURCES } from './command.js';\n\nexport interface PullCommandFlags {\n  auth: string;\n  resources?: (TranscendPullResource | 'all')[];\n  file: string;\n  transcendUrl: string;\n  dataSiloIds?: string[];\n  integrationNames?: string[];\n  trackerStatuses?: ConsentTrackerStatus[];\n  pageSize: number;\n  skipDatapoints: boolean;\n  skipSubDatapoints: boolean;\n  includeGuessedCategories: boolean;\n  debug: boolean;\n}\n\nexport async function pull(\n  this: LocalContext,\n  {\n    auth,\n    resources = DEFAULT_TRANSCEND_PULL_RESOURCES,\n    file,\n    transcendUrl,\n    dataSiloIds = [],\n    integrationNames = [],\n    trackerStatuses = DEFAULT_CONSENT_TRACKER_STATUSES,\n    pageSize,\n    skipDatapoints,\n    skipSubDatapoints,\n    includeGuessedCategories,\n    debug,\n  }: PullCommandFlags,\n): Promise<void> {\n  doneInputValidation(this.process.exit);\n\n  // Parse authentication as API key or path to list of API keys\n  const apiKeyOrList = await validateTranscendAuth(auth);\n\n  const resourcesToPull: TranscendPullResource[] = resources.includes('all')\n    ? Object.values(TranscendPullResource)\n    : (resources as TranscendPullResource[]);\n\n  // Sync to Disk\n  if (typeof apiKeyOrList === 'string') {\n    try {\n      // Create a GraphQL client\n      const client = buildTranscendGraphQLClient(transcendUrl, apiKeyOrList);\n\n      const configuration = await pullTranscendConfiguration(client, {\n        dataSiloIds,\n        integrationNames,\n        resources: resourcesToPull,\n        pageSize,\n        debug,\n        skipDatapoints,\n        skipSubDatapoints,\n        includeGuessedCategories,\n        trackerStatuses,\n      });\n\n      logger.info(colors.magenta(`Writing configuration to file \"${file}\"...`));\n      writeTranscendYaml(file, configuration);\n    } catch (err) {\n      logger.error(\n        colors.red(`An error occurred syncing the schema: ${debug ? err.stack : err.message}`),\n      );\n      this.process.exit(1);\n    }\n\n    // Indicate success\n    logger.info(\n      colors.green(\n        `Successfully synced yaml file to disk at ${file}! View at ${ADMIN_DASH_INTEGRATIONS}`,\n      ),\n    );\n  } else {\n    if (!fs.lstatSync(file).isDirectory()) {\n      throw new Error(\n        'File is expected to be a folder when passing in a list of API keys to pull from. e.g. --file=./working/',\n      );\n    }\n\n    const encounteredErrors: string[] = [];\n    await mapSeries(apiKeyOrList, async (apiKey, ind) => {\n      const prefix = `[${ind + 1}/${apiKeyOrList.length}][${apiKey.organizationName}] `;\n      logger.info(colors.magenta(`~~~\\n\\n${prefix}Attempting to pull configuration...\\n\\n~~~`));\n\n      // Create a GraphQL client\n      const client = buildTranscendGraphQLClient(transcendUrl, apiKey.apiKey);\n\n      try {\n        const configuration = await pullTranscendConfiguration(client, {\n          dataSiloIds,\n          integrationNames,\n          resources: resourcesToPull,\n          pageSize,\n          debug,\n          skipDatapoints,\n          skipSubDatapoints,\n          includeGuessedCategories,\n          trackerStatuses,\n        });\n\n        const filePath = join(file, `${apiKey.organizationName}.yml`);\n        logger.info(colors.magenta(`Writing configuration to file \"${filePath}\"...`));\n        writeTranscendYaml(filePath, configuration);\n\n        logger.info(colors.green(`${prefix}Successfully pulled configuration!`));\n      } catch (err) {\n        logger.error(colors.red(`${prefix}Failed to sync configuration. - ${err.message}`));\n        encounteredErrors.push(apiKey.organizationName);\n      }\n    });\n\n    if (encounteredErrors.length > 0) {\n      logger.info(\n        colors.red(\n          `Sync encountered errors for \"${encounteredErrors.join(\n            ',',\n          )}\". View output above for more information, or check out ${ADMIN_DASH_INTEGRATIONS}`,\n        ),\n      );\n\n      this.process.exit(1);\n    }\n  }\n}\n"],"mappings":"2kBAiCA,eAAsB,EAEpB,CACE,OACA,YAAY,EACZ,OACA,eACA,cAAc,EAAE,CAChB,mBAAmB,EAAE,CACrB,kBAAkB,EAClB,WACA,iBACA,oBACA,2BACA,SAEa,CACf,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAe,MAAM,EAAsB,EAAK,CAEhD,EAA2C,EAAU,SAAS,MAAM,CACtE,OAAO,OAAO,EAAsB,CACnC,EAGL,GAAI,OAAO,GAAiB,SAAU,CACpC,GAAI,CAIF,IAAM,EAAgB,MAAM,EAFb,EAA4B,EAAc,EAEI,CAAE,CAC7D,cACA,mBACA,UAAW,EACX,WACA,QACA,iBACA,oBACA,2BACA,kBACD,CAAC,CAEF,EAAO,KAAK,EAAO,QAAQ,kCAAkC,EAAK,MAAM,CAAC,CACzE,EAAmB,EAAM,EAAc,OAChC,EAAK,CACZ,EAAO,MACL,EAAO,IAAI,yCAAyC,EAAQ,EAAI,MAAQ,EAAI,UAAU,CACvF,CACD,KAAK,QAAQ,KAAK,EAAE,CAItB,EAAO,KACL,EAAO,MACL,4CAA4C,EAAK,YAAY,IAC9D,CACF,KACI,CACL,GAAI,CAAC,EAAG,UAAU,EAAK,CAAC,aAAa,CACnC,MAAU,MACR,0GACD,CAGH,IAAM,EAA8B,EAAE,CACtC,MAAM,EAAU,EAAc,MAAO,EAAQ,IAAQ,CACnD,IAAM,EAAS,IAAI,EAAM,EAAE,GAAG,EAAa,OAAO,IAAI,EAAO,iBAAiB,IAC9E,EAAO,KAAK,EAAO,QAAQ,UAAU,EAAO,4CAA4C,CAAC,CAGzF,IAAM,EAAS,EAA4B,EAAc,EAAO,OAAO,CAEvE,GAAI,CACF,IAAM,EAAgB,MAAM,EAA2B,EAAQ,CAC7D,cACA,mBACA,UAAW,EACX,WACA,QACA,iBACA,oBACA,2BACA,kBACD,CAAC,CAEI,EAAW,EAAK,EAAM,GAAG,EAAO,iBAAiB,MAAM,CAC7D,EAAO,KAAK,EAAO,QAAQ,kCAAkC,EAAS,MAAM,CAAC,CAC7E,EAAmB,EAAU,EAAc,CAE3C,EAAO,KAAK,EAAO,MAAM,GAAG,EAAO,oCAAoC,CAAC,OACjE,EAAK,CACZ,EAAO,MAAM,EAAO,IAAI,GAAG,EAAO,kCAAkC,EAAI,UAAU,CAAC,CACnF,EAAkB,KAAK,EAAO,iBAAiB,GAEjD,CAEE,EAAkB,OAAS,IAC7B,EAAO,KACL,EAAO,IACL,gCAAgC,EAAkB,KAChD,IACD,CAAC,0DAA0D,IAC7D,CACF,CAED,KAAK,QAAQ,KAAK,EAAE"}