{"version":3,"file":"pullConsentManagerMetrics-C41UhU8u.mjs","names":[],"sources":["../src/lib/consent-manager/pullConsentManagerMetrics.ts"],"sourcesContent":["import { ConsentManagerMetricBin } from '@transcend-io/privacy-types';\nimport {\n  type ConsentManagerMetric,\n  fetchConsentManagerAnalyticsData,\n  fetchConsentManagerId,\n} from '@transcend-io/sdk';\nimport type { GraphQLClient } from 'graphql-request';\n\nimport { logger } from '../../logger.js';\n\n/**\n * One second of time in ms\n */\nconst ONE_SECOND = 1000;\nconst ONE_MINUTE = 60 * ONE_SECOND;\nconst ONE_HOUR = 60 * ONE_MINUTE;\nconst ONE_DAY = 24 * ONE_HOUR;\nconst ONE_WEEK = 7 * ONE_DAY;\n\n/**\n * Pull consent manager metrics in an organization\n *\n * @param client - GraphQL client\n * @param options - Options\n * @returns The consent manager metrics\n */\nexport async function pullConsentManagerMetrics(\n  client: GraphQLClient,\n  {\n    bin,\n    start,\n    end = new Date(),\n  }: {\n    /** Start date to pull metrics from */\n    start: Date;\n    /** End date to pull metrics from (assumes now) */\n    end?: Date;\n    /** Bin size to pull metrics */\n    bin: ConsentManagerMetricBin;\n  },\n): Promise<{\n  /** Privacy signal data */\n  PRIVACY_SIGNAL_TIMESERIES: ConsentManagerMetric[];\n  /** Consent changes data */\n  CONSENT_CHANGES_TIMESERIES: ConsentManagerMetric[];\n  /** Consent sessions by regime */\n  CONSENT_SESSIONS_BY_REGIME: ConsentManagerMetric[];\n}> {\n  // Grab the bundleId associated with this API key\n  const airgapBundleId = await fetchConsentManagerId(client, { logger });\n\n  // convert start and end to times\n  const startTime = Math.floor(start.getTime() / 1000);\n  const endTime = Math.floor(end.getTime() / 1000);\n  if (startTime > endTime) {\n    throw new Error('Received \"end\" date that happened before \"start\" date');\n  }\n\n  // do not allow hourly bins greater than 2 weeks\n  if (bin === '1h' && end.getTime() - start.getTime() > ONE_WEEK * 2) {\n    throw new Error('When using bin=1h, start and end time can be no more than 2 weeks apart');\n  }\n\n  // Pull in the metrics\n  const startDate = start.toISOString();\n  const endDate = end.toISOString();\n  const [privacySignalData, consentChangesData, consentSessionsByRegimeData] = await Promise.all([\n    fetchConsentManagerAnalyticsData(\n      client,\n      {\n        dataSource: 'PRIVACY_SIGNAL_TIMESERIES',\n        startDate,\n        endDate,\n        forceRefetch: true,\n        airgapBundleId,\n        binInterval: bin,\n        smoothTimeseries: false,\n      },\n      { logger },\n    ),\n    fetchConsentManagerAnalyticsData(\n      client,\n      {\n        dataSource: 'CONSENT_CHANGES_TIMESERIES',\n        startDate,\n        endDate,\n        forceRefetch: true,\n        airgapBundleId,\n        binInterval: bin,\n        smoothTimeseries: false,\n      },\n      { logger },\n    ),\n    fetchConsentManagerAnalyticsData(\n      client,\n      {\n        dataSource: 'CONSENT_SESSIONS_BY_REGIME',\n        startDate,\n        endDate,\n        forceRefetch: true,\n        airgapBundleId,\n        binInterval: bin,\n        smoothTimeseries: false,\n      },\n      { logger },\n    ),\n  ]);\n\n  return {\n    PRIVACY_SIGNAL_TIMESERIES: privacySignalData,\n    CONSENT_CHANGES_TIMESERIES: consentChangesData,\n    CONSENT_SESSIONS_BY_REGIME: consentSessionsByRegimeData,\n  };\n}\n"],"mappings":"0IA0BA,eAAsB,EACpB,EACA,CACE,MACA,QACA,MAAM,IAAI,MAgBX,CAED,IAAM,EAAiB,MAAM,EAAsB,EAAQ,CAAE,SAAQ,CAAC,CAKtE,GAFkB,KAAK,MAAM,EAAM,SAAS,CAAG,IAElC,CADG,KAAK,MAAM,EAAI,SAAS,CAAG,IACpB,CACrB,MAAU,MAAM,wDAAwD,CAI1E,GAAI,IAAQ,MAAQ,EAAI,SAAS,CAAG,EAAM,SAAS,CAAG,OAAW,EAC/D,MAAU,MAAM,0EAA0E,CAI5F,IAAM,EAAY,EAAM,aAAa,CAC/B,EAAU,EAAI,aAAa,CAC3B,CAAC,EAAmB,EAAoB,GAA+B,MAAM,QAAQ,IAAI,CAC7F,EACE,EACA,CACE,WAAY,4BACZ,YACA,UACA,aAAc,GACd,iBACA,YAAa,EACb,iBAAkB,GACnB,CACD,CAAE,SAAQ,CACX,CACD,EACE,EACA,CACE,WAAY,6BACZ,YACA,UACA,aAAc,GACd,iBACA,YAAa,EACb,iBAAkB,GACnB,CACD,CAAE,SAAQ,CACX,CACD,EACE,EACA,CACE,WAAY,6BACZ,YACA,UACA,aAAc,GACd,iBACA,YAAa,EACb,iBAAkB,GACnB,CACD,CAAE,SAAQ,CACX,CACF,CAAC,CAEF,MAAO,CACL,0BAA2B,EAC3B,2BAA4B,EAC5B,2BAA4B,EAC7B"}