UNPKG

@visitorquery/react

Version:

Use this package to prevent fraud and abuse by visitors hiding behind proxies and VPNs. With a simple call to `useVisitorQuery` your website or app will be making a request to our servers which will store a value indicating wether the current user is beh

2 lines (1 loc) 1.95 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react");function y(t){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(o,r,n.get?n:{enumerable:!0,get:()=>t[r]})}}return o.default=t,Object.freeze(o)}const f=y(u);function v(t,o={}){const[r,n]=f.useState("loading"),c=f.useRef(o);return f.useEffect(()=>{let e=document.querySelector(`script[src="${t}"]`);const s=e==null?void 0:e.getAttribute("data-status");if(s){n(s);return}if(e===null){e=document.createElement("script"),e.src=t,e.async=!0,e.setAttribute("data-status","loading"),document.body.appendChild(e);const a=()=>{e==null||e.setAttribute("data-status","ready"),n("ready"),d()},i=()=>{e==null||e.setAttribute("data-status","error"),n("error"),d()},d=()=>{e==null||e.removeEventListener("load",a),e==null||e.removeEventListener("error",i)};e.addEventListener("load",a),e.addEventListener("error",i);const l=c.current.removeOnUnmount;return()=>{l===!0&&(e==null||e.remove(),d())}}else n("unknown")},[t]),r}const m=u.createContext(null);function S({apiKey:t,sessionId:o,endpoint:r,children:n,trigger:c}){const e="main.check.visitorquery.com",s=v("https://cdn.visitorquery.com/visitorquery.js",{removeOnUnmount:!1}),[a,i]=u.useState({started:!1,ended:!1});u.useEffect(()=>{typeof window.VisitorQuery<"u"&&window.VisitorQuery.run({ApiKey:t,Endpoint:r||e,SessionId:o,onOpen:()=>{i({started:!0,ended:!1})},onClose:()=>{i({started:!0,ended:!0})},onError:l=>{i({started:!0,ended:!0,errored:!0}),console.error(l)}})},[t,r,o,s,c]);const d=u.useMemo(()=>({...a,isLoading:s==="loading"}),[a,s]);return u.createElement(m.Provider,{value:d},n)}function b(){const t=u.useContext(m);if(!t)throw new Error("useVisitorQuery must be used within a VisitorQueryProvider");return t}exports.VisitorQueryProvider=S;exports.useVisitorQuery=b;