@private-captcha/private-captcha-js-core 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -57,7 +57,7 @@ var w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",S=typeo
57
57
  <g fill="none"><circle cx="77" cy="77" r="76"></circle>
58
58
  <polyline class="st0" stroke-width="12" points="43.5,77.8 63.7,97.9 112.2,49.4" style="stroke-dasharray:100px, 100px; stroke-dashoffset: 200px;"/></g>
59
59
  </svg>
60
- `;function H(o){return`<input type="checkbox" id="${b}" class="${o}" required>`}function k(o,e){return`<label for="${e}">${o}</label>`}function te(o,e){switch(o){case 0:return"";case 1:return e[l];case 2:return e[C];default:return e[f]}}var P=class extends x{constructor(){super(),this._state="",this._root=this.attachShadow({mode:"open"}),this._debug=this.getAttribute("debug"),this._error=null,this._displayMode=this.getAttribute("display-mode"),this._lang=this.getAttribute("lang"),this._lang in K||(console.warn(`[privatecaptcha][progress] Localization not found. lang=${this._lang}`),this._lang="en");let e=new CSSStyleSheet;e.replace(X),this._root.adoptedStyleSheets.push(e),this._overridesSheet=null;let t=this.getAttribute("extra-styles");if(t){this._overridesSheet=new CSSStyleSheet;let r=`@layer custom { :host { ${t} } }`;this._overridesSheet.replace(r),this._root.adoptedStyleSheets.push(this._overridesSheet)}let i=this._displayMode==V;this.setState(u,i)}setState(e,t){if(e==this._state){console.debug("[privatecaptcha][progress] already in this state: "+e);return}this._debug&&console.debug(`[privatecaptcha][progress] change state. old=${this._state} new=${e}`);let i="",r=!1,A=!1,n=K[this._lang];switch(e){case u:r=!0,i=H("")+k(n[a],b);break;case M:r=!0,i=H("loading")+k(n[a],b);break;case B:r=!0,i=H("ready")+k(n[a],b),A=t;break;case d:let I=n[h];i=`<progress-ring id="${L}" stroke="12" progress="0"></progress-ring><label for="${L}">${I}<span class="dots"><span>.</span><span>.</span><span>.</span></span></label>`,A=t;break;case E:i=Ce+k(n[g],L),A=t;break;case O:i=H("invalid")+k(n[c],b);break;default:console.error(`[privatecaptcha][progress] unknown state: ${e}`);break}if(this._debug||this._error){let I=this._error?te(this._error,n):`[${e}]`;i+=`<span id="${ee}" class="${this._error?N:""}">${I}</span>`}let s="";switch(this._displayMode){case le:s="hidden";break;case $:s=A?"floating":"hidden";break;case V:break}if(this.classList.remove("hidden","floating"),s&&this.classList.add(s),this._state=e,this._root.innerHTML=`<div class="pc-captcha-widget">
60
+ `;function H(o){return`<input type="checkbox" id="${b}" class="${o}" required>`}function k(o,e){return`<label for="${e}">${o}</label>`}function te(o,e){switch(o){case 0:return"";case 1:return e[l];case 2:return e[C];default:return e[f]}}var P=class extends x{constructor(){super(),this._state="",this._root=this.attachShadow({mode:"open"}),this._debug=this.getAttribute("debug"),this._error=null,this._displayMode=this.getAttribute("display-mode"),this._lang=this.getAttribute("lang"),this._lang in K||(console.warn(`[privatecaptcha][progress] Localization not found. lang=${this._lang}`),this._lang="en");let e=new CSSStyleSheet;e.replaceSync(X),this._root.adoptedStyleSheets.push(e),this._overridesSheet=null;let t=this.getAttribute("extra-styles");if(t){this._overridesSheet=new CSSStyleSheet;let r=`@layer custom { :host { ${t} } }`;this._overridesSheet.replaceSync(r),this._root.adoptedStyleSheets.push(this._overridesSheet)}let i=this._displayMode==V;this.setState(u,i)}setState(e,t){if(e==this._state){console.debug("[privatecaptcha][progress] already in this state: "+e);return}this._debug&&console.debug(`[privatecaptcha][progress] change state. old=${this._state} new=${e}`);let i="",r=!1,A=!1,n=K[this._lang];switch(e){case u:r=!0,i=H("")+k(n[a],b);break;case M:r=!0,i=H("loading")+k(n[a],b);break;case B:r=!0,i=H("ready")+k(n[a],b),A=t;break;case d:let I=n[h];i=`<progress-ring id="${L}" stroke="12" progress="0"></progress-ring><label for="${L}">${I}<span class="dots"><span>.</span><span>.</span><span>.</span></span></label>`,A=t;break;case E:i=Ce+k(n[g],L),A=t;break;case O:i=H("invalid")+k(n[c],b);break;default:console.error(`[privatecaptcha][progress] unknown state: ${e}`);break}if(this._debug||this._error){let I=this._error?te(this._error,n):`[${e}]`;i+=`<span id="${ee}" class="${this._error?N:""}">${I}</span>`}let s="";switch(this._displayMode){case le:s="hidden";break;case $:s=A?"floating":"hidden";break;case V:break}if(this.classList.remove("hidden","floating"),s&&this.classList.add(s),this._state=e,this._root.innerHTML=`<div class="pc-captcha-widget">
61
61
  <div class="pc-interactive-area">
62
62
  ${i}
63
63
  </div>
@@ -66,5 +66,5 @@ var w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",S=typeo
66
66
  ${fe}
67
67
  <a href="https://privatecaptcha.com" class="pc-link" rel="noopener nofollow" target="_blank">Private<br />Captcha</a>
68
68
  </div>
69
- </div>`,r){let I=this._root.getElementById(b);I?I.addEventListener("change",this.onCheckboxClicked.bind(this)):console.warn("[privatecaptcha][progress] checkbox not found in the Shadow DOM")}}onCheckboxClicked(e){if(e.preventDefault(),this._debug&&console.debug("[privatecaptcha][progress] checkbox was clicked"),e.target.checked){let t=new CustomEvent("privatecaptcha:checked",{bubbles:!0,composed:!0});this.dispatchEvent(t)}else console.warn("[privatecaptcha][progress] checkbox was unchecked")}setProgress(e){if(d==this._state){let t=this._root.getElementById(L);t?t.setProgress(e):console.warn("[privatecaptcha][progress] progress element not found")}else this._debug&&console.debug("[privatecaptcha][progress] skipping updating progress when not in progress")}setError(e){this._error=e}setDebugText(e,t){let i=this._root.getElementById(ee);if(i){let r="";if(this._error){let A=K[this._lang];r=te(this._error,A)}else r=`[${e}]`;i.innerHTML=r,t||this._error?i.classList.add(N):i.classList.remove(N)}}static get observedAttributes(){return["state","progress","extra-styles"]}updateStyles(e){if(e){let t=`@layer custom { :host { ${e} } }`;this._overridesSheet?this._overridesSheet.replace(t):(this._overridesSheet=new CSSStyleSheet,this._overridesSheet.replace(t),this._root.adoptedStyleSheets.push(this._overridesSheet))}else if(this._overridesSheet){let t=this._root.adoptedStyleSheets.indexOf(this._overridesSheet);if(t>-1){let i=[...this._root.adoptedStyleSheets];i.splice(t,1),this._root.adoptedStyleSheets=i}this._overridesSheet=null}}attributeChangedCallback(e,t,i){e==="progress"?this.setProgress(i):e==="extra-styles"&&this.updateStyles(i)}};typeof window<"u"&&window.customElements.define("private-captcha",P);var de="https://api.privatecaptcha.com/puzzle",Ee="https://api.eu.privatecaptcha.com/puzzle",ye="recaptcha";function Qe(o){for(;o&&o.tagName!=="FORM";)o=o.parentElement;return o}var ie=class{constructor(e,t={}){this._element=e,this._puzzle=null,this._expiryTimeout=null,this._state=u,this._lastProgress=null,this._solution=null,this._userStarted=!1,this._options={},this._errorCode=0,this.setOptions(t),this._workersPool=new U({workersReady:this.onWorkersReady.bind(this),workerError:this.onWorkerError.bind(this),workStarted:this.onWorkStarted.bind(this),workCompleted:this.onWorkCompleted.bind(this),progress:this.onWorkProgress.bind(this)},this._options.debug);let i=Qe(this._element);if(i){if(i.addEventListener("focusin",this.onFocusIn.bind(this),{once:!0,passive:!0}),this._element.innerHTML=`<private-captcha display-mode="${this._options.displayMode}" lang="${this._options.lang}" theme="${this._options.theme}" extra-styles="${this._options.styles}"${this._options.debug?' debug="true"':""}></private-captcha>`,this._element.addEventListener("privatecaptcha:checked",this.onChecked.bind(this)),this._options.storeVariable&&(this._element[this._options.storeVariable]=this),$===this._options.displayMode){let r=i.querySelector(".private-captcha-anchor");r?r.style.position="relative":console.warn("[privatecaptcha] cannot find anchor for popup")}this.checkConfigured()}else console.warn("[privatecaptcha] cannot find form element")}setOptions(e){let i=this._element.dataset.eu||null?Ee:de,r="private-captcha-solution";e.hasOwnProperty("compat")&&e.compat===ye&&(r="g-recaptcha-response");let A="";e.hasOwnProperty("sitekey")&&(A=e.sitekey),this._options=Object.assign({startMode:this._element.dataset.startMode||"auto",debug:this._element.dataset.debug,fieldName:this._element.dataset.solutionField||r,puzzleEndpoint:this._element.dataset.puzzleEndpoint||i,sitekey:A||this._element.dataset.sitekey||"",displayMode:this._element.dataset.displayMode||"widget",lang:this._element.dataset.lang||"en",theme:this._element.dataset.theme||"light",styles:this._element.dataset.styles||"",storeVariable:this._element.dataset.storeVariable||null},e)}async init(e){this.trace(`init() was called. state=${this._state}`),this._puzzle=null,this._solution=null,this._errorCode=0;let t=this.checkConfigured();if(!t)return;if(this._state!=u&&this._state!=_){console.warn(`[privatecaptcha] captcha has already been initialized. state=${this._state}`);return}this._workersPool&&this._workersPool.stop();let i=this._options.startMode=="auto"||e;try{this.setState(M),this.trace(`fetching puzzle. sitekey=${t}`);let r=await Z(this._options.puzzleEndpoint,t);this._puzzle=new v(r),this._puzzle&&this._puzzle.isZero()&&(this._errorCode=2);let A=this._puzzle.expirationMillis();this.trace(`parsed puzzle buffer. isZero=${this._puzzle.isZero()} ttl=${A/1e3}`),this._expiryTimeout&&clearTimeout(this._expiryTimeout),A&&(this._expiryTimeout=setTimeout(()=>this.expire(),A)),this._workersPool.init(this._puzzle,i),this.signalInit()}catch(r){console.error("[privatecaptcha]",r),this._expiryTimeout&&clearTimeout(this._expiryTimeout),this._errorCode=3,this.setState(_),this.setProgressState(this._userStarted?E:u),this.saveSolutions(),this._userStarted&&this.signalErrored()}}checkConfigured(){let e=this._options.sitekey||this._element.dataset.sitekey;return e||(console.error("[privatecaptcha] sitekey not set on captcha element"),this._errorCode=1,this.setState(O),this.setProgressState(O),null)}start(){if(this._state!==B){console.warn(`[privatecaptcha] solving has already been started. state=${this._state}`);return}this.trace("starting solving captcha");try{this.setState(d),this._workersPool.solve(this._puzzle)}catch(e){console.error("[privatecaptcha]",e)}}dispatchEvent(e,t={}){let i=new CustomEvent(`privatecaptcha:${e}`,{bubbles:!1,detail:{widget:this,element:this._element,...t}});this._element.dispatchEvent(i)}signalInit(){this.dispatchEvent("init");let e=this._element.dataset.initCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in init callback:",t)}}signalStarted(){this.dispatchEvent("start");let e=this._element.dataset.startedCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in started callback:",t)}}signalFinished(){this.dispatchEvent("finish");let e=this._element.dataset.finishedCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in finished callback:",t)}}signalErrored(){this.dispatchEvent("error");let e=this._element.dataset.erroredCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in errored callback:",t)}}ensureNoSolutionField(){let e=this._element.querySelector(`input[name="${this._options.fieldName}"]`);if(e)try{this._element.removeChild(e)}catch(t){console.warn("[privatecaptcha]",t)}}reset(e={}){this.trace("reset captcha"),this._expiryTimeout&&clearTimeout(this._expiryTimeout),this._workersPool&&this._workersPool.stop(),this._errorCode=0,this.setState(u),this.setProgressState(u),this.ensureNoSolutionField(),this._userStarted=!1,this.setOptions(e),this.init(!1)}updateStyles(){let e=this._element.dataset.styles||"";if(e!==this._options.styles){this._options.styles=e;let t=this._element.querySelector("private-captcha");t&&t.setAttribute("extra-styles",e)}}expire(){this.trace("expire captcha"),this._workersPool&&this._workersPool.stop(),this.setState(u),this.setProgressState(u),this.ensureNoSolutionField(),this.init(this._userStarted)}solution(){return this._solution}onFocusIn(e){this.trace("onFocusIn event handler");let t=this._element.querySelector("private-captcha");if(t&&e.target==t){this.trace("skipping focusin event on captcha element");return}this.init(!1),this.setProgressState(this._state)}execute(){return this.onChecked(),new Promise(()=>{})}onChecked(e){e&&e.stopPropagation(),this.trace(`onChecked event handler. state=${this._state}`),this._userStarted=!0;let t=d,i=!1;switch(this._state){case B:this.start();break;case u:case _:this.init(!0);break;case M:break;case d:setTimeout(()=>this.setProgress(this._lastProgress),500);break;case E:t=E,i=!0;break;default:console.warn("[privatecaptcha] onChecked: unexpected state. state="+this._state);return}this.setProgressState(t),i&&this.signalFinished()}onWorkersReady(e){this.trace(`workers are ready. autostart=${e}`),this.setState(B),this._userStarted||this.setProgressState(B),(e||this._userStarted)&&this.start()}onWorkerError(e){console.error("[privatecaptcha] error in worker:",e),this._errorCode=4}onWorkStarted(){this.signalStarted()}onWorkCompleted(){if(this.trace("[privatecaptcha] work completed"),this._state!==d){console.warn(`[privatecaptcha] solving has not been started. state=${this._state}`);return}this.setState(E),this._userStarted&&this.setProgressState(E),this.saveSolutions(),this._userStarted&&this.signalFinished()}onWorkProgress(e){if(this._state!==d){console.warn(`[privatecaptcha] skipping progress update. state=${this._state}`);return}this.trace(`progress changed. percent=${e}`),this.setProgress(e)}saveSolutions(){let t=`${this._workersPool.serializeSolutions(this._errorCode)}.${this._puzzle.rawData}`;this.ensureNoSolutionField(),this._element.insertAdjacentHTML("beforeend",`<input name="${this._options.fieldName}" type="hidden" value="${t}">`),this._solution=t,this.trace(`saved solutions. field=${this._options.fieldName} payload=${t}`)}setProgressState(e){let t=this._userStarted||V===this._options.displayMode,i=this._element.querySelector("private-captcha");i?(i.setError(this._errorCode),i.setState(e,t)):console.error("[privatecaptcha] component not found when changing state")}setState(e){if(this.trace(`change state. old=${this._state} new=${e}`),this._state=e,this._options.debug){let t=this._element.querySelector("private-captcha");t&&t.setDebugText(e,_==e)}}setProgress(e){if(this._lastProgress=e,d==this._state||E==this._state){let t=this._element.querySelector("private-captcha");t?t.setProgress(e):console.error("[privatecaptcha] component not found when updating progress")}}trace(e){this._options.debug&&console.debug("[privatecaptcha]",e)}};export{ie as CaptchaWidget,ye as RECAPTCHA_COMPAT};
69
+ </div>`,r){let I=this._root.getElementById(b);I?I.addEventListener("change",this.onCheckboxClicked.bind(this)):console.warn("[privatecaptcha][progress] checkbox not found in the Shadow DOM")}}onCheckboxClicked(e){if(e.preventDefault(),this._debug&&console.debug("[privatecaptcha][progress] checkbox was clicked"),e.target.checked){let t=new CustomEvent("privatecaptcha:checked",{bubbles:!0,composed:!0});this.dispatchEvent(t)}else console.warn("[privatecaptcha][progress] checkbox was unchecked")}setProgress(e){if(d==this._state){let t=this._root.getElementById(L);t?t.setProgress(e):console.warn("[privatecaptcha][progress] progress element not found")}else this._debug&&console.debug("[privatecaptcha][progress] skipping updating progress when not in progress")}setError(e){this._error=e}setDebugText(e,t){let i=this._root.getElementById(ee);if(i){let r="";if(this._error){let A=K[this._lang];r=te(this._error,A)}else r=`[${e}]`;i.innerHTML=r,t||this._error?i.classList.add(N):i.classList.remove(N)}}static get observedAttributes(){return["state","progress","extra-styles"]}updateStyles(e){let t=this._root.adoptedStyleSheets.filter(i=>i!==this._overridesSheet);if(e){let i=`@layer custom { :host { ${e} } }`;this._overridesSheet||(this._overridesSheet=new CSSStyleSheet),this._overridesSheet.replaceSync(i),this._root.adoptedStyleSheets=[...t,this._overridesSheet]}else this._overridesSheet=null,this._root.adoptedStyleSheets=t}attributeChangedCallback(e,t,i){e==="progress"?this.setProgress(i):e==="extra-styles"&&t!==i&&this.updateStyles(i)}};typeof window<"u"&&window.customElements.define("private-captcha",P);var de="https://api.privatecaptcha.com/puzzle",Ee="https://api.eu.privatecaptcha.com/puzzle",ye="recaptcha";function Qe(o){for(;o&&o.tagName!=="FORM";)o=o.parentElement;return o}var ie=class{constructor(e,t={}){this._element=e,this._puzzle=null,this._expiryTimeout=null,this._state=u,this._lastProgress=null,this._solution=null,this._userStarted=!1,this._options={},this._errorCode=0,this.setOptions(t),this._workersPool=new U({workersReady:this.onWorkersReady.bind(this),workerError:this.onWorkerError.bind(this),workStarted:this.onWorkStarted.bind(this),workCompleted:this.onWorkCompleted.bind(this),progress:this.onWorkProgress.bind(this)},this._options.debug);let i=Qe(this._element);if(i){if(i.addEventListener("focusin",this.onFocusIn.bind(this),{once:!0,passive:!0}),this._element.innerHTML=`<private-captcha display-mode="${this._options.displayMode}" lang="${this._options.lang}" theme="${this._options.theme}" extra-styles="${this._options.styles}"${this._options.debug?' debug="true"':""}></private-captcha>`,this._element.addEventListener("privatecaptcha:checked",this.onChecked.bind(this)),this._options.storeVariable&&(this._element[this._options.storeVariable]=this),$===this._options.displayMode){let r=i.querySelector(".private-captcha-anchor");r?r.style.position="relative":console.warn("[privatecaptcha] cannot find anchor for popup")}this.checkConfigured()}else console.warn("[privatecaptcha] cannot find form element")}setOptions(e){let i=this._element.dataset.eu||null?Ee:de,r="private-captcha-solution";e.hasOwnProperty("compat")&&e.compat===ye&&(r="g-recaptcha-response");let A="";e.hasOwnProperty("sitekey")&&(A=e.sitekey),this._options=Object.assign({startMode:this._element.dataset.startMode||"auto",debug:this._element.dataset.debug,fieldName:this._element.dataset.solutionField||r,puzzleEndpoint:this._element.dataset.puzzleEndpoint||i,sitekey:A||this._element.dataset.sitekey||"",displayMode:this._element.dataset.displayMode||"widget",lang:this._element.dataset.lang||"en",theme:this._element.dataset.theme||"light",styles:this._element.dataset.styles||"",storeVariable:this._element.dataset.storeVariable||null},e)}async init(e){this.trace(`init() was called. state=${this._state}`),this._puzzle=null,this._solution=null,this._errorCode=0;let t=this.checkConfigured();if(!t)return;if(this._state!=u&&this._state!=_){console.warn(`[privatecaptcha] captcha has already been initialized. state=${this._state}`);return}this._workersPool&&this._workersPool.stop();let i=this._options.startMode=="auto"||e;try{this.setState(M),this.trace(`fetching puzzle. sitekey=${t}`);let r=await Z(this._options.puzzleEndpoint,t);this._puzzle=new v(r),this._puzzle&&this._puzzle.isZero()&&(this._errorCode=2);let A=this._puzzle.expirationMillis();this.trace(`parsed puzzle buffer. isZero=${this._puzzle.isZero()} ttl=${A/1e3}`),this._expiryTimeout&&clearTimeout(this._expiryTimeout),A&&(this._expiryTimeout=setTimeout(()=>this.expire(),A)),this._workersPool.init(this._puzzle,i),this.signalInit()}catch(r){console.error("[privatecaptcha]",r),this._expiryTimeout&&clearTimeout(this._expiryTimeout),this._errorCode=3,this.setState(_),this.setProgressState(this._userStarted?E:u),this.saveSolutions(),this._userStarted&&this.signalErrored()}}checkConfigured(){let e=this._options.sitekey||this._element.dataset.sitekey;return e||(console.error("[privatecaptcha] sitekey not set on captcha element"),this._errorCode=1,this.setState(O),this.setProgressState(O),null)}start(){if(this._state!==B){console.warn(`[privatecaptcha] solving has already been started. state=${this._state}`);return}this.trace("starting solving captcha");try{this.setState(d),this._workersPool.solve(this._puzzle)}catch(e){console.error("[privatecaptcha]",e)}}dispatchEvent(e,t={}){let i=new CustomEvent(`privatecaptcha:${e}`,{bubbles:!1,detail:{widget:this,element:this._element,...t}});this._element.dispatchEvent(i)}signalInit(){this.dispatchEvent("init");let e=this._element.dataset.initCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in init callback:",t)}}signalStarted(){this.dispatchEvent("start");let e=this._element.dataset.startedCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in started callback:",t)}}signalFinished(){this.dispatchEvent("finish");let e=this._element.dataset.finishedCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in finished callback:",t)}}signalErrored(){this.dispatchEvent("error");let e=this._element.dataset.erroredCallback;if(e)try{window[e](this)}catch(t){console.error("[privatecaptcha] Error in errored callback:",t)}}ensureNoSolutionField(){let e=this._element.querySelector(`input[name="${this._options.fieldName}"]`);if(e)try{this._element.removeChild(e)}catch(t){console.warn("[privatecaptcha]",t)}}reset(e={}){this.trace("reset captcha"),this._expiryTimeout&&clearTimeout(this._expiryTimeout),this._workersPool&&this._workersPool.stop(),this._errorCode=0,this.setState(u),this.setProgressState(u),this.ensureNoSolutionField(),this._userStarted=!1,this.setOptions(e),this.init(!1)}updateStyles(){let e=this._element.dataset.styles||"";if(e!==this._options.styles){this._options.styles=e;let t=this._element.querySelector("private-captcha");t&&t.setAttribute("extra-styles",e)}}expire(){this.trace("expire captcha"),this._workersPool&&this._workersPool.stop(),this.setState(u),this.setProgressState(u),this.ensureNoSolutionField(),this.init(this._userStarted)}solution(){return this._solution}onFocusIn(e){this.trace("onFocusIn event handler");let t=this._element.querySelector("private-captcha");if(t&&e.target==t){this.trace("skipping focusin event on captcha element");return}this.init(!1),this.setProgressState(this._state)}execute(){return this.onChecked(),new Promise(()=>{})}onChecked(e){e&&e.stopPropagation(),this.trace(`onChecked event handler. state=${this._state}`),this._userStarted=!0;let t=d,i=!1;switch(this._state){case B:this.start();break;case u:case _:this.init(!0);break;case M:break;case d:setTimeout(()=>this.setProgress(this._lastProgress),500);break;case E:t=E,i=!0;break;default:console.warn("[privatecaptcha] onChecked: unexpected state. state="+this._state);return}this.setProgressState(t),i&&this.signalFinished()}onWorkersReady(e){this.trace(`workers are ready. autostart=${e}`),this.setState(B),this._userStarted||this.setProgressState(B),(e||this._userStarted)&&this.start()}onWorkerError(e){console.error("[privatecaptcha] error in worker:",e),this._errorCode=4}onWorkStarted(){this.signalStarted()}onWorkCompleted(){if(this.trace("[privatecaptcha] work completed"),this._state!==d){console.warn(`[privatecaptcha] solving has not been started. state=${this._state}`);return}this.setState(E),this._userStarted&&this.setProgressState(E),this.saveSolutions(),this._userStarted&&this.signalFinished()}onWorkProgress(e){if(this._state!==d){console.warn(`[privatecaptcha] skipping progress update. state=${this._state}`);return}this.trace(`progress changed. percent=${e}`),this.setProgress(e)}saveSolutions(){let t=`${this._workersPool.serializeSolutions(this._errorCode)}.${this._puzzle.rawData}`;this.ensureNoSolutionField(),this._element.insertAdjacentHTML("beforeend",`<input name="${this._options.fieldName}" type="hidden" value="${t}">`),this._solution=t,this.trace(`saved solutions. field=${this._options.fieldName} payload=${t}`)}setProgressState(e){let t=this._userStarted||V===this._options.displayMode,i=this._element.querySelector("private-captcha");i?(i.setError(this._errorCode),i.setState(e,t)):console.error("[privatecaptcha] component not found when changing state")}setState(e){if(this.trace(`change state. old=${this._state} new=${e}`),this._state=e,this._options.debug){let t=this._element.querySelector("private-captcha");t&&t.setDebugText(e,_==e)}}setProgress(e){if(this._lastProgress=e,d==this._state||E==this._state){let t=this._element.querySelector("private-captcha");t?t.setProgress(e):console.error("[privatecaptcha] component not found when updating progress")}}trace(e){this._options.debug&&console.debug("[privatecaptcha]",e)}};export{ie as CaptchaWidget,ye as RECAPTCHA_COMPAT};
70
70
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../node_modules/src/index.ts", "../js/puzzle.js", "inline-worker:__inline-worker", "../js/puzzle.worker.js", "../js/workerspool.js", "../js/utils.js", "../js/progress.js", "../js/styles.css", "../js/strings.js", "../js/html.js", "../js/widget.js"],
4
- "sourcesContent": ["const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n let bytes = new Uint8Array(arraybuffer),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n\n return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n let bufferLength = base64.length * 0.75,\n len = base64.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n const arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n};\n", "'use strict';\n\nimport { decode } from 'base64-arraybuffer';\n\nconst PUZZLE_BUFFER_LENGTH = 128;\n// RequestTimeout, Conflict, TooManyRequests\nconst ACCEPTABLE_CLIENT_ERRORS = [408, 409, 429];\n\nexport async function getPuzzle(endpoint, sitekey) {\n try {\n const response = await fetchWithBackoff(`${endpoint}?sitekey=${sitekey}`,\n { headers: [[\"x-pc-captcha-version\", \"1\"]], mode: \"cors\" },\n 3 /*max attempts*/\n );\n\n if (response.ok) {\n const data = await response.text()\n return data;\n } else {\n let json = await response.json();\n if (json && json.error) {\n throw Error(json.error);\n }\n }\n } catch (err) {\n console.error('[privatecaptcha]', err);\n throw err;\n }\n\n throw Error('Internal error');\n};\n\nfunction wait(delay) {\n return new Promise((resolve) => setTimeout(resolve, delay));\n}\n\nasync function fetchWithBackoff(url, options, maxAttempts, initialDelay = 800, maxDelay = 6000) {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n if (attempt > 0) {\n const delay = Math.min(initialDelay * Math.pow(2, attempt), maxDelay);\n await wait(delay);\n }\n\n try {\n const response = await fetch(url, options);\n if (response.ok) {\n return response;\n } else {\n console.warn('[privatecaptcha]', `HTTP request failed. url=${url} status=${response.status}`);\n }\n\n if ((response.status >= 400) && (response.status < 500) &&\n !ACCEPTABLE_CLIENT_ERRORS.includes(response.status)) {\n // we don't retry on most client errors\n break;\n } else {\n continue;\n }\n } catch (err) {\n console.error('[privatecaptcha]', err);\n }\n }\n\n throw new Error('Captcha puzzle load failed after maximum retry attempts');\n}\n\nfunction readUInt32LE(binaryData, offset) {\n return (\n binaryData[offset] |\n (binaryData[offset + 1] << 8) |\n (binaryData[offset + 2] << 16) |\n (binaryData[offset + 3] << 24)\n ) >>> 0;\n}\n\nfunction readUInt64LE(binaryData, offset) {\n return (\n BigInt(readUInt32LE(binaryData, offset)) +\n (BigInt(readUInt32LE(binaryData, offset + 4)) << 32n)\n );\n}\n\nexport class Puzzle {\n constructor(rawData) {\n this.puzzleBuffer = null;\n\n this.ID = null;\n this.difficulty = null;\n this.solutionsCount = null;\n this.expirationTimestamp = null;\n this.userData = null;\n\n this.signature = null;\n\n this.parse(rawData);\n this.rawData = rawData;\n }\n\n parse(rawData) {\n const parts = rawData.split('.');\n if (parts.length !== 2) {\n throw Error(`Invalid amount of parts: ${parts.length}`)\n }\n\n const buffer = parts[0];\n this.signature = parts[1];\n\n const data = new Uint8Array(decode(buffer));\n let offset = 0;\n\n offset += 1; // version\n offset += 16; // propertyID\n\n this.ID = readUInt64LE(data, offset);\n offset += 8;\n\n this.difficulty = data[offset];\n offset += 1;\n\n this.solutionsCount = data[offset];\n offset += 1;\n\n this.expirationTimestamp = readUInt32LE(data, offset);\n offset += 4;\n\n offset += 4; // AccountID\n\n const userDataSize = 16;\n this.userData = data.slice(offset, offset + userDataSize);\n offset += userDataSize;\n\n let puzzleBuffer = data;\n if (puzzleBuffer.length < PUZZLE_BUFFER_LENGTH) {\n const enlargedBuffer = new Uint8Array(PUZZLE_BUFFER_LENGTH);\n enlargedBuffer.set(puzzleBuffer);\n this.puzzleBuffer = enlargedBuffer;\n } else {\n this.puzzleBuffer = puzzleBuffer;\n }\n }\n\n isZero() {\n return (this.ID === 0n) && (this.difficulty === 0) && (this.expirationTimestamp === 0);\n }\n\n expirationMillis() {\n if (!this.expirationTimestamp) { return 0; }\n\n const expiration = new Date(this.expirationTimestamp * 1000);\n const currentDate = new Date();\n const diff = expiration - currentDate;\n return diff;\n }\n};\n", "\nexport default function inlineWorker(scriptText) {\n let blob = new Blob([scriptText], {type: 'text/javascript'});\n let url = URL.createObjectURL(blob);\n let worker = new Worker(url);\n URL.revokeObjectURL(url);\n return worker;\n}\n", "import inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"var gI=Object.create;var iA=Object.defineProperty;var CI=Object.getOwnPropertyDescriptor;var oI=Object.getOwnPropertyNames;var hI=Object.getPrototypeOf,rI=Object.prototype.hasOwnProperty;var l=(A,i)=>()=>(i||A((i={exports:{}}).exports,i),i.exports);var EI=(A,i,I,e)=>{if(i&&typeof i==\\\"object\\\"||typeof i==\\\"function\\\")for(let t of oI(i))!rI.call(A,t)&&t!==I&&iA(A,t,{get:()=>i[t],enumerable:!(e=CI(i,t))||e.enumerable});return A};var eA=(A,i,I)=>(I=A!=null?gI(hI(A)):{},EI(i||!A||!A.__esModule?iA(I,\\\"default\\\",{value:A,enumerable:!0}):I,A));var gA=l((Ui,nA)=>{nA.exports=tA;var G=class extends Error{};G.prototype.name=\\\"AssertionError\\\";function tA(A,i){if(!A){var I=new G(i);throw Error.captureStackTrace&&Error.captureStackTrace(I,tA),I}}});var hA=l((Si,oA)=>{function CA(A){return A.length}function QI(A){let i=A.byteLength,I=\\\"\\\";for(let e=0;e<i;e++)I+=String.fromCharCode(A[e]);return I}function fI(A,i,I=0,e=CA(i)){let t=Math.min(e,A.byteLength-I);for(let n=0;n<t;n++)A[I+n]=i.charCodeAt(n);return t}oA.exports={byteLength:CA,toString:QI,write:fI}});var QA=l((Fi,EA)=>{var H=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\",p=new Uint8Array(256);for(let A=0;A<H.length;A++)p[H.charCodeAt(A)]=A;p[45]=62;p[95]=63;function rA(A){let i=A.length;return A.charCodeAt(i-1)===61&&i--,i>1&&A.charCodeAt(i-1)===61&&i--,i*3>>>2}function BI(A){let i=A.byteLength,I=\\\"\\\";for(let e=0;e<i;e+=3)I+=H[A[e]>>2]+H[(A[e]&3)<<4|A[e+1]>>4]+H[(A[e+1]&15)<<2|A[e+2]>>6]+H[A[e+2]&63];return i%3===2?I=I.substring(0,I.length-1)+\\\"=\\\":i%3===1&&(I=I.substring(0,I.length-2)+\\\"==\\\"),I}function sI(A,i,I=0,e=rA(i)){let t=Math.min(e,A.byteLength-I);for(let n=0,g=0;g<t;n+=4){let o=p[i.charCodeAt(n)],r=p[i.charCodeAt(n+1)],E=p[i.charCodeAt(n+2)],Q=p[i.charCodeAt(n+3)];A[g++]=o<<2|r>>4,A[g++]=(r&15)<<4|E>>2,A[g++]=(E&3)<<6|Q&63}return t}EA.exports={byteLength:rA,toString:BI,write:sI}});var yA=l((Ki,sA)=>{function BA(A){return A.length>>>1}function yI(A){let i=A.byteLength;A=new DataView(A.buffer,A.byteOffset,i);let I=\\\"\\\",e=0;for(let t=i-i%4;e<t;e+=4)I+=A.getUint32(e).toString(16).padStart(8,\\\"0\\\");for(;e<i;e++)I+=A.getUint8(e).toString(16).padStart(2,\\\"0\\\");return I}function lI(A,i,I=0,e=BA(i)){let t=Math.min(e,A.byteLength-I);for(let n=0;n<t;n++){let g=fA(i.charCodeAt(n*2)),o=fA(i.charCodeAt(n*2+1));if(g===void 0||o===void 0)return A.subarray(0,n);A[I+n]=g<<4|o}return t}sA.exports={byteLength:BA,toString:yI,write:lI};function fA(A){if(A>=48&&A<=57)return A-48;if(A>=65&&A<=70)return A-65+10;if(A>=97&&A<=102)return A-97+10}});var aA=l((pi,lA)=>{function _(A){let i=0;for(let I=0,e=A.length;I<e;I++){let t=A.charCodeAt(I);if(t>=55296&&t<=56319&&I+1<e){let n=A.charCodeAt(I+1);if(n>=56320&&n<=57343){i+=4,I++;continue}}t<=127?i+=1:t<=2047?i+=2:i+=3}return i}var X;if(typeof TextDecoder!=\\\"undefined\\\"){let A=new TextDecoder;X=function(I){return A.decode(I)}}else X=function(i){let I=i.byteLength,e=\\\"\\\",t=0;for(;t<I;){let n=i[t];if(n<=127){e+=String.fromCharCode(n),t++;continue}let g=0,o=0;if(n<=223?(g=1,o=n&31):n<=239?(g=2,o=n&15):n<=244&&(g=3,o=n&7),I-t-g>0){let r=0;for(;r<g;)n=i[t+r+1],o=o<<6|n&63,r+=1}else o=65533,g=I-t;e+=String.fromCodePoint(o),t+=g+1}return e};var q;if(typeof TextEncoder!=\\\"undefined\\\"){let A=new TextEncoder;q=function(I,e,t=0,n=_(e)){let g=Math.min(n,I.byteLength-t);return A.encodeInto(e,I.subarray(t,t+g)),g}}else q=function(i,I,e=0,t=_(I)){let n=Math.min(t,i.byteLength-e);i=i.subarray(e,e+n);let g=0,o=0;for(;g<I.length;){let r=I.codePointAt(g);if(r<=127){i[o++]=r,g++;continue}let E=0,Q=0;for(r<=2047?(E=6,Q=192):r<=65535?(E=12,Q=224):r<=2097151&&(E=18,Q=240),i[o++]=Q|r>>E,E-=6;E>=0;)i[o++]=128|r>>E&63,E-=6;g+=r>=65536?2:1}return n};lA.exports={byteLength:_,toString:X,write:q}});var uA=l((bi,cA)=>{function wA(A){return A.length*2}function aI(A){let i=A.byteLength,I=\\\"\\\";for(let e=0;e<i-1;e+=2)I+=String.fromCharCode(A[e]+A[e+1]*256);return I}function wI(A,i,I=0,e=wA(i)){let t=Math.min(e,A.byteLength-I),n=t;for(let g=0;g<i.length&&!((n-=2)<0);++g){let o=i.charCodeAt(g),r=o>>8,E=o%256;A[I+g*2]=E,A[I+g*2+1]=r}return t}cA.exports={byteLength:wA,toString:aI,write:wI}});var KA=l((W,FA)=>{var cI=hA(),uI=QA(),DI=yA(),UI=aA(),SI=uA(),k=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function V(A){switch(A){case\\\"ascii\\\":return cI;case\\\"base64\\\":return uI;case\\\"hex\\\":return DI;case\\\"utf8\\\":case\\\"utf-8\\\":case void 0:return UI;case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return SI;default:throw new Error(`Unknown encoding: ${A}`)}}function DA(A){return A instanceof Uint8Array}function FI(A){try{return V(A),!0}catch(i){return!1}}function KI(A,i,I){let e=new Uint8Array(A);return i!==void 0&&W.fill(e,i,0,e.byteLength,I),e}function pI(A){return new Uint8Array(A)}function bI(A){return new Uint8Array(A)}function xI(A,i){return V(i).byteLength(A)}function HI(A,i){if(A===i)return 0;let I=Math.min(A.byteLength,i.byteLength);A=new DataView(A.buffer,A.byteOffset,A.byteLength),i=new DataView(i.buffer,i.byteOffset,i.byteLength);let e=0;for(let t=I-I%4;e<t;e+=4){let n=A.getUint32(e,k),g=i.getUint32(e,k);if(n!==g)break}for(;e<I;e++){let t=A.getUint8(e),n=i.getUint8(e);if(t<n)return-1;if(t>n)return 1}return A.byteLength>i.byteLength?1:A.byteLength<i.byteLength?-1:0}function dI(A,i){i===void 0&&(i=A.reduce((t,n)=>t+n.byteLength,0));let I=new Uint8Array(i),e=0;for(let t of A){if(e+t.byteLength>I.byteLength){let n=t.subarray(0,I.byteLength-e);return I.set(n,e),I}I.set(t,e),e+=t.byteLength}return I}function mI(A,i,I=0,e=0,t=A.byteLength){if(t>0&&t<e||t===e||A.byteLength===0||i.byteLength===0)return 0;if(I<0)throw new RangeError(\\\"targetStart is out of range\\\");if(e<0||e>=A.byteLength)throw new RangeError(\\\"sourceStart is out of range\\\");if(t<0)throw new RangeError(\\\"sourceEnd is out of range\\\");I>=i.byteLength&&(I=i.byteLength),t>A.byteLength&&(t=A.byteLength),i.byteLength-I<t-e&&(t=i.length-I+e);let n=t-e;return A===i?i.copyWithin(I,e,t):i.set(A.subarray(e,t),I),n}function VI(A,i){if(A===i)return!0;if(A.byteLength!==i.byteLength)return!1;let I=A.byteLength;A=new DataView(A.buffer,A.byteOffset,A.byteLength),i=new DataView(i.buffer,i.byteOffset,i.byteLength);let e=0;for(let t=I-I%4;e<t;e+=4)if(A.getUint32(e,k)!==i.getUint32(e,k))return!1;for(;e<I;e++)if(A.getUint8(e)!==i.getUint8(e))return!1;return!0}function LI(A,i,I,e,t){if(typeof i==\\\"string\\\"?typeof I==\\\"string\\\"?(t=I,I=0,e=A.byteLength):typeof e==\\\"string\\\"&&(t=e,e=A.byteLength):typeof i==\\\"number\\\"?i=i&255:typeof i==\\\"boolean\\\"&&(i=+i),I<0||A.byteLength<I||A.byteLength<e)throw new RangeError(\\\"Out of range index\\\");if(I===void 0&&(I=0),e===void 0&&(e=A.byteLength),e<=I)return A;if(i||(i=0),typeof i==\\\"number\\\")for(let n=I;n<e;++n)A[n]=i;else{i=DA(i)?i:j(i,t);let n=i.byteLength;for(let g=0;g<e-I;++g)A[g+I]=i[g%n]}return A}function j(A,i,I){return typeof A==\\\"string\\\"?YI(A,i):Array.isArray(A)?MI(A):ArrayBuffer.isView(A)?GI(A):kI(A,i,I)}function YI(A,i){let I=V(i),e=new Uint8Array(I.byteLength(A));return I.write(e,A,0,e.byteLength),e}function MI(A){let i=new Uint8Array(A.length);return i.set(A),i}function GI(A){let i=new Uint8Array(A.byteLength);return i.set(A),i}function kI(A,i,I){return new Uint8Array(A,i,I)}function PI(A,i,I,e){return SA(A,i,I,e)!==-1}function UA(A,i,I,e,t){if(A.byteLength===0)return-1;if(typeof I==\\\"string\\\"?(e=I,I=0):I===void 0?I=t?0:A.length-1:I<0&&(I+=A.byteLength),I>=A.byteLength){if(t)return-1;I=A.byteLength-1}else if(I<0)if(t)I=0;else return-1;if(typeof i==\\\"string\\\")i=j(i,e);else if(typeof i==\\\"number\\\")return i=i&255,t?A.indexOf(i,I):A.lastIndexOf(i,I);if(i.byteLength===0)return-1;if(t){let n=-1;for(let g=I;g<A.byteLength;g++)if(A[g]===i[n===-1?0:g-n]){if(n===-1&&(n=g),g-n+1===i.byteLength)return n}else n!==-1&&(g-=g-n),n=-1}else{I+i.byteLength>A.byteLength&&(I=A.byteLength-i.byteLength);for(let n=I;n>=0;n--){let g=!0;for(let o=0;o<i.byteLength;o++)if(A[n+o]!==i[o]){g=!1;break}if(g)return n}}return-1}function SA(A,i,I,e){return UA(A,i,I,e,!0)}function NI(A,i,I,e){return UA(A,i,I,e,!1)}function b(A,i,I){let e=A[i];A[i]=A[I],A[I]=e}function OI(A){let i=A.byteLength;if(i%2!==0)throw new RangeError(\\\"Buffer size must be a multiple of 16-bits\\\");for(let I=0;I<i;I+=2)b(A,I,I+1);return A}function JI(A){let i=A.byteLength;if(i%4!==0)throw new RangeError(\\\"Buffer size must be a multiple of 32-bits\\\");for(let I=0;I<i;I+=4)b(A,I,I+3),b(A,I+1,I+2);return A}function RI(A){let i=A.byteLength;if(i%8!==0)throw new RangeError(\\\"Buffer size must be a multiple of 64-bits\\\");for(let I=0;I<i;I+=8)b(A,I,I+7),b(A,I+1,I+6),b(A,I+2,I+5),b(A,I+3,I+4);return A}function TI(A){return A}function _I(A,i,I=0,e=A.byteLength){let t=A.byteLength;return I>=t||e<=I?\\\"\\\":(I<0&&(I=0),e>t&&(e=t),(I!==0||e<t)&&(A=A.subarray(I,e)),V(i).toString(A))}function XI(A,i,I,e,t){return I===void 0?t=\\\"utf8\\\":e===void 0&&typeof I==\\\"string\\\"?(t=I,I=void 0):t===void 0&&typeof e==\\\"string\\\"&&(t=e,e=void 0),V(t).write(A,i,I,e)}function qI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setFloat64(I,i,!0),I+8}function jI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setFloat32(I,i,!0),I+4}function WI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setUint32(I,i,!0),I+4}function zI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setInt32(I,i,!0),I+4}function ZI(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getFloat64(i,!0)}function vI(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getFloat32(i,!0)}function $I(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getUint32(i,!0)}function Ai(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getInt32(i,!0)}FA.exports=W={isBuffer:DA,isEncoding:FI,alloc:KI,allocUnsafe:pI,allocUnsafeSlow:bI,byteLength:xI,compare:HI,concat:dI,copy:mI,equals:VI,fill:LI,from:j,includes:PI,indexOf:SA,lastIndexOf:NI,swap16:OI,swap32:JI,swap64:RI,toBuffer:TI,toString:_I,write:XI,writeDoubleLE:qI,writeFloatLE:jI,writeUInt32LE:WI,writeInt32LE:zI,readDoubleLE:ZI,readFloatLE:vI,readUInt32LE:$I,readInt32LE:Ai}});var bA=l((xi,pA)=>{var Ii=(A,i)=>function(){return i||(0,A[Object.keys(A)[0]])((i={exports:{}}).exports,i),i.exports},ii=(()=>{for(var A=new Uint8Array(128),i=0;i<64;i++)A[i<26?i+65:i<52?i+71:i<62?i-4:i*4-205]=i;return I=>{for(var e=I.length,t=new Uint8Array((e-(I[e-1]==\\\"=\\\")-(I[e-2]==\\\"=\\\"))*3/4|0),n=0,g=0;n<e;){var o=A[I.charCodeAt(n++)],r=A[I.charCodeAt(n++)],E=A[I.charCodeAt(n++)],Q=A[I.charCodeAt(n++)];t[g++]=o<<2|r>>4,t[g++]=r<<4|E>>2,t[g++]=E<<6|Q}return t}})(),ei=Ii({\\\"wasm-binary:./blake2b.wat\\\"(A,i){i.exports=ii(\\\"AGFzbQEAAAABEANgAn9/AGADf39/AGABfwADBQQAAQICBQUBAQroBwdNBQZtZW1vcnkCAAxibGFrZTJiX2luaXQAAA5ibGFrZTJiX3VwZGF0ZQABDWJsYWtlMmJfZmluYWwAAhBibGFrZTJiX2NvbXByZXNzAAMKvz8EwAIAIABCADcDACAAQgA3AwggAEIANwMQIABCADcDGCAAQgA3AyAgAEIANwMoIABCADcDMCAAQgA3AzggAEIANwNAIABCADcDSCAAQgA3A1AgAEIANwNYIABCADcDYCAAQgA3A2ggAEIANwNwIABCADcDeCAAQoiS853/zPmE6gBBACkDAIU3A4ABIABCu86qptjQ67O7f0EIKQMAhTcDiAEgAEKr8NP0r+68tzxBECkDAIU3A5ABIABC8e30+KWn/aelf0EYKQMAhTcDmAEgAELRhZrv+s+Uh9EAQSApAwCFNwOgASAAQp/Y+dnCkdqCm39BKCkDAIU3A6gBIABC6/qG2r+19sEfQTApAwCFNwOwASAAQvnC+JuRo7Pw2wBBOCkDAIU3A7gBIABCADcDwAEgAEIANwPIASAAQgA3A9ABC20BA38gAEHAAWohAyAAQcgBaiEEIAQpAwCnIQUCQANAIAEgAkYNASAFQYABRgRAIAMgAykDACAFrXw3AwBBACEFIAAQAwsgACAFaiABLQAAOgAAIAVBAWohBSABQQFqIQEMAAsLIAQgBa03AwALYQEDfyAAQcABaiEBIABByAFqIQIgASABKQMAIAIpAwB8NwMAIABCfzcD0AEgAikDAKchAwJAA0AgA0GAAUYNASAAIANqQQA6AAAgA0EBaiEDDAALCyACIAOtNwMAIAAQAwuqOwIgfgl/IABBgAFqISEgAEGIAWohIiAAQZABaiEjIABBmAFqISQgAEGgAWohJSAAQagBaiEmIABBsAFqIScgAEG4AWohKCAhKQMAIQEgIikDACECICMpAwAhAyAkKQMAIQQgJSkDACEFICYpAwAhBiAnKQMAIQcgKCkDACEIQoiS853/zPmE6gAhCUK7zqqm2NDrs7t/IQpCq/DT9K/uvLc8IQtC8e30+KWn/aelfyEMQtGFmu/6z5SH0QAhDUKf2PnZwpHagpt/IQ5C6/qG2r+19sEfIQ9C+cL4m5Gjs/DbACEQIAApAwAhESAAKQMIIRIgACkDECETIAApAxghFCAAKQMgIRUgACkDKCEWIAApAzAhFyAAKQM4IRggACkDQCEZIAApA0ghGiAAKQNQIRsgACkDWCEcIAApA2AhHSAAKQNoIR4gACkDcCEfIAApA3ghICANIAApA8ABhSENIA8gACkD0AGFIQ8gASAFIBF8fCEBIA0gAYVCIIohDSAJIA18IQkgBSAJhUIYiiEFIAEgBSASfHwhASANIAGFQhCKIQ0gCSANfCEJIAUgCYVCP4ohBSACIAYgE3x8IQIgDiAChUIgiiEOIAogDnwhCiAGIAqFQhiKIQYgAiAGIBR8fCECIA4gAoVCEIohDiAKIA58IQogBiAKhUI/iiEGIAMgByAVfHwhAyAPIAOFQiCKIQ8gCyAPfCELIAcgC4VCGIohByADIAcgFnx8IQMgDyADhUIQiiEPIAsgD3whCyAHIAuFQj+KIQcgBCAIIBd8fCEEIBAgBIVCIIohECAMIBB8IQwgCCAMhUIYiiEIIAQgCCAYfHwhBCAQIASFQhCKIRAgDCAQfCEMIAggDIVCP4ohCCABIAYgGXx8IQEgECABhUIgiiEQIAsgEHwhCyAGIAuFQhiKIQYgASAGIBp8fCEBIBAgAYVCEIohECALIBB8IQsgBiALhUI/iiEGIAIgByAbfHwhAiANIAKFQiCKIQ0gDCANfCEMIAcgDIVCGIohByACIAcgHHx8IQIgDSAChUIQiiENIAwgDXwhDCAHIAyFQj+KIQcgAyAIIB18fCEDIA4gA4VCIIohDiAJIA58IQkgCCAJhUIYiiEIIAMgCCAefHwhAyAOIAOFQhCKIQ4gCSAOfCEJIAggCYVCP4ohCCAEIAUgH3x8IQQgDyAEhUIgiiEPIAogD3whCiAFIAqFQhiKIQUgBCAFICB8fCEEIA8gBIVCEIohDyAKIA98IQogBSAKhUI/iiEFIAEgBSAffHwhASANIAGFQiCKIQ0gCSANfCEJIAUgCYVCGIohBSABIAUgG3x8IQEgDSABhUIQiiENIAkgDXwhCSAFIAmFQj+KIQUgAiAGIBV8fCECIA4gAoVCIIohDiAKIA58IQogBiAKhUIYiiEGIAIgBiAZfHwhAiAOIAKFQhCKIQ4gCiAOfCEKIAYgCoVCP4ohBiADIAcgGnx8IQMgDyADhUIgiiEPIAsgD3whCyAHIAuFQhiKIQcgAyAHICB8fCEDIA8gA4VCEIohDyALIA98IQsgByALhUI/iiEHIAQgCCAefHwhBCAQIASFQiCKIRAgDCAQfCEMIAggDIVCGIohCCAEIAggF3x8IQQgECAEhUIQiiEQIAwgEHwhDCAIIAyFQj+KIQggASAGIBJ8fCEBIBAgAYVCIIohECALIBB8IQsgBiALhUIYiiEGIAEgBiAdfHwhASAQIAGFQhCKIRAgCyAQfCELIAYgC4VCP4ohBiACIAcgEXx8IQIgDSAChUIgiiENIAwgDXwhDCAHIAyFQhiKIQcgAiAHIBN8fCECIA0gAoVCEIohDSAMIA18IQwgByAMhUI/iiEHIAMgCCAcfHwhAyAOIAOFQiCKIQ4gCSAOfCEJIAggCYVCGIohCCADIAggGHx8IQMgDiADhUIQiiEOIAkgDnwhCSAIIAmFQj+KIQggBCAFIBZ8fCEEIA8gBIVCIIohDyAKIA98IQogBSAKhUIYiiEFIAQgBSAUfHwhBCAPIASFQhCKIQ8gCiAPfCEKIAUgCoVCP4ohBSABIAUgHHx8IQEgDSABhUIgiiENIAkgDXwhCSAFIAmFQhiKIQUgASAFIBl8fCEBIA0gAYVCEIohDSAJIA18IQkgBSAJhUI/iiEFIAIgBiAdfHwhAiAOIAKFQiCKIQ4gCiAOfCEKIAYgCoVCGIohBiACIAYgEXx8IQIgDiAChUIQiiEOIAogDnwhCiAGIAqFQj+KIQYgAyAHIBZ8fCEDIA8gA4VCIIohDyALIA98IQsgByALhUIYiiEHIAMgByATfHwhAyAPIAOFQhCKIQ8gCyAPfCELIAcgC4VCP4ohByAEIAggIHx8IQQgECAEhUIgiiEQIAwgEHwhDCAIIAyFQhiKIQggBCAIIB58fCEEIBAgBIVCEIohECAMIBB8IQwgCCAMhUI/iiEIIAEgBiAbfHwhASAQIAGFQiCKIRAgCyAQfCELIAYgC4VCGIohBiABIAYgH3x8IQEgECABhUIQiiEQIAsgEHwhCyAGIAuFQj+KIQYgAiAHIBR8fCECIA0gAoVCIIohDSAMIA18IQwgByAMhUIYiiEHIAIgByAXfHwhAiANIAKFQhCKIQ0gDCANfCEMIAcgDIVCP4ohByADIAggGHx8IQMgDiADhUIgiiEOIAkgDnwhCSAIIAmFQhiKIQggAyAIIBJ8fCEDIA4gA4VCEIohDiAJIA58IQkgCCAJhUI/iiEIIAQgBSAafHwhBCAPIASFQiCKIQ8gCiAPfCEKIAUgCoVCGIohBSAEIAUgFXx8IQQgDyAEhUIQiiEPIAogD3whCiAFIAqFQj+KIQUgASAFIBh8fCEBIA0gAYVCIIohDSAJIA18IQkgBSAJhUIYiiEFIAEgBSAafHwhASANIAGFQhCKIQ0gCSANfCEJIAUgCYVCP4ohBSACIAYgFHx8IQIgDiAChUIgiiEOIAogDnwhCiAGIAqFQhiKIQYgAiAGIBJ8fCECIA4gAoVCEIohDiAKIA58IQogBiAKhUI/iiEGIAMgByAefHwhAyAPIAOFQiCKIQ8gCyAPfCELIAcgC4VCGIohByADIAcgHXx8IQMgDyADhUIQiiEPIAsgD3whCyAHIAuFQj+KIQcgBCAIIBx8fCEEIBAgBIVCIIohECAMIBB8IQwgCCAMhUIYiiEIIAQgCCAffHwhBCAQIASFQhCKIRAgDCAQfCEMIAggDIVCP4ohCCABIAYgE3x8IQEgECABhUIgiiEQIAsgEHwhCyAGIAuFQhiKIQYgASAGIBd8fCEBIBAgAYVCEIohECALIBB8IQsgBiALhUI/iiEGIAIgByAWfHwhAiANIAKFQiCKIQ0gDCANfCEMIAcgDIVCGIohByACIAcgG3x8IQIgDSAChUIQiiENIAwgDXwhDCAHIAyFQj+KIQcgAyAIIBV8fCEDIA4gA4VCIIohDiAJIA58IQkgCCAJhUIYiiEIIAMgCCARfHwhAyAOIAOFQhCKIQ4gCSAOfCEJIAggCYVCP4ohCCAEIAUgIHx8IQQgDyAEhUIgiiEPIAogD3whCiAFIAqFQhiKIQUgBCAFIBl8fCEEIA8gBIVCEIohDyAKIA98IQogBSAKhUI/iiEFIAEgBSAafHwhASANIAGFQiCKIQ0gCSANfCEJIAUgCYVCGIohBSABIAUgEXx8IQEgDSABhUIQiiENIAkgDXwhCSAFIAmFQj+KIQUgAiAGIBZ8fCECIA4gAoVCIIohDiAKIA58IQogBiAKhUIYiiEGIAIgBiAYfHwhAiAOIAKFQhCKIQ4gCiAOfCEKIAYgCoVCP4ohBiADIAcgE3x8IQMgDyADhUIgiiEPIAsgD3whCyAHIAuFQhiKIQcgAyAHIBV8fCEDIA8gA4VCEIohDyALIA98IQsgByALhUI/iiEHIAQgCCAbfHwhBCAQIASFQiCKIRAgDCAQfCEMIAggDIVCGIohCCAEIAggIHx8IQQgECAEhUIQiiEQIAwgEHwhDCAIIAyFQj+KIQggASAGIB98fCEBIBAgAYVCIIohECALIBB8IQsgBiALhUIYiiEGIAEgBiASfHwhASAQIAGFQhCKIRAgCyAQfCELIAYgC4VCP4ohBiACIAcgHHx8IQIgDSAChUIgiiENIAwgDXwhDCAHIAyFQhiKIQcgAiAHIB18fCECIA0gAoVCEIohDSAMIA18IQwgByAMhUI/iiEHIAMgCCAXfHwhAyAOIAOFQiCKIQ4gCSAOfCEJIAggCYVCGIohCCADIAggGXx8IQMgDiADhUIQiiEOIAkgDnwhCSAIIAmFQj+KIQggBCAFIBR8fCEEIA8gBIVCIIohDyAKIA98IQogBSAKhUIYiiEFIAQgBSAefHwhBCAPIASFQhCKIQ8gCiAPfCEKIAUgCoVCP4ohBSABIAUgE3x8IQEgDSABhUIgiiENIAkgDXwhCSAFIAmFQhiKIQUgASAFIB18fCEBIA0gAYVCEIohDSAJIA18IQkgBSAJhUI/iiEFIAIgBiAXfHwhAiAOIAKFQiCKIQ4gCiAOfCEKIAYgCoVCGIohBiACIAYgG3x8IQIgDiAChUIQiiEOIAogDnwhCiAGIAqFQj+KIQYgAyAHIBF8fCEDIA8gA4VCIIohDyALIA98IQsgByALhUIYiiEHIAMgByAcfHwhAyAPIAOFQhCKIQ8gCyAPfCELIAcgC4VCP4ohByAEIAggGXx8IQQgECAEhUIgiiEQIAwgEHwhDCAIIAyFQhiKIQggBCAIIBR8fCEEIBAgBIVCEIohECAMIBB8IQwgCCAMhUI/iiEIIAEgBiAVfHwhASAQIAGFQiCKIRAgCyAQfCELIAYgC4VCGIohBiABIAYgHnx8IQEgECABhUIQiiEQIAsgEHwhCyAGIAuFQj+KIQYgAiAHIBh8fCECIA0gAoVCIIohDSAMIA18IQwgByAMhUIYiiEHIAIgByAWfHwhAiANIAKFQhCKIQ0gDCANfCEMIAcgDIVCP4ohByADIAggIHx8IQMgDiADhUIgiiEOIAkgDnwhCSAIIAmFQhiKIQggAyAIIB98fCEDIA4gA4VCEIohDiAJIA58IQkgCCAJhUI/iiEIIAQgBSASfHwhBCAPIASFQiCKIQ8gCiAPfCEKIAUgCoVCGIohBSAEIAUgGnx8IQQgDyAEhUIQiiEPIAogD3whCiAFIAqFQj+KIQUgASAFIB18fCEBIA0gAYVCIIohDSAJIA18IQkgBSAJhUIYiiEFIAEgBSAWfHwhASANIAGFQhCKIQ0gCSANfCEJIAUgCYVCP4ohBSACIAYgEnx8IQIgDiAChUIgiiEOIAogDnwhCiAGIAqFQhiKIQYgAiAGICB8fCECIA4gAoVCEIohDiAKIA58IQogBiAKhUI/iiEGIAMgByAffHwhAyAPIAOFQiCKIQ8gCyAPfCELIAcgC4VCGIohByADIAcgHnx8IQMgDyADhUIQiiEPIAsgD3whCyAHIAuFQj+KIQcgBCAIIBV8fCEEIBAgBIVCIIohECAMIBB8IQwgCCAMhUIYiiEIIAQgCCAbfHwhBCAQIASFQhCKIRAgDCAQfCEMIAggDIVCP4ohCCABIAYgEXx8IQEgECABhUIgiiEQIAsgEHwhCyAGIAuFQhiKIQYgASAGIBh8fCEBIBAgAYVCEIohECALIBB8IQsgBiALhUI/iiEGIAIgByAXfHwhAiANIAKFQiCKIQ0gDCANfCEMIAcgDIVCGIohByACIAcgFHx8IQIgDSAChUIQiiENIAwgDXwhDCAHIAyFQj+KIQcgAyAIIBp8fCEDIA4gA4VCIIohDiAJIA58IQkgCCAJhUIYiiEIIAMgCCATfHwhAyAOIAOFQhCKIQ4gCSAOfCEJIAggCYVCP4ohCCAEIAUgGXx8IQQgDyAEhUIgiiEPIAogD3whCiAFIAqFQhiKIQUgBCAFIBx8fCEEIA8gBIVCEIohDyAKIA98IQogBSAKhUI/iiEFIAEgBSAefHwhASANIAGFQiCKIQ0gCSANfCEJIAUgCYVCGIohBSABIAUgHHx8IQEgDSABhUIQiiENIAkgDXwhCSAFIAmFQj+KIQUgAiAGIBh8fCECIA4gAoVCIIohDiAKIA58IQogBiAKhUIYiiEGIAIgBiAffHwhAiAOIAKFQhCKIQ4gCiAOfCEKIAYgCoVCP4ohBiADIAcgHXx8IQMgDyADhUIgiiEPIAsgD3whCyAHIAuFQhiKIQcgAyAHIBJ8fCEDIA8gA4VCEIohDyALIA98IQsgByALhUI/iiEHIAQgCCAUfHwhBCAQIASFQiCKIRAgDCAQfCEMIAggDIVCGIohCCAEIAggGnx8IQQgECAEhUIQiiEQIAwgEHwhDCAIIAyFQj+KIQggASAGIBZ8fCEBIBAgAYVCIIohECALIBB8IQsgBiALhUIYiiEGIAEgBiARfHwhASAQIAGFQhCKIRAgCyAQfCELIAYgC4VCP4ohBiACIAcgIHx8IQIgDSAChUIgiiENIAwgDXwhDCAHIAyFQhiKIQcgAiAHIBV8fCECIA0gAoVCEIohDSAMIA18IQwgByAMhUI/iiEHIAMgCCAZfHwhAyAOIAOFQiCKIQ4gCSAOfCEJIAggCYVCGIohCCADIAggF3x8IQMgDiADhUIQiiEOIAkgDnwhCSAIIAmFQj+KIQggBCAFIBN8fCEEIA8gBIVCIIohDyAKIA98IQogBSAKhUIYiiEFIAQgBSAbfHwhBCAPIASFQhCKIQ8gCiAPfCEKIAUgCoVCP4ohBSABIAUgF3x8IQEgDSABhUIgiiENIAkgDXwhCSAFIAmFQhiKIQUgASAFICB8fCEBIA0gAYVCEIohDSAJIA18IQkgBSAJhUI/iiEFIAIgBiAffHwhAiAOIAKFQiCKIQ4gCiAOfCEKIAYgCoVCGIohBiACIAYgGnx8IQIgDiAChUIQiiEOIAogDnwhCiAGIAqFQj+KIQYgAyAHIBx8fCEDIA8gA4VCIIohDyALIA98IQsgByALhUIYiiEHIAMgByAUfHwhAyAPIAOFQhCKIQ8gCyAPfCELIAcgC4VCP4ohByAEIAggEXx8IQQgECAEhUIgiiEQIAwgEHwhDCAIIAyFQhiKIQggBCAIIBl8fCEEIBAgBIVCEIohECAMIBB8IQwgCCAMhUI/iiEIIAEgBiAdfHwhASAQIAGFQiCKIRAgCyAQfCELIAYgC4VCGIohBiABIAYgE3x8IQEgECABhUIQiiEQIAsgEHwhCyAGIAuFQj+KIQYgAiAHIB58fCECIA0gAoVCIIohDSAMIA18IQwgByAMhUIYiiEHIAIgByAYfHwhAiANIAKFQhCKIQ0gDCANfCEMIAcgDIVCP4ohByADIAggEnx8IQMgDiADhUIgiiEOIAkgDnwhCSAIIAmFQhiKIQggAyAIIBV8fCEDIA4gA4VCEIohDiAJIA58IQkgCCAJhUI/iiEIIAQgBSAbfHwhBCAPIASFQiCKIQ8gCiAPfCEKIAUgCoVCGIohBSAEIAUgFnx8IQQgDyAEhUIQiiEPIAogD3whCiAFIAqFQj+KIQUgASAFIBt8fCEBIA0gAYVCIIohDSAJIA18IQkgBSAJhUIYiiEFIAEgBSATfHwhASANIAGFQhCKIQ0gCSANfCEJIAUgCYVCP4ohBSACIAYgGXx8IQIgDiAChUIgiiEOIAogDnwhCiAGIAqFQhiKIQYgAiAGIBV8fCECIA4gAoVCEIohDiAKIA58IQogBiAKhUI/iiEGIAMgByAYfHwhAyAPIAOFQiCKIQ8gCyAPfCELIAcgC4VCGIohByADIAcgF3x8IQMgDyADhUIQiiEPIAsgD3whCyAHIAuFQj+KIQcgBCAIIBJ8fCEEIBAgBIVCIIohECAMIBB8IQwgCCAMhUIYiiEIIAQgCCAWfHwhBCAQIASFQhCKIRAgDCAQfCEMIAggDIVCP4ohCCABIAYgIHx8IQEgECABhUIgiiEQIAsgEHwhCyAGIAuFQhiKIQYgASAGIBx8fCEBIBAgAYVCEIohECALIBB8IQsgBiALhUI/iiEGIAIgByAafHwhAiANIAKFQiCKIQ0gDCANfCEMIAcgDIVCGIohByACIAcgH3x8IQIgDSAChUIQiiENIAwgDXwhDCAHIAyFQj+KIQcgAyAIIBR8fCEDIA4gA4VCIIohDiAJIA58IQkgCCAJhUIYiiEIIAMgCCAdfHwhAyAOIAOFQhCKIQ4gCSAOfCEJIAggCYVCP4ohCCAEIAUgHnx8IQQgDyAEhUIgiiEPIAogD3whCiAFIAqFQhiKIQUgBCAFIBF8fCEEIA8gBIVCEIohDyAKIA98IQogBSAKhUI/iiEFIAEgBSARfHwhASANIAGFQiCKIQ0gCSANfCEJIAUgCYVCGIohBSABIAUgEnx8IQEgDSABhUIQiiENIAkgDXwhCSAFIAmFQj+KIQUgAiAGIBN8fCECIA4gAoVCIIohDiAKIA58IQogBiAKhUIYiiEGIAIgBiAUfHwhAiAOIAKFQhCKIQ4gCiAOfCEKIAYgCoVCP4ohBiADIAcgFXx8IQMgDyADhUIgiiEPIAsgD3whCyAHIAuFQhiKIQcgAyAHIBZ8fCEDIA8gA4VCEIohDyALIA98IQsgByALhUI/iiEHIAQgCCAXfHwhBCAQIASFQiCKIRAgDCAQfCEMIAggDIVCGIohCCAEIAggGHx8IQQgECAEhUIQiiEQIAwgEHwhDCAIIAyFQj+KIQggASAGIBl8fCEBIBAgAYVCIIohECALIBB8IQsgBiALhUIYiiEGIAEgBiAafHwhASAQIAGFQhCKIRAgCyAQfCELIAYgC4VCP4ohBiACIAcgG3x8IQIgDSAChUIgiiENIAwgDXwhDCAHIAyFQhiKIQcgAiAHIBx8fCECIA0gAoVCEIohDSAMIA18IQwgByAMhUI/iiEHIAMgCCAdfHwhAyAOIAOFQiCKIQ4gCSAOfCEJIAggCYVCGIohCCADIAggHnx8IQMgDiADhUIQiiEOIAkgDnwhCSAIIAmFQj+KIQggBCAFIB98fCEEIA8gBIVCIIohDyAKIA98IQogBSAKhUIYiiEFIAQgBSAgfHwhBCAPIASFQhCKIQ8gCiAPfCEKIAUgCoVCP4ohBSABIAUgH3x8IQEgDSABhUIgiiENIAkgDXwhCSAFIAmFQhiKIQUgASAFIBt8fCEBIA0gAYVCEIohDSAJIA18IQkgBSAJhUI/iiEFIAIgBiAVfHwhAiAOIAKFQiCKIQ4gCiAOfCEKIAYgCoVCGIohBiACIAYgGXx8IQIgDiAChUIQiiEOIAogDnwhCiAGIAqFQj+KIQYgAyAHIBp8fCEDIA8gA4VCIIohDyALIA98IQsgByALhUIYiiEHIAMgByAgfHwhAyAPIAOFQhCKIQ8gCyAPfCELIAcgC4VCP4ohByAEIAggHnx8IQQgECAEhUIgiiEQIAwgEHwhDCAIIAyFQhiKIQggBCAIIBd8fCEEIBAgBIVCEIohECAMIBB8IQwgCCAMhUI/iiEIIAEgBiASfHwhASAQIAGFQiCKIRAgCyAQfCELIAYgC4VCGIohBiABIAYgHXx8IQEgECABhUIQiiEQIAsgEHwhCyAGIAuFQj+KIQYgAiAHIBF8fCECIA0gAoVCIIohDSAMIA18IQwgByAMhUIYiiEHIAIgByATfHwhAiANIAKFQhCKIQ0gDCANfCEMIAcgDIVCP4ohByADIAggHHx8IQMgDiADhUIgiiEOIAkgDnwhCSAIIAmFQhiKIQggAyAIIBh8fCEDIA4gA4VCEIohDiAJIA58IQkgCCAJhUI/iiEIIAQgBSAWfHwhBCAPIASFQiCKIQ8gCiAPfCEKIAUgCoVCGIohBSAEIAUgFHx8IQQgDyAEhUIQiiEPIAogD3whCiAFIAqFQj+KIQUgISAhKQMAIAEgCYWFNwMAICIgIikDACACIAqFhTcDACAjICMpAwAgAyALhYU3AwAgJCAkKQMAIAQgDIWFNwMAICUgJSkDACAFIA2FhTcDACAmICYpAwAgBiAOhYU3AwAgJyAnKQMAIAcgD4WFNwMAICggKCkDACAIIBCFhTcDAAs=\\\")}}),ti=ei(),ni=WebAssembly.compile(ti);pA.exports=async A=>(await WebAssembly.instantiate(await ni,A)).exports});var MA=l((mi,c)=>{var a=gA(),gi=KA(),U=null,xA=typeof WebAssembly!=\\\"undefined\\\"&&bA()().then(A=>{U=A}),D=64,P=[];c.exports=y;var HA=c.exports.BYTES_MIN=16,dA=c.exports.BYTES_MAX=64,Hi=c.exports.BYTES=32,mA=c.exports.KEYBYTES_MIN=16,VA=c.exports.KEYBYTES_MAX=64,di=c.exports.KEYBYTES=32,LA=c.exports.SALTBYTES=16,YA=c.exports.PERSONALBYTES=16;function y(A,i,I,e,t){if(!(this instanceof y))return new y(A,i,I,e,t);if(!U)throw new Error(\\\"WASM not loaded. Wait for Blake2b.ready(cb)\\\");A||(A=32),t!==!0&&(a(A>=HA,\\\"digestLength must be at least \\\"+HA+\\\", was given \\\"+A),a(A<=dA,\\\"digestLength must be at most \\\"+dA+\\\", was given \\\"+A),i!=null&&(a(i instanceof Uint8Array,\\\"key must be Uint8Array or Buffer\\\"),a(i.length>=mA,\\\"key must be at least \\\"+mA+\\\", was given \\\"+i.length),a(i.length<=VA,\\\"key must be at least \\\"+VA+\\\", was given \\\"+i.length)),I!=null&&(a(I instanceof Uint8Array,\\\"salt must be Uint8Array or Buffer\\\"),a(I.length===LA,\\\"salt must be exactly \\\"+LA+\\\", was given \\\"+I.length)),e!=null&&(a(e instanceof Uint8Array,\\\"personal must be Uint8Array or Buffer\\\"),a(e.length===YA,\\\"personal must be exactly \\\"+YA+\\\", was given \\\"+e.length))),P.length||(P.push(D),D+=216),this.digestLength=A,this.finalized=!1,this.pointer=P.pop(),this._memory=new Uint8Array(U.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=i?i.length:0,this._memory[2]=1,this._memory[3]=1,I&&this._memory.set(I,32),e&&this._memory.set(e,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),U.blake2b_init(this.pointer,this.digestLength),i&&(this.update(i),this._memory.fill(0,D,D+i.length),this._memory[this.pointer+200]=128)}y.prototype._realloc=function(A){U.memory.grow(Math.max(0,Math.ceil(Math.abs(A-this._memory.length)/65536))),this._memory=new Uint8Array(U.memory.buffer)};y.prototype.update=function(A){return a(this.finalized===!1,\\\"Hash instance finalized\\\"),a(A instanceof Uint8Array,\\\"input must be Uint8Array or Buffer\\\"),D+A.length>this._memory.length&&this._realloc(D+A.length),this._memory.set(A,D),U.blake2b_update(this.pointer,D,D+A.length),this};y.prototype.digest=function(A){if(a(this.finalized===!1,\\\"Hash instance finalized\\\"),this.finalized=!0,P.push(this.pointer),U.blake2b_final(this.pointer),!A||A===\\\"binary\\\")return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if(typeof A==\\\"string\\\")return gi.toString(this._memory,A,this.pointer+128,this.pointer+128+this.digestLength);a(A instanceof Uint8Array&&A.length>=this.digestLength,\\\"input must be Uint8Array or Buffer\\\");for(var i=0;i<this.digestLength;i++)A[i]=this._memory[this.pointer+128+i];return A};y.prototype.final=y.prototype.digest;y.WASM=U;y.SUPPORTED=typeof WebAssembly!=\\\"undefined\\\";y.ready=function(A){return A||(A=Ci),xA?xA.then(()=>A(),A):A(new Error(\\\"WebAssembly not supported\\\"))};y.prototype.ready=y.ready;y.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)};y.prototype.setPartialHash=function(A){this._memory.set(A,this.pointer)};function Ci(){}});var z=l((Vi,GA)=>{var oi=\\\"Input must be an string, Buffer or Uint8Array\\\";function hi(A){let i;if(A instanceof Uint8Array)i=A;else if(typeof A==\\\"string\\\")i=new TextEncoder().encode(A);else throw new Error(oi);return i}function ri(A){return Array.prototype.map.call(A,function(i){return(i<16?\\\"0\\\":\\\"\\\")+i.toString(16)}).join(\\\"\\\")}function N(A){return(4294967296+A).toString(16).substring(1)}function Ei(A,i,I){let e=`\\n`+A+\\\" = \\\";for(let t=0;t<i.length;t+=2){if(I===32)e+=N(i[t]).toUpperCase(),e+=\\\" \\\",e+=N(i[t+1]).toUpperCase();else if(I===64)e+=N(i[t+1]).toUpperCase(),e+=N(i[t]).toUpperCase();else throw new Error(\\\"Invalid size \\\"+I);t%6===4?e+=`\\n`+new Array(A.length+4).join(\\\" \\\"):t<i.length-2&&(e+=\\\" \\\")}console.log(e)}function Qi(A,i,I){let e=new Date().getTime(),t=new Uint8Array(i);for(let g=0;g<i;g++)t[g]=g%256;let n=new Date().getTime();console.log(\\\"Generated random input in \\\"+(n-e)+\\\"ms\\\"),e=n;for(let g=0;g<I;g++){let o=A(t),r=new Date().getTime(),E=r-e;e=r,console.log(\\\"Hashed in \\\"+E+\\\"ms: \\\"+o.substring(0,20)+\\\"...\\\"),console.log(Math.round(i/(1<<20)/(E/1e3)*100)/100+\\\" MB PER SECOND\\\")}}GA.exports={normalizeInput:hi,toHex:ri,debugPrint:Ei,testSpeed:Qi}});var XA=l((Li,_A)=>{var J=z();function O(A,i,I){let e=A[i]+A[I],t=A[i+1]+A[I+1];e>=4294967296&&t++,A[i]=e,A[i+1]=t}function kA(A,i,I,e){let t=A[i]+I;I<0&&(t+=4294967296);let n=A[i+1]+e;t>=4294967296&&n++,A[i]=t,A[i+1]=n}function PA(A,i){return A[i]^A[i+1]<<8^A[i+2]<<16^A[i+3]<<24}function S(A,i,I,e,t,n){let g=L[t],o=L[t+1],r=L[n],E=L[n+1];O(C,A,i),kA(C,A,g,o);let Q=C[e]^C[A],w=C[e+1]^C[A+1];C[e]=w,C[e+1]=Q,O(C,I,e),Q=C[i]^C[I],w=C[i+1]^C[I+1],C[i]=Q>>>24^w<<8,C[i+1]=w>>>24^Q<<8,O(C,A,i),kA(C,A,r,E),Q=C[e]^C[A],w=C[e+1]^C[A+1],C[e]=Q>>>16^w<<16,C[e+1]=w>>>16^Q<<16,O(C,I,e),Q=C[i]^C[I],w=C[i+1]^C[I+1],C[i]=w>>>31^Q<<1,C[i+1]=Q>>>31^w<<1}var NA=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),fi=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3],B=new Uint8Array(fi.map(function(A){return A*2})),C=new Uint32Array(32),L=new Uint32Array(32);function OA(A,i){let I=0;for(I=0;I<16;I++)C[I]=A.h[I],C[I+16]=NA[I];for(C[24]=C[24]^A.t,C[25]=C[25]^A.t/4294967296,i&&(C[28]=~C[28],C[29]=~C[29]),I=0;I<32;I++)L[I]=PA(A.b,4*I);for(I=0;I<12;I++)S(0,8,16,24,B[I*16+0],B[I*16+1]),S(2,10,18,26,B[I*16+2],B[I*16+3]),S(4,12,20,28,B[I*16+4],B[I*16+5]),S(6,14,22,30,B[I*16+6],B[I*16+7]),S(0,10,20,30,B[I*16+8],B[I*16+9]),S(2,12,22,24,B[I*16+10],B[I*16+11]),S(4,14,16,26,B[I*16+12],B[I*16+13]),S(6,8,18,28,B[I*16+14],B[I*16+15]);for(I=0;I<16;I++)A.h[I]=A.h[I]^C[I]^C[I+16]}var F=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function JA(A,i,I,e){if(A===0||A>64)throw new Error(\\\"Illegal output length, expected 0 < length <= 64\\\");if(i&&i.length>64)throw new Error(\\\"Illegal key, expected Uint8Array with 0 < length <= 64\\\");if(I&&I.length!==16)throw new Error(\\\"Illegal salt, expected Uint8Array with length is 16\\\");if(e&&e.length!==16)throw new Error(\\\"Illegal personal, expected Uint8Array with length is 16\\\");let t={b:new Uint8Array(128),h:new Uint32Array(16),t:0,c:0,outlen:A};F.fill(0),F[0]=A,i&&(F[1]=i.length),F[2]=1,F[3]=1,I&&F.set(I,32),e&&F.set(e,48);for(let n=0;n<16;n++)t.h[n]=NA[n]^PA(F,n*4);return i&&(Z(t,i),t.c=128),t}function Z(A,i){for(let I=0;I<i.length;I++)A.c===128&&(A.t+=A.c,OA(A,!1),A.c=0),A.b[A.c++]=i[I]}function RA(A){for(A.t+=A.c;A.c<128;)A.b[A.c++]=0;OA(A,!0);let i=new Uint8Array(A.outlen);for(let I=0;I<A.outlen;I++)i[I]=A.h[I>>2]>>8*(I&3);return i}function TA(A,i,I,e,t){I=I||64,A=J.normalizeInput(A),e&&(e=J.normalizeInput(e)),t&&(t=J.normalizeInput(t));let n=JA(I,i,e,t);return Z(n,A),RA(n)}function Bi(A,i,I,e,t){let n=TA(A,i,I,e,t);return J.toHex(n)}_A.exports={blake2b:TA,blake2bHex:Bi,blake2bInit:JA,blake2bUpdate:Z,blake2bFinal:RA}});var AI=l((Yi,$A)=>{var qA=z();function si(A,i){return A[i]^A[i+1]<<8^A[i+2]<<16^A[i+3]<<24}function K(A,i,I,e,t,n){h[A]=h[A]+h[i]+t,h[e]=R(h[e]^h[A],16),h[I]=h[I]+h[e],h[i]=R(h[i]^h[I],12),h[A]=h[A]+h[i]+n,h[e]=R(h[e]^h[A],8),h[I]=h[I]+h[e],h[i]=R(h[i]^h[I],7)}function R(A,i){return A>>>i^A<<32-i}var jA=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),s=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]),h=new Uint32Array(16),f=new Uint32Array(16);function WA(A,i){let I=0;for(I=0;I<8;I++)h[I]=A.h[I],h[I+8]=jA[I];for(h[12]^=A.t,h[13]^=A.t/4294967296,i&&(h[14]=~h[14]),I=0;I<16;I++)f[I]=si(A.b,4*I);for(I=0;I<10;I++)K(0,4,8,12,f[s[I*16+0]],f[s[I*16+1]]),K(1,5,9,13,f[s[I*16+2]],f[s[I*16+3]]),K(2,6,10,14,f[s[I*16+4]],f[s[I*16+5]]),K(3,7,11,15,f[s[I*16+6]],f[s[I*16+7]]),K(0,5,10,15,f[s[I*16+8]],f[s[I*16+9]]),K(1,6,11,12,f[s[I*16+10]],f[s[I*16+11]]),K(2,7,8,13,f[s[I*16+12]],f[s[I*16+13]]),K(3,4,9,14,f[s[I*16+14]],f[s[I*16+15]]);for(I=0;I<8;I++)A.h[I]^=h[I]^h[I+8]}function zA(A,i){if(!(A>0&&A<=32))throw new Error(\\\"Incorrect output length, should be in [1, 32]\\\");let I=i?i.length:0;if(i&&!(I>0&&I<=32))throw new Error(\\\"Incorrect key length, should be in [1, 32]\\\");let e={h:new Uint32Array(jA),b:new Uint8Array(64),c:0,t:0,outlen:A};return e.h[0]^=16842752^I<<8^A,I>0&&(v(e,i),e.c=64),e}function v(A,i){for(let I=0;I<i.length;I++)A.c===64&&(A.t+=A.c,WA(A,!1),A.c=0),A.b[A.c++]=i[I]}function ZA(A){for(A.t+=A.c;A.c<64;)A.b[A.c++]=0;WA(A,!0);let i=new Uint8Array(A.outlen);for(let I=0;I<A.outlen;I++)i[I]=A.h[I>>2]>>8*(I&3)&255;return i}function vA(A,i,I){I=I||32,A=qA.normalizeInput(A);let e=zA(I,i);return v(e,A),ZA(e)}function yi(A,i,I){let e=vA(A,i,I);return qA.toHex(e)}$A.exports={blake2s:vA,blake2sHex:yi,blake2sInit:zA,blake2sUpdate:v,blake2sFinal:ZA}});var iI=l((Mi,II)=>{var Y=XA(),M=AI();II.exports={blake2b:Y.blake2b,blake2bHex:Y.blake2bHex,blake2bInit:Y.blake2bInit,blake2bUpdate:Y.blake2bUpdate,blake2bFinal:Y.blake2bFinal,blake2s:M.blake2s,blake2sHex:M.blake2sHex,blake2sInit:M.blake2sInit,blake2sUpdate:M.blake2sUpdate,blake2sFinal:M.blake2sFinal}});var x=eA(MA(),1),m=eA(iI(),1);function d(A,i,I,e){return(0,m.blake2bInit)(A,i)}d.prototype.update=function(A){return(0,m.blake2bUpdate)(this,A),this};d.prototype.digest=function(A){var i=A||new Uint8Array(this.outlen);return(0,m.blake2bFinal)(this,i),i};d.prototype.final=d.prototype.digest;d.ready=function(A){x.ready(function(){A()})};function li(A,i,I,e){return new d(A,i)}function $(A){x.ready(function(){A()})}var AA=!1,T=li;x.ready(function(A){A||(AA=!0,T=x.default)});var tI=T,nI=!1,u=null,eI=null,IA=!1;$?$(()=>{IA=AA,console.debug(\\\"[privatecaptcha][worker] Hasher loaded. wasm=\\\"+IA),tI=T,nI=!0,u&&self.postMessage({command:\\\"init\\\"})}):console.warn(\\\"[privatecaptcha][worker] Blake2b ready() is not defined\\\");function wi(A,i){return(A[i]|A[i+1]<<8|A[i+2]<<16|A[i+3]<<24)>>>0}function ci(A){return Math.pow(2,Math.floor((255.999-A)/8))>>>0}function ui(A,i,I){let e=u.length;I&&console.debug(`[privatecaptcha][worker] looking for a solution. threshold=${A} puzzleID=${i} length=${e}`),u[e-8]=i;let t=new Uint8Array(32);for(let n=0;n<256;n++){u[e-1-3]=n;for(let g=0;g<256;g++){u[e-1-2]=g;for(let o=0;o<256;o++){u[e-1-1]=g;for(let r=0;r<256;r++){u[e-1-0]=r,t.fill(0),tI(t.length).update(u).digest(t);let E=wi(t,0);if(E<=A)return I&&console.debug(`[privatecaptcha][worker] found solution. prefix=${E} threshold=${A}`),u.subarray(e-8)}}}}return new Uint8Array(0)}self.onmessage=A=>{let{command:i,argument:I}=A.data;switch(i){case\\\"init\\\":let{id:e,buffer:t}=I;eI=e,u=t,nI&&self.postMessage({command:\\\"init\\\"});break;case\\\"solve\\\":let{difficulty:n,puzzleIndex:g,debug:o}=I,r=ci(n),E=ui(r,g,o);self.postMessage({command:i,argument:{id:eI,solution:E,wasm:IA}});break;default:break}};\\n\");\n}\n", "import { encode } from 'base64-arraybuffer';\nimport PuzzleWorker from './puzzle.worker.js';\n\nconst METADATA_VERSION = 1;\n\nexport class WorkersPool {\n constructor(callbacks = {}, debug = false) {\n this._solutions = [];\n this._solutionsCount = 0;\n this._puzzleID = null;\n this._workers = [];\n this._debug = debug;\n this._timeStarted = null;\n this._timeFinished = null;\n this._anyWasm = false;\n\n this._callbacks = Object.assign({\n workersReady: () => 0,\n workerError: () => 0,\n workStarted: () => 0,\n workCompleted: () => 0,\n progress: () => 0,\n }, callbacks);\n }\n\n init(puzzle, autoStart) {\n if (!puzzle) { return; }\n if (puzzle.isZero()) {\n if (this._debug) { console.debug('[privatecaptcha][pool] skipping initializing workers'); }\n setTimeout(() => this._callbacks.workersReady(autoStart), 0);\n return;\n }\n\n const workersCount = 4;\n let readyWorkers = 0;\n const workers = [];\n const pool = this;\n const puzzleID = puzzle.ID;\n const puzzleData = puzzle.puzzleBuffer;\n\n for (let i = 0; i < workersCount; i++) {\n const worker = new PuzzleWorker();\n\n worker.onerror = (e) => this._callbacks.workerError(e);\n worker.onmessage = function(event) {\n if (!event.data) { return; }\n const command = event.data.command;\n switch (command) {\n case \"init\":\n readyWorkers++;\n if (readyWorkers === workersCount) {\n pool._callbacks.workersReady(autoStart);\n }\n break;\n case \"solve\":\n const { id, solution, wasm } = event.data.argument;\n pool.onSolutionFound(id, solution, wasm);\n break;\n case \"error\":\n if (event.data.error) {\n pool._callbacks.workerError(event.data.error);\n }\n break;\n default:\n break;\n };\n };\n workers.push(worker);\n }\n\n this._workers = workers;\n\n if (this._debug) { console.debug(`[privatecaptcha][pool] initializing workers. count=${this._workers.length}`); }\n for (let i = 0; i < this._workers.length; i++) {\n this._workers[i].postMessage({\n command: \"init\",\n argument: {\n id: puzzleID,\n buffer: puzzleData,\n },\n });\n };\n }\n\n solve(puzzle) {\n if (!puzzle) { return; }\n\n if (this._debug) { console.debug('[privatecaptcha][pool] starting solving'); }\n this._solutions = [];\n this._solutionsCount = puzzle.solutionsCount;\n this._puzzleID = puzzle.ID;\n this._timeStarted = Date.now();\n this._timeFinished = null;\n\n const skipSolving = puzzle.isZero() || (puzzle.solutionsCount === 0);\n let stubSolution = null;\n\n for (let i = 0; i < puzzle.solutionsCount; i++) {\n if (!skipSolving) {\n this._workers[i % this._workers.length].postMessage({\n command: \"solve\",\n argument: {\n difficulty: puzzle.difficulty,\n puzzleIndex: i,\n debug: this._debug,\n },\n });\n } else {\n if (!stubSolution) { stubSolution = new Uint8Array(8); }\n this._solutions.push(stubSolution);\n }\n }\n\n this._callbacks.workStarted();\n\n if (skipSolving) {\n setTimeout(() => this.onWorkCompleted(), 0);\n }\n }\n\n stop() {\n const count = this._workers.length;\n for (let i = 0; i < count; i++) {\n this._workers[i].terminate();\n }\n this._workers = [];\n if (this._debug) { console.debug('[privatecaptcha][pool] terminated the workers. count=' + count); }\n }\n\n onSolutionFound(id, solution, wasm) {\n if (this._debug) { console.debug('[privatecaptcha][pool] solution found. length=' + solution.length); }\n if (id != this._puzzleID) {\n console.warn(`[privatecaptcha][pool] Discarding solution with invalid ID. actual=${id} expected=${this._puzzleID}`);\n return;\n }\n this._solutions.push(solution);\n\n if (wasm) { this._anyWasm = true; }\n\n const count = this._solutions.length;\n\n this._callbacks.progress(count * 100.0 / this._solutionsCount);\n\n if (count == this._solutionsCount) {\n this.onWorkCompleted();\n }\n }\n\n onWorkCompleted() {\n this._timeFinished = Date.now();\n this._callbacks.workCompleted();\n }\n\n serializeSolutions(errorCode) {\n if (this._debug) { console.debug('[privatecaptcha][pool] serializing solutions. count=' + this._solutions.length); }\n const solutionsLength = this._solutions.reduce((total, arr) => total + arr.length, 0);\n\n const metadataArray = this.writeMetadata(errorCode);\n const metadataSize = metadataArray.length;\n\n const resultArray = new Uint8Array(metadataSize + solutionsLength);\n let offset = 0;\n\n resultArray.set(metadataArray, offset);\n offset += metadataArray.length;\n\n for (let i = 0; i < this._solutions.length; i++) {\n resultArray.set(this._solutions[i], offset);\n offset += this._solutions[i].length;\n }\n\n return encode(resultArray);\n }\n\n writeMetadata(errorCode) {\n const metadataSize = 1 + 1 + 1 + 4;\n const binaryData = new Uint8Array(metadataSize);\n let currentIndex = 0;\n\n binaryData[currentIndex++] = METADATA_VERSION & 0xFF;\n binaryData[currentIndex++] = errorCode & 0xFF;\n\n const wasmFlag = this._anyWasm ? 1 : 0;\n binaryData[currentIndex++] = wasmFlag & 0xFF;\n\n const elapsedMillis = this.elapsedMillis();\n // Little-Endian\n binaryData[currentIndex++] = elapsedMillis & 0xFF;\n binaryData[currentIndex++] = (elapsedMillis >> 8) & 0xFF;\n binaryData[currentIndex++] = (elapsedMillis >> 16) & 0xFF;\n binaryData[currentIndex++] = (elapsedMillis >> 24) & 0xFF;\n\n return binaryData;\n }\n\n elapsedMillis() {\n if (this._timeStarted && this._timeFinished) {\n return this._timeFinished - this._timeStarted;\n }\n\n return 0;\n }\n}\n", "'use strict';\n\nexport const SafeHTMLElement = typeof HTMLElement !== 'undefined' ? HTMLElement : Object;\n", "'use strict';\n\nimport { SafeHTMLElement } from \"./utils.js\";\n\nexport class ProgressRing extends SafeHTMLElement {\n constructor() {\n super();\n\n // NOTE: stroke is sized with regards to {size} variable below\n // not to the scaled (external) size of SVG (yes, it's a bit confusing)\n const stroke = this.getAttribute('stroke');\n const size = 100;\n const radius = size / 2;\n const normalizedRadius = radius - stroke / 2;\n this._circumference = normalizedRadius * 2 * Math.PI;\n\n // create shadow dom root\n this._root = this.attachShadow({ mode: 'open' });\n this._root.innerHTML = `\n <svg preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 ${size} ${size}\">\n <circle\n id=\"pie\"\n style=\"stroke-dasharray: 0 ${this._circumference}\"\n stroke-width=\"${normalizedRadius}\"\n fill=\"transparent\"\n r=\"${normalizedRadius / 2}\"\n cx=\"${radius}\"\n cy=\"${radius}\"\n />\n <circle\n id=\"track\"\n stroke-width=\"${stroke}\"\n fill=\"transparent\"\n r=\"${normalizedRadius}\"\n cx=\"${radius}\"\n cy=\"${radius}\"\n />\n <circle\n id=\"progress\"\n stroke-dasharray=\"${this._circumference} ${this._circumference}\"\n style=\"stroke-dashoffset: ${this._circumference}\"\n stroke-width=\"${stroke}\"\n fill=\"transparent\"\n r=\"${normalizedRadius}\"\n cx=\"${radius}\"\n cy=\"${radius}\"\n />\n </svg>\n\n <style>\n svg {\n width: 2.25em;\n height: 2.25em;\n }\n #pie {\n stroke: var(--pie-color);\n transition: stroke-dasharray 0.35s;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n #progress {\n stroke: var(--accent-color);\n transition: stroke-dashoffset 0.35s;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n #track {\n stroke: var(--gray-color);\n }\n </style>\n `;\n }\n\n setProgress(percent) {\n const progress = (percent / 100 * this._circumference)\n const offset = this._circumference - progress;\n const circle = this._root.getElementById('progress');\n circle.style.strokeDashoffset = offset;\n\n const pie = this._root.getElementById('pie');\n pie.style.strokeDasharray = progress / 2 + ' ' + this._circumference;\n }\n\n static get observedAttributes() {\n return ['progress'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'progress') {\n this.setProgress(newValue);\n }\n }\n}\n", "@layer base,theme,custom;@layer base{:host,*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border:0 solid}:host{--extra-spacing: 0px;--label-spacing: .625rem;--border-radius: .125rem;--warn-color: #A70B0B;--accent-color: #009400;min-width:0;font-size:1rem;display:inline-block;max-width:100%;border-radius:var(--border-radius)}:host(.hidden){display:none}:host(.floating){display:block;position:absolute;left:0;top:0;transform:translateY(-100%);z-index:1000}@media (min-width: 30em){:host{min-width:20em}}}@layer theme{:host([theme=\"light\"]){--dark-color: #070113;--gray-color: #E0E0E0;--pie-color: #D8E9E9;--background-color: #fff;--checkbox-background-color: #FFF;--checkbox-hover-color: #EBF4F4}:host([theme=\"dark\"]){--dark-color: #EBF4F4;--gray-color: #656C7B;--pie-color: #376262;--background-color: #041616;--checkbox-background-color: #223C3C;--checkbox-hover-color: #1C3232}:host{--border: 1px solid var(--gray-color)}}.pc-captcha-widget{display:flex;align-items:center;flex-direction:row;padding:.75em 1em;border:var(--border);border-radius:var(--border-radius);background-color:var(--background-color);box-sizing:border-box;width:100%;height:100%}.pc-interactive-area{display:flex;flex:0 1 auto;align-items:center;position:relative;min-width:0}.pc-interactive-area label{padding-left:var(--label-spacing);color:var(--dark-color);flex:0 1 auto;min-width:1em;white-space:normal}.pc-interactive-area input[type=checkbox]{font-size:1em;width:2em;height:2em;margin:0 0 0 calc(.125em + var(--extra-spacing));appearance:none;background-color:var(--checkbox-background-color);border:.125em solid var(--dark-color);border-radius:.25em;cursor:pointer;flex-shrink:0}.pc-interactive-area input[type=checkbox]+label{padding:0 0 0 calc(.125em + var(--extra-spacing) + var(--label-spacing))}@keyframes colorChange{0%,to{border-color:var(--dark-color)}50%{border-color:var(--gray-color)}}.pc-interactive-area input[type=checkbox].loading{animation:colorChange 2s infinite;animation-timing-function:ease-in-out;background-color:var(--checkbox-hover-color);cursor:default}.pc-interactive-area input[type=checkbox].ready{background-color:var(--checkbox-background-color);border-color:var(--dark-color);cursor:pointer}.pc-interactive-area input[type=checkbox].invalid{background-color:var(--checkbox-hover-color);border-color:var(--gray-color);cursor:not-allowed}.pc-interactive-area input[type=checkbox]:not(.invalid):hover{background-color:var(--checkbox-hover-color);border-color:var(--accent-color)}.pc-interactive-area input[type=checkbox].invalid:hover+label{cursor:not-allowed}.pc-interactive-area input[type=checkbox]:not(.invalid):hover+label{cursor:pointer}@keyframes dots-1{0%{opacity:0}25%{opacity:1}}@keyframes dots-2{0%{opacity:0}50%{opacity:1}}@keyframes dots-3{0%{opacity:0}75%{opacity:1}}@-webkit-keyframes dots-1{0%{opacity:0}25%{opacity:1}}@-webkit-keyframes dots-2{0%{opacity:0}50%{opacity:1}}@-webkit-keyframes dots-3{0%{opacity:0}75%{opacity:1}}.pc-interactive-area .dots span{animation:dots-1 2s infinite steps(1);-webkit-animation:dots-1 2s infinite steps(1)}.pc-interactive-area .dots span:first-child+span{animation-name:dots-2;-webkit-animation-name:dots-2}.pc-interactive-area .dots span:first-child+span+span{animation-name:dots-3;-webkit-animation-name:dots-3}#pc-progress{display:flex;justify-content:center;margin:0 0 0 var(--extra-spacing);flex-shrink:0}#pc-progress+label{padding:0 0 0 calc(var(--extra-spacing) + var(--label-spacing))}.pc-spacer{flex-basis:0;flex-shrink:1;flex-grow:1;width:4em;min-width:0}.pc-info{display:flex;flex:0 0 auto;flex-direction:column;align-items:center;justify-content:center;margin-right:calc(.125em + var(--extra-spacing));color:var(--dark-color)}.pc-info svg{width:auto;height:3.125em;max-width:100%;max-height:100%}a.pc-link{margin-top:5px;text-decoration:none;color:currentcolor;text-align:center;font-size:.55em;text-transform:uppercase;font-weight:700;line-height:1.1em}a.pc-link:hover{text-decoration:underline}@keyframes checkmark{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0px}}svg.verified{margin:0 0 0 var(--extra-spacing);flex-shrink:0;width:2.25em;height:2.25em}svg.verified+label{padding:0 0 0 calc(var(--extra-spacing) + var(--label-spacing))}svg.verified polyline{animation:checkmark .35s ease-in-out .1s backwards;stroke:#f2f2f2}svg.verified circle{fill:var(--accent-color)}#pc-debug{font-size:.75em;color:var(--gray-color);position:absolute;top:100%;left:calc(2em + 1em + 2*.125em + 2*var(--extra-spacing) + var(--label-spacing));cursor:default}#pc-debug.warn{color:var(--warn-color)}\n", "'use strict;'\n\nexport const CLICK_TO_VERIFY = 'click_to_verify';\nexport const VERIFYING = 'verifying';\nexport const SUCCESS = 'success';\nexport const UNAVAILABLE = 'unavailable';\nexport const INCOMPLETE = 'incomplete';\nexport const ERROR = 'error';\nexport const TESTING = 'testing';\n\nexport const STRINGS = {\n 'en': {\n [CLICK_TO_VERIFY]: 'Click to verify',\n [VERIFYING]: 'Verifying',\n [SUCCESS]: 'Verified',\n [UNAVAILABLE]: 'Not available',\n [INCOMPLETE]: 'incomplete',\n [ERROR]: 'error',\n [TESTING]: 'testing',\n },\n 'de': {\n [CLICK_TO_VERIFY]: 'Zum Best\u00E4tigen klicken',\n [VERIFYING]: 'Wird \u00FCberpr\u00FCft',\n [SUCCESS]: 'Verifiziert',\n [UNAVAILABLE]: 'Nicht verf\u00FCgbar',\n [INCOMPLETE]: 'unvollst\u00E4ndig',\n [ERROR]: 'fehler',\n [TESTING]: 'testmodus',\n },\n 'es': {\n [CLICK_TO_VERIFY]: 'Haz clic para verificar',\n [VERIFYING]: 'Verificando',\n [SUCCESS]: 'Verificado',\n [UNAVAILABLE]: 'No disponible',\n [INCOMPLETE]: 'incompleto',\n [ERROR]: 'error',\n [TESTING]: 'prueba',\n },\n 'fr': {\n [CLICK_TO_VERIFY]: 'Cliquez pour v\u00E9rifier',\n [VERIFYING]: 'V\u00E9rification en cours',\n [SUCCESS]: 'V\u00E9rifi\u00E9',\n [UNAVAILABLE]: 'Non disponible',\n [INCOMPLETE]: 'incomplet',\n [ERROR]: 'erreur',\n [TESTING]: 'test',\n },\n 'it': {\n [CLICK_TO_VERIFY]: 'Clicca per verificare',\n [VERIFYING]: 'Verifica in corso',\n [SUCCESS]: 'Verificato',\n [UNAVAILABLE]: 'Non disponibile',\n [INCOMPLETE]: 'incompleto',\n [ERROR]: 'errore',\n [TESTING]: 'test',\n },\n 'nl': {\n [CLICK_TO_VERIFY]: 'Klik om te verifi\u00EBren',\n [VERIFYING]: 'Bezig met verifi\u00EBren',\n [SUCCESS]: 'Geverifieerd',\n [UNAVAILABLE]: 'Niet beschikbaar',\n [INCOMPLETE]: 'onvolledig',\n [ERROR]: 'fout',\n [TESTING]: 'testen',\n },\n 'sv': {\n [CLICK_TO_VERIFY]: 'Klicka f\u00F6r att verifiera',\n [VERIFYING]: 'Verifierar',\n [SUCCESS]: 'Verifierad',\n [UNAVAILABLE]: 'Inte tillg\u00E4nglig',\n [INCOMPLETE]: 'ofullst\u00E4ndig',\n [ERROR]: 'fel',\n [TESTING]: 'test',\n },\n 'no': {\n [CLICK_TO_VERIFY]: 'Klikk for \u00E5 bekrefte',\n [VERIFYING]: 'Bekrefter',\n [SUCCESS]: 'Bekreftet',\n [UNAVAILABLE]: 'Ikke tilgjengelig',\n [INCOMPLETE]: 'ufullstendig',\n [ERROR]: 'feil',\n [TESTING]: 'test',\n },\n 'pl': {\n [CLICK_TO_VERIFY]: 'Kliknij, aby zweryfikowa\u0107',\n [VERIFYING]: 'Weryfikowanie',\n [SUCCESS]: 'Zweryfikowano',\n [UNAVAILABLE]: 'Niedost\u0119pne',\n [INCOMPLETE]: 'niekompletne',\n [ERROR]: 'b\u0142\u0105d',\n [TESTING]: 'test',\n },\n 'fi': {\n [CLICK_TO_VERIFY]: 'Napsauta vahvistaaksesi',\n [VERIFYING]: 'Vahvistetaan',\n [SUCCESS]: 'Vahvistettu',\n [UNAVAILABLE]: 'Ei saatavilla',\n [INCOMPLETE]: 'ep\u00E4t\u00E4ydellinen',\n [ERROR]: 'virhe',\n [TESTING]: 'testi',\n },\n 'et': {\n [CLICK_TO_VERIFY]: 'Kl\u00F5psa kinnitamiseks',\n [VERIFYING]: 'Kinnitamine',\n [SUCCESS]: 'Kinnitatud',\n [UNAVAILABLE]: 'Pole saadaval',\n [INCOMPLETE]: 'puudulik',\n [ERROR]: 'viga',\n [TESTING]: 'test',\n }\n};\n", "'use strict';\n\nimport { ProgressRing } from './progress.js';\nimport { SafeHTMLElement } from \"./utils.js\";\nimport styles from \"./styles.css\" with { type: 'css' };\nimport * as i18n from './strings.js';\nimport * as errors from './errors.js';\n\nif (typeof window !== \"undefined\") {\n window.customElements.define('progress-ring', ProgressRing);\n}\n\nexport const STATE_EMPTY = 'empty';\nexport const STATE_ERROR = 'error';\nexport const STATE_LOADING = 'loading';\nexport const STATE_READY = 'ready';\nexport const STATE_IN_PROGRESS = 'inprogress';\nexport const STATE_VERIFIED = 'verified';\nexport const STATE_INVALID = 'invalid';\n\nexport const DISPLAY_POPUP = 'popup';\nconst DISPLAY_HIDDEN = 'hidden';\nexport const DISPLAY_WIDGET = 'widget';\n\nconst CHECKBOX_ID = 'pc-checkbox';\nconst PROGRESS_ID = 'pc-progress';\nconst DEBUG_ID = 'pc-debug';\nconst DEBUG_ERROR_CLASS = 'warn';\n\nconst privateCaptchaSVG = `<svg viewBox=\"0 0 39.4 41.99\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\" class=\"pc-logo\" preserveAspectRatio=\"xMidYMid meet\">\n<path d=\"M0 0v30.62l4.29 2.48V4.85h30.83v23.29l-15.41 8.9-6.83-3.94v-4.95l6.83 3.94 11.12-6.42V9.91H8.58v25.66l11.12 6.42 19.7-11.37V0Zm12.87 14.86h13.66v8.32l-6.83 3.94-6.83-3.94z\" fill=\"currentColor\"/>\n</svg>`;\n\nconst verifiedSVG = `<svg class=\"verified\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 154 154\">\n<g fill=\"none\"><circle cx=\"77\" cy=\"77\" r=\"76\"></circle>\n<polyline class=\"st0\" stroke-width=\"12\" points=\"43.5,77.8 63.7,97.9 112.2,49.4\" style=\"stroke-dasharray:100px, 100px; stroke-dashoffset: 200px;\"/></g>\n</svg>\n`;\n\n/**\n * @param {string} cls\n * @returns {string} checkbox input definition string\n */\nfunction checkbox(cls) {\n return `<input type=\"checkbox\" id=\"${CHECKBOX_ID}\" class=\"${cls}\" required>`\n}\n\n/**\n * @param {string} text\n * @param {string} forElement\n * @returns {string} checkbox label definition string\n */\nfunction label(text, forElement) {\n return `<label for=\"${forElement}\">${text}</label>`;\n}\n\n/**\n * @param {number} code\n * @param {Object<string, string>} strings\n * @returns {string} error message\n */\nfunction errorDescription(code, strings) {\n switch (code) {\n case errors.ERROR_NO_ERROR:\n return '';\n case errors.ERROR_NOT_CONFIGURED:\n return strings[i18n.INCOMPLETE];\n case errors.ERROR_ZERO_PUZZLE:\n return strings[i18n.TESTING];\n default:\n return strings[i18n.ERROR];\n };\n}\n\nexport class CaptchaElement extends SafeHTMLElement {\n constructor() {\n super();\n this._state = '';\n // create shadow dom root\n this._root = this.attachShadow({ mode: 'open' });\n this._debug = this.getAttribute('debug');\n this._error = null;\n this._displayMode = this.getAttribute('display-mode');\n this._lang = this.getAttribute('lang');\n if (!(this._lang in i18n.STRINGS)) {\n console.warn(`[privatecaptcha][progress] Localization not found. lang=${this._lang}`);\n this._lang = 'en';\n }\n\n // add CSS\n const sheet = new CSSStyleSheet();\n sheet.replace(styles);\n this._root.adoptedStyleSheets.push(sheet);\n this._overridesSheet = null;\n // add CSS overrides\n const extraStyles = this.getAttribute('extra-styles');\n if (extraStyles) {\n this._overridesSheet = new CSSStyleSheet();\n const cssText = `@layer custom { :host { ${extraStyles} } }`;\n this._overridesSheet.replace(cssText);\n this._root.adoptedStyleSheets.push(this._overridesSheet);\n }\n // init\n const canShow = (this._displayMode == DISPLAY_WIDGET);\n this.setState(STATE_EMPTY, canShow);\n }\n\n /**\n * @param {string} state\n * @param {boolean} canShow\n */\n setState(state, canShow) {\n if (state == this._state) {\n console.debug('[privatecaptcha][progress] already in this state: ' + state);\n return;\n }\n\n if (this._debug) { console.debug(`[privatecaptcha][progress] change state. old=${this._state} new=${state}`); }\n\n let activeArea = '';\n let bindCheckEvent = false;\n let showPopupIfNeeded = false;\n const strings = i18n.STRINGS[this._lang];\n\n switch (state) {\n case STATE_EMPTY:\n bindCheckEvent = true;\n activeArea = checkbox('') + label(strings[i18n.CLICK_TO_VERIFY], CHECKBOX_ID);\n break;\n case STATE_LOADING:\n bindCheckEvent = true;\n activeArea = checkbox('loading') + label(strings[i18n.CLICK_TO_VERIFY], CHECKBOX_ID);\n break;\n case STATE_READY:\n bindCheckEvent = true;\n activeArea = checkbox('ready') + label(strings[i18n.CLICK_TO_VERIFY], CHECKBOX_ID);\n showPopupIfNeeded = canShow;\n break;\n case STATE_IN_PROGRESS:\n const text = strings[i18n.VERIFYING];\n activeArea = `<progress-ring id=\"${PROGRESS_ID}\" stroke=\"12\" progress=\"0\"></progress-ring><label for=\"${PROGRESS_ID}\">${text}<span class=\"dots\"><span>.</span><span>.</span><span>.</span></span></label>`;\n showPopupIfNeeded = canShow;\n break;\n case STATE_VERIFIED:\n activeArea = verifiedSVG + label(strings[i18n.SUCCESS], PROGRESS_ID);\n showPopupIfNeeded = canShow;\n break;\n case STATE_INVALID:\n activeArea = checkbox('invalid') + label(strings[i18n.UNAVAILABLE], CHECKBOX_ID);\n break;\n default:\n console.error(`[privatecaptcha][progress] unknown state: ${state}`);\n break;\n }\n\n if (this._debug || this._error) {\n const debugText = this._error ? errorDescription(this._error, strings) : `[${state}]`;\n activeArea += `<span id=\"${DEBUG_ID}\" class=\"${this._error ? DEBUG_ERROR_CLASS : ''}\">${debugText}</span>`;\n }\n\n let hostClass = '';\n switch (this._displayMode) {\n case DISPLAY_HIDDEN:\n hostClass = 'hidden';\n break;\n case DISPLAY_POPUP:\n hostClass = showPopupIfNeeded ? 'floating' : 'hidden';\n break;\n case DISPLAY_WIDGET:\n break;\n };\n\n this.classList.remove('hidden', 'floating');\n if (hostClass) { this.classList.add(hostClass); }\n\n this._state = state;\n this._root.innerHTML = `<div class=\"pc-captcha-widget\">\n <div class=\"pc-interactive-area\">\n ${activeArea}\n </div>\n <div class=\"pc-spacer\"></div>\n <div class=\"pc-info\">\n ${privateCaptchaSVG}\n <a href=\"https://privatecaptcha.com\" class=\"pc-link\" rel=\"noopener nofollow\" target=\"_blank\">Private<br />Captcha</a>\n </div>\n </div>`;\n\n if (bindCheckEvent) {\n const checkbox = this._root.getElementById(CHECKBOX_ID);\n if (checkbox) {\n checkbox.addEventListener('change', this.onCheckboxClicked.bind(this));\n } else {\n console.warn('[privatecaptcha][progress] checkbox not found in the Shadow DOM');\n }\n }\n }\n\n /**\n * @param {Event} event\n */\n onCheckboxClicked(event) {\n event.preventDefault();\n if (this._debug) {\n console.debug(\"[privatecaptcha][progress] checkbox was clicked\");\n }\n if (event.target.checked) {\n const checkEvent = new CustomEvent(\"privatecaptcha:checked\", {\n bubbles: true,\n composed: true\n });\n\n this.dispatchEvent(checkEvent);\n } else {\n console.warn('[privatecaptcha][progress] checkbox was unchecked');\n }\n }\n\n /**\n * @param {number} percent\n */\n setProgress(percent) {\n if (STATE_IN_PROGRESS == this._state) {\n const progressBar = this._root.getElementById(PROGRESS_ID);\n if (progressBar) {\n progressBar.setProgress(percent);\n } else {\n console.warn('[privatecaptcha][progress] progress element not found');\n }\n } else {\n if (this._debug) {\n console.debug(\"[privatecaptcha][progress] skipping updating progress when not in progress\");\n }\n }\n }\n\n /**\n * @param {number} value\n */\n setError(value) {\n this._error = value;\n }\n\n /**\n * @param {string} text\n * @param {boolean} error\n */\n setDebugText(text, error) {\n const debugElement = this._root.getElementById(DEBUG_ID);\n if (debugElement) {\n let debugText = '';\n if (this._error) {\n const strings = i18n.STRINGS[this._lang];\n debugText = errorDescription(this._error, strings);\n } else {\n debugText = `[${text}]`;\n }\n debugElement.innerHTML = debugText;\n if (error || this._error) {\n debugElement.classList.add(DEBUG_ERROR_CLASS);\n } else {\n debugElement.classList.remove(DEBUG_ERROR_CLASS);\n }\n }\n }\n\n static get observedAttributes() {\n return ['state', 'progress', 'extra-styles'];\n }\n\n updateStyles(newStyles) {\n if (newStyles) {\n const cssText = `@layer custom { :host { ${newStyles} } }`;\n\n if (this._overridesSheet) {\n this._overridesSheet.replace(cssText);\n } else {\n // Create new stylesheet if it doesn't exist\n this._overridesSheet = new CSSStyleSheet();\n this._overridesSheet.replace(cssText);\n this._root.adoptedStyleSheets.push(this._overridesSheet);\n }\n } else if (this._overridesSheet) {\n // Remove styles if newStyles is empty\n const index = this._root.adoptedStyleSheets.indexOf(this._overridesSheet);\n if (index > -1) {\n const sheets = [...this._root.adoptedStyleSheets];\n sheets.splice(index, 1);\n this._root.adoptedStyleSheets = sheets;\n }\n this._overridesSheet = null;\n }\n }\n\n /**\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if ('progress' === name) {\n this.setProgress(newValue);\n } else if ('extra-styles' === name) {\n this.updateStyles(newValue);\n }\n }\n}\n", "'use strict';\n\nimport { getPuzzle, Puzzle } from './puzzle.js'\nimport { WorkersPool } from './workerspool.js'\nimport { CaptchaElement, STATE_EMPTY, STATE_ERROR, STATE_READY, STATE_IN_PROGRESS, STATE_VERIFIED, STATE_LOADING, STATE_INVALID, DISPLAY_POPUP, DISPLAY_WIDGET } from './html.js';\nimport * as errors from './errors.js';\n\nif (typeof window !== \"undefined\") {\n window.customElements.define('private-captcha', CaptchaElement);\n}\n\nconst PUZZLE_ENDPOINT_URL = 'https://api.privatecaptcha.com/puzzle';\nconst PUZZLE_EU_ENDPOINT_URL = 'https://api.eu.privatecaptcha.com/puzzle';\nexport const RECAPTCHA_COMPAT = 'recaptcha';\n\n\n/**\n * @param {HTMLElement} element\n * @returns {HTMLFormElement | null}\n */\nfunction findParentFormElement(element) {\n while (element && element.tagName !== 'FORM') {\n element = element.parentElement;\n }\n return element;\n}\n\nexport class CaptchaWidget {\n /**\n * @param {HTMLElement} element\n * @param {Object} options\n */\n constructor(element, options = {}) {\n this._element = element;\n this._puzzle = null;\n this._expiryTimeout = null;\n this._state = STATE_EMPTY;\n this._lastProgress = null;\n this._solution = null;\n this._userStarted = false; // aka 'user started while we were initializing'\n this._options = {};\n this._errorCode = errors.ERROR_NO_ERROR;\n\n this.setOptions(options);\n\n this._workersPool = new WorkersPool({\n workersReady: this.onWorkersReady.bind(this),\n workerError: this.onWorkerError.bind(this),\n workStarted: this.onWorkStarted.bind(this),\n workCompleted: this.onWorkCompleted.bind(this),\n progress: this.onWorkProgress.bind(this),\n }, this._options.debug);\n\n const form = findParentFormElement(this._element);\n if (form) {\n // NOTE: this does not work on Safari by (Apple) design if we click a button\n // \"once\" means listener will be removed after being called, \"passive\" - cannot use preventDefault()\n form.addEventListener('focusin', this.onFocusIn.bind(this), { once: true, passive: true });\n this._element.innerHTML = `<private-captcha display-mode=\"${this._options.displayMode}\" lang=\"${this._options.lang}\" theme=\"${this._options.theme}\" extra-styles=\"${this._options.styles}\"${this._options.debug ? ' debug=\"true\"' : ''}></private-captcha>`;\n this._element.addEventListener('privatecaptcha:checked', this.onChecked.bind(this));\n\n if (this._options.storeVariable) {\n this._element[this._options.storeVariable] = this;\n }\n\n if (DISPLAY_POPUP === this._options.displayMode) {\n const anchor = form.querySelector(\".private-captcha-anchor\");\n if (anchor) {\n anchor.style.position = \"relative\";\n } else {\n console.warn('[privatecaptcha] cannot find anchor for popup')\n }\n }\n\n this.checkConfigured();\n } else {\n console.warn('[privatecaptcha] cannot find form element');\n }\n }\n\n /**\n * @param {Object} options\n */\n setOptions(options) {\n const euOnly = this._element.dataset[\"eu\"] || null;\n const defaultEndpoint = euOnly ? PUZZLE_EU_ENDPOINT_URL : PUZZLE_ENDPOINT_URL;\n\n let defaultField = \"private-captcha-solution\";\n if (options.hasOwnProperty('compat') && options.compat === RECAPTCHA_COMPAT) {\n defaultField = \"g-recaptcha-response\";\n }\n\n let sitekey = \"\";\n if (options.hasOwnProperty('sitekey')) {\n sitekey = options.sitekey;\n }\n\n this._options = Object.assign({\n startMode: this._element.dataset[\"startMode\"] || \"auto\",\n debug: this._element.dataset[\"debug\"],\n fieldName: this._element.dataset[\"solutionField\"] || defaultField,\n puzzleEndpoint: this._element.dataset[\"puzzleEndpoint\"] || defaultEndpoint,\n sitekey: sitekey || this._element.dataset[\"sitekey\"] || \"\",\n displayMode: this._element.dataset[\"displayMode\"] || \"widget\",\n lang: this._element.dataset[\"lang\"] || \"en\",\n theme: this._element.dataset[\"theme\"] || \"light\",\n styles: this._element.dataset[\"styles\"] || \"\",\n storeVariable: this._element.dataset[\"storeVariable\"] || null,\n }, options);\n }\n\n /**\n * Fetches puzzle from the server and sets up workers.\n * @param {boolean} autoStart\n */\n async init(autoStart) {\n this.trace(`init() was called. state=${this._state}`);\n\n this._puzzle = null;\n this._solution = null;\n this._errorCode = errors.ERROR_NO_ERROR;\n\n const sitekey = this.checkConfigured();\n if (!sitekey) { return; }\n\n if ((this._state != STATE_EMPTY) && (this._state != STATE_ERROR)) {\n console.warn(`[privatecaptcha] captcha has already been initialized. state=${this._state}`)\n return;\n }\n\n if (this._workersPool) {\n this._workersPool.stop();\n }\n\n const startWorkers = (this._options.startMode == \"auto\") || autoStart;\n\n try {\n this.setState(STATE_LOADING);\n this.trace(`fetching puzzle. sitekey=${sitekey}`);\n const puzzleData = await getPuzzle(this._options.puzzleEndpoint, sitekey);\n this._puzzle = new Puzzle(puzzleData);\n if (this._puzzle && this._puzzle.isZero()) { this._errorCode = errors.ERROR_ZERO_PUZZLE; }\n const expirationMillis = this._puzzle.expirationMillis();\n this.trace(`parsed puzzle buffer. isZero=${this._puzzle.isZero()} ttl=${expirationMillis / 1000}`);\n if (this._expiryTimeout) { clearTimeout(this._expiryTimeout); }\n if (expirationMillis) { this._expiryTimeout = setTimeout(() => this.expire(), expirationMillis); }\n this._workersPool.init(this._puzzle, startWorkers);\n this.signalInit();\n } catch (e) {\n console.error('[privatecaptcha]', e);\n if (this._expiryTimeout) { clearTimeout(this._expiryTimeout); }\n this._errorCode = errors.ERROR_FETCH_PUZZLE;\n this.setState(STATE_ERROR);\n this.setProgressState(this._userStarted ? STATE_VERIFIED : STATE_EMPTY);\n this.saveSolutions();\n if (this._userStarted) {\n this.signalErrored();\n }\n }\n }\n\n /**\n * Ensures that we have a sitekey available (defined or passed through options)\n * @returns {string | null}\n */\n checkConfigured() {\n const sitekey = this._options.sitekey || this._element.dataset[\"sitekey\"];\n if (!sitekey) {\n console.error(\"[privatecaptcha] sitekey not set on captcha element\");\n this._errorCode = errors.ERROR_NOT_CONFIGURED;\n this.setState(STATE_INVALID);\n this.setProgressState(STATE_INVALID);\n return null;\n }\n\n return sitekey;\n }\n\n start() {\n if (this._state !== STATE_READY) {\n console.warn(`[privatecaptcha] solving has already been started. state=${this._state}`);\n return;\n }\n\n this.trace('starting solving captcha');\n\n try {\n this.setState(STATE_IN_PROGRESS);\n this._workersPool.solve(this._puzzle);\n } catch (e) {\n console.error('[privatecaptcha]', e);\n }\n }\n\n dispatchEvent(eventName, detail = {}) {\n const event = new CustomEvent(`privatecaptcha:${eventName}`, {\n bubbles: false,\n detail: { widget: this, element: this._element, ...detail }\n });\n this._element.dispatchEvent(event);\n }\n\n signalInit() {\n this.dispatchEvent(\"init\");\n\n const callback = this._element.dataset['initCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in init callback:', e);\n }\n }\n }\n\n signalStarted() {\n this.dispatchEvent(\"start\");\n\n const callback = this._element.dataset['startedCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in started callback:', e);\n }\n }\n }\n\n signalFinished() {\n this.dispatchEvent(\"finish\");\n\n const callback = this._element.dataset['finishedCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in finished callback:', e);\n }\n }\n }\n\n signalErrored() {\n this.dispatchEvent(\"error\");\n\n const callback = this._element.dataset['erroredCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in errored callback:', e);\n }\n }\n }\n\n ensureNoSolutionField() {\n const solutionField = this._element.querySelector(`input[name=\"${this._options.fieldName}\"]`);\n if (solutionField) {\n try {\n this._element.removeChild(solutionField);\n } catch (e) {\n console.warn('[privatecaptcha]', e);\n }\n }\n }\n\n /**\n * Resets widget to a state when `start()` or `execute()` can be called again\n * @param {Object} options\n */\n reset(options = {}) {\n this.trace('reset captcha')\n\n if (this._expiryTimeout) { clearTimeout(this._expiryTimeout); }\n if (this._workersPool) { this._workersPool.stop(); }\n\n this._errorCode = errors.ERROR_NO_ERROR;\n this.setState(STATE_EMPTY);\n this.setProgressState(STATE_EMPTY);\n this.ensureNoSolutionField();\n this._userStarted = false;\n this.setOptions(options);\n this.init(false /*start*/);\n }\n\n updateStyles() {\n const newStyles = this._element.dataset[\"styles\"] || \"\";\n if (newStyles !== this._options.styles) {\n this._options.styles = newStyles;\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) {\n pcElement.setAttribute('extra-styles', newStyles);\n }\n }\n }\n\n expire() {\n this.trace('expire captcha');\n\n if (this._workersPool) { this._workersPool.stop(); }\n\n this.setState(STATE_EMPTY);\n this.setProgressState(STATE_EMPTY);\n this.ensureNoSolutionField();\n this.init(this._userStarted);\n }\n\n /**\n * @returns {string} value of the puzzle solution that needs to be sent for verification\n */\n solution() {\n return this._solution;\n }\n\n /**\n * @param {FocusEvent} event\n */\n onFocusIn(event) {\n this.trace('onFocusIn event handler');\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement && (event.target == pcElement)) {\n this.trace('skipping focusin event on captcha element')\n return;\n }\n this.init(false /*start*/);\n // this handles both STATE_LOADING and STATE_EMPTY (reset)\n this.setProgressState(this._state);\n }\n\n /**\n * A programmatic way of starting solving the puzzle (as opposed to user input way)\n * @returns {Promise<never>} promise intentionally does not resolve so that the form can be submitted via the callbacks\n */\n execute() {\n this.onChecked();\n return new Promise(() => { });\n }\n\n onChecked(event) {\n if (event) {\n event.stopPropagation();\n }\n\n this.trace(`onChecked event handler. state=${this._state}`);\n this._userStarted = true;\n\n // always show spinner when user clicked\n let progressState = STATE_IN_PROGRESS;\n let finished = false;\n\n switch (this._state) {\n case STATE_READY:\n // NOTE: in case of short-circuit (zero/test puzzle), start() can call all callbacks before exit\n this.start();\n break;\n case STATE_EMPTY:\n case STATE_ERROR:\n this.init(true /*start*/);\n break;\n case STATE_LOADING:\n // this will be handled in onWorkersReady()\n break;\n case STATE_IN_PROGRESS:\n setTimeout(() => this.setProgress(this._lastProgress), 500);\n break;\n case STATE_VERIFIED:\n // happens when we finished verification fully in the background, still should animate \"the end\"\n progressState = STATE_VERIFIED;\n finished = true;\n break;\n default:\n console.warn('[privatecaptcha] onChecked: unexpected state. state=' + this._state);\n return;\n };\n\n this.setProgressState(progressState);\n if (finished) { this.signalFinished(); }\n }\n\n /**\n * @param {boolean} autoStart\n */\n onWorkersReady(autoStart) {\n this.trace(`workers are ready. autostart=${autoStart}`);\n\n this.setState(STATE_READY);\n if (!this._userStarted) {\n this.setProgressState(STATE_READY);\n }\n\n if (autoStart || this._userStarted) {\n this.start();\n }\n }\n\n /**\n * @param {Error} error\n */\n onWorkerError(error) {\n console.error('[privatecaptcha] error in worker:', error)\n this._errorCode = errors.ERROR_SOLVE_PUZZLE;\n }\n\n onWorkStarted() {\n this.signalStarted();\n }\n\n onWorkCompleted() {\n this.trace('[privatecaptcha] work completed');\n\n if (this._state !== STATE_IN_PROGRESS) {\n console.warn(`[privatecaptcha] solving has not been started. state=${this._state}`);\n return;\n }\n\n this.setState(STATE_VERIFIED);\n if (this._userStarted) {\n this.setProgressState(STATE_VERIFIED);\n }\n\n this.saveSolutions();\n\n if (this._userStarted) {\n this.signalFinished();\n }\n }\n\n /**\n * @param {number} percent\n */\n onWorkProgress(percent) {\n if (this._state !== STATE_IN_PROGRESS) {\n console.warn(`[privatecaptcha] skipping progress update. state=${this._state}`);\n return;\n }\n\n this.trace(`progress changed. percent=${percent}`);\n this.setProgress(percent);\n }\n\n saveSolutions() {\n const solutions = this._workersPool.serializeSolutions(this._errorCode);\n const payload = `${solutions}.${this._puzzle.rawData}`;\n\n this.ensureNoSolutionField();\n this._element.insertAdjacentHTML('beforeend', `<input name=\"${this._options.fieldName}\" type=\"hidden\" value=\"${payload}\">`);\n\n this._solution = payload;\n\n this.trace(`saved solutions. field=${this._options.fieldName} payload=${payload}`);\n }\n\n /**\n * Updates the \"UI\" state of the widget.\n * @param {string} state\n */\n setProgressState(state) {\n // NOTE: hidden display mode is taken care of inside setState() even when (_userStarted == true)\n const canShow = this._userStarted || (DISPLAY_WIDGET === this._options.displayMode);\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) {\n pcElement.setError(this._errorCode);\n pcElement.setState(state, canShow);\n }\n else {\n console.error('[privatecaptcha] component not found when changing state');\n }\n }\n\n /**\n * Updates the \"internal\" (actual) state.\n * @param {string} state\n */\n setState(state) {\n this.trace(`change state. old=${this._state} new=${state}`);\n this._state = state;\n\n if (this._options.debug) {\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) {\n pcElement.setDebugText(state, (STATE_ERROR == state));\n }\n }\n }\n\n /**\n * @param {number} progress\n */\n setProgress(progress) {\n this._lastProgress = progress;\n if ((STATE_IN_PROGRESS == this._state) || (STATE_VERIFIED == this._state)) {\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) { pcElement.setProgress(progress); }\n else { console.error('[privatecaptcha] component not found when updating progress'); }\n }\n }\n\n /**\n * @param {string} str\n */\n trace(str) {\n if (this._options.debug) {\n console.debug('[privatecaptcha]', str)\n }\n }\n}\n"],
5
- "mappings": "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AAU,EAAG,aACd,CAACC,CAAK,EAAG,QACT,CAACC,CAAO,EAAG,SACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,4BACnB,CAACC,CAAS,EAAG,uBACb,CAACC,CAAO,EAAG,cACX,CAACC,CAAW,EAAG,qBACf,CAACC,CAAU,EAAG,mBACd,CAACC,CAAK,EAAG,SACT,CAACC,CAAO,EAAG,WACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,0BACnB,CAACC,CAAS,EAAG,cACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,gBACf,CAACC,CAAU,EAAG,aACd,CAACC,CAAK,EAAG,QACT,CAACC,CAAO,EAAG,QACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,2BACnB,CAACC,CAAS,EAAG,2BACb,CAACC,CAAO,EAAG,gBACX,CAACC,CAAW,EAAG,iBACf,CAACC,CAAU,EAAG,YACd,CAACC,CAAK,EAAG,SACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,wBACnB,CAACC,CAAS,EAAG,oBACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,kBACf,CAACC,CAAU,EAAG,aACd,CAACC,CAAK,EAAG,SACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,2BACnB,CAACC,CAAS,EAAG,0BACb,CAACC,CAAO,EAAG,eACX,CAACC,CAAW,EAAG,mBACf,CAACC,CAAU,EAAG,aACd,CAACC,CAAK,EAAG,OACT,CAACC,CAAO,EAAG,QACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,8BACnB,CAACC,CAAS,EAAG,aACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,sBACf,CAACC,CAAU,EAAG,kBACd,CAACC,CAAK,EAAG,MACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,0BACnB,CAACC,CAAS,EAAG,YACb,CAACC,CAAO,EAAG,YACX,CAACC,CAAW,EAAG,oBACf,CAACC,CAAU,EAAG,eACd,CAACC,CAAK,EAAG,OACT,CAA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",
6
- "names": ["chars", "lookup", "i", "encode", "arraybuffer", "bytes", "len", "base64", "decode", "bufferLength", "p", "encoded1", "encoded2", "encoded3", "encoded4", "PUZZLE_BUFFER_LENGTH", "ACCEPTABLE_CLIENT_ERRORS", "getPuzzle", "endpoint", "sitekey", "response", "fetchWithBackoff", "json", "err", "wait", "delay", "resolve", "url", "options", "maxAttempts", "initialDelay", "maxDelay", "attempt", "readUInt32LE", "binaryData", "offset", "readUInt64LE", "Puzzle", "rawData", "parts", "buffer", "data", "decode", "userDataSize", "puzzleBuffer", "enlargedBuffer", "inlineWorker", "scriptText", "blob", "url", "worker", "Worker", "inlineWorker", "METADATA_VERSION", "WorkersPool", "callbacks", "debug", "puzzle", "autoStart", "workersCount", "readyWorkers", "workers", "pool", "puzzleID", "puzzleData", "i", "worker", "Worker", "e", "event", "id", "solution", "wasm", "skipSolving", "stubSolution", "count", "errorCode", "solutionsLength", "total", "arr", "metadataArray", "metadataSize", "resultArray", "offset", "encode", "binaryData", "currentIndex", "wasmFlag", "elapsedMillis", "SafeHTMLElement", "ProgressRing", "SafeHTMLElement", "stroke", "size", "radius", "normalizedRadius", "percent", "progress", "offset", "circle", "pie", "name", "oldValue", "newValue", "styles_default", "CLICK_TO_VERIFY", "VERIFYING", "SUCCESS", "UNAVAILABLE", "INCOMPLETE", "ERROR", "TESTING", "STRINGS", "ProgressRing", "STATE_EMPTY", "STATE_ERROR", "STATE_LOADING", "STATE_READY", "STATE_IN_PROGRESS", "STATE_VERIFIED", "STATE_INVALID", "DISPLAY_POPUP", "DISPLAY_HIDDEN", "DISPLAY_WIDGET", "CHECKBOX_ID", "PROGRESS_ID", "DEBUG_ID", "DEBUG_ERROR_CLASS", "privateCaptchaSVG", "verifiedSVG", "checkbox", "cls", "label", "text", "forElement", "errorDescription", "code", "strings", "INCOMPLETE", "TESTING", "ERROR", "CaptchaElement", "SafeHTMLElement", "STRINGS", "sheet", "styles_default", "extraStyles", "cssText", "canShow", "state", "activeArea", "bindCheckEvent", "showPopupIfNeeded", "CLICK_TO_VERIFY", "VERIFYING", "SUCCESS", "UNAVAILABLE", "debugText", "hostClass", "event", "checkEvent", "percent", "progressBar", "value", "error", "debugElement", "newStyles", "index", "sheets", "name", "oldValue", "newValue", "CaptchaElement", "PUZZLE_ENDPOINT_URL", "PUZZLE_EU_ENDPOINT_URL", "RECAPTCHA_COMPAT", "findParentFormElement", "element", "CaptchaWidget", "options", "STATE_EMPTY", "WorkersPool", "form", "DISPLAY_POPUP", "anchor", "defaultEndpoint", "defaultField", "sitekey", "autoStart", "STATE_ERROR", "startWorkers", "STATE_LOADING", "puzzleData", "getPuzzle", "Puzzle", "expirationMillis", "e", "STATE_VERIFIED", "STATE_INVALID", "STATE_READY", "STATE_IN_PROGRESS", "eventName", "detail", "event", "callback", "solutionField", "newStyles", "pcElement", "progressState", "finished", "error", "percent", "payload", "state", "canShow", "DISPLAY_WIDGET", "progress", "str"]
4
+ "sourcesContent": ["const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n let bytes = new Uint8Array(arraybuffer),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n\n return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n let bufferLength = base64.length * 0.75,\n len = base64.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n const arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n};\n", "'use strict';\n\nimport { decode } from 'base64-arraybuffer';\n\nconst PUZZLE_BUFFER_LENGTH = 128;\n// RequestTimeout, Conflict, TooManyRequests\nconst ACCEPTABLE_CLIENT_ERRORS = [408, 409, 429];\n\nexport async function getPuzzle(endpoint, sitekey) {\n try {\n const response = await fetchWithBackoff(`${endpoint}?sitekey=${sitekey}`,\n { headers: [[\"x-pc-captcha-version\", \"1\"]], mode: \"cors\" },\n 3 /*max attempts*/\n );\n\n if (response.ok) {\n const data = await response.text()\n return data;\n } else {\n let json = await response.json();\n if (json && json.error) {\n throw Error(json.error);\n }\n }\n } catch (err) {\n console.error('[privatecaptcha]', err);\n throw err;\n }\n\n throw Error('Internal error');\n};\n\nfunction wait(delay) {\n return new Promise((resolve) => setTimeout(resolve, delay));\n}\n\nasync function fetchWithBackoff(url, options, maxAttempts, initialDelay = 800, maxDelay = 6000) {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n if (attempt > 0) {\n const delay = Math.min(initialDelay * Math.pow(2, attempt), maxDelay);\n await wait(delay);\n }\n\n try {\n const response = await fetch(url, options);\n if (response.ok) {\n return response;\n } else {\n console.warn('[privatecaptcha]', `HTTP request failed. url=${url} status=${response.status}`);\n }\n\n if ((response.status >= 400) && (response.status < 500) &&\n !ACCEPTABLE_CLIENT_ERRORS.includes(response.status)) {\n // we don't retry on most client errors\n break;\n } else {\n continue;\n }\n } catch (err) {\n console.error('[privatecaptcha]', err);\n }\n }\n\n throw new Error('Captcha puzzle load failed after maximum retry attempts');\n}\n\nfunction readUInt32LE(binaryData, offset) {\n return (\n binaryData[offset] |\n (binaryData[offset + 1] << 8) |\n (binaryData[offset + 2] << 16) |\n (binaryData[offset + 3] << 24)\n ) >>> 0;\n}\n\nfunction readUInt64LE(binaryData, offset) {\n return (\n BigInt(readUInt32LE(binaryData, offset)) +\n (BigInt(readUInt32LE(binaryData, offset + 4)) << 32n)\n );\n}\n\nexport class Puzzle {\n constructor(rawData) {\n this.puzzleBuffer = null;\n\n this.ID = null;\n this.difficulty = null;\n this.solutionsCount = null;\n this.expirationTimestamp = null;\n this.userData = null;\n\n this.signature = null;\n\n this.parse(rawData);\n this.rawData = rawData;\n }\n\n parse(rawData) {\n const parts = rawData.split('.');\n if (parts.length !== 2) {\n throw Error(`Invalid amount of parts: ${parts.length}`)\n }\n\n const buffer = parts[0];\n this.signature = parts[1];\n\n const data = new Uint8Array(decode(buffer));\n let offset = 0;\n\n offset += 1; // version\n offset += 16; // propertyID\n\n this.ID = readUInt64LE(data, offset);\n offset += 8;\n\n this.difficulty = data[offset];\n offset += 1;\n\n this.solutionsCount = data[offset];\n offset += 1;\n\n this.expirationTimestamp = readUInt32LE(data, offset);\n offset += 4;\n\n offset += 4; // AccountID\n\n const userDataSize = 16;\n this.userData = data.slice(offset, offset + userDataSize);\n offset += userDataSize;\n\n let puzzleBuffer = data;\n if (puzzleBuffer.length < PUZZLE_BUFFER_LENGTH) {\n const enlargedBuffer = new Uint8Array(PUZZLE_BUFFER_LENGTH);\n enlargedBuffer.set(puzzleBuffer);\n this.puzzleBuffer = enlargedBuffer;\n } else {\n this.puzzleBuffer = puzzleBuffer;\n }\n }\n\n isZero() {\n return (this.ID === 0n) && (this.difficulty === 0) && (this.expirationTimestamp === 0);\n }\n\n expirationMillis() {\n if (!this.expirationTimestamp) { return 0; }\n\n const expiration = new Date(this.expirationTimestamp * 1000);\n const currentDate = new Date();\n const diff = expiration - currentDate;\n return diff;\n }\n};\n", "\nexport default function inlineWorker(scriptText) {\n let blob = new Blob([scriptText], {type: 'text/javascript'});\n let url = URL.createObjectURL(blob);\n let worker = new Worker(url);\n URL.revokeObjectURL(url);\n return worker;\n}\n", "import inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"var gI=Object.create;var iA=Object.defineProperty;var CI=Object.getOwnPropertyDescriptor;var oI=Object.getOwnPropertyNames;var hI=Object.getPrototypeOf,rI=Object.prototype.hasOwnProperty;var l=(A,i)=>()=>(i||A((i={exports:{}}).exports,i),i.exports);var EI=(A,i,I,e)=>{if(i&&typeof i==\\\"object\\\"||typeof i==\\\"function\\\")for(let t of oI(i))!rI.call(A,t)&&t!==I&&iA(A,t,{get:()=>i[t],enumerable:!(e=CI(i,t))||e.enumerable});return A};var eA=(A,i,I)=>(I=A!=null?gI(hI(A)):{},EI(i||!A||!A.__esModule?iA(I,\\\"default\\\",{value:A,enumerable:!0}):I,A));var gA=l((Ui,nA)=>{nA.exports=tA;var G=class extends Error{};G.prototype.name=\\\"AssertionError\\\";function tA(A,i){if(!A){var I=new G(i);throw Error.captureStackTrace&&Error.captureStackTrace(I,tA),I}}});var hA=l((Si,oA)=>{function CA(A){return A.length}function QI(A){let i=A.byteLength,I=\\\"\\\";for(let e=0;e<i;e++)I+=String.fromCharCode(A[e]);return I}function fI(A,i,I=0,e=CA(i)){let t=Math.min(e,A.byteLength-I);for(let n=0;n<t;n++)A[I+n]=i.charCodeAt(n);return t}oA.exports={byteLength:CA,toString:QI,write:fI}});var QA=l((Fi,EA)=>{var H=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\",p=new Uint8Array(256);for(let A=0;A<H.length;A++)p[H.charCodeAt(A)]=A;p[45]=62;p[95]=63;function rA(A){let i=A.length;return A.charCodeAt(i-1)===61&&i--,i>1&&A.charCodeAt(i-1)===61&&i--,i*3>>>2}function BI(A){let i=A.byteLength,I=\\\"\\\";for(let e=0;e<i;e+=3)I+=H[A[e]>>2]+H[(A[e]&3)<<4|A[e+1]>>4]+H[(A[e+1]&15)<<2|A[e+2]>>6]+H[A[e+2]&63];return i%3===2?I=I.substring(0,I.length-1)+\\\"=\\\":i%3===1&&(I=I.substring(0,I.length-2)+\\\"==\\\"),I}function sI(A,i,I=0,e=rA(i)){let t=Math.min(e,A.byteLength-I);for(let n=0,g=0;g<t;n+=4){let o=p[i.charCodeAt(n)],r=p[i.charCodeAt(n+1)],E=p[i.charCodeAt(n+2)],Q=p[i.charCodeAt(n+3)];A[g++]=o<<2|r>>4,A[g++]=(r&15)<<4|E>>2,A[g++]=(E&3)<<6|Q&63}return t}EA.exports={byteLength:rA,toString:BI,write:sI}});var yA=l((Ki,sA)=>{function BA(A){return A.length>>>1}function yI(A){let i=A.byteLength;A=new DataView(A.buffer,A.byteOffset,i);let I=\\\"\\\",e=0;for(let t=i-i%4;e<t;e+=4)I+=A.getUint32(e).toString(16).padStart(8,\\\"0\\\");for(;e<i;e++)I+=A.getUint8(e).toString(16).padStart(2,\\\"0\\\");return I}function lI(A,i,I=0,e=BA(i)){let t=Math.min(e,A.byteLength-I);for(let n=0;n<t;n++){let g=fA(i.charCodeAt(n*2)),o=fA(i.charCodeAt(n*2+1));if(g===void 0||o===void 0)return A.subarray(0,n);A[I+n]=g<<4|o}return t}sA.exports={byteLength:BA,toString:yI,write:lI};function fA(A){if(A>=48&&A<=57)return A-48;if(A>=65&&A<=70)return A-65+10;if(A>=97&&A<=102)return A-97+10}});var aA=l((pi,lA)=>{function _(A){let i=0;for(let I=0,e=A.length;I<e;I++){let t=A.charCodeAt(I);if(t>=55296&&t<=56319&&I+1<e){let n=A.charCodeAt(I+1);if(n>=56320&&n<=57343){i+=4,I++;continue}}t<=127?i+=1:t<=2047?i+=2:i+=3}return i}var X;if(typeof TextDecoder!=\\\"undefined\\\"){let A=new TextDecoder;X=function(I){return A.decode(I)}}else X=function(i){let I=i.byteLength,e=\\\"\\\",t=0;for(;t<I;){let n=i[t];if(n<=127){e+=String.fromCharCode(n),t++;continue}let g=0,o=0;if(n<=223?(g=1,o=n&31):n<=239?(g=2,o=n&15):n<=244&&(g=3,o=n&7),I-t-g>0){let r=0;for(;r<g;)n=i[t+r+1],o=o<<6|n&63,r+=1}else o=65533,g=I-t;e+=String.fromCodePoint(o),t+=g+1}return e};var q;if(typeof TextEncoder!=\\\"undefined\\\"){let A=new TextEncoder;q=function(I,e,t=0,n=_(e)){let g=Math.min(n,I.byteLength-t);return A.encodeInto(e,I.subarray(t,t+g)),g}}else q=function(i,I,e=0,t=_(I)){let n=Math.min(t,i.byteLength-e);i=i.subarray(e,e+n);let g=0,o=0;for(;g<I.length;){let r=I.codePointAt(g);if(r<=127){i[o++]=r,g++;continue}let E=0,Q=0;for(r<=2047?(E=6,Q=192):r<=65535?(E=12,Q=224):r<=2097151&&(E=18,Q=240),i[o++]=Q|r>>E,E-=6;E>=0;)i[o++]=128|r>>E&63,E-=6;g+=r>=65536?2:1}return n};lA.exports={byteLength:_,toString:X,write:q}});var uA=l((bi,cA)=>{function wA(A){return A.length*2}function aI(A){let i=A.byteLength,I=\\\"\\\";for(let e=0;e<i-1;e+=2)I+=String.fromCharCode(A[e]+A[e+1]*256);return I}function wI(A,i,I=0,e=wA(i)){let t=Math.min(e,A.byteLength-I),n=t;for(let g=0;g<i.length&&!((n-=2)<0);++g){let o=i.charCodeAt(g),r=o>>8,E=o%256;A[I+g*2]=E,A[I+g*2+1]=r}return t}cA.exports={byteLength:wA,toString:aI,write:wI}});var KA=l((W,FA)=>{var cI=hA(),uI=QA(),DI=yA(),UI=aA(),SI=uA(),k=new Uint8Array(Uint16Array.of(255).buffer)[0]===255;function V(A){switch(A){case\\\"ascii\\\":return cI;case\\\"base64\\\":return uI;case\\\"hex\\\":return DI;case\\\"utf8\\\":case\\\"utf-8\\\":case void 0:return UI;case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return SI;default:throw new Error(`Unknown encoding: ${A}`)}}function DA(A){return A instanceof Uint8Array}function FI(A){try{return V(A),!0}catch(i){return!1}}function KI(A,i,I){let e=new Uint8Array(A);return i!==void 0&&W.fill(e,i,0,e.byteLength,I),e}function pI(A){return new Uint8Array(A)}function bI(A){return new Uint8Array(A)}function xI(A,i){return V(i).byteLength(A)}function HI(A,i){if(A===i)return 0;let I=Math.min(A.byteLength,i.byteLength);A=new DataView(A.buffer,A.byteOffset,A.byteLength),i=new DataView(i.buffer,i.byteOffset,i.byteLength);let e=0;for(let t=I-I%4;e<t;e+=4){let n=A.getUint32(e,k),g=i.getUint32(e,k);if(n!==g)break}for(;e<I;e++){let t=A.getUint8(e),n=i.getUint8(e);if(t<n)return-1;if(t>n)return 1}return A.byteLength>i.byteLength?1:A.byteLength<i.byteLength?-1:0}function dI(A,i){i===void 0&&(i=A.reduce((t,n)=>t+n.byteLength,0));let I=new Uint8Array(i),e=0;for(let t of A){if(e+t.byteLength>I.byteLength){let n=t.subarray(0,I.byteLength-e);return I.set(n,e),I}I.set(t,e),e+=t.byteLength}return I}function mI(A,i,I=0,e=0,t=A.byteLength){if(t>0&&t<e||t===e||A.byteLength===0||i.byteLength===0)return 0;if(I<0)throw new RangeError(\\\"targetStart is out of range\\\");if(e<0||e>=A.byteLength)throw new RangeError(\\\"sourceStart is out of range\\\");if(t<0)throw new RangeError(\\\"sourceEnd is out of range\\\");I>=i.byteLength&&(I=i.byteLength),t>A.byteLength&&(t=A.byteLength),i.byteLength-I<t-e&&(t=i.length-I+e);let n=t-e;return A===i?i.copyWithin(I,e,t):i.set(A.subarray(e,t),I),n}function VI(A,i){if(A===i)return!0;if(A.byteLength!==i.byteLength)return!1;let I=A.byteLength;A=new DataView(A.buffer,A.byteOffset,A.byteLength),i=new DataView(i.buffer,i.byteOffset,i.byteLength);let e=0;for(let t=I-I%4;e<t;e+=4)if(A.getUint32(e,k)!==i.getUint32(e,k))return!1;for(;e<I;e++)if(A.getUint8(e)!==i.getUint8(e))return!1;return!0}function LI(A,i,I,e,t){if(typeof i==\\\"string\\\"?typeof I==\\\"string\\\"?(t=I,I=0,e=A.byteLength):typeof e==\\\"string\\\"&&(t=e,e=A.byteLength):typeof i==\\\"number\\\"?i=i&255:typeof i==\\\"boolean\\\"&&(i=+i),I<0||A.byteLength<I||A.byteLength<e)throw new RangeError(\\\"Out of range index\\\");if(I===void 0&&(I=0),e===void 0&&(e=A.byteLength),e<=I)return A;if(i||(i=0),typeof i==\\\"number\\\")for(let n=I;n<e;++n)A[n]=i;else{i=DA(i)?i:j(i,t);let n=i.byteLength;for(let g=0;g<e-I;++g)A[g+I]=i[g%n]}return A}function j(A,i,I){return typeof A==\\\"string\\\"?YI(A,i):Array.isArray(A)?MI(A):ArrayBuffer.isView(A)?GI(A):kI(A,i,I)}function YI(A,i){let I=V(i),e=new Uint8Array(I.byteLength(A));return I.write(e,A,0,e.byteLength),e}function MI(A){let i=new Uint8Array(A.length);return i.set(A),i}function GI(A){let i=new Uint8Array(A.byteLength);return i.set(A),i}function kI(A,i,I){return new Uint8Array(A,i,I)}function PI(A,i,I,e){return SA(A,i,I,e)!==-1}function UA(A,i,I,e,t){if(A.byteLength===0)return-1;if(typeof I==\\\"string\\\"?(e=I,I=0):I===void 0?I=t?0:A.length-1:I<0&&(I+=A.byteLength),I>=A.byteLength){if(t)return-1;I=A.byteLength-1}else if(I<0)if(t)I=0;else return-1;if(typeof i==\\\"string\\\")i=j(i,e);else if(typeof i==\\\"number\\\")return i=i&255,t?A.indexOf(i,I):A.lastIndexOf(i,I);if(i.byteLength===0)return-1;if(t){let n=-1;for(let g=I;g<A.byteLength;g++)if(A[g]===i[n===-1?0:g-n]){if(n===-1&&(n=g),g-n+1===i.byteLength)return n}else n!==-1&&(g-=g-n),n=-1}else{I+i.byteLength>A.byteLength&&(I=A.byteLength-i.byteLength);for(let n=I;n>=0;n--){let g=!0;for(let o=0;o<i.byteLength;o++)if(A[n+o]!==i[o]){g=!1;break}if(g)return n}}return-1}function SA(A,i,I,e){return UA(A,i,I,e,!0)}function NI(A,i,I,e){return UA(A,i,I,e,!1)}function b(A,i,I){let e=A[i];A[i]=A[I],A[I]=e}function OI(A){let i=A.byteLength;if(i%2!==0)throw new RangeError(\\\"Buffer size must be a multiple of 16-bits\\\");for(let I=0;I<i;I+=2)b(A,I,I+1);return A}function JI(A){let i=A.byteLength;if(i%4!==0)throw new RangeError(\\\"Buffer size must be a multiple of 32-bits\\\");for(let I=0;I<i;I+=4)b(A,I,I+3),b(A,I+1,I+2);return A}function RI(A){let i=A.byteLength;if(i%8!==0)throw new RangeError(\\\"Buffer size must be a multiple of 64-bits\\\");for(let I=0;I<i;I+=8)b(A,I,I+7),b(A,I+1,I+6),b(A,I+2,I+5),b(A,I+3,I+4);return A}function TI(A){return A}function _I(A,i,I=0,e=A.byteLength){let t=A.byteLength;return I>=t||e<=I?\\\"\\\":(I<0&&(I=0),e>t&&(e=t),(I!==0||e<t)&&(A=A.subarray(I,e)),V(i).toString(A))}function XI(A,i,I,e,t){return I===void 0?t=\\\"utf8\\\":e===void 0&&typeof I==\\\"string\\\"?(t=I,I=void 0):t===void 0&&typeof e==\\\"string\\\"&&(t=e,e=void 0),V(t).write(A,i,I,e)}function qI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setFloat64(I,i,!0),I+8}function jI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setFloat32(I,i,!0),I+4}function WI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setUint32(I,i,!0),I+4}function zI(A,i,I){return I===void 0&&(I=0),new DataView(A.buffer,A.byteOffset,A.byteLength).setInt32(I,i,!0),I+4}function ZI(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getFloat64(i,!0)}function vI(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getFloat32(i,!0)}function $I(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getUint32(i,!0)}function Ai(A,i){return i===void 0&&(i=0),new DataView(A.buffer,A.byteOffset,A.byteLength).getInt32(i,!0)}FA.exports=W={isBuffer:DA,isEncoding:FI,alloc:KI,allocUnsafe:pI,allocUnsafeSlow:bI,byteLength:xI,compare:HI,concat:dI,copy:mI,equals:VI,fill:LI,from:j,includes:PI,indexOf:SA,lastIndexOf:NI,swap16:OI,swap32:JI,swap64:RI,toBuffer:TI,toString:_I,write:XI,writeDoubleLE:qI,writeFloatLE:jI,writeUInt32LE:WI,writeInt32LE:zI,readDoubleLE:ZI,readFloatLE:vI,readUInt32LE:$I,readInt32LE:Ai}});var bA=l((xi,pA)=>{var Ii=(A,i)=>function(){return i||(0,A[Object.keys(A)[0]])((i={exports:{}}).exports,i),i.exports},ii=(()=>{for(var A=new Uint8Array(128),i=0;i<64;i++)A[i<26?i+65:i<52?i+71:i<62?i-4:i*4-205]=i;return I=>{for(var e=I.length,t=new Uint8Array((e-(I[e-1]==\\\"=\\\")-(I[e-2]==\\\"=\\\"))*3/4|0),n=0,g=0;n<e;){var o=A[I.charCodeAt(n++)],r=A[I.charCodeAt(n++)],E=A[I.charCodeAt(n++)],Q=A[I.charCodeAt(n++)];t[g++]=o<<2|r>>4,t[g++]=r<<4|E>>2,t[g++]=E<<6|Q}return t}})(),ei=Ii({\\\"wasm-binary:./blake2b.wat\\\"(A,i){i.exports=ii(\\\"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\\\")}}),ti=ei(),ni=WebAssembly.compile(ti);pA.exports=async A=>(await WebAssembly.instantiate(await ni,A)).exports});var MA=l((mi,c)=>{var a=gA(),gi=KA(),U=null,xA=typeof WebAssembly!=\\\"undefined\\\"&&bA()().then(A=>{U=A}),D=64,P=[];c.exports=y;var HA=c.exports.BYTES_MIN=16,dA=c.exports.BYTES_MAX=64,Hi=c.exports.BYTES=32,mA=c.exports.KEYBYTES_MIN=16,VA=c.exports.KEYBYTES_MAX=64,di=c.exports.KEYBYTES=32,LA=c.exports.SALTBYTES=16,YA=c.exports.PERSONALBYTES=16;function y(A,i,I,e,t){if(!(this instanceof y))return new y(A,i,I,e,t);if(!U)throw new Error(\\\"WASM not loaded. Wait for Blake2b.ready(cb)\\\");A||(A=32),t!==!0&&(a(A>=HA,\\\"digestLength must be at least \\\"+HA+\\\", was given \\\"+A),a(A<=dA,\\\"digestLength must be at most \\\"+dA+\\\", was given \\\"+A),i!=null&&(a(i instanceof Uint8Array,\\\"key must be Uint8Array or Buffer\\\"),a(i.length>=mA,\\\"key must be at least \\\"+mA+\\\", was given \\\"+i.length),a(i.length<=VA,\\\"key must be at least \\\"+VA+\\\", was given \\\"+i.length)),I!=null&&(a(I instanceof Uint8Array,\\\"salt must be Uint8Array or Buffer\\\"),a(I.length===LA,\\\"salt must be exactly \\\"+LA+\\\", was given \\\"+I.length)),e!=null&&(a(e instanceof Uint8Array,\\\"personal must be Uint8Array or Buffer\\\"),a(e.length===YA,\\\"personal must be exactly \\\"+YA+\\\", was given \\\"+e.length))),P.length||(P.push(D),D+=216),this.digestLength=A,this.finalized=!1,this.pointer=P.pop(),this._memory=new Uint8Array(U.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=i?i.length:0,this._memory[2]=1,this._memory[3]=1,I&&this._memory.set(I,32),e&&this._memory.set(e,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),U.blake2b_init(this.pointer,this.digestLength),i&&(this.update(i),this._memory.fill(0,D,D+i.length),this._memory[this.pointer+200]=128)}y.prototype._realloc=function(A){U.memory.grow(Math.max(0,Math.ceil(Math.abs(A-this._memory.length)/65536))),this._memory=new Uint8Array(U.memory.buffer)};y.prototype.update=function(A){return a(this.finalized===!1,\\\"Hash instance finalized\\\"),a(A instanceof Uint8Array,\\\"input must be Uint8Array or Buffer\\\"),D+A.length>this._memory.length&&this._realloc(D+A.length),this._memory.set(A,D),U.blake2b_update(this.pointer,D,D+A.length),this};y.prototype.digest=function(A){if(a(this.finalized===!1,\\\"Hash instance finalized\\\"),this.finalized=!0,P.push(this.pointer),U.blake2b_final(this.pointer),!A||A===\\\"binary\\\")return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if(typeof A==\\\"string\\\")return gi.toString(this._memory,A,this.pointer+128,this.pointer+128+this.digestLength);a(A instanceof Uint8Array&&A.length>=this.digestLength,\\\"input must be Uint8Array or Buffer\\\");for(var i=0;i<this.digestLength;i++)A[i]=this._memory[this.pointer+128+i];return A};y.prototype.final=y.prototype.digest;y.WASM=U;y.SUPPORTED=typeof WebAssembly!=\\\"undefined\\\";y.ready=function(A){return A||(A=Ci),xA?xA.then(()=>A(),A):A(new Error(\\\"WebAssembly not supported\\\"))};y.prototype.ready=y.ready;y.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)};y.prototype.setPartialHash=function(A){this._memory.set(A,this.pointer)};function Ci(){}});var z=l((Vi,GA)=>{var oi=\\\"Input must be an string, Buffer or Uint8Array\\\";function hi(A){let i;if(A instanceof Uint8Array)i=A;else if(typeof A==\\\"string\\\")i=new TextEncoder().encode(A);else throw new Error(oi);return i}function ri(A){return Array.prototype.map.call(A,function(i){return(i<16?\\\"0\\\":\\\"\\\")+i.toString(16)}).join(\\\"\\\")}function N(A){return(4294967296+A).toString(16).substring(1)}function Ei(A,i,I){let e=`\\n`+A+\\\" = \\\";for(let t=0;t<i.length;t+=2){if(I===32)e+=N(i[t]).toUpperCase(),e+=\\\" \\\",e+=N(i[t+1]).toUpperCase();else if(I===64)e+=N(i[t+1]).toUpperCase(),e+=N(i[t]).toUpperCase();else throw new Error(\\\"Invalid size \\\"+I);t%6===4?e+=`\\n`+new Array(A.length+4).join(\\\" \\\"):t<i.length-2&&(e+=\\\" \\\")}console.log(e)}function Qi(A,i,I){let e=new Date().getTime(),t=new Uint8Array(i);for(let g=0;g<i;g++)t[g]=g%256;let n=new Date().getTime();console.log(\\\"Generated random input in \\\"+(n-e)+\\\"ms\\\"),e=n;for(let g=0;g<I;g++){let o=A(t),r=new Date().getTime(),E=r-e;e=r,console.log(\\\"Hashed in \\\"+E+\\\"ms: \\\"+o.substring(0,20)+\\\"...\\\"),console.log(Math.round(i/(1<<20)/(E/1e3)*100)/100+\\\" MB PER SECOND\\\")}}GA.exports={normalizeInput:hi,toHex:ri,debugPrint:Ei,testSpeed:Qi}});var XA=l((Li,_A)=>{var J=z();function O(A,i,I){let e=A[i]+A[I],t=A[i+1]+A[I+1];e>=4294967296&&t++,A[i]=e,A[i+1]=t}function kA(A,i,I,e){let t=A[i]+I;I<0&&(t+=4294967296);let n=A[i+1]+e;t>=4294967296&&n++,A[i]=t,A[i+1]=n}function PA(A,i){return A[i]^A[i+1]<<8^A[i+2]<<16^A[i+3]<<24}function S(A,i,I,e,t,n){let g=L[t],o=L[t+1],r=L[n],E=L[n+1];O(C,A,i),kA(C,A,g,o);let Q=C[e]^C[A],w=C[e+1]^C[A+1];C[e]=w,C[e+1]=Q,O(C,I,e),Q=C[i]^C[I],w=C[i+1]^C[I+1],C[i]=Q>>>24^w<<8,C[i+1]=w>>>24^Q<<8,O(C,A,i),kA(C,A,r,E),Q=C[e]^C[A],w=C[e+1]^C[A+1],C[e]=Q>>>16^w<<16,C[e+1]=w>>>16^Q<<16,O(C,I,e),Q=C[i]^C[I],w=C[i+1]^C[I+1],C[i]=w>>>31^Q<<1,C[i+1]=Q>>>31^w<<1}var NA=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),fi=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3],B=new Uint8Array(fi.map(function(A){return A*2})),C=new Uint32Array(32),L=new Uint32Array(32);function OA(A,i){let I=0;for(I=0;I<16;I++)C[I]=A.h[I],C[I+16]=NA[I];for(C[24]=C[24]^A.t,C[25]=C[25]^A.t/4294967296,i&&(C[28]=~C[28],C[29]=~C[29]),I=0;I<32;I++)L[I]=PA(A.b,4*I);for(I=0;I<12;I++)S(0,8,16,24,B[I*16+0],B[I*16+1]),S(2,10,18,26,B[I*16+2],B[I*16+3]),S(4,12,20,28,B[I*16+4],B[I*16+5]),S(6,14,22,30,B[I*16+6],B[I*16+7]),S(0,10,20,30,B[I*16+8],B[I*16+9]),S(2,12,22,24,B[I*16+10],B[I*16+11]),S(4,14,16,26,B[I*16+12],B[I*16+13]),S(6,8,18,28,B[I*16+14],B[I*16+15]);for(I=0;I<16;I++)A.h[I]=A.h[I]^C[I]^C[I+16]}var F=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function JA(A,i,I,e){if(A===0||A>64)throw new Error(\\\"Illegal output length, expected 0 < length <= 64\\\");if(i&&i.length>64)throw new Error(\\\"Illegal key, expected Uint8Array with 0 < length <= 64\\\");if(I&&I.length!==16)throw new Error(\\\"Illegal salt, expected Uint8Array with length is 16\\\");if(e&&e.length!==16)throw new Error(\\\"Illegal personal, expected Uint8Array with length is 16\\\");let t={b:new Uint8Array(128),h:new Uint32Array(16),t:0,c:0,outlen:A};F.fill(0),F[0]=A,i&&(F[1]=i.length),F[2]=1,F[3]=1,I&&F.set(I,32),e&&F.set(e,48);for(let n=0;n<16;n++)t.h[n]=NA[n]^PA(F,n*4);return i&&(Z(t,i),t.c=128),t}function Z(A,i){for(let I=0;I<i.length;I++)A.c===128&&(A.t+=A.c,OA(A,!1),A.c=0),A.b[A.c++]=i[I]}function RA(A){for(A.t+=A.c;A.c<128;)A.b[A.c++]=0;OA(A,!0);let i=new Uint8Array(A.outlen);for(let I=0;I<A.outlen;I++)i[I]=A.h[I>>2]>>8*(I&3);return i}function TA(A,i,I,e,t){I=I||64,A=J.normalizeInput(A),e&&(e=J.normalizeInput(e)),t&&(t=J.normalizeInput(t));let n=JA(I,i,e,t);return Z(n,A),RA(n)}function Bi(A,i,I,e,t){let n=TA(A,i,I,e,t);return J.toHex(n)}_A.exports={blake2b:TA,blake2bHex:Bi,blake2bInit:JA,blake2bUpdate:Z,blake2bFinal:RA}});var AI=l((Yi,$A)=>{var qA=z();function si(A,i){return A[i]^A[i+1]<<8^A[i+2]<<16^A[i+3]<<24}function K(A,i,I,e,t,n){h[A]=h[A]+h[i]+t,h[e]=R(h[e]^h[A],16),h[I]=h[I]+h[e],h[i]=R(h[i]^h[I],12),h[A]=h[A]+h[i]+n,h[e]=R(h[e]^h[A],8),h[I]=h[I]+h[e],h[i]=R(h[i]^h[I],7)}function R(A,i){return A>>>i^A<<32-i}var jA=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),s=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]),h=new Uint32Array(16),f=new Uint32Array(16);function WA(A,i){let I=0;for(I=0;I<8;I++)h[I]=A.h[I],h[I+8]=jA[I];for(h[12]^=A.t,h[13]^=A.t/4294967296,i&&(h[14]=~h[14]),I=0;I<16;I++)f[I]=si(A.b,4*I);for(I=0;I<10;I++)K(0,4,8,12,f[s[I*16+0]],f[s[I*16+1]]),K(1,5,9,13,f[s[I*16+2]],f[s[I*16+3]]),K(2,6,10,14,f[s[I*16+4]],f[s[I*16+5]]),K(3,7,11,15,f[s[I*16+6]],f[s[I*16+7]]),K(0,5,10,15,f[s[I*16+8]],f[s[I*16+9]]),K(1,6,11,12,f[s[I*16+10]],f[s[I*16+11]]),K(2,7,8,13,f[s[I*16+12]],f[s[I*16+13]]),K(3,4,9,14,f[s[I*16+14]],f[s[I*16+15]]);for(I=0;I<8;I++)A.h[I]^=h[I]^h[I+8]}function zA(A,i){if(!(A>0&&A<=32))throw new Error(\\\"Incorrect output length, should be in [1, 32]\\\");let I=i?i.length:0;if(i&&!(I>0&&I<=32))throw new Error(\\\"Incorrect key length, should be in [1, 32]\\\");let e={h:new Uint32Array(jA),b:new Uint8Array(64),c:0,t:0,outlen:A};return e.h[0]^=16842752^I<<8^A,I>0&&(v(e,i),e.c=64),e}function v(A,i){for(let I=0;I<i.length;I++)A.c===64&&(A.t+=A.c,WA(A,!1),A.c=0),A.b[A.c++]=i[I]}function ZA(A){for(A.t+=A.c;A.c<64;)A.b[A.c++]=0;WA(A,!0);let i=new Uint8Array(A.outlen);for(let I=0;I<A.outlen;I++)i[I]=A.h[I>>2]>>8*(I&3)&255;return i}function vA(A,i,I){I=I||32,A=qA.normalizeInput(A);let e=zA(I,i);return v(e,A),ZA(e)}function yi(A,i,I){let e=vA(A,i,I);return qA.toHex(e)}$A.exports={blake2s:vA,blake2sHex:yi,blake2sInit:zA,blake2sUpdate:v,blake2sFinal:ZA}});var iI=l((Mi,II)=>{var Y=XA(),M=AI();II.exports={blake2b:Y.blake2b,blake2bHex:Y.blake2bHex,blake2bInit:Y.blake2bInit,blake2bUpdate:Y.blake2bUpdate,blake2bFinal:Y.blake2bFinal,blake2s:M.blake2s,blake2sHex:M.blake2sHex,blake2sInit:M.blake2sInit,blake2sUpdate:M.blake2sUpdate,blake2sFinal:M.blake2sFinal}});var x=eA(MA(),1),m=eA(iI(),1);function d(A,i,I,e){return(0,m.blake2bInit)(A,i)}d.prototype.update=function(A){return(0,m.blake2bUpdate)(this,A),this};d.prototype.digest=function(A){var i=A||new Uint8Array(this.outlen);return(0,m.blake2bFinal)(this,i),i};d.prototype.final=d.prototype.digest;d.ready=function(A){x.ready(function(){A()})};function li(A,i,I,e){return new d(A,i)}function $(A){x.ready(function(){A()})}var AA=!1,T=li;x.ready(function(A){A||(AA=!0,T=x.default)});var tI=T,nI=!1,u=null,eI=null,IA=!1;$?$(()=>{IA=AA,console.debug(\\\"[privatecaptcha][worker] Hasher loaded. wasm=\\\"+IA),tI=T,nI=!0,u&&self.postMessage({command:\\\"init\\\"})}):console.warn(\\\"[privatecaptcha][worker] Blake2b ready() is not defined\\\");function wi(A,i){return(A[i]|A[i+1]<<8|A[i+2]<<16|A[i+3]<<24)>>>0}function ci(A){return Math.pow(2,Math.floor((255.999-A)/8))>>>0}function ui(A,i,I){let e=u.length;I&&console.debug(`[privatecaptcha][worker] looking for a solution. threshold=${A} puzzleID=${i} length=${e}`),u[e-8]=i;let t=new Uint8Array(32);for(let n=0;n<256;n++){u[e-1-3]=n;for(let g=0;g<256;g++){u[e-1-2]=g;for(let o=0;o<256;o++){u[e-1-1]=g;for(let r=0;r<256;r++){u[e-1-0]=r,t.fill(0),tI(t.length).update(u).digest(t);let E=wi(t,0);if(E<=A)return I&&console.debug(`[privatecaptcha][worker] found solution. prefix=${E} threshold=${A}`),u.subarray(e-8)}}}}return new Uint8Array(0)}self.onmessage=A=>{let{command:i,argument:I}=A.data;switch(i){case\\\"init\\\":let{id:e,buffer:t}=I;eI=e,u=t,nI&&self.postMessage({command:\\\"init\\\"});break;case\\\"solve\\\":let{difficulty:n,puzzleIndex:g,debug:o}=I,r=ci(n),E=ui(r,g,o);self.postMessage({command:i,argument:{id:eI,solution:E,wasm:IA}});break;default:break}};\\n\");\n}\n", "import { encode } from 'base64-arraybuffer';\nimport PuzzleWorker from './puzzle.worker.js';\n\nconst METADATA_VERSION = 1;\n\nexport class WorkersPool {\n constructor(callbacks = {}, debug = false) {\n this._solutions = [];\n this._solutionsCount = 0;\n this._puzzleID = null;\n this._workers = [];\n this._debug = debug;\n this._timeStarted = null;\n this._timeFinished = null;\n this._anyWasm = false;\n\n this._callbacks = Object.assign({\n workersReady: () => 0,\n workerError: () => 0,\n workStarted: () => 0,\n workCompleted: () => 0,\n progress: () => 0,\n }, callbacks);\n }\n\n init(puzzle, autoStart) {\n if (!puzzle) { return; }\n if (puzzle.isZero()) {\n if (this._debug) { console.debug('[privatecaptcha][pool] skipping initializing workers'); }\n setTimeout(() => this._callbacks.workersReady(autoStart), 0);\n return;\n }\n\n const workersCount = 4;\n let readyWorkers = 0;\n const workers = [];\n const pool = this;\n const puzzleID = puzzle.ID;\n const puzzleData = puzzle.puzzleBuffer;\n\n for (let i = 0; i < workersCount; i++) {\n const worker = new PuzzleWorker();\n\n worker.onerror = (e) => this._callbacks.workerError(e);\n worker.onmessage = function(event) {\n if (!event.data) { return; }\n const command = event.data.command;\n switch (command) {\n case \"init\":\n readyWorkers++;\n if (readyWorkers === workersCount) {\n pool._callbacks.workersReady(autoStart);\n }\n break;\n case \"solve\":\n const { id, solution, wasm } = event.data.argument;\n pool.onSolutionFound(id, solution, wasm);\n break;\n case \"error\":\n if (event.data.error) {\n pool._callbacks.workerError(event.data.error);\n }\n break;\n default:\n break;\n };\n };\n workers.push(worker);\n }\n\n this._workers = workers;\n\n if (this._debug) { console.debug(`[privatecaptcha][pool] initializing workers. count=${this._workers.length}`); }\n for (let i = 0; i < this._workers.length; i++) {\n this._workers[i].postMessage({\n command: \"init\",\n argument: {\n id: puzzleID,\n buffer: puzzleData,\n },\n });\n };\n }\n\n solve(puzzle) {\n if (!puzzle) { return; }\n\n if (this._debug) { console.debug('[privatecaptcha][pool] starting solving'); }\n this._solutions = [];\n this._solutionsCount = puzzle.solutionsCount;\n this._puzzleID = puzzle.ID;\n this._timeStarted = Date.now();\n this._timeFinished = null;\n\n const skipSolving = puzzle.isZero() || (puzzle.solutionsCount === 0);\n let stubSolution = null;\n\n for (let i = 0; i < puzzle.solutionsCount; i++) {\n if (!skipSolving) {\n this._workers[i % this._workers.length].postMessage({\n command: \"solve\",\n argument: {\n difficulty: puzzle.difficulty,\n puzzleIndex: i,\n debug: this._debug,\n },\n });\n } else {\n if (!stubSolution) { stubSolution = new Uint8Array(8); }\n this._solutions.push(stubSolution);\n }\n }\n\n this._callbacks.workStarted();\n\n if (skipSolving) {\n setTimeout(() => this.onWorkCompleted(), 0);\n }\n }\n\n stop() {\n const count = this._workers.length;\n for (let i = 0; i < count; i++) {\n this._workers[i].terminate();\n }\n this._workers = [];\n if (this._debug) { console.debug('[privatecaptcha][pool] terminated the workers. count=' + count); }\n }\n\n onSolutionFound(id, solution, wasm) {\n if (this._debug) { console.debug('[privatecaptcha][pool] solution found. length=' + solution.length); }\n if (id != this._puzzleID) {\n console.warn(`[privatecaptcha][pool] Discarding solution with invalid ID. actual=${id} expected=${this._puzzleID}`);\n return;\n }\n this._solutions.push(solution);\n\n if (wasm) { this._anyWasm = true; }\n\n const count = this._solutions.length;\n\n this._callbacks.progress(count * 100.0 / this._solutionsCount);\n\n if (count == this._solutionsCount) {\n this.onWorkCompleted();\n }\n }\n\n onWorkCompleted() {\n this._timeFinished = Date.now();\n this._callbacks.workCompleted();\n }\n\n serializeSolutions(errorCode) {\n if (this._debug) { console.debug('[privatecaptcha][pool] serializing solutions. count=' + this._solutions.length); }\n const solutionsLength = this._solutions.reduce((total, arr) => total + arr.length, 0);\n\n const metadataArray = this.writeMetadata(errorCode);\n const metadataSize = metadataArray.length;\n\n const resultArray = new Uint8Array(metadataSize + solutionsLength);\n let offset = 0;\n\n resultArray.set(metadataArray, offset);\n offset += metadataArray.length;\n\n for (let i = 0; i < this._solutions.length; i++) {\n resultArray.set(this._solutions[i], offset);\n offset += this._solutions[i].length;\n }\n\n return encode(resultArray);\n }\n\n writeMetadata(errorCode) {\n const metadataSize = 1 + 1 + 1 + 4;\n const binaryData = new Uint8Array(metadataSize);\n let currentIndex = 0;\n\n binaryData[currentIndex++] = METADATA_VERSION & 0xFF;\n binaryData[currentIndex++] = errorCode & 0xFF;\n\n const wasmFlag = this._anyWasm ? 1 : 0;\n binaryData[currentIndex++] = wasmFlag & 0xFF;\n\n const elapsedMillis = this.elapsedMillis();\n // Little-Endian\n binaryData[currentIndex++] = elapsedMillis & 0xFF;\n binaryData[currentIndex++] = (elapsedMillis >> 8) & 0xFF;\n binaryData[currentIndex++] = (elapsedMillis >> 16) & 0xFF;\n binaryData[currentIndex++] = (elapsedMillis >> 24) & 0xFF;\n\n return binaryData;\n }\n\n elapsedMillis() {\n if (this._timeStarted && this._timeFinished) {\n return this._timeFinished - this._timeStarted;\n }\n\n return 0;\n }\n}\n", "'use strict';\n\nexport const SafeHTMLElement = typeof HTMLElement !== 'undefined' ? HTMLElement : Object;\n", "'use strict';\n\nimport { SafeHTMLElement } from \"./utils.js\";\n\nexport class ProgressRing extends SafeHTMLElement {\n constructor() {\n super();\n\n // NOTE: stroke is sized with regards to {size} variable below\n // not to the scaled (external) size of SVG (yes, it's a bit confusing)\n const stroke = this.getAttribute('stroke');\n const size = 100;\n const radius = size / 2;\n const normalizedRadius = radius - stroke / 2;\n this._circumference = normalizedRadius * 2 * Math.PI;\n\n // create shadow dom root\n this._root = this.attachShadow({ mode: 'open' });\n this._root.innerHTML = `\n <svg preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 ${size} ${size}\">\n <circle\n id=\"pie\"\n style=\"stroke-dasharray: 0 ${this._circumference}\"\n stroke-width=\"${normalizedRadius}\"\n fill=\"transparent\"\n r=\"${normalizedRadius / 2}\"\n cx=\"${radius}\"\n cy=\"${radius}\"\n />\n <circle\n id=\"track\"\n stroke-width=\"${stroke}\"\n fill=\"transparent\"\n r=\"${normalizedRadius}\"\n cx=\"${radius}\"\n cy=\"${radius}\"\n />\n <circle\n id=\"progress\"\n stroke-dasharray=\"${this._circumference} ${this._circumference}\"\n style=\"stroke-dashoffset: ${this._circumference}\"\n stroke-width=\"${stroke}\"\n fill=\"transparent\"\n r=\"${normalizedRadius}\"\n cx=\"${radius}\"\n cy=\"${radius}\"\n />\n </svg>\n\n <style>\n svg {\n width: 2.25em;\n height: 2.25em;\n }\n #pie {\n stroke: var(--pie-color);\n transition: stroke-dasharray 0.35s;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n #progress {\n stroke: var(--accent-color);\n transition: stroke-dashoffset 0.35s;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n #track {\n stroke: var(--gray-color);\n }\n </style>\n `;\n }\n\n setProgress(percent) {\n const progress = (percent / 100 * this._circumference)\n const offset = this._circumference - progress;\n const circle = this._root.getElementById('progress');\n circle.style.strokeDashoffset = offset;\n\n const pie = this._root.getElementById('pie');\n pie.style.strokeDasharray = progress / 2 + ' ' + this._circumference;\n }\n\n static get observedAttributes() {\n return ['progress'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'progress') {\n this.setProgress(newValue);\n }\n }\n}\n", "@layer base,theme,custom;@layer base{:host,*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border:0 solid}:host{--extra-spacing: 0px;--label-spacing: .625rem;--border-radius: .125rem;--warn-color: #A70B0B;--accent-color: #009400;min-width:0;font-size:1rem;display:inline-block;max-width:100%;border-radius:var(--border-radius)}:host(.hidden){display:none}:host(.floating){display:block;position:absolute;left:0;top:0;transform:translateY(-100%);z-index:1000}@media (min-width: 30em){:host{min-width:20em}}}@layer theme{:host([theme=\"light\"]){--dark-color: #070113;--gray-color: #E0E0E0;--pie-color: #D8E9E9;--background-color: #fff;--checkbox-background-color: #FFF;--checkbox-hover-color: #EBF4F4}:host([theme=\"dark\"]){--dark-color: #EBF4F4;--gray-color: #656C7B;--pie-color: #376262;--background-color: #041616;--checkbox-background-color: #223C3C;--checkbox-hover-color: #1C3232}:host{--border: 1px solid var(--gray-color)}}.pc-captcha-widget{display:flex;align-items:center;flex-direction:row;padding:.75em 1em;border:var(--border);border-radius:var(--border-radius);background-color:var(--background-color);box-sizing:border-box;width:100%;height:100%}.pc-interactive-area{display:flex;flex:0 1 auto;align-items:center;position:relative;min-width:0}.pc-interactive-area label{padding-left:var(--label-spacing);color:var(--dark-color);flex:0 1 auto;min-width:1em;white-space:normal}.pc-interactive-area input[type=checkbox]{font-size:1em;width:2em;height:2em;margin:0 0 0 calc(.125em + var(--extra-spacing));appearance:none;background-color:var(--checkbox-background-color);border:.125em solid var(--dark-color);border-radius:.25em;cursor:pointer;flex-shrink:0}.pc-interactive-area input[type=checkbox]+label{padding:0 0 0 calc(.125em + var(--extra-spacing) + var(--label-spacing))}@keyframes colorChange{0%,to{border-color:var(--dark-color)}50%{border-color:var(--gray-color)}}.pc-interactive-area input[type=checkbox].loading{animation:colorChange 2s infinite;animation-timing-function:ease-in-out;background-color:var(--checkbox-hover-color);cursor:default}.pc-interactive-area input[type=checkbox].ready{background-color:var(--checkbox-background-color);border-color:var(--dark-color);cursor:pointer}.pc-interactive-area input[type=checkbox].invalid{background-color:var(--checkbox-hover-color);border-color:var(--gray-color);cursor:not-allowed}.pc-interactive-area input[type=checkbox]:not(.invalid):hover{background-color:var(--checkbox-hover-color);border-color:var(--accent-color)}.pc-interactive-area input[type=checkbox].invalid:hover+label{cursor:not-allowed}.pc-interactive-area input[type=checkbox]:not(.invalid):hover+label{cursor:pointer}@keyframes dots-1{0%{opacity:0}25%{opacity:1}}@keyframes dots-2{0%{opacity:0}50%{opacity:1}}@keyframes dots-3{0%{opacity:0}75%{opacity:1}}@-webkit-keyframes dots-1{0%{opacity:0}25%{opacity:1}}@-webkit-keyframes dots-2{0%{opacity:0}50%{opacity:1}}@-webkit-keyframes dots-3{0%{opacity:0}75%{opacity:1}}.pc-interactive-area .dots span{animation:dots-1 2s infinite steps(1);-webkit-animation:dots-1 2s infinite steps(1)}.pc-interactive-area .dots span:first-child+span{animation-name:dots-2;-webkit-animation-name:dots-2}.pc-interactive-area .dots span:first-child+span+span{animation-name:dots-3;-webkit-animation-name:dots-3}#pc-progress{display:flex;justify-content:center;margin:0 0 0 var(--extra-spacing);flex-shrink:0}#pc-progress+label{padding:0 0 0 calc(var(--extra-spacing) + var(--label-spacing))}.pc-spacer{flex-basis:0;flex-shrink:1;flex-grow:1;width:4em;min-width:0}.pc-info{display:flex;flex:0 0 auto;flex-direction:column;align-items:center;justify-content:center;margin-right:calc(.125em + var(--extra-spacing));color:var(--dark-color)}.pc-info svg{width:auto;height:3.125em;max-width:100%;max-height:100%}a.pc-link{margin-top:5px;text-decoration:none;color:currentcolor;text-align:center;font-size:.55em;text-transform:uppercase;font-weight:700;line-height:1.1em}a.pc-link:hover{text-decoration:underline}@keyframes checkmark{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0px}}svg.verified{margin:0 0 0 var(--extra-spacing);flex-shrink:0;width:2.25em;height:2.25em}svg.verified+label{padding:0 0 0 calc(var(--extra-spacing) + var(--label-spacing))}svg.verified polyline{animation:checkmark .35s ease-in-out .1s backwards;stroke:#f2f2f2}svg.verified circle{fill:var(--accent-color)}#pc-debug{font-size:.75em;color:var(--gray-color);position:absolute;top:100%;left:calc(2em + 1em + 2*.125em + 2*var(--extra-spacing) + var(--label-spacing));cursor:default}#pc-debug.warn{color:var(--warn-color)}\n", "'use strict;'\n\nexport const CLICK_TO_VERIFY = 'click_to_verify';\nexport const VERIFYING = 'verifying';\nexport const SUCCESS = 'success';\nexport const UNAVAILABLE = 'unavailable';\nexport const INCOMPLETE = 'incomplete';\nexport const ERROR = 'error';\nexport const TESTING = 'testing';\n\nexport const STRINGS = {\n 'en': {\n [CLICK_TO_VERIFY]: 'Click to verify',\n [VERIFYING]: 'Verifying',\n [SUCCESS]: 'Verified',\n [UNAVAILABLE]: 'Not available',\n [INCOMPLETE]: 'incomplete',\n [ERROR]: 'error',\n [TESTING]: 'testing',\n },\n 'de': {\n [CLICK_TO_VERIFY]: 'Zum Best\u00E4tigen klicken',\n [VERIFYING]: 'Wird \u00FCberpr\u00FCft',\n [SUCCESS]: 'Verifiziert',\n [UNAVAILABLE]: 'Nicht verf\u00FCgbar',\n [INCOMPLETE]: 'unvollst\u00E4ndig',\n [ERROR]: 'fehler',\n [TESTING]: 'testmodus',\n },\n 'es': {\n [CLICK_TO_VERIFY]: 'Haz clic para verificar',\n [VERIFYING]: 'Verificando',\n [SUCCESS]: 'Verificado',\n [UNAVAILABLE]: 'No disponible',\n [INCOMPLETE]: 'incompleto',\n [ERROR]: 'error',\n [TESTING]: 'prueba',\n },\n 'fr': {\n [CLICK_TO_VERIFY]: 'Cliquez pour v\u00E9rifier',\n [VERIFYING]: 'V\u00E9rification en cours',\n [SUCCESS]: 'V\u00E9rifi\u00E9',\n [UNAVAILABLE]: 'Non disponible',\n [INCOMPLETE]: 'incomplet',\n [ERROR]: 'erreur',\n [TESTING]: 'test',\n },\n 'it': {\n [CLICK_TO_VERIFY]: 'Clicca per verificare',\n [VERIFYING]: 'Verifica in corso',\n [SUCCESS]: 'Verificato',\n [UNAVAILABLE]: 'Non disponibile',\n [INCOMPLETE]: 'incompleto',\n [ERROR]: 'errore',\n [TESTING]: 'test',\n },\n 'nl': {\n [CLICK_TO_VERIFY]: 'Klik om te verifi\u00EBren',\n [VERIFYING]: 'Bezig met verifi\u00EBren',\n [SUCCESS]: 'Geverifieerd',\n [UNAVAILABLE]: 'Niet beschikbaar',\n [INCOMPLETE]: 'onvolledig',\n [ERROR]: 'fout',\n [TESTING]: 'testen',\n },\n 'sv': {\n [CLICK_TO_VERIFY]: 'Klicka f\u00F6r att verifiera',\n [VERIFYING]: 'Verifierar',\n [SUCCESS]: 'Verifierad',\n [UNAVAILABLE]: 'Inte tillg\u00E4nglig',\n [INCOMPLETE]: 'ofullst\u00E4ndig',\n [ERROR]: 'fel',\n [TESTING]: 'test',\n },\n 'no': {\n [CLICK_TO_VERIFY]: 'Klikk for \u00E5 bekrefte',\n [VERIFYING]: 'Bekrefter',\n [SUCCESS]: 'Bekreftet',\n [UNAVAILABLE]: 'Ikke tilgjengelig',\n [INCOMPLETE]: 'ufullstendig',\n [ERROR]: 'feil',\n [TESTING]: 'test',\n },\n 'pl': {\n [CLICK_TO_VERIFY]: 'Kliknij, aby zweryfikowa\u0107',\n [VERIFYING]: 'Weryfikowanie',\n [SUCCESS]: 'Zweryfikowano',\n [UNAVAILABLE]: 'Niedost\u0119pne',\n [INCOMPLETE]: 'niekompletne',\n [ERROR]: 'b\u0142\u0105d',\n [TESTING]: 'test',\n },\n 'fi': {\n [CLICK_TO_VERIFY]: 'Napsauta vahvistaaksesi',\n [VERIFYING]: 'Vahvistetaan',\n [SUCCESS]: 'Vahvistettu',\n [UNAVAILABLE]: 'Ei saatavilla',\n [INCOMPLETE]: 'ep\u00E4t\u00E4ydellinen',\n [ERROR]: 'virhe',\n [TESTING]: 'testi',\n },\n 'et': {\n [CLICK_TO_VERIFY]: 'Kl\u00F5psa kinnitamiseks',\n [VERIFYING]: 'Kinnitamine',\n [SUCCESS]: 'Kinnitatud',\n [UNAVAILABLE]: 'Pole saadaval',\n [INCOMPLETE]: 'puudulik',\n [ERROR]: 'viga',\n [TESTING]: 'test',\n }\n};\n", "'use strict';\n\nimport { ProgressRing } from './progress.js';\nimport { SafeHTMLElement } from \"./utils.js\";\nimport styles from \"./styles.css\" with { type: 'css' };\nimport * as i18n from './strings.js';\nimport * as errors from './errors.js';\n\nif (typeof window !== \"undefined\") {\n window.customElements.define('progress-ring', ProgressRing);\n}\n\nexport const STATE_EMPTY = 'empty';\nexport const STATE_ERROR = 'error';\nexport const STATE_LOADING = 'loading';\nexport const STATE_READY = 'ready';\nexport const STATE_IN_PROGRESS = 'inprogress';\nexport const STATE_VERIFIED = 'verified';\nexport const STATE_INVALID = 'invalid';\n\nexport const DISPLAY_POPUP = 'popup';\nconst DISPLAY_HIDDEN = 'hidden';\nexport const DISPLAY_WIDGET = 'widget';\n\nconst CHECKBOX_ID = 'pc-checkbox';\nconst PROGRESS_ID = 'pc-progress';\nconst DEBUG_ID = 'pc-debug';\nconst DEBUG_ERROR_CLASS = 'warn';\n\nconst privateCaptchaSVG = `<svg viewBox=\"0 0 39.4 41.99\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\" class=\"pc-logo\" preserveAspectRatio=\"xMidYMid meet\">\n<path d=\"M0 0v30.62l4.29 2.48V4.85h30.83v23.29l-15.41 8.9-6.83-3.94v-4.95l6.83 3.94 11.12-6.42V9.91H8.58v25.66l11.12 6.42 19.7-11.37V0Zm12.87 14.86h13.66v8.32l-6.83 3.94-6.83-3.94z\" fill=\"currentColor\"/>\n</svg>`;\n\nconst verifiedSVG = `<svg class=\"verified\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 154 154\">\n<g fill=\"none\"><circle cx=\"77\" cy=\"77\" r=\"76\"></circle>\n<polyline class=\"st0\" stroke-width=\"12\" points=\"43.5,77.8 63.7,97.9 112.2,49.4\" style=\"stroke-dasharray:100px, 100px; stroke-dashoffset: 200px;\"/></g>\n</svg>\n`;\n\n/**\n * @param {string} cls\n * @returns {string} checkbox input definition string\n */\nfunction checkbox(cls) {\n return `<input type=\"checkbox\" id=\"${CHECKBOX_ID}\" class=\"${cls}\" required>`\n}\n\n/**\n * @param {string} text\n * @param {string} forElement\n * @returns {string} checkbox label definition string\n */\nfunction label(text, forElement) {\n return `<label for=\"${forElement}\">${text}</label>`;\n}\n\n/**\n * @param {number} code\n * @param {Object<string, string>} strings\n * @returns {string} error message\n */\nfunction errorDescription(code, strings) {\n switch (code) {\n case errors.ERROR_NO_ERROR:\n return '';\n case errors.ERROR_NOT_CONFIGURED:\n return strings[i18n.INCOMPLETE];\n case errors.ERROR_ZERO_PUZZLE:\n return strings[i18n.TESTING];\n default:\n return strings[i18n.ERROR];\n };\n}\n\nexport class CaptchaElement extends SafeHTMLElement {\n constructor() {\n super();\n this._state = '';\n // create shadow dom root\n this._root = this.attachShadow({ mode: 'open' });\n this._debug = this.getAttribute('debug');\n this._error = null;\n this._displayMode = this.getAttribute('display-mode');\n this._lang = this.getAttribute('lang');\n if (!(this._lang in i18n.STRINGS)) {\n console.warn(`[privatecaptcha][progress] Localization not found. lang=${this._lang}`);\n this._lang = 'en';\n }\n\n // add CSS\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(styles);\n this._root.adoptedStyleSheets.push(sheet);\n this._overridesSheet = null;\n // add CSS overrides\n const extraStyles = this.getAttribute('extra-styles');\n if (extraStyles) {\n this._overridesSheet = new CSSStyleSheet();\n const cssText = `@layer custom { :host { ${extraStyles} } }`;\n this._overridesSheet.replaceSync(cssText);\n this._root.adoptedStyleSheets.push(this._overridesSheet);\n }\n // init\n const canShow = (this._displayMode == DISPLAY_WIDGET);\n this.setState(STATE_EMPTY, canShow);\n }\n\n /**\n * @param {string} state\n * @param {boolean} canShow\n */\n setState(state, canShow) {\n if (state == this._state) {\n console.debug('[privatecaptcha][progress] already in this state: ' + state);\n return;\n }\n\n if (this._debug) { console.debug(`[privatecaptcha][progress] change state. old=${this._state} new=${state}`); }\n\n let activeArea = '';\n let bindCheckEvent = false;\n let showPopupIfNeeded = false;\n const strings = i18n.STRINGS[this._lang];\n\n switch (state) {\n case STATE_EMPTY:\n bindCheckEvent = true;\n activeArea = checkbox('') + label(strings[i18n.CLICK_TO_VERIFY], CHECKBOX_ID);\n break;\n case STATE_LOADING:\n bindCheckEvent = true;\n activeArea = checkbox('loading') + label(strings[i18n.CLICK_TO_VERIFY], CHECKBOX_ID);\n break;\n case STATE_READY:\n bindCheckEvent = true;\n activeArea = checkbox('ready') + label(strings[i18n.CLICK_TO_VERIFY], CHECKBOX_ID);\n showPopupIfNeeded = canShow;\n break;\n case STATE_IN_PROGRESS:\n const text = strings[i18n.VERIFYING];\n activeArea = `<progress-ring id=\"${PROGRESS_ID}\" stroke=\"12\" progress=\"0\"></progress-ring><label for=\"${PROGRESS_ID}\">${text}<span class=\"dots\"><span>.</span><span>.</span><span>.</span></span></label>`;\n showPopupIfNeeded = canShow;\n break;\n case STATE_VERIFIED:\n activeArea = verifiedSVG + label(strings[i18n.SUCCESS], PROGRESS_ID);\n showPopupIfNeeded = canShow;\n break;\n case STATE_INVALID:\n activeArea = checkbox('invalid') + label(strings[i18n.UNAVAILABLE], CHECKBOX_ID);\n break;\n default:\n console.error(`[privatecaptcha][progress] unknown state: ${state}`);\n break;\n }\n\n if (this._debug || this._error) {\n const debugText = this._error ? errorDescription(this._error, strings) : `[${state}]`;\n activeArea += `<span id=\"${DEBUG_ID}\" class=\"${this._error ? DEBUG_ERROR_CLASS : ''}\">${debugText}</span>`;\n }\n\n let hostClass = '';\n switch (this._displayMode) {\n case DISPLAY_HIDDEN:\n hostClass = 'hidden';\n break;\n case DISPLAY_POPUP:\n hostClass = showPopupIfNeeded ? 'floating' : 'hidden';\n break;\n case DISPLAY_WIDGET:\n break;\n };\n\n this.classList.remove('hidden', 'floating');\n if (hostClass) { this.classList.add(hostClass); }\n\n this._state = state;\n this._root.innerHTML = `<div class=\"pc-captcha-widget\">\n <div class=\"pc-interactive-area\">\n ${activeArea}\n </div>\n <div class=\"pc-spacer\"></div>\n <div class=\"pc-info\">\n ${privateCaptchaSVG}\n <a href=\"https://privatecaptcha.com\" class=\"pc-link\" rel=\"noopener nofollow\" target=\"_blank\">Private<br />Captcha</a>\n </div>\n </div>`;\n\n if (bindCheckEvent) {\n const checkbox = this._root.getElementById(CHECKBOX_ID);\n if (checkbox) {\n checkbox.addEventListener('change', this.onCheckboxClicked.bind(this));\n } else {\n console.warn('[privatecaptcha][progress] checkbox not found in the Shadow DOM');\n }\n }\n }\n\n /**\n * @param {Event} event\n */\n onCheckboxClicked(event) {\n event.preventDefault();\n if (this._debug) {\n console.debug(\"[privatecaptcha][progress] checkbox was clicked\");\n }\n if (event.target.checked) {\n const checkEvent = new CustomEvent(\"privatecaptcha:checked\", {\n bubbles: true,\n composed: true\n });\n\n this.dispatchEvent(checkEvent);\n } else {\n console.warn('[privatecaptcha][progress] checkbox was unchecked');\n }\n }\n\n /**\n * @param {number} percent\n */\n setProgress(percent) {\n if (STATE_IN_PROGRESS == this._state) {\n const progressBar = this._root.getElementById(PROGRESS_ID);\n if (progressBar) {\n progressBar.setProgress(percent);\n } else {\n console.warn('[privatecaptcha][progress] progress element not found');\n }\n } else {\n if (this._debug) {\n console.debug(\"[privatecaptcha][progress] skipping updating progress when not in progress\");\n }\n }\n }\n\n /**\n * @param {number} value\n */\n setError(value) {\n this._error = value;\n }\n\n /**\n * @param {string} text\n * @param {boolean} error\n */\n setDebugText(text, error) {\n const debugElement = this._root.getElementById(DEBUG_ID);\n if (debugElement) {\n let debugText = '';\n if (this._error) {\n const strings = i18n.STRINGS[this._lang];\n debugText = errorDescription(this._error, strings);\n } else {\n debugText = `[${text}]`;\n }\n debugElement.innerHTML = debugText;\n if (error || this._error) {\n debugElement.classList.add(DEBUG_ERROR_CLASS);\n } else {\n debugElement.classList.remove(DEBUG_ERROR_CLASS);\n }\n }\n }\n\n static get observedAttributes() {\n return ['state', 'progress', 'extra-styles'];\n }\n\n updateStyles(newStyles) {\n const baseSheets = this._root.adoptedStyleSheets.filter(\n sheet => sheet !== this._overridesSheet\n );\n\n if (newStyles) {\n const cssText = `@layer custom { :host { ${newStyles} } }`;\n if (!this._overridesSheet) {\n this._overridesSheet = new CSSStyleSheet();\n }\n this._overridesSheet.replaceSync(cssText);\n this._root.adoptedStyleSheets = [...baseSheets, this._overridesSheet];\n } else {\n this._overridesSheet = null;\n this._root.adoptedStyleSheets = baseSheets;\n }\n }\n\n /**\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if ('progress' === name) {\n this.setProgress(newValue);\n } else if ('extra-styles' === name) {\n if (oldValue !== newValue) {\n this.updateStyles(newValue);\n }\n }\n }\n}\n", "'use strict';\n\nimport { getPuzzle, Puzzle } from './puzzle.js'\nimport { WorkersPool } from './workerspool.js'\nimport { CaptchaElement, STATE_EMPTY, STATE_ERROR, STATE_READY, STATE_IN_PROGRESS, STATE_VERIFIED, STATE_LOADING, STATE_INVALID, DISPLAY_POPUP, DISPLAY_WIDGET } from './html.js';\nimport * as errors from './errors.js';\n\nif (typeof window !== \"undefined\") {\n window.customElements.define('private-captcha', CaptchaElement);\n}\n\nconst PUZZLE_ENDPOINT_URL = 'https://api.privatecaptcha.com/puzzle';\nconst PUZZLE_EU_ENDPOINT_URL = 'https://api.eu.privatecaptcha.com/puzzle';\nexport const RECAPTCHA_COMPAT = 'recaptcha';\n\n\n/**\n * @param {HTMLElement} element\n * @returns {HTMLFormElement | null}\n */\nfunction findParentFormElement(element) {\n while (element && element.tagName !== 'FORM') {\n element = element.parentElement;\n }\n return element;\n}\n\nexport class CaptchaWidget {\n /**\n * @param {HTMLElement} element\n * @param {Object} options\n */\n constructor(element, options = {}) {\n this._element = element;\n this._puzzle = null;\n this._expiryTimeout = null;\n this._state = STATE_EMPTY;\n this._lastProgress = null;\n this._solution = null;\n this._userStarted = false; // aka 'user started while we were initializing'\n this._options = {};\n this._errorCode = errors.ERROR_NO_ERROR;\n\n this.setOptions(options);\n\n this._workersPool = new WorkersPool({\n workersReady: this.onWorkersReady.bind(this),\n workerError: this.onWorkerError.bind(this),\n workStarted: this.onWorkStarted.bind(this),\n workCompleted: this.onWorkCompleted.bind(this),\n progress: this.onWorkProgress.bind(this),\n }, this._options.debug);\n\n const form = findParentFormElement(this._element);\n if (form) {\n // NOTE: this does not work on Safari by (Apple) design if we click a button\n // \"once\" means listener will be removed after being called, \"passive\" - cannot use preventDefault()\n form.addEventListener('focusin', this.onFocusIn.bind(this), { once: true, passive: true });\n this._element.innerHTML = `<private-captcha display-mode=\"${this._options.displayMode}\" lang=\"${this._options.lang}\" theme=\"${this._options.theme}\" extra-styles=\"${this._options.styles}\"${this._options.debug ? ' debug=\"true\"' : ''}></private-captcha>`;\n this._element.addEventListener('privatecaptcha:checked', this.onChecked.bind(this));\n\n if (this._options.storeVariable) {\n this._element[this._options.storeVariable] = this;\n }\n\n if (DISPLAY_POPUP === this._options.displayMode) {\n const anchor = form.querySelector(\".private-captcha-anchor\");\n if (anchor) {\n anchor.style.position = \"relative\";\n } else {\n console.warn('[privatecaptcha] cannot find anchor for popup')\n }\n }\n\n this.checkConfigured();\n } else {\n console.warn('[privatecaptcha] cannot find form element');\n }\n }\n\n /**\n * @param {Object} options\n */\n setOptions(options) {\n const euOnly = this._element.dataset[\"eu\"] || null;\n const defaultEndpoint = euOnly ? PUZZLE_EU_ENDPOINT_URL : PUZZLE_ENDPOINT_URL;\n\n let defaultField = \"private-captcha-solution\";\n if (options.hasOwnProperty('compat') && options.compat === RECAPTCHA_COMPAT) {\n defaultField = \"g-recaptcha-response\";\n }\n\n let sitekey = \"\";\n if (options.hasOwnProperty('sitekey')) {\n sitekey = options.sitekey;\n }\n\n this._options = Object.assign({\n startMode: this._element.dataset[\"startMode\"] || \"auto\",\n debug: this._element.dataset[\"debug\"],\n fieldName: this._element.dataset[\"solutionField\"] || defaultField,\n puzzleEndpoint: this._element.dataset[\"puzzleEndpoint\"] || defaultEndpoint,\n sitekey: sitekey || this._element.dataset[\"sitekey\"] || \"\",\n displayMode: this._element.dataset[\"displayMode\"] || \"widget\",\n lang: this._element.dataset[\"lang\"] || \"en\",\n theme: this._element.dataset[\"theme\"] || \"light\",\n styles: this._element.dataset[\"styles\"] || \"\",\n storeVariable: this._element.dataset[\"storeVariable\"] || null,\n }, options);\n }\n\n /**\n * Fetches puzzle from the server and sets up workers.\n * @param {boolean} autoStart\n */\n async init(autoStart) {\n this.trace(`init() was called. state=${this._state}`);\n\n this._puzzle = null;\n this._solution = null;\n this._errorCode = errors.ERROR_NO_ERROR;\n\n const sitekey = this.checkConfigured();\n if (!sitekey) { return; }\n\n if ((this._state != STATE_EMPTY) && (this._state != STATE_ERROR)) {\n console.warn(`[privatecaptcha] captcha has already been initialized. state=${this._state}`)\n return;\n }\n\n if (this._workersPool) {\n this._workersPool.stop();\n }\n\n const startWorkers = (this._options.startMode == \"auto\") || autoStart;\n\n try {\n this.setState(STATE_LOADING);\n this.trace(`fetching puzzle. sitekey=${sitekey}`);\n const puzzleData = await getPuzzle(this._options.puzzleEndpoint, sitekey);\n this._puzzle = new Puzzle(puzzleData);\n if (this._puzzle && this._puzzle.isZero()) { this._errorCode = errors.ERROR_ZERO_PUZZLE; }\n const expirationMillis = this._puzzle.expirationMillis();\n this.trace(`parsed puzzle buffer. isZero=${this._puzzle.isZero()} ttl=${expirationMillis / 1000}`);\n if (this._expiryTimeout) { clearTimeout(this._expiryTimeout); }\n if (expirationMillis) { this._expiryTimeout = setTimeout(() => this.expire(), expirationMillis); }\n this._workersPool.init(this._puzzle, startWorkers);\n this.signalInit();\n } catch (e) {\n console.error('[privatecaptcha]', e);\n if (this._expiryTimeout) { clearTimeout(this._expiryTimeout); }\n this._errorCode = errors.ERROR_FETCH_PUZZLE;\n this.setState(STATE_ERROR);\n this.setProgressState(this._userStarted ? STATE_VERIFIED : STATE_EMPTY);\n this.saveSolutions();\n if (this._userStarted) {\n this.signalErrored();\n }\n }\n }\n\n /**\n * Ensures that we have a sitekey available (defined or passed through options)\n * @returns {string | null}\n */\n checkConfigured() {\n const sitekey = this._options.sitekey || this._element.dataset[\"sitekey\"];\n if (!sitekey) {\n console.error(\"[privatecaptcha] sitekey not set on captcha element\");\n this._errorCode = errors.ERROR_NOT_CONFIGURED;\n this.setState(STATE_INVALID);\n this.setProgressState(STATE_INVALID);\n return null;\n }\n\n return sitekey;\n }\n\n start() {\n if (this._state !== STATE_READY) {\n console.warn(`[privatecaptcha] solving has already been started. state=${this._state}`);\n return;\n }\n\n this.trace('starting solving captcha');\n\n try {\n this.setState(STATE_IN_PROGRESS);\n this._workersPool.solve(this._puzzle);\n } catch (e) {\n console.error('[privatecaptcha]', e);\n }\n }\n\n dispatchEvent(eventName, detail = {}) {\n const event = new CustomEvent(`privatecaptcha:${eventName}`, {\n bubbles: false,\n detail: { widget: this, element: this._element, ...detail }\n });\n this._element.dispatchEvent(event);\n }\n\n signalInit() {\n this.dispatchEvent(\"init\");\n\n const callback = this._element.dataset['initCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in init callback:', e);\n }\n }\n }\n\n signalStarted() {\n this.dispatchEvent(\"start\");\n\n const callback = this._element.dataset['startedCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in started callback:', e);\n }\n }\n }\n\n signalFinished() {\n this.dispatchEvent(\"finish\");\n\n const callback = this._element.dataset['finishedCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in finished callback:', e);\n }\n }\n }\n\n signalErrored() {\n this.dispatchEvent(\"error\");\n\n const callback = this._element.dataset['erroredCallback'];\n if (callback) {\n try {\n window[callback](this);\n } catch (e) {\n console.error('[privatecaptcha] Error in errored callback:', e);\n }\n }\n }\n\n ensureNoSolutionField() {\n const solutionField = this._element.querySelector(`input[name=\"${this._options.fieldName}\"]`);\n if (solutionField) {\n try {\n this._element.removeChild(solutionField);\n } catch (e) {\n console.warn('[privatecaptcha]', e);\n }\n }\n }\n\n /**\n * Resets widget to a state when `start()` or `execute()` can be called again\n * @param {Object} options\n */\n reset(options = {}) {\n this.trace('reset captcha')\n\n if (this._expiryTimeout) { clearTimeout(this._expiryTimeout); }\n if (this._workersPool) { this._workersPool.stop(); }\n\n this._errorCode = errors.ERROR_NO_ERROR;\n this.setState(STATE_EMPTY);\n this.setProgressState(STATE_EMPTY);\n this.ensureNoSolutionField();\n this._userStarted = false;\n this.setOptions(options);\n this.init(false /*start*/);\n }\n\n updateStyles() {\n const newStyles = this._element.dataset[\"styles\"] || \"\";\n if (newStyles !== this._options.styles) {\n this._options.styles = newStyles;\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) {\n pcElement.setAttribute('extra-styles', newStyles);\n }\n }\n }\n\n expire() {\n this.trace('expire captcha');\n\n if (this._workersPool) { this._workersPool.stop(); }\n\n this.setState(STATE_EMPTY);\n this.setProgressState(STATE_EMPTY);\n this.ensureNoSolutionField();\n this.init(this._userStarted);\n }\n\n /**\n * @returns {string} value of the puzzle solution that needs to be sent for verification\n */\n solution() {\n return this._solution;\n }\n\n /**\n * @param {FocusEvent} event\n */\n onFocusIn(event) {\n this.trace('onFocusIn event handler');\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement && (event.target == pcElement)) {\n this.trace('skipping focusin event on captcha element')\n return;\n }\n this.init(false /*start*/);\n // this handles both STATE_LOADING and STATE_EMPTY (reset)\n this.setProgressState(this._state);\n }\n\n /**\n * A programmatic way of starting solving the puzzle (as opposed to user input way)\n * @returns {Promise<never>} promise intentionally does not resolve so that the form can be submitted via the callbacks\n */\n execute() {\n this.onChecked();\n return new Promise(() => { });\n }\n\n onChecked(event) {\n if (event) {\n event.stopPropagation();\n }\n\n this.trace(`onChecked event handler. state=${this._state}`);\n this._userStarted = true;\n\n // always show spinner when user clicked\n let progressState = STATE_IN_PROGRESS;\n let finished = false;\n\n switch (this._state) {\n case STATE_READY:\n // NOTE: in case of short-circuit (zero/test puzzle), start() can call all callbacks before exit\n this.start();\n break;\n case STATE_EMPTY:\n case STATE_ERROR:\n this.init(true /*start*/);\n break;\n case STATE_LOADING:\n // this will be handled in onWorkersReady()\n break;\n case STATE_IN_PROGRESS:\n setTimeout(() => this.setProgress(this._lastProgress), 500);\n break;\n case STATE_VERIFIED:\n // happens when we finished verification fully in the background, still should animate \"the end\"\n progressState = STATE_VERIFIED;\n finished = true;\n break;\n default:\n console.warn('[privatecaptcha] onChecked: unexpected state. state=' + this._state);\n return;\n };\n\n this.setProgressState(progressState);\n if (finished) { this.signalFinished(); }\n }\n\n /**\n * @param {boolean} autoStart\n */\n onWorkersReady(autoStart) {\n this.trace(`workers are ready. autostart=${autoStart}`);\n\n this.setState(STATE_READY);\n if (!this._userStarted) {\n this.setProgressState(STATE_READY);\n }\n\n if (autoStart || this._userStarted) {\n this.start();\n }\n }\n\n /**\n * @param {Error} error\n */\n onWorkerError(error) {\n console.error('[privatecaptcha] error in worker:', error)\n this._errorCode = errors.ERROR_SOLVE_PUZZLE;\n }\n\n onWorkStarted() {\n this.signalStarted();\n }\n\n onWorkCompleted() {\n this.trace('[privatecaptcha] work completed');\n\n if (this._state !== STATE_IN_PROGRESS) {\n console.warn(`[privatecaptcha] solving has not been started. state=${this._state}`);\n return;\n }\n\n this.setState(STATE_VERIFIED);\n if (this._userStarted) {\n this.setProgressState(STATE_VERIFIED);\n }\n\n this.saveSolutions();\n\n if (this._userStarted) {\n this.signalFinished();\n }\n }\n\n /**\n * @param {number} percent\n */\n onWorkProgress(percent) {\n if (this._state !== STATE_IN_PROGRESS) {\n console.warn(`[privatecaptcha] skipping progress update. state=${this._state}`);\n return;\n }\n\n this.trace(`progress changed. percent=${percent}`);\n this.setProgress(percent);\n }\n\n saveSolutions() {\n const solutions = this._workersPool.serializeSolutions(this._errorCode);\n const payload = `${solutions}.${this._puzzle.rawData}`;\n\n this.ensureNoSolutionField();\n this._element.insertAdjacentHTML('beforeend', `<input name=\"${this._options.fieldName}\" type=\"hidden\" value=\"${payload}\">`);\n\n this._solution = payload;\n\n this.trace(`saved solutions. field=${this._options.fieldName} payload=${payload}`);\n }\n\n /**\n * Updates the \"UI\" state of the widget.\n * @param {string} state\n */\n setProgressState(state) {\n // NOTE: hidden display mode is taken care of inside setState() even when (_userStarted == true)\n const canShow = this._userStarted || (DISPLAY_WIDGET === this._options.displayMode);\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) {\n pcElement.setError(this._errorCode);\n pcElement.setState(state, canShow);\n }\n else {\n console.error('[privatecaptcha] component not found when changing state');\n }\n }\n\n /**\n * Updates the \"internal\" (actual) state.\n * @param {string} state\n */\n setState(state) {\n this.trace(`change state. old=${this._state} new=${state}`);\n this._state = state;\n\n if (this._options.debug) {\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) {\n pcElement.setDebugText(state, (STATE_ERROR == state));\n }\n }\n }\n\n /**\n * @param {number} progress\n */\n setProgress(progress) {\n this._lastProgress = progress;\n if ((STATE_IN_PROGRESS == this._state) || (STATE_VERIFIED == this._state)) {\n const pcElement = this._element.querySelector('private-captcha');\n if (pcElement) { pcElement.setProgress(progress); }\n else { console.error('[privatecaptcha] component not found when updating progress'); }\n }\n }\n\n /**\n * @param {string} str\n */\n trace(str) {\n if (this._options.debug) {\n console.debug('[privatecaptcha]', str)\n }\n }\n}\n"],
5
+ "mappings": "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AAU,EAAG,aACd,CAACC,CAAK,EAAG,QACT,CAACC,CAAO,EAAG,SACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,4BACnB,CAACC,CAAS,EAAG,uBACb,CAACC,CAAO,EAAG,cACX,CAACC,CAAW,EAAG,qBACf,CAACC,CAAU,EAAG,mBACd,CAACC,CAAK,EAAG,SACT,CAACC,CAAO,EAAG,WACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,0BACnB,CAACC,CAAS,EAAG,cACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,gBACf,CAACC,CAAU,EAAG,aACd,CAACC,CAAK,EAAG,QACT,CAACC,CAAO,EAAG,QACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,2BACnB,CAACC,CAAS,EAAG,2BACb,CAACC,CAAO,EAAG,gBACX,CAACC,CAAW,EAAG,iBACf,CAACC,CAAU,EAAG,YACd,CAACC,CAAK,EAAG,SACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,wBACnB,CAACC,CAAS,EAAG,oBACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,kBACf,CAACC,CAAU,EAAG,aACd,CAACC,CAAK,EAAG,SACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,2BACnB,CAACC,CAAS,EAAG,0BACb,CAACC,CAAO,EAAG,eACX,CAACC,CAAW,EAAG,mBACf,CAACC,CAAU,EAAG,aACd,CAACC,CAAK,EAAG,OACT,CAACC,CAAO,EAAG,QACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,8BACnB,CAACC,CAAS,EAAG,aACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,sBACf,CAACC,CAAU,EAAG,kBACd,CAACC,CAAK,EAAG,MACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,0BACnB,CAACC,CAAS,EAAG,YACb,CAACC,CAAO,EAAG,YACX,CAACC,CAAW,EAAG,oBACf,CAACC,CAAU,EAAG,eACd,CAACC,CAAK,EAAG,OACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,iCACnB,CAACC,CAAS,EAAG,gBACb,CAACC,CAAO,EAAG,gBACX,CAACC,CAAW,EAAG,mBACf,CAACC,CAAU,EAAG,eACd,CAACC,CAAK,EAAG,iBACT,CAACC,CAAO,EAAG,MACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,0BACnB,CAACC,CAAS,EAAG,eACb,CAACC,CAAO,EAAG,cACX,CAACC,CAAW,EAAG,gBACf,CAACC,CAAU,EAAG,uBACd,CAACC,CAAK,EAAG,QACT,CAACC,CAAO,EAAG,OACf,EACA,GAAM,CACF,CAACN,CAAe,EAAG,0BACnB,CAACC,CAAS,EAAG,cACb,CAACC,CAAO,EAAG,aACX,CAACC,CAAW,EAAG,gBACf,CAACC,CAAU,EAAG,WACd,CAACC,CAAK,EAAG,OACT,CAACC,CAAO,EAAG,MACf,CACJ,ECtGI,OAAO,OAAW,KAClB,OAAO,eAAe,OAAO,gBAAiBE,CAAY,EAGvD,IAAMC,EAAc,QACdC,EAAc,QACdC,EAAgB,UAChBC,EAAc,QACdC,EAAoB,aACpBC,EAAiB,WACjBC,EAAgB,UAEhBC,EAAgB,QACvBC,GAAiB,SACVC,EAAiB,SAExBC,EAAc,cACdC,EAAc,cACdC,GAAW,WACXC,EAAoB,OAEpBC,GAAoB;AAAA;AAAA,QAIpBC,GAAc;AAAA;AAAA;AAAA;AAAA,EAUpB,SAASC,EAASC,EAAK,CACnB,MAAO,8BAA8BP,CAAW,YAAYO,CAAG,aACnE,CAOA,SAASC,EAAMC,EAAMC,EAAY,CAC7B,MAAO,eAAeA,CAAU,KAAKD,CAAI,UAC7C,CAOA,SAASE,GAAiBC,EAAMC,EAAS,CACrC,OAAQD,EAAM,CACV,IAAY,GACR,MAAO,GACX,IAAY,GACR,OAAOC,EAAaC,CAAU,EAClC,IAAY,GACR,OAAOD,EAAaE,CAAO,EAC/B,QACI,OAAOF,EAAaG,CAAK,CACjC,CACJ,CAEO,IAAMC,EAAN,cAA6BC,CAAgB,CAChD,aAAc,CACV,MAAM,EACN,KAAK,OAAS,GAEd,KAAK,MAAQ,KAAK,aAAa,CAAE,KAAM,MAAO,CAAC,EAC/C,KAAK,OAAS,KAAK,aAAa,OAAO,EACvC,KAAK,OAAS,KACd,KAAK,aAAe,KAAK,aAAa,cAAc,EACpD,KAAK,MAAQ,KAAK,aAAa,MAAM,EAC/B,KAAK,SAAcC,IACrB,QAAQ,KAAK,2DAA2D,KAAK,KAAK,EAAE,EACpF,KAAK,MAAQ,MAIjB,IAAMC,EAAQ,IAAI,cAClBA,EAAM,YAAYC,CAAM,EACxB,KAAK,MAAM,mBAAmB,KAAKD,CAAK,EACxC,KAAK,gBAAkB,KAEvB,IAAME,EAAc,KAAK,aAAa,cAAc,EACpD,GAAIA,EAAa,CACb,KAAK,gBAAkB,IAAI,cAC3B,IAAMC,EAAU,2BAA2BD,CAAW,OACtD,KAAK,gBAAgB,YAAYC,CAAO,EACxC,KAAK,MAAM,mBAAmB,KAAK,KAAK,eAAe,CAC3D,CAEA,IAAMC,EAAW,KAAK,cAAgBzB,EACtC,KAAK,SAAST,EAAakC,CAAO,CACtC,CAMA,SAASC,EAAOD,EAAS,CACrB,GAAIC,GAAS,KAAK,OAAQ,CACtB,QAAQ,MAAM,qDAAuDA,CAAK,EAC1E,MACJ,CAEI,KAAK,QAAU,QAAQ,MAAM,gDAAgD,KAAK,MAAM,QAAQA,CAAK,EAAE,EAE3G,IAAIC,EAAa,GACbC,EAAiB,GACjBC,EAAoB,GAClBf,EAAeM,EAAQ,KAAK,KAAK,EAEvC,OAAQM,EAAO,CACX,KAAKnC,EACDqC,EAAiB,GACjBD,EAAapB,EAAS,EAAE,EAAIE,EAAMK,EAAagB,CAAe,EAAG7B,CAAW,EAC5E,MACJ,KAAKR,EACDmC,EAAiB,GACjBD,EAAapB,EAAS,SAAS,EAAIE,EAAMK,EAAagB,CAAe,EAAG7B,CAAW,EACnF,MACJ,KAAKP,EACDkC,EAAiB,GACjBD,EAAapB,EAAS,OAAO,EAAIE,EAAMK,EAAagB,CAAe,EAAG7B,CAAW,EACjF4B,EAAoBJ,EACpB,MACJ,KAAK9B,EACD,IAAMe,EAAOI,EAAaiB,CAAS,EACnCJ,EAAa,sBAAsBzB,CAAW,0DAA0DA,CAAW,KAAKQ,CAAI,+EAC5HmB,EAAoBJ,EACpB,MACJ,KAAK7B,EACD+B,EAAarB,GAAcG,EAAMK,EAAakB,CAAO,EAAG9B,CAAW,EACnE2B,EAAoBJ,EACpB,MACJ,KAAK5B,EACD8B,EAAapB,EAAS,SAAS,EAAIE,EAAMK,EAAamB,CAAW,EAAGhC,CAAW,EAC/E,MACJ,QACI,QAAQ,MAAM,6CAA6CyB,CAAK,EAAE,EAClE,KACR,CAEA,GAAI,KAAK,QAAU,KAAK,OAAQ,CAC5B,IAAMQ,EAAY,KAAK,OAAStB,GAAiB,KAAK,OAAQE,CAAO,EAAI,IAAIY,CAAK,IAClFC,GAAc,aAAaxB,EAAQ,YAAY,KAAK,OAASC,EAAoB,EAAE,KAAK8B,CAAS,SACrG,CAEA,IAAIC,EAAY,GAChB,OAAQ,KAAK,aAAc,CACvB,KAAKpC,GACDoC,EAAY,SACZ,MACJ,KAAKrC,EACDqC,EAAYN,EAAoB,WAAa,SAC7C,MACJ,KAAK7B,EACD,KACR,CAiBA,GAfA,KAAK,UAAU,OAAO,SAAU,UAAU,EACtCmC,GAAa,KAAK,UAAU,IAAIA,CAAS,EAE7C,KAAK,OAAST,EACd,KAAK,MAAM,UAAY;AAAA;AAAA,kBAEbC,CAAU;AAAA;AAAA;AAAA;AAAA,kBAIVtB,EAAiB;AAAA;AAAA;AAAA,gBAKvBuB,EAAgB,CAChB,IAAMrB,EAAW,KAAK,MAAM,eAAeN,CAAW,EAClDM,EACAA,EAAS,iBAAiB,SAAU,KAAK,kBAAkB,KAAK,IAAI,CAAC,EAErE,QAAQ,KAAK,iEAAiE,CAEtF,CACJ,CAKA,kBAAkB6B,EAAO,CAKrB,GAJAA,EAAM,eAAe,EACjB,KAAK,QACL,QAAQ,MAAM,iDAAiD,EAE/DA,EAAM,OAAO,QAAS,CACtB,IAAMC,EAAa,IAAI,YAAY,yBAA0B,CACzD,QAAS,GACT,SAAU,EACd,CAAC,EAED,KAAK,cAAcA,CAAU,CACjC,MACI,QAAQ,KAAK,mDAAmD,CAExE,CAKA,YAAYC,EAAS,CACjB,GAAI3C,GAAqB,KAAK,OAAQ,CAClC,IAAM4C,EAAc,KAAK,MAAM,eAAerC,CAAW,EACrDqC,EACAA,EAAY,YAAYD,CAAO,EAE/B,QAAQ,KAAK,uDAAuD,CAE5E,MACQ,KAAK,QACL,QAAQ,MAAM,4EAA4E,CAGtG,CAKA,SAASE,EAAO,CACZ,KAAK,OAASA,CAClB,CAMA,aAAa9B,EAAM+B,EAAO,CACtB,IAAMC,EAAe,KAAK,MAAM,eAAevC,EAAQ,EACvD,GAAIuC,EAAc,CACd,IAAIR,EAAY,GAChB,GAAI,KAAK,OAAQ,CACb,IAAMpB,EAAeM,EAAQ,KAAK,KAAK,EACvCc,EAAYtB,GAAiB,KAAK,OAAQE,CAAO,CACrD,MACIoB,EAAY,IAAIxB,CAAI,IAExBgC,EAAa,UAAYR,EACrBO,GAAS,KAAK,OACdC,EAAa,UAAU,IAAItC,CAAiB,EAE5CsC,EAAa,UAAU,OAAOtC,CAAiB,CAEvD,CACJ,CAEA,WAAW,oBAAqB,CAC5B,MAAO,CAAC,QAAS,WAAY,cAAc,CAC/C,CAEA,aAAauC,EAAW,CACpB,IAAMC,EAAa,KAAK,MAAM,mBAAmB,OAC7CvB,GAASA,IAAU,KAAK,eAC5B,EAEA,GAAIsB,EAAW,CACX,IAAMnB,EAAU,2BAA2BmB,CAAS,OAC/C,KAAK,kBACN,KAAK,gBAAkB,IAAI,eAE/B,KAAK,gBAAgB,YAAYnB,CAAO,EACxC,KAAK,MAAM,mBAAqB,CAAC,GAAGoB,EAAY,KAAK,eAAe,CACxE,MACI,KAAK,gBAAkB,KACvB,KAAK,MAAM,mBAAqBA,CAExC,CAOA,yBAAyBC,EAAMC,EAAUC,EAAU,CAC5BF,IAAf,WACA,KAAK,YAAYE,CAAQ,EACCF,IAAnB,gBACHC,IAAaC,GACb,KAAK,aAAaA,CAAQ,CAGtC,CACJ,ECtSI,OAAO,OAAW,KAClB,OAAO,eAAe,OAAO,kBAAmBC,CAAc,EAGlE,IAAMC,GAAsB,wCACtBC,GAAyB,2CAClBC,GAAmB,YAOhC,SAASC,GAAsBC,EAAS,CACpC,KAAOA,GAAWA,EAAQ,UAAY,QAClCA,EAAUA,EAAQ,cAEtB,OAAOA,CACX,CAEO,IAAMC,GAAN,KAAoB,CAKvB,YAAYD,EAASE,EAAU,CAAC,EAAG,CAC/B,KAAK,SAAWF,EAChB,KAAK,QAAU,KACf,KAAK,eAAiB,KACtB,KAAK,OAASG,EACd,KAAK,cAAgB,KACrB,KAAK,UAAY,KACjB,KAAK,aAAe,GACpB,KAAK,SAAW,CAAC,EACjB,KAAK,WAAoB,EAEzB,KAAK,WAAWD,CAAO,EAEvB,KAAK,aAAe,IAAIE,EAAY,CAChC,aAAc,KAAK,eAAe,KAAK,IAAI,EAC3C,YAAa,KAAK,cAAc,KAAK,IAAI,EACzC,YAAa,KAAK,cAAc,KAAK,IAAI,EACzC,cAAe,KAAK,gBAAgB,KAAK,IAAI,EAC7C,SAAU,KAAK,eAAe,KAAK,IAAI,CAC3C,EAAG,KAAK,SAAS,KAAK,EAEtB,IAAMC,EAAON,GAAsB,KAAK,QAAQ,EAChD,GAAIM,EAAM,CAWN,GARAA,EAAK,iBAAiB,UAAW,KAAK,UAAU,KAAK,IAAI,EAAG,CAAE,KAAM,GAAM,QAAS,EAAK,CAAC,EACzF,KAAK,SAAS,UAAY,kCAAkC,KAAK,SAAS,WAAW,WAAW,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,KAAK,mBAAmB,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,MAAQ,gBAAkB,EAAE,sBACtO,KAAK,SAAS,iBAAiB,yBAA0B,KAAK,UAAU,KAAK,IAAI,CAAC,EAE9E,KAAK,SAAS,gBACd,KAAK,SAAS,KAAK,SAAS,aAAa,EAAI,MAG7CC,IAAkB,KAAK,SAAS,YAAa,CAC7C,IAAMC,EAASF,EAAK,cAAc,yBAAyB,EACvDE,EACAA,EAAO,MAAM,SAAW,WAExB,QAAQ,KAAK,+CAA+C,CAEpE,CAEA,KAAK,gBAAgB,CACzB,MACI,QAAQ,KAAK,2CAA2C,CAEhE,CAKA,WAAWL,EAAS,CAEhB,IAAMM,EADS,KAAK,SAAS,QAAQ,IAAS,KACbX,GAAyBD,GAEtDa,EAAe,2BACfP,EAAQ,eAAe,QAAQ,GAAKA,EAAQ,SAAWJ,KACvDW,EAAe,wBAGnB,IAAIC,EAAU,GACVR,EAAQ,eAAe,SAAS,IAChCQ,EAAUR,EAAQ,SAGtB,KAAK,SAAW,OAAO,OAAO,CAC1B,UAAW,KAAK,SAAS,QAAQ,WAAgB,OACjD,MAAO,KAAK,SAAS,QAAQ,MAC7B,UAAW,KAAK,SAAS,QAAQ,eAAoBO,EACrD,eAAgB,KAAK,SAAS,QAAQ,gBAAqBD,EAC3D,QAASE,GAAW,KAAK,SAAS,QAAQ,SAAc,GACxD,YAAa,KAAK,SAAS,QAAQ,aAAkB,SACrD,KAAM,KAAK,SAAS,QAAQ,MAAW,KACvC,MAAO,KAAK,SAAS,QAAQ,OAAY,QACzC,OAAQ,KAAK,SAAS,QAAQ,QAAa,GAC3C,cAAe,KAAK,SAAS,QAAQ,eAAoB,IAC7D,EAAGR,CAAO,CACd,CAMA,MAAM,KAAKS,EAAW,CAClB,KAAK,MAAM,4BAA4B,KAAK,MAAM,EAAE,EAEpD,KAAK,QAAU,KACf,KAAK,UAAY,KACjB,KAAK,WAAoB,EAEzB,IAAMD,EAAU,KAAK,gBAAgB,EACrC,GAAI,CAACA,EAAW,OAEhB,GAAK,KAAK,QAAUP,GAAiB,KAAK,QAAUS,EAAc,CAC9D,QAAQ,KAAK,gEAAgE,KAAK,MAAM,EAAE,EAC1F,MACJ,CAEI,KAAK,cACL,KAAK,aAAa,KAAK,EAG3B,IAAMC,EAAgB,KAAK,SAAS,WAAa,QAAWF,EAE5D,GAAI,CACA,KAAK,SAASG,CAAa,EAC3B,KAAK,MAAM,4BAA4BJ,CAAO,EAAE,EAChD,IAAMK,EAAa,MAAMC,EAAU,KAAK,SAAS,eAAgBN,CAAO,EACxE,KAAK,QAAU,IAAIO,EAAOF,CAAU,EAChC,KAAK,SAAW,KAAK,QAAQ,OAAO,IAAK,KAAK,WAAoB,GACtE,IAAMG,EAAmB,KAAK,QAAQ,iBAAiB,EACvD,KAAK,MAAM,gCAAgC,KAAK,QAAQ,OAAO,CAAC,QAAQA,EAAmB,GAAI,EAAE,EAC7F,KAAK,gBAAkB,aAAa,KAAK,cAAc,EACvDA,IAAoB,KAAK,eAAiB,WAAW,IAAM,KAAK,OAAO,EAAGA,CAAgB,GAC9F,KAAK,aAAa,KAAK,KAAK,QAASL,CAAY,EACjD,KAAK,WAAW,CACpB,OAASM,EAAG,CACR,QAAQ,MAAM,mBAAoBA,CAAC,EAC/B,KAAK,gBAAkB,aAAa,KAAK,cAAc,EAC3D,KAAK,WAAoB,EACzB,KAAK,SAASP,CAAW,EACzB,KAAK,iBAAiB,KAAK,aAAeQ,EAAiBjB,CAAW,EACtE,KAAK,cAAc,EACf,KAAK,cACL,KAAK,cAAc,CAE3B,CACJ,CAMA,iBAAkB,CACd,IAAMO,EAAU,KAAK,SAAS,SAAW,KAAK,SAAS,QAAQ,QAC/D,OAAKA,IACD,QAAQ,MAAM,qDAAqD,EACnE,KAAK,WAAoB,EACzB,KAAK,SAASW,CAAa,EAC3B,KAAK,iBAAiBA,CAAa,EAC5B,KAIf,CAEA,OAAQ,CACJ,GAAI,KAAK,SAAWC,EAAa,CAC7B,QAAQ,KAAK,4DAA4D,KAAK,MAAM,EAAE,EACtF,MACJ,CAEA,KAAK,MAAM,0BAA0B,EAErC,GAAI,CACA,KAAK,SAASC,CAAiB,EAC/B,KAAK,aAAa,MAAM,KAAK,OAAO,CACxC,OAAS,EAAG,CACR,QAAQ,MAAM,mBAAoB,CAAC,CACvC,CACJ,CAEA,cAAcC,EAAWC,EAAS,CAAC,EAAG,CAClC,IAAMC,EAAQ,IAAI,YAAY,kBAAkBF,CAAS,GAAI,CACzD,QAAS,GACT,OAAQ,CAAE,OAAQ,KAAM,QAAS,KAAK,SAAU,GAAGC,CAAO,CAC9D,CAAC,EACD,KAAK,SAAS,cAAcC,CAAK,CACrC,CAEA,YAAa,CACT,KAAK,cAAc,MAAM,EAEzB,IAAMC,EAAW,KAAK,SAAS,QAAQ,aACvC,GAAIA,EACA,GAAI,CACA,OAAOA,CAAQ,EAAE,IAAI,CACzB,OAASR,EAAG,CACR,QAAQ,MAAM,2CAA4CA,CAAC,CAC/D,CAER,CAEA,eAAgB,CACZ,KAAK,cAAc,OAAO,EAE1B,IAAMQ,EAAW,KAAK,SAAS,QAAQ,gBACvC,GAAIA,EACA,GAAI,CACA,OAAOA,CAAQ,EAAE,IAAI,CACzB,OAASR,EAAG,CACR,QAAQ,MAAM,8CAA+CA,CAAC,CAClE,CAER,CAEA,gBAAiB,CACb,KAAK,cAAc,QAAQ,EAE3B,IAAMQ,EAAW,KAAK,SAAS,QAAQ,iBACvC,GAAIA,EACA,GAAI,CACA,OAAOA,CAAQ,EAAE,IAAI,CACzB,OAASR,EAAG,CACR,QAAQ,MAAM,+CAAgDA,CAAC,CACnE,CAER,CAEA,eAAgB,CACZ,KAAK,cAAc,OAAO,EAE1B,IAAMQ,EAAW,KAAK,SAAS,QAAQ,gBACvC,GAAIA,EACA,GAAI,CACA,OAAOA,CAAQ,EAAE,IAAI,CACzB,OAASR,EAAG,CACR,QAAQ,MAAM,8CAA+CA,CAAC,CAClE,CAER,CAEA,uBAAwB,CACpB,IAAMS,EAAgB,KAAK,SAAS,cAAc,eAAe,KAAK,SAAS,SAAS,IAAI,EAC5F,GAAIA,EACA,GAAI,CACA,KAAK,SAAS,YAAYA,CAAa,CAC3C,OAAST,EAAG,CACR,QAAQ,KAAK,mBAAoBA,CAAC,CACtC,CAER,CAMA,MAAMjB,EAAU,CAAC,EAAG,CAChB,KAAK,MAAM,eAAe,EAEtB,KAAK,gBAAkB,aAAa,KAAK,cAAc,EACvD,KAAK,cAAgB,KAAK,aAAa,KAAK,EAEhD,KAAK,WAAoB,EACzB,KAAK,SAASC,CAAW,EACzB,KAAK,iBAAiBA,CAAW,EACjC,KAAK,sBAAsB,EAC3B,KAAK,aAAe,GACpB,KAAK,WAAWD,CAAO,EACvB,KAAK,KAAK,EAAe,CAC7B,CAEA,cAAe,CACX,IAAM2B,EAAY,KAAK,SAAS,QAAQ,QAAa,GACrD,GAAIA,IAAc,KAAK,SAAS,OAAQ,CACpC,KAAK,SAAS,OAASA,EACvB,IAAMC,EAAY,KAAK,SAAS,cAAc,iBAAiB,EAC3DA,GACAA,EAAU,aAAa,eAAgBD,CAAS,CAExD,CACJ,CAEA,QAAS,CACL,KAAK,MAAM,gBAAgB,EAEvB,KAAK,cAAgB,KAAK,aAAa,KAAK,EAEhD,KAAK,SAAS1B,CAAW,EACzB,KAAK,iBAAiBA,CAAW,EACjC,KAAK,sBAAsB,EAC3B,KAAK,KAAK,KAAK,YAAY,CAC/B,CAKA,UAAW,CACP,OAAO,KAAK,SAChB,CAKA,UAAUuB,EAAO,CACb,KAAK,MAAM,yBAAyB,EACpC,IAAMI,EAAY,KAAK,SAAS,cAAc,iBAAiB,EAC/D,GAAIA,GAAcJ,EAAM,QAAUI,EAAY,CAC1C,KAAK,MAAM,2CAA2C,EACtD,MACJ,CACA,KAAK,KAAK,EAAe,EAEzB,KAAK,iBAAiB,KAAK,MAAM,CACrC,CAMA,SAAU,CACN,YAAK,UAAU,EACR,IAAI,QAAQ,IAAM,CAAE,CAAC,CAChC,CAEA,UAAUJ,EAAO,CACTA,GACAA,EAAM,gBAAgB,EAG1B,KAAK,MAAM,kCAAkC,KAAK,MAAM,EAAE,EAC1D,KAAK,aAAe,GAGpB,IAAIK,EAAgBR,EAChBS,EAAW,GAEf,OAAQ,KAAK,OAAQ,CACjB,KAAKV,EAED,KAAK,MAAM,EACX,MACJ,KAAKnB,EACL,KAAKS,EACD,KAAK,KAAK,EAAc,EACxB,MACJ,KAAKE,EAED,MACJ,KAAKS,EACD,WAAW,IAAM,KAAK,YAAY,KAAK,aAAa,EAAG,GAAG,EAC1D,MACJ,KAAKH,EAEDW,EAAgBX,EAChBY,EAAW,GACX,MACJ,QACI,QAAQ,KAAK,uDAAyD,KAAK,MAAM,EACjF,MACR,CAEA,KAAK,iBAAiBD,CAAa,EAC/BC,GAAY,KAAK,eAAe,CACxC,CAKA,eAAerB,EAAW,CACtB,KAAK,MAAM,gCAAgCA,CAAS,EAAE,EAEtD,KAAK,SAASW,CAAW,EACpB,KAAK,cACN,KAAK,iBAAiBA,CAAW,GAGjCX,GAAa,KAAK,eAClB,KAAK,MAAM,CAEnB,CAKA,cAAcsB,EAAO,CACjB,QAAQ,MAAM,oCAAqCA,CAAK,EACxD,KAAK,WAAoB,CAC7B,CAEA,eAAgB,CACZ,KAAK,cAAc,CACvB,CAEA,iBAAkB,CAGd,GAFA,KAAK,MAAM,iCAAiC,EAExC,KAAK,SAAWV,EAAmB,CACnC,QAAQ,KAAK,wDAAwD,KAAK,MAAM,EAAE,EAClF,MACJ,CAEA,KAAK,SAASH,CAAc,EACxB,KAAK,cACL,KAAK,iBAAiBA,CAAc,EAGxC,KAAK,cAAc,EAEf,KAAK,cACL,KAAK,eAAe,CAE5B,CAKA,eAAec,EAAS,CACpB,GAAI,KAAK,SAAWX,EAAmB,CACnC,QAAQ,KAAK,oDAAoD,KAAK,MAAM,EAAE,EAC9E,MACJ,CAEA,KAAK,MAAM,6BAA6BW,CAAO,EAAE,EACjD,KAAK,YAAYA,CAAO,CAC5B,CAEA,eAAgB,CAEZ,IAAMC,EAAU,GADE,KAAK,aAAa,mBAAmB,KAAK,UAAU,CAC1C,IAAI,KAAK,QAAQ,OAAO,GAEpD,KAAK,sBAAsB,EAC3B,KAAK,SAAS,mBAAmB,YAAa,gBAAgB,KAAK,SAAS,SAAS,0BAA0BA,CAAO,IAAI,EAE1H,KAAK,UAAYA,EAEjB,KAAK,MAAM,0BAA0B,KAAK,SAAS,SAAS,YAAYA,CAAO,EAAE,CACrF,CAMA,iBAAiBC,EAAO,CAEpB,IAAMC,EAAU,KAAK,cAAiBC,IAAmB,KAAK,SAAS,YACjER,EAAY,KAAK,SAAS,cAAc,iBAAiB,EAC3DA,GACAA,EAAU,SAAS,KAAK,UAAU,EAClCA,EAAU,SAASM,EAAOC,CAAO,GAGjC,QAAQ,MAAM,0DAA0D,CAEhF,CAMA,SAASD,EAAO,CAIZ,GAHA,KAAK,MAAM,qBAAqB,KAAK,MAAM,QAAQA,CAAK,EAAE,EAC1D,KAAK,OAASA,EAEV,KAAK,SAAS,MAAO,CACrB,IAAMN,EAAY,KAAK,SAAS,cAAc,iBAAiB,EAC3DA,GACAA,EAAU,aAAaM,EAAQxB,GAAewB,CAAM,CAE5D,CACJ,CAKA,YAAYG,EAAU,CAElB,GADA,KAAK,cAAgBA,EAChBhB,GAAqB,KAAK,QAAYH,GAAkB,KAAK,OAAS,CACvE,IAAMU,EAAY,KAAK,SAAS,cAAc,iBAAiB,EAC3DA,EAAaA,EAAU,YAAYS,CAAQ,EACxC,QAAQ,MAAM,6DAA6D,CACtF,CACJ,CAKA,MAAMC,EAAK,CACH,KAAK,SAAS,OACd,QAAQ,MAAM,mBAAoBA,CAAG,CAE7C,CACJ",
6
+ "names": ["chars", "lookup", "i", "encode", "arraybuffer", "bytes", "len", "base64", "decode", "bufferLength", "p", "encoded1", "encoded2", "encoded3", "encoded4", "PUZZLE_BUFFER_LENGTH", "ACCEPTABLE_CLIENT_ERRORS", "getPuzzle", "endpoint", "sitekey", "response", "fetchWithBackoff", "json", "err", "wait", "delay", "resolve", "url", "options", "maxAttempts", "initialDelay", "maxDelay", "attempt", "readUInt32LE", "binaryData", "offset", "readUInt64LE", "Puzzle", "rawData", "parts", "buffer", "data", "decode", "userDataSize", "puzzleBuffer", "enlargedBuffer", "inlineWorker", "scriptText", "blob", "url", "worker", "Worker", "inlineWorker", "METADATA_VERSION", "WorkersPool", "callbacks", "debug", "puzzle", "autoStart", "workersCount", "readyWorkers", "workers", "pool", "puzzleID", "puzzleData", "i", "worker", "Worker", "e", "event", "id", "solution", "wasm", "skipSolving", "stubSolution", "count", "errorCode", "solutionsLength", "total", "arr", "metadataArray", "metadataSize", "resultArray", "offset", "encode", "binaryData", "currentIndex", "wasmFlag", "elapsedMillis", "SafeHTMLElement", "ProgressRing", "SafeHTMLElement", "stroke", "size", "radius", "normalizedRadius", "percent", "progress", "offset", "circle", "pie", "name", "oldValue", "newValue", "styles_default", "CLICK_TO_VERIFY", "VERIFYING", "SUCCESS", "UNAVAILABLE", "INCOMPLETE", "ERROR", "TESTING", "STRINGS", "ProgressRing", "STATE_EMPTY", "STATE_ERROR", "STATE_LOADING", "STATE_READY", "STATE_IN_PROGRESS", "STATE_VERIFIED", "STATE_INVALID", "DISPLAY_POPUP", "DISPLAY_HIDDEN", "DISPLAY_WIDGET", "CHECKBOX_ID", "PROGRESS_ID", "DEBUG_ID", "DEBUG_ERROR_CLASS", "privateCaptchaSVG", "verifiedSVG", "checkbox", "cls", "label", "text", "forElement", "errorDescription", "code", "strings", "INCOMPLETE", "TESTING", "ERROR", "CaptchaElement", "SafeHTMLElement", "STRINGS", "sheet", "styles_default", "extraStyles", "cssText", "canShow", "state", "activeArea", "bindCheckEvent", "showPopupIfNeeded", "CLICK_TO_VERIFY", "VERIFYING", "SUCCESS", "UNAVAILABLE", "debugText", "hostClass", "event", "checkEvent", "percent", "progressBar", "value", "error", "debugElement", "newStyles", "baseSheets", "name", "oldValue", "newValue", "CaptchaElement", "PUZZLE_ENDPOINT_URL", "PUZZLE_EU_ENDPOINT_URL", "RECAPTCHA_COMPAT", "findParentFormElement", "element", "CaptchaWidget", "options", "STATE_EMPTY", "WorkersPool", "form", "DISPLAY_POPUP", "anchor", "defaultEndpoint", "defaultField", "sitekey", "autoStart", "STATE_ERROR", "startWorkers", "STATE_LOADING", "puzzleData", "getPuzzle", "Puzzle", "expirationMillis", "e", "STATE_VERIFIED", "STATE_INVALID", "STATE_READY", "STATE_IN_PROGRESS", "eventName", "detail", "event", "callback", "solutionField", "newStyles", "pcElement", "progressState", "finished", "error", "percent", "payload", "state", "canShow", "DISPLAY_WIDGET", "progress", "str"]
7
7
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/PrivateCaptcha/PrivateCaptcha.git"
6
6
  },
7
- "version": "0.0.14",
7
+ "version": "0.0.15",
8
8
  "main": "index.js",
9
9
  "type": "module",
10
10
  "private": false,