{"version":3,"file":"bulkRetryEnrichers-DxAlkvdF.mjs","names":[],"sources":["../src/lib/requests/bulkRetryEnrichers.ts"],"sourcesContent":["import { RequestAction, RequestEnricherStatus, RequestStatus } from '@transcend-io/privacy-types';\nimport {\n  buildTranscendGraphQLClient,\n  fetchAllRequestEnrichers,\n  retryRequestEnricher,\n} from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport cliProgress from 'cli-progress';\nimport colors from 'colors';\nimport { difference } from 'lodash-es';\n\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { fetchAllRequests } from '../graphql/index.js';\n\n/**\n * Restart a bunch of request enrichers\n *\n * @param options - Options\n */\nexport async function bulkRetryEnrichers({\n  auth,\n  requestActions = [],\n  createdAtBefore,\n  createdAtAfter,\n  updatedAtBefore,\n  updatedAtAfter,\n  transcendUrl = DEFAULT_TRANSCEND_API,\n  requestEnricherStatuses = Object.values(RequestEnricherStatus),\n  requestIds = [],\n  enricherId,\n  concurrency = 20,\n}: {\n  /** Actions to filter for */\n  requestActions?: RequestAction[];\n  /** Request enricher statuses to restart - defaults to all statuses */\n  requestEnricherStatuses?: RequestEnricherStatus[];\n  /** Transcend API key authentication */\n  auth: string;\n  /** The ID of the enricher to restart */\n  enricherId: string;\n  /** API URL for Transcend backend */\n  transcendUrl?: string;\n  /** Request IDs to filter for */\n  requestIds?: string[];\n  /** Filter for requests created before this date */\n  createdAtBefore?: Date;\n  /** Filter for requests created after this date */\n  createdAtAfter?: Date;\n  /** Filter for requests updated before this date */\n  updatedAtBefore?: Date;\n  /** Filter for requests updated after this date */\n  updatedAtAfter?: Date;\n  /** Concurrency to upload requests at */\n  concurrency?: number;\n}): Promise<void> {\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  // Find all requests made before createdAt that are in a removing data state\n  const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n  logger.info(colors.magenta('Fetching requests to restart...'));\n\n  const requests = await fetchAllRequests(client, {\n    actions: requestActions,\n    statuses: [RequestStatus.Enriching],\n    createdAtBefore,\n    createdAtAfter,\n    updatedAtBefore,\n    updatedAtAfter,\n    requestIds,\n  });\n\n  let totalRestarted = 0;\n\n  // Validate request IDs\n  if (requestIds.length > 0 && requestIds.length !== requests.length) {\n    const missingRequests = difference(\n      requestIds,\n      requests.map(({ id }) => id),\n    );\n    if (missingRequests.length > 0) {\n      logger.error(\n        colors.red(`Failed to find the following requests by ID: ${missingRequests.join(',')}.`),\n      );\n      process.exit(1);\n    }\n  }\n\n  // Map over the requests\n  let total = 0;\n  progressBar.start(requests.length, 0);\n  await map(\n    requests,\n    async (request) => {\n      // Pull the request identifiers\n      const requestEnrichers = await fetchAllRequestEnrichers(client, {\n        filterBy: { requestId: request.id },\n        logger,\n      });\n      const requestEnrichersToRestart = requestEnrichers.filter(\n        (requestEnricher) =>\n          requestEnricher.enricher.id === enricherId &&\n          requestEnricherStatuses.includes(requestEnricher.status),\n      );\n      await map(requestEnrichersToRestart, async (requestEnricher) => {\n        await retryRequestEnricher(client, { id: requestEnricher.id, logger });\n        totalRestarted += 1;\n      });\n\n      // Cache successful upload\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  // Log completion time\n  logger.info(\n    colors.green(\n      `Completed restarting of ${requests.length} requests and ${totalRestarted} enrichers in \"${\n        totalTime / 1000\n      }\" seconds.`,\n    ),\n  );\n}\n"],"mappings":"wdAoBA,eAAsB,EAAmB,CACvC,OACA,iBAAiB,EAAE,CACnB,kBACA,iBACA,kBACA,iBACA,eAAe,EACf,0BAA0B,OAAO,OAAO,EAAsB,CAC9D,aAAa,EAAE,CACf,aACA,cAAc,IAwBE,CAEhB,IAAM,EAAK,IAAI,MAAM,CAAC,SAAS,CAEzB,EAAc,IAAI,EAAY,UAAU,EAAE,CAAE,EAAY,QAAQ,eAAe,CAG/E,EAAS,EAA4B,EAAc,EAAK,CAE9D,EAAO,KAAK,EAAO,QAAQ,kCAAkC,CAAC,CAE9D,IAAM,EAAW,MAAM,EAAiB,EAAQ,CAC9C,QAAS,EACT,SAAU,CAAC,EAAc,UAAU,CACnC,kBACA,iBACA,kBACA,iBACA,aACD,CAAC,CAEE,EAAiB,EAGrB,GAAI,EAAW,OAAS,GAAK,EAAW,SAAW,EAAS,OAAQ,CAClE,IAAM,EAAkB,EACtB,EACA,EAAS,KAAK,CAAE,QAAS,EAAG,CAC7B,CACG,EAAgB,OAAS,IAC3B,EAAO,MACL,EAAO,IAAI,gDAAgD,EAAgB,KAAK,IAAI,CAAC,GAAG,CACzF,CACD,QAAQ,KAAK,EAAE,EAKnB,IAAI,EAAQ,EACZ,EAAY,MAAM,EAAS,OAAQ,EAAE,CACrC,MAAM,EACJ,EACA,KAAO,IAAY,CAWjB,MAAM,GAL4B,MAJH,EAAyB,EAAQ,CAC9D,SAAU,CAAE,UAAW,EAAQ,GAAI,CACnC,SACD,CAAC,EACiD,OAChD,GACC,EAAgB,SAAS,KAAO,GAChC,EAAwB,SAAS,EAAgB,OAAO,CAEzB,CAAE,KAAO,IAAoB,CAC9D,MAAM,EAAqB,EAAQ,CAAE,GAAI,EAAgB,GAAI,SAAQ,CAAC,CACtE,GAAkB,GAClB,CAGF,GAAS,EACT,EAAY,OAAO,EAAM,EAE3B,CAAE,cAAa,CAChB,CAED,EAAY,MAAM,CAElB,IAAM,EADK,IAAI,MAAM,CAAC,SACF,CAAG,EAGvB,EAAO,KACL,EAAO,MACL,2BAA2B,EAAS,OAAO,gBAAgB,EAAe,iBACxE,EAAY,IACb,YACF,CACF"}