{"version":3,"file":"approvePrivacyRequests-CeIWBB3s.mjs","names":[],"sources":["../src/lib/requests/approvePrivacyRequests.ts"],"sourcesContent":["import { RequestAction, RequestOrigin, RequestStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, makeGraphQLRequest } 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';\nimport {\n  UPDATE_PRIVACY_REQUEST,\n  fetchAllRequests,\n  APPROVE_PRIVACY_REQUEST,\n} from '../graphql/index.js';\n\n/**\n * Approve a set of privacy requests\n *\n * @param options - Options\n * @returns The number of requests approved\n */\nexport async function approvePrivacyRequests({\n  requestActions,\n  requestOrigins,\n  auth,\n  silentModeBefore,\n  createdAtAfter,\n  createdAtBefore,\n  updatedAtBefore,\n  updatedAtAfter,\n  concurrency = 50,\n  transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n  /** The request actions that should be restarted */\n  requestActions: RequestAction[];\n  /** The request origins that should be restarted */\n  requestOrigins?: RequestOrigin[];\n  /** Transcend API key authentication */\n  auth: string;\n  /** Concurrency limit for approving */\n  concurrency?: number;\n  /** Mark these requests as silent mode if they were created before this date */\n  silentModeBefore?: Date;\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  /** 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  // Pull in the requests\n  const allRequests = await fetchAllRequests(client, {\n    actions: requestActions,\n    statuses: [RequestStatus.Approving],\n    createdAtAfter,\n    createdAtBefore,\n    updatedAtBefore,\n    updatedAtAfter,\n    origins: requestOrigins,\n  });\n\n  // Notify Transcend\n  logger.info(colors.magenta(`Approving \"${allRequests.length}\" requests.`));\n\n  let total = 0;\n  let skipped = 0;\n  progressBar.start(allRequests.length, 0);\n  await map(\n    allRequests,\n    async (requestToApprove) => {\n      // update request to silent mode if silentModeBefore is defined\n      // and the request was created before silentModeBefore\n      if (silentModeBefore && new Date(silentModeBefore) > new Date(requestToApprove.createdAt)) {\n        await makeGraphQLRequest(client, UPDATE_PRIVACY_REQUEST, {\n          variables: {\n            input: {\n              id: requestToApprove.id,\n              isSilent: true,\n            },\n          },\n          logger,\n        });\n      }\n\n      try {\n        // approve the request\n        await makeGraphQLRequest(client, APPROVE_PRIVACY_REQUEST, {\n          variables: { input: { requestId: requestToApprove.id } },\n          logger,\n        });\n      } catch (err) {\n        if (err.message.includes('Request must be in an approving state,')) {\n          skipped += 1;\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  if (skipped > 0) {\n    logger.info(colors.yellow(`${skipped} requests were skipped.`));\n  }\n  logger.info(\n    colors.green(`Successfully approved ${total} requests in \"${totalTime / 1000}\" seconds!`),\n  );\n  return allRequests.length;\n}\n"],"mappings":"waAoBA,eAAsB,EAAuB,CAC3C,iBACA,iBACA,OACA,mBACA,iBACA,kBACA,kBACA,iBACA,cAAc,GACd,eAAe,GAsBG,CAElB,IAAM,EAAS,EAA4B,EAAc,EAAK,CAGxD,EAAK,IAAI,MAAM,CAAC,SAAS,CAEzB,EAAc,IAAI,EAAY,UAAU,EAAE,CAAE,EAAY,QAAQ,eAAe,CAG/E,EAAc,MAAM,EAAiB,EAAQ,CACjD,QAAS,EACT,SAAU,CAAC,EAAc,UAAU,CACnC,iBACA,kBACA,kBACA,iBACA,QAAS,EACV,CAAC,CAGF,EAAO,KAAK,EAAO,QAAQ,cAAc,EAAY,OAAO,aAAa,CAAC,CAE1E,IAAI,EAAQ,EACR,EAAU,EACd,EAAY,MAAM,EAAY,OAAQ,EAAE,CACxC,MAAM,EACJ,EACA,KAAO,IAAqB,CAGtB,GAAoB,IAAI,KAAK,EAAiB,CAAG,IAAI,KAAK,EAAiB,UAAU,EACvF,MAAM,EAAmB,EAAQ,EAAwB,CACvD,UAAW,CACT,MAAO,CACL,GAAI,EAAiB,GACrB,SAAU,GACX,CACF,CACD,SACD,CAAC,CAGJ,GAAI,CAEF,MAAM,EAAmB,EAAQ,EAAyB,CACxD,UAAW,CAAE,MAAO,CAAE,UAAW,EAAiB,GAAI,CAAE,CACxD,SACD,CAAC,OACK,EAAK,CACR,EAAI,QAAQ,SAAS,yCAAyC,GAChE,GAAW,GAIf,GAAS,EACT,EAAY,OAAO,EAAM,EAE3B,CAAE,cAAa,CAChB,CAED,EAAY,MAAM,CAElB,IAAM,EADK,IAAI,MAAM,CAAC,SACF,CAAG,EAOvB,OANI,EAAU,GACZ,EAAO,KAAK,EAAO,OAAO,GAAG,EAAQ,yBAAyB,CAAC,CAEjE,EAAO,KACL,EAAO,MAAM,yBAAyB,EAAM,gBAAgB,EAAY,IAAK,YAAY,CAC1F,CACM,EAAY"}