From a4b6c2cf19b011a934943b9ecf5502fbb3a0fcef Mon Sep 17 00:00:00 2001 From: Daniel Regeci <536331+ovx@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:33:38 +0200 Subject: [PATCH] Fix spam filter options (#47) * Add missing options for the spam filter: 'blockedCountries', 'classifier', 'disableRules', 'text' => that resolves the issue https://github.com/altcha-org/altcha/issues/45 * fix types --------- Co-authored-by: Olivier Blanc --- README.md | 12 +- dist/altcha.js | 574 ++++++++++++++++++----------------- dist/altcha.umd.cjs | 2 +- dist_external/altcha.js | 538 ++++++++++++++++---------------- dist_external/altcha.umd.cjs | 2 +- package-lock.json | 4 +- src/Altcha.svelte | 22 +- src/types.ts | 12 +- 8 files changed, 600 insertions(+), 566 deletions(-) diff --git a/README.md b/README.md index 0d58132..061abd7 100644 --- a/README.md +++ b/README.md @@ -194,22 +194,30 @@ The Spam Filter can be enabled with default configuration by setting the `spamfi ```ts interface SpamFilter { + blockedCountries?: string[]; + classifier?: string; + disableRules?: string[]; email?: string | false; - expectedLanguages?: string[]; expectedCountries?: string[]; + expectedLanguages?: string[]; fields?: string[] | false; ipAddress?: string | false; + text?: string | string[]; timeZone?: string | false; } ``` SpamFilter configuration options: +- __blockedCountries__ - An array of country codes (ISO 3166 alpha-2) that you want to block. +- __classifier__ - Enforce a specific classifier. +- __disableRules__ - An array of rules to disable. - __email__ - The name of the input field for the user's email. Disable email checking with `false`. -- __expectedLanguages__ - An array of expected languages as 2-letter codes (ISO 639 alpha-2). - __expectedCountries__ - An array of expected countries as 2-letter codes (ISO 3166-1 alpha-2). +- __expectedLanguages__ - An array of expected languages as 2-letter codes (ISO 639 alpha-2). - __fields__ - An array of input names to send to the spam filter. - __ipAddress__ - The user's IP is detected automatically but can be overridden or disabled with `false`. +- __text__ - The text to classify. An array of strings can also be submitted. - __timeZone__ - The user's timezone is detected automatically but can be overridden or disabled with `false`. To include the email field into `fields` (for easier server-side verification), configure the list of input names using the `spamfilter.fields: string[]` option. diff --git a/dist/altcha.js b/dist/altcha.js index 8ee7e57..0657815 100644 --- a/dist/altcha.js +++ b/dist/altcha.js @@ -1,11 +1,11 @@ var yt = Object.defineProperty; var pt = (r, e, t) => e in r ? yt(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t; var G = (r, e, t) => pt(r, typeof e != "symbol" ? e + "" : e, t); -const Qe = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IGY9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIGQoZSl7cmV0dXJuWy4uLm5ldyBVaW50OEFycmF5KGUpXS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1hc3luYyBmdW5jdGlvbiBwKGUsdCxvKXtyZXR1cm4gZChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChvLnRvVXBwZXJDYXNlKCksZi5lbmNvZGUoZSt0KSkpfWZ1bmN0aW9uIGcoZSx0LG89IlNIQS0yNTYiLGw9MWU2LGM9MCl7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLGk9RGF0ZS5ub3coKTtyZXR1cm57cHJvbWlzZTooYXN5bmMoKT0+e2ZvcihsZXQgbj1jO248PWw7bis9MSl7aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm4gbnVsbDtpZihhd2FpdCBwKHQsbixvKT09PWUpcmV0dXJue251bWJlcjpuLHRvb2s6RGF0ZS5ub3coKS1pfX1yZXR1cm4gbnVsbH0pKCksY29udHJvbGxlcjphfX1sZXQgcjtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0e3R5cGU6dCxwYXlsb2FkOm99PWUuZGF0YTtpZih0PT09ImFib3J0IilyPT1udWxsfHxyLmFib3J0KCkscj12b2lkIDA7ZWxzZSBpZih0PT09IndvcmsiKXtjb25zdHthbGc6bCxjaGFsbGVuZ2U6YyxtYXg6YSxzYWx0Omksc3RhcnQ6dX09b3x8e30sbj1nKGMsaSxsLGEsdSk7cj1uLmNvbnRyb2xsZXIsbi5wcm9taXNlLnRoZW4ocz0+e3NlbGYucG9zdE1lc3NhZ2UocyYmey4uLnMsd29ya2VyOiEwfSl9KX19fSkoKTsK", _t = (r) => Uint8Array.from(atob(r), (e) => e.charCodeAt(0)), Ge = typeof window < "u" && window.Blob && new Blob([_t(Qe)], { type: "text/javascript;charset=utf-8" }); +const et = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IGY9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIGQoZSl7cmV0dXJuWy4uLm5ldyBVaW50OEFycmF5KGUpXS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1hc3luYyBmdW5jdGlvbiBwKGUsdCxvKXtyZXR1cm4gZChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChvLnRvVXBwZXJDYXNlKCksZi5lbmNvZGUoZSt0KSkpfWZ1bmN0aW9uIGcoZSx0LG89IlNIQS0yNTYiLGw9MWU2LGM9MCl7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLGk9RGF0ZS5ub3coKTtyZXR1cm57cHJvbWlzZTooYXN5bmMoKT0+e2ZvcihsZXQgbj1jO248PWw7bis9MSl7aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm4gbnVsbDtpZihhd2FpdCBwKHQsbixvKT09PWUpcmV0dXJue251bWJlcjpuLHRvb2s6RGF0ZS5ub3coKS1pfX1yZXR1cm4gbnVsbH0pKCksY29udHJvbGxlcjphfX1sZXQgcjtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0e3R5cGU6dCxwYXlsb2FkOm99PWUuZGF0YTtpZih0PT09ImFib3J0IilyPT1udWxsfHxyLmFib3J0KCkscj12b2lkIDA7ZWxzZSBpZih0PT09IndvcmsiKXtjb25zdHthbGc6bCxjaGFsbGVuZ2U6YyxtYXg6YSxzYWx0Omksc3RhcnQ6dX09b3x8e30sbj1nKGMsaSxsLGEsdSk7cj1uLmNvbnRyb2xsZXIsbi5wcm9taXNlLnRoZW4ocz0+e3NlbGYucG9zdE1lc3NhZ2UocyYmey4uLnMsd29ya2VyOiEwfSl9KX19fSkoKTsK", _t = (r) => Uint8Array.from(atob(r), (e) => e.charCodeAt(0)), We = typeof window < "u" && window.Blob && new Blob([_t(et)], { type: "text/javascript;charset=utf-8" }); function kt(r) { let e; try { - if (e = Ge && (window.URL || window.webkitURL).createObjectURL(Ge), !e) throw ""; + if (e = We && (window.URL || window.webkitURL).createObjectURL(We), !e) throw ""; const t = new Worker(e, { name: r == null ? void 0 : r.name }); @@ -14,7 +14,7 @@ function kt(r) { }), t; } catch { return new Worker( - "data:text/javascript;base64," + Qe, + "data:text/javascript;base64," + et, { name: r == null ? void 0 : r.name } @@ -25,16 +25,16 @@ function kt(r) { } function ne() { } -function et(r) { +function tt(r) { return r(); } -function We() { +function Xe() { return /* @__PURE__ */ Object.create(null); } -function se(r) { - r.forEach(et); +function ae(r) { + r.forEach(tt); } -function tt(r) { +function rt(r) { return typeof r == "function"; } function xt(r, e) { @@ -72,7 +72,7 @@ function Rt(r, e) { function $(r, e, t) { r.insertBefore(e, t || null); } -function Z(r) { +function T(r) { r.parentNode && r.parentNode.removeChild(r); } function A(r) { @@ -87,7 +87,7 @@ function zt(r) { function Y() { return zt(" "); } -function ve(r, e, t, i) { +function ke(r, e, t, i) { return r.addEventListener(e, t, i), () => r.removeEventListener(e, t, i); } function c(r, e, t) { @@ -96,7 +96,7 @@ function c(r, e, t) { function It(r) { return Array.from(r.childNodes); } -function Xe(r, e, t) { +function Be(r, e, t) { r.classList.toggle(e, !!t); } function At(r, e, { bubbles: t = !1, cancelable: i = !1 } = {}) { @@ -111,22 +111,22 @@ function Nt(r) { } ), e; } -let le; -function oe(r) { - le = r; +let ce; +function se(r) { + ce = r; } -function ke() { - if (!le) throw new Error("Function called outside component initialization"); - return le; +function Le() { + if (!ce) throw new Error("Function called outside component initialization"); + return ce; } function St(r) { - ke().$$.on_mount.push(r); + Le().$$.on_mount.push(r); } function jt(r) { - ke().$$.on_destroy.push(r); + Le().$$.on_destroy.push(r); } function Tt() { - const r = ke(); + const r = Le(); return (e, t, { cancelable: i = !1 } = {}) => { const o = r.$$.callbacks[e]; if (o) { @@ -143,50 +143,50 @@ function Tt() { return !0; }; } -const te = [], he = []; +const te = [], be = []; let re = []; -const Be = [], rt = /* @__PURE__ */ Promise.resolve(); -let pe = !1; -function nt() { - pe || (pe = !0, rt.then(w)); +const He = [], nt = /* @__PURE__ */ Promise.resolve(); +let Ee = !1; +function it() { + Ee || (Ee = !0, nt.then(v)); } function Zt() { - return nt(), rt; + return it(), nt; } -function _e(r) { +function Ce(r) { re.push(r); } -const ye = /* @__PURE__ */ new Set(); +const xe = /* @__PURE__ */ new Set(); let ee = 0; -function w() { +function v() { if (ee !== 0) return; - const r = le; + const r = ce; do { try { for (; ee < te.length; ) { const e = te[ee]; - ee++, oe(e), Mt(e.$$); + ee++, se(e), Mt(e.$$); } } catch (e) { throw te.length = 0, ee = 0, e; } - for (oe(null), te.length = 0, ee = 0; he.length; ) he.pop()(); + for (se(null), te.length = 0, ee = 0; be.length; ) be.pop()(); for (let e = 0; e < re.length; e += 1) { const t = re[e]; - ye.has(t) || (ye.add(t), t()); + xe.has(t) || (xe.add(t), t()); } re.length = 0; } while (te.length); - for (; Be.length; ) - Be.pop()(); - pe = !1, ye.clear(), oe(r); + for (; He.length; ) + He.pop()(); + Ee = !1, xe.clear(), se(r); } function Mt(r) { if (r.fragment !== null) { - r.update(), se(r.before_update); + r.update(), ae(r.before_update); const e = r.dirty; - r.dirty = [-1], r.fragment && r.fragment.p(r.ctx, e), r.after_update.forEach(_e); + r.dirty = [-1], r.fragment && r.fragment.p(r.ctx, e), r.after_update.forEach(Ce); } } function Vt(r) { @@ -199,21 +199,21 @@ function Dt(r, e) { } function Ut(r, e, t) { const { fragment: i, after_update: o } = r.$$; - i && i.m(e, t), _e(() => { - const l = r.$$.on_mount.map(et).filter(tt); - r.$$.on_destroy ? r.$$.on_destroy.push(...l) : se(l), r.$$.on_mount = []; - }), o.forEach(_e); + i && i.m(e, t), Ce(() => { + const l = r.$$.on_mount.map(tt).filter(rt); + r.$$.on_destroy ? r.$$.on_destroy.push(...l) : ae(l), r.$$.on_mount = []; + }), o.forEach(Ce); } function Ft(r, e) { const t = r.$$; - t.fragment !== null && (Vt(t.after_update), se(t.on_destroy), t.fragment && t.fragment.d(e), t.on_destroy = t.fragment = null, t.ctx = []); + t.fragment !== null && (Vt(t.after_update), ae(t.on_destroy), t.fragment && t.fragment.d(e), t.on_destroy = t.fragment = null, t.ctx = []); } function Gt(r, e) { - r.$$.dirty[0] === -1 && (te.push(r), nt(), r.$$.dirty.fill(0)), r.$$.dirty[e / 31 | 0] |= 1 << e % 31; + r.$$.dirty[0] === -1 && (te.push(r), it(), r.$$.dirty.fill(0)), r.$$.dirty[e / 31 | 0] |= 1 << e % 31; } function Wt(r, e, t, i, o, l, s = null, u = [-1]) { - const a = le; - oe(r); + const f = ce; + se(r); const d = r.$$ = { fragment: null, ctx: [], @@ -221,37 +221,37 @@ function Wt(r, e, t, i, o, l, s = null, u = [-1]) { props: l, update: ne, not_equal: o, - bound: We(), + bound: Xe(), // lifecycle on_mount: [], on_destroy: [], on_disconnect: [], before_update: [], after_update: [], - context: new Map(e.context || (a ? a.$$.context : [])), + context: new Map(e.context || (f ? f.$$.context : [])), // everything else - callbacks: We(), + callbacks: Xe(), dirty: u, skip_bound: !1, - root: e.target || a.$$.root + root: e.target || f.$$.root }; s && s(d.root); let U = !1; if (d.ctx = t ? t(r, e.props || {}, (S, D, ...k) => { const F = k.length ? k[0] : D; return d.ctx && o(d.ctx[S], d.ctx[S] = F) && (!d.skip_bound && d.bound[S] && d.bound[S](F), U && Gt(r, S)), D; - }) : [], d.update(), U = !0, se(d.before_update), d.fragment = i ? i(d.ctx) : !1, e.target) { + }) : [], d.update(), U = !0, ae(d.before_update), d.fragment = i ? i(d.ctx) : !1, e.target) { if (e.hydrate) { const S = It(e.target); - d.fragment && d.fragment.l(S), S.forEach(Z); + d.fragment && d.fragment.l(S), S.forEach(T); } else d.fragment && d.fragment.c(); - e.intro && Dt(r.$$.fragment), Ut(r, e.target, e.anchor), w(); + e.intro && Dt(r.$$.fragment), Ut(r, e.target, e.anchor), v(); } - oe(a); + se(f); } -let it; -typeof HTMLElement == "function" && (it = class extends HTMLElement { +let ot; +typeof HTMLElement == "function" && (ot = class extends HTMLElement { constructor(e, t, i) { super(); /** The Svelte component constructor */ @@ -304,7 +304,7 @@ typeof HTMLElement == "function" && (it = class extends HTMLElement { $(d, s, U); }, d: function(d) { - d && Z(s); + d && T(s); } }; }; @@ -316,7 +316,7 @@ typeof HTMLElement == "function" && (it = class extends HTMLElement { l in i && (t[l] = [e(l)]); for (const l of this.attributes) { const s = this.$$g_p(l.name); - s in this.$$d || (this.$$d[s] = de(s, l.value, this.$$p_d, "toProp")); + s in this.$$d || (this.$$d[s] = me(s, l.value, this.$$p_d, "toProp")); } for (const l in this.$$p_d) !(l in this.$$d) && this[l] !== void 0 && (this.$$d[l] = this[l], delete this[l]); @@ -334,7 +334,7 @@ typeof HTMLElement == "function" && (it = class extends HTMLElement { this.$$r = !0; for (const l in this.$$p_d) if (this.$$d[l] = this.$$c.$$.ctx[this.$$c.$$.props[l]], this.$$p_d[l].reflect) { - const s = de( + const s = me( l, this.$$d[l], this.$$p_d, @@ -357,7 +357,7 @@ typeof HTMLElement == "function" && (it = class extends HTMLElement { // and setting attributes through setAttribute etc, this is helpful attributeChangedCallback(e, t, i) { var o; - this.$$r || (e = this.$$g_p(e), this.$$d[e] = de(e, i, this.$$p_d, "toProp"), (o = this.$$c) == null || o.$set({ [e]: this.$$d[e] })); + this.$$r || (e = this.$$g_p(e), this.$$d[e] = me(e, i, this.$$p_d, "toProp"), (o = this.$$c) == null || o.$set({ [e]: this.$$d[e] })); } disconnectedCallback() { this.$$cn = !1, Promise.resolve().then(() => { @@ -370,7 +370,7 @@ typeof HTMLElement == "function" && (it = class extends HTMLElement { ) || e; } }); -function de(r, e, t, i) { +function me(r, e, t, i) { var l; const o = (l = t[r]) == null ? void 0 : l.type; if (e = o === "Boolean" && typeof e != "boolean" ? e != null : e, !i || !t[r]) @@ -401,7 +401,7 @@ function de(r, e, t, i) { } } function Xt(r, e, t, i, o, l) { - let s = class extends it { + let s = class extends ot { constructor() { super(r, t, o), this.$$p_d = e; } @@ -416,16 +416,16 @@ function Xt(r, e, t, i, o, l) { get() { return this.$$c && u in this.$$c ? this.$$c[u] : this.$$d[u]; }, - set(a) { + set(f) { var d; - a = de(u, a, e), this.$$d[u] = a, (d = this.$$c) == null || d.$set({ [u]: a }); + f = me(u, f, e), this.$$d[u] = f, (d = this.$$c) == null || d.$set({ [u]: f }); } }); }), i.forEach((u) => { Object.defineProperty(s.prototype, u, { get() { - var a; - return (a = this.$$c) == null ? void 0 : a[u]; + var f; + return (f = this.$$c) == null ? void 0 : f[u]; } }); }), l && (s = l(s)), r.element = /** @type {any} */ @@ -461,7 +461,7 @@ class Bt { * @returns {() => void} */ $on(e, t) { - if (!tt(t)) + if (!rt(t)) return ne; const i = this.$$.callbacks[e] || (this.$$.callbacks[e] = []); return i.push(t), () => { @@ -486,7 +486,7 @@ function Yt(r) { async function Pt(r, e = "SHA-256", t = 1e5) { const i = Date.now().toString(16); r || (r = Math.round(Math.random() * t)); - const o = await ot(i, r, e); + const o = await lt(i, r, e); return { algorithm: e, challenge: o, @@ -494,7 +494,7 @@ async function Pt(r, e = "SHA-256", t = 1e5) { signature: "" }; } -async function ot(r, e, t) { +async function lt(r, e, t) { return Yt( await crypto.subtle.digest( t.toUpperCase(), @@ -506,12 +506,12 @@ function Kt(r, e, t = "SHA-256", i = 1e6, o = 0) { const l = new AbortController(), s = Date.now(); return { promise: (async () => { - for (let a = o; a <= i; a += 1) { + for (let f = o; f <= i; f += 1) { if (l.signal.aborted) return null; - if (await ot(e, a, t) === r) + if (await lt(e, f, t) === r) return { - number: a, + number: f, took: Date.now() - s }; } @@ -524,7 +524,7 @@ var b = /* @__PURE__ */ ((r) => (r.ERROR = "error", r.VERIFIED = "verified", r.V function Jt(r) { Ct(r, "svelte-ddsc3z", '.altcha.svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, transparent);border:var(--altcha-border-width, 1px) solid var(--altcha-color-border, #a0a0a0);border-radius:var(--altcha-border-radius, 3px);color:var(--altcha-color-text, currentColor);display:flex;flex-direction:column;max-width:var(--altcha-max-width, 260px);position:relative;text-align:left}.altcha.svelte-ddsc3z.svelte-ddsc3z:focus-within{border-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, white);display:none;filter:drop-shadow(3px 3px 6px rgba(0, 0, 0, 0.2));left:-100%;position:fixed;top:-100%;width:var(--altcha-max-width, 260px);z-index:999999}.altcha[data-floating=top].svelte-ddsc3z .altcha-anchor-arrow.svelte-ddsc3z{border-bottom-color:transparent;border-top-color:var(--altcha-color-border, #a0a0a0);bottom:-12px;top:auto}.altcha[data-floating=bottom].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-bottom-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating=top].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-top-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z:not([data-state=unverified]){display:block}.altcha-anchor-arrow.svelte-ddsc3z.svelte-ddsc3z{border:6px solid transparent;border-bottom-color:var(--altcha-color-border, #a0a0a0);content:"";height:0;left:12px;position:absolute;top:-12px;width:0}.altcha-main.svelte-ddsc3z.svelte-ddsc3z{align-items:center;display:flex;gap:0.4rem;padding:0.7rem}.altcha-label.svelte-ddsc3z.svelte-ddsc3z{flex-grow:1}.altcha-label.svelte-ddsc3z label.svelte-ddsc3z{cursor:pointer}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z{color:currentColor;opacity:0.3}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-error.svelte-ddsc3z.svelte-ddsc3z{color:var(--altcha-color-error-text, #f23939);display:flex;font-size:0.85rem;gap:0.3rem;padding:0 0.7rem 0.7rem}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z{align-items:center;background-color:var(--altcha-color-footer-bg, transparent);display:flex;font-size:0.75rem;opacity:0.4;padding:0.2rem 0.7rem;text-align:right}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-footer.svelte-ddsc3z>.svelte-ddsc3z:first-child{flex-grow:1}.altcha-footer.svelte-ddsc3z a{color:currentColor}.altcha-checkbox.svelte-ddsc3z.svelte-ddsc3z{display:flex;align-items:center;height:24px;width:24px}.altcha-checkbox.svelte-ddsc3z input.svelte-ddsc3z{width:18px;height:18px;margin:0}.altcha-hidden.svelte-ddsc3z.svelte-ddsc3z{display:none}.altcha-spinner.svelte-ddsc3z.svelte-ddsc3z{animation:svelte-ddsc3z-altcha-spinner 0.75s infinite linear;transform-origin:center}@keyframes svelte-ddsc3z-altcha-spinner{100%{transform:rotate(360deg)}}'); } -function He(r) { +function Oe(r) { let e, t, i; return { c() { @@ -534,7 +534,7 @@ function He(r) { $(o, e, l), _(e, t), _(e, i); }, d(o) { - o && Z(e); + o && T(e); } }; } @@ -559,7 +559,7 @@ function qt(r) { o[4] + "_checkbox") && c(e, "for", i); }, d(o) { - o && Z(e); + o && T(e); } }; } @@ -581,7 +581,7 @@ function Qt(r) { i[11].verifying + "") && (e.innerHTML = t); }, d(i) { - i && Z(e); + i && T(e); } }; } @@ -617,36 +617,36 @@ function er(r) { l[5]); }, d(l) { - l && (Z(e), Z(i), Z(o)); + l && (T(e), T(i), T(o)); } }; } -function Oe(r) { +function Ye(r) { let e, t, i, o, l, s, u; return { c() { - e = A("div"), t = A("a"), i = B("svg"), o = B("path"), l = B("path"), s = B("path"), c(o, "d", "M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"), c(o, "fill", "currentColor"), c(l, "d", "M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"), c(l, "fill", "currentColor"), c(s, "d", "M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"), c(s, "fill", "currentColor"), c(i, "width", "22"), c(i, "height", "22"), c(i, "viewBox", "0 0 20 20"), c(i, "fill", "none"), c(i, "xmlns", "http://www.w3.org/2000/svg"), c(t, "href", lt), c(t, "target", "_blank"), c(t, "class", "altcha-logo svelte-ddsc3z"), c(t, "aria-label", u = /*_strings*/ + e = A("div"), t = A("a"), i = B("svg"), o = B("path"), l = B("path"), s = B("path"), c(o, "d", "M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"), c(o, "fill", "currentColor"), c(l, "d", "M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"), c(l, "fill", "currentColor"), c(s, "d", "M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"), c(s, "fill", "currentColor"), c(i, "width", "22"), c(i, "height", "22"), c(i, "viewBox", "0 0 20 20"), c(i, "fill", "none"), c(i, "xmlns", "http://www.w3.org/2000/svg"), c(t, "href", st), c(t, "target", "_blank"), c(t, "class", "altcha-logo svelte-ddsc3z"), c(t, "aria-label", u = /*_strings*/ r[11].ariaLinkLabel); }, - m(a, d) { - $(a, e, d), _(e, t), _(t, i), _(i, o), _(i, l), _(i, s); + m(f, d) { + $(f, e, d), _(e, t), _(t, i), _(i, o), _(i, l), _(i, s); }, - p(a, d) { + p(f, d) { d[0] & /*_strings*/ 2048 && u !== (u = /*_strings*/ - a[11].ariaLinkLabel) && c(t, "aria-label", u); + f[11].ariaLinkLabel) && c(t, "aria-label", u); }, - d(a) { - a && Z(e); + d(f) { + f && T(e); } }; } -function Ye(r) { +function Pe(r) { let e, t, i, o; - function l(a, d) { + function l(f, d) { return ( /*state*/ - a[6] === b.EXPIRED ? rr : tr + f[6] === b.EXPIRED ? rr : tr ); } let s = l(r), u = s(r); @@ -654,14 +654,14 @@ function Ye(r) { c() { e = A("div"), t = B("svg"), i = B("path"), o = Y(), u.c(), c(i, "stroke-linecap", "round"), c(i, "stroke-linejoin", "round"), c(i, "d", "M6 18L18 6M6 6l12 12"), c(t, "width", "14"), c(t, "height", "14"), c(t, "xmlns", "http://www.w3.org/2000/svg"), c(t, "fill", "none"), c(t, "viewBox", "0 0 24 24"), c(t, "stroke-width", "1.5"), c(t, "stroke", "currentColor"), c(e, "class", "altcha-error svelte-ddsc3z"); }, - m(a, d) { - $(a, e, d), _(e, t), _(t, i), _(e, o), u.m(e, null); + m(f, d) { + $(f, e, d), _(e, t), _(t, i), _(e, o), u.m(e, null); }, - p(a, d) { - s === (s = l(a)) && u ? u.p(a, d) : (u.d(1), u = s(a), u && (u.c(), u.m(e, null))); + p(f, d) { + s === (s = l(f)) && u ? u.p(f, d) : (u.d(1), u = s(f), u && (u.c(), u.m(e, null))); }, - d(a) { - a && Z(e), u.d(); + d(f) { + f && T(e), u.d(); } }; } @@ -694,7 +694,7 @@ function tr(r) { ); }, d(i) { - i && Z(e); + i && T(e); } }; } @@ -727,11 +727,11 @@ function rr(r) { ); }, d(i) { - i && Z(e); + i && T(e); } }; } -function Pe(r) { +function Ke(r) { let e, t, i = ( /*_strings*/ r[11].footer + "" @@ -749,11 +749,11 @@ function Pe(r) { o[11].footer + "") && (t.innerHTML = i); }, d(o) { - o && Z(e); + o && T(e); } }; } -function Ke(r) { +function Je(r) { let e; return { c() { @@ -764,14 +764,14 @@ function Ke(r) { }, p: ne, d(t) { - t && Z(e), r[36](null); + t && T(e), r[36](null); } }; } function nr(r) { - let e, t, i, o, l, s, u, a, d, U, S, D, k, F, P, N = ( + let e, t, i, o, l, s, u, f, d, U, S, D, k, F, P, N = ( /*state*/ - r[6] === b.VERIFYING && He() + r[6] === b.VERIFYING && Oe() ); function Q(h, y) { return ( @@ -784,24 +784,24 @@ function nr(r) { } let H = Q(r), j = H(r), L = ( /*hidelogo*/ - r[3] !== !0 && Oe(r) + r[3] !== !0 && Ye(r) ), R = ( /*error*/ (r[10] || /*state*/ - r[6] === b.EXPIRED) && Ye(r) - ), v = ( + r[6] === b.EXPIRED) && Pe(r) + ), w = ( /*_strings*/ r[11].footer && /*hidefooter*/ - r[2] !== !0 && Pe(r) + r[2] !== !0 && Ke(r) ), z = ( /*floating*/ - r[1] && Ke(r) + r[1] && Je(r) ); return { c() { - e = A("div"), t = A("div"), N && N.c(), i = Y(), o = A("div"), l = A("input"), a = Y(), d = A("div"), j.c(), U = Y(), L && L.c(), S = Y(), R && R.c(), D = Y(), v && v.c(), k = Y(), z && z.c(), c(l, "type", "checkbox"), c(l, "id", s = /*name*/ + e = A("div"), t = A("div"), N && N.c(), i = Y(), o = A("div"), l = A("input"), f = Y(), d = A("div"), j.c(), U = Y(), L && L.c(), S = Y(), R && R.c(), D = Y(), w && w.c(), k = Y(), z && z.c(), c(l, "type", "checkbox"), c(l, "id", s = /*name*/ r[4] + "_checkbox"), l.required = u = /*auto*/ - r[0] !== "onsubmit", c(l, "class", "svelte-ddsc3z"), c(o, "class", "altcha-checkbox svelte-ddsc3z"), Xe( + r[0] !== "onsubmit", c(l, "class", "svelte-ddsc3z"), c(o, "class", "altcha-checkbox svelte-ddsc3z"), Be( o, "altcha-hidden", /*state*/ @@ -820,20 +820,20 @@ function nr(r) { }, m(h, y) { $(h, e, y), _(e, t), N && N.m(t, null), _(t, i), _(t, o), _(o, l), l.checked = /*checked*/ - r[7], _(t, a), _(t, d), j.m(d, null), _(t, U), L && L.m(t, null), _(e, S), R && R.m(e, null), _(e, D), v && v.m(e, null), _(e, k), z && z.m(e, null), r[37](e), F || (P = [ - ve( + r[7], _(t, f), _(t, d), j.m(d, null), _(t, U), L && L.m(t, null), _(e, S), R && R.m(e, null), _(e, D), w && w.m(e, null), _(e, k), z && z.m(e, null), r[37](e), F || (P = [ + ke( l, "change", /*input_change_handler*/ r[35] ), - ve( + ke( l, "change", /*onCheckedChange*/ r[12] ), - ve( + ke( l, "invalid", /*onInvalid*/ @@ -843,25 +843,25 @@ function nr(r) { }, p(h, y) { /*state*/ - h[6] === b.VERIFYING ? N || (N = He(), N.c(), N.m(t, i)) : N && (N.d(1), N = null), y[0] & /*name*/ + h[6] === b.VERIFYING ? N || (N = Oe(), N.c(), N.m(t, i)) : N && (N.d(1), N = null), y[0] & /*name*/ 16 && s !== (s = /*name*/ h[4] + "_checkbox") && c(l, "id", s), y[0] & /*auto*/ 1 && u !== (u = /*auto*/ h[0] !== "onsubmit") && (l.required = u), y[0] & /*checked*/ 128 && (l.checked = /*checked*/ h[7]), y[0] & /*state*/ - 64 && Xe( + 64 && Be( o, "altcha-hidden", /*state*/ h[6] === b.VERIFYING ), H === (H = Q(h)) && j ? j.p(h, y) : (j.d(1), j = H(h), j && (j.c(), j.m(d, null))), /*hidelogo*/ - h[3] !== !0 ? L ? L.p(h, y) : (L = Oe(h), L.c(), L.m(t, null)) : L && (L.d(1), L = null), /*error*/ + h[3] !== !0 ? L ? L.p(h, y) : (L = Ye(h), L.c(), L.m(t, null)) : L && (L.d(1), L = null), /*error*/ h[10] || /*state*/ - h[6] === b.EXPIRED ? R ? R.p(h, y) : (R = Ye(h), R.c(), R.m(e, D)) : R && (R.d(1), R = null), /*_strings*/ + h[6] === b.EXPIRED ? R ? R.p(h, y) : (R = Pe(h), R.c(), R.m(e, D)) : R && (R.d(1), R = null), /*_strings*/ h[11].footer && /*hidefooter*/ - h[2] !== !0 ? v ? v.p(h, y) : (v = Pe(h), v.c(), v.m(e, k)) : v && (v.d(1), v = null), /*floating*/ - h[1] ? z ? z.p(h, y) : (z = Ke(h), z.c(), z.m(e, null)) : z && (z.d(1), z = null), y[0] & /*state*/ + h[2] !== !0 ? w ? w.p(h, y) : (w = Ke(h), w.c(), w.m(e, k)) : w && (w.d(1), w = null), /*floating*/ + h[1] ? z ? z.p(h, y) : (z = Je(h), z.c(), z.m(e, null)) : z && (z.d(1), z = null), y[0] & /*state*/ 64 && c( e, "data-state", @@ -878,12 +878,12 @@ function nr(r) { i: ne, o: ne, d(h) { - h && Z(e), N && N.d(), j.d(), L && L.d(), R && R.d(), v && v.d(), z && z.d(), r[37](null), F = !1, se(P); + h && T(e), N && N.d(), j.d(), L && L.d(), R && R.d(), w && w.d(), z && z.d(), r[37](null), F = !1, ae(P); } }; } -const Je = "Visit Altcha.org", lt = "https://altcha.org/"; -function qe(r) { +const qe = "Visit Altcha.org", st = "https://altcha.org/"; +function Qe(r) { return JSON.parse(r); } function ir() { @@ -893,279 +893,283 @@ function ir() { } } function or(r, e, t) { - var Ve, $e; - let i, o, l, { auto: s = void 0 } = e, { blockspam: u = void 0 } = e, { challengeurl: a = void 0 } = e, { challengejson: d = void 0 } = e, { debug: U = !1 } = e, { delay: S = 0 } = e, { expire: D = void 0 } = e, { floating: k = void 0 } = e, { floatinganchor: F = void 0 } = e, { floatingoffset: P = void 0 } = e, { hidefooter: N = !1 } = e, { hidelogo: Q = !1 } = e, { name: H = "altcha" } = e, { maxnumber: j = 1e6 } = e, { mockerror: L = !1 } = e, { refetchonexpire: R = !0 } = e, { spamfilter: v = !1 } = e, { strings: z = void 0 } = e, { test: h = !1 } = e, { verifyurl: y = void 0 } = e, { workers: ie = Math.min(16, navigator.hardwareConcurrency || 8) } = e, { workerurl: ge = void 0 } = e; - const me = Tt(), xe = ["SHA-256", "SHA-384", "SHA-512"], Ee = ($e = (Ve = document.documentElement.lang) == null ? void 0 : Ve.split("-")) == null ? void 0 : $e[0]; - let O = !1, E, K = null, ce = null, m = null, be = null, J = null, M = b.UNVERIFIED, W = null; + var Fe, Ge; + let i, o, l, { auto: s = void 0 } = e, { blockspam: u = void 0 } = e, { challengeurl: f = void 0 } = e, { challengejson: d = void 0 } = e, { debug: U = !1 } = e, { delay: S = 0 } = e, { expire: D = void 0 } = e, { floating: k = void 0 } = e, { floatinganchor: F = void 0 } = e, { floatingoffset: P = void 0 } = e, { hidefooter: N = !1 } = e, { hidelogo: Q = !1 } = e, { name: H = "altcha" } = e, { maxnumber: j = 1e6 } = e, { mockerror: L = !1 } = e, { refetchonexpire: R = !0 } = e, { spamfilter: w = !1 } = e, { strings: z = void 0 } = e, { test: h = !1 } = e, { verifyurl: y = void 0 } = e, { workers: ie = Math.min(16, navigator.hardwareConcurrency || 8) } = e, { workerurl: ve = void 0 } = e; + const we = Tt(), Re = ["SHA-256", "SHA-384", "SHA-512"], ze = (Ge = (Fe = document.documentElement.lang) == null ? void 0 : Fe.split("-")) == null ? void 0 : Ge[0]; + let O = !1, x, K = null, fe = null, m = null, ye = null, J = null, Z = b.UNVERIFIED, W = null; jt(() => { - m && (m.removeEventListener("submit", Le), m.removeEventListener("reset", Re), m.removeEventListener("focusin", Ce), m = null), W && (clearTimeout(W), W = null), document.removeEventListener("click", Ne), document.removeEventListener("scroll", Se), window.removeEventListener("resize", Te); + m && (m.removeEventListener("submit", Ae), m.removeEventListener("reset", Ne), m.removeEventListener("focusin", Ie), m = null), W && (clearTimeout(W), W = null), document.removeEventListener("click", Ze), document.removeEventListener("scroll", Me), window.removeEventListener("resize", $e); }), St(() => { - C("mounted", "0.6.1"), C("workers", ie), h && C("using test mode"), D && ae(D), s !== void 0 && C("auto", s), k !== void 0 && Ze(k), m = E.closest("form"), m && (m.addEventListener("submit", Le, { capture: !0 }), m.addEventListener("reset", Re), s === "onfocus" && m.addEventListener("focusin", Ce)), s === "onload" && q(); + E("mounted", "0.6.1"), E("workers", ie), h && E("using test mode"), D && ue(D), s !== void 0 && E("auto", s), k !== void 0 && De(k), m = x.closest("form"), m && (m.addEventListener("submit", Ae, { capture: !0 }), m.addEventListener("reset", Ne), s === "onfocus" && m.addEventListener("focusin", Ie)), s === "onload" && q(); }); - function C(...n) { - (U || n.some((f) => f instanceof Error)) && console[n[0] instanceof Error ? "error" : "log"]("ALTCHA", ...n); + function E(...n) { + (U || n.some((a) => a instanceof Error)) && console[n[0] instanceof Error ? "error" : "log"]("ALTCHA", ...n); } - function Ce(n) { - M === b.UNVERIFIED && q(); + function Ie(n) { + Z === b.UNVERIFIED && q(); } - function Le(n) { - m && s === "onsubmit" && (M === b.UNVERIFIED ? (n.preventDefault(), n.stopPropagation(), q().then(() => { + function Ae(n) { + m && s === "onsubmit" && (Z === b.UNVERIFIED ? (n.preventDefault(), n.stopPropagation(), q().then(() => { m == null || m.requestSubmit(); - })) : M !== b.VERIFIED && (n.preventDefault(), n.stopPropagation(), M === b.VERIFYING && je())); + })) : Z !== b.VERIFIED && (n.preventDefault(), n.stopPropagation(), Z === b.VERIFYING && Ve())); } - function Re() { - fe(); + function Ne() { + de(); } - function ze(n, f) { + function Se(n, a) { return btoa(JSON.stringify({ algorithm: n.algorithm, challenge: n.challenge, - number: f.number, + number: a.number, salt: n.salt, signature: n.signature, test: h ? !0 : void 0, - took: f.took + took: a.took })); } - function Ie(n) { + function je(n) { if (!n.algorithm) throw new Error("Invalid challenge. Property algorithm is missing."); if (n.signature === void 0) throw new Error("Invalid challenge. Property signature is missing."); - if (!xe.includes(n.algorithm.toUpperCase())) - throw new Error(`Unknown algorithm value. Allowed values: ${xe.join(", ")}`); + if (!Re.includes(n.algorithm.toUpperCase())) + throw new Error(`Unknown algorithm value. Allowed values: ${Re.join(", ")}`); if (!n.challenge || n.challenge.length < 40) throw new Error("Challenge is too short. Min. 40 chars."); if (!n.salt || n.salt.length < 10) throw new Error("Salt is too short. Min. 10 chars."); } - async function st() { + async function ct() { var n; if (L) - throw C("mocking error"), new Error("Mocked error."); + throw E("mocking error"), new Error("Mocked error."); if (i) - return C("using provided json data"), i; + return E("using provided json data"), i; if (h) - return C("generating test challenge", { test: h }), Pt(typeof h != "boolean" ? +h : void 0); + return E("generating test challenge", { test: h }), Pt(typeof h != "boolean" ? +h : void 0); { - if (!a) + if (!f) throw new Error("Attribute challengeurl not set."); - C("fetching challenge from", a); - const f = await fetch(a, { + E("fetching challenge from", f); + const a = await fetch(f, { headers: { - "x-altcha-spam-filter": v ? "1" : "0" + "x-altcha-spam-filter": w ? "1" : "0" } }); - if (f.status !== 200) - throw new Error(`Server responded with ${f.status}.`); - const g = f.headers.get("Expires"), I = f.headers.get("X-Altcha-Config"), T = await f.json(), V = new URLSearchParams((n = T.salt.split("?")) == null ? void 0 : n[1]), X = V.get("expires") || V.get("expire"); + if (a.status !== 200) + throw new Error(`Server responded with ${a.status}.`); + const g = a.headers.get("Expires"), I = a.headers.get("X-Altcha-Config"), M = await a.json(), V = new URLSearchParams((n = M.salt.split("?")) == null ? void 0 : n[1]), X = V.get("expires") || V.get("expire"); if (X) { - const p = new Date(+X * 1e3), x = isNaN(p.getTime()) ? 0 : p.getTime() - Date.now(); - x > 0 && ae(x); + const p = new Date(+X * 1e3), C = isNaN(p.getTime()) ? 0 : p.getTime() - Date.now(); + C > 0 && ue(C); } if (I) try { const p = JSON.parse(I); - p && typeof p == "object" && (p.verifyurl && (p.verifyurl = new URL(p.verifyurl, new URL(a)).toString()), Me(p)); + p && typeof p == "object" && (p.verifyurl && (p.verifyurl = new URL(p.verifyurl, new URL(f)).toString()), Ue(p)); } catch (p) { - C("unable to configure from X-Altcha-Config", p); + E("unable to configure from X-Altcha-Config", p); } if (!D && (g != null && g.length)) { const p = Date.parse(g); if (p) { - const x = p - Date.now(); - x > 0 && ae(x); + const C = p - Date.now(); + C > 0 && ue(C); } } - return T; + return M; } } - function Ae() { - a && R && M === b.VERIFIED ? q() : fe(b.EXPIRED, l.expired); + function Te() { + f && R && Z === b.VERIFIED ? q() : de(b.EXPIRED, l.expired); } - async function ct(n) { - let f = null; + async function at(n) { + let a = null; if ("Worker" in window) { try { - f = await at(n.challenge, n.salt, n.algorithm, n.maxnumber); + a = await ft(n.challenge, n.salt, n.algorithm, n.maxnumber); } catch (g) { - C(g); + E(g); } - if ((f == null ? void 0 : f.number) !== void 0) - return { data: n, solution: f }; + if ((a == null ? void 0 : a.number) !== void 0) + return { data: n, solution: a }; } return { data: n, solution: await Kt(n.challenge, n.salt, n.algorithm, n.maxnumber || j).promise }; } - async function at(n, f, g, I = typeof h == "number" ? h : j, T = Math.ceil(ie)) { + async function ft(n, a, g, I = typeof h == "number" ? h : j, M = Math.ceil(ie)) { const V = []; - if (T < 1) + if (M < 1) throw new Error("Wrong number of workers configured."); - if (T > 16) + if (M > 16) throw new Error("Too many workers. Max. 16 allowed workers."); - for (let x = 0; x < T; x++) - V.push(createAltchaWorker(ge)); - const X = Math.ceil(I / T), p = await Promise.all(V.map((x, ue) => { - const De = ue * X; - return new Promise((vt) => { - x.addEventListener("message", (Ue) => { - if (Ue.data) - for (const Fe of V) - Fe !== x && Fe.postMessage({ type: "abort" }); - vt(Ue.data); - }), x.postMessage({ + for (let C = 0; C < M; C++) + V.push(createAltchaWorker(ve)); + const X = Math.ceil(I / M), p = await Promise.all(V.map((C, _e) => { + const oe = _e * X; + return new Promise((he) => { + C.addEventListener("message", (ge) => { + if (ge.data) + for (const le of V) + le !== C && le.postMessage({ type: "abort" }); + he(ge.data); + }), C.postMessage({ payload: { alg: g, challenge: n, - max: De + X, - salt: f, - start: De + max: oe + X, + salt: a, + start: oe }, type: "work" }); }); })); - for (const x of V) - x.terminate(); - return p.find((x) => !!x) || null; + for (const C of V) + C.terminate(); + return p.find((C) => !!C) || null; } - function ft() { - [b.UNVERIFIED, b.ERROR, b.EXPIRED].includes(M) ? v && (m == null ? void 0 : m.reportValidity()) === !1 ? t(7, O = !1) : q() : t(7, O = !0); + function ut() { + [b.UNVERIFIED, b.ERROR, b.EXPIRED].includes(Z) ? w && (m == null ? void 0 : m.reportValidity()) === !1 ? t(7, O = !1) : q() : t(7, O = !0); } - function Ne(n) { - const f = n.target; - k && f && !E.contains(f) && M === b.VERIFIED && t(8, E.style.display = "none", E); + function Ze(n) { + const a = n.target; + k && a && !x.contains(a) && Z === b.VERIFIED && t(8, x.style.display = "none", x); } - function Se() { - k && we(); + function Me() { + k && pe(); } - function je() { - M === b.VERIFYING && l.waitAlert && alert(l.waitAlert); + function Ve() { + Z === b.VERIFYING && l.waitAlert && alert(l.waitAlert); } - function ut(n) { - k && M !== b.UNVERIFIED && requestAnimationFrame(() => { - we(); + function dt(n) { + k && Z !== b.UNVERIFIED && requestAnimationFrame(() => { + pe(); }); } - function Te() { - k && we(); + function $e() { + k && pe(); } - function ae(n) { - C("expire", n), W && (clearTimeout(W), W = null), n < 1 ? Ae() : W = setTimeout(Ae, n); + function ue(n) { + E("expire", n), W && (clearTimeout(W), W = null), n < 1 ? Te() : W = setTimeout(Te, n); } - function Ze(n) { - C("floating", n), k !== n && (t(8, E.style.left = "", E), t(8, E.style.top = "", E)), t(1, k = n === !0 || n === "" ? "auto" : n === !1 || n === "false" ? void 0 : k), k ? (s || t(0, s = "onsubmit"), document.addEventListener("scroll", Se), document.addEventListener("click", Ne), window.addEventListener("resize", Te)) : s === "onsubmit" && t(0, s = void 0); + function De(n) { + E("floating", n), k !== n && (t(8, x.style.left = "", x), t(8, x.style.top = "", x)), t(1, k = n === !0 || n === "" ? "auto" : n === !1 || n === "false" ? void 0 : k), k ? (s || t(0, s = "onsubmit"), document.addEventListener("scroll", Me), document.addEventListener("click", Ze), window.addEventListener("resize", $e)) : s === "onsubmit" && t(0, s = void 0); } - function dt(n) { + function ht(n) { var g; - const f = m == null ? void 0 : m.querySelector(typeof n == "string" ? `input[name="${n}"]` : 'input[type="email"]:not([data-no-spamfilter])'); - return ((g = f == null ? void 0 : f.value) == null ? void 0 : g.slice(f.value.indexOf("@"))) || void 0; + const a = m == null ? void 0 : m.querySelector(typeof n == "string" ? `input[name="${n}"]` : 'input[type="email"]:not([data-no-spamfilter])'); + return ((g = a == null ? void 0 : a.value) == null ? void 0 : g.slice(a.value.indexOf("@"))) || void 0; } - function ht(n) { + function gt(n) { return [ ...(m == null ? void 0 : m.querySelectorAll(n != null && n.length ? n.map((g) => `input[name="${g}"]`).join(", ") : 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')) || [] ].reduce( (g, I) => { - const T = I.name, V = I.value.trim(); - return T && V && (g[T] = V), g; + const M = I.name, V = I.value.trim(); + return M && V && (g[M] = V), g; }, {} ); } - async function gt(n) { + async function mt(n) { if (!y) throw new Error("Attribute verifyurl not set."); - C("requesting server verification from", y); - const f = { payload: n }; - if (v) { - const { email: T, expectedLanguages: V, expectedCountries: X, fields: p, ipAddress: x, timeZone: ue } = typeof v == "object" ? v : { + E("requesting server verification from", y); + const a = { payload: n }; + if (w) { + const { blockedCountries: M, classifier: V, disableRules: X, email: p, expectedLanguages: C, expectedCountries: _e, fields: oe, ipAddress: he, text: ge, timeZone: le } = typeof w == "object" ? w : { + blockedCountries: void 0, + classifier: void 0, + disableRules: void 0, email: void 0, expectedCountries: void 0, expectedLanguages: void 0, fields: void 0, ipAddress: void 0, + text: void 0, timeZone: void 0 }; - f.ipAddress = x === !1 ? void 0 : x || "auto", f.email = T === !1 ? void 0 : dt(T), f.fields = p === !1 ? void 0 : ht(p), f.timeZone = ue === !1 ? void 0 : ue || ir(), f.expectedCountries = X, f.expectedLanguages = V || (Ee ? [Ee] : void 0); + a.blockedCountries = M, a.classifier = V, a.disableRules = X, a.email = p === !1 ? void 0 : ht(p), a.expectedCountries = _e, a.expectedLanguages = C || (ze ? [ze] : void 0), a.fields = oe === !1 ? void 0 : gt(oe), a.ipAddress = he === !1 ? void 0 : he || "auto", a.text = ge, a.timeZone = le === !1 ? void 0 : le || ir(); } const g = await fetch(y, { - body: JSON.stringify(f), + body: JSON.stringify(a), headers: { "content-type": "application/json" }, method: "POST" }); if (g.status !== 200) throw new Error(`Server responded with ${g.status}.`); const I = await g.json(); - if (I != null && I.payload && t(5, J = I.payload), me("serververification", I), u && I.classification === "BAD") + if (I != null && I.payload && t(5, J = I.payload), we("serververification", I), u && I.classification === "BAD") throw new Error("SpamFilter returned negative classification."); } - function we(n = 20) { - if (E) - if (ce || (ce = (F ? document.querySelector(F) : m == null ? void 0 : m.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])')) || m), ce) { - const f = parseInt(P, 10) || 12, g = ce.getBoundingClientRect(), I = E.getBoundingClientRect(), T = document.documentElement.clientHeight, V = document.documentElement.clientWidth, X = k === "auto" ? g.bottom + I.height + f + n > T : k === "top", p = Math.max(n, Math.min(V - n - I.width, g.left + g.width / 2 - I.width / 2)); - if (X ? t(8, E.style.top = `${g.top - (I.height + f)}px`, E) : t(8, E.style.top = `${g.bottom + f}px`, E), t(8, E.style.left = `${p}px`, E), E.setAttribute("data-floating", X ? "top" : "bottom"), K) { - const x = K.getBoundingClientRect(); - t(9, K.style.left = g.left - p + g.width / 2 - x.width / 2 + "px", K); + function pe(n = 20) { + if (x) + if (fe || (fe = (F ? document.querySelector(F) : m == null ? void 0 : m.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])')) || m), fe) { + const a = parseInt(P, 10) || 12, g = fe.getBoundingClientRect(), I = x.getBoundingClientRect(), M = document.documentElement.clientHeight, V = document.documentElement.clientWidth, X = k === "auto" ? g.bottom + I.height + a + n > M : k === "top", p = Math.max(n, Math.min(V - n - I.width, g.left + g.width / 2 - I.width / 2)); + if (X ? t(8, x.style.top = `${g.top - (I.height + a)}px`, x) : t(8, x.style.top = `${g.bottom + a}px`, x), t(8, x.style.left = `${p}px`, x), x.setAttribute("data-floating", X ? "top" : "bottom"), K) { + const C = K.getBoundingClientRect(); + t(9, K.style.left = g.left - p + g.width / 2 - C.width / 2 + "px", K); } } else - C("unable to find floating anchor element"); + E("unable to find floating anchor element"); } - function Me(n) { - n.auto !== void 0 && (t(0, s = n.auto), s === "onload" && q()), n.floatinganchor !== void 0 && t(18, F = n.floatinganchor), n.delay !== void 0 && t(16, S = n.delay), n.floatingoffset !== void 0 && t(19, P = n.floatingoffset), n.floating !== void 0 && Ze(n.floating), n.expire !== void 0 && (ae(n.expire), t(17, D = n.expire)), n.challenge && (Ie(n.challenge), i = n.challenge), n.challengeurl !== void 0 && t(14, a = n.challengeurl), n.debug !== void 0 && t(15, U = !!n.debug), n.hidefooter !== void 0 && t(2, N = !!n.hidefooter), n.hidelogo !== void 0 && t(3, Q = !!n.hidelogo), n.maxnumber !== void 0 && t(20, j = +n.maxnumber), n.mockerror !== void 0 && t(21, L = !!n.mockerror), n.name !== void 0 && t(4, H = n.name), n.refetchonexpire !== void 0 && t(22, R = !!n.refetchonexpire), n.spamfilter !== void 0 && t(23, v = typeof n.spamfilter == "object" ? n.spamfilter : !!n.spamfilter), n.strings && t(34, o = n.strings), n.test !== void 0 && t(24, h = typeof n.test == "number" ? n.test : !!n.test), n.verifyurl !== void 0 && t(25, y = n.verifyurl), n.workers !== void 0 && t(26, ie = +n.workers); + function Ue(n) { + n.auto !== void 0 && (t(0, s = n.auto), s === "onload" && q()), n.floatinganchor !== void 0 && t(18, F = n.floatinganchor), n.delay !== void 0 && t(16, S = n.delay), n.floatingoffset !== void 0 && t(19, P = n.floatingoffset), n.floating !== void 0 && De(n.floating), n.expire !== void 0 && (ue(n.expire), t(17, D = n.expire)), n.challenge && (je(n.challenge), i = n.challenge), n.challengeurl !== void 0 && t(14, f = n.challengeurl), n.debug !== void 0 && t(15, U = !!n.debug), n.hidefooter !== void 0 && t(2, N = !!n.hidefooter), n.hidelogo !== void 0 && t(3, Q = !!n.hidelogo), n.maxnumber !== void 0 && t(20, j = +n.maxnumber), n.mockerror !== void 0 && t(21, L = !!n.mockerror), n.name !== void 0 && t(4, H = n.name), n.refetchonexpire !== void 0 && t(22, R = !!n.refetchonexpire), n.spamfilter !== void 0 && t(23, w = typeof n.spamfilter == "object" ? n.spamfilter : !!n.spamfilter), n.strings && t(34, o = n.strings), n.test !== void 0 && t(24, h = typeof n.test == "number" ? n.test : !!n.test), n.verifyurl !== void 0 && t(25, y = n.verifyurl), n.workers !== void 0 && t(26, ie = +n.workers); } - function fe(n = b.UNVERIFIED, f = null) { - W && (clearTimeout(W), W = null), t(7, O = !1), t(10, be = f), t(5, J = null), t(6, M = n); + function de(n = b.UNVERIFIED, a = null) { + W && (clearTimeout(W), W = null), t(7, O = !1), t(10, ye = a), t(5, J = null), t(6, Z = n); } async function q() { - return fe(b.VERIFYING), await new Promise((n) => setTimeout(n, S || 0)), st().then((n) => (Ie(n), C("challenge", n), ct(n))).then(({ data: n, solution: f }) => { - if (C("solution", f), (f == null ? void 0 : f.number) !== void 0) { + return de(b.VERIFYING), await new Promise((n) => setTimeout(n, S || 0)), ct().then((n) => (je(n), E("challenge", n), at(n))).then(({ data: n, solution: a }) => { + if (E("solution", a), (a == null ? void 0 : a.number) !== void 0) { if (y) - return gt(ze(n, f)); - t(5, J = ze(n, f)), C("payload", J); + return mt(Se(n, a)); + t(5, J = Se(n, a)), E("payload", J); } else - throw C("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."), new Error("Unexpected result returned."); + throw E("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."), new Error("Unexpected result returned."); }).then(() => { Zt().then(() => { - t(6, M = b.VERIFIED), t(7, O = !0), C("verified"), me("verified", { payload: J }); + t(6, Z = b.VERIFIED), t(7, O = !0), E("verified"), we("verified", { payload: J }); }); }).catch((n) => { - C(n), t(6, M = b.ERROR), t(7, O = !1), t(10, be = n.message); + E(n), t(6, Z = b.ERROR), t(7, O = !1), t(10, ye = n.message); }); } - function mt() { + function bt() { O = this.checked, t(7, O); } - function bt(n) { - he[n ? "unshift" : "push"](() => { + function vt(n) { + be[n ? "unshift" : "push"](() => { K = n, t(9, K); }); } function wt(n) { - he[n ? "unshift" : "push"](() => { - E = n, t(8, E); + be[n ? "unshift" : "push"](() => { + x = n, t(8, x); }); } return r.$$set = (n) => { - "auto" in n && t(0, s = n.auto), "blockspam" in n && t(27, u = n.blockspam), "challengeurl" in n && t(14, a = n.challengeurl), "challengejson" in n && t(28, d = n.challengejson), "debug" in n && t(15, U = n.debug), "delay" in n && t(16, S = n.delay), "expire" in n && t(17, D = n.expire), "floating" in n && t(1, k = n.floating), "floatinganchor" in n && t(18, F = n.floatinganchor), "floatingoffset" in n && t(19, P = n.floatingoffset), "hidefooter" in n && t(2, N = n.hidefooter), "hidelogo" in n && t(3, Q = n.hidelogo), "name" in n && t(4, H = n.name), "maxnumber" in n && t(20, j = n.maxnumber), "mockerror" in n && t(21, L = n.mockerror), "refetchonexpire" in n && t(22, R = n.refetchonexpire), "spamfilter" in n && t(23, v = n.spamfilter), "strings" in n && t(29, z = n.strings), "test" in n && t(24, h = n.test), "verifyurl" in n && t(25, y = n.verifyurl), "workers" in n && t(26, ie = n.workers), "workerurl" in n && t(30, ge = n.workerurl); + "auto" in n && t(0, s = n.auto), "blockspam" in n && t(27, u = n.blockspam), "challengeurl" in n && t(14, f = n.challengeurl), "challengejson" in n && t(28, d = n.challengejson), "debug" in n && t(15, U = n.debug), "delay" in n && t(16, S = n.delay), "expire" in n && t(17, D = n.expire), "floating" in n && t(1, k = n.floating), "floatinganchor" in n && t(18, F = n.floatinganchor), "floatingoffset" in n && t(19, P = n.floatingoffset), "hidefooter" in n && t(2, N = n.hidefooter), "hidelogo" in n && t(3, Q = n.hidelogo), "name" in n && t(4, H = n.name), "maxnumber" in n && t(20, j = n.maxnumber), "mockerror" in n && t(21, L = n.mockerror), "refetchonexpire" in n && t(22, R = n.refetchonexpire), "spamfilter" in n && t(23, w = n.spamfilter), "strings" in n && t(29, z = n.strings), "test" in n && t(24, h = n.test), "verifyurl" in n && t(25, y = n.verifyurl), "workers" in n && t(26, ie = n.workers), "workerurl" in n && t(30, ve = n.workerurl); }, r.$$.update = () => { r.$$.dirty[0] & /*challengejson*/ - 268435456 && (i = d ? qe(d) : void 0), r.$$.dirty[0] & /*strings*/ - 536870912 && t(34, o = z ? qe(z) : {}), r.$$.dirty[1] & /*parsedStrings*/ + 268435456 && (i = d ? Qe(d) : void 0), r.$$.dirty[0] & /*strings*/ + 536870912 && t(34, o = z ? Qe(z) : {}), r.$$.dirty[1] & /*parsedStrings*/ 8 && t(11, l = { - ariaLinkLabel: Je, + ariaLinkLabel: qe, error: "Verification failed. Try again later.", expired: "Verification expired. Try again.", - footer: `Protected by ALTCHA`, + footer: `Protected by ALTCHA`, label: "I'm not a robot", verified: "Verified", verifying: "Verifying...", waitAlert: "Verifying... please wait.", ...o }), r.$$.dirty[0] & /*payload, state*/ - 96 && me("statechange", { payload: J, state: M }), r.$$.dirty[0] & /*state*/ - 64 && ut(); + 96 && we("statechange", { payload: J, state: Z }), r.$$.dirty[0] & /*state*/ + 64 && dt(); }, [ s, k, @@ -1173,15 +1177,15 @@ function or(r, e, t) { Q, H, J, - M, + Z, O, - E, + x, K, - be, + ye, l, - ft, - je, - a, + ut, + Ve, + f, U, S, D, @@ -1190,20 +1194,20 @@ function or(r, e, t) { j, L, R, - v, + w, h, y, ie, u, d, z, - ge, - Me, - fe, + ve, + Ue, + de, q, o, - mt, bt, + vt, wt ]; } @@ -1250,133 +1254,133 @@ class lr extends Bt { return this.$$.ctx[0]; } set auto(e) { - this.$$set({ auto: e }), w(); + this.$$set({ auto: e }), v(); } get blockspam() { return this.$$.ctx[27]; } set blockspam(e) { - this.$$set({ blockspam: e }), w(); + this.$$set({ blockspam: e }), v(); } get challengeurl() { return this.$$.ctx[14]; } set challengeurl(e) { - this.$$set({ challengeurl: e }), w(); + this.$$set({ challengeurl: e }), v(); } get challengejson() { return this.$$.ctx[28]; } set challengejson(e) { - this.$$set({ challengejson: e }), w(); + this.$$set({ challengejson: e }), v(); } get debug() { return this.$$.ctx[15]; } set debug(e) { - this.$$set({ debug: e }), w(); + this.$$set({ debug: e }), v(); } get delay() { return this.$$.ctx[16]; } set delay(e) { - this.$$set({ delay: e }), w(); + this.$$set({ delay: e }), v(); } get expire() { return this.$$.ctx[17]; } set expire(e) { - this.$$set({ expire: e }), w(); + this.$$set({ expire: e }), v(); } get floating() { return this.$$.ctx[1]; } set floating(e) { - this.$$set({ floating: e }), w(); + this.$$set({ floating: e }), v(); } get floatinganchor() { return this.$$.ctx[18]; } set floatinganchor(e) { - this.$$set({ floatinganchor: e }), w(); + this.$$set({ floatinganchor: e }), v(); } get floatingoffset() { return this.$$.ctx[19]; } set floatingoffset(e) { - this.$$set({ floatingoffset: e }), w(); + this.$$set({ floatingoffset: e }), v(); } get hidefooter() { return this.$$.ctx[2]; } set hidefooter(e) { - this.$$set({ hidefooter: e }), w(); + this.$$set({ hidefooter: e }), v(); } get hidelogo() { return this.$$.ctx[3]; } set hidelogo(e) { - this.$$set({ hidelogo: e }), w(); + this.$$set({ hidelogo: e }), v(); } get name() { return this.$$.ctx[4]; } set name(e) { - this.$$set({ name: e }), w(); + this.$$set({ name: e }), v(); } get maxnumber() { return this.$$.ctx[20]; } set maxnumber(e) { - this.$$set({ maxnumber: e }), w(); + this.$$set({ maxnumber: e }), v(); } get mockerror() { return this.$$.ctx[21]; } set mockerror(e) { - this.$$set({ mockerror: e }), w(); + this.$$set({ mockerror: e }), v(); } get refetchonexpire() { return this.$$.ctx[22]; } set refetchonexpire(e) { - this.$$set({ refetchonexpire: e }), w(); + this.$$set({ refetchonexpire: e }), v(); } get spamfilter() { return this.$$.ctx[23]; } set spamfilter(e) { - this.$$set({ spamfilter: e }), w(); + this.$$set({ spamfilter: e }), v(); } get strings() { return this.$$.ctx[29]; } set strings(e) { - this.$$set({ strings: e }), w(); + this.$$set({ strings: e }), v(); } get test() { return this.$$.ctx[24]; } set test(e) { - this.$$set({ test: e }), w(); + this.$$set({ test: e }), v(); } get verifyurl() { return this.$$.ctx[25]; } set verifyurl(e) { - this.$$set({ verifyurl: e }), w(); + this.$$set({ verifyurl: e }), v(); } get workers() { return this.$$.ctx[26]; } set workers(e) { - this.$$set({ workers: e }), w(); + this.$$set({ workers: e }), v(); } get workerurl() { return this.$$.ctx[30]; } set workerurl(e) { - this.$$set({ workerurl: e }), w(); + this.$$set({ workerurl: e }), v(); } get configure() { return this.$$.ctx[31]; diff --git a/dist/altcha.umd.cjs b/dist/altcha.umd.cjs index 8dcb33f..a0f5e0b 100644 --- a/dist/altcha.umd.cjs +++ b/dist/altcha.umd.cjs @@ -1 +1 @@ -(function(F,M){typeof exports=="object"&&typeof module<"u"?M(exports):typeof define=="function"&&define.amd?define(["exports"],M):(F=typeof globalThis<"u"?globalThis:F||self,M(F.altcha={}))})(this,function(F){"use strict";var lr=Object.defineProperty;var sr=(F,M,te)=>M in F?lr(F,M,{enumerable:!0,configurable:!0,writable:!0,value:te}):F[M]=te;var X=(F,M,te)=>sr(F,typeof M!="symbol"?M+"":M,te);const M="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IGY9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIGQoZSl7cmV0dXJuWy4uLm5ldyBVaW50OEFycmF5KGUpXS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1hc3luYyBmdW5jdGlvbiBwKGUsdCxvKXtyZXR1cm4gZChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChvLnRvVXBwZXJDYXNlKCksZi5lbmNvZGUoZSt0KSkpfWZ1bmN0aW9uIGcoZSx0LG89IlNIQS0yNTYiLGw9MWU2LGM9MCl7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLGk9RGF0ZS5ub3coKTtyZXR1cm57cHJvbWlzZTooYXN5bmMoKT0+e2ZvcihsZXQgbj1jO248PWw7bis9MSl7aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm4gbnVsbDtpZihhd2FpdCBwKHQsbixvKT09PWUpcmV0dXJue251bWJlcjpuLHRvb2s6RGF0ZS5ub3coKS1pfX1yZXR1cm4gbnVsbH0pKCksY29udHJvbGxlcjphfX1sZXQgcjtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0e3R5cGU6dCxwYXlsb2FkOm99PWUuZGF0YTtpZih0PT09ImFib3J0IilyPT1udWxsfHxyLmFib3J0KCkscj12b2lkIDA7ZWxzZSBpZih0PT09IndvcmsiKXtjb25zdHthbGc6bCxjaGFsbGVuZ2U6YyxtYXg6YSxzYWx0Omksc3RhcnQ6dX09b3x8e30sbj1nKGMsaSxsLGEsdSk7cj1uLmNvbnRyb2xsZXIsbi5wcm9taXNlLnRoZW4ocz0+e3NlbGYucG9zdE1lc3NhZ2UocyYmey4uLnMsd29ya2VyOiEwfSl9KX19fSkoKTsK",te=r=>Uint8Array.from(atob(r),e=>e.charCodeAt(0)),Le=typeof window<"u"&&window.Blob&&new Blob([te(M)],{type:"text/javascript;charset=utf-8"});function ft(r){let e;try{if(e=Le&&(window.URL||window.webkitURL).createObjectURL(Le),!e)throw"";const t=new Worker(e,{name:r==null?void 0:r.name});return t.addEventListener("error",()=>{(window.URL||window.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+M,{name:r==null?void 0:r.name})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}function re(){}function Re(r){return r()}function ze(){return Object.create(null)}function se(r){r.forEach(Re)}function Ie(r){return typeof r=="function"}function ut(r,e){return r!=r?e==e:r!==e||r&&typeof r=="object"||typeof r=="function"}function dt(r){return Object.keys(r).length===0}function y(r,e){r.appendChild(e)}function ht(r,e,t){const i=gt(r);if(!i.getElementById(e)){const o=L("style");o.id=e,o.textContent=t,mt(i,o)}}function gt(r){if(!r)return document;const e=r.getRootNode?r.getRootNode():r.ownerDocument;return e&&e.host?e:r.ownerDocument}function mt(r,e){return y(r.head||r,e),e.sheet}function V(r,e,t){r.insertBefore(e,t||null)}function j(r){r.parentNode&&r.parentNode.removeChild(r)}function L(r){return document.createElement(r)}function O(r){return document.createElementNS("http://www.w3.org/2000/svg",r)}function bt(r){return document.createTextNode(r)}function P(){return bt(" ")}function we(r,e,t,i){return r.addEventListener(e,t,i),()=>r.removeEventListener(e,t,i)}function c(r,e,t){t==null?r.removeAttribute(e):r.getAttribute(e)!==t&&r.setAttribute(e,t)}function wt(r){return Array.from(r.childNodes)}function Ae(r,e,t){r.classList.toggle(e,!!t)}function vt(r,e,{bubbles:t=!1,cancelable:i=!1}={}){return new CustomEvent(r,{detail:e,bubbles:t,cancelable:i})}function yt(r){const e={};return r.childNodes.forEach(t=>{e[t.slot||"default"]=!0}),e}let ce;function ae(r){ce=r}function ve(){if(!ce)throw new Error("Function called outside component initialization");return ce}function pt(r){ve().$$.on_mount.push(r)}function _t(r){ve().$$.on_destroy.push(r)}function kt(){const r=ve();return(e,t,{cancelable:i=!1}={})=>{const o=r.$$.callbacks[e];if(o){const l=vt(e,t,{cancelable:i});return o.slice().forEach(s=>{s.call(r,l)}),!l.defaultPrevented}return!0}}const ne=[],ue=[];let ie=[];const Ne=[],Se=Promise.resolve();let ye=!1;function Te(){ye||(ye=!0,Se.then(w))}function xt(){return Te(),Se}function pe(r){ie.push(r)}const _e=new Set;let oe=0;function w(){if(oe!==0)return;const r=ce;do{try{for(;oer.indexOf(i)===-1?e.push(i):t.push(i)),t.forEach(i=>i()),ie=e}const Lt=new Set;function Rt(r,e){r&&r.i&&(Lt.delete(r),r.i(e))}function zt(r,e,t){const{fragment:i,after_update:o}=r.$$;i&&i.m(e,t),pe(()=>{const l=r.$$.on_mount.map(Re).filter(Ie);r.$$.on_destroy?r.$$.on_destroy.push(...l):se(l),r.$$.on_mount=[]}),o.forEach(pe)}function It(r,e){const t=r.$$;t.fragment!==null&&(Ct(t.after_update),se(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function At(r,e){r.$$.dirty[0]===-1&&(ne.push(r),Te(),r.$$.dirty.fill(0)),r.$$.dirty[e/31|0]|=1<{const W=k.length?k[0]:U;return d.ctx&&o(d.ctx[S],d.ctx[S]=W)&&(!d.skip_bound&&d.bound[S]&&d.bound[S](W),G&&At(r,S)),U}):[],d.update(),G=!0,se(d.before_update),d.fragment=i?i(d.ctx):!1,e.target){if(e.hydrate){const S=wt(e.target);d.fragment&&d.fragment.l(S),S.forEach(j)}else d.fragment&&d.fragment.c();e.intro&&Rt(r.$$.fragment),zt(r,e.target,e.anchor),w()}ae(a)}let je;typeof HTMLElement=="function"&&(je=class extends HTMLElement{constructor(e,t,i){super();X(this,"$$ctor");X(this,"$$s");X(this,"$$c");X(this,"$$cn",!1);X(this,"$$d",{});X(this,"$$r",!1);X(this,"$$p_d",{});X(this,"$$l",{});X(this,"$$l_u",new Map);this.$$ctor=e,this.$$s=t,i&&this.attachShadow({mode:"open"})}addEventListener(e,t,i){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const o=this.$$c.$on(e,t);this.$$l_u.set(t,o)}super.addEventListener(e,t,i)}removeEventListener(e,t,i){if(super.removeEventListener(e,t,i),this.$$c){const o=this.$$l_u.get(t);o&&(o(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let e=function(l){return()=>{let s;return{c:function(){s=L("slot"),l!=="default"&&c(s,"name",l)},m:function(d,G){V(d,s,G)},d:function(d){d&&j(s)}}}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const t={},i=yt(this);for(const l of this.$$s)l in i&&(t[l]=[e(l)]);for(const l of this.attributes){const s=this.$$g_p(l.name);s in this.$$d||(this.$$d[s]=de(s,l.value,this.$$p_d,"toProp"))}for(const l in this.$$p_d)!(l in this.$$d)&&this[l]!==void 0&&(this.$$d[l]=this[l],delete this[l]);this.$$c=new this.$$ctor({target:this.shadowRoot||this,props:{...this.$$d,$$slots:t,$$scope:{ctx:[]}}});const o=()=>{this.$$r=!0;for(const l in this.$$p_d)if(this.$$d[l]=this.$$c.$$.ctx[this.$$c.$$.props[l]],this.$$p_d[l].reflect){const s=de(l,this.$$d[l],this.$$p_d,"toAttribute");s==null?this.removeAttribute(this.$$p_d[l].attribute||l):this.setAttribute(this.$$p_d[l].attribute||l,s)}this.$$r=!1};this.$$c.$$.after_update.push(o),o();for(const l in this.$$l)for(const s of this.$$l[l]){const u=this.$$c.$on(l,s);this.$$l_u.set(s,u)}this.$$l={}}}attributeChangedCallback(e,t,i){var o;this.$$r||(e=this.$$g_p(e),this.$$d[e]=de(e,i,this.$$p_d,"toProp"),(o=this.$$c)==null||o.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{this.$$cn||(this.$$c.$destroy(),this.$$c=void 0)})}$$g_p(e){return Object.keys(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});function de(r,e,t,i){var l;const o=(l=t[r])==null?void 0:l.type;if(e=o==="Boolean"&&typeof e!="boolean"?e!=null:e,!i||!t[r])return e;if(i==="toAttribute")switch(o){case"Object":case"Array":return e==null?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return e??null;default:return e}else switch(o){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":return e;case"Number":return e!=null?+e:e;default:return e}}function St(r,e,t,i,o,l){let s=class extends je{constructor(){super(r,t,o),this.$$p_d=e}static get observedAttributes(){return Object.keys(e).map(u=>(e[u].attribute||u).toLowerCase())}};return Object.keys(e).forEach(u=>{Object.defineProperty(s.prototype,u,{get(){return this.$$c&&u in this.$$c?this.$$c[u]:this.$$d[u]},set(a){var d;a=de(u,a,e),this.$$d[u]=a,(d=this.$$c)==null||d.$set({[u]:a})}})}),i.forEach(u=>{Object.defineProperty(s.prototype,u,{get(){var a;return(a=this.$$c)==null?void 0:a[u]}})}),l&&(s=l(s)),r.element=s,s}class Tt{constructor(){X(this,"$$");X(this,"$$set")}$destroy(){It(this,1),this.$destroy=re}$on(e,t){if(!Ie(t))return re;const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(t),()=>{const o=i.indexOf(t);o!==-1&&i.splice(o,1)}}$set(e){this.$$set&&!dt(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const jt="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(jt);const Zt=new TextEncoder;function Mt(r){return[...new Uint8Array(r)].map(e=>e.toString(16).padStart(2,"0")).join("")}async function Vt(r,e="SHA-256",t=1e5){const i=Date.now().toString(16);r||(r=Math.round(Math.random()*t));const o=await Ze(i,r,e);return{algorithm:e,challenge:o,salt:i,signature:""}}async function Ze(r,e,t){return Mt(await crypto.subtle.digest(t.toUpperCase(),Zt.encode(r+e)))}function $t(r,e,t="SHA-256",i=1e6,o=0){const l=new AbortController,s=Date.now();return{promise:(async()=>{for(let a=o;a<=i;a+=1){if(l.signal.aborted)return null;if(await Ze(e,a,t)===r)return{number:a,took:Date.now()-s}}return null})(),controller:l}}var m=(r=>(r.ERROR="error",r.VERIFIED="verified",r.VERIFYING="verifying",r.UNVERIFIED="unverified",r.EXPIRED="expired",r))(m||{});function Dt(r){ht(r,"svelte-ddsc3z",'.altcha.svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, transparent);border:var(--altcha-border-width, 1px) solid var(--altcha-color-border, #a0a0a0);border-radius:var(--altcha-border-radius, 3px);color:var(--altcha-color-text, currentColor);display:flex;flex-direction:column;max-width:var(--altcha-max-width, 260px);position:relative;text-align:left}.altcha.svelte-ddsc3z.svelte-ddsc3z:focus-within{border-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, white);display:none;filter:drop-shadow(3px 3px 6px rgba(0, 0, 0, 0.2));left:-100%;position:fixed;top:-100%;width:var(--altcha-max-width, 260px);z-index:999999}.altcha[data-floating=top].svelte-ddsc3z .altcha-anchor-arrow.svelte-ddsc3z{border-bottom-color:transparent;border-top-color:var(--altcha-color-border, #a0a0a0);bottom:-12px;top:auto}.altcha[data-floating=bottom].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-bottom-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating=top].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-top-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z:not([data-state=unverified]){display:block}.altcha-anchor-arrow.svelte-ddsc3z.svelte-ddsc3z{border:6px solid transparent;border-bottom-color:var(--altcha-color-border, #a0a0a0);content:"";height:0;left:12px;position:absolute;top:-12px;width:0}.altcha-main.svelte-ddsc3z.svelte-ddsc3z{align-items:center;display:flex;gap:0.4rem;padding:0.7rem}.altcha-label.svelte-ddsc3z.svelte-ddsc3z{flex-grow:1}.altcha-label.svelte-ddsc3z label.svelte-ddsc3z{cursor:pointer}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z{color:currentColor;opacity:0.3}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-error.svelte-ddsc3z.svelte-ddsc3z{color:var(--altcha-color-error-text, #f23939);display:flex;font-size:0.85rem;gap:0.3rem;padding:0 0.7rem 0.7rem}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z{align-items:center;background-color:var(--altcha-color-footer-bg, transparent);display:flex;font-size:0.75rem;opacity:0.4;padding:0.2rem 0.7rem;text-align:right}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-footer.svelte-ddsc3z>.svelte-ddsc3z:first-child{flex-grow:1}.altcha-footer.svelte-ddsc3z a{color:currentColor}.altcha-checkbox.svelte-ddsc3z.svelte-ddsc3z{display:flex;align-items:center;height:24px;width:24px}.altcha-checkbox.svelte-ddsc3z input.svelte-ddsc3z{width:18px;height:18px;margin:0}.altcha-hidden.svelte-ddsc3z.svelte-ddsc3z{display:none}.altcha-spinner.svelte-ddsc3z.svelte-ddsc3z{animation:svelte-ddsc3z-altcha-spinner 0.75s infinite linear;transform-origin:center}@keyframes svelte-ddsc3z-altcha-spinner{100%{transform:rotate(360deg)}}')}function Me(r){let e,t,i;return{c(){e=O("svg"),t=O("path"),i=O("path"),c(t,"d","M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"),c(t,"fill","currentColor"),c(t,"opacity",".25"),c(i,"d","M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"),c(i,"fill","currentColor"),c(i,"class","altcha-spinner svelte-ddsc3z"),c(e,"width","24"),c(e,"height","24"),c(e,"viewBox","0 0 24 24"),c(e,"xmlns","http://www.w3.org/2000/svg")},m(o,l){V(o,e,l),y(e,t),y(e,i)},d(o){o&&j(e)}}}function Ut(r){let e,t=r[11].label+"",i;return{c(){e=L("label"),c(e,"for",i=r[4]+"_checkbox"),c(e,"class","svelte-ddsc3z")},m(o,l){V(o,e,l),e.innerHTML=t},p(o,l){l[0]&2048&&t!==(t=o[11].label+"")&&(e.innerHTML=t),l[0]&16&&i!==(i=o[4]+"_checkbox")&&c(e,"for",i)},d(o){o&&j(e)}}}function Ft(r){let e,t=r[11].verifying+"";return{c(){e=L("span")},m(i,o){V(i,e,o),e.innerHTML=t},p(i,o){o[0]&2048&&t!==(t=i[11].verifying+"")&&(e.innerHTML=t)},d(i){i&&j(e)}}}function Gt(r){let e,t=r[11].verified+"",i,o;return{c(){e=L("span"),i=P(),o=L("input"),c(o,"type","hidden"),c(o,"name",r[4]),o.value=r[5]},m(l,s){V(l,e,s),e.innerHTML=t,V(l,i,s),V(l,o,s)},p(l,s){s[0]&2048&&t!==(t=l[11].verified+"")&&(e.innerHTML=t),s[0]&16&&c(o,"name",l[4]),s[0]&32&&(o.value=l[5])},d(l){l&&(j(e),j(i),j(o))}}}function Ve(r){let e,t,i,o,l,s,u;return{c(){e=L("div"),t=L("a"),i=O("svg"),o=O("path"),l=O("path"),s=O("path"),c(o,"d","M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"),c(o,"fill","currentColor"),c(l,"d","M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"),c(l,"fill","currentColor"),c(s,"d","M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"),c(s,"fill","currentColor"),c(i,"width","22"),c(i,"height","22"),c(i,"viewBox","0 0 20 20"),c(i,"fill","none"),c(i,"xmlns","http://www.w3.org/2000/svg"),c(t,"href",Ge),c(t,"target","_blank"),c(t,"class","altcha-logo svelte-ddsc3z"),c(t,"aria-label",u=r[11].ariaLinkLabel)},m(a,d){V(a,e,d),y(e,t),y(t,i),y(i,o),y(i,l),y(i,s)},p(a,d){d[0]&2048&&u!==(u=a[11].ariaLinkLabel)&&c(t,"aria-label",u)},d(a){a&&j(e)}}}function $e(r){let e,t,i,o;function l(a,d){return a[6]===m.EXPIRED?Xt:Wt}let s=l(r),u=s(r);return{c(){e=L("div"),t=O("svg"),i=O("path"),o=P(),u.c(),c(i,"stroke-linecap","round"),c(i,"stroke-linejoin","round"),c(i,"d","M6 18L18 6M6 6l12 12"),c(t,"width","14"),c(t,"height","14"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"fill","none"),c(t,"viewBox","0 0 24 24"),c(t,"stroke-width","1.5"),c(t,"stroke","currentColor"),c(e,"class","altcha-error svelte-ddsc3z")},m(a,d){V(a,e,d),y(e,t),y(t,i),y(e,o),u.m(e,null)},p(a,d){s===(s=l(a))&&u?u.p(a,d):(u.d(1),u=s(a),u&&(u.c(),u.m(e,null)))},d(a){a&&j(e),u.d()}}}function Wt(r){let e,t=r[11].error+"";return{c(){e=L("div"),c(e,"title",r[10])},m(i,o){V(i,e,o),e.innerHTML=t},p(i,o){o[0]&2048&&t!==(t=i[11].error+"")&&(e.innerHTML=t),o[0]&1024&&c(e,"title",i[10])},d(i){i&&j(e)}}}function Xt(r){let e,t=r[11].expired+"";return{c(){e=L("div"),c(e,"title",r[10])},m(i,o){V(i,e,o),e.innerHTML=t},p(i,o){o[0]&2048&&t!==(t=i[11].expired+"")&&(e.innerHTML=t),o[0]&1024&&c(e,"title",i[10])},d(i){i&&j(e)}}}function De(r){let e,t,i=r[11].footer+"";return{c(){e=L("div"),t=L("div"),c(t,"class","svelte-ddsc3z"),c(e,"class","altcha-footer svelte-ddsc3z")},m(o,l){V(o,e,l),y(e,t),t.innerHTML=i},p(o,l){l[0]&2048&&i!==(i=o[11].footer+"")&&(t.innerHTML=i)},d(o){o&&j(e)}}}function Ue(r){let e;return{c(){e=L("div"),c(e,"class","altcha-anchor-arrow svelte-ddsc3z")},m(t,i){V(t,e,i),r[36](e)},p:re,d(t){t&&j(e),r[36](null)}}}function Bt(r){let e,t,i,o,l,s,u,a,d,G,S,U,k,W,J,N=r[6]===m.VERIFYING&&Me();function le(h,p){return h[6]===m.VERIFIED?Gt:h[6]===m.VERIFYING?Ft:Ut}let Y=le(r),T=Y(r),R=r[3]!==!0&&Ve(r),z=(r[10]||r[6]===m.EXPIRED)&&$e(r),v=r[11].footer&&r[2]!==!0&&De(r),I=r[1]&&Ue(r);return{c(){e=L("div"),t=L("div"),N&&N.c(),i=P(),o=L("div"),l=L("input"),a=P(),d=L("div"),T.c(),G=P(),R&&R.c(),S=P(),z&&z.c(),U=P(),v&&v.c(),k=P(),I&&I.c(),c(l,"type","checkbox"),c(l,"id",s=r[4]+"_checkbox"),l.required=u=r[0]!=="onsubmit",c(l,"class","svelte-ddsc3z"),c(o,"class","altcha-checkbox svelte-ddsc3z"),Ae(o,"altcha-hidden",r[6]===m.VERIFYING),c(d,"class","altcha-label svelte-ddsc3z"),c(t,"class","altcha-main svelte-ddsc3z"),c(e,"class","altcha svelte-ddsc3z"),c(e,"data-state",r[6]),c(e,"data-floating",r[1])},m(h,p){V(h,e,p),y(e,t),N&&N.m(t,null),y(t,i),y(t,o),y(o,l),l.checked=r[7],y(t,a),y(t,d),T.m(d,null),y(t,G),R&&R.m(t,null),y(e,S),z&&z.m(e,null),y(e,U),v&&v.m(e,null),y(e,k),I&&I.m(e,null),r[37](e),W||(J=[we(l,"change",r[35]),we(l,"change",r[12]),we(l,"invalid",r[13])],W=!0)},p(h,p){h[6]===m.VERIFYING?N||(N=Me(),N.c(),N.m(t,i)):N&&(N.d(1),N=null),p[0]&16&&s!==(s=h[4]+"_checkbox")&&c(l,"id",s),p[0]&1&&u!==(u=h[0]!=="onsubmit")&&(l.required=u),p[0]&128&&(l.checked=h[7]),p[0]&64&&Ae(o,"altcha-hidden",h[6]===m.VERIFYING),Y===(Y=le(h))&&T?T.p(h,p):(T.d(1),T=Y(h),T&&(T.c(),T.m(d,null))),h[3]!==!0?R?R.p(h,p):(R=Ve(h),R.c(),R.m(t,null)):R&&(R.d(1),R=null),h[10]||h[6]===m.EXPIRED?z?z.p(h,p):(z=$e(h),z.c(),z.m(e,U)):z&&(z.d(1),z=null),h[11].footer&&h[2]!==!0?v?v.p(h,p):(v=De(h),v.c(),v.m(e,k)):v&&(v.d(1),v=null),h[1]?I?I.p(h,p):(I=Ue(h),I.c(),I.m(e,null)):I&&(I.d(1),I=null),p[0]&64&&c(e,"data-state",h[6]),p[0]&2&&c(e,"data-floating",h[1])},i:re,o:re,d(h){h&&j(e),N&&N.d(),T.d(),R&&R.d(),z&&z.d(),v&&v.d(),I&&I.d(),r[37](null),W=!1,se(J)}}}const Fe="Visit Altcha.org",Ge="https://altcha.org/";function We(r){return JSON.parse(r)}function Ht(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Ot(r,e,t){var ot,lt;let i,o,l,{auto:s=void 0}=e,{blockspam:u=void 0}=e,{challengeurl:a=void 0}=e,{challengejson:d=void 0}=e,{debug:G=!1}=e,{delay:S=0}=e,{expire:U=void 0}=e,{floating:k=void 0}=e,{floatinganchor:W=void 0}=e,{floatingoffset:J=void 0}=e,{hidefooter:N=!1}=e,{hidelogo:le=!1}=e,{name:Y="altcha"}=e,{maxnumber:T=1e6}=e,{mockerror:R=!1}=e,{refetchonexpire:z=!0}=e,{spamfilter:v=!1}=e,{strings:I=void 0}=e,{test:h=!1}=e,{verifyurl:p=void 0}=e,{workers:fe=Math.min(16,navigator.hardwareConcurrency||8)}=e,{workerurl:ke=void 0}=e;const xe=kt(),Be=["SHA-256","SHA-384","SHA-512"],He=(lt=(ot=document.documentElement.lang)==null?void 0:ot.split("-"))==null?void 0:lt[0];let K=!1,E,q=null,he=null,b=null,Ee=null,Q=null,$=m.UNVERIFIED,B=null;_t(()=>{b&&(b.removeEventListener("submit",Pe),b.removeEventListener("reset",Ye),b.removeEventListener("focusin",Oe),b=null),B&&(clearTimeout(B),B=null),document.removeEventListener("click",Qe),document.removeEventListener("scroll",et),window.removeEventListener("resize",rt)}),pt(()=>{C("mounted","0.6.1"),C("workers",fe),h&&C("using test mode"),U&&ge(U),s!==void 0&&C("auto",s),k!==void 0&&nt(k),b=E.closest("form"),b&&(b.addEventListener("submit",Pe,{capture:!0}),b.addEventListener("reset",Ye),s==="onfocus"&&b.addEventListener("focusin",Oe)),s==="onload"&&ee()});function C(...n){(G||n.some(f=>f instanceof Error))&&console[n[0]instanceof Error?"error":"log"]("ALTCHA",...n)}function Oe(n){$===m.UNVERIFIED&&ee()}function Pe(n){b&&s==="onsubmit"&&($===m.UNVERIFIED?(n.preventDefault(),n.stopPropagation(),ee().then(()=>{b==null||b.requestSubmit()})):$!==m.VERIFIED&&(n.preventDefault(),n.stopPropagation(),$===m.VERIFYING&&tt()))}function Ye(){me()}function Ke(n,f){return btoa(JSON.stringify({algorithm:n.algorithm,challenge:n.challenge,number:f.number,salt:n.salt,signature:n.signature,test:h?!0:void 0,took:f.took}))}function Je(n){if(!n.algorithm)throw new Error("Invalid challenge. Property algorithm is missing.");if(n.signature===void 0)throw new Error("Invalid challenge. Property signature is missing.");if(!Be.includes(n.algorithm.toUpperCase()))throw new Error(`Unknown algorithm value. Allowed values: ${Be.join(", ")}`);if(!n.challenge||n.challenge.length<40)throw new Error("Challenge is too short. Min. 40 chars.");if(!n.salt||n.salt.length<10)throw new Error("Salt is too short. Min. 10 chars.")}async function Pt(){var n;if(R)throw C("mocking error"),new Error("Mocked error.");if(i)return C("using provided json data"),i;if(h)return C("generating test challenge",{test:h}),Vt(typeof h!="boolean"?+h:void 0);{if(!a)throw new Error("Attribute challengeurl not set.");C("fetching challenge from",a);const f=await fetch(a,{headers:{"x-altcha-spam-filter":v?"1":"0"}});if(f.status!==200)throw new Error(`Server responded with ${f.status}.`);const g=f.headers.get("Expires"),A=f.headers.get("X-Altcha-Config"),Z=await f.json(),D=new URLSearchParams((n=Z.salt.split("?"))==null?void 0:n[1]),H=D.get("expires")||D.get("expire");if(H){const _=new Date(+H*1e3),x=isNaN(_.getTime())?0:_.getTime()-Date.now();x>0&&ge(x)}if(A)try{const _=JSON.parse(A);_&&typeof _=="object"&&(_.verifyurl&&(_.verifyurl=new URL(_.verifyurl,new URL(a)).toString()),it(_))}catch(_){C("unable to configure from X-Altcha-Config",_)}if(!U&&(g!=null&&g.length)){const _=Date.parse(g);if(_){const x=_-Date.now();x>0&&ge(x)}}return Z}}function qe(){a&&z&&$===m.VERIFIED?ee():me(m.EXPIRED,l.expired)}async function Yt(n){let f=null;if("Worker"in window){try{f=await Kt(n.challenge,n.salt,n.algorithm,n.maxnumber)}catch(g){C(g)}if((f==null?void 0:f.number)!==void 0)return{data:n,solution:f}}return{data:n,solution:await $t(n.challenge,n.salt,n.algorithm,n.maxnumber||T).promise}}async function Kt(n,f,g,A=typeof h=="number"?h:T,Z=Math.ceil(fe)){const D=[];if(Z<1)throw new Error("Wrong number of workers configured.");if(Z>16)throw new Error("Too many workers. Max. 16 allowed workers.");for(let x=0;x{const st=be*H;return new Promise(or=>{x.addEventListener("message",ct=>{if(ct.data)for(const at of D)at!==x&&at.postMessage({type:"abort"});or(ct.data)}),x.postMessage({payload:{alg:g,challenge:n,max:st+H,salt:f,start:st},type:"work"})})}));for(const x of D)x.terminate();return _.find(x=>!!x)||null}function Jt(){[m.UNVERIFIED,m.ERROR,m.EXPIRED].includes($)?v&&(b==null?void 0:b.reportValidity())===!1?t(7,K=!1):ee():t(7,K=!0)}function Qe(n){const f=n.target;k&&f&&!E.contains(f)&&$===m.VERIFIED&&t(8,E.style.display="none",E)}function et(){k&&Ce()}function tt(){$===m.VERIFYING&&l.waitAlert&&alert(l.waitAlert)}function qt(n){k&&$!==m.UNVERIFIED&&requestAnimationFrame(()=>{Ce()})}function rt(){k&&Ce()}function ge(n){C("expire",n),B&&(clearTimeout(B),B=null),n<1?qe():B=setTimeout(qe,n)}function nt(n){C("floating",n),k!==n&&(t(8,E.style.left="",E),t(8,E.style.top="",E)),t(1,k=n===!0||n===""?"auto":n===!1||n==="false"?void 0:k),k?(s||t(0,s="onsubmit"),document.addEventListener("scroll",et),document.addEventListener("click",Qe),window.addEventListener("resize",rt)):s==="onsubmit"&&t(0,s=void 0)}function Qt(n){var g;const f=b==null?void 0:b.querySelector(typeof n=="string"?`input[name="${n}"]`:'input[type="email"]:not([data-no-spamfilter])');return((g=f==null?void 0:f.value)==null?void 0:g.slice(f.value.indexOf("@")))||void 0}function er(n){return[...(b==null?void 0:b.querySelectorAll(n!=null&&n.length?n.map(g=>`input[name="${g}"]`).join(", "):'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'))||[]].reduce((g,A)=>{const Z=A.name,D=A.value.trim();return Z&&D&&(g[Z]=D),g},{})}async function tr(n){if(!p)throw new Error("Attribute verifyurl not set.");C("requesting server verification from",p);const f={payload:n};if(v){const{email:Z,expectedLanguages:D,expectedCountries:H,fields:_,ipAddress:x,timeZone:be}=typeof v=="object"?v:{email:void 0,expectedCountries:void 0,expectedLanguages:void 0,fields:void 0,ipAddress:void 0,timeZone:void 0};f.ipAddress=x===!1?void 0:x||"auto",f.email=Z===!1?void 0:Qt(Z),f.fields=_===!1?void 0:er(_),f.timeZone=be===!1?void 0:be||Ht(),f.expectedCountries=H,f.expectedLanguages=D||(He?[He]:void 0)}const g=await fetch(p,{body:JSON.stringify(f),headers:{"content-type":"application/json"},method:"POST"});if(g.status!==200)throw new Error(`Server responded with ${g.status}.`);const A=await g.json();if(A!=null&&A.payload&&t(5,Q=A.payload),xe("serververification",A),u&&A.classification==="BAD")throw new Error("SpamFilter returned negative classification.")}function Ce(n=20){if(E)if(he||(he=(W?document.querySelector(W):b==null?void 0:b.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||b),he){const f=parseInt(J,10)||12,g=he.getBoundingClientRect(),A=E.getBoundingClientRect(),Z=document.documentElement.clientHeight,D=document.documentElement.clientWidth,H=k==="auto"?g.bottom+A.height+f+n>Z:k==="top",_=Math.max(n,Math.min(D-n-A.width,g.left+g.width/2-A.width/2));if(H?t(8,E.style.top=`${g.top-(A.height+f)}px`,E):t(8,E.style.top=`${g.bottom+f}px`,E),t(8,E.style.left=`${_}px`,E),E.setAttribute("data-floating",H?"top":"bottom"),q){const x=q.getBoundingClientRect();t(9,q.style.left=g.left-_+g.width/2-x.width/2+"px",q)}}else C("unable to find floating anchor element")}function it(n){n.auto!==void 0&&(t(0,s=n.auto),s==="onload"&&ee()),n.floatinganchor!==void 0&&t(18,W=n.floatinganchor),n.delay!==void 0&&t(16,S=n.delay),n.floatingoffset!==void 0&&t(19,J=n.floatingoffset),n.floating!==void 0&&nt(n.floating),n.expire!==void 0&&(ge(n.expire),t(17,U=n.expire)),n.challenge&&(Je(n.challenge),i=n.challenge),n.challengeurl!==void 0&&t(14,a=n.challengeurl),n.debug!==void 0&&t(15,G=!!n.debug),n.hidefooter!==void 0&&t(2,N=!!n.hidefooter),n.hidelogo!==void 0&&t(3,le=!!n.hidelogo),n.maxnumber!==void 0&&t(20,T=+n.maxnumber),n.mockerror!==void 0&&t(21,R=!!n.mockerror),n.name!==void 0&&t(4,Y=n.name),n.refetchonexpire!==void 0&&t(22,z=!!n.refetchonexpire),n.spamfilter!==void 0&&t(23,v=typeof n.spamfilter=="object"?n.spamfilter:!!n.spamfilter),n.strings&&t(34,o=n.strings),n.test!==void 0&&t(24,h=typeof n.test=="number"?n.test:!!n.test),n.verifyurl!==void 0&&t(25,p=n.verifyurl),n.workers!==void 0&&t(26,fe=+n.workers)}function me(n=m.UNVERIFIED,f=null){B&&(clearTimeout(B),B=null),t(7,K=!1),t(10,Ee=f),t(5,Q=null),t(6,$=n)}async function ee(){return me(m.VERIFYING),await new Promise(n=>setTimeout(n,S||0)),Pt().then(n=>(Je(n),C("challenge",n),Yt(n))).then(({data:n,solution:f})=>{if(C("solution",f),(f==null?void 0:f.number)!==void 0){if(p)return tr(Ke(n,f));t(5,Q=Ke(n,f)),C("payload",Q)}else throw C("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."),new Error("Unexpected result returned.")}).then(()=>{xt().then(()=>{t(6,$=m.VERIFIED),t(7,K=!0),C("verified"),xe("verified",{payload:Q})})}).catch(n=>{C(n),t(6,$=m.ERROR),t(7,K=!1),t(10,Ee=n.message)})}function rr(){K=this.checked,t(7,K)}function nr(n){ue[n?"unshift":"push"](()=>{q=n,t(9,q)})}function ir(n){ue[n?"unshift":"push"](()=>{E=n,t(8,E)})}return r.$$set=n=>{"auto"in n&&t(0,s=n.auto),"blockspam"in n&&t(27,u=n.blockspam),"challengeurl"in n&&t(14,a=n.challengeurl),"challengejson"in n&&t(28,d=n.challengejson),"debug"in n&&t(15,G=n.debug),"delay"in n&&t(16,S=n.delay),"expire"in n&&t(17,U=n.expire),"floating"in n&&t(1,k=n.floating),"floatinganchor"in n&&t(18,W=n.floatinganchor),"floatingoffset"in n&&t(19,J=n.floatingoffset),"hidefooter"in n&&t(2,N=n.hidefooter),"hidelogo"in n&&t(3,le=n.hidelogo),"name"in n&&t(4,Y=n.name),"maxnumber"in n&&t(20,T=n.maxnumber),"mockerror"in n&&t(21,R=n.mockerror),"refetchonexpire"in n&&t(22,z=n.refetchonexpire),"spamfilter"in n&&t(23,v=n.spamfilter),"strings"in n&&t(29,I=n.strings),"test"in n&&t(24,h=n.test),"verifyurl"in n&&t(25,p=n.verifyurl),"workers"in n&&t(26,fe=n.workers),"workerurl"in n&&t(30,ke=n.workerurl)},r.$$.update=()=>{r.$$.dirty[0]&268435456&&(i=d?We(d):void 0),r.$$.dirty[0]&536870912&&t(34,o=I?We(I):{}),r.$$.dirty[1]&8&&t(11,l={ariaLinkLabel:Fe,error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:`Protected by ALTCHA`,label:"I'm not a robot",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait.",...o}),r.$$.dirty[0]&96&&xe("statechange",{payload:Q,state:$}),r.$$.dirty[0]&64&&qt()},[s,k,N,le,Y,Q,$,K,E,q,Ee,l,Jt,tt,a,G,S,U,W,J,T,R,z,v,h,p,fe,u,d,I,ke,it,me,ee,o,rr,nr,ir]}class Xe extends Tt{constructor(e){super(),Nt(this,e,Ot,Bt,ut,{auto:0,blockspam:27,challengeurl:14,challengejson:28,debug:15,delay:16,expire:17,floating:1,floatinganchor:18,floatingoffset:19,hidefooter:2,hidelogo:3,name:4,maxnumber:20,mockerror:21,refetchonexpire:22,spamfilter:23,strings:29,test:24,verifyurl:25,workers:26,workerurl:30,configure:31,reset:32,verify:33},Dt,[-1,-1,-1])}get auto(){return this.$$.ctx[0]}set auto(e){this.$$set({auto:e}),w()}get blockspam(){return this.$$.ctx[27]}set blockspam(e){this.$$set({blockspam:e}),w()}get challengeurl(){return this.$$.ctx[14]}set challengeurl(e){this.$$set({challengeurl:e}),w()}get challengejson(){return this.$$.ctx[28]}set challengejson(e){this.$$set({challengejson:e}),w()}get debug(){return this.$$.ctx[15]}set debug(e){this.$$set({debug:e}),w()}get delay(){return this.$$.ctx[16]}set delay(e){this.$$set({delay:e}),w()}get expire(){return this.$$.ctx[17]}set expire(e){this.$$set({expire:e}),w()}get floating(){return this.$$.ctx[1]}set floating(e){this.$$set({floating:e}),w()}get floatinganchor(){return this.$$.ctx[18]}set floatinganchor(e){this.$$set({floatinganchor:e}),w()}get floatingoffset(){return this.$$.ctx[19]}set floatingoffset(e){this.$$set({floatingoffset:e}),w()}get hidefooter(){return this.$$.ctx[2]}set hidefooter(e){this.$$set({hidefooter:e}),w()}get hidelogo(){return this.$$.ctx[3]}set hidelogo(e){this.$$set({hidelogo:e}),w()}get name(){return this.$$.ctx[4]}set name(e){this.$$set({name:e}),w()}get maxnumber(){return this.$$.ctx[20]}set maxnumber(e){this.$$set({maxnumber:e}),w()}get mockerror(){return this.$$.ctx[21]}set mockerror(e){this.$$set({mockerror:e}),w()}get refetchonexpire(){return this.$$.ctx[22]}set refetchonexpire(e){this.$$set({refetchonexpire:e}),w()}get spamfilter(){return this.$$.ctx[23]}set spamfilter(e){this.$$set({spamfilter:e}),w()}get strings(){return this.$$.ctx[29]}set strings(e){this.$$set({strings:e}),w()}get test(){return this.$$.ctx[24]}set test(e){this.$$set({test:e}),w()}get verifyurl(){return this.$$.ctx[25]}set verifyurl(e){this.$$set({verifyurl:e}),w()}get workers(){return this.$$.ctx[26]}set workers(e){this.$$set({workers:e}),w()}get workerurl(){return this.$$.ctx[30]}set workerurl(e){this.$$set({workerurl:e}),w()}get configure(){return this.$$.ctx[31]}get reset(){return this.$$.ctx[32]}get verify(){return this.$$.ctx[33]}}customElements.define("altcha-widget",St(Xe,{auto:{},blockspam:{},challengeurl:{},challengejson:{},debug:{type:"Boolean"},delay:{},expire:{},floating:{},floatinganchor:{},floatingoffset:{},hidefooter:{type:"Boolean"},hidelogo:{type:"Boolean"},name:{},maxnumber:{},mockerror:{type:"Boolean"},refetchonexpire:{type:"Boolean"},spamfilter:{type:"Boolean"},strings:{},test:{type:"Boolean"},verifyurl:{},workers:{},workerurl:{}},[],["configure","reset","verify"],!1)),globalThis.createAltchaWorker=r=>r?new Worker(new URL(r)):new ft,F.Altcha=Xe,Object.defineProperty(F,Symbol.toStringTag,{value:"Module"})}); +(function(F,Z){typeof exports=="object"&&typeof module<"u"?Z(exports):typeof define=="function"&&define.amd?define(["exports"],Z):(F=typeof globalThis<"u"?globalThis:F||self,Z(F.altcha={}))})(this,function(F){"use strict";var lr=Object.defineProperty;var sr=(F,Z,te)=>Z in F?lr(F,Z,{enumerable:!0,configurable:!0,writable:!0,value:te}):F[Z]=te;var X=(F,Z,te)=>sr(F,typeof Z!="symbol"?Z+"":Z,te);const Z="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IGY9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIGQoZSl7cmV0dXJuWy4uLm5ldyBVaW50OEFycmF5KGUpXS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1hc3luYyBmdW5jdGlvbiBwKGUsdCxvKXtyZXR1cm4gZChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChvLnRvVXBwZXJDYXNlKCksZi5lbmNvZGUoZSt0KSkpfWZ1bmN0aW9uIGcoZSx0LG89IlNIQS0yNTYiLGw9MWU2LGM9MCl7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLGk9RGF0ZS5ub3coKTtyZXR1cm57cHJvbWlzZTooYXN5bmMoKT0+e2ZvcihsZXQgbj1jO248PWw7bis9MSl7aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm4gbnVsbDtpZihhd2FpdCBwKHQsbixvKT09PWUpcmV0dXJue251bWJlcjpuLHRvb2s6RGF0ZS5ub3coKS1pfX1yZXR1cm4gbnVsbH0pKCksY29udHJvbGxlcjphfX1sZXQgcjtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0e3R5cGU6dCxwYXlsb2FkOm99PWUuZGF0YTtpZih0PT09ImFib3J0IilyPT1udWxsfHxyLmFib3J0KCkscj12b2lkIDA7ZWxzZSBpZih0PT09IndvcmsiKXtjb25zdHthbGc6bCxjaGFsbGVuZ2U6YyxtYXg6YSxzYWx0Omksc3RhcnQ6dX09b3x8e30sbj1nKGMsaSxsLGEsdSk7cj1uLmNvbnRyb2xsZXIsbi5wcm9taXNlLnRoZW4ocz0+e3NlbGYucG9zdE1lc3NhZ2UocyYmey4uLnMsd29ya2VyOiEwfSl9KX19fSkoKTsK",te=r=>Uint8Array.from(atob(r),e=>e.charCodeAt(0)),Ae=typeof window<"u"&&window.Blob&&new Blob([te(Z)],{type:"text/javascript;charset=utf-8"});function ut(r){let e;try{if(e=Ae&&(window.URL||window.webkitURL).createObjectURL(Ae),!e)throw"";const t=new Worker(e,{name:r==null?void 0:r.name});return t.addEventListener("error",()=>{(window.URL||window.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+Z,{name:r==null?void 0:r.name})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}function re(){}function Ne(r){return r()}function Se(){return Object.create(null)}function se(r){r.forEach(Ne)}function Te(r){return typeof r=="function"}function dt(r,e){return r!=r?e==e:r!==e||r&&typeof r=="object"||typeof r=="function"}function ht(r){return Object.keys(r).length===0}function y(r,e){r.appendChild(e)}function gt(r,e,t){const i=mt(r);if(!i.getElementById(e)){const o=L("style");o.id=e,o.textContent=t,bt(i,o)}}function mt(r){if(!r)return document;const e=r.getRootNode?r.getRootNode():r.ownerDocument;return e&&e.host?e:r.ownerDocument}function bt(r,e){return y(r.head||r,e),e.sheet}function M(r,e,t){r.insertBefore(e,t||null)}function j(r){r.parentNode&&r.parentNode.removeChild(r)}function L(r){return document.createElement(r)}function O(r){return document.createElementNS("http://www.w3.org/2000/svg",r)}function vt(r){return document.createTextNode(r)}function P(){return vt(" ")}function pe(r,e,t,i){return r.addEventListener(e,t,i),()=>r.removeEventListener(e,t,i)}function c(r,e,t){t==null?r.removeAttribute(e):r.getAttribute(e)!==t&&r.setAttribute(e,t)}function wt(r){return Array.from(r.childNodes)}function je(r,e,t){r.classList.toggle(e,!!t)}function yt(r,e,{bubbles:t=!1,cancelable:i=!1}={}){return new CustomEvent(r,{detail:e,bubbles:t,cancelable:i})}function pt(r){const e={};return r.childNodes.forEach(t=>{e[t.slot||"default"]=!0}),e}let ce;function ae(r){ce=r}function _e(){if(!ce)throw new Error("Function called outside component initialization");return ce}function _t(r){_e().$$.on_mount.push(r)}function kt(r){_e().$$.on_destroy.push(r)}function xt(){const r=_e();return(e,t,{cancelable:i=!1}={})=>{const o=r.$$.callbacks[e];if(o){const l=yt(e,t,{cancelable:i});return o.slice().forEach(s=>{s.call(r,l)}),!l.defaultPrevented}return!0}}const ne=[],he=[];let ie=[];const Ze=[],Me=Promise.resolve();let ke=!1;function Ve(){ke||(ke=!0,Me.then(v))}function Et(){return Ve(),Me}function xe(r){ie.push(r)}const Ee=new Set;let oe=0;function v(){if(oe!==0)return;const r=ce;do{try{for(;oer.indexOf(i)===-1?e.push(i):t.push(i)),t.forEach(i=>i()),ie=e}const Rt=new Set;function zt(r,e){r&&r.i&&(Rt.delete(r),r.i(e))}function It(r,e,t){const{fragment:i,after_update:o}=r.$$;i&&i.m(e,t),xe(()=>{const l=r.$$.on_mount.map(Ne).filter(Te);r.$$.on_destroy?r.$$.on_destroy.push(...l):se(l),r.$$.on_mount=[]}),o.forEach(xe)}function At(r,e){const t=r.$$;t.fragment!==null&&(Lt(t.after_update),se(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Nt(r,e){r.$$.dirty[0]===-1&&(ne.push(r),Ve(),r.$$.dirty.fill(0)),r.$$.dirty[e/31|0]|=1<{const W=k.length?k[0]:U;return d.ctx&&o(d.ctx[S],d.ctx[S]=W)&&(!d.skip_bound&&d.bound[S]&&d.bound[S](W),G&&Nt(r,S)),U}):[],d.update(),G=!0,se(d.before_update),d.fragment=i?i(d.ctx):!1,e.target){if(e.hydrate){const S=wt(e.target);d.fragment&&d.fragment.l(S),S.forEach(j)}else d.fragment&&d.fragment.c();e.intro&&zt(r.$$.fragment),It(r,e.target,e.anchor),v()}ae(f)}let $e;typeof HTMLElement=="function"&&($e=class extends HTMLElement{constructor(e,t,i){super();X(this,"$$ctor");X(this,"$$s");X(this,"$$c");X(this,"$$cn",!1);X(this,"$$d",{});X(this,"$$r",!1);X(this,"$$p_d",{});X(this,"$$l",{});X(this,"$$l_u",new Map);this.$$ctor=e,this.$$s=t,i&&this.attachShadow({mode:"open"})}addEventListener(e,t,i){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const o=this.$$c.$on(e,t);this.$$l_u.set(t,o)}super.addEventListener(e,t,i)}removeEventListener(e,t,i){if(super.removeEventListener(e,t,i),this.$$c){const o=this.$$l_u.get(t);o&&(o(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let e=function(l){return()=>{let s;return{c:function(){s=L("slot"),l!=="default"&&c(s,"name",l)},m:function(d,G){M(d,s,G)},d:function(d){d&&j(s)}}}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const t={},i=pt(this);for(const l of this.$$s)l in i&&(t[l]=[e(l)]);for(const l of this.attributes){const s=this.$$g_p(l.name);s in this.$$d||(this.$$d[s]=ge(s,l.value,this.$$p_d,"toProp"))}for(const l in this.$$p_d)!(l in this.$$d)&&this[l]!==void 0&&(this.$$d[l]=this[l],delete this[l]);this.$$c=new this.$$ctor({target:this.shadowRoot||this,props:{...this.$$d,$$slots:t,$$scope:{ctx:[]}}});const o=()=>{this.$$r=!0;for(const l in this.$$p_d)if(this.$$d[l]=this.$$c.$$.ctx[this.$$c.$$.props[l]],this.$$p_d[l].reflect){const s=ge(l,this.$$d[l],this.$$p_d,"toAttribute");s==null?this.removeAttribute(this.$$p_d[l].attribute||l):this.setAttribute(this.$$p_d[l].attribute||l,s)}this.$$r=!1};this.$$c.$$.after_update.push(o),o();for(const l in this.$$l)for(const s of this.$$l[l]){const u=this.$$c.$on(l,s);this.$$l_u.set(s,u)}this.$$l={}}}attributeChangedCallback(e,t,i){var o;this.$$r||(e=this.$$g_p(e),this.$$d[e]=ge(e,i,this.$$p_d,"toProp"),(o=this.$$c)==null||o.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{this.$$cn||(this.$$c.$destroy(),this.$$c=void 0)})}$$g_p(e){return Object.keys(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});function ge(r,e,t,i){var l;const o=(l=t[r])==null?void 0:l.type;if(e=o==="Boolean"&&typeof e!="boolean"?e!=null:e,!i||!t[r])return e;if(i==="toAttribute")switch(o){case"Object":case"Array":return e==null?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return e??null;default:return e}else switch(o){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":return e;case"Number":return e!=null?+e:e;default:return e}}function Tt(r,e,t,i,o,l){let s=class extends $e{constructor(){super(r,t,o),this.$$p_d=e}static get observedAttributes(){return Object.keys(e).map(u=>(e[u].attribute||u).toLowerCase())}};return Object.keys(e).forEach(u=>{Object.defineProperty(s.prototype,u,{get(){return this.$$c&&u in this.$$c?this.$$c[u]:this.$$d[u]},set(f){var d;f=ge(u,f,e),this.$$d[u]=f,(d=this.$$c)==null||d.$set({[u]:f})}})}),i.forEach(u=>{Object.defineProperty(s.prototype,u,{get(){var f;return(f=this.$$c)==null?void 0:f[u]}})}),l&&(s=l(s)),r.element=s,s}class jt{constructor(){X(this,"$$");X(this,"$$set")}$destroy(){At(this,1),this.$destroy=re}$on(e,t){if(!Te(t))return re;const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(t),()=>{const o=i.indexOf(t);o!==-1&&i.splice(o,1)}}$set(e){this.$$set&&!ht(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Zt="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Zt);const Mt=new TextEncoder;function Vt(r){return[...new Uint8Array(r)].map(e=>e.toString(16).padStart(2,"0")).join("")}async function $t(r,e="SHA-256",t=1e5){const i=Date.now().toString(16);r||(r=Math.round(Math.random()*t));const o=await De(i,r,e);return{algorithm:e,challenge:o,salt:i,signature:""}}async function De(r,e,t){return Vt(await crypto.subtle.digest(t.toUpperCase(),Mt.encode(r+e)))}function Dt(r,e,t="SHA-256",i=1e6,o=0){const l=new AbortController,s=Date.now();return{promise:(async()=>{for(let f=o;f<=i;f+=1){if(l.signal.aborted)return null;if(await De(e,f,t)===r)return{number:f,took:Date.now()-s}}return null})(),controller:l}}var m=(r=>(r.ERROR="error",r.VERIFIED="verified",r.VERIFYING="verifying",r.UNVERIFIED="unverified",r.EXPIRED="expired",r))(m||{});function Ut(r){gt(r,"svelte-ddsc3z",'.altcha.svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, transparent);border:var(--altcha-border-width, 1px) solid var(--altcha-color-border, #a0a0a0);border-radius:var(--altcha-border-radius, 3px);color:var(--altcha-color-text, currentColor);display:flex;flex-direction:column;max-width:var(--altcha-max-width, 260px);position:relative;text-align:left}.altcha.svelte-ddsc3z.svelte-ddsc3z:focus-within{border-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, white);display:none;filter:drop-shadow(3px 3px 6px rgba(0, 0, 0, 0.2));left:-100%;position:fixed;top:-100%;width:var(--altcha-max-width, 260px);z-index:999999}.altcha[data-floating=top].svelte-ddsc3z .altcha-anchor-arrow.svelte-ddsc3z{border-bottom-color:transparent;border-top-color:var(--altcha-color-border, #a0a0a0);bottom:-12px;top:auto}.altcha[data-floating=bottom].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-bottom-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating=top].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-top-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z:not([data-state=unverified]){display:block}.altcha-anchor-arrow.svelte-ddsc3z.svelte-ddsc3z{border:6px solid transparent;border-bottom-color:var(--altcha-color-border, #a0a0a0);content:"";height:0;left:12px;position:absolute;top:-12px;width:0}.altcha-main.svelte-ddsc3z.svelte-ddsc3z{align-items:center;display:flex;gap:0.4rem;padding:0.7rem}.altcha-label.svelte-ddsc3z.svelte-ddsc3z{flex-grow:1}.altcha-label.svelte-ddsc3z label.svelte-ddsc3z{cursor:pointer}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z{color:currentColor;opacity:0.3}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-error.svelte-ddsc3z.svelte-ddsc3z{color:var(--altcha-color-error-text, #f23939);display:flex;font-size:0.85rem;gap:0.3rem;padding:0 0.7rem 0.7rem}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z{align-items:center;background-color:var(--altcha-color-footer-bg, transparent);display:flex;font-size:0.75rem;opacity:0.4;padding:0.2rem 0.7rem;text-align:right}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-footer.svelte-ddsc3z>.svelte-ddsc3z:first-child{flex-grow:1}.altcha-footer.svelte-ddsc3z a{color:currentColor}.altcha-checkbox.svelte-ddsc3z.svelte-ddsc3z{display:flex;align-items:center;height:24px;width:24px}.altcha-checkbox.svelte-ddsc3z input.svelte-ddsc3z{width:18px;height:18px;margin:0}.altcha-hidden.svelte-ddsc3z.svelte-ddsc3z{display:none}.altcha-spinner.svelte-ddsc3z.svelte-ddsc3z{animation:svelte-ddsc3z-altcha-spinner 0.75s infinite linear;transform-origin:center}@keyframes svelte-ddsc3z-altcha-spinner{100%{transform:rotate(360deg)}}')}function Ue(r){let e,t,i;return{c(){e=O("svg"),t=O("path"),i=O("path"),c(t,"d","M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"),c(t,"fill","currentColor"),c(t,"opacity",".25"),c(i,"d","M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"),c(i,"fill","currentColor"),c(i,"class","altcha-spinner svelte-ddsc3z"),c(e,"width","24"),c(e,"height","24"),c(e,"viewBox","0 0 24 24"),c(e,"xmlns","http://www.w3.org/2000/svg")},m(o,l){M(o,e,l),y(e,t),y(e,i)},d(o){o&&j(e)}}}function Ft(r){let e,t=r[11].label+"",i;return{c(){e=L("label"),c(e,"for",i=r[4]+"_checkbox"),c(e,"class","svelte-ddsc3z")},m(o,l){M(o,e,l),e.innerHTML=t},p(o,l){l[0]&2048&&t!==(t=o[11].label+"")&&(e.innerHTML=t),l[0]&16&&i!==(i=o[4]+"_checkbox")&&c(e,"for",i)},d(o){o&&j(e)}}}function Gt(r){let e,t=r[11].verifying+"";return{c(){e=L("span")},m(i,o){M(i,e,o),e.innerHTML=t},p(i,o){o[0]&2048&&t!==(t=i[11].verifying+"")&&(e.innerHTML=t)},d(i){i&&j(e)}}}function Wt(r){let e,t=r[11].verified+"",i,o;return{c(){e=L("span"),i=P(),o=L("input"),c(o,"type","hidden"),c(o,"name",r[4]),o.value=r[5]},m(l,s){M(l,e,s),e.innerHTML=t,M(l,i,s),M(l,o,s)},p(l,s){s[0]&2048&&t!==(t=l[11].verified+"")&&(e.innerHTML=t),s[0]&16&&c(o,"name",l[4]),s[0]&32&&(o.value=l[5])},d(l){l&&(j(e),j(i),j(o))}}}function Fe(r){let e,t,i,o,l,s,u;return{c(){e=L("div"),t=L("a"),i=O("svg"),o=O("path"),l=O("path"),s=O("path"),c(o,"d","M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"),c(o,"fill","currentColor"),c(l,"d","M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"),c(l,"fill","currentColor"),c(s,"d","M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"),c(s,"fill","currentColor"),c(i,"width","22"),c(i,"height","22"),c(i,"viewBox","0 0 20 20"),c(i,"fill","none"),c(i,"xmlns","http://www.w3.org/2000/svg"),c(t,"href",He),c(t,"target","_blank"),c(t,"class","altcha-logo svelte-ddsc3z"),c(t,"aria-label",u=r[11].ariaLinkLabel)},m(f,d){M(f,e,d),y(e,t),y(t,i),y(i,o),y(i,l),y(i,s)},p(f,d){d[0]&2048&&u!==(u=f[11].ariaLinkLabel)&&c(t,"aria-label",u)},d(f){f&&j(e)}}}function Ge(r){let e,t,i,o;function l(f,d){return f[6]===m.EXPIRED?Bt:Xt}let s=l(r),u=s(r);return{c(){e=L("div"),t=O("svg"),i=O("path"),o=P(),u.c(),c(i,"stroke-linecap","round"),c(i,"stroke-linejoin","round"),c(i,"d","M6 18L18 6M6 6l12 12"),c(t,"width","14"),c(t,"height","14"),c(t,"xmlns","http://www.w3.org/2000/svg"),c(t,"fill","none"),c(t,"viewBox","0 0 24 24"),c(t,"stroke-width","1.5"),c(t,"stroke","currentColor"),c(e,"class","altcha-error svelte-ddsc3z")},m(f,d){M(f,e,d),y(e,t),y(t,i),y(e,o),u.m(e,null)},p(f,d){s===(s=l(f))&&u?u.p(f,d):(u.d(1),u=s(f),u&&(u.c(),u.m(e,null)))},d(f){f&&j(e),u.d()}}}function Xt(r){let e,t=r[11].error+"";return{c(){e=L("div"),c(e,"title",r[10])},m(i,o){M(i,e,o),e.innerHTML=t},p(i,o){o[0]&2048&&t!==(t=i[11].error+"")&&(e.innerHTML=t),o[0]&1024&&c(e,"title",i[10])},d(i){i&&j(e)}}}function Bt(r){let e,t=r[11].expired+"";return{c(){e=L("div"),c(e,"title",r[10])},m(i,o){M(i,e,o),e.innerHTML=t},p(i,o){o[0]&2048&&t!==(t=i[11].expired+"")&&(e.innerHTML=t),o[0]&1024&&c(e,"title",i[10])},d(i){i&&j(e)}}}function We(r){let e,t,i=r[11].footer+"";return{c(){e=L("div"),t=L("div"),c(t,"class","svelte-ddsc3z"),c(e,"class","altcha-footer svelte-ddsc3z")},m(o,l){M(o,e,l),y(e,t),t.innerHTML=i},p(o,l){l[0]&2048&&i!==(i=o[11].footer+"")&&(t.innerHTML=i)},d(o){o&&j(e)}}}function Xe(r){let e;return{c(){e=L("div"),c(e,"class","altcha-anchor-arrow svelte-ddsc3z")},m(t,i){M(t,e,i),r[36](e)},p:re,d(t){t&&j(e),r[36](null)}}}function Ht(r){let e,t,i,o,l,s,u,f,d,G,S,U,k,W,J,N=r[6]===m.VERIFYING&&Ue();function le(h,p){return h[6]===m.VERIFIED?Wt:h[6]===m.VERIFYING?Gt:Ft}let Y=le(r),T=Y(r),R=r[3]!==!0&&Fe(r),z=(r[10]||r[6]===m.EXPIRED)&&Ge(r),w=r[11].footer&&r[2]!==!0&&We(r),I=r[1]&&Xe(r);return{c(){e=L("div"),t=L("div"),N&&N.c(),i=P(),o=L("div"),l=L("input"),f=P(),d=L("div"),T.c(),G=P(),R&&R.c(),S=P(),z&&z.c(),U=P(),w&&w.c(),k=P(),I&&I.c(),c(l,"type","checkbox"),c(l,"id",s=r[4]+"_checkbox"),l.required=u=r[0]!=="onsubmit",c(l,"class","svelte-ddsc3z"),c(o,"class","altcha-checkbox svelte-ddsc3z"),je(o,"altcha-hidden",r[6]===m.VERIFYING),c(d,"class","altcha-label svelte-ddsc3z"),c(t,"class","altcha-main svelte-ddsc3z"),c(e,"class","altcha svelte-ddsc3z"),c(e,"data-state",r[6]),c(e,"data-floating",r[1])},m(h,p){M(h,e,p),y(e,t),N&&N.m(t,null),y(t,i),y(t,o),y(o,l),l.checked=r[7],y(t,f),y(t,d),T.m(d,null),y(t,G),R&&R.m(t,null),y(e,S),z&&z.m(e,null),y(e,U),w&&w.m(e,null),y(e,k),I&&I.m(e,null),r[37](e),W||(J=[pe(l,"change",r[35]),pe(l,"change",r[12]),pe(l,"invalid",r[13])],W=!0)},p(h,p){h[6]===m.VERIFYING?N||(N=Ue(),N.c(),N.m(t,i)):N&&(N.d(1),N=null),p[0]&16&&s!==(s=h[4]+"_checkbox")&&c(l,"id",s),p[0]&1&&u!==(u=h[0]!=="onsubmit")&&(l.required=u),p[0]&128&&(l.checked=h[7]),p[0]&64&&je(o,"altcha-hidden",h[6]===m.VERIFYING),Y===(Y=le(h))&&T?T.p(h,p):(T.d(1),T=Y(h),T&&(T.c(),T.m(d,null))),h[3]!==!0?R?R.p(h,p):(R=Fe(h),R.c(),R.m(t,null)):R&&(R.d(1),R=null),h[10]||h[6]===m.EXPIRED?z?z.p(h,p):(z=Ge(h),z.c(),z.m(e,U)):z&&(z.d(1),z=null),h[11].footer&&h[2]!==!0?w?w.p(h,p):(w=We(h),w.c(),w.m(e,k)):w&&(w.d(1),w=null),h[1]?I?I.p(h,p):(I=Xe(h),I.c(),I.m(e,null)):I&&(I.d(1),I=null),p[0]&64&&c(e,"data-state",h[6]),p[0]&2&&c(e,"data-floating",h[1])},i:re,o:re,d(h){h&&j(e),N&&N.d(),T.d(),R&&R.d(),z&&z.d(),w&&w.d(),I&&I.d(),r[37](null),W=!1,se(J)}}}const Be="Visit Altcha.org",He="https://altcha.org/";function Oe(r){return JSON.parse(r)}function Ot(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Pt(r,e,t){var at,ft;let i,o,l,{auto:s=void 0}=e,{blockspam:u=void 0}=e,{challengeurl:f=void 0}=e,{challengejson:d=void 0}=e,{debug:G=!1}=e,{delay:S=0}=e,{expire:U=void 0}=e,{floating:k=void 0}=e,{floatinganchor:W=void 0}=e,{floatingoffset:J=void 0}=e,{hidefooter:N=!1}=e,{hidelogo:le=!1}=e,{name:Y="altcha"}=e,{maxnumber:T=1e6}=e,{mockerror:R=!1}=e,{refetchonexpire:z=!0}=e,{spamfilter:w=!1}=e,{strings:I=void 0}=e,{test:h=!1}=e,{verifyurl:p=void 0}=e,{workers:fe=Math.min(16,navigator.hardwareConcurrency||8)}=e,{workerurl:Ce=void 0}=e;const Le=xt(),Ye=["SHA-256","SHA-384","SHA-512"],Ke=(ft=(at=document.documentElement.lang)==null?void 0:at.split("-"))==null?void 0:ft[0];let K=!1,x,q=null,me=null,b=null,Re=null,Q=null,V=m.UNVERIFIED,B=null;kt(()=>{b&&(b.removeEventListener("submit",qe),b.removeEventListener("reset",Qe),b.removeEventListener("focusin",Je),b=null),B&&(clearTimeout(B),B=null),document.removeEventListener("click",nt),document.removeEventListener("scroll",it),window.removeEventListener("resize",lt)}),_t(()=>{E("mounted","0.6.1"),E("workers",fe),h&&E("using test mode"),U&&be(U),s!==void 0&&E("auto",s),k!==void 0&&st(k),b=x.closest("form"),b&&(b.addEventListener("submit",qe,{capture:!0}),b.addEventListener("reset",Qe),s==="onfocus"&&b.addEventListener("focusin",Je)),s==="onload"&&ee()});function E(...n){(G||n.some(a=>a instanceof Error))&&console[n[0]instanceof Error?"error":"log"]("ALTCHA",...n)}function Je(n){V===m.UNVERIFIED&&ee()}function qe(n){b&&s==="onsubmit"&&(V===m.UNVERIFIED?(n.preventDefault(),n.stopPropagation(),ee().then(()=>{b==null||b.requestSubmit()})):V!==m.VERIFIED&&(n.preventDefault(),n.stopPropagation(),V===m.VERIFYING&&ot()))}function Qe(){ve()}function et(n,a){return btoa(JSON.stringify({algorithm:n.algorithm,challenge:n.challenge,number:a.number,salt:n.salt,signature:n.signature,test:h?!0:void 0,took:a.took}))}function tt(n){if(!n.algorithm)throw new Error("Invalid challenge. Property algorithm is missing.");if(n.signature===void 0)throw new Error("Invalid challenge. Property signature is missing.");if(!Ye.includes(n.algorithm.toUpperCase()))throw new Error(`Unknown algorithm value. Allowed values: ${Ye.join(", ")}`);if(!n.challenge||n.challenge.length<40)throw new Error("Challenge is too short. Min. 40 chars.");if(!n.salt||n.salt.length<10)throw new Error("Salt is too short. Min. 10 chars.")}async function Yt(){var n;if(R)throw E("mocking error"),new Error("Mocked error.");if(i)return E("using provided json data"),i;if(h)return E("generating test challenge",{test:h}),$t(typeof h!="boolean"?+h:void 0);{if(!f)throw new Error("Attribute challengeurl not set.");E("fetching challenge from",f);const a=await fetch(f,{headers:{"x-altcha-spam-filter":w?"1":"0"}});if(a.status!==200)throw new Error(`Server responded with ${a.status}.`);const g=a.headers.get("Expires"),A=a.headers.get("X-Altcha-Config"),$=await a.json(),D=new URLSearchParams((n=$.salt.split("?"))==null?void 0:n[1]),H=D.get("expires")||D.get("expire");if(H){const _=new Date(+H*1e3),C=isNaN(_.getTime())?0:_.getTime()-Date.now();C>0&&be(C)}if(A)try{const _=JSON.parse(A);_&&typeof _=="object"&&(_.verifyurl&&(_.verifyurl=new URL(_.verifyurl,new URL(f)).toString()),ct(_))}catch(_){E("unable to configure from X-Altcha-Config",_)}if(!U&&(g!=null&&g.length)){const _=Date.parse(g);if(_){const C=_-Date.now();C>0&&be(C)}}return $}}function rt(){f&&z&&V===m.VERIFIED?ee():ve(m.EXPIRED,l.expired)}async function Kt(n){let a=null;if("Worker"in window){try{a=await Jt(n.challenge,n.salt,n.algorithm,n.maxnumber)}catch(g){E(g)}if((a==null?void 0:a.number)!==void 0)return{data:n,solution:a}}return{data:n,solution:await Dt(n.challenge,n.salt,n.algorithm,n.maxnumber||T).promise}}async function Jt(n,a,g,A=typeof h=="number"?h:T,$=Math.ceil(fe)){const D=[];if($<1)throw new Error("Wrong number of workers configured.");if($>16)throw new Error("Too many workers. Max. 16 allowed workers.");for(let C=0;C<$;C++)D.push(createAltchaWorker(Ce));const H=Math.ceil(A/$),_=await Promise.all(D.map((C,Ie)=>{const ue=Ie*H;return new Promise(we=>{C.addEventListener("message",ye=>{if(ye.data)for(const de of D)de!==C&&de.postMessage({type:"abort"});we(ye.data)}),C.postMessage({payload:{alg:g,challenge:n,max:ue+H,salt:a,start:ue},type:"work"})})}));for(const C of D)C.terminate();return _.find(C=>!!C)||null}function qt(){[m.UNVERIFIED,m.ERROR,m.EXPIRED].includes(V)?w&&(b==null?void 0:b.reportValidity())===!1?t(7,K=!1):ee():t(7,K=!0)}function nt(n){const a=n.target;k&&a&&!x.contains(a)&&V===m.VERIFIED&&t(8,x.style.display="none",x)}function it(){k&&ze()}function ot(){V===m.VERIFYING&&l.waitAlert&&alert(l.waitAlert)}function Qt(n){k&&V!==m.UNVERIFIED&&requestAnimationFrame(()=>{ze()})}function lt(){k&&ze()}function be(n){E("expire",n),B&&(clearTimeout(B),B=null),n<1?rt():B=setTimeout(rt,n)}function st(n){E("floating",n),k!==n&&(t(8,x.style.left="",x),t(8,x.style.top="",x)),t(1,k=n===!0||n===""?"auto":n===!1||n==="false"?void 0:k),k?(s||t(0,s="onsubmit"),document.addEventListener("scroll",it),document.addEventListener("click",nt),window.addEventListener("resize",lt)):s==="onsubmit"&&t(0,s=void 0)}function er(n){var g;const a=b==null?void 0:b.querySelector(typeof n=="string"?`input[name="${n}"]`:'input[type="email"]:not([data-no-spamfilter])');return((g=a==null?void 0:a.value)==null?void 0:g.slice(a.value.indexOf("@")))||void 0}function tr(n){return[...(b==null?void 0:b.querySelectorAll(n!=null&&n.length?n.map(g=>`input[name="${g}"]`).join(", "):'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'))||[]].reduce((g,A)=>{const $=A.name,D=A.value.trim();return $&&D&&(g[$]=D),g},{})}async function rr(n){if(!p)throw new Error("Attribute verifyurl not set.");E("requesting server verification from",p);const a={payload:n};if(w){const{blockedCountries:$,classifier:D,disableRules:H,email:_,expectedLanguages:C,expectedCountries:Ie,fields:ue,ipAddress:we,text:ye,timeZone:de}=typeof w=="object"?w:{blockedCountries:void 0,classifier:void 0,disableRules:void 0,email:void 0,expectedCountries:void 0,expectedLanguages:void 0,fields:void 0,ipAddress:void 0,text:void 0,timeZone:void 0};a.blockedCountries=$,a.classifier=D,a.disableRules=H,a.email=_===!1?void 0:er(_),a.expectedCountries=Ie,a.expectedLanguages=C||(Ke?[Ke]:void 0),a.fields=ue===!1?void 0:tr(ue),a.ipAddress=we===!1?void 0:we||"auto",a.text=ye,a.timeZone=de===!1?void 0:de||Ot()}const g=await fetch(p,{body:JSON.stringify(a),headers:{"content-type":"application/json"},method:"POST"});if(g.status!==200)throw new Error(`Server responded with ${g.status}.`);const A=await g.json();if(A!=null&&A.payload&&t(5,Q=A.payload),Le("serververification",A),u&&A.classification==="BAD")throw new Error("SpamFilter returned negative classification.")}function ze(n=20){if(x)if(me||(me=(W?document.querySelector(W):b==null?void 0:b.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||b),me){const a=parseInt(J,10)||12,g=me.getBoundingClientRect(),A=x.getBoundingClientRect(),$=document.documentElement.clientHeight,D=document.documentElement.clientWidth,H=k==="auto"?g.bottom+A.height+a+n>$:k==="top",_=Math.max(n,Math.min(D-n-A.width,g.left+g.width/2-A.width/2));if(H?t(8,x.style.top=`${g.top-(A.height+a)}px`,x):t(8,x.style.top=`${g.bottom+a}px`,x),t(8,x.style.left=`${_}px`,x),x.setAttribute("data-floating",H?"top":"bottom"),q){const C=q.getBoundingClientRect();t(9,q.style.left=g.left-_+g.width/2-C.width/2+"px",q)}}else E("unable to find floating anchor element")}function ct(n){n.auto!==void 0&&(t(0,s=n.auto),s==="onload"&&ee()),n.floatinganchor!==void 0&&t(18,W=n.floatinganchor),n.delay!==void 0&&t(16,S=n.delay),n.floatingoffset!==void 0&&t(19,J=n.floatingoffset),n.floating!==void 0&&st(n.floating),n.expire!==void 0&&(be(n.expire),t(17,U=n.expire)),n.challenge&&(tt(n.challenge),i=n.challenge),n.challengeurl!==void 0&&t(14,f=n.challengeurl),n.debug!==void 0&&t(15,G=!!n.debug),n.hidefooter!==void 0&&t(2,N=!!n.hidefooter),n.hidelogo!==void 0&&t(3,le=!!n.hidelogo),n.maxnumber!==void 0&&t(20,T=+n.maxnumber),n.mockerror!==void 0&&t(21,R=!!n.mockerror),n.name!==void 0&&t(4,Y=n.name),n.refetchonexpire!==void 0&&t(22,z=!!n.refetchonexpire),n.spamfilter!==void 0&&t(23,w=typeof n.spamfilter=="object"?n.spamfilter:!!n.spamfilter),n.strings&&t(34,o=n.strings),n.test!==void 0&&t(24,h=typeof n.test=="number"?n.test:!!n.test),n.verifyurl!==void 0&&t(25,p=n.verifyurl),n.workers!==void 0&&t(26,fe=+n.workers)}function ve(n=m.UNVERIFIED,a=null){B&&(clearTimeout(B),B=null),t(7,K=!1),t(10,Re=a),t(5,Q=null),t(6,V=n)}async function ee(){return ve(m.VERIFYING),await new Promise(n=>setTimeout(n,S||0)),Yt().then(n=>(tt(n),E("challenge",n),Kt(n))).then(({data:n,solution:a})=>{if(E("solution",a),(a==null?void 0:a.number)!==void 0){if(p)return rr(et(n,a));t(5,Q=et(n,a)),E("payload",Q)}else throw E("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."),new Error("Unexpected result returned.")}).then(()=>{Et().then(()=>{t(6,V=m.VERIFIED),t(7,K=!0),E("verified"),Le("verified",{payload:Q})})}).catch(n=>{E(n),t(6,V=m.ERROR),t(7,K=!1),t(10,Re=n.message)})}function nr(){K=this.checked,t(7,K)}function ir(n){he[n?"unshift":"push"](()=>{q=n,t(9,q)})}function or(n){he[n?"unshift":"push"](()=>{x=n,t(8,x)})}return r.$$set=n=>{"auto"in n&&t(0,s=n.auto),"blockspam"in n&&t(27,u=n.blockspam),"challengeurl"in n&&t(14,f=n.challengeurl),"challengejson"in n&&t(28,d=n.challengejson),"debug"in n&&t(15,G=n.debug),"delay"in n&&t(16,S=n.delay),"expire"in n&&t(17,U=n.expire),"floating"in n&&t(1,k=n.floating),"floatinganchor"in n&&t(18,W=n.floatinganchor),"floatingoffset"in n&&t(19,J=n.floatingoffset),"hidefooter"in n&&t(2,N=n.hidefooter),"hidelogo"in n&&t(3,le=n.hidelogo),"name"in n&&t(4,Y=n.name),"maxnumber"in n&&t(20,T=n.maxnumber),"mockerror"in n&&t(21,R=n.mockerror),"refetchonexpire"in n&&t(22,z=n.refetchonexpire),"spamfilter"in n&&t(23,w=n.spamfilter),"strings"in n&&t(29,I=n.strings),"test"in n&&t(24,h=n.test),"verifyurl"in n&&t(25,p=n.verifyurl),"workers"in n&&t(26,fe=n.workers),"workerurl"in n&&t(30,Ce=n.workerurl)},r.$$.update=()=>{r.$$.dirty[0]&268435456&&(i=d?Oe(d):void 0),r.$$.dirty[0]&536870912&&t(34,o=I?Oe(I):{}),r.$$.dirty[1]&8&&t(11,l={ariaLinkLabel:Be,error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:`Protected by ALTCHA`,label:"I'm not a robot",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait.",...o}),r.$$.dirty[0]&96&&Le("statechange",{payload:Q,state:V}),r.$$.dirty[0]&64&&Qt()},[s,k,N,le,Y,Q,V,K,x,q,Re,l,qt,ot,f,G,S,U,W,J,T,R,z,w,h,p,fe,u,d,I,Ce,ct,ve,ee,o,nr,ir,or]}class Pe extends jt{constructor(e){super(),St(this,e,Pt,Ht,dt,{auto:0,blockspam:27,challengeurl:14,challengejson:28,debug:15,delay:16,expire:17,floating:1,floatinganchor:18,floatingoffset:19,hidefooter:2,hidelogo:3,name:4,maxnumber:20,mockerror:21,refetchonexpire:22,spamfilter:23,strings:29,test:24,verifyurl:25,workers:26,workerurl:30,configure:31,reset:32,verify:33},Ut,[-1,-1,-1])}get auto(){return this.$$.ctx[0]}set auto(e){this.$$set({auto:e}),v()}get blockspam(){return this.$$.ctx[27]}set blockspam(e){this.$$set({blockspam:e}),v()}get challengeurl(){return this.$$.ctx[14]}set challengeurl(e){this.$$set({challengeurl:e}),v()}get challengejson(){return this.$$.ctx[28]}set challengejson(e){this.$$set({challengejson:e}),v()}get debug(){return this.$$.ctx[15]}set debug(e){this.$$set({debug:e}),v()}get delay(){return this.$$.ctx[16]}set delay(e){this.$$set({delay:e}),v()}get expire(){return this.$$.ctx[17]}set expire(e){this.$$set({expire:e}),v()}get floating(){return this.$$.ctx[1]}set floating(e){this.$$set({floating:e}),v()}get floatinganchor(){return this.$$.ctx[18]}set floatinganchor(e){this.$$set({floatinganchor:e}),v()}get floatingoffset(){return this.$$.ctx[19]}set floatingoffset(e){this.$$set({floatingoffset:e}),v()}get hidefooter(){return this.$$.ctx[2]}set hidefooter(e){this.$$set({hidefooter:e}),v()}get hidelogo(){return this.$$.ctx[3]}set hidelogo(e){this.$$set({hidelogo:e}),v()}get name(){return this.$$.ctx[4]}set name(e){this.$$set({name:e}),v()}get maxnumber(){return this.$$.ctx[20]}set maxnumber(e){this.$$set({maxnumber:e}),v()}get mockerror(){return this.$$.ctx[21]}set mockerror(e){this.$$set({mockerror:e}),v()}get refetchonexpire(){return this.$$.ctx[22]}set refetchonexpire(e){this.$$set({refetchonexpire:e}),v()}get spamfilter(){return this.$$.ctx[23]}set spamfilter(e){this.$$set({spamfilter:e}),v()}get strings(){return this.$$.ctx[29]}set strings(e){this.$$set({strings:e}),v()}get test(){return this.$$.ctx[24]}set test(e){this.$$set({test:e}),v()}get verifyurl(){return this.$$.ctx[25]}set verifyurl(e){this.$$set({verifyurl:e}),v()}get workers(){return this.$$.ctx[26]}set workers(e){this.$$set({workers:e}),v()}get workerurl(){return this.$$.ctx[30]}set workerurl(e){this.$$set({workerurl:e}),v()}get configure(){return this.$$.ctx[31]}get reset(){return this.$$.ctx[32]}get verify(){return this.$$.ctx[33]}}customElements.define("altcha-widget",Tt(Pe,{auto:{},blockspam:{},challengeurl:{},challengejson:{},debug:{type:"Boolean"},delay:{},expire:{},floating:{},floatinganchor:{},floatingoffset:{},hidefooter:{type:"Boolean"},hidelogo:{type:"Boolean"},name:{},maxnumber:{},mockerror:{type:"Boolean"},refetchonexpire:{type:"Boolean"},spamfilter:{type:"Boolean"},strings:{},test:{type:"Boolean"},verifyurl:{},workers:{},workerurl:{}},[],["configure","reset","verify"],!1)),globalThis.createAltchaWorker=r=>r?new Worker(new URL(r)):new ut,F.Altcha=Pe,Object.defineProperty(F,Symbol.toStringTag,{value:"Module"})}); diff --git a/dist_external/altcha.js b/dist_external/altcha.js index fc32b1a..60ef8a7 100644 --- a/dist_external/altcha.js +++ b/dist_external/altcha.js @@ -3,16 +3,16 @@ var _t = (n, e, t) => e in n ? wt(n, e, { enumerable: !0, configurable: !0, writ var B = (n, e, t) => _t(n, typeof e != "symbol" ? e + "" : e, t); function re() { } -function Ke(n) { +function Qe(n) { return n(); } -function Be() { +function Ue() { return /* @__PURE__ */ Object.create(null); } -function se(n) { - n.forEach(Ke); +function ce(n) { + n.forEach(Qe); } -function Qe(n) { +function et(n) { return typeof n == "function"; } function yt(n, e) { @@ -21,13 +21,13 @@ function yt(n, e) { function kt(n) { return Object.keys(n).length === 0; } -function p(n, e) { +function E(n, e) { n.appendChild(e); } function P(n, e, t) { n.insertBefore(e, t || null); } -function N(n) { +function D(n) { n.parentNode && n.parentNode.removeChild(n); } function $(n) { @@ -36,22 +36,22 @@ function $(n) { function Z(n) { return document.createElementNS("http://www.w3.org/2000/svg", n); } -function Et(n) { +function vt(n) { return document.createTextNode(n); } function W() { - return Et(" "); + return vt(" "); } -function _e(n, e, t, i) { +function Ee(n, e, t, i) { return n.addEventListener(e, t, i), () => n.removeEventListener(e, t, i); } function f(n, e, t) { t == null ? n.removeAttribute(e) : n.getAttribute(e) !== t && n.setAttribute(e, t); } -function vt(n) { +function Et(n) { return Array.from(n.childNodes); } -function Ue(n, e, t) { +function qe(n, e, t) { n.classList.toggle(e, !!t); } function pt(n, e, { bubbles: t = !1, cancelable: i = !1 } = {}) { @@ -66,22 +66,22 @@ function xt(n) { } ), e; } -let le; -function oe(n) { - le = n; +let fe; +function se(n) { + fe = n; } -function ve() { - if (!le) throw new Error("Function called outside component initialization"); - return le; +function Le() { + if (!fe) throw new Error("Function called outside component initialization"); + return fe; } function Ct(n) { - ve().$$.on_mount.push(n); + Le().$$.on_mount.push(n); } function Lt(n) { - ve().$$.on_destroy.push(n); + Le().$$.on_destroy.push(n); } function It() { - const n = ve(); + const n = Le(); return (e, t, { cancelable: i = !1 } = {}) => { const l = n.$$.callbacks[e]; if (l) { @@ -98,50 +98,50 @@ function It() { return !0; }; } -const te = [], de = []; +const te = [], be = []; let ne = []; -const qe = [], et = /* @__PURE__ */ Promise.resolve(); -let ke = !1; -function tt() { - ke || (ke = !0, et.then(w)); +const Ze = [], tt = /* @__PURE__ */ Promise.resolve(); +let xe = !1; +function nt() { + xe || (xe = !0, tt.then(w)); } function At() { - return tt(), et; + return nt(), tt; } -function Ee(n) { +function Ce(n) { ne.push(n); } -const ye = /* @__PURE__ */ new Set(); +const pe = /* @__PURE__ */ new Set(); let ee = 0; function w() { if (ee !== 0) return; - const n = le; + const n = fe; do { try { for (; ee < te.length; ) { const e = te[ee]; - ee++, oe(e), Rt(e.$$); + ee++, se(e), Rt(e.$$); } } catch (e) { throw te.length = 0, ee = 0, e; } - for (oe(null), te.length = 0, ee = 0; de.length; ) de.pop()(); + for (se(null), te.length = 0, ee = 0; be.length; ) be.pop()(); for (let e = 0; e < ne.length; e += 1) { const t = ne[e]; - ye.has(t) || (ye.add(t), t()); + pe.has(t) || (pe.add(t), t()); } ne.length = 0; } while (te.length); - for (; qe.length; ) - qe.pop()(); - ke = !1, ye.clear(), oe(n); + for (; Ze.length; ) + Ze.pop()(); + xe = !1, pe.clear(), se(n); } function Rt(n) { if (n.fragment !== null) { - n.update(), se(n.before_update); + n.update(), ce(n.before_update); const e = n.dirty; - n.dirty = [-1], n.fragment && n.fragment.p(n.ctx, e), n.after_update.forEach(Ee); + n.dirty = [-1], n.fragment && n.fragment.p(n.ctx, e), n.after_update.forEach(Ce); } } function $t(n) { @@ -154,21 +154,21 @@ function Tt(n, e) { } function St(n, e, t) { const { fragment: i, after_update: l } = n.$$; - i && i.m(e, t), Ee(() => { - const o = n.$$.on_mount.map(Ke).filter(Qe); - n.$$.on_destroy ? n.$$.on_destroy.push(...o) : se(o), n.$$.on_mount = []; - }), l.forEach(Ee); + i && i.m(e, t), Ce(() => { + const o = n.$$.on_mount.map(Qe).filter(et); + n.$$.on_destroy ? n.$$.on_destroy.push(...o) : ce(o), n.$$.on_mount = []; + }), l.forEach(Ce); } function Dt(n, e) { const t = n.$$; - t.fragment !== null && ($t(t.after_update), se(t.on_destroy), t.fragment && t.fragment.d(e), t.on_destroy = t.fragment = null, t.ctx = []); + t.fragment !== null && ($t(t.after_update), ce(t.on_destroy), t.fragment && t.fragment.d(e), t.on_destroy = t.fragment = null, t.ctx = []); } function Nt(n, e) { - n.$$.dirty[0] === -1 && (te.push(n), tt(), n.$$.dirty.fill(0)), n.$$.dirty[e / 31 | 0] |= 1 << e % 31; + n.$$.dirty[0] === -1 && (te.push(n), nt(), n.$$.dirty.fill(0)), n.$$.dirty[e / 31 | 0] |= 1 << e % 31; } function jt(n, e, t, i, l, o, s = null, a = [-1]) { - const c = le; - oe(n); + const u = fe; + se(n); const h = n.$$ = { fragment: null, ctx: [], @@ -176,37 +176,37 @@ function jt(n, e, t, i, l, o, s = null, a = [-1]) { props: o, update: re, not_equal: l, - bound: Be(), + bound: Ue(), // lifecycle on_mount: [], on_destroy: [], on_disconnect: [], before_update: [], after_update: [], - context: new Map(e.context || (c ? c.$$.context : [])), + context: new Map(e.context || (u ? u.$$.context : [])), // everything else - callbacks: Be(), + callbacks: Ue(), dirty: a, skip_bound: !1, - root: e.target || c.$$.root + root: e.target || u.$$.root }; s && s(h.root); let H = !1; - if (h.ctx = t ? t(n, e.props || {}, (T, F, ...E) => { - const O = E.length ? E[0] : F; + if (h.ctx = t ? t(n, e.props || {}, (T, F, ...v) => { + const O = v.length ? v[0] : F; return h.ctx && l(h.ctx[T], h.ctx[T] = O) && (!h.skip_bound && h.bound[T] && h.bound[T](O), H && Nt(n, T)), F; - }) : [], h.update(), H = !0, se(h.before_update), h.fragment = i ? i(h.ctx) : !1, e.target) { + }) : [], h.update(), H = !0, ce(h.before_update), h.fragment = i ? i(h.ctx) : !1, e.target) { if (e.hydrate) { - const T = vt(e.target); - h.fragment && h.fragment.l(T), T.forEach(N); + const T = Et(e.target); + h.fragment && h.fragment.l(T), T.forEach(D); } else h.fragment && h.fragment.c(); e.intro && Tt(n.$$.fragment), St(n, e.target, e.anchor), w(); } - oe(c); + se(u); } -let nt; -typeof HTMLElement == "function" && (nt = class extends HTMLElement { +let rt; +typeof HTMLElement == "function" && (rt = class extends HTMLElement { constructor(e, t, i) { super(); /** The Svelte component constructor */ @@ -259,7 +259,7 @@ typeof HTMLElement == "function" && (nt = class extends HTMLElement { P(h, s, H); }, d: function(h) { - h && N(s); + h && D(s); } }; }; @@ -271,7 +271,7 @@ typeof HTMLElement == "function" && (nt = class extends HTMLElement { o in i && (t[o] = [e(o)]); for (const o of this.attributes) { const s = this.$$g_p(o.name); - s in this.$$d || (this.$$d[s] = he(s, o.value, this.$$p_d, "toProp")); + s in this.$$d || (this.$$d[s] = me(s, o.value, this.$$p_d, "toProp")); } for (const o in this.$$p_d) !(o in this.$$d) && this[o] !== void 0 && (this.$$d[o] = this[o], delete this[o]); @@ -289,7 +289,7 @@ typeof HTMLElement == "function" && (nt = class extends HTMLElement { this.$$r = !0; for (const o in this.$$p_d) if (this.$$d[o] = this.$$c.$$.ctx[this.$$c.$$.props[o]], this.$$p_d[o].reflect) { - const s = he( + const s = me( o, this.$$d[o], this.$$p_d, @@ -312,7 +312,7 @@ typeof HTMLElement == "function" && (nt = class extends HTMLElement { // and setting attributes through setAttribute etc, this is helpful attributeChangedCallback(e, t, i) { var l; - this.$$r || (e = this.$$g_p(e), this.$$d[e] = he(e, i, this.$$p_d, "toProp"), (l = this.$$c) == null || l.$set({ [e]: this.$$d[e] })); + this.$$r || (e = this.$$g_p(e), this.$$d[e] = me(e, i, this.$$p_d, "toProp"), (l = this.$$c) == null || l.$set({ [e]: this.$$d[e] })); } disconnectedCallback() { this.$$cn = !1, Promise.resolve().then(() => { @@ -325,7 +325,7 @@ typeof HTMLElement == "function" && (nt = class extends HTMLElement { ) || e; } }); -function he(n, e, t, i) { +function me(n, e, t, i) { var o; const l = (o = t[n]) == null ? void 0 : o.type; if (e = l === "Boolean" && typeof e != "boolean" ? e != null : e, !i || !t[n]) @@ -356,7 +356,7 @@ function he(n, e, t, i) { } } function Vt(n, e, t, i, l, o) { - let s = class extends nt { + let s = class extends rt { constructor() { super(n, t, l), this.$$p_d = e; } @@ -371,16 +371,16 @@ function Vt(n, e, t, i, l, o) { get() { return this.$$c && a in this.$$c ? this.$$c[a] : this.$$d[a]; }, - set(c) { + set(u) { var h; - c = he(a, c, e), this.$$d[a] = c, (h = this.$$c) == null || h.$set({ [a]: c }); + u = me(a, u, e), this.$$d[a] = u, (h = this.$$c) == null || h.$set({ [a]: u }); } }); }), i.forEach((a) => { Object.defineProperty(s.prototype, a, { get() { - var c; - return (c = this.$$c) == null ? void 0 : c[a]; + var u; + return (u = this.$$c) == null ? void 0 : u[a]; } }); }), o && (s = o(s)), n.element = /** @type {any} */ @@ -416,7 +416,7 @@ class Pt { * @returns {() => void} */ $on(e, t) { - if (!Qe(t)) + if (!et(t)) return re; const i = this.$$.callbacks[e] || (this.$$.callbacks[e] = []); return i.push(t), () => { @@ -441,7 +441,7 @@ function Ot(n) { async function Bt(n, e = "SHA-256", t = 1e5) { const i = Date.now().toString(16); n || (n = Math.round(Math.random() * t)); - const l = await rt(i, n, e); + const l = await it(i, n, e); return { algorithm: e, challenge: l, @@ -449,7 +449,7 @@ async function Bt(n, e = "SHA-256", t = 1e5) { signature: "" }; } -async function rt(n, e, t) { +async function it(n, e, t) { return Ot( await crypto.subtle.digest( t.toUpperCase(), @@ -461,12 +461,12 @@ function Ut(n, e, t = "SHA-256", i = 1e6, l = 0) { const o = new AbortController(), s = Date.now(); return { promise: (async () => { - for (let c = l; c <= i; c += 1) { + for (let u = l; u <= i; u += 1) { if (o.signal.aborted) return null; - if (await rt(e, c, t) === n) + if (await it(e, u, t) === n) return { - number: c, + number: u, took: Date.now() - s }; } @@ -476,17 +476,17 @@ function Ut(n, e, t = "SHA-256", i = 1e6, l = 0) { }; } var b = /* @__PURE__ */ ((n) => (n.ERROR = "error", n.VERIFIED = "verified", n.VERIFYING = "verifying", n.UNVERIFIED = "unverified", n.EXPIRED = "expired", n))(b || {}); -function Ze(n) { +function Ye(n) { let e, t, i; return { c() { e = Z("svg"), t = Z("path"), i = Z("path"), f(t, "d", "M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"), f(t, "fill", "currentColor"), f(t, "opacity", ".25"), f(i, "d", "M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"), f(i, "fill", "currentColor"), f(i, "class", "altcha-spinner"), f(e, "width", "24"), f(e, "height", "24"), f(e, "viewBox", "0 0 24 24"), f(e, "xmlns", "http://www.w3.org/2000/svg"); }, m(l, o) { - P(l, e, o), p(e, t), p(e, i); + P(l, e, o), E(e, t), E(e, i); }, d(l) { - l && N(e); + l && D(e); } }; } @@ -511,7 +511,7 @@ function qt(n) { l[4] + "_checkbox") && f(e, "for", i); }, d(l) { - l && N(e); + l && D(e); } }; } @@ -533,7 +533,7 @@ function Zt(n) { i[11].verifying + "") && (e.innerHTML = t); }, d(i) { - i && N(e); + i && D(e); } }; } @@ -569,36 +569,36 @@ function Yt(n) { o[5]); }, d(o) { - o && (N(e), N(i), N(l)); + o && (D(e), D(i), D(l)); } }; } -function Ye(n) { +function Ge(n) { let e, t, i, l, o, s, a; return { c() { - e = $("div"), t = $("a"), i = Z("svg"), l = Z("path"), o = Z("path"), s = Z("path"), f(l, "d", "M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"), f(l, "fill", "currentColor"), f(o, "d", "M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"), f(o, "fill", "currentColor"), f(s, "d", "M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"), f(s, "fill", "currentColor"), f(i, "width", "22"), f(i, "height", "22"), f(i, "viewBox", "0 0 20 20"), f(i, "fill", "none"), f(i, "xmlns", "http://www.w3.org/2000/svg"), f(t, "href", it), f(t, "target", "_blank"), f(t, "class", "altcha-logo"), f(t, "aria-label", a = /*_strings*/ + e = $("div"), t = $("a"), i = Z("svg"), l = Z("path"), o = Z("path"), s = Z("path"), f(l, "d", "M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"), f(l, "fill", "currentColor"), f(o, "d", "M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"), f(o, "fill", "currentColor"), f(s, "d", "M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"), f(s, "fill", "currentColor"), f(i, "width", "22"), f(i, "height", "22"), f(i, "viewBox", "0 0 20 20"), f(i, "fill", "none"), f(i, "xmlns", "http://www.w3.org/2000/svg"), f(t, "href", ot), f(t, "target", "_blank"), f(t, "class", "altcha-logo"), f(t, "aria-label", a = /*_strings*/ n[11].ariaLinkLabel); }, - m(c, h) { - P(c, e, h), p(e, t), p(t, i), p(i, l), p(i, o), p(i, s); + m(u, h) { + P(u, e, h), E(e, t), E(t, i), E(i, l), E(i, o), E(i, s); }, - p(c, h) { + p(u, h) { h[0] & /*_strings*/ 2048 && a !== (a = /*_strings*/ - c[11].ariaLinkLabel) && f(t, "aria-label", a); + u[11].ariaLinkLabel) && f(t, "aria-label", a); }, - d(c) { - c && N(e); + d(u) { + u && D(e); } }; } -function Ge(n) { +function We(n) { let e, t, i, l; - function o(c, h) { + function o(u, h) { return ( /*state*/ - c[6] === b.EXPIRED ? Wt : Gt + u[6] === b.EXPIRED ? Wt : Gt ); } let s = o(n), a = s(n); @@ -606,14 +606,14 @@ function Ge(n) { c() { e = $("div"), t = Z("svg"), i = Z("path"), l = W(), a.c(), f(i, "stroke-linecap", "round"), f(i, "stroke-linejoin", "round"), f(i, "d", "M6 18L18 6M6 6l12 12"), f(t, "width", "14"), f(t, "height", "14"), f(t, "xmlns", "http://www.w3.org/2000/svg"), f(t, "fill", "none"), f(t, "viewBox", "0 0 24 24"), f(t, "stroke-width", "1.5"), f(t, "stroke", "currentColor"), f(e, "class", "altcha-error"); }, - m(c, h) { - P(c, e, h), p(e, t), p(t, i), p(e, l), a.m(e, null); + m(u, h) { + P(u, e, h), E(e, t), E(t, i), E(e, l), a.m(e, null); }, - p(c, h) { - s === (s = o(c)) && a ? a.p(c, h) : (a.d(1), a = s(c), a && (a.c(), a.m(e, null))); + p(u, h) { + s === (s = o(u)) && a ? a.p(u, h) : (a.d(1), a = s(u), a && (a.c(), a.m(e, null))); }, - d(c) { - c && N(e), a.d(); + d(u) { + u && D(e), a.d(); } }; } @@ -646,7 +646,7 @@ function Gt(n) { ); }, d(i) { - i && N(e); + i && D(e); } }; } @@ -679,11 +679,11 @@ function Wt(n) { ); }, d(i) { - i && N(e); + i && D(e); } }; } -function We(n) { +function Xe(n) { let e, t, i = ( /*_strings*/ n[11].footer + "" @@ -693,7 +693,7 @@ function We(n) { e = $("div"), t = $("div"), f(e, "class", "altcha-footer"); }, m(l, o) { - P(l, e, o), p(e, t), t.innerHTML = i; + P(l, e, o), E(e, t), t.innerHTML = i; }, p(l, o) { o[0] & /*_strings*/ @@ -701,11 +701,11 @@ function We(n) { l[11].footer + "") && (t.innerHTML = i); }, d(l) { - l && N(e); + l && D(e); } }; } -function Xe(n) { +function Je(n) { let e; return { c() { @@ -716,14 +716,14 @@ function Xe(n) { }, p: re, d(t) { - t && N(e), n[36](null); + t && D(e), n[36](null); } }; } function Xt(n) { - let e, t, i, l, o, s, a, c, h, H, T, F, E, O, X, M = ( + let e, t, i, l, o, s, a, u, h, H, T, F, v, O, X, M = ( /*state*/ - n[6] === b.VERIFYING && Ze() + n[6] === b.VERIFYING && Ye() ); function Q(d, y) { return ( @@ -736,24 +736,24 @@ function Xt(n) { } let Y = Q(n), S = Y(n), L = ( /*hidelogo*/ - n[3] !== !0 && Ye(n) + n[3] !== !0 && Ge(n) ), I = ( /*error*/ (n[10] || /*state*/ - n[6] === b.EXPIRED) && Ge(n) + n[6] === b.EXPIRED) && We(n) ), _ = ( /*_strings*/ n[11].footer && /*hidefooter*/ - n[2] !== !0 && We(n) + n[2] !== !0 && Xe(n) ), A = ( /*floating*/ - n[1] && Xe(n) + n[1] && Je(n) ); return { c() { - e = $("div"), t = $("div"), M && M.c(), i = W(), l = $("div"), o = $("input"), c = W(), h = $("div"), S.c(), H = W(), L && L.c(), T = W(), I && I.c(), F = W(), _ && _.c(), E = W(), A && A.c(), f(o, "type", "checkbox"), f(o, "id", s = /*name*/ + e = $("div"), t = $("div"), M && M.c(), i = W(), l = $("div"), o = $("input"), u = W(), h = $("div"), S.c(), H = W(), L && L.c(), T = W(), I && I.c(), F = W(), _ && _.c(), v = W(), A && A.c(), f(o, "type", "checkbox"), f(o, "id", s = /*name*/ n[4] + "_checkbox"), o.required = a = /*auto*/ - n[0] !== "onsubmit", f(l, "class", "altcha-checkbox"), Ue( + n[0] !== "onsubmit", f(l, "class", "altcha-checkbox"), qe( l, "altcha-hidden", /*state*/ @@ -771,21 +771,21 @@ function Xt(n) { ); }, m(d, y) { - P(d, e, y), p(e, t), M && M.m(t, null), p(t, i), p(t, l), p(l, o), o.checked = /*checked*/ - n[7], p(t, c), p(t, h), S.m(h, null), p(t, H), L && L.m(t, null), p(e, T), I && I.m(e, null), p(e, F), _ && _.m(e, null), p(e, E), A && A.m(e, null), n[37](e), O || (X = [ - _e( + P(d, e, y), E(e, t), M && M.m(t, null), E(t, i), E(t, l), E(l, o), o.checked = /*checked*/ + n[7], E(t, u), E(t, h), S.m(h, null), E(t, H), L && L.m(t, null), E(e, T), I && I.m(e, null), E(e, F), _ && _.m(e, null), E(e, v), A && A.m(e, null), n[37](e), O || (X = [ + Ee( o, "change", /*input_change_handler*/ n[35] ), - _e( + Ee( o, "change", /*onCheckedChange*/ n[12] ), - _e( + Ee( o, "invalid", /*onInvalid*/ @@ -795,25 +795,25 @@ function Xt(n) { }, p(d, y) { /*state*/ - d[6] === b.VERIFYING ? M || (M = Ze(), M.c(), M.m(t, i)) : M && (M.d(1), M = null), y[0] & /*name*/ + d[6] === b.VERIFYING ? M || (M = Ye(), M.c(), M.m(t, i)) : M && (M.d(1), M = null), y[0] & /*name*/ 16 && s !== (s = /*name*/ d[4] + "_checkbox") && f(o, "id", s), y[0] & /*auto*/ 1 && a !== (a = /*auto*/ d[0] !== "onsubmit") && (o.required = a), y[0] & /*checked*/ 128 && (o.checked = /*checked*/ d[7]), y[0] & /*state*/ - 64 && Ue( + 64 && qe( l, "altcha-hidden", /*state*/ d[6] === b.VERIFYING ), Y === (Y = Q(d)) && S ? S.p(d, y) : (S.d(1), S = Y(d), S && (S.c(), S.m(h, null))), /*hidelogo*/ - d[3] !== !0 ? L ? L.p(d, y) : (L = Ye(d), L.c(), L.m(t, null)) : L && (L.d(1), L = null), /*error*/ + d[3] !== !0 ? L ? L.p(d, y) : (L = Ge(d), L.c(), L.m(t, null)) : L && (L.d(1), L = null), /*error*/ d[10] || /*state*/ - d[6] === b.EXPIRED ? I ? I.p(d, y) : (I = Ge(d), I.c(), I.m(e, F)) : I && (I.d(1), I = null), /*_strings*/ + d[6] === b.EXPIRED ? I ? I.p(d, y) : (I = We(d), I.c(), I.m(e, F)) : I && (I.d(1), I = null), /*_strings*/ d[11].footer && /*hidefooter*/ - d[2] !== !0 ? _ ? _.p(d, y) : (_ = We(d), _.c(), _.m(e, E)) : _ && (_.d(1), _ = null), /*floating*/ - d[1] ? A ? A.p(d, y) : (A = Xe(d), A.c(), A.m(e, null)) : A && (A.d(1), A = null), y[0] & /*state*/ + d[2] !== !0 ? _ ? _.p(d, y) : (_ = Xe(d), _.c(), _.m(e, v)) : _ && (_.d(1), _ = null), /*floating*/ + d[1] ? A ? A.p(d, y) : (A = Je(d), A.c(), A.m(e, null)) : A && (A.d(1), A = null), y[0] & /*state*/ 64 && f( e, "data-state", @@ -830,12 +830,12 @@ function Xt(n) { i: re, o: re, d(d) { - d && N(e), M && M.d(), S.d(), L && L.d(), I && I.d(), _ && _.d(), A && A.d(), n[37](null), O = !1, se(X); + d && D(e), M && M.d(), S.d(), L && L.d(), I && I.d(), _ && _.d(), A && A.d(), n[37](null), O = !1, ce(X); } }; } -const Je = "Visit Altcha.org", it = "https://altcha.org/"; -function ze(n) { +const ze = "Visit Altcha.org", ot = "https://altcha.org/"; +function Ke(n) { return JSON.parse(n); } function Jt() { @@ -845,295 +845,299 @@ function Jt() { } } function zt(n, e, t) { - var Ve, Pe; - let i, l, o, { auto: s = void 0 } = e, { blockspam: a = void 0 } = e, { challengeurl: c = void 0 } = e, { challengejson: h = void 0 } = e, { debug: H = !1 } = e, { delay: T = 0 } = e, { expire: F = void 0 } = e, { floating: E = void 0 } = e, { floatinganchor: O = void 0 } = e, { floatingoffset: X = void 0 } = e, { hidefooter: M = !1 } = e, { hidelogo: Q = !1 } = e, { name: Y = "altcha" } = e, { maxnumber: S = 1e6 } = e, { mockerror: L = !1 } = e, { refetchonexpire: I = !0 } = e, { spamfilter: _ = !1 } = e, { strings: A = void 0 } = e, { test: d = !1 } = e, { verifyurl: y = void 0 } = e, { workers: ie = Math.min(16, navigator.hardwareConcurrency || 8) } = e, { workerurl: ge = void 0 } = e; - const me = It(), pe = ["SHA-256", "SHA-384", "SHA-512"], xe = (Pe = (Ve = document.documentElement.lang) == null ? void 0 : Ve.split("-")) == null ? void 0 : Pe[0]; - let G = !1, x, J = null, fe = null, m = null, be = null, z = null, j = b.UNVERIFIED, U = null; + var Oe, Be; + let i, l, o, { auto: s = void 0 } = e, { blockspam: a = void 0 } = e, { challengeurl: u = void 0 } = e, { challengejson: h = void 0 } = e, { debug: H = !1 } = e, { delay: T = 0 } = e, { expire: F = void 0 } = e, { floating: v = void 0 } = e, { floatinganchor: O = void 0 } = e, { floatingoffset: X = void 0 } = e, { hidefooter: M = !1 } = e, { hidelogo: Q = !1 } = e, { name: Y = "altcha" } = e, { maxnumber: S = 1e6 } = e, { mockerror: L = !1 } = e, { refetchonexpire: I = !0 } = e, { spamfilter: _ = !1 } = e, { strings: A = void 0 } = e, { test: d = !1 } = e, { verifyurl: y = void 0 } = e, { workers: ie = Math.min(16, navigator.hardwareConcurrency || 8) } = e, { workerurl: we = void 0 } = e; + const _e = It(), Ie = ["SHA-256", "SHA-384", "SHA-512"], Ae = (Be = (Oe = document.documentElement.lang) == null ? void 0 : Oe.split("-")) == null ? void 0 : Be[0]; + let G = !1, p, J = null, ue = null, m = null, ye = null, z = null, N = b.UNVERIFIED, U = null; Lt(() => { - m && (m.removeEventListener("submit", Le), m.removeEventListener("reset", Ie), m.removeEventListener("focusin", Ce), m = null), U && (clearTimeout(U), U = null), document.removeEventListener("click", Me), document.removeEventListener("scroll", Te), window.removeEventListener("resize", De); + m && (m.removeEventListener("submit", $e), m.removeEventListener("reset", Me), m.removeEventListener("focusin", Re), m = null), U && (clearTimeout(U), U = null), document.removeEventListener("click", Ne), document.removeEventListener("scroll", je), window.removeEventListener("resize", Pe); }), Ct(() => { - C("mounted", "0.6.1"), C("workers", ie), d && C("using test mode"), F && ce(F), s !== void 0 && C("auto", s), E !== void 0 && Ne(E), m = x.closest("form"), m && (m.addEventListener("submit", Le, { capture: !0 }), m.addEventListener("reset", Ie), s === "onfocus" && m.addEventListener("focusin", Ce)), s === "onload" && K(); + x("mounted", "0.6.1"), x("workers", ie), d && x("using test mode"), F && ae(F), s !== void 0 && x("auto", s), v !== void 0 && Fe(v), m = p.closest("form"), m && (m.addEventListener("submit", $e, { capture: !0 }), m.addEventListener("reset", Me), s === "onfocus" && m.addEventListener("focusin", Re)), s === "onload" && K(); }); - function C(...r) { - (H || r.some((u) => u instanceof Error)) && console[r[0] instanceof Error ? "error" : "log"]("ALTCHA", ...r); + function x(...r) { + (H || r.some((c) => c instanceof Error)) && console[r[0] instanceof Error ? "error" : "log"]("ALTCHA", ...r); } - function Ce(r) { - j === b.UNVERIFIED && K(); + function Re(r) { + N === b.UNVERIFIED && K(); } - function Le(r) { - m && s === "onsubmit" && (j === b.UNVERIFIED ? (r.preventDefault(), r.stopPropagation(), K().then(() => { + function $e(r) { + m && s === "onsubmit" && (N === b.UNVERIFIED ? (r.preventDefault(), r.stopPropagation(), K().then(() => { m == null || m.requestSubmit(); - })) : j !== b.VERIFIED && (r.preventDefault(), r.stopPropagation(), j === b.VERIFYING && Se())); + })) : N !== b.VERIFIED && (r.preventDefault(), r.stopPropagation(), N === b.VERIFYING && Ve())); } - function Ie() { - ue(); + function Me() { + he(); } - function Ae(r, u) { + function Te(r, c) { return btoa(JSON.stringify({ algorithm: r.algorithm, challenge: r.challenge, - number: u.number, + number: c.number, salt: r.salt, signature: r.signature, test: d ? !0 : void 0, - took: u.took + took: c.took })); } - function Re(r) { + function Se(r) { if (!r.algorithm) throw new Error("Invalid challenge. Property algorithm is missing."); if (r.signature === void 0) throw new Error("Invalid challenge. Property signature is missing."); - if (!pe.includes(r.algorithm.toUpperCase())) - throw new Error(`Unknown algorithm value. Allowed values: ${pe.join(", ")}`); + if (!Ie.includes(r.algorithm.toUpperCase())) + throw new Error(`Unknown algorithm value. Allowed values: ${Ie.join(", ")}`); if (!r.challenge || r.challenge.length < 40) throw new Error("Challenge is too short. Min. 40 chars."); if (!r.salt || r.salt.length < 10) throw new Error("Salt is too short. Min. 10 chars."); } - async function ot() { + async function lt() { var r; if (L) - throw C("mocking error"), new Error("Mocked error."); + throw x("mocking error"), new Error("Mocked error."); if (i) - return C("using provided json data"), i; + return x("using provided json data"), i; if (d) - return C("generating test challenge", { test: d }), Bt(typeof d != "boolean" ? +d : void 0); + return x("generating test challenge", { test: d }), Bt(typeof d != "boolean" ? +d : void 0); { - if (!c) + if (!u) throw new Error("Attribute challengeurl not set."); - C("fetching challenge from", c); - const u = await fetch(c, { + x("fetching challenge from", u); + const c = await fetch(u, { headers: { "x-altcha-spam-filter": _ ? "1" : "0" } }); - if (u.status !== 200) - throw new Error(`Server responded with ${u.status}.`); - const g = u.headers.get("Expires"), R = u.headers.get("X-Altcha-Config"), D = await u.json(), V = new URLSearchParams((r = D.salt.split("?")) == null ? void 0 : r[1]), q = V.get("expires") || V.get("expire"); + if (c.status !== 200) + throw new Error(`Server responded with ${c.status}.`); + const g = c.headers.get("Expires"), R = c.headers.get("X-Altcha-Config"), j = await c.json(), V = new URLSearchParams((r = j.salt.split("?")) == null ? void 0 : r[1]), q = V.get("expires") || V.get("expire"); if (q) { - const k = new Date(+q * 1e3), v = isNaN(k.getTime()) ? 0 : k.getTime() - Date.now(); - v > 0 && ce(v); + const k = new Date(+q * 1e3), C = isNaN(k.getTime()) ? 0 : k.getTime() - Date.now(); + C > 0 && ae(C); } if (R) try { const k = JSON.parse(R); - k && typeof k == "object" && (k.verifyurl && (k.verifyurl = new URL(k.verifyurl, new URL(c)).toString()), je(k)); + k && typeof k == "object" && (k.verifyurl && (k.verifyurl = new URL(k.verifyurl, new URL(u)).toString()), He(k)); } catch (k) { - C("unable to configure from X-Altcha-Config", k); + x("unable to configure from X-Altcha-Config", k); } if (!F && (g != null && g.length)) { const k = Date.parse(g); if (k) { - const v = k - Date.now(); - v > 0 && ce(v); + const C = k - Date.now(); + C > 0 && ae(C); } } - return D; + return j; } } - function $e() { - c && I && j === b.VERIFIED ? K() : ue(b.EXPIRED, o.expired); + function De() { + u && I && N === b.VERIFIED ? K() : he(b.EXPIRED, o.expired); } - async function lt(r) { - let u = null; + async function st(r) { + let c = null; if ("Worker" in window) { try { - u = await st(r.challenge, r.salt, r.algorithm, r.maxnumber); + c = await ft(r.challenge, r.salt, r.algorithm, r.maxnumber); } catch (g) { - C(g); + x(g); } - if ((u == null ? void 0 : u.number) !== void 0) - return { data: r, solution: u }; + if ((c == null ? void 0 : c.number) !== void 0) + return { data: r, solution: c }; } return { data: r, solution: await Ut(r.challenge, r.salt, r.algorithm, r.maxnumber || S).promise }; } - async function st(r, u, g, R = typeof d == "number" ? d : S, D = Math.ceil(ie)) { + async function ft(r, c, g, R = typeof d == "number" ? d : S, j = Math.ceil(ie)) { const V = []; - if (D < 1) + if (j < 1) throw new Error("Wrong number of workers configured."); - if (D > 16) + if (j > 16) throw new Error("Too many workers. Max. 16 allowed workers."); - for (let v = 0; v < D; v++) - V.push(createAltchaWorker(ge)); - const q = Math.ceil(R / D), k = await Promise.all(V.map((v, ae) => { - const Fe = ae * q; - return new Promise((bt) => { - v.addEventListener("message", (He) => { - if (He.data) - for (const Oe of V) - Oe !== v && Oe.postMessage({ type: "abort" }); - bt(He.data); - }), v.postMessage({ + for (let C = 0; C < j; C++) + V.push(createAltchaWorker(we)); + const q = Math.ceil(R / j), k = await Promise.all(V.map((C, ve) => { + const oe = ve * q; + return new Promise((de) => { + C.addEventListener("message", (ge) => { + if (ge.data) + for (const le of V) + le !== C && le.postMessage({ type: "abort" }); + de(ge.data); + }), C.postMessage({ payload: { alg: g, challenge: r, - max: Fe + q, - salt: u, - start: Fe + max: oe + q, + salt: c, + start: oe }, type: "work" }); }); })); - for (const v of V) - v.terminate(); - return k.find((v) => !!v) || null; + for (const C of V) + C.terminate(); + return k.find((C) => !!C) || null; } - function ft() { - [b.UNVERIFIED, b.ERROR, b.EXPIRED].includes(j) ? _ && (m == null ? void 0 : m.reportValidity()) === !1 ? t(7, G = !1) : K() : t(7, G = !0); + function ct() { + [b.UNVERIFIED, b.ERROR, b.EXPIRED].includes(N) ? _ && (m == null ? void 0 : m.reportValidity()) === !1 ? t(7, G = !1) : K() : t(7, G = !0); } - function Me(r) { - const u = r.target; - E && u && !x.contains(u) && j === b.VERIFIED && t(8, x.style.display = "none", x); + function Ne(r) { + const c = r.target; + v && c && !p.contains(c) && N === b.VERIFIED && t(8, p.style.display = "none", p); } - function Te() { - E && we(); + function je() { + v && ke(); } - function Se() { - j === b.VERIFYING && o.waitAlert && alert(o.waitAlert); + function Ve() { + N === b.VERIFYING && o.waitAlert && alert(o.waitAlert); } - function ct(r) { - E && j !== b.UNVERIFIED && requestAnimationFrame(() => { - we(); + function ut(r) { + v && N !== b.UNVERIFIED && requestAnimationFrame(() => { + ke(); }); } - function De() { - E && we(); + function Pe() { + v && ke(); } - function ce(r) { - C("expire", r), U && (clearTimeout(U), U = null), r < 1 ? $e() : U = setTimeout($e, r); + function ae(r) { + x("expire", r), U && (clearTimeout(U), U = null), r < 1 ? De() : U = setTimeout(De, r); } - function Ne(r) { - C("floating", r), E !== r && (t(8, x.style.left = "", x), t(8, x.style.top = "", x)), t(1, E = r === !0 || r === "" ? "auto" : r === !1 || r === "false" ? void 0 : E), E ? (s || t(0, s = "onsubmit"), document.addEventListener("scroll", Te), document.addEventListener("click", Me), window.addEventListener("resize", De)) : s === "onsubmit" && t(0, s = void 0); + function Fe(r) { + x("floating", r), v !== r && (t(8, p.style.left = "", p), t(8, p.style.top = "", p)), t(1, v = r === !0 || r === "" ? "auto" : r === !1 || r === "false" ? void 0 : v), v ? (s || t(0, s = "onsubmit"), document.addEventListener("scroll", je), document.addEventListener("click", Ne), window.addEventListener("resize", Pe)) : s === "onsubmit" && t(0, s = void 0); } - function ut(r) { + function at(r) { var g; - const u = m == null ? void 0 : m.querySelector(typeof r == "string" ? `input[name="${r}"]` : 'input[type="email"]:not([data-no-spamfilter])'); - return ((g = u == null ? void 0 : u.value) == null ? void 0 : g.slice(u.value.indexOf("@"))) || void 0; + const c = m == null ? void 0 : m.querySelector(typeof r == "string" ? `input[name="${r}"]` : 'input[type="email"]:not([data-no-spamfilter])'); + return ((g = c == null ? void 0 : c.value) == null ? void 0 : g.slice(c.value.indexOf("@"))) || void 0; } - function at(r) { + function ht(r) { return [ ...(m == null ? void 0 : m.querySelectorAll(r != null && r.length ? r.map((g) => `input[name="${g}"]`).join(", ") : 'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')) || [] ].reduce( (g, R) => { - const D = R.name, V = R.value.trim(); - return D && V && (g[D] = V), g; + const j = R.name, V = R.value.trim(); + return j && V && (g[j] = V), g; }, {} ); } - async function ht(r) { + async function dt(r) { if (!y) throw new Error("Attribute verifyurl not set."); - C("requesting server verification from", y); - const u = { payload: r }; + x("requesting server verification from", y); + const c = { payload: r }; if (_) { - const { email: D, expectedLanguages: V, expectedCountries: q, fields: k, ipAddress: v, timeZone: ae } = typeof _ == "object" ? _ : { + const { blockedCountries: j, classifier: V, disableRules: q, email: k, expectedLanguages: C, expectedCountries: ve, fields: oe, ipAddress: de, text: ge, timeZone: le } = typeof _ == "object" ? _ : { + blockedCountries: void 0, + classifier: void 0, + disableRules: void 0, email: void 0, expectedCountries: void 0, expectedLanguages: void 0, fields: void 0, ipAddress: void 0, + text: void 0, timeZone: void 0 }; - u.ipAddress = v === !1 ? void 0 : v || "auto", u.email = D === !1 ? void 0 : ut(D), u.fields = k === !1 ? void 0 : at(k), u.timeZone = ae === !1 ? void 0 : ae || Jt(), u.expectedCountries = q, u.expectedLanguages = V || (xe ? [xe] : void 0); + c.blockedCountries = j, c.classifier = V, c.disableRules = q, c.email = k === !1 ? void 0 : at(k), c.expectedCountries = ve, c.expectedLanguages = C || (Ae ? [Ae] : void 0), c.fields = oe === !1 ? void 0 : ht(oe), c.ipAddress = de === !1 ? void 0 : de || "auto", c.text = ge, c.timeZone = le === !1 ? void 0 : le || Jt(); } const g = await fetch(y, { - body: JSON.stringify(u), + body: JSON.stringify(c), headers: { "content-type": "application/json" }, method: "POST" }); if (g.status !== 200) throw new Error(`Server responded with ${g.status}.`); const R = await g.json(); - if (R != null && R.payload && t(5, z = R.payload), me("serververification", R), a && R.classification === "BAD") + if (R != null && R.payload && t(5, z = R.payload), _e("serververification", R), a && R.classification === "BAD") throw new Error("SpamFilter returned negative classification."); } - function we(r = 20) { - if (x) - if (fe || (fe = (O ? document.querySelector(O) : m == null ? void 0 : m.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])')) || m), fe) { - const u = parseInt(X, 10) || 12, g = fe.getBoundingClientRect(), R = x.getBoundingClientRect(), D = document.documentElement.clientHeight, V = document.documentElement.clientWidth, q = E === "auto" ? g.bottom + R.height + u + r > D : E === "top", k = Math.max(r, Math.min(V - r - R.width, g.left + g.width / 2 - R.width / 2)); - if (q ? t(8, x.style.top = `${g.top - (R.height + u)}px`, x) : t(8, x.style.top = `${g.bottom + u}px`, x), t(8, x.style.left = `${k}px`, x), x.setAttribute("data-floating", q ? "top" : "bottom"), J) { - const v = J.getBoundingClientRect(); - t(9, J.style.left = g.left - k + g.width / 2 - v.width / 2 + "px", J); + function ke(r = 20) { + if (p) + if (ue || (ue = (O ? document.querySelector(O) : m == null ? void 0 : m.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])')) || m), ue) { + const c = parseInt(X, 10) || 12, g = ue.getBoundingClientRect(), R = p.getBoundingClientRect(), j = document.documentElement.clientHeight, V = document.documentElement.clientWidth, q = v === "auto" ? g.bottom + R.height + c + r > j : v === "top", k = Math.max(r, Math.min(V - r - R.width, g.left + g.width / 2 - R.width / 2)); + if (q ? t(8, p.style.top = `${g.top - (R.height + c)}px`, p) : t(8, p.style.top = `${g.bottom + c}px`, p), t(8, p.style.left = `${k}px`, p), p.setAttribute("data-floating", q ? "top" : "bottom"), J) { + const C = J.getBoundingClientRect(); + t(9, J.style.left = g.left - k + g.width / 2 - C.width / 2 + "px", J); } } else - C("unable to find floating anchor element"); + x("unable to find floating anchor element"); } - function je(r) { - r.auto !== void 0 && (t(0, s = r.auto), s === "onload" && K()), r.floatinganchor !== void 0 && t(18, O = r.floatinganchor), r.delay !== void 0 && t(16, T = r.delay), r.floatingoffset !== void 0 && t(19, X = r.floatingoffset), r.floating !== void 0 && Ne(r.floating), r.expire !== void 0 && (ce(r.expire), t(17, F = r.expire)), r.challenge && (Re(r.challenge), i = r.challenge), r.challengeurl !== void 0 && t(14, c = r.challengeurl), r.debug !== void 0 && t(15, H = !!r.debug), r.hidefooter !== void 0 && t(2, M = !!r.hidefooter), r.hidelogo !== void 0 && t(3, Q = !!r.hidelogo), r.maxnumber !== void 0 && t(20, S = +r.maxnumber), r.mockerror !== void 0 && t(21, L = !!r.mockerror), r.name !== void 0 && t(4, Y = r.name), r.refetchonexpire !== void 0 && t(22, I = !!r.refetchonexpire), r.spamfilter !== void 0 && t(23, _ = typeof r.spamfilter == "object" ? r.spamfilter : !!r.spamfilter), r.strings && t(34, l = r.strings), r.test !== void 0 && t(24, d = typeof r.test == "number" ? r.test : !!r.test), r.verifyurl !== void 0 && t(25, y = r.verifyurl), r.workers !== void 0 && t(26, ie = +r.workers); + function He(r) { + r.auto !== void 0 && (t(0, s = r.auto), s === "onload" && K()), r.floatinganchor !== void 0 && t(18, O = r.floatinganchor), r.delay !== void 0 && t(16, T = r.delay), r.floatingoffset !== void 0 && t(19, X = r.floatingoffset), r.floating !== void 0 && Fe(r.floating), r.expire !== void 0 && (ae(r.expire), t(17, F = r.expire)), r.challenge && (Se(r.challenge), i = r.challenge), r.challengeurl !== void 0 && t(14, u = r.challengeurl), r.debug !== void 0 && t(15, H = !!r.debug), r.hidefooter !== void 0 && t(2, M = !!r.hidefooter), r.hidelogo !== void 0 && t(3, Q = !!r.hidelogo), r.maxnumber !== void 0 && t(20, S = +r.maxnumber), r.mockerror !== void 0 && t(21, L = !!r.mockerror), r.name !== void 0 && t(4, Y = r.name), r.refetchonexpire !== void 0 && t(22, I = !!r.refetchonexpire), r.spamfilter !== void 0 && t(23, _ = typeof r.spamfilter == "object" ? r.spamfilter : !!r.spamfilter), r.strings && t(34, l = r.strings), r.test !== void 0 && t(24, d = typeof r.test == "number" ? r.test : !!r.test), r.verifyurl !== void 0 && t(25, y = r.verifyurl), r.workers !== void 0 && t(26, ie = +r.workers); } - function ue(r = b.UNVERIFIED, u = null) { - U && (clearTimeout(U), U = null), t(7, G = !1), t(10, be = u), t(5, z = null), t(6, j = r); + function he(r = b.UNVERIFIED, c = null) { + U && (clearTimeout(U), U = null), t(7, G = !1), t(10, ye = c), t(5, z = null), t(6, N = r); } async function K() { - return ue(b.VERIFYING), await new Promise((r) => setTimeout(r, T || 0)), ot().then((r) => (Re(r), C("challenge", r), lt(r))).then(({ data: r, solution: u }) => { - if (C("solution", u), (u == null ? void 0 : u.number) !== void 0) { + return he(b.VERIFYING), await new Promise((r) => setTimeout(r, T || 0)), lt().then((r) => (Se(r), x("challenge", r), st(r))).then(({ data: r, solution: c }) => { + if (x("solution", c), (c == null ? void 0 : c.number) !== void 0) { if (y) - return ht(Ae(r, u)); - t(5, z = Ae(r, u)), C("payload", z); + return dt(Te(r, c)); + t(5, z = Te(r, c)), x("payload", z); } else - throw C("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."), new Error("Unexpected result returned."); + throw x("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."), new Error("Unexpected result returned."); }).then(() => { At().then(() => { - t(6, j = b.VERIFIED), t(7, G = !0), C("verified"), me("verified", { payload: z }); + t(6, N = b.VERIFIED), t(7, G = !0), x("verified"), _e("verified", { payload: z }); }); }).catch((r) => { - C(r), t(6, j = b.ERROR), t(7, G = !1), t(10, be = r.message); + x(r), t(6, N = b.ERROR), t(7, G = !1), t(10, ye = r.message); }); } - function dt() { + function gt() { G = this.checked, t(7, G); } - function gt(r) { - de[r ? "unshift" : "push"](() => { + function mt(r) { + be[r ? "unshift" : "push"](() => { J = r, t(9, J); }); } - function mt(r) { - de[r ? "unshift" : "push"](() => { - x = r, t(8, x); + function bt(r) { + be[r ? "unshift" : "push"](() => { + p = r, t(8, p); }); } return n.$$set = (r) => { - "auto" in r && t(0, s = r.auto), "blockspam" in r && t(27, a = r.blockspam), "challengeurl" in r && t(14, c = r.challengeurl), "challengejson" in r && t(28, h = r.challengejson), "debug" in r && t(15, H = r.debug), "delay" in r && t(16, T = r.delay), "expire" in r && t(17, F = r.expire), "floating" in r && t(1, E = r.floating), "floatinganchor" in r && t(18, O = r.floatinganchor), "floatingoffset" in r && t(19, X = r.floatingoffset), "hidefooter" in r && t(2, M = r.hidefooter), "hidelogo" in r && t(3, Q = r.hidelogo), "name" in r && t(4, Y = r.name), "maxnumber" in r && t(20, S = r.maxnumber), "mockerror" in r && t(21, L = r.mockerror), "refetchonexpire" in r && t(22, I = r.refetchonexpire), "spamfilter" in r && t(23, _ = r.spamfilter), "strings" in r && t(29, A = r.strings), "test" in r && t(24, d = r.test), "verifyurl" in r && t(25, y = r.verifyurl), "workers" in r && t(26, ie = r.workers), "workerurl" in r && t(30, ge = r.workerurl); + "auto" in r && t(0, s = r.auto), "blockspam" in r && t(27, a = r.blockspam), "challengeurl" in r && t(14, u = r.challengeurl), "challengejson" in r && t(28, h = r.challengejson), "debug" in r && t(15, H = r.debug), "delay" in r && t(16, T = r.delay), "expire" in r && t(17, F = r.expire), "floating" in r && t(1, v = r.floating), "floatinganchor" in r && t(18, O = r.floatinganchor), "floatingoffset" in r && t(19, X = r.floatingoffset), "hidefooter" in r && t(2, M = r.hidefooter), "hidelogo" in r && t(3, Q = r.hidelogo), "name" in r && t(4, Y = r.name), "maxnumber" in r && t(20, S = r.maxnumber), "mockerror" in r && t(21, L = r.mockerror), "refetchonexpire" in r && t(22, I = r.refetchonexpire), "spamfilter" in r && t(23, _ = r.spamfilter), "strings" in r && t(29, A = r.strings), "test" in r && t(24, d = r.test), "verifyurl" in r && t(25, y = r.verifyurl), "workers" in r && t(26, ie = r.workers), "workerurl" in r && t(30, we = r.workerurl); }, n.$$.update = () => { n.$$.dirty[0] & /*challengejson*/ - 268435456 && (i = h ? ze(h) : void 0), n.$$.dirty[0] & /*strings*/ - 536870912 && t(34, l = A ? ze(A) : {}), n.$$.dirty[1] & /*parsedStrings*/ + 268435456 && (i = h ? Ke(h) : void 0), n.$$.dirty[0] & /*strings*/ + 536870912 && t(34, l = A ? Ke(A) : {}), n.$$.dirty[1] & /*parsedStrings*/ 8 && t(11, o = { - ariaLinkLabel: Je, + ariaLinkLabel: ze, error: "Verification failed. Try again later.", expired: "Verification expired. Try again.", - footer: `Protected by ALTCHA`, + footer: `Protected by ALTCHA`, label: "I'm not a robot", verified: "Verified", verifying: "Verifying...", waitAlert: "Verifying... please wait.", ...l }), n.$$.dirty[0] & /*payload, state*/ - 96 && me("statechange", { payload: z, state: j }), n.$$.dirty[0] & /*state*/ - 64 && ct(); + 96 && _e("statechange", { payload: z, state: N }), n.$$.dirty[0] & /*state*/ + 64 && ut(); }, [ s, - E, + v, M, Q, Y, z, - j, + N, G, - x, + p, J, - be, + ye, o, - ft, - Se, - c, + ct, + Ve, + u, H, T, F, @@ -1149,14 +1153,14 @@ function zt(n, e, t) { a, h, A, - ge, - je, - ue, + we, + He, + he, K, l, - dt, gt, - mt + mt, + bt ]; } class Kt extends Pt { diff --git a/dist_external/altcha.umd.cjs b/dist_external/altcha.umd.cjs index da428e2..5d20774 100644 --- a/dist_external/altcha.umd.cjs +++ b/dist_external/altcha.umd.cjs @@ -1 +1 @@ -(function(O,N){typeof exports=="object"&&typeof module<"u"?N(exports):typeof define=="function"&&define.amd?define(["exports"],N):(O=typeof globalThis<"u"?globalThis:O||self,N(O.altcha={}))})(this,function(O){"use strict";var Qt=Object.defineProperty;var en=(O,N,Z)=>N in O?Qt(O,N,{enumerable:!0,configurable:!0,writable:!0,value:Z}):O[N]=Z;var q=(O,N,Z)=>en(O,typeof N!="symbol"?N+"":N,Z);var N=typeof document<"u"?document.currentScript:null;function Z(){}function Ce(n){return n()}function Le(){return Object.create(null)}function le(n){n.forEach(Ce)}function Ie(n){return typeof n=="function"}function ft(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}function ct(n){return Object.keys(n).length===0}function v(n,e){n.appendChild(e)}function V(n,e,t){n.insertBefore(e,t||null)}function j(n){n.parentNode&&n.parentNode.removeChild(n)}function $(n){return document.createElement(n)}function W(n){return document.createElementNS("http://www.w3.org/2000/svg",n)}function ut(n){return document.createTextNode(n)}function X(){return ut(" ")}function be(n,e,t,i){return n.addEventListener(e,t,i),()=>n.removeEventListener(e,t,i)}function f(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function at(n){return Array.from(n.childNodes)}function Ae(n,e,t){n.classList.toggle(e,!!t)}function ht(n,e,{bubbles:t=!1,cancelable:i=!1}={}){return new CustomEvent(n,{detail:e,bubbles:t,cancelable:i})}function dt(n){const e={};return n.childNodes.forEach(t=>{e[t.slot||"default"]=!0}),e}let se;function fe(n){se=n}function we(){if(!se)throw new Error("Function called outside component initialization");return se}function gt(n){we().$$.on_mount.push(n)}function mt(n){we().$$.on_destroy.push(n)}function bt(){const n=we();return(e,t,{cancelable:i=!1}={})=>{const l=n.$$.callbacks[e];if(l){const o=ht(e,t,{cancelable:i});return l.slice().forEach(s=>{s.call(n,o)}),!o.defaultPrevented}return!0}}const ne=[],ue=[];let re=[];const Re=[],$e=Promise.resolve();let _e=!1;function Te(){_e||(_e=!0,$e.then(w))}function wt(){return Te(),$e}function ye(n){re.push(n)}const ke=new Set;let ie=0;function w(){if(ie!==0)return;const n=se;do{try{for(;ien.indexOf(i)===-1?e.push(i):t.push(i)),t.forEach(i=>i()),re=e}const kt=new Set;function vt(n,e){n&&n.i&&(kt.delete(n),n.i(e))}function Et(n,e,t){const{fragment:i,after_update:l}=n.$$;i&&i.m(e,t),ye(()=>{const o=n.$$.on_mount.map(Ce).filter(Ie);n.$$.on_destroy?n.$$.on_destroy.push(...o):le(o),n.$$.on_mount=[]}),l.forEach(ye)}function pt(n,e){const t=n.$$;t.fragment!==null&&(yt(t.after_update),le(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function xt(n,e){n.$$.dirty[0]===-1&&(ne.push(n),Te(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const U=E.length?E[0]:H;return h.ctx&&l(h.ctx[S],h.ctx[S]=U)&&(!h.skip_bound&&h.bound[S]&&h.bound[S](U),B&&xt(n,S)),H}):[],h.update(),B=!0,le(h.before_update),h.fragment=i?i(h.ctx):!1,e.target){if(e.hydrate){const S=at(e.target);h.fragment&&h.fragment.l(S),S.forEach(j)}else h.fragment&&h.fragment.c();e.intro&&vt(n.$$.fragment),Et(n,e.target,e.anchor),w()}fe(c)}let Se;typeof HTMLElement=="function"&&(Se=class extends HTMLElement{constructor(e,t,i){super();q(this,"$$ctor");q(this,"$$s");q(this,"$$c");q(this,"$$cn",!1);q(this,"$$d",{});q(this,"$$r",!1);q(this,"$$p_d",{});q(this,"$$l",{});q(this,"$$l_u",new Map);this.$$ctor=e,this.$$s=t,i&&this.attachShadow({mode:"open"})}addEventListener(e,t,i){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const l=this.$$c.$on(e,t);this.$$l_u.set(t,l)}super.addEventListener(e,t,i)}removeEventListener(e,t,i){if(super.removeEventListener(e,t,i),this.$$c){const l=this.$$l_u.get(t);l&&(l(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let e=function(o){return()=>{let s;return{c:function(){s=$("slot"),o!=="default"&&f(s,"name",o)},m:function(h,B){V(h,s,B)},d:function(h){h&&j(s)}}}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const t={},i=dt(this);for(const o of this.$$s)o in i&&(t[o]=[e(o)]);for(const o of this.attributes){const s=this.$$g_p(o.name);s in this.$$d||(this.$$d[s]=ae(s,o.value,this.$$p_d,"toProp"))}for(const o in this.$$p_d)!(o in this.$$d)&&this[o]!==void 0&&(this.$$d[o]=this[o],delete this[o]);this.$$c=new this.$$ctor({target:this.shadowRoot||this,props:{...this.$$d,$$slots:t,$$scope:{ctx:[]}}});const l=()=>{this.$$r=!0;for(const o in this.$$p_d)if(this.$$d[o]=this.$$c.$$.ctx[this.$$c.$$.props[o]],this.$$p_d[o].reflect){const s=ae(o,this.$$d[o],this.$$p_d,"toAttribute");s==null?this.removeAttribute(this.$$p_d[o].attribute||o):this.setAttribute(this.$$p_d[o].attribute||o,s)}this.$$r=!1};this.$$c.$$.after_update.push(l),l();for(const o in this.$$l)for(const s of this.$$l[o]){const a=this.$$c.$on(o,s);this.$$l_u.set(s,a)}this.$$l={}}}attributeChangedCallback(e,t,i){var l;this.$$r||(e=this.$$g_p(e),this.$$d[e]=ae(e,i,this.$$p_d,"toProp"),(l=this.$$c)==null||l.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{this.$$cn||(this.$$c.$destroy(),this.$$c=void 0)})}$$g_p(e){return Object.keys(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});function ae(n,e,t,i){var o;const l=(o=t[n])==null?void 0:o.type;if(e=l==="Boolean"&&typeof e!="boolean"?e!=null:e,!i||!t[n])return e;if(i==="toAttribute")switch(l){case"Object":case"Array":return e==null?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return e??null;default:return e}else switch(l){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":return e;case"Number":return e!=null?+e:e;default:return e}}function Lt(n,e,t,i,l,o){let s=class extends Se{constructor(){super(n,t,l),this.$$p_d=e}static get observedAttributes(){return Object.keys(e).map(a=>(e[a].attribute||a).toLowerCase())}};return Object.keys(e).forEach(a=>{Object.defineProperty(s.prototype,a,{get(){return this.$$c&&a in this.$$c?this.$$c[a]:this.$$d[a]},set(c){var h;c=ae(a,c,e),this.$$d[a]=c,(h=this.$$c)==null||h.$set({[a]:c})}})}),i.forEach(a=>{Object.defineProperty(s.prototype,a,{get(){var c;return(c=this.$$c)==null?void 0:c[a]}})}),o&&(s=o(s)),n.element=s,s}class It{constructor(){q(this,"$$");q(this,"$$set")}$destroy(){pt(this,1),this.$destroy=Z}$on(e,t){if(!Ie(t))return Z;const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(t),()=>{const l=i.indexOf(t);l!==-1&&i.splice(l,1)}}$set(e){this.$$set&&!ct(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const At="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(At);const Rt=new TextEncoder;function $t(n){return[...new Uint8Array(n)].map(e=>e.toString(16).padStart(2,"0")).join("")}async function Tt(n,e="SHA-256",t=1e5){const i=Date.now().toString(16);n||(n=Math.round(Math.random()*t));const l=await Me(i,n,e);return{algorithm:e,challenge:l,salt:i,signature:""}}async function Me(n,e,t){return $t(await crypto.subtle.digest(t.toUpperCase(),Rt.encode(n+e)))}function St(n,e,t="SHA-256",i=1e6,l=0){const o=new AbortController,s=Date.now();return{promise:(async()=>{for(let c=l;c<=i;c+=1){if(o.signal.aborted)return null;if(await Me(e,c,t)===n)return{number:c,took:Date.now()-s}}return null})(),controller:o}}var m=(n=>(n.ERROR="error",n.VERIFIED="verified",n.VERIFYING="verifying",n.UNVERIFIED="unverified",n.EXPIRED="expired",n))(m||{});function je(n){let e,t,i;return{c(){e=W("svg"),t=W("path"),i=W("path"),f(t,"d","M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"),f(t,"fill","currentColor"),f(t,"opacity",".25"),f(i,"d","M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"),f(i,"fill","currentColor"),f(i,"class","altcha-spinner"),f(e,"width","24"),f(e,"height","24"),f(e,"viewBox","0 0 24 24"),f(e,"xmlns","http://www.w3.org/2000/svg")},m(l,o){V(l,e,o),v(e,t),v(e,i)},d(l){l&&j(e)}}}function Mt(n){let e,t=n[11].label+"",i;return{c(){e=$("label"),f(e,"for",i=n[4]+"_checkbox")},m(l,o){V(l,e,o),e.innerHTML=t},p(l,o){o[0]&2048&&t!==(t=l[11].label+"")&&(e.innerHTML=t),o[0]&16&&i!==(i=l[4]+"_checkbox")&&f(e,"for",i)},d(l){l&&j(e)}}}function jt(n){let e,t=n[11].verifying+"";return{c(){e=$("span")},m(i,l){V(i,e,l),e.innerHTML=t},p(i,l){l[0]&2048&&t!==(t=i[11].verifying+"")&&(e.innerHTML=t)},d(i){i&&j(e)}}}function Dt(n){let e,t=n[11].verified+"",i,l;return{c(){e=$("span"),i=X(),l=$("input"),f(l,"type","hidden"),f(l,"name",n[4]),l.value=n[5]},m(o,s){V(o,e,s),e.innerHTML=t,V(o,i,s),V(o,l,s)},p(o,s){s[0]&2048&&t!==(t=o[11].verified+"")&&(e.innerHTML=t),s[0]&16&&f(l,"name",o[4]),s[0]&32&&(l.value=o[5])},d(o){o&&(j(e),j(i),j(l))}}}function De(n){let e,t,i,l,o,s,a;return{c(){e=$("div"),t=$("a"),i=W("svg"),l=W("path"),o=W("path"),s=W("path"),f(l,"d","M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"),f(l,"fill","currentColor"),f(o,"d","M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"),f(o,"fill","currentColor"),f(s,"d","M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"),f(s,"fill","currentColor"),f(i,"width","22"),f(i,"height","22"),f(i,"viewBox","0 0 20 20"),f(i,"fill","none"),f(i,"xmlns","http://www.w3.org/2000/svg"),f(t,"href",He),f(t,"target","_blank"),f(t,"class","altcha-logo"),f(t,"aria-label",a=n[11].ariaLinkLabel)},m(c,h){V(c,e,h),v(e,t),v(t,i),v(i,l),v(i,o),v(i,s)},p(c,h){h[0]&2048&&a!==(a=c[11].ariaLinkLabel)&&f(t,"aria-label",a)},d(c){c&&j(e)}}}function Ne(n){let e,t,i,l;function o(c,h){return c[6]===m.EXPIRED?Vt:Nt}let s=o(n),a=s(n);return{c(){e=$("div"),t=W("svg"),i=W("path"),l=X(),a.c(),f(i,"stroke-linecap","round"),f(i,"stroke-linejoin","round"),f(i,"d","M6 18L18 6M6 6l12 12"),f(t,"width","14"),f(t,"height","14"),f(t,"xmlns","http://www.w3.org/2000/svg"),f(t,"fill","none"),f(t,"viewBox","0 0 24 24"),f(t,"stroke-width","1.5"),f(t,"stroke","currentColor"),f(e,"class","altcha-error")},m(c,h){V(c,e,h),v(e,t),v(t,i),v(e,l),a.m(e,null)},p(c,h){s===(s=o(c))&&a?a.p(c,h):(a.d(1),a=s(c),a&&(a.c(),a.m(e,null)))},d(c){c&&j(e),a.d()}}}function Nt(n){let e,t=n[11].error+"";return{c(){e=$("div"),f(e,"title",n[10])},m(i,l){V(i,e,l),e.innerHTML=t},p(i,l){l[0]&2048&&t!==(t=i[11].error+"")&&(e.innerHTML=t),l[0]&1024&&f(e,"title",i[10])},d(i){i&&j(e)}}}function Vt(n){let e,t=n[11].expired+"";return{c(){e=$("div"),f(e,"title",n[10])},m(i,l){V(i,e,l),e.innerHTML=t},p(i,l){l[0]&2048&&t!==(t=i[11].expired+"")&&(e.innerHTML=t),l[0]&1024&&f(e,"title",i[10])},d(i){i&&j(e)}}}function Ve(n){let e,t,i=n[11].footer+"";return{c(){e=$("div"),t=$("div"),f(e,"class","altcha-footer")},m(l,o){V(l,e,o),v(e,t),t.innerHTML=i},p(l,o){o[0]&2048&&i!==(i=l[11].footer+"")&&(t.innerHTML=i)},d(l){l&&j(e)}}}function Pe(n){let e;return{c(){e=$("div"),f(e,"class","altcha-anchor-arrow")},m(t,i){V(t,e,i),n[36](e)},p:Z,d(t){t&&j(e),n[36](null)}}}function Pt(n){let e,t,i,l,o,s,a,c,h,B,S,H,E,U,K,T=n[6]===m.VERIFYING&&je();function oe(d,y){return d[6]===m.VERIFIED?Dt:d[6]===m.VERIFYING?jt:Mt}let J=oe(n),M=J(n),L=n[3]!==!0&&De(n),I=(n[10]||n[6]===m.EXPIRED)&&Ne(n),_=n[11].footer&&n[2]!==!0&&Ve(n),A=n[1]&&Pe(n);return{c(){e=$("div"),t=$("div"),T&&T.c(),i=X(),l=$("div"),o=$("input"),c=X(),h=$("div"),M.c(),B=X(),L&&L.c(),S=X(),I&&I.c(),H=X(),_&&_.c(),E=X(),A&&A.c(),f(o,"type","checkbox"),f(o,"id",s=n[4]+"_checkbox"),o.required=a=n[0]!=="onsubmit",f(l,"class","altcha-checkbox"),Ae(l,"altcha-hidden",n[6]===m.VERIFYING),f(h,"class","altcha-label"),f(t,"class","altcha-main"),f(e,"class","altcha"),f(e,"data-state",n[6]),f(e,"data-floating",n[1])},m(d,y){V(d,e,y),v(e,t),T&&T.m(t,null),v(t,i),v(t,l),v(l,o),o.checked=n[7],v(t,c),v(t,h),M.m(h,null),v(t,B),L&&L.m(t,null),v(e,S),I&&I.m(e,null),v(e,H),_&&_.m(e,null),v(e,E),A&&A.m(e,null),n[37](e),U||(K=[be(o,"change",n[35]),be(o,"change",n[12]),be(o,"invalid",n[13])],U=!0)},p(d,y){d[6]===m.VERIFYING?T||(T=je(),T.c(),T.m(t,i)):T&&(T.d(1),T=null),y[0]&16&&s!==(s=d[4]+"_checkbox")&&f(o,"id",s),y[0]&1&&a!==(a=d[0]!=="onsubmit")&&(o.required=a),y[0]&128&&(o.checked=d[7]),y[0]&64&&Ae(l,"altcha-hidden",d[6]===m.VERIFYING),J===(J=oe(d))&&M?M.p(d,y):(M.d(1),M=J(d),M&&(M.c(),M.m(h,null))),d[3]!==!0?L?L.p(d,y):(L=De(d),L.c(),L.m(t,null)):L&&(L.d(1),L=null),d[10]||d[6]===m.EXPIRED?I?I.p(d,y):(I=Ne(d),I.c(),I.m(e,H)):I&&(I.d(1),I=null),d[11].footer&&d[2]!==!0?_?_.p(d,y):(_=Ve(d),_.c(),_.m(e,E)):_&&(_.d(1),_=null),d[1]?A?A.p(d,y):(A=Pe(d),A.c(),A.m(e,null)):A&&(A.d(1),A=null),y[0]&64&&f(e,"data-state",d[6]),y[0]&2&&f(e,"data-floating",d[1])},i:Z,o:Z,d(d){d&&j(e),T&&T.d(),M.d(),L&&L.d(),I&&I.d(),_&&_.d(),A&&A.d(),n[37](null),U=!1,le(K)}}}const Fe="Visit Altcha.org",He="https://altcha.org/";function Oe(n){return JSON.parse(n)}function Ft(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Ht(n,e,t){var rt,it;let i,l,o,{auto:s=void 0}=e,{blockspam:a=void 0}=e,{challengeurl:c=void 0}=e,{challengejson:h=void 0}=e,{debug:B=!1}=e,{delay:S=0}=e,{expire:H=void 0}=e,{floating:E=void 0}=e,{floatinganchor:U=void 0}=e,{floatingoffset:K=void 0}=e,{hidefooter:T=!1}=e,{hidelogo:oe=!1}=e,{name:J="altcha"}=e,{maxnumber:M=1e6}=e,{mockerror:L=!1}=e,{refetchonexpire:I=!0}=e,{spamfilter:_=!1}=e,{strings:A=void 0}=e,{test:d=!1}=e,{verifyurl:y=void 0}=e,{workers:ce=Math.min(16,navigator.hardwareConcurrency||8)}=e,{workerurl:ve=void 0}=e;const Ee=bt(),Ue=["SHA-256","SHA-384","SHA-512"],qe=(it=(rt=document.documentElement.lang)==null?void 0:rt.split("-"))==null?void 0:it[0];let z=!1,x,Q=null,he=null,b=null,pe=null,ee=null,P=m.UNVERIFIED,Y=null;mt(()=>{b&&(b.removeEventListener("submit",Ye),b.removeEventListener("reset",Ge),b.removeEventListener("focusin",Ze),b=null),Y&&(clearTimeout(Y),Y=null),document.removeEventListener("click",ze),document.removeEventListener("scroll",Ke),window.removeEventListener("resize",et)}),gt(()=>{C("mounted","0.6.1"),C("workers",ce),d&&C("using test mode"),H&&de(H),s!==void 0&&C("auto",s),E!==void 0&&tt(E),b=x.closest("form"),b&&(b.addEventListener("submit",Ye,{capture:!0}),b.addEventListener("reset",Ge),s==="onfocus"&&b.addEventListener("focusin",Ze)),s==="onload"&&te()});function C(...r){(B||r.some(u=>u instanceof Error))&&console[r[0]instanceof Error?"error":"log"]("ALTCHA",...r)}function Ze(r){P===m.UNVERIFIED&&te()}function Ye(r){b&&s==="onsubmit"&&(P===m.UNVERIFIED?(r.preventDefault(),r.stopPropagation(),te().then(()=>{b==null||b.requestSubmit()})):P!==m.VERIFIED&&(r.preventDefault(),r.stopPropagation(),P===m.VERIFYING&&Qe()))}function Ge(){ge()}function We(r,u){return btoa(JSON.stringify({algorithm:r.algorithm,challenge:r.challenge,number:u.number,salt:r.salt,signature:r.signature,test:d?!0:void 0,took:u.took}))}function Xe(r){if(!r.algorithm)throw new Error("Invalid challenge. Property algorithm is missing.");if(r.signature===void 0)throw new Error("Invalid challenge. Property signature is missing.");if(!Ue.includes(r.algorithm.toUpperCase()))throw new Error(`Unknown algorithm value. Allowed values: ${Ue.join(", ")}`);if(!r.challenge||r.challenge.length<40)throw new Error("Challenge is too short. Min. 40 chars.");if(!r.salt||r.salt.length<10)throw new Error("Salt is too short. Min. 10 chars.")}async function Ot(){var r;if(L)throw C("mocking error"),new Error("Mocked error.");if(i)return C("using provided json data"),i;if(d)return C("generating test challenge",{test:d}),Tt(typeof d!="boolean"?+d:void 0);{if(!c)throw new Error("Attribute challengeurl not set.");C("fetching challenge from",c);const u=await fetch(c,{headers:{"x-altcha-spam-filter":_?"1":"0"}});if(u.status!==200)throw new Error(`Server responded with ${u.status}.`);const g=u.headers.get("Expires"),R=u.headers.get("X-Altcha-Config"),D=await u.json(),F=new URLSearchParams((r=D.salt.split("?"))==null?void 0:r[1]),G=F.get("expires")||F.get("expire");if(G){const k=new Date(+G*1e3),p=isNaN(k.getTime())?0:k.getTime()-Date.now();p>0&&de(p)}if(R)try{const k=JSON.parse(R);k&&typeof k=="object"&&(k.verifyurl&&(k.verifyurl=new URL(k.verifyurl,new URL(c)).toString()),nt(k))}catch(k){C("unable to configure from X-Altcha-Config",k)}if(!H&&(g!=null&&g.length)){const k=Date.parse(g);if(k){const p=k-Date.now();p>0&&de(p)}}return D}}function Je(){c&&I&&P===m.VERIFIED?te():ge(m.EXPIRED,o.expired)}async function Bt(r){let u=null;if("Worker"in window){try{u=await Ut(r.challenge,r.salt,r.algorithm,r.maxnumber)}catch(g){C(g)}if((u==null?void 0:u.number)!==void 0)return{data:r,solution:u}}return{data:r,solution:await St(r.challenge,r.salt,r.algorithm,r.maxnumber||M).promise}}async function Ut(r,u,g,R=typeof d=="number"?d:M,D=Math.ceil(ce)){const F=[];if(D<1)throw new Error("Wrong number of workers configured.");if(D>16)throw new Error("Too many workers. Max. 16 allowed workers.");for(let p=0;p{const ot=me*G;return new Promise(Kt=>{p.addEventListener("message",lt=>{if(lt.data)for(const st of F)st!==p&&st.postMessage({type:"abort"});Kt(lt.data)}),p.postMessage({payload:{alg:g,challenge:r,max:ot+G,salt:u,start:ot},type:"work"})})}));for(const p of F)p.terminate();return k.find(p=>!!p)||null}function qt(){[m.UNVERIFIED,m.ERROR,m.EXPIRED].includes(P)?_&&(b==null?void 0:b.reportValidity())===!1?t(7,z=!1):te():t(7,z=!0)}function ze(r){const u=r.target;E&&u&&!x.contains(u)&&P===m.VERIFIED&&t(8,x.style.display="none",x)}function Ke(){E&&xe()}function Qe(){P===m.VERIFYING&&o.waitAlert&&alert(o.waitAlert)}function Zt(r){E&&P!==m.UNVERIFIED&&requestAnimationFrame(()=>{xe()})}function et(){E&&xe()}function de(r){C("expire",r),Y&&(clearTimeout(Y),Y=null),r<1?Je():Y=setTimeout(Je,r)}function tt(r){C("floating",r),E!==r&&(t(8,x.style.left="",x),t(8,x.style.top="",x)),t(1,E=r===!0||r===""?"auto":r===!1||r==="false"?void 0:E),E?(s||t(0,s="onsubmit"),document.addEventListener("scroll",Ke),document.addEventListener("click",ze),window.addEventListener("resize",et)):s==="onsubmit"&&t(0,s=void 0)}function Yt(r){var g;const u=b==null?void 0:b.querySelector(typeof r=="string"?`input[name="${r}"]`:'input[type="email"]:not([data-no-spamfilter])');return((g=u==null?void 0:u.value)==null?void 0:g.slice(u.value.indexOf("@")))||void 0}function Gt(r){return[...(b==null?void 0:b.querySelectorAll(r!=null&&r.length?r.map(g=>`input[name="${g}"]`).join(", "):'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'))||[]].reduce((g,R)=>{const D=R.name,F=R.value.trim();return D&&F&&(g[D]=F),g},{})}async function Wt(r){if(!y)throw new Error("Attribute verifyurl not set.");C("requesting server verification from",y);const u={payload:r};if(_){const{email:D,expectedLanguages:F,expectedCountries:G,fields:k,ipAddress:p,timeZone:me}=typeof _=="object"?_:{email:void 0,expectedCountries:void 0,expectedLanguages:void 0,fields:void 0,ipAddress:void 0,timeZone:void 0};u.ipAddress=p===!1?void 0:p||"auto",u.email=D===!1?void 0:Yt(D),u.fields=k===!1?void 0:Gt(k),u.timeZone=me===!1?void 0:me||Ft(),u.expectedCountries=G,u.expectedLanguages=F||(qe?[qe]:void 0)}const g=await fetch(y,{body:JSON.stringify(u),headers:{"content-type":"application/json"},method:"POST"});if(g.status!==200)throw new Error(`Server responded with ${g.status}.`);const R=await g.json();if(R!=null&&R.payload&&t(5,ee=R.payload),Ee("serververification",R),a&&R.classification==="BAD")throw new Error("SpamFilter returned negative classification.")}function xe(r=20){if(x)if(he||(he=(U?document.querySelector(U):b==null?void 0:b.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||b),he){const u=parseInt(K,10)||12,g=he.getBoundingClientRect(),R=x.getBoundingClientRect(),D=document.documentElement.clientHeight,F=document.documentElement.clientWidth,G=E==="auto"?g.bottom+R.height+u+r>D:E==="top",k=Math.max(r,Math.min(F-r-R.width,g.left+g.width/2-R.width/2));if(G?t(8,x.style.top=`${g.top-(R.height+u)}px`,x):t(8,x.style.top=`${g.bottom+u}px`,x),t(8,x.style.left=`${k}px`,x),x.setAttribute("data-floating",G?"top":"bottom"),Q){const p=Q.getBoundingClientRect();t(9,Q.style.left=g.left-k+g.width/2-p.width/2+"px",Q)}}else C("unable to find floating anchor element")}function nt(r){r.auto!==void 0&&(t(0,s=r.auto),s==="onload"&&te()),r.floatinganchor!==void 0&&t(18,U=r.floatinganchor),r.delay!==void 0&&t(16,S=r.delay),r.floatingoffset!==void 0&&t(19,K=r.floatingoffset),r.floating!==void 0&&tt(r.floating),r.expire!==void 0&&(de(r.expire),t(17,H=r.expire)),r.challenge&&(Xe(r.challenge),i=r.challenge),r.challengeurl!==void 0&&t(14,c=r.challengeurl),r.debug!==void 0&&t(15,B=!!r.debug),r.hidefooter!==void 0&&t(2,T=!!r.hidefooter),r.hidelogo!==void 0&&t(3,oe=!!r.hidelogo),r.maxnumber!==void 0&&t(20,M=+r.maxnumber),r.mockerror!==void 0&&t(21,L=!!r.mockerror),r.name!==void 0&&t(4,J=r.name),r.refetchonexpire!==void 0&&t(22,I=!!r.refetchonexpire),r.spamfilter!==void 0&&t(23,_=typeof r.spamfilter=="object"?r.spamfilter:!!r.spamfilter),r.strings&&t(34,l=r.strings),r.test!==void 0&&t(24,d=typeof r.test=="number"?r.test:!!r.test),r.verifyurl!==void 0&&t(25,y=r.verifyurl),r.workers!==void 0&&t(26,ce=+r.workers)}function ge(r=m.UNVERIFIED,u=null){Y&&(clearTimeout(Y),Y=null),t(7,z=!1),t(10,pe=u),t(5,ee=null),t(6,P=r)}async function te(){return ge(m.VERIFYING),await new Promise(r=>setTimeout(r,S||0)),Ot().then(r=>(Xe(r),C("challenge",r),Bt(r))).then(({data:r,solution:u})=>{if(C("solution",u),(u==null?void 0:u.number)!==void 0){if(y)return Wt(We(r,u));t(5,ee=We(r,u)),C("payload",ee)}else throw C("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."),new Error("Unexpected result returned.")}).then(()=>{wt().then(()=>{t(6,P=m.VERIFIED),t(7,z=!0),C("verified"),Ee("verified",{payload:ee})})}).catch(r=>{C(r),t(6,P=m.ERROR),t(7,z=!1),t(10,pe=r.message)})}function Xt(){z=this.checked,t(7,z)}function Jt(r){ue[r?"unshift":"push"](()=>{Q=r,t(9,Q)})}function zt(r){ue[r?"unshift":"push"](()=>{x=r,t(8,x)})}return n.$$set=r=>{"auto"in r&&t(0,s=r.auto),"blockspam"in r&&t(27,a=r.blockspam),"challengeurl"in r&&t(14,c=r.challengeurl),"challengejson"in r&&t(28,h=r.challengejson),"debug"in r&&t(15,B=r.debug),"delay"in r&&t(16,S=r.delay),"expire"in r&&t(17,H=r.expire),"floating"in r&&t(1,E=r.floating),"floatinganchor"in r&&t(18,U=r.floatinganchor),"floatingoffset"in r&&t(19,K=r.floatingoffset),"hidefooter"in r&&t(2,T=r.hidefooter),"hidelogo"in r&&t(3,oe=r.hidelogo),"name"in r&&t(4,J=r.name),"maxnumber"in r&&t(20,M=r.maxnumber),"mockerror"in r&&t(21,L=r.mockerror),"refetchonexpire"in r&&t(22,I=r.refetchonexpire),"spamfilter"in r&&t(23,_=r.spamfilter),"strings"in r&&t(29,A=r.strings),"test"in r&&t(24,d=r.test),"verifyurl"in r&&t(25,y=r.verifyurl),"workers"in r&&t(26,ce=r.workers),"workerurl"in r&&t(30,ve=r.workerurl)},n.$$.update=()=>{n.$$.dirty[0]&268435456&&(i=h?Oe(h):void 0),n.$$.dirty[0]&536870912&&t(34,l=A?Oe(A):{}),n.$$.dirty[1]&8&&t(11,o={ariaLinkLabel:Fe,error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:`Protected by ALTCHA`,label:"I'm not a robot",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait.",...l}),n.$$.dirty[0]&96&&Ee("statechange",{payload:ee,state:P}),n.$$.dirty[0]&64&&Zt()},[s,E,T,oe,J,ee,P,z,x,Q,pe,o,qt,Qe,c,B,S,H,U,K,M,L,I,_,d,y,ce,a,h,A,ve,nt,ge,te,l,Xt,Jt,zt]}class Be extends It{constructor(e){super(),Ct(this,e,Ht,Pt,ft,{auto:0,blockspam:27,challengeurl:14,challengejson:28,debug:15,delay:16,expire:17,floating:1,floatinganchor:18,floatingoffset:19,hidefooter:2,hidelogo:3,name:4,maxnumber:20,mockerror:21,refetchonexpire:22,spamfilter:23,strings:29,test:24,verifyurl:25,workers:26,workerurl:30,configure:31,reset:32,verify:33},null,[-1,-1,-1])}get auto(){return this.$$.ctx[0]}set auto(e){this.$$set({auto:e}),w()}get blockspam(){return this.$$.ctx[27]}set blockspam(e){this.$$set({blockspam:e}),w()}get challengeurl(){return this.$$.ctx[14]}set challengeurl(e){this.$$set({challengeurl:e}),w()}get challengejson(){return this.$$.ctx[28]}set challengejson(e){this.$$set({challengejson:e}),w()}get debug(){return this.$$.ctx[15]}set debug(e){this.$$set({debug:e}),w()}get delay(){return this.$$.ctx[16]}set delay(e){this.$$set({delay:e}),w()}get expire(){return this.$$.ctx[17]}set expire(e){this.$$set({expire:e}),w()}get floating(){return this.$$.ctx[1]}set floating(e){this.$$set({floating:e}),w()}get floatinganchor(){return this.$$.ctx[18]}set floatinganchor(e){this.$$set({floatinganchor:e}),w()}get floatingoffset(){return this.$$.ctx[19]}set floatingoffset(e){this.$$set({floatingoffset:e}),w()}get hidefooter(){return this.$$.ctx[2]}set hidefooter(e){this.$$set({hidefooter:e}),w()}get hidelogo(){return this.$$.ctx[3]}set hidelogo(e){this.$$set({hidelogo:e}),w()}get name(){return this.$$.ctx[4]}set name(e){this.$$set({name:e}),w()}get maxnumber(){return this.$$.ctx[20]}set maxnumber(e){this.$$set({maxnumber:e}),w()}get mockerror(){return this.$$.ctx[21]}set mockerror(e){this.$$set({mockerror:e}),w()}get refetchonexpire(){return this.$$.ctx[22]}set refetchonexpire(e){this.$$set({refetchonexpire:e}),w()}get spamfilter(){return this.$$.ctx[23]}set spamfilter(e){this.$$set({spamfilter:e}),w()}get strings(){return this.$$.ctx[29]}set strings(e){this.$$set({strings:e}),w()}get test(){return this.$$.ctx[24]}set test(e){this.$$set({test:e}),w()}get verifyurl(){return this.$$.ctx[25]}set verifyurl(e){this.$$set({verifyurl:e}),w()}get workers(){return this.$$.ctx[26]}set workers(e){this.$$set({workers:e}),w()}get workerurl(){return this.$$.ctx[30]}set workerurl(e){this.$$set({workerurl:e}),w()}get configure(){return this.$$.ctx[31]}get reset(){return this.$$.ctx[32]}get verify(){return this.$$.ctx[33]}}customElements.define("altcha-widget",Lt(Be,{auto:{},blockspam:{},challengeurl:{},challengejson:{},debug:{type:"Boolean"},delay:{},expire:{},floating:{},floatinganchor:{},floatingoffset:{},hidefooter:{type:"Boolean"},hidelogo:{type:"Boolean"},name:{},maxnumber:{},mockerror:{type:"Boolean"},refetchonexpire:{type:"Boolean"},spamfilter:{type:"Boolean"},strings:{},test:{type:"Boolean"},verifyurl:{},workers:{},workerurl:{}},[],["configure","reset","verify"],!1)),globalThis.createAltchaWorker=n=>new Worker(new URL(n||"./worker.js",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:N&&N.src||new URL("altcha.umd.cjs",document.baseURI).href)),O.Altcha=Be,Object.defineProperty(O,Symbol.toStringTag,{value:"Module"})}); +(function(O,D){typeof exports=="object"&&typeof module<"u"?D(exports):typeof define=="function"&&define.amd?define(["exports"],D):(O=typeof globalThis<"u"?globalThis:O||self,D(O.altcha={}))})(this,function(O){"use strict";var Qt=Object.defineProperty;var en=(O,D,Z)=>D in O?Qt(O,D,{enumerable:!0,configurable:!0,writable:!0,value:Z}):O[D]=Z;var q=(O,D,Z)=>en(O,typeof D!="symbol"?D+"":D,Z);var D=typeof document<"u"?document.currentScript:null;function Z(){}function Re(n){return n()}function $e(){return Object.create(null)}function le(n){n.forEach(Re)}function Te(n){return typeof n=="function"}function ct(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}function ut(n){return Object.keys(n).length===0}function v(n,e){n.appendChild(e)}function N(n,e,t){n.insertBefore(e,t||null)}function j(n){n.parentNode&&n.parentNode.removeChild(n)}function $(n){return document.createElement(n)}function W(n){return document.createElementNS("http://www.w3.org/2000/svg",n)}function at(n){return document.createTextNode(n)}function X(){return at(" ")}function ye(n,e,t,i){return n.addEventListener(e,t,i),()=>n.removeEventListener(e,t,i)}function f(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function ht(n){return Array.from(n.childNodes)}function Se(n,e,t){n.classList.toggle(e,!!t)}function dt(n,e,{bubbles:t=!1,cancelable:i=!1}={}){return new CustomEvent(n,{detail:e,bubbles:t,cancelable:i})}function gt(n){const e={};return n.childNodes.forEach(t=>{e[t.slot||"default"]=!0}),e}let se;function fe(n){se=n}function ke(){if(!se)throw new Error("Function called outside component initialization");return se}function mt(n){ke().$$.on_mount.push(n)}function bt(n){ke().$$.on_destroy.push(n)}function wt(){const n=ke();return(e,t,{cancelable:i=!1}={})=>{const l=n.$$.callbacks[e];if(l){const o=dt(e,t,{cancelable:i});return l.slice().forEach(s=>{s.call(n,o)}),!o.defaultPrevented}return!0}}const ne=[],he=[];let re=[];const Me=[],je=Promise.resolve();let ve=!1;function De(){ve||(ve=!0,je.then(w))}function _t(){return De(),je}function Ee(n){re.push(n)}const pe=new Set;let ie=0;function w(){if(ie!==0)return;const n=se;do{try{for(;ien.indexOf(i)===-1?e.push(i):t.push(i)),t.forEach(i=>i()),re=e}const vt=new Set;function Et(n,e){n&&n.i&&(vt.delete(n),n.i(e))}function pt(n,e,t){const{fragment:i,after_update:l}=n.$$;i&&i.m(e,t),Ee(()=>{const o=n.$$.on_mount.map(Re).filter(Te);n.$$.on_destroy?n.$$.on_destroy.push(...o):le(o),n.$$.on_mount=[]}),l.forEach(Ee)}function xt(n,e){const t=n.$$;t.fragment!==null&&(kt(t.after_update),le(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Ct(n,e){n.$$.dirty[0]===-1&&(ne.push(n),De(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const U=E.length?E[0]:H;return h.ctx&&l(h.ctx[S],h.ctx[S]=U)&&(!h.skip_bound&&h.bound[S]&&h.bound[S](U),B&&Ct(n,S)),H}):[],h.update(),B=!0,le(h.before_update),h.fragment=i?i(h.ctx):!1,e.target){if(e.hydrate){const S=ht(e.target);h.fragment&&h.fragment.l(S),S.forEach(j)}else h.fragment&&h.fragment.c();e.intro&&Et(n.$$.fragment),pt(n,e.target,e.anchor),w()}fe(u)}let Ne;typeof HTMLElement=="function"&&(Ne=class extends HTMLElement{constructor(e,t,i){super();q(this,"$$ctor");q(this,"$$s");q(this,"$$c");q(this,"$$cn",!1);q(this,"$$d",{});q(this,"$$r",!1);q(this,"$$p_d",{});q(this,"$$l",{});q(this,"$$l_u",new Map);this.$$ctor=e,this.$$s=t,i&&this.attachShadow({mode:"open"})}addEventListener(e,t,i){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(t),this.$$c){const l=this.$$c.$on(e,t);this.$$l_u.set(t,l)}super.addEventListener(e,t,i)}removeEventListener(e,t,i){if(super.removeEventListener(e,t,i),this.$$c){const l=this.$$l_u.get(t);l&&(l(),this.$$l_u.delete(t))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let e=function(o){return()=>{let s;return{c:function(){s=$("slot"),o!=="default"&&f(s,"name",o)},m:function(h,B){N(h,s,B)},d:function(h){h&&j(s)}}}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;const t={},i=gt(this);for(const o of this.$$s)o in i&&(t[o]=[e(o)]);for(const o of this.attributes){const s=this.$$g_p(o.name);s in this.$$d||(this.$$d[s]=de(s,o.value,this.$$p_d,"toProp"))}for(const o in this.$$p_d)!(o in this.$$d)&&this[o]!==void 0&&(this.$$d[o]=this[o],delete this[o]);this.$$c=new this.$$ctor({target:this.shadowRoot||this,props:{...this.$$d,$$slots:t,$$scope:{ctx:[]}}});const l=()=>{this.$$r=!0;for(const o in this.$$p_d)if(this.$$d[o]=this.$$c.$$.ctx[this.$$c.$$.props[o]],this.$$p_d[o].reflect){const s=de(o,this.$$d[o],this.$$p_d,"toAttribute");s==null?this.removeAttribute(this.$$p_d[o].attribute||o):this.setAttribute(this.$$p_d[o].attribute||o,s)}this.$$r=!1};this.$$c.$$.after_update.push(l),l();for(const o in this.$$l)for(const s of this.$$l[o]){const a=this.$$c.$on(o,s);this.$$l_u.set(s,a)}this.$$l={}}}attributeChangedCallback(e,t,i){var l;this.$$r||(e=this.$$g_p(e),this.$$d[e]=de(e,i,this.$$p_d,"toProp"),(l=this.$$c)==null||l.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{this.$$cn||(this.$$c.$destroy(),this.$$c=void 0)})}$$g_p(e){return Object.keys(this.$$p_d).find(t=>this.$$p_d[t].attribute===e||!this.$$p_d[t].attribute&&t.toLowerCase()===e)||e}});function de(n,e,t,i){var o;const l=(o=t[n])==null?void 0:o.type;if(e=l==="Boolean"&&typeof e!="boolean"?e!=null:e,!i||!t[n])return e;if(i==="toAttribute")switch(l){case"Object":case"Array":return e==null?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return e??null;default:return e}else switch(l){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":return e;case"Number":return e!=null?+e:e;default:return e}}function It(n,e,t,i,l,o){let s=class extends Ne{constructor(){super(n,t,l),this.$$p_d=e}static get observedAttributes(){return Object.keys(e).map(a=>(e[a].attribute||a).toLowerCase())}};return Object.keys(e).forEach(a=>{Object.defineProperty(s.prototype,a,{get(){return this.$$c&&a in this.$$c?this.$$c[a]:this.$$d[a]},set(u){var h;u=de(a,u,e),this.$$d[a]=u,(h=this.$$c)==null||h.$set({[a]:u})}})}),i.forEach(a=>{Object.defineProperty(s.prototype,a,{get(){var u;return(u=this.$$c)==null?void 0:u[a]}})}),o&&(s=o(s)),n.element=s,s}class At{constructor(){q(this,"$$");q(this,"$$set")}$destroy(){xt(this,1),this.$destroy=Z}$on(e,t){if(!Te(t))return Z;const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(t),()=>{const l=i.indexOf(t);l!==-1&&i.splice(l,1)}}$set(e){this.$$set&&!ut(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Rt="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Rt);const $t=new TextEncoder;function Tt(n){return[...new Uint8Array(n)].map(e=>e.toString(16).padStart(2,"0")).join("")}async function St(n,e="SHA-256",t=1e5){const i=Date.now().toString(16);n||(n=Math.round(Math.random()*t));const l=await Ve(i,n,e);return{algorithm:e,challenge:l,salt:i,signature:""}}async function Ve(n,e,t){return Tt(await crypto.subtle.digest(t.toUpperCase(),$t.encode(n+e)))}function Mt(n,e,t="SHA-256",i=1e6,l=0){const o=new AbortController,s=Date.now();return{promise:(async()=>{for(let u=l;u<=i;u+=1){if(o.signal.aborted)return null;if(await Ve(e,u,t)===n)return{number:u,took:Date.now()-s}}return null})(),controller:o}}var m=(n=>(n.ERROR="error",n.VERIFIED="verified",n.VERIFYING="verifying",n.UNVERIFIED="unverified",n.EXPIRED="expired",n))(m||{});function Pe(n){let e,t,i;return{c(){e=W("svg"),t=W("path"),i=W("path"),f(t,"d","M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"),f(t,"fill","currentColor"),f(t,"opacity",".25"),f(i,"d","M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"),f(i,"fill","currentColor"),f(i,"class","altcha-spinner"),f(e,"width","24"),f(e,"height","24"),f(e,"viewBox","0 0 24 24"),f(e,"xmlns","http://www.w3.org/2000/svg")},m(l,o){N(l,e,o),v(e,t),v(e,i)},d(l){l&&j(e)}}}function jt(n){let e,t=n[11].label+"",i;return{c(){e=$("label"),f(e,"for",i=n[4]+"_checkbox")},m(l,o){N(l,e,o),e.innerHTML=t},p(l,o){o[0]&2048&&t!==(t=l[11].label+"")&&(e.innerHTML=t),o[0]&16&&i!==(i=l[4]+"_checkbox")&&f(e,"for",i)},d(l){l&&j(e)}}}function Dt(n){let e,t=n[11].verifying+"";return{c(){e=$("span")},m(i,l){N(i,e,l),e.innerHTML=t},p(i,l){l[0]&2048&&t!==(t=i[11].verifying+"")&&(e.innerHTML=t)},d(i){i&&j(e)}}}function Nt(n){let e,t=n[11].verified+"",i,l;return{c(){e=$("span"),i=X(),l=$("input"),f(l,"type","hidden"),f(l,"name",n[4]),l.value=n[5]},m(o,s){N(o,e,s),e.innerHTML=t,N(o,i,s),N(o,l,s)},p(o,s){s[0]&2048&&t!==(t=o[11].verified+"")&&(e.innerHTML=t),s[0]&16&&f(l,"name",o[4]),s[0]&32&&(l.value=o[5])},d(o){o&&(j(e),j(i),j(l))}}}function Fe(n){let e,t,i,l,o,s,a;return{c(){e=$("div"),t=$("a"),i=W("svg"),l=W("path"),o=W("path"),s=W("path"),f(l,"d","M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"),f(l,"fill","currentColor"),f(o,"d","M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"),f(o,"fill","currentColor"),f(s,"d","M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"),f(s,"fill","currentColor"),f(i,"width","22"),f(i,"height","22"),f(i,"viewBox","0 0 20 20"),f(i,"fill","none"),f(i,"xmlns","http://www.w3.org/2000/svg"),f(t,"href",qe),f(t,"target","_blank"),f(t,"class","altcha-logo"),f(t,"aria-label",a=n[11].ariaLinkLabel)},m(u,h){N(u,e,h),v(e,t),v(t,i),v(i,l),v(i,o),v(i,s)},p(u,h){h[0]&2048&&a!==(a=u[11].ariaLinkLabel)&&f(t,"aria-label",a)},d(u){u&&j(e)}}}function He(n){let e,t,i,l;function o(u,h){return u[6]===m.EXPIRED?Pt:Vt}let s=o(n),a=s(n);return{c(){e=$("div"),t=W("svg"),i=W("path"),l=X(),a.c(),f(i,"stroke-linecap","round"),f(i,"stroke-linejoin","round"),f(i,"d","M6 18L18 6M6 6l12 12"),f(t,"width","14"),f(t,"height","14"),f(t,"xmlns","http://www.w3.org/2000/svg"),f(t,"fill","none"),f(t,"viewBox","0 0 24 24"),f(t,"stroke-width","1.5"),f(t,"stroke","currentColor"),f(e,"class","altcha-error")},m(u,h){N(u,e,h),v(e,t),v(t,i),v(e,l),a.m(e,null)},p(u,h){s===(s=o(u))&&a?a.p(u,h):(a.d(1),a=s(u),a&&(a.c(),a.m(e,null)))},d(u){u&&j(e),a.d()}}}function Vt(n){let e,t=n[11].error+"";return{c(){e=$("div"),f(e,"title",n[10])},m(i,l){N(i,e,l),e.innerHTML=t},p(i,l){l[0]&2048&&t!==(t=i[11].error+"")&&(e.innerHTML=t),l[0]&1024&&f(e,"title",i[10])},d(i){i&&j(e)}}}function Pt(n){let e,t=n[11].expired+"";return{c(){e=$("div"),f(e,"title",n[10])},m(i,l){N(i,e,l),e.innerHTML=t},p(i,l){l[0]&2048&&t!==(t=i[11].expired+"")&&(e.innerHTML=t),l[0]&1024&&f(e,"title",i[10])},d(i){i&&j(e)}}}function Oe(n){let e,t,i=n[11].footer+"";return{c(){e=$("div"),t=$("div"),f(e,"class","altcha-footer")},m(l,o){N(l,e,o),v(e,t),t.innerHTML=i},p(l,o){o[0]&2048&&i!==(i=l[11].footer+"")&&(t.innerHTML=i)},d(l){l&&j(e)}}}function Be(n){let e;return{c(){e=$("div"),f(e,"class","altcha-anchor-arrow")},m(t,i){N(t,e,i),n[36](e)},p:Z,d(t){t&&j(e),n[36](null)}}}function Ft(n){let e,t,i,l,o,s,a,u,h,B,S,H,E,U,K,T=n[6]===m.VERIFYING&&Pe();function oe(d,y){return d[6]===m.VERIFIED?Nt:d[6]===m.VERIFYING?Dt:jt}let J=oe(n),M=J(n),L=n[3]!==!0&&Fe(n),I=(n[10]||n[6]===m.EXPIRED)&&He(n),_=n[11].footer&&n[2]!==!0&&Oe(n),A=n[1]&&Be(n);return{c(){e=$("div"),t=$("div"),T&&T.c(),i=X(),l=$("div"),o=$("input"),u=X(),h=$("div"),M.c(),B=X(),L&&L.c(),S=X(),I&&I.c(),H=X(),_&&_.c(),E=X(),A&&A.c(),f(o,"type","checkbox"),f(o,"id",s=n[4]+"_checkbox"),o.required=a=n[0]!=="onsubmit",f(l,"class","altcha-checkbox"),Se(l,"altcha-hidden",n[6]===m.VERIFYING),f(h,"class","altcha-label"),f(t,"class","altcha-main"),f(e,"class","altcha"),f(e,"data-state",n[6]),f(e,"data-floating",n[1])},m(d,y){N(d,e,y),v(e,t),T&&T.m(t,null),v(t,i),v(t,l),v(l,o),o.checked=n[7],v(t,u),v(t,h),M.m(h,null),v(t,B),L&&L.m(t,null),v(e,S),I&&I.m(e,null),v(e,H),_&&_.m(e,null),v(e,E),A&&A.m(e,null),n[37](e),U||(K=[ye(o,"change",n[35]),ye(o,"change",n[12]),ye(o,"invalid",n[13])],U=!0)},p(d,y){d[6]===m.VERIFYING?T||(T=Pe(),T.c(),T.m(t,i)):T&&(T.d(1),T=null),y[0]&16&&s!==(s=d[4]+"_checkbox")&&f(o,"id",s),y[0]&1&&a!==(a=d[0]!=="onsubmit")&&(o.required=a),y[0]&128&&(o.checked=d[7]),y[0]&64&&Se(l,"altcha-hidden",d[6]===m.VERIFYING),J===(J=oe(d))&&M?M.p(d,y):(M.d(1),M=J(d),M&&(M.c(),M.m(h,null))),d[3]!==!0?L?L.p(d,y):(L=Fe(d),L.c(),L.m(t,null)):L&&(L.d(1),L=null),d[10]||d[6]===m.EXPIRED?I?I.p(d,y):(I=He(d),I.c(),I.m(e,H)):I&&(I.d(1),I=null),d[11].footer&&d[2]!==!0?_?_.p(d,y):(_=Oe(d),_.c(),_.m(e,E)):_&&(_.d(1),_=null),d[1]?A?A.p(d,y):(A=Be(d),A.c(),A.m(e,null)):A&&(A.d(1),A=null),y[0]&64&&f(e,"data-state",d[6]),y[0]&2&&f(e,"data-floating",d[1])},i:Z,o:Z,d(d){d&&j(e),T&&T.d(),M.d(),L&&L.d(),I&&I.d(),_&&_.d(),A&&A.d(),n[37](null),U=!1,le(K)}}}const Ue="Visit Altcha.org",qe="https://altcha.org/";function Ze(n){return JSON.parse(n)}function Ht(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}}function Ot(n,e,t){var st,ft;let i,l,o,{auto:s=void 0}=e,{blockspam:a=void 0}=e,{challengeurl:u=void 0}=e,{challengejson:h=void 0}=e,{debug:B=!1}=e,{delay:S=0}=e,{expire:H=void 0}=e,{floating:E=void 0}=e,{floatinganchor:U=void 0}=e,{floatingoffset:K=void 0}=e,{hidefooter:T=!1}=e,{hidelogo:oe=!1}=e,{name:J="altcha"}=e,{maxnumber:M=1e6}=e,{mockerror:L=!1}=e,{refetchonexpire:I=!0}=e,{spamfilter:_=!1}=e,{strings:A=void 0}=e,{test:d=!1}=e,{verifyurl:y=void 0}=e,{workers:ce=Math.min(16,navigator.hardwareConcurrency||8)}=e,{workerurl:xe=void 0}=e;const Ce=wt(),Ge=["SHA-256","SHA-384","SHA-512"],We=(ft=(st=document.documentElement.lang)==null?void 0:st.split("-"))==null?void 0:ft[0];let z=!1,p,Q=null,ge=null,b=null,Le=null,ee=null,V=m.UNVERIFIED,Y=null;bt(()=>{b&&(b.removeEventListener("submit",Je),b.removeEventListener("reset",ze),b.removeEventListener("focusin",Xe),b=null),Y&&(clearTimeout(Y),Y=null),document.removeEventListener("click",tt),document.removeEventListener("scroll",nt),window.removeEventListener("resize",it)}),mt(()=>{x("mounted","0.6.1"),x("workers",ce),d&&x("using test mode"),H&&me(H),s!==void 0&&x("auto",s),E!==void 0&&ot(E),b=p.closest("form"),b&&(b.addEventListener("submit",Je,{capture:!0}),b.addEventListener("reset",ze),s==="onfocus"&&b.addEventListener("focusin",Xe)),s==="onload"&&te()});function x(...r){(B||r.some(c=>c instanceof Error))&&console[r[0]instanceof Error?"error":"log"]("ALTCHA",...r)}function Xe(r){V===m.UNVERIFIED&&te()}function Je(r){b&&s==="onsubmit"&&(V===m.UNVERIFIED?(r.preventDefault(),r.stopPropagation(),te().then(()=>{b==null||b.requestSubmit()})):V!==m.VERIFIED&&(r.preventDefault(),r.stopPropagation(),V===m.VERIFYING&&rt()))}function ze(){be()}function Ke(r,c){return btoa(JSON.stringify({algorithm:r.algorithm,challenge:r.challenge,number:c.number,salt:r.salt,signature:r.signature,test:d?!0:void 0,took:c.took}))}function Qe(r){if(!r.algorithm)throw new Error("Invalid challenge. Property algorithm is missing.");if(r.signature===void 0)throw new Error("Invalid challenge. Property signature is missing.");if(!Ge.includes(r.algorithm.toUpperCase()))throw new Error(`Unknown algorithm value. Allowed values: ${Ge.join(", ")}`);if(!r.challenge||r.challenge.length<40)throw new Error("Challenge is too short. Min. 40 chars.");if(!r.salt||r.salt.length<10)throw new Error("Salt is too short. Min. 10 chars.")}async function Bt(){var r;if(L)throw x("mocking error"),new Error("Mocked error.");if(i)return x("using provided json data"),i;if(d)return x("generating test challenge",{test:d}),St(typeof d!="boolean"?+d:void 0);{if(!u)throw new Error("Attribute challengeurl not set.");x("fetching challenge from",u);const c=await fetch(u,{headers:{"x-altcha-spam-filter":_?"1":"0"}});if(c.status!==200)throw new Error(`Server responded with ${c.status}.`);const g=c.headers.get("Expires"),R=c.headers.get("X-Altcha-Config"),P=await c.json(),F=new URLSearchParams((r=P.salt.split("?"))==null?void 0:r[1]),G=F.get("expires")||F.get("expire");if(G){const k=new Date(+G*1e3),C=isNaN(k.getTime())?0:k.getTime()-Date.now();C>0&&me(C)}if(R)try{const k=JSON.parse(R);k&&typeof k=="object"&&(k.verifyurl&&(k.verifyurl=new URL(k.verifyurl,new URL(u)).toString()),lt(k))}catch(k){x("unable to configure from X-Altcha-Config",k)}if(!H&&(g!=null&&g.length)){const k=Date.parse(g);if(k){const C=k-Date.now();C>0&&me(C)}}return P}}function et(){u&&I&&V===m.VERIFIED?te():be(m.EXPIRED,o.expired)}async function Ut(r){let c=null;if("Worker"in window){try{c=await qt(r.challenge,r.salt,r.algorithm,r.maxnumber)}catch(g){x(g)}if((c==null?void 0:c.number)!==void 0)return{data:r,solution:c}}return{data:r,solution:await Mt(r.challenge,r.salt,r.algorithm,r.maxnumber||M).promise}}async function qt(r,c,g,R=typeof d=="number"?d:M,P=Math.ceil(ce)){const F=[];if(P<1)throw new Error("Wrong number of workers configured.");if(P>16)throw new Error("Too many workers. Max. 16 allowed workers.");for(let C=0;C{const ue=Ae*G;return new Promise(we=>{C.addEventListener("message",_e=>{if(_e.data)for(const ae of F)ae!==C&&ae.postMessage({type:"abort"});we(_e.data)}),C.postMessage({payload:{alg:g,challenge:r,max:ue+G,salt:c,start:ue},type:"work"})})}));for(const C of F)C.terminate();return k.find(C=>!!C)||null}function Zt(){[m.UNVERIFIED,m.ERROR,m.EXPIRED].includes(V)?_&&(b==null?void 0:b.reportValidity())===!1?t(7,z=!1):te():t(7,z=!0)}function tt(r){const c=r.target;E&&c&&!p.contains(c)&&V===m.VERIFIED&&t(8,p.style.display="none",p)}function nt(){E&&Ie()}function rt(){V===m.VERIFYING&&o.waitAlert&&alert(o.waitAlert)}function Yt(r){E&&V!==m.UNVERIFIED&&requestAnimationFrame(()=>{Ie()})}function it(){E&&Ie()}function me(r){x("expire",r),Y&&(clearTimeout(Y),Y=null),r<1?et():Y=setTimeout(et,r)}function ot(r){x("floating",r),E!==r&&(t(8,p.style.left="",p),t(8,p.style.top="",p)),t(1,E=r===!0||r===""?"auto":r===!1||r==="false"?void 0:E),E?(s||t(0,s="onsubmit"),document.addEventListener("scroll",nt),document.addEventListener("click",tt),window.addEventListener("resize",it)):s==="onsubmit"&&t(0,s=void 0)}function Gt(r){var g;const c=b==null?void 0:b.querySelector(typeof r=="string"?`input[name="${r}"]`:'input[type="email"]:not([data-no-spamfilter])');return((g=c==null?void 0:c.value)==null?void 0:g.slice(c.value.indexOf("@")))||void 0}function Wt(r){return[...(b==null?void 0:b.querySelectorAll(r!=null&&r.length?r.map(g=>`input[name="${g}"]`).join(", "):'input[type="text"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])'))||[]].reduce((g,R)=>{const P=R.name,F=R.value.trim();return P&&F&&(g[P]=F),g},{})}async function Xt(r){if(!y)throw new Error("Attribute verifyurl not set.");x("requesting server verification from",y);const c={payload:r};if(_){const{blockedCountries:P,classifier:F,disableRules:G,email:k,expectedLanguages:C,expectedCountries:Ae,fields:ue,ipAddress:we,text:_e,timeZone:ae}=typeof _=="object"?_:{blockedCountries:void 0,classifier:void 0,disableRules:void 0,email:void 0,expectedCountries:void 0,expectedLanguages:void 0,fields:void 0,ipAddress:void 0,text:void 0,timeZone:void 0};c.blockedCountries=P,c.classifier=F,c.disableRules=G,c.email=k===!1?void 0:Gt(k),c.expectedCountries=Ae,c.expectedLanguages=C||(We?[We]:void 0),c.fields=ue===!1?void 0:Wt(ue),c.ipAddress=we===!1?void 0:we||"auto",c.text=_e,c.timeZone=ae===!1?void 0:ae||Ht()}const g=await fetch(y,{body:JSON.stringify(c),headers:{"content-type":"application/json"},method:"POST"});if(g.status!==200)throw new Error(`Server responded with ${g.status}.`);const R=await g.json();if(R!=null&&R.payload&&t(5,ee=R.payload),Ce("serververification",R),a&&R.classification==="BAD")throw new Error("SpamFilter returned negative classification.")}function Ie(r=20){if(p)if(ge||(ge=(U?document.querySelector(U):b==null?void 0:b.querySelector('input[type="submit"], button[type="submit"], button:not([type="button"]):not([type="reset"])'))||b),ge){const c=parseInt(K,10)||12,g=ge.getBoundingClientRect(),R=p.getBoundingClientRect(),P=document.documentElement.clientHeight,F=document.documentElement.clientWidth,G=E==="auto"?g.bottom+R.height+c+r>P:E==="top",k=Math.max(r,Math.min(F-r-R.width,g.left+g.width/2-R.width/2));if(G?t(8,p.style.top=`${g.top-(R.height+c)}px`,p):t(8,p.style.top=`${g.bottom+c}px`,p),t(8,p.style.left=`${k}px`,p),p.setAttribute("data-floating",G?"top":"bottom"),Q){const C=Q.getBoundingClientRect();t(9,Q.style.left=g.left-k+g.width/2-C.width/2+"px",Q)}}else x("unable to find floating anchor element")}function lt(r){r.auto!==void 0&&(t(0,s=r.auto),s==="onload"&&te()),r.floatinganchor!==void 0&&t(18,U=r.floatinganchor),r.delay!==void 0&&t(16,S=r.delay),r.floatingoffset!==void 0&&t(19,K=r.floatingoffset),r.floating!==void 0&&ot(r.floating),r.expire!==void 0&&(me(r.expire),t(17,H=r.expire)),r.challenge&&(Qe(r.challenge),i=r.challenge),r.challengeurl!==void 0&&t(14,u=r.challengeurl),r.debug!==void 0&&t(15,B=!!r.debug),r.hidefooter!==void 0&&t(2,T=!!r.hidefooter),r.hidelogo!==void 0&&t(3,oe=!!r.hidelogo),r.maxnumber!==void 0&&t(20,M=+r.maxnumber),r.mockerror!==void 0&&t(21,L=!!r.mockerror),r.name!==void 0&&t(4,J=r.name),r.refetchonexpire!==void 0&&t(22,I=!!r.refetchonexpire),r.spamfilter!==void 0&&t(23,_=typeof r.spamfilter=="object"?r.spamfilter:!!r.spamfilter),r.strings&&t(34,l=r.strings),r.test!==void 0&&t(24,d=typeof r.test=="number"?r.test:!!r.test),r.verifyurl!==void 0&&t(25,y=r.verifyurl),r.workers!==void 0&&t(26,ce=+r.workers)}function be(r=m.UNVERIFIED,c=null){Y&&(clearTimeout(Y),Y=null),t(7,z=!1),t(10,Le=c),t(5,ee=null),t(6,V=r)}async function te(){return be(m.VERIFYING),await new Promise(r=>setTimeout(r,S||0)),Bt().then(r=>(Qe(r),x("challenge",r),Ut(r))).then(({data:r,solution:c})=>{if(x("solution",c),(c==null?void 0:c.number)!==void 0){if(y)return Xt(Ke(r,c));t(5,ee=Ke(r,c)),x("payload",ee)}else throw x("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."),new Error("Unexpected result returned.")}).then(()=>{_t().then(()=>{t(6,V=m.VERIFIED),t(7,z=!0),x("verified"),Ce("verified",{payload:ee})})}).catch(r=>{x(r),t(6,V=m.ERROR),t(7,z=!1),t(10,Le=r.message)})}function Jt(){z=this.checked,t(7,z)}function zt(r){he[r?"unshift":"push"](()=>{Q=r,t(9,Q)})}function Kt(r){he[r?"unshift":"push"](()=>{p=r,t(8,p)})}return n.$$set=r=>{"auto"in r&&t(0,s=r.auto),"blockspam"in r&&t(27,a=r.blockspam),"challengeurl"in r&&t(14,u=r.challengeurl),"challengejson"in r&&t(28,h=r.challengejson),"debug"in r&&t(15,B=r.debug),"delay"in r&&t(16,S=r.delay),"expire"in r&&t(17,H=r.expire),"floating"in r&&t(1,E=r.floating),"floatinganchor"in r&&t(18,U=r.floatinganchor),"floatingoffset"in r&&t(19,K=r.floatingoffset),"hidefooter"in r&&t(2,T=r.hidefooter),"hidelogo"in r&&t(3,oe=r.hidelogo),"name"in r&&t(4,J=r.name),"maxnumber"in r&&t(20,M=r.maxnumber),"mockerror"in r&&t(21,L=r.mockerror),"refetchonexpire"in r&&t(22,I=r.refetchonexpire),"spamfilter"in r&&t(23,_=r.spamfilter),"strings"in r&&t(29,A=r.strings),"test"in r&&t(24,d=r.test),"verifyurl"in r&&t(25,y=r.verifyurl),"workers"in r&&t(26,ce=r.workers),"workerurl"in r&&t(30,xe=r.workerurl)},n.$$.update=()=>{n.$$.dirty[0]&268435456&&(i=h?Ze(h):void 0),n.$$.dirty[0]&536870912&&t(34,l=A?Ze(A):{}),n.$$.dirty[1]&8&&t(11,o={ariaLinkLabel:Ue,error:"Verification failed. Try again later.",expired:"Verification expired. Try again.",footer:`Protected by ALTCHA`,label:"I'm not a robot",verified:"Verified",verifying:"Verifying...",waitAlert:"Verifying... please wait.",...l}),n.$$.dirty[0]&96&&Ce("statechange",{payload:ee,state:V}),n.$$.dirty[0]&64&&Yt()},[s,E,T,oe,J,ee,V,z,p,Q,Le,o,Zt,rt,u,B,S,H,U,K,M,L,I,_,d,y,ce,a,h,A,xe,lt,be,te,l,Jt,zt,Kt]}class Ye extends At{constructor(e){super(),Lt(this,e,Ot,Ft,ct,{auto:0,blockspam:27,challengeurl:14,challengejson:28,debug:15,delay:16,expire:17,floating:1,floatinganchor:18,floatingoffset:19,hidefooter:2,hidelogo:3,name:4,maxnumber:20,mockerror:21,refetchonexpire:22,spamfilter:23,strings:29,test:24,verifyurl:25,workers:26,workerurl:30,configure:31,reset:32,verify:33},null,[-1,-1,-1])}get auto(){return this.$$.ctx[0]}set auto(e){this.$$set({auto:e}),w()}get blockspam(){return this.$$.ctx[27]}set blockspam(e){this.$$set({blockspam:e}),w()}get challengeurl(){return this.$$.ctx[14]}set challengeurl(e){this.$$set({challengeurl:e}),w()}get challengejson(){return this.$$.ctx[28]}set challengejson(e){this.$$set({challengejson:e}),w()}get debug(){return this.$$.ctx[15]}set debug(e){this.$$set({debug:e}),w()}get delay(){return this.$$.ctx[16]}set delay(e){this.$$set({delay:e}),w()}get expire(){return this.$$.ctx[17]}set expire(e){this.$$set({expire:e}),w()}get floating(){return this.$$.ctx[1]}set floating(e){this.$$set({floating:e}),w()}get floatinganchor(){return this.$$.ctx[18]}set floatinganchor(e){this.$$set({floatinganchor:e}),w()}get floatingoffset(){return this.$$.ctx[19]}set floatingoffset(e){this.$$set({floatingoffset:e}),w()}get hidefooter(){return this.$$.ctx[2]}set hidefooter(e){this.$$set({hidefooter:e}),w()}get hidelogo(){return this.$$.ctx[3]}set hidelogo(e){this.$$set({hidelogo:e}),w()}get name(){return this.$$.ctx[4]}set name(e){this.$$set({name:e}),w()}get maxnumber(){return this.$$.ctx[20]}set maxnumber(e){this.$$set({maxnumber:e}),w()}get mockerror(){return this.$$.ctx[21]}set mockerror(e){this.$$set({mockerror:e}),w()}get refetchonexpire(){return this.$$.ctx[22]}set refetchonexpire(e){this.$$set({refetchonexpire:e}),w()}get spamfilter(){return this.$$.ctx[23]}set spamfilter(e){this.$$set({spamfilter:e}),w()}get strings(){return this.$$.ctx[29]}set strings(e){this.$$set({strings:e}),w()}get test(){return this.$$.ctx[24]}set test(e){this.$$set({test:e}),w()}get verifyurl(){return this.$$.ctx[25]}set verifyurl(e){this.$$set({verifyurl:e}),w()}get workers(){return this.$$.ctx[26]}set workers(e){this.$$set({workers:e}),w()}get workerurl(){return this.$$.ctx[30]}set workerurl(e){this.$$set({workerurl:e}),w()}get configure(){return this.$$.ctx[31]}get reset(){return this.$$.ctx[32]}get verify(){return this.$$.ctx[33]}}customElements.define("altcha-widget",It(Ye,{auto:{},blockspam:{},challengeurl:{},challengejson:{},debug:{type:"Boolean"},delay:{},expire:{},floating:{},floatinganchor:{},floatingoffset:{},hidefooter:{type:"Boolean"},hidelogo:{type:"Boolean"},name:{},maxnumber:{},mockerror:{type:"Boolean"},refetchonexpire:{type:"Boolean"},spamfilter:{type:"Boolean"},strings:{},test:{type:"Boolean"},verifyurl:{},workers:{},workerurl:{}},[],["configure","reset","verify"],!1)),globalThis.createAltchaWorker=n=>new Worker(new URL(n||"./worker.js",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:D&&D.src||new URL("altcha.umd.cjs",document.baseURI).href)),O.Altcha=Ye,Object.defineProperty(O,Symbol.toStringTag,{value:"Module"})}); diff --git a/package-lock.json b/package-lock.json index ad8c16d..90d6112 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "altcha", - "version": "0.4.3", + "version": "0.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "altcha", - "version": "0.4.3", + "version": "0.6.1", "license": "MIT", "devDependencies": { "@playwright/test": "^1.44.1", diff --git a/src/Altcha.svelte b/src/Altcha.svelte index 5f973a7..6165736 100644 --- a/src/Altcha.svelte +++ b/src/Altcha.svelte @@ -494,31 +494,41 @@ }; if (spamfilter) { const { + blockedCountries, + classifier, + disableRules, email, expectedLanguages, expectedCountries, fields, ipAddress, + text, timeZone, } = typeof spamfilter === 'object' ? spamfilter : { + blockedCountries: undefined, + classifier: undefined, + disableRules: undefined, email: undefined, expectedCountries: undefined, expectedLanguages: undefined, fields: undefined, ipAddress: undefined, + text: undefined, timeZone: undefined, }; - body.ipAddress = ipAddress === false ? undefined : ipAddress || 'auto'; + body.blockedCountries = blockedCountries; + body.classifier = classifier; + body.disableRules = disableRules; body.email = email === false ? undefined : getEmail(email); - body.fields = fields === false ? undefined : getTextFields(fields); - body.timeZone = - timeZone === false ? undefined : timeZone || getTimeZone(); body.expectedCountries = expectedCountries; - body.expectedLanguages = - expectedLanguages || (documentLocale ? [documentLocale] : undefined); + body.expectedLanguages = expectedLanguages || (documentLocale ? [documentLocale] : undefined); + body.fields = fields === false ? undefined : getTextFields(fields); + body.ipAddress = ipAddress === false ? undefined : ipAddress || 'auto'; + body.text = text; + body.timeZone = timeZone === false ? undefined : timeZone || getTimeZone(); } const resp = await fetch(verifyurl, { body: JSON.stringify(body), diff --git a/src/types.ts b/src/types.ts index ab17040..6348314 100644 --- a/src/types.ts +++ b/src/types.ts @@ -25,7 +25,7 @@ export interface Configure { mockerror?: boolean; name?: string; refetchonexpire?: boolean; - spamfilter?: boolean; + spamfilter?: boolean | SpamFilter; strings?: Partial; test?: boolean | number | 'delay'; verifyurl?: string; @@ -33,21 +33,29 @@ export interface Configure { } export interface SpamFilter { + blockedCountries?: string[]; + classifier?: string; + disableRules?: string[]; email?: string | false; - expectedLanguages?: string[]; expectedCountries?: string[]; + expectedLanguages?: string[]; fields?: string[] | false; ipAddress?: string | false; + text?: string | string[]; timeZone?: string | false; } export interface ServerVerificationPayload { + blockedCountries?: string[]; + classifier?: string; + disableRules?: string[]; email?: string; expectedCountries?: string[]; expectedLanguages?: string[]; fields?: Record; ipAddress?: string; payload: string; + text?: string | string[]; timeZone?: string; }