diff --git a/dist/altcha.js b/dist/altcha.js index 203bea5..95640a7 100644 --- a/dist/altcha.js +++ b/dist/altcha.js @@ -1926,7 +1926,7 @@ function ea(e, t) { Un(), w && (w.removeEventListener("submit", vr), w.removeEventListener("reset", gr), w.removeEventListener("focusin", hr), w = null), fe && (clearTimeout(fe), fe = null), document.removeEventListener("click", cr), document.removeEventListener("scroll", dr), window.removeEventListener("resize", mr); }), On(() => { var n; - S("mounted", "1.1.0-beta.1"), S("workers", ue()), Jn(), S("plugins", pe.length ? pe.map((s) => s.constructor.pluginName).join(", ") : "none"), I() && S("using test mode"), f() && bt(f()), r() !== void 0 && S("auto", r()), c() !== void 0 && yr(c()), w = (n = h(U)) == null ? void 0 : n.closest("form"), w && (w.addEventListener("submit", vr, { capture: !0 }), w.addEventListener("reset", gr), r() === "onfocus" && w.addEventListener("focusin", hr)), r() === "onload" && (D() ? nt() : we()), h(Pt) && (m() || p()) && S("Attributes hidefooter and hidelogo ignored because usage with free API Keys requires attribution."), requestAnimationFrame(() => { + S("mounted", "1.1.0"), S("workers", ue()), Jn(), S("plugins", pe.length ? pe.map((s) => s.constructor.pluginName).join(", ") : "none"), I() && S("using test mode"), f() && bt(f()), r() !== void 0 && S("auto", r()), c() !== void 0 && yr(c()), w = (n = h(U)) == null ? void 0 : n.closest("form"), w && (w.addEventListener("submit", vr, { capture: !0 }), w.addEventListener("reset", gr), r() === "onfocus" && w.addEventListener("focusin", hr)), r() === "onload" && (D() ? nt() : we()), h(Pt) && (m() || p()) && S("Attributes hidefooter and hidelogo ignored because usage with free API Keys requires attribution."), requestAnimationFrame(() => { tt("load"); }); }); diff --git a/dist/altcha.umd.cjs b/dist/altcha.umd.cjs index 2a217d5..43ce4bd 100644 --- a/dist/altcha.umd.cjs +++ b/dist/altcha.umd.cjs @@ -5,5 +5,5 @@ 100% { transform: rotate(360deg); } -}`};function vn(e,t){var Zn,Wn;Jr(t,!0),el(e,Nl);let r=N(t,"auto",7,void 0),l=N(t,"blockspam",7,void 0),i=N(t,"challengeurl",7,void 0),a=N(t,"challengejson",7,void 0),o=N(t,"customfetch",7,void 0),d=N(t,"debug",7,!1),u=N(t,"delay",7,0),f=N(t,"expire",7,void 0),c=N(t,"floating",7,void 0),v=N(t,"floatinganchor",7,void 0),g=N(t,"floatingoffset",7,void 0),m=N(t,"hidefooter",7,!1),p=N(t,"hidelogo",7,!1),T=N(t,"name",7,"altcha"),Y=N(t,"maxnumber",7,1e6),ne=N(t,"mockerror",7,!1),F=N(t,"obfuscated",7,void 0),M=N(t,"plugins",7,void 0),pe=N(t,"refetchonexpire",7,!0),U=N(t,"spamfilter",7,!1),Se=N(t,"strings",7,void 0),S=N(t,"test",7,!1),j=N(t,"verifyurl",7,void 0),_e=N(t,"workers",23,()=>Math.min(16,navigator.hardwareConcurrency||8)),vt=N(t,"workerurl",7,void 0);const gn=["SHA-256","SHA-384","SHA-512"],_n="Visit Altcha.org",mn="https://altcha.org/",gt=(n,s)=>{t.$$host.dispatchEvent(new CustomEvent(n,{detail:s}))},bn=(Wn=(Zn=document.documentElement.lang)==null?void 0:Zn.split("-"))==null?void 0:Wn[0],rr=st(()=>{var n;return i()&&new URL(i(),location.origin).host.endsWith(".altcha.org")&&!!((n=i())!=null&&n.includes("apiKey=ckey_"))}),nr=st(()=>a()?Sn(a()):void 0),yn=st(()=>Se()?Sn(Se()):{}),ie=st(()=>{var n;return{ariaLinkLabel:_n,error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:`Protected by ALTCHA`,label:"I'm not a robot",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait.",...h(yn)}});let Qe=Xe(!1),L=Xe(oe(w.UNVERIFIED)),B=Xe(void 0),_t=Xe(null),et=null,E=null,tt=Xe(null),me=null,Ne=[],Ge=Xe(null);Mt(()=>{Dl(h(tt))}),Mt(()=>{Yl(h(L))}),ll(()=>{Ll(),E&&(E.removeEventListener("submit",Cn),E.removeEventListener("reset",Rn),E.removeEventListener("focusin",kn),E=null),me&&(clearTimeout(me),me=null),document.removeEventListener("click",En),document.removeEventListener("scroll",xn),window.removeEventListener("resize",$n)}),fn(()=>{var n;A("mounted","1.1.0-beta.1"),A("workers",_e()),zl(),A("plugins",Ne.length?Ne.map(s=>s.constructor.pluginName).join(", "):"none"),S()&&A("using test mode"),f()&&Gt(f()),r()!==void 0&&A("auto",r()),c()!==void 0&&Nn(c()),E=(n=h(B))==null?void 0:n.closest("form"),E&&(E.addEventListener("submit",Cn,{capture:!0}),E.addEventListener("reset",Rn),r()==="onfocus"&&E.addEventListener("focusin",kn)),r()==="onload"&&(F()?mt():Le()),h(rr)&&(m()||p())&&A("Attributes hidefooter and hidelogo ignored because usage with free API Keys requires attribution."),requestAnimationFrame(()=>{gt("load")})});function pn(n,s){return btoa(JSON.stringify({algorithm:n.algorithm,challenge:n.challenge,number:s.number,salt:n.salt,signature:n.signature,test:S()?!0:void 0,took:s.took}))}function Ll(){for(const n of Ne)n.destroy()}function wn(){i()&&pe()&&h(L)===w.VERIFIED?Le():bt(w.EXPIRED,h(ie).expired)}async function Al(){var n;if(ne())throw A("mocking error"),new Error("Mocked error.");if(h(nr))return A("using provided json data"),h(nr);if(S())return A("generating test challenge",{test:S()}),hl(typeof S()!="boolean"?+S():void 0);{if(!i()&&E){const P=E.getAttribute("action");P!=null&&P.includes("/form/")&&i(P+"/altcha")}if(!i())throw new Error("Attribute challengeurl not set.");A("fetching challenge from",i());let s=null,_=null;if(o())if(A("using customfetch"),typeof o()=="string"){if(s=globalThis[o()]||null,!s)throw new Error(`Custom fetch function not found: ${o()}`)}else s=o();const x={headers:U()!==!1?{"x-altcha-spam-filter":"1"}:{}};if(s){if(_=await s(i(),x),!_||!(_ instanceof Response))throw new Error("Custom fetch function did not return a response.")}else _=await fetch(i(),x);if(_.status!==200)throw new Error(`Server responded with ${_.status}.`);const G=_.headers.get("Expires"),$=_.headers.get("X-Altcha-Config"),b=await _.json(),O=new URLSearchParams((n=b.salt.split("?"))==null?void 0:n[1]),we=O.get("expires")||O.get("expire");if(we){const P=new Date(+we*1e3),fe=isNaN(P.getTime())?0:P.getTime()-Date.now();fe>0&&Gt(fe)}if($)try{const P=JSON.parse($);P&&typeof P=="object"&&(P.verifyurl&&(P.verifyurl=new URL(P.verifyurl,new URL(i())).toString()),Tn(P))}catch(P){A("unable to configure from X-Altcha-Config",P)}if(!f()&&(G!=null&&G.length)){const P=Date.parse(G);if(P){const fe=P-Date.now();fe>0&&Gt(fe)}}return b}}function Tl(n){var _;const s=E==null?void 0:E.querySelector(typeof n=="string"?`input[name="${n}"]`:'input[type="email"]:not([data-no-spamfilter])');return((_=s==null?void 0:s.value)==null?void 0:_.slice(s.value.indexOf("@")))||void 0}function Pl(){return U()==="ipAddress"?{blockedCountries:void 0,classifier:void 0,disableRules:void 0,email:!1,expectedCountries:void 0,expectedLanguages:void 0,fields:!1,ipAddress:void 0,text:void 0,timeZone:void 0}:typeof U()=="object"?U():{blockedCountries:void 0,classifier:void 0,disableRules:void 0,email:void 0,expectedCountries:void 0,expectedLanguages:void 0,fields:void 0,ipAddress:void 0,text:void 0,timeZone:void 0}}function Vl(n){return[...(E==null?void 0:E.querySelectorAll(n!=null&&n.length?n.map(_=>`input[name="${_}"]`).join(", "):'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'))||[]].reduce((_,x)=>{const G=x.name,$=x.value;return G&&$&&(_[G]=/\n/.test($)?$.replace(new RegExp("(?Math.min(16,navigator.hardwareConcurrency||8)),vt=N(t,"workerurl",7,void 0);const gn=["SHA-256","SHA-384","SHA-512"],_n="Visit Altcha.org",mn="https://altcha.org/",gt=(n,s)=>{t.$$host.dispatchEvent(new CustomEvent(n,{detail:s}))},bn=(Wn=(Zn=document.documentElement.lang)==null?void 0:Zn.split("-"))==null?void 0:Wn[0],rr=st(()=>{var n;return i()&&new URL(i(),location.origin).host.endsWith(".altcha.org")&&!!((n=i())!=null&&n.includes("apiKey=ckey_"))}),nr=st(()=>a()?Sn(a()):void 0),yn=st(()=>Se()?Sn(Se()):{}),ie=st(()=>{var n;return{ariaLinkLabel:_n,error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:`Protected by ALTCHA`,label:"I'm not a robot",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait.",...h(yn)}});let Qe=Xe(!1),L=Xe(oe(w.UNVERIFIED)),B=Xe(void 0),_t=Xe(null),et=null,E=null,tt=Xe(null),me=null,Ne=[],Ge=Xe(null);Mt(()=>{Dl(h(tt))}),Mt(()=>{Yl(h(L))}),ll(()=>{Ll(),E&&(E.removeEventListener("submit",Cn),E.removeEventListener("reset",Rn),E.removeEventListener("focusin",kn),E=null),me&&(clearTimeout(me),me=null),document.removeEventListener("click",En),document.removeEventListener("scroll",xn),window.removeEventListener("resize",$n)}),fn(()=>{var n;A("mounted","1.1.0"),A("workers",_e()),zl(),A("plugins",Ne.length?Ne.map(s=>s.constructor.pluginName).join(", "):"none"),S()&&A("using test mode"),f()&&Gt(f()),r()!==void 0&&A("auto",r()),c()!==void 0&&Nn(c()),E=(n=h(B))==null?void 0:n.closest("form"),E&&(E.addEventListener("submit",Cn,{capture:!0}),E.addEventListener("reset",Rn),r()==="onfocus"&&E.addEventListener("focusin",kn)),r()==="onload"&&(F()?mt():Le()),h(rr)&&(m()||p())&&A("Attributes hidefooter and hidelogo ignored because usage with free API Keys requires attribution."),requestAnimationFrame(()=>{gt("load")})});function pn(n,s){return btoa(JSON.stringify({algorithm:n.algorithm,challenge:n.challenge,number:s.number,salt:n.salt,signature:n.signature,test:S()?!0:void 0,took:s.took}))}function Ll(){for(const n of Ne)n.destroy()}function wn(){i()&&pe()&&h(L)===w.VERIFIED?Le():bt(w.EXPIRED,h(ie).expired)}async function Al(){var n;if(ne())throw A("mocking error"),new Error("Mocked error.");if(h(nr))return A("using provided json data"),h(nr);if(S())return A("generating test challenge",{test:S()}),hl(typeof S()!="boolean"?+S():void 0);{if(!i()&&E){const P=E.getAttribute("action");P!=null&&P.includes("/form/")&&i(P+"/altcha")}if(!i())throw new Error("Attribute challengeurl not set.");A("fetching challenge from",i());let s=null,_=null;if(o())if(A("using customfetch"),typeof o()=="string"){if(s=globalThis[o()]||null,!s)throw new Error(`Custom fetch function not found: ${o()}`)}else s=o();const x={headers:U()!==!1?{"x-altcha-spam-filter":"1"}:{}};if(s){if(_=await s(i(),x),!_||!(_ instanceof Response))throw new Error("Custom fetch function did not return a response.")}else _=await fetch(i(),x);if(_.status!==200)throw new Error(`Server responded with ${_.status}.`);const G=_.headers.get("Expires"),$=_.headers.get("X-Altcha-Config"),b=await _.json(),O=new URLSearchParams((n=b.salt.split("?"))==null?void 0:n[1]),we=O.get("expires")||O.get("expire");if(we){const P=new Date(+we*1e3),fe=isNaN(P.getTime())?0:P.getTime()-Date.now();fe>0&&Gt(fe)}if($)try{const P=JSON.parse($);P&&typeof P=="object"&&(P.verifyurl&&(P.verifyurl=new URL(P.verifyurl,new URL(i())).toString()),Tn(P))}catch(P){A("unable to configure from X-Altcha-Config",P)}if(!f()&&(G!=null&&G.length)){const P=Date.parse(G);if(P){const fe=P-Date.now();fe>0&&Gt(fe)}}return b}}function Tl(n){var _;const s=E==null?void 0:E.querySelector(typeof n=="string"?`input[name="${n}"]`:'input[type="email"]:not([data-no-spamfilter])');return((_=s==null?void 0:s.value)==null?void 0:_.slice(s.value.indexOf("@")))||void 0}function Pl(){return U()==="ipAddress"?{blockedCountries:void 0,classifier:void 0,disableRules:void 0,email:!1,expectedCountries:void 0,expectedLanguages:void 0,fields:!1,ipAddress:void 0,text:void 0,timeZone:void 0}:typeof U()=="object"?U():{blockedCountries:void 0,classifier:void 0,disableRules:void 0,email:void 0,expectedCountries:void 0,expectedLanguages:void 0,fields:void 0,ipAddress:void 0,text:void 0,timeZone:void 0}}function Vl(n){return[...(E==null?void 0:E.querySelectorAll(n!=null&&n.length?n.map(_=>`input[name="${_}"]`).join(", "):'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'))||[]].reduce((_,x)=>{const G=x.name,$=x.value;return G&&$&&(_[G]=/\n/.test($)?$.replace(new RegExp("(?s instanceof Error))&&console[n[0]instanceof Error?"error":"log"]("ALTCHA",`[name=${T()}]`,...n)}function Gl(){[w.UNVERIFIED,w.ERROR,w.EXPIRED].includes(h(L))?U()!==!1&&(E==null?void 0:E.reportValidity())===!1?V(Qe,!1):F()?mt():Le():V(Qe,!0)}function En(n){const s=n.target;c()&&s&&!h(B).contains(s)&&(h(L)===w.VERIFIED||r()==="off"&&h(L)===w.UNVERIFIED)&&(h(B).style.display="none")}function xn(){c()&&h(L)!==w.UNVERIFIED&&zt()}function Dl(n){for(const s of Ne)typeof s.onErrorChange=="function"&&s.onErrorChange(h(tt))}function kn(n){h(L)===w.UNVERIFIED&&Le()}function Cn(n){E&&r()==="onsubmit"?h(L)===w.UNVERIFIED?(n.preventDefault(),n.stopPropagation(),Le().then(()=>{E==null||E.requestSubmit()})):h(L)!==w.VERIFIED&&(n.preventDefault(),n.stopPropagation(),h(L)===w.VERIFYING&&In()):E&&c()&&r()==="off"&&h(L)===w.UNVERIFIED&&(n.preventDefault(),n.stopPropagation(),h(B).style.display="block",zt())}function Rn(){bt()}function In(){h(L)===w.VERIFYING&&h(ie).waitAlert&&alert(h(ie).waitAlert)}function Yl(n){for(const s of Ne)typeof s.onStateChange=="function"&&s.onStateChange(h(L));c()&&h(L)!==w.UNVERIFIED&&requestAnimationFrame(()=>{zt()}),V(Qe,h(L)===w.VERIFIED)}function $n(){c()&&zt()}function Sn(n){return JSON.parse(n)}function zt(n=20){if(h(B))if(et||(et=(v()?document.querySelector(v()):E==null?void 0:E.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||E),et){const s=parseInt(g(),10)||12,_=et.getBoundingClientRect(),x=h(B).getBoundingClientRect(),G=document.documentElement.clientHeight,$=document.documentElement.clientWidth,b=c()==="auto"?_.bottom+x.height+s+n>G:c()==="top",O=Math.max(n,Math.min($-n-x.width,_.left+_.width/2-x.width/2));if(b?h(B).style.top=`${_.top-(x.height+s)}px`:h(B).style.top=`${_.bottom+s}px`,h(B).style.left=`${O}px`,h(B).setAttribute("data-floating",b?"top":"bottom"),h(_t)){const we=h(_t).getBoundingClientRect();h(_t).style.left=_.left-O+_.width/2-we.width/2+"px"}}else A("unable to find floating anchor element")}async function Fl(n){if(!j())throw new Error("Attribute verifyurl not set.");A("requesting server verification from",j());const s={payload:n};if(U()!==!1){const{blockedCountries:G,classifier:$,disableRules:b,email:O,expectedLanguages:we,expectedCountries:P,fields:fe,ipAddress:pt,text:Ql,timeZone:Un}=Pl();s.blockedCountries=G,s.classifier=$,s.disableRules=b,s.email=O===!1?void 0:Tl(O),s.expectedCountries=P,s.expectedLanguages=we||(bn?[bn]:void 0),s.fields=fe===!1?void 0:Vl(fe),s.ipAddress=pt===!1?void 0:pt||"auto",s.text=Ql,s.timeZone=Un===!1?void 0:Un||gl()}const _=await fetch(j(),{body:JSON.stringify(s),headers:{"content-type":"application/json"},method:"POST"});if(_.status!==200)throw new Error(`Server responded with ${_.status}.`);const x=await _.json();if(x!=null&&x.payload&&V(Ge,oe(x.payload)),gt("serververification",x),l()&&x.classification==="BAD")throw new Error("SpamFilter returned negative classification.")}function Gt(n){A("expire",n),me&&(clearTimeout(me),me=null),n<1?wn():me=setTimeout(wn,n)}function Nn(n){A("floating",n),c()!==n&&(h(B).style.left="",h(B).style.top=""),c(n===!0||n===""?"auto":n===!1||n==="false"?void 0:c()),c()?(r()||r("onsubmit"),document.addEventListener("scroll",xn),document.addEventListener("click",En),window.addEventListener("resize",$n)):r()==="onsubmit"&&r(void 0)}function Ln(n){if(!n.algorithm)throw new Error("Invalid challenge. Property algorithm is missing.");if(n.signature===void 0)throw new Error("Invalid challenge. Property signature is missing.");if(!gn.includes(n.algorithm.toUpperCase()))throw new Error(`Unknown algorithm value. Allowed values: ${gn.join(", ")}`);if(!n.challenge||n.challenge.length<40)throw new Error("Challenge is too short. Min. 40 chars.");if(!n.salt||n.salt.length<10)throw new Error("Salt is too short. Min. 10 chars.")}async function An(n){let s=null;if("Worker"in window){try{s=await Ol(n,n.maxnumber)}catch(_){A(_)}if((s==null?void 0:s.number)!==void 0||"obfuscated"in n)return{data:n,solution:s}}if("obfuscated"in n){const _=await bl(n.obfuscated,n.key,n.maxnumber);return{data:n,solution:await _.promise}}return{data:n,solution:await vl(n.challenge,n.salt,n.algorithm,n.maxnumber||Y()).promise}}async function Ol(n,s=typeof S()=="number"?S():Y(),_=Math.ceil(_e())){const x=[];_=Math.min(16,Math.max(1,_));for(let b=0;b<_;b++)x.push(altchaCreateWorker(vt()));const G=Math.ceil(s/_),$=await Promise.all(x.map((b,O)=>{const we=O*G;return new Promise(P=>{b.addEventListener("message",fe=>{if(fe.data)for(const pt of x)pt!==b&&pt.postMessage({type:"abort"});P(fe.data)}),b.postMessage({payload:n,max:we+G,start:we,type:"work"})})}));for(const b of x)b.terminate();return $.find(b=>!!b)||null}async function mt(){if(!F()){De(w.ERROR);return}const n=Ne.find(s=>s.constructor.pluginName==="obfuscation");if(!n||!("clarify"in n)){De(w.ERROR),A("Plugin `obfuscation` not found. Import `altcha/plugins/obfuscation` to load it.");return}if("clarify"in n&&typeof n.clarify=="function")return n.clarify()}function Tn(n){n.obfuscated!==void 0&&F(n.obfuscated),n.auto!==void 0&&(r(n.auto),r()==="onload"&&(F()?mt():Le())),n.blockspam!==void 0&&l(!!n.blockspam),n.customfetch!==void 0&&o(n.customfetch),n.floatinganchor!==void 0&&v(n.floatinganchor),n.delay!==void 0&&u(n.delay),n.floatingoffset!==void 0&&g(n.floatingoffset),n.floating!==void 0&&Nn(n.floating),n.expire!==void 0&&(Gt(n.expire),f(n.expire)),n.challenge&&(a(typeof n.challenge=="string"?n.challenge:JSON.stringify(n.challenge)),Ln(h(nr))),n.challengeurl!==void 0&&i(n.challengeurl),n.debug!==void 0&&d(!!n.debug),n.hidefooter!==void 0&&m(!!n.hidefooter),n.hidelogo!==void 0&&p(!!n.hidelogo),n.maxnumber!==void 0&&Y(+n.maxnumber),n.mockerror!==void 0&&ne(!!n.mockerror),n.name!==void 0&&T(n.name),n.refetchonexpire!==void 0&&pe(!!n.refetchonexpire),n.spamfilter!==void 0&&U(typeof n.spamfilter=="object"?n.spamfilter:!!n.spamfilter),n.strings&&Se(typeof n.strings=="string"?n.strings:JSON.stringify(n.strings)),n.test!==void 0&&S(typeof n.test=="number"?n.test:!!n.test),n.verifyurl!==void 0&&j(n.verifyurl),n.workers!==void 0&&_e(+n.workers),n.workerurl!==void 0&&vt(n.workerurl)}function Pn(){return{auto:r(),blockspam:l(),challengeurl:i(),debug:d(),delay:u(),expire:f(),floating:c(),floatinganchor:v(),floatingoffset:g(),hidefooter:m(),hidelogo:p(),name:T(),maxnumber:Y(),mockerror:ne(),obfuscated:F(),refetchonexpire:pe(),spamfilter:U(),strings:h(ie),test:S(),verifyurl:j(),workers:_e(),workerurl:vt()}}function Vn(){return et}function Xl(n){return Ne.find(s=>s.constructor.pluginName===n)}function zn(){return h(L)}function bt(n=w.UNVERIFIED,s=null){me&&(clearTimeout(me),me=null),V(Qe,!1),V(Ge,null),De(n,s)}function Gn(n){et=n}function De(n,s=null){V(L,oe(n)),V(tt,oe(s)),gt("statechange",{payload:h(Ge),state:h(L)})}async function Le(){return bt(w.VERIFYING),await new Promise(n=>setTimeout(n,u()||0)),Al().then(n=>(Ln(n),A("challenge",n),An(n))).then(({data:n,solution:s})=>{if(A("solution",s),"challenge"in n&&s&&!("clearText"in s))if((s==null?void 0:s.number)!==void 0){if(j())return Fl(pn(n,s));V(Ge,oe(pn(n,s))),A("payload",h(Ge))}else throw A("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."),new Error("Unexpected result returned.")}).then(()=>{De(w.VERIFIED),A("verified"),Xi().then(()=>{gt("verified",{payload:h(Ge)})})}).catch(n=>{A(n),De(w.ERROR,n.message)})}var Dn=Sl(),Yn=Wt(Dn);Qi(Yn,t,"default",{});var yt=be(Yn,2),ir=Q(yt),Fn=Q(ir);{var Zl=n=>{var s=yl();te(n,s)};$e(Fn,n=>{h(L)===w.VERIFYING&&n(Zl)})}var Dt=be(Fn,2),rt=Q(Dt);an(rt),rt.__change=Gl,q(Dt);var lr=be(Dt,2),Wl=Q(lr);{var Ul=n=>{var s=pl(),_=Wt(s),x=Q(_);qe(x,()=>h(ie).verified),q(_);var G=be(_,2);an(G),Me(()=>{ue(G,"name",T()),tl(G,h(Ge))}),te(n,s)},Ml=n=>{var s=Bi(),_=Wt(s);{var x=$=>{var b=wl(),O=Q(b);qe(O,()=>h(ie).verifying),q(b),te($,b)},G=$=>{var b=El(),O=Q(b);qe(O,()=>h(ie).label),q(b),Me(()=>ue(b,"for",`${T()??""}_checkbox`)),te($,b)};$e(_,$=>{h(L)===w.VERIFYING?$(x):$(G,!1)},!0)}te(n,s)};$e(Wl,n=>{h(L)===w.VERIFIED?n(Ul):n(Ml,!1)})}q(lr);var jl=be(lr,2);{var Bl=n=>{var s=xl(),_=Q(s);ue(_,"href",mn),q(s),Me(()=>ue(_,"aria-label",h(ie).ariaLinkLabel)),te(n,s)};$e(jl,n=>{(p()!==!0||h(rr))&&n(Bl)})}q(ir);var On=be(ir,2);{var Hl=n=>{var s=Rl(),_=be(Q(s),2);{var x=$=>{var b=kl(),O=Q(b);qe(O,()=>h(ie).expired),q(b),Me(()=>ue(b,"title",h(tt))),te($,b)},G=$=>{var b=Cl(),O=Q(b);qe(O,()=>h(ie).error),q(b),Me(()=>ue(b,"title",h(tt))),te($,b)};$e(_,$=>{h(L)===w.EXPIRED?$(x):$(G,!1)})}q(s),te(n,s)};$e(On,n=>{(h(tt)||h(L)===w.EXPIRED)&&n(Hl)})}var Xn=be(On,2);{var Jl=n=>{var s=Il(),_=Q(s),x=Q(_);qe(x,()=>h(ie).footer),q(_),q(s),te(n,s)};$e(Xn,n=>{h(ie).footer&&(m()!==!0||h(rr))&&n(Jl)})}var Kl=be(Xn,2);{var ql=n=>{var s=$l();un(s,_=>V(_t,_),()=>h(_t)),te(n,s)};$e(Kl,n=>{c()&&n(ql)})}return q(yt),un(yt,n=>V(B,n),()=>h(B)),Me(()=>{ue(yt,"data-state",h(L)),ue(yt,"data-floating",c()),nl(Dt,"altcha-hidden",h(L)===w.VERIFYING),ue(rt,"id",`${T()??""}_checkbox`),rt.required=r()!=="onsubmit"&&(!c()||r()!=="off")}),Mi("invalid",rt,In),il(rt,()=>h(Qe),n=>V(Qe,n)),te(e,Dn),Kr({clarify:mt,configure:Tn,getConfiguration:Pn,getFloatingAnchor:Vn,getPlugin:Xl,getState:zn,reset:bt,setFloatingAnchor:Gn,setState:De,verify:Le,get auto(){return r()},set auto(n=void 0){r(n),C()},get blockspam(){return l()},set blockspam(n=void 0){l(n),C()},get challengeurl(){return i()},set challengeurl(n=void 0){i(n),C()},get challengejson(){return a()},set challengejson(n=void 0){a(n),C()},get customfetch(){return o()},set customfetch(n=void 0){o(n),C()},get debug(){return d()},set debug(n=!1){d(n),C()},get delay(){return u()},set delay(n=0){u(n),C()},get expire(){return f()},set expire(n=void 0){f(n),C()},get floating(){return c()},set floating(n=void 0){c(n),C()},get floatinganchor(){return v()},set floatinganchor(n=void 0){v(n),C()},get floatingoffset(){return g()},set floatingoffset(n=void 0){g(n),C()},get hidefooter(){return m()},set hidefooter(n=!1){m(n),C()},get hidelogo(){return p()},set hidelogo(n=!1){p(n),C()},get name(){return T()},set name(n="altcha"){T(n),C()},get maxnumber(){return Y()},set maxnumber(n=1e6){Y(n),C()},get mockerror(){return ne()},set mockerror(n=!1){ne(n),C()},get obfuscated(){return F()},set obfuscated(n=void 0){F(n),C()},get plugins(){return M()},set plugins(n=void 0){M(n),C()},get refetchonexpire(){return pe()},set refetchonexpire(n=!0){pe(n),C()},get spamfilter(){return U()},set spamfilter(n=!1){U(n),C()},get strings(){return Se()},set strings(n=void 0){Se(n),C()},get test(){return S()},set test(n=!1){S(n),C()},get verifyurl(){return j()},set verifyurl(n=void 0){j(n),C()},get workers(){return _e()},set workers(n=Math.min(16,navigator.hardwareConcurrency||8)){_e(n),C()},get workerurl(){return vt()},set workerurl(n=void 0){vt(n),C()}})}ji(["change"]),customElements.define("altcha-widget",cl(vn,{blockspam:{type:"Boolean"},debug:{type:"Boolean"},delay:{type:"Number"},expire:{type:"Number"},floatingoffset:{type:"Number"},hidefooter:{type:"Boolean"},hidelogo:{type:"Boolean"},maxnumber:{type:"Number"},mockerror:{type:"Boolean"},refetchonexpire:{type:"Boolean"},test:{type:"Boolean"},workers:{type:"Number"},auto:{},challengeurl:{},challengejson:{},customfetch:{},floating:{},floatinganchor:{},name:{},obfuscated:{},plugins:{},spamfilter:{},strings:{},verifyurl:{},workerurl:{}},["default"],["clarify","configure","getConfiguration","getFloatingAnchor","getPlugin","getState","reset","setFloatingAnchor","setState","verify"],!1)),globalThis.altchaCreateWorker=e=>e?new Worker(new URL(e)):new Bn,globalThis.altchaPlugins=globalThis.altchaPlugins||[],k.Altcha=vn,Object.defineProperty(k,Symbol.toStringTag,{value:"Module"})}); diff --git a/package-lock.json b/package-lock.json index 52532bf..c2c4be2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "altcha", - "version": "1.0.7", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "altcha", - "version": "1.0.7", + "version": "1.1.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index e5d2a25..96b4619 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "altcha", "description": "GDPR compliant, self-hosted CAPTCHA alternative.", - "version": "1.1.0-beta.1", + "version": "1.1.0", "license": "MIT", "author": { "name": "Daniel Regeci",