{"version":3,"file":"skipRequestDataSilos-B6GoQLxk.mjs","names":[],"sources":["../src/lib/requests/skipRequestDataSilos.ts"],"sourcesContent":["import { RequestAction, RequestStatus } from '@transcend-io/privacy-types';\nimport {\n  buildTranscendGraphQLClient,\n  makeGraphQLRequest,\n  CHANGE_REQUEST_DATA_SILO_STATUS,\n  fetchRequestDataSilos,\n  fetchRequestDataSilosCount,\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 data silo ID, mark all open request data silos as skipped\n *\n * @param options - Options\n * @returns Number of items skipped\n */\nexport async function skipRequestDataSilos({\n  dataSiloId,\n  auth,\n  concurrency = 50,\n  status = 'SKIPPED',\n  transcendUrl = DEFAULT_TRANSCEND_API,\n  requestStatuses = [RequestStatus.Compiling, RequestStatus.Secondary],\n  actionTypes = [],\n}: {\n  /** Transcend API key authentication */\n  auth: string;\n  /** Data Silo ID to pull down jobs for */\n  dataSiloId: string;\n  /** Status to set */\n  status?: 'SKIPPED' | 'RESOLVED';\n  /** Upload concurrency */\n  concurrency?: number;\n  /** API URL for Transcend backend */\n  transcendUrl?: string;\n  /** Request statuses to mark as completed */\n  requestStatuses?: RequestStatus[];\n  /** Request action types to filter on */\n  actionTypes?: RequestAction[];\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\n  // Determine total number of request data silos\n  const requestDataSiloCount = await fetchRequestDataSilosCount(client, {\n    logger,\n    filterBy: { dataSiloId, requestStatuses },\n  });\n  logger.info(\n    colors.magenta(\n      `Marking ${requestDataSiloCount} request data silos as completed${actionTypes.length > 0 ? ` for action types: ${actionTypes.join(',')}` : ''}`,\n    ),\n  );\n\n  // create a new progress bar instance and use shades_classic theme\n  const progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\n  let total = 0;\n  progressBar.start(requestDataSiloCount, 0);\n\n  // Fetch all matching request data silos, updating progress as pages are fetched\n  const requestDataSilos = await fetchRequestDataSilos(client, {\n    logger,\n    filterBy: { dataSiloId, requestStatuses },\n    onProgress: (numFetched) => {\n      total += numFetched / 2;\n      progressBar.update(total);\n    },\n  });\n\n  await map(\n    requestDataSilos,\n    async (requestDataSilo) => {\n      if (actionTypes.length === 0 || actionTypes.includes(requestDataSilo.request.type)) {\n        try {\n          await makeGraphQLRequest<{\n            /** Whether we successfully uploaded the results */\n            success: boolean;\n          }>(client, CHANGE_REQUEST_DATA_SILO_STATUS, {\n            variables: { requestDataSiloId: requestDataSilo.id, status },\n            logger,\n          });\n        } catch (err) {\n          if (!err.message.includes('Client error: Request must be active:')) {\n            throw err;\n          }\n        }\n      }\n\n      total += 0.5;\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(\n    colors.green(\n      `Successfully skipped \"${requestDataSiloCount}\" requests in \"${totalTime / 1000}\" seconds!`,\n    ),\n  );\n  return requestDataSiloCount;\n}\n"],"mappings":"kaAqBA,eAAsB,EAAqB,CACzC,aACA,OACA,cAAc,GACd,SAAS,UACT,eAAe,EACf,kBAAkB,CAAC,EAAc,UAAW,EAAc,UAAU,CACpE,cAAc,EAAE,EAgBE,CAElB,IAAM,EAAS,EAA4B,EAAc,EAAK,CAGxD,EAAK,IAAI,MAAM,CAAC,SAAS,CAGzB,EAAuB,MAAM,EAA2B,EAAQ,CACpE,SACA,SAAU,CAAE,aAAY,kBAAiB,CAC1C,CAAC,CACF,EAAO,KACL,EAAO,QACL,WAAW,EAAqB,kCAAkC,EAAY,OAAS,EAAI,sBAAsB,EAAY,KAAK,IAAI,GAAK,KAC5I,CACF,CAGD,IAAM,EAAc,IAAI,EAAY,UAAU,EAAE,CAAE,EAAY,QAAQ,eAAe,CAEjF,EAAQ,EACZ,EAAY,MAAM,EAAsB,EAAE,CAY1C,MAAM,EACJ,MAV6B,EAAsB,EAAQ,CAC3D,SACA,SAAU,CAAE,aAAY,kBAAiB,CACzC,WAAa,GAAe,CAC1B,GAAS,EAAa,EACtB,EAAY,OAAO,EAAM,EAE5B,CAAC,CAIA,KAAO,IAAoB,CACzB,GAAI,EAAY,SAAW,GAAK,EAAY,SAAS,EAAgB,QAAQ,KAAK,CAChF,GAAI,CACF,MAAM,EAGH,EAAQ,EAAiC,CAC1C,UAAW,CAAE,kBAAmB,EAAgB,GAAI,SAAQ,CAC5D,SACD,CAAC,OACK,EAAK,CACZ,GAAI,CAAC,EAAI,QAAQ,SAAS,wCAAwC,CAChE,MAAM,EAKZ,GAAS,GACT,EAAY,OAAO,EAAM,EAE3B,CAAE,cAAa,CAChB,CAED,EAAY,MAAM,CAElB,IAAM,EADK,IAAI,MAAM,CAAC,SACF,CAAG,EAOvB,OALA,EAAO,KACL,EAAO,MACL,yBAAyB,EAAqB,iBAAiB,EAAY,IAAK,YACjF,CACF,CACM"}