{"version":3,"file":"markRequestDataSiloIdsCompleted-BQysGnE4.mjs","names":[],"sources":["../src/lib/cron/markRequestDataSiloIdsCompleted.ts"],"sourcesContent":["import { RequestDataSiloStatus } from '@transcend-io/privacy-types';\nimport {\n  buildTranscendGraphQLClient,\n  makeGraphQLRequest,\n  CHANGE_REQUEST_DATA_SILO_STATUS,\n  fetchRequestDataSilo,\n} from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport cliProgress from 'cli-progress';\nimport colors from 'colors';\n\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\n\n/**\n * Given a CSV of Request IDs, mark associated RequestDataSilos as completed\n *\n * @param options - Options\n * @returns Number of items marked as completed\n */\nexport async function markRequestDataSiloIdsCompleted({\n  requestIds,\n  dataSiloId,\n  auth,\n  concurrency = 100,\n  status = RequestDataSiloStatus.Resolved,\n  transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n  /** The list of request ids to mark as completed  */\n  requestIds: string[];\n  /** Transcend API key authentication */\n  auth: string;\n  /** Data Silo ID to pull down jobs for */\n  dataSiloId: string;\n  /** Status to update requests to */\n  status?: RequestDataSiloStatus;\n  /** Upload concurrency */\n  concurrency?: number;\n  /** API URL for Transcend backend */\n  transcendUrl?: string;\n}): Promise<number> {\n  // Find all requests made before createdAt that are in a removing data state\n  const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n  // Time duration\n  const t0 = new Date().getTime();\n  // create a new progress bar instance and use shades_classic theme\n  const progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\n  // Notify Transcend\n  logger.info(\n    colors.magenta(\n      `Notifying Transcend for data silo \"${dataSiloId}\" marking \"${requestIds.length}\" requests as completed.`,\n    ),\n  );\n\n  let total = 0;\n  progressBar.start(requestIds.length, 0);\n  await map(\n    requestIds,\n    async (requestId) => {\n      const requestDataSilo = await fetchRequestDataSilo(client, {\n        logger,\n        filterBy: { requestId, dataSiloId },\n      });\n\n      try {\n        await makeGraphQLRequest<{\n          /** Whether we successfully uploaded the results */\n          success: boolean;\n        }>(client, CHANGE_REQUEST_DATA_SILO_STATUS, {\n          variables: {\n            requestDataSiloId: requestDataSilo.id,\n            status,\n          },\n          logger,\n        });\n      } catch (err) {\n        if (\n          !err.message.includes('Client error: Request must be active:') &&\n          !err.message.includes('Failed to find RequestDataSilo')\n        ) {\n          throw err;\n        }\n      }\n\n      total += 1;\n      progressBar.update(total);\n    },\n    { concurrency },\n  );\n\n  progressBar.stop();\n  const t1 = new Date().getTime();\n  const totalTime = t1 - t0;\n\n  logger.info(colors.green(`Successfully notified Transcend in \"${totalTime / 1000}\" seconds!`));\n  return requestIds.length;\n}\n"],"mappings":"yYAoBA,eAAsB,EAAgC,CACpD,aACA,aACA,OACA,cAAc,IACd,SAAS,EAAsB,SAC/B,eAAe,GAcG,CAElB,IAAM,EAAS,EAA4B,EAAc,EAAK,CAGxD,EAAK,IAAI,MAAM,CAAC,SAAS,CAEzB,EAAc,IAAI,EAAY,UAAU,EAAE,CAAE,EAAY,QAAQ,eAAe,CAGrF,EAAO,KACL,EAAO,QACL,sCAAsC,EAAW,aAAa,EAAW,OAAO,0BACjF,CACF,CAED,IAAI,EAAQ,EACZ,EAAY,MAAM,EAAW,OAAQ,EAAE,CACvC,MAAM,EACJ,EACA,KAAO,IAAc,CACnB,IAAM,EAAkB,MAAM,EAAqB,EAAQ,CACzD,SACA,SAAU,CAAE,YAAW,aAAY,CACpC,CAAC,CAEF,GAAI,CACF,MAAM,EAGH,EAAQ,EAAiC,CAC1C,UAAW,CACT,kBAAmB,EAAgB,GACnC,SACD,CACD,SACD,CAAC,OACK,EAAK,CACZ,GACE,CAAC,EAAI,QAAQ,SAAS,wCAAwC,EAC9D,CAAC,EAAI,QAAQ,SAAS,iCAAiC,CAEvD,MAAM,EAIV,GAAS,EACT,EAAY,OAAO,EAAM,EAE3B,CAAE,cAAa,CAChB,CAED,EAAY,MAAM,CAElB,IAAM,EADK,IAAI,MAAM,CAAC,SACF,CAAG,EAGvB,OADA,EAAO,KAAK,EAAO,MAAM,uCAAuC,EAAY,IAAK,YAAY,CAAC,CACvF,EAAW"}