{"version":3,"file":"DFPProtectedAuthProvider.mjs","sources":["../../../../../../core/src/DFPProtectedAuthProvider.ts"],"sourcesContent":["import { RetriableError, RetriableErrorType, SDKBaseRequestInfo } from './NetworkClient';\nimport { BootstrapData } from './types';\nimport { loadESModule } from './utils';\n\ndeclare global {\n  // The telemetry.js script will set a global function called GetTelemetryID on the window\n  // object. This interface is allows us to call that function while pleasing the TypeScript\n  // compiler.\n  interface Window {\n    GetTelemetryID: (publicToken: string, submitURL: string) => Promise<string>;\n  }\n}\n\nconst loadTelemetryJS = (domain: string) => loadESModule(`${domain}/telemetry.js`, () => window.GetTelemetryID);\n\nexport type DFPProtectedAuthMode = 'OBSERVATION' | 'DECISIONING';\n\nexport type DFPProtectedAuthState = {\n  publicToken: string;\n  dfpBackendURL: string;\n  mode?: DFPProtectedAuthMode;\n  enabled: boolean;\n  loaded: boolean;\n  executeRecaptcha: () => Promise<string | undefined>;\n};\n\nexport class DFPProtectedAuthProvider {\n  private state: Promise<DFPProtectedAuthState>;\n  constructor(\n    publicToken: string,\n    dfpBackendURL: string,\n    dfpCdnDomain: string,\n    private bootstrapPromise: Promise<BootstrapData>,\n    executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n  ) {\n    this.state = bootstrapPromise.then(async (bootstrapData) => {\n      if (!bootstrapData.runDFPProtectedAuth) {\n        return { publicToken, dfpBackendURL, enabled: false, loaded: false, executeRecaptcha };\n      }\n      await loadTelemetryJS(dfpCdnDomain);\n      return {\n        publicToken,\n        dfpBackendURL,\n        enabled: true,\n        mode: bootstrapData.dfpProtectedAuthMode || 'OBSERVATION',\n        loaded: true,\n        executeRecaptcha,\n      };\n    });\n  }\n\n  isEnabled = async (): Promise<boolean> => {\n    return this.state.then((state) => state.enabled);\n  };\n\n  getTelemetryID = async (): Promise<string | undefined> => {\n    const { publicToken, enabled, dfpBackendURL } = await this.state;\n    if (!enabled) {\n      return undefined;\n    }\n    return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);\n  };\n\n  getDFPTelemetryIDAndCaptcha = async (): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }> => {\n    const { enabled, executeRecaptcha, mode } = await this.state;\n\n    let dfp_telemetry_id: string | undefined = undefined;\n    let captcha_token: string | undefined = undefined;\n    if (!enabled) {\n      captcha_token = await executeRecaptcha();\n    }\n    if (mode === 'DECISIONING') {\n      dfp_telemetry_id = await this.getTelemetryID();\n    } else if (mode === 'OBSERVATION') {\n      dfp_telemetry_id = await this.getTelemetryID();\n      captcha_token = await executeRecaptcha();\n    }\n    return { dfp_telemetry_id, captcha_token };\n  };\n\n  retryWithCaptchaAndDFP = async (e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo> => {\n    const { enabled, executeRecaptcha } = await this.state;\n    if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {\n      if (req.body) {\n        req.body.dfp_telemetry_id = await this.getTelemetryID();\n        req.body.captcha_token = await executeRecaptcha();\n      }\n      return req;\n    }\n    throw new Error('Unable to query captcha and/or dfp telemetry ID');\n  };\n}\n\nexport const DisabledDFPProtectedAuthProvider = () => ({\n  isEnabled: async () => false,\n  getTelemetryID: async () => undefined,\n  getDFPTelemetryIDAndCaptcha: async () => ({\n    dfp_telemetry_id: undefined,\n    captcha_token: undefined,\n  }),\n  retryWithCaptchaAndDFP: async () => {\n    throw new Error('DFP protected auth is disabled');\n  },\n});\n\nexport interface IDFPProtectedAuthProvider {\n  isEnabled(): Promise<boolean>;\n  getTelemetryID(): Promise<string | undefined>;\n  retryWithCaptchaAndDFP(e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo>;\n  getDFPTelemetryIDAndCaptcha(): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }>;\n}\n"],"names":["loadTelemetryJS","domain","loadESModule","window","GetTelemetryID","DFPProtectedAuthProvider","state","publicToken","dfpBackendURL","dfpCdnDomain","bootstrapPromise","executeRecaptcha","Promise","resolve","undefined","then","bootstrapData","runDFPProtectedAuth","enabled","loaded","mode","dfpProtectedAuthMode","isEnabled","getTelemetryID","getDFPTelemetryIDAndCaptcha","dfp_telemetry_id","captcha_token","retryWithCaptchaAndDFP","e","req","type","RetriableErrorType","RequiredCaptcha","body","Error","DisabledDFPProtectedAuthProvider"],"mappings":"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"}