{"version":3,"file":"component.jsx","sourceRoot":"","sources":["../../component.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,+CAA2C;AAC3C,iCAAmE;AAEnE,+CAAuE;AAEvE,SAAgB,YAAY,CAAC,mBAA2B;IACtD,MAAM,oBAAoB,GAAG,cAAM,CAAgB,IAAI,CAAC,CAAC;IACzD,MAAM,oBAAoB,GAAG,cAAM,EAAc,CAAC;IAElD,MAAM,GAAG,GAAG,cAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnC,iBAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE;YACvB,OAAO;SACR;QACD,oBAAoB,CAAC,OAAO,GAAG,wCAA0B,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5F,OAAO,GAAG,EAAE;YACV,IAAI,oBAAoB,CAAC,OAAO,IAAI,IAAI,EAAE;gBACxC,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;aAC/C;YACD,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,iBAAiB,GAAG,mBAAW,CAAC,KAAK,IAAI,EAAE;QAC/C,IAAI,oBAAoB,CAAC,OAAO,IAAI,IAAI,EAAE;YACxC,OAAO;SACR;QACD,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,IAAI,oBAAoB,CAAC,OAAO,IAAI,IAAI,EAAE;gBACxC,OAAO;aACR;YAED,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE;gBACvB,OAAO;aACR;YAED,IAAI,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE;gBACxC,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC9C,oBAAoB,CAAC,OAAO,GAAG,wCAA0B,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;aAC7F;YAED,MAAM,oBAAoB,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACzD,OAAO,MAAM,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAChE,CAAC,CAAC,EAAE,CAAC,IAAI,CACP,MAAM,CAAC,EAAE;YACP,IAAI,oBAAoB,CAAC,OAAO,IAAI,IAAI,EAAE;gBACxC,OAAO;aACR;YACD,oBAAoB,CAAC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC;YAE9C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;aACrF;QACH,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,IAAI,oBAAoB,CAAC,OAAO,IAAI,IAAI,EAAE;gBACxC,OAAO;aACR;YACD,MAAM,GAAG,CAAC;QACZ,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE3E,sDAAsD;IACtD,MAAM,OAAO,GAAG,eAAO,CACrB,GAAG,EAAE,CACH,YAAI,CACF,SAAS,gBAAgB;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC;IACnD,CAAC,EACD,GAAG,EAAE,CAAC,KAAK,CACZ,EACH,CAAC,GAAG,EAAE,GAAG,CAAC,CACX,CAAC;IAEF,OAAO;QACL,iBAAiB;QACjB,OAAO;QACP,oBAAoB;KACrB,CAAC;AACJ,CAAC;AA7ED,oCA6EC","sourcesContent":["import React, { useCallback } from \"react\";\r\nimport { memo, useEffect, useMemo, useRef, useState } from \"react\";\r\n\r\nimport { IRecaptcha, createRecaptchaAbstraction } from \"./abstraction\";\r\n\r\nexport function useRecaptcha(recaptchaBrowserKey: string) {\r\n  const verificationTokenRef = useRef<string | null>(null);\r\n  const recaptchaAbstraction = useRef<IRecaptcha>();\r\n\r\n  const ref = useRef<HTMLDivElement>(null);\r\n  const [key] = useState(Date.now());\r\n\r\n  useEffect(() => {\r\n    if (ref.current == null) {\r\n      return;\r\n    }\r\n    recaptchaAbstraction.current = createRecaptchaAbstraction(recaptchaBrowserKey, ref.current);\r\n    return () => {\r\n      if (recaptchaAbstraction.current != null) {\r\n        recaptchaAbstraction.current.resetContainer();\r\n      }\r\n      recaptchaAbstraction.current = undefined;\r\n    };\r\n  }, [recaptchaBrowserKey]);\r\n\r\n  const startVerification = useCallback(async () => {\r\n    if (recaptchaAbstraction.current == null) {\r\n      return;\r\n    }\r\n    return (async () => {\r\n      if (recaptchaAbstraction.current == null) {\r\n        return;\r\n      }\r\n\r\n      if (ref.current == null) {\r\n        return;\r\n      }\r\n\r\n      if (recaptchaAbstraction.current.expired) {\r\n        recaptchaAbstraction.current.resetContainer();\r\n        recaptchaAbstraction.current = createRecaptchaAbstraction(recaptchaBrowserKey, ref.current);\r\n      }\r\n\r\n      await recaptchaAbstraction.current.renderIntoContainer();\r\n      return await recaptchaAbstraction.current.runRecaptchaCheck();\r\n    })().then(\r\n      result => {\r\n        if (recaptchaAbstraction.current == null) {\r\n          return;\r\n        }\r\n        verificationTokenRef.current = result || null;\r\n\r\n        if (typeof result !== \"string\") {\r\n          throw new Error(\"Unable to verify Recaptcha: Request is not believed to be a user\");\r\n        }\r\n      },\r\n      err => {\r\n        if (recaptchaAbstraction.current == null) {\r\n          return;\r\n        }\r\n        throw err;\r\n      }\r\n    );\r\n  }, [recaptchaBrowserKey, ref, recaptchaAbstraction, verificationTokenRef]);\r\n\r\n  // We render the invisible recaptcha into this element\r\n  const Element = useMemo(\r\n    () =>\r\n      memo(\r\n        function ReCaptchaCapture() {\r\n          return <div hidden={true} key={key} ref={ref} />;\r\n        },\r\n        () => false\r\n      ),\r\n    [key, ref]\r\n  );\r\n\r\n  return {\r\n    startVerification,\r\n    Element,\r\n    verificationTokenRef\r\n  };\r\n}\r\n"]}