@prosopo/procaptcha-bundle 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,906 +0,0 @@
1
- import { z as X, r as f, l as Q, d as Z, j as u, a as T, b as g, A as b, h as de, P as ve, R as _e, C as Le, W as He, c as Re, e as Me, f as Ue, g as We, i as je, L as Ge, k as ze, m as Fe, n as Be } from "./index-BnKiDSMF.js";
2
- import { _ as Ke, a as $e, b as Ve, I as Xe, R as Ye, g as qe, c as Je, d as Qe, i as Ze, P as M, o as et, E as tt, e as O, f as C, h as $, j as pe, s as Ae, k as nt, l as rt, w as he, t as ae, m as ot, n as at, p as Y, r as st, q as ct, u as it, v as lt, A as ut, W as dt, K as pt, x as ht, C as ft, y as gt, z as mt } from "./utils-6l_jjPQ7.js";
3
- const Ee = X.object({
4
- account: X.string().optional(),
5
- blockNumber: X.number().optional(),
6
- providerUrl: X.string().optional()
7
- });
8
- function wt() {
9
- if (console && console.warn) {
10
- for (var t, e = arguments.length, n = new Array(e), r = 0; r < e; r++)
11
- n[r] = arguments[r];
12
- typeof n[0] == "string" && (n[0] = "react-i18next:: ".concat(n[0])), (t = console).warn.apply(t, n);
13
- }
14
- }
15
- var fe = {};
16
- function ce() {
17
- for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++)
18
- e[n] = arguments[n];
19
- typeof e[0] == "string" && fe[e[0]] || (typeof e[0] == "string" && (fe[e[0]] = /* @__PURE__ */ new Date()), wt.apply(void 0, e));
20
- }
21
- function ge(t, e, n) {
22
- t.loadNamespaces(e, function() {
23
- if (t.isInitialized)
24
- n();
25
- else {
26
- var r = function a() {
27
- setTimeout(function() {
28
- t.off("initialized", a);
29
- }, 0), n();
30
- };
31
- t.on("initialized", r);
32
- }
33
- });
34
- }
35
- function bt(t, e) {
36
- var n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = e.languages[0], a = e.options ? e.options.fallbackLng : !1, o = e.languages[e.languages.length - 1];
37
- if (r.toLowerCase() === "cimode")
38
- return !0;
39
- var s = function(i, p) {
40
- var y = e.services.backendConnector.state["".concat(i, "|").concat(p)];
41
- return y === -1 || y === 2;
42
- };
43
- return n.bindI18n && n.bindI18n.indexOf("languageChanging") > -1 && e.services.backendConnector.backend && e.isLanguageChangingTo && !s(e.isLanguageChangingTo, t) ? !1 : !!(e.hasResourceBundle(r, t) || !e.services.backendConnector.backend || e.options.resources && !e.options.partialBundledLanguages || s(r, t) && (!a || s(o, t)));
44
- }
45
- function yt(t, e) {
46
- var n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
47
- if (!e.languages || !e.languages.length)
48
- return ce("i18n.languages were undefined or empty", e.languages), !0;
49
- var r = e.options.ignoreJSONStructure !== void 0;
50
- return r ? e.hasLoadedNamespace(t, {
51
- precheck: function(o, s) {
52
- if (n.bindI18n && n.bindI18n.indexOf("languageChanging") > -1 && o.services.backendConnector.backend && o.isLanguageChangingTo && !s(o.isLanguageChangingTo, t))
53
- return !1;
54
- }
55
- }) : bt(t, e, n);
56
- }
57
- function xt(t, e) {
58
- var n = t == null ? null : typeof Symbol < "u" && t[Symbol.iterator] || t["@@iterator"];
59
- if (n != null) {
60
- var r, a, o, s, c = [], i = !0, p = !1;
61
- try {
62
- if (o = (n = n.call(t)).next, e !== 0)
63
- for (; !(i = (r = o.call(n)).done) && (c.push(r.value), c.length !== e); i = !0)
64
- ;
65
- } catch (y) {
66
- p = !0, a = y;
67
- } finally {
68
- try {
69
- if (!i && n.return != null && (s = n.return(), Object(s) !== s))
70
- return;
71
- } finally {
72
- if (p)
73
- throw a;
74
- }
75
- }
76
- return c;
77
- }
78
- }
79
- function Ct(t, e) {
80
- return Ke(t) || xt(t, e) || $e(t, e) || Ve();
81
- }
82
- function me(t, e) {
83
- var n = Object.keys(t);
84
- if (Object.getOwnPropertySymbols) {
85
- var r = Object.getOwnPropertySymbols(t);
86
- e && (r = r.filter(function(a) {
87
- return Object.getOwnPropertyDescriptor(t, a).enumerable;
88
- })), n.push.apply(n, r);
89
- }
90
- return n;
91
- }
92
- function se(t) {
93
- for (var e = 1; e < arguments.length; e++) {
94
- var n = arguments[e] != null ? arguments[e] : {};
95
- e % 2 ? me(Object(n), !0).forEach(function(r) {
96
- Je(t, r, n[r]);
97
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : me(Object(n)).forEach(function(r) {
98
- Object.defineProperty(t, r, Object.getOwnPropertyDescriptor(n, r));
99
- });
100
- }
101
- return t;
102
- }
103
- var vt = function(e, n) {
104
- var r = f.useRef();
105
- return f.useEffect(function() {
106
- r.current = e;
107
- }, [e, n]), r.current;
108
- };
109
- function At(t) {
110
- var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = e.i18n, r = f.useContext(Xe) || {}, a = r.i18n, o = n || a || Qe();
111
- if (o && !o.reportNamespaces && (o.reportNamespaces = new Ye()), !o) {
112
- ce("You will need to pass in an i18next instance by using initReactI18next");
113
- var s = function(E) {
114
- return Array.isArray(E) ? E[E.length - 1] : E;
115
- }, c = [s, {}, !1];
116
- return c.t = s, c.i18n = {}, c.ready = !1, c;
117
- }
118
- o.options.react && o.options.react.wait !== void 0 && ce("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");
119
- var i = se(se(se({}, qe()), o.options.react), e), p = i.useSuspense, y = i.keyPrefix, m = t;
120
- m = typeof m == "string" ? [m] : m || ["translation"], o.reportNamespaces.addUsedNamespaces && o.reportNamespaces.addUsedNamespaces(m);
121
- var k = (o.isInitialized || o.initializedStoreOnce) && m.every(function(A) {
122
- return yt(A, o, i);
123
- });
124
- function I() {
125
- return o.getFixedT(null, i.nsMode === "fallback" ? m : m[0], y);
126
- }
127
- var ee = f.useState(I), U = Ct(ee, 2), G = U[0], H = U[1], z = m.join(), B = vt(z), R = f.useRef(!0);
128
- f.useEffect(function() {
129
- var A = i.bindI18n, E = i.bindI18nStore;
130
- R.current = !0, !k && !p && ge(o, m, function() {
131
- R.current && H(I);
132
- }), k && B && B !== z && R.current && H(I);
133
- function W() {
134
- R.current && H(I);
135
- }
136
- return A && o && o.on(A, W), E && o && o.store.on(E, W), function() {
137
- R.current = !1, A && o && A.split(" ").forEach(function(V) {
138
- return o.off(V, W);
139
- }), E && o && E.split(" ").forEach(function(V) {
140
- return o.store.off(V, W);
141
- });
142
- };
143
- }, [o, z]);
144
- var S = f.useRef(!0);
145
- f.useEffect(function() {
146
- R.current && !S.current && H(I), S.current = !1;
147
- }, [o, y]);
148
- var v = [G, o, k];
149
- if (v.t = G, v.i18n = o, v.ready = k, k || !k && !p)
150
- return v;
151
- throw new Promise(function(A) {
152
- ge(o, m, function() {
153
- A();
154
- });
155
- });
156
- }
157
- function Et(t) {
158
- return At("translation", { i18n: Ze, ...t });
159
- }
160
- const It = (t) => {
161
- if (!t.hash)
162
- throw new M("CAPTCHA.MISSING_ITEM_HASH", { context: { item: t } });
163
- return t.hash;
164
- }, Nt = ({ challenge: t, solution: e, onClick: n, themeColor: r }) => {
165
- const a = t.captcha.items, o = f.useMemo(() => r === "light" ? Q : Z, [r]), s = "ontouchstart" in window;
166
- return u("div", { style: {
167
- paddingRight: 0.5,
168
- paddingBottom: 0.5,
169
- width: "100%",
170
- height: "100%",
171
- display: "flex",
172
- flexDirection: "row",
173
- flexWrap: "wrap"
174
- }, children: a.map((c, i) => {
175
- const p = It(c);
176
- return u("div", { style: {
177
- paddingTop: "4px",
178
- paddingLeft: "4px",
179
- flexGrow: 1,
180
- flexBasis: "33.3333%",
181
- boxSizing: "border-box"
182
- }, children: T("div", { style: { cursor: "pointer", height: "100%", width: "100%" }, onClick: s ? void 0 : () => n(p), onTouchStart: s ? () => n(p) : void 0, children: [u("div", { style: { border: 1, borderColor: o.palette.grey[300] }, children: u("img", { style: {
183
- width: "100%",
184
- backgroundColor: o.palette.grey[300],
185
- opacity: e.includes(p) && s ? "50%" : "100%",
186
- display: "block",
187
- objectFit: "contain",
188
- aspectRatio: "1/1",
189
- height: "auto"
190
- }, src: c.data, alt: `Captcha image ${i + 1}` }) }), u("div", { style: {
191
- position: "relative",
192
- width: "100%",
193
- height: "100%",
194
- top: "-100%",
195
- visibility: e.includes(p) ? "visible" : "hidden",
196
- transition: "opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms",
197
- opacity: 1
198
- }, children: u("div", { style: {
199
- position: "absolute",
200
- top: 0,
201
- left: 0,
202
- bottom: 0,
203
- right: 0,
204
- height: "100%",
205
- width: "100%",
206
- display: "flex",
207
- alignItems: "center",
208
- justifyContent: "center",
209
- backgroundColor: "rgba(0,0,0,0.5)"
210
- }, children: u("svg", { style: {
211
- backgroundColor: "transparent",
212
- display: "block",
213
- width: "35%",
214
- height: "35%",
215
- transition: "fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms",
216
- userSelect: "none",
217
- fill: "currentcolor"
218
- }, focusable: "false", color: "#fff", "aria-hidden": "true", viewBox: "0 0 24 24", "data-testid": "CheckIcon", children: u("path", { d: "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" }) }) }) })] }) }, i);
219
- }) });
220
- };
221
- function Tt(t = {}) {
222
- return Object.keys(t).reduce((e, n) => ({ ...e, [`data-${n}`]: t[n] }), {});
223
- }
224
- function ie({ general: t, dev: e }) {
225
- return {
226
- ...Tt(t)
227
- };
228
- }
229
- const St = {
230
- display: "inline-flex",
231
- alignItems: "center",
232
- justifyContent: "center",
233
- position: "relative",
234
- boxSizing: "border-box",
235
- outline: "0px",
236
- border: "0px",
237
- margin: "0px",
238
- cursor: "pointer",
239
- userSelect: "none",
240
- verticalAlign: "middle",
241
- appearance: void 0,
242
- textDecoration: "none",
243
- fontWeight: "500",
244
- fontSize: "0.875rem",
245
- lineHeight: "1.75",
246
- letterSpacing: "0.02857em",
247
- textTransform: "uppercase",
248
- minWidth: "64px",
249
- padding: "6px 16px",
250
- borderRadius: "4px",
251
- transition: "background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms",
252
- color: "rgb(0, 0, 0)",
253
- backgroundColor: "#ffffff",
254
- boxShadow: "rgba(0, 0, 0, 0.2) 0px 3px 1px -2px, rgba(0, 0, 0, 0.14) 0px 2px 2px 0px, rgba(0, 0, 0, 0.12) 0px 1px 5px 0px"
255
- }, we = ({ themeColor: t, buttonType: e, text: n, onClick: r }) => {
256
- const a = f.useMemo(() => t === "light" ? Q : Z, [t]), [o, s] = f.useState(!1), c = f.useMemo(() => {
257
- const i = {
258
- ...St,
259
- color: o ? a.palette.primary.contrastText : a.palette.background.contrastText
260
- };
261
- return e === "cancel" ? {
262
- ...i,
263
- backgroundColor: o ? a.palette.grey[600] : "transparent"
264
- } : {
265
- ...i,
266
- backgroundColor: o ? a.palette.primary.main : a.palette.background.default
267
- };
268
- }, [e, o, a]);
269
- return u("button", { ...ie({ dev: { cy: `button-${e}` } }), onMouseEnter: () => s(!0), onMouseLeave: () => s(!1), style: c, onClick: (i) => {
270
- i.preventDefault(), r();
271
- }, children: n });
272
- }, Pt = ({ challenge: t, index: e, solutions: n, onSubmit: r, onCancel: a, onClick: o, onNext: s, themeColor: c }) => {
273
- const { t: i } = Et(), p = t.captchas ? g(t.captchas, e) : null, y = n ? g(n, e) : [], m = f.useMemo(() => c === "light" ? Q : Z, [c]);
274
- return u(f.Suspense, { fallback: u("div", { children: "Loading..." }), children: u("div", { style: {
275
- overflowX: "auto",
276
- overflowY: "auto",
277
- width: "100%",
278
- maxWidth: "500px",
279
- maxHeight: "100%",
280
- display: "flex",
281
- flexDirection: "column"
282
- }, children: T("div", { style: {
283
- backgroundColor: m.palette.background.default,
284
- display: "flex",
285
- flexDirection: "column",
286
- minWidth: "300px"
287
- }, children: [T("div", { style: {
288
- display: "flex",
289
- alignItems: "center",
290
- width: "100%",
291
- backgroundColor: m.palette.primary.main,
292
- padding: "24px 16px"
293
- }, children: [T("p", { style: {
294
- color: "#ffffff",
295
- fontWeight: 700,
296
- lineHeight: 1.5
297
- }, children: [i("WIDGET.SELECT_ALL"), ": "] }), u("p", { style: {
298
- color: "#ffffff",
299
- fontWeight: 700,
300
- textTransform: "capitalize",
301
- lineHeight: 1.5
302
- }, children: `${g(t.captchas, e).captcha.target}` })] }), u("div", { ...ie({ dev: { cy: "captcha-" + e } }), children: p && u(Nt, { challenge: p, solution: y, onClick: o, themeColor: c }) }), u("div", { style: {
303
- display: "flex",
304
- alignItems: "center",
305
- justifyContent: "center",
306
- width: "100%"
307
- }, ...ie({ dev: { cy: "dots-captcha" } }) }), u("div", { style: {
308
- padding: "8px 16px",
309
- display: "flex",
310
- width: "100%"
311
- } }), T("div", { style: {
312
- padding: "0 16px 16px",
313
- display: "flex",
314
- alignItems: "center",
315
- justifyContent: "space-between",
316
- lineHeight: 1.75
317
- }, children: [u(we, { themeColor: c, buttonType: "cancel", onClick: a, text: i("WIDGET.CANCEL") }), u(we, { themeColor: c, buttonType: "next", text: e < t.captchas.length - 1 ? i("WIDGET.NEXT") : i("WIDGET.SUBMIT"), onClick: e < t.captchas.length - 1 ? s : r })] })] }) }) });
318
- };
319
- function Ot(t) {
320
- return new Promise((e) => {
321
- document.readyState === "complete" ? e(t()) : window.addEventListener("load", () => e(t()));
322
- });
323
- }
324
- const J = window;
325
- J.injectedWeb3 = J.injectedWeb3 || {};
326
- Ie();
327
- let be = null;
328
- function Ie() {
329
- return Object.values(J.injectedWeb3).filter(({ connect: t, enable: e }) => !!(t || e)).length !== 0;
330
- }
331
- function kt(t) {
332
- return Promise.all(Object.entries(J.injectedWeb3).map(([e, { connect: n, enable: r, version: a }]) => Promise.resolve().then(() => n ? n(t) : r ? r(t).then((o) => et({ name: e, version: a || "unknown" }, o)) : Promise.reject(new Error("No connect(..) or enable(...) hook found"))).catch(({ message: o }) => {
333
- console.error(`Error initializing ${e}: ${o}`);
334
- }))).then((e) => e.filter((n) => !!n));
335
- }
336
- function Dt(t, e = []) {
337
- if (!t)
338
- throw new Error("You must pass a name for your app to the web3Enable function");
339
- const n = e.length ? Promise.all(e.map((r) => r().catch(() => !1))) : Promise.resolve([!0]);
340
- return be = Ot(() => n.then(() => kt(t).then((r) => r.map((a) => (a.accounts.subscribe || (a.accounts.subscribe = (o) => (a.accounts.get().then(o).catch(console.error), () => {
341
- })), a))).catch(() => []).then((r) => {
342
- const a = r.map(({ name: o, version: s }) => `${o}/${s}`);
343
- return Ie(), `${r.length}`, r.length, `${a.join(", ")}`, r;
344
- }))), be;
345
- }
346
- class _t extends tt {
347
- async getAccount(e) {
348
- const { dappName: n, userAccountAddress: r } = e;
349
- if (!r)
350
- throw new O("WIDGET.NO_ACCOUNTS_FOUND", { context: { error: "No account address provided" } });
351
- const a = await Dt(n);
352
- if (a.length === 0)
353
- throw new O("WIDGET.NO_EXTENSION_FOUND");
354
- for (const o of a) {
355
- const c = (await o.accounts.get()).find((i) => i.address === r);
356
- if (c)
357
- return { account: c, extension: o };
358
- }
359
- throw new O("WIDGET.ACCOUNT_NOT_FOUND", {
360
- context: { error: `No account found matching ${r}` }
361
- });
362
- }
363
- }
364
- async function Lt(t) {
365
- try {
366
- const e = await fetch(t);
367
- if (!e.ok)
368
- throw new M("API.BAD_REQUEST", {
369
- context: { error: `Network response was not ok, status: ${e.status}`, url: t }
370
- });
371
- const n = await e.arrayBuffer();
372
- return new Uint8Array(n);
373
- } catch (e) {
374
- throw new C("DATABASE.IMAGE_GET_FAILED", { context: { error: e } });
375
- }
376
- }
377
- const Ht = "NO_SOLUTION";
378
- function Ne(t, e = !1, n = !1, r) {
379
- try {
380
- const a = t.items.map((o, s) => {
381
- if (o.hash)
382
- return o.hash;
383
- throw new M("CAPTCHA.MISSING_ITEM_HASH", {
384
- context: {
385
- computeCaptchaHashName: Ne.name,
386
- index: s
387
- }
388
- });
389
- });
390
- return $([
391
- t.target,
392
- ...e ? Rt(t.solution) : [],
393
- n ? t.salt : "",
394
- r ? a.sort() : a
395
- ]);
396
- } catch (a) {
397
- throw new M("DATASET.HASH_ERROR", { context: { error: a } });
398
- }
399
- }
400
- function Rt(t) {
401
- return t !== void 0 ? t.sort() : [Ht];
402
- }
403
- async function Mt(t) {
404
- if (t.type === "text")
405
- return { ...t, hash: pe(t.data) };
406
- if (t.type === "image")
407
- return { ...t, hash: pe(await Lt(t.data)) };
408
- throw new M("CAPTCHA.INVALID_ITEM_FORMAT");
409
- }
410
- function Ut(t) {
411
- return $([t.captchaId, t.captchaContentId, [...t.solution].sort(), t.salt]);
412
- }
413
- class ye {
414
- constructor(e) {
415
- this.hash = e, this.parent = null;
416
- }
417
- }
418
- class Wt {
419
- constructor() {
420
- this.leaves = [], this.layers = [];
421
- }
422
- build(e) {
423
- this.layers.length && (this.layers = []);
424
- const n = [];
425
- for (const r of e) {
426
- const a = new ye(r);
427
- this.leaves.push(a), n.push(a.hash);
428
- }
429
- this.layers.push(n), this.root = this.buildMerkleTree(this.leaves)[0];
430
- }
431
- buildMerkleTree(e) {
432
- const n = e.length;
433
- if (n === 1)
434
- return e;
435
- const r = [];
436
- let a = 0;
437
- const o = [];
438
- for (; a < n; ) {
439
- const s = e[a];
440
- if (s === void 0)
441
- throw new O("DEVELOPER.GENERAL", { context: { error: "leftChild undefined" } });
442
- const c = a + 1 < n ? g(e, a + 1) : s, i = this.createParent(s, c);
443
- o.push(i.hash), r.push(i), a += 2;
444
- }
445
- return this.layers.push(o), this.buildMerkleTree(r);
446
- }
447
- createParent(e, n) {
448
- const r = new ye($([e.hash, n.hash]));
449
- return e.parent = r.hash, n.parent = r.hash, r;
450
- }
451
- proof(e) {
452
- const n = [];
453
- let r = 0;
454
- for (; r < this.layers.length - 1; ) {
455
- const o = this.layers[r];
456
- if (o === void 0)
457
- throw new O("DATASET.MERKLE_ERROR", {
458
- context: { error: "layer undefined", failedFuncName: this.proof.name, layerNum: r }
459
- });
460
- const s = o.indexOf(e);
461
- let c = s % 2 && s > 0 ? s - 1 : s + 1;
462
- c > o.length - 1 && (c = s);
463
- const i = [e], p = g(o, c);
464
- c > s ? i.push(p) : i.unshift(p), n.push([g(i, 0), g(i, 1)]), r += 1, e = $(i);
465
- }
466
- const a = g(this.layers, this.layers.length - 1);
467
- return [...n, [g(a, 0)]];
468
- }
469
- }
470
- function jt(t, e) {
471
- try {
472
- if (g(e, 0).indexOf(t) === -1)
473
- return !1;
474
- for (const [n, r] of e.entries()) {
475
- if (t = $(r), g(e, n + 1).indexOf(t) === -1)
476
- return !1;
477
- const a = g(e, e.length - 1);
478
- if (t === g(a, 0))
479
- return !0;
480
- }
481
- return !1;
482
- } catch {
483
- return !1;
484
- }
485
- }
486
- class Gt {
487
- constructor(e, n, r, a, o, s) {
488
- this.userAccount = e, this.contract = n, this.provider = r, this.providerApi = a, this._web2 = o, this.dappAccount = s;
489
- }
490
- get web2() {
491
- return this._web2;
492
- }
493
- async getCaptchaChallenge() {
494
- try {
495
- const e = await this.providerApi.getCaptchaChallenge(this.userAccount, this.provider);
496
- return this.verifyCaptchaChallengeContent(this.provider, e), e.captchas.forEach((n) => {
497
- n.captcha.items.forEach((r) => {
498
- r.data && (r.data = r.data.replace(/^http(s)*:\/\//, "//"));
499
- });
500
- }), e;
501
- } catch (e) {
502
- throw new C("CAPTCHA.INVALID_CAPTCHA_CHALLENGE", { context: { error: e } });
503
- }
504
- }
505
- verifyCaptchaChallengeContent(e, n) {
506
- const r = g(n.captchas, 0), a = r.proof.length, o = g(r.proof, a - 1);
507
- if (e.provider.datasetIdContent.toString() !== g(o, 0))
508
- throw new C("CAPTCHA.INVALID_DATASET_CONTENT_ID");
509
- for (const s of n.captchas) {
510
- if (!zt(s))
511
- throw new C("CAPTCHA.INVALID_CAPTCHA_CHALLENGE");
512
- if (!jt(s.captcha.captchaContentId, s.proof))
513
- throw new C("CAPTCHA.INVALID_CAPTCHA_CHALLENGE");
514
- }
515
- }
516
- async submitCaptchaSolution(e, n, r, a, o) {
517
- const s = new Wt(), c = a.map((I) => Ut(I));
518
- s.build(c);
519
- const i = s.root.hash, p = void 0;
520
- let y;
521
- if (!e || !e.signRaw)
522
- throw new C("GENERAL.CANT_FIND_KEYRINGPAIR", {
523
- context: { error: "Signer is not defined, cannot sign message to prove account ownership" }
524
- });
525
- let m;
526
- y = (await e.signRaw({
527
- address: this.userAccount,
528
- data: Ae(n),
529
- type: "bytes"
530
- })).signature;
531
- try {
532
- m = await this.providerApi.submitCaptchaSolution(a, n, this.contract.pair.address, o, y);
533
- } catch (I) {
534
- throw new M("CAPTCHA.INVALID_CAPTCHA_CHALLENGE", { context: { error: I } });
535
- }
536
- return [m, i, p];
537
- }
538
- }
539
- async function zt(t) {
540
- const e = t.captcha, n = t.proof;
541
- if (!(await Promise.all(e.items.map(async (a) => (await Mt(a)).hash === a.hash))).every((a) => a === !0))
542
- return !1;
543
- const r = Ne(e, !1, !1, !1);
544
- return r !== e.captchaContentId ? !1 : g(n, 0).indexOf(r) !== -1;
545
- }
546
- const Te = "@prosopo/procaptcha";
547
- function le() {
548
- return Ee.parse(JSON.parse(nt(localStorage.getItem(Te) || "0x7b7d")));
549
- }
550
- function Se(t) {
551
- localStorage.setItem(Te, Ae(JSON.stringify(Ee.parse(t))));
552
- }
553
- function Ft(t) {
554
- Se({ ...le(), account: t });
555
- }
556
- function Bt() {
557
- return le().account || null;
558
- }
559
- const F = {
560
- setAccount: Ft,
561
- getAccount: Bt,
562
- setProcaptchaStorage: Se,
563
- getProcaptchaStorage: le
564
- }, Kt = () => ({
565
- showModal: !1,
566
- loading: !1,
567
- index: 0,
568
- challenge: void 0,
569
- solutions: void 0,
570
- isHuman: !1,
571
- captchaApi: void 0,
572
- account: void 0
573
- }), xe = (t) => {
574
- const e = t.networks[t.defaultNetwork];
575
- if (!e)
576
- throw new C("DEVELOPER.NETWORK_NOT_FOUND", {
577
- context: { error: `No network found for environment ${t.defaultEnvironment}` }
578
- });
579
- return e;
580
- };
581
- function $t(t, e, n, r) {
582
- const a = rt(n, e, r), o = (l) => {
583
- const d = l instanceof Error ? l : new Error(String(l));
584
- a.onError(d);
585
- }, s = ot(e, n), c = () => {
586
- const l = {
587
- userAccountAddress: "",
588
- ...t
589
- };
590
- return e.account && (l.userAccountAddress = e.account.account.address), ve.parse(l);
591
- }, i = async (l) => {
592
- try {
593
- await l();
594
- } catch (d) {
595
- console.error(d), o(d), s({ isHuman: !1, showModal: !1, loading: !1 });
596
- }
597
- }, p = async () => {
598
- a.onOpen(), await i(async () => {
599
- if (e.loading || e.isHuman)
600
- return;
601
- z(), s({ loading: !0 });
602
- const l = c();
603
- s({ dappAccount: l.account.address }), await at(100);
604
- const d = await R(), h = await W();
605
- let w = !1;
606
- try {
607
- w = (await h.query.dappOperatorIsHumanUser(d.account.address, l.solutionThreshold)).value.unwrap().unwrap();
608
- } catch (N) {
609
- }
610
- if (w) {
611
- s({ isHuman: !0, loading: !1 }), a.onHuman(Y({
612
- [b.user]: d.account.address,
613
- [b.dapp]: v(),
614
- [b.blockNumber]: A()
615
- })), H();
616
- return;
617
- }
618
- const x = F.getProcaptchaStorage();
619
- let D;
620
- if (x.providerUrl && x.blockNumber) {
621
- D = await U(x.providerUrl);
622
- try {
623
- const N = E(d);
624
- if (!N || !N.signer || !N.signer.signRaw)
625
- throw new C("ACCOUNT.NO_POLKADOT_EXTENSION");
626
- const re = N.signer.signRaw, { signature: Oe } = await re({
627
- address: d.account.address,
628
- data: x.blockNumber.toString(),
629
- type: "bytes"
630
- }), ke = Y({
631
- [b.user]: d.account.address,
632
- [b.dapp]: v(),
633
- [b.blockNumber]: x.blockNumber
634
- }), oe = await D.verifyUser(ke, Oe, t.captchas.image.cachedTimeout);
635
- if (oe.verified) {
636
- s({ isHuman: !0, loading: !1 });
637
- const De = {
638
- [b.providerUrl]: x.providerUrl,
639
- [b.user]: d.account.address,
640
- [b.dapp]: v(),
641
- [b.commitmentId]: de(oe.commitmentId),
642
- [b.blockNumber]: oe.blockNumber
643
- };
644
- a.onHuman(Y(De)), H();
645
- return;
646
- }
647
- } catch {
648
- console.error("Error contacting provider from storage", x.providerUrl);
649
- }
650
- }
651
- const _ = await he(h.query.getRandomActiveProvider, h.query)(d.account.address, v()), L = parseInt(_.blockNumber.toString()), j = ae(_.provider.url.toString());
652
- D = await U(j);
653
- const P = await (await ee(h, _, D)).getCaptchaChallenge();
654
- if (P.captchas.length <= 0)
655
- throw new M("DEVELOPER.PROVIDER_NO_CAPTCHA");
656
- const te = P.captchas.map((N) => N.captcha.timeLimitMs || l.captchas.image.challengeTimeout).reduce((N, re) => N + re), ne = setTimeout(() => {
657
- a.onChallengeExpired(), s({ isHuman: !1, showModal: !1, loading: !1 });
658
- }, te);
659
- s({
660
- index: 0,
661
- solutions: P.captchas.map(() => []),
662
- challenge: P,
663
- showModal: !0,
664
- timeout: ne,
665
- blockNumber: L
666
- });
667
- });
668
- }, y = async () => {
669
- await i(async () => {
670
- if (G(), !e.challenge)
671
- throw new O("CAPTCHA.NO_CAPTCHA", {
672
- context: { error: "Cannot submit, no Captcha found in state" }
673
- });
674
- s({ showModal: !1 });
675
- const l = e.challenge, d = st(), h = e.challenge.captchas.map((P, te) => {
676
- const ne = g(e.solutions, te);
677
- return {
678
- captchaId: P.captcha.captchaId,
679
- captchaContentId: P.captcha.captchaContentId,
680
- salt: d,
681
- solution: ne
682
- };
683
- }), w = S(), x = A(), D = E(w).signer, _ = g(l.captchas, 0);
684
- if (!_.captcha.datasetId)
685
- throw new M("CAPTCHA.INVALID_CAPTCHA_ID", {
686
- context: { error: "No datasetId set for challenge" }
687
- });
688
- const L = B(), j = await L.submitCaptchaSolution(D, l.requestHash, _.captcha.datasetId, h, d), K = j[0].verified;
689
- if (K || a.onFailed(), s({
690
- submission: j,
691
- isHuman: K,
692
- loading: !1
693
- }), e.isHuman) {
694
- const P = ae(L.provider.provider.url.toString());
695
- F.setProcaptchaStorage({ ...F.getProcaptchaStorage(), providerUrl: P, blockNumber: x }), a.onHuman(Y({
696
- [b.providerUrl]: P,
697
- [b.user]: w.account.address,
698
- [b.dapp]: v(),
699
- [b.commitmentId]: de(j[1]),
700
- [b.blockNumber]: x
701
- })), H();
702
- }
703
- });
704
- }, m = async () => {
705
- G(), z(), a.onClose();
706
- }, k = (l) => {
707
- if (!e.challenge)
708
- throw new O("CAPTCHA.NO_CAPTCHA", {
709
- context: { error: "Cannot select, no Captcha found in state" }
710
- });
711
- if (e.index >= e.challenge.captchas.length || e.index < 0)
712
- throw new O("CAPTCHA.NO_CAPTCHA", {
713
- context: { error: "Cannot select, index is out of range for this Captcha" }
714
- });
715
- const d = e.index, h = e.solutions, w = g(h, d);
716
- w.includes(l) ? w.splice(w.indexOf(l), 1) : w.push(l), s({ solutions: h });
717
- }, I = () => {
718
- if (!e.challenge)
719
- throw new O("CAPTCHA.NO_CAPTCHA", {
720
- context: { error: "Cannot select, no Captcha found in state" }
721
- });
722
- if (e.index + 1 >= e.challenge.captchas.length)
723
- throw new O("CAPTCHA.NO_CAPTCHA", {
724
- context: { error: "Cannot select, index is out of range for this Captcha" }
725
- });
726
- s({ index: e.index + 1 });
727
- }, ee = async (l, d, h) => {
728
- const w = c(), x = new Gt(S().account.address, l, d, h, w.web2, v());
729
- return s({ captchaApi: x }), B();
730
- }, U = async (l) => {
731
- const d = c(), h = xe(d);
732
- if (!d.account.address)
733
- throw new C("GENERAL.SITE_KEY_MISSING");
734
- return new ct(h, l, d.account.address);
735
- }, G = () => {
736
- window.clearTimeout(e.timeout), s({ timeout: void 0 });
737
- }, H = () => {
738
- const l = t.captchas.image.solutionTimeout, d = setTimeout(() => {
739
- s({ isHuman: !1 }), a.onExpired();
740
- }, l);
741
- s({ successfullChallengeTimeout: d });
742
- }, z = () => {
743
- G(), s(Kt());
744
- }, B = () => {
745
- if (!e.captchaApi)
746
- throw new C("API.UNKNOWN", {
747
- context: { error: "Captcha api not set", state: e }
748
- });
749
- return e.captchaApi;
750
- }, R = async () => {
751
- const l = c();
752
- if (!l.web2 && !l.userAccountAddress)
753
- throw new C("GENERAL.ACCOUNT_NOT_FOUND", {
754
- context: { error: "Account address has not been set for web3 mode" }
755
- });
756
- const h = await (l.web2 ? new it() : new _t()).getAccount(l);
757
- return F.setAccount(h.account.address), s({ account: h }), S();
758
- }, S = () => {
759
- if (!e.account)
760
- throw new C("GENERAL.ACCOUNT_NOT_FOUND", { context: { error: "Account not loaded" } });
761
- return e.account;
762
- }, v = () => {
763
- if (!e.dappAccount)
764
- throw new C("GENERAL.SITE_KEY_MISSING");
765
- return e.dappAccount;
766
- }, A = () => {
767
- if (!e.blockNumber)
768
- throw new lt("CAPTCHA.INVALID_BLOCK_NO", { context: { error: "Block number not found" } });
769
- return e.blockNumber;
770
- }, E = (l) => {
771
- if (l = l || S(), !l.extension)
772
- throw new C("ACCOUNT.NO_POLKADOT_EXTENSION", { context: { error: "Extension not loaded" } });
773
- return l.extension;
774
- }, W = async () => {
775
- const l = c(), d = xe(l), h = await ut.create({
776
- provider: new dt(d.endpoint),
777
- initWasm: !1,
778
- noInitWarn: !0
779
- }), w = "sr25519", x = new pt({ type: w, ss58Format: h.registry.chainSS58 });
780
- return new ht(h, JSON.parse(ft), d.contract.address, "prosopo", 0, x.addFromAddress(S().account.address));
781
- };
782
- return {
783
- start: p,
784
- cancel: m,
785
- submit: y,
786
- select: k,
787
- nextRound: I,
788
- exportData: async (l) => {
789
- var _;
790
- const h = F.getProcaptchaStorage().providerUrl;
791
- let w;
792
- if (h)
793
- w = await U(h);
794
- else {
795
- const L = await W(), j = await he(L.query.getRandomActiveProvider, L.query)(S().account.address, v()), K = ae(j.provider.url.toString());
796
- w = await U(K);
797
- }
798
- if (!(F.getProcaptchaStorage().providerUrl || ((_ = e.captchaApi) == null ? void 0 : _.provider.provider.url.toString())))
799
- return;
800
- let D = "";
801
- try {
802
- D = S().account.address;
803
- } catch (L) {
804
- console.error(L);
805
- }
806
- await w.submitUserEvents(l, D);
807
- }
808
- };
809
- }
810
- const Vt = 1e4, ue = (t, e) => {
811
- e((n) => {
812
- let r = [...n, t];
813
- return r.length > Vt && (r = r.slice(1)), r;
814
- });
815
- }, Xt = (t, e) => {
816
- const n = {
817
- x: t.x,
818
- y: t.y,
819
- timestamp: t.timeStamp
820
- };
821
- ue(n, e);
822
- }, Ce = (t, e) => {
823
- const n = {
824
- key: t.key,
825
- timestamp: t.timeStamp,
826
- isShiftKey: t.shiftKey,
827
- isCtrlKey: t.ctrlKey
828
- };
829
- ue(n, e);
830
- }, q = (t, e) => {
831
- for (const n of Array.from(t.touches))
832
- ue({ x: n.clientX, y: n.clientY, timestamp: t.timeStamp }, e);
833
- }, Yt = (t, e, n, r) => {
834
- const a = Pe(r);
835
- a && (a.addEventListener("mousemove", (o) => Xt(o, t)), a.addEventListener("keydown", (o) => Ce(o, n)), a.addEventListener("keyup", (o) => Ce(o, n)), a.addEventListener("touchstart", (o) => q(o, e)), a.addEventListener("touchend", (o) => q(o, e)), a.addEventListener("touchcancel", (o) => q(o, e)), a.addEventListener("touchmove", (o) => q(o, e)));
836
- }, Pe = (t) => t.tagName === "FORM" ? t : t.parentElement ? Pe(t.parentElement) : null, qt = ({ onProcessData: t, sendData: e, account: n }) => {
837
- const [r, a] = f.useState([]), [o, s] = f.useState([]), [c, i] = f.useState([]), p = f.useRef(null);
838
- return f.useEffect(() => {
839
- p && p.current && Yt(a, s, i, p.current);
840
- }, []), f.useEffect(() => {
841
- n && t({
842
- mouseEvents: r,
843
- touchEvents: o,
844
- keyboardEvents: c
845
- });
846
- }, [e, n]), u("div", { ref: p });
847
- }, Jt = _e.memo((t, e) => {
848
- const { show: n, children: r } = t, o = {
849
- position: "fixed",
850
- zIndex: 2147483646,
851
- inset: 0,
852
- display: n ? "block" : "none"
853
- }, s = {
854
- position: "fixed",
855
- display: "flex",
856
- alignItems: "center",
857
- justifyContent: "center",
858
- right: 0,
859
- bottom: 0,
860
- top: 0,
861
- left: 0,
862
- backgroundColor: "rgba(0, 0, 0, 0.5)",
863
- zIndex: -1
864
- }, c = {
865
- position: "absolute",
866
- top: "50%",
867
- left: "50%",
868
- transform: "translate(-50%, -50%)",
869
- width: "400px",
870
- backgroundColor: "rgb(255, 255, 255)",
871
- border: "none",
872
- boxShadow: "rgba(0, 0, 0, 0.2) 0px 11px 15px -7px, rgba(0, 0, 0, 0.14) 0px 24px 38px 3px, rgba(0, 0, 0, 0.12) 0px 9px 46px 8px,"
873
- };
874
- return T("div", { className: "modalOuter", style: o, children: [u("div", { className: "modalBackground", style: s }), u("div", { className: "modalInner", style: c, children: r })] });
875
- }), en = (t) => {
876
- const e = ve.parse(t.config), n = t.callbacks || {}, [r, a] = gt(f.useState, f.useRef), o = $t(e, r, a, n), s = t.config.theme === "light" ? "light" : "dark", c = t.config.theme === "light" ? Q : Z;
877
- return u("div", { children: T("div", { style: { maxWidth: "100%", maxHeight: "100%", overflowX: "auto" }, children: [u(Jt, { show: r.showModal, children: r.challenge ? u(Pt, { challenge: r.challenge, index: r.index, solutions: r.solutions, onSubmit: o.submit, onCancel: o.cancel, onClick: o.select, onNext: o.nextRound, themeColor: e.theme ?? "light" }) : u("div", { children: "No challenge set." }) }), T(Le, { children: [u(He, { children: T("div", { style: Re, "data-cy": "button-human", children: [" ", T("div", { style: {
878
- padding: Me,
879
- border: Ue,
880
- backgroundColor: c.palette.background.default,
881
- borderColor: c.palette.grey[300],
882
- borderRadius: We,
883
- display: "flex",
884
- alignItems: "center",
885
- flexWrap: "wrap",
886
- justifyContent: "space-between",
887
- minHeight: `${je}px`,
888
- overflow: "hidden"
889
- }, children: [u("div", { style: { display: "inline-flex", flexDirection: "column" }, children: u("div", { style: {
890
- alignItems: "center",
891
- flex: 1
892
- }, children: T("div", { style: {
893
- display: "flex",
894
- alignItems: "center",
895
- justifyContent: "center",
896
- flexDirection: "column",
897
- verticalAlign: "middle"
898
- }, children: [u("div", { style: {
899
- display: r.loading ? "none" : "flex"
900
- }, children: u(mt, { themeColor: s, onChange: o.start, checked: r.isHuman, labelText: "I am human" }) }), u("div", { style: {
901
- display: r.loading ? "flex" : "none"
902
- }, children: u("div", { style: { display: "inline-flex" }, children: u(Ge, { themeColor: s }) }) })] }) }) }), u("div", { style: { display: "inline-flex", flexDirection: "column" }, children: u("a", { href: ze, target: "_blank", "aria-label": Fe, children: u("div", { style: { flex: 1 }, children: u(Be, { themeColor: s }) }) }) })] })] }) }), e.devOnlyWatchEvents && u(qt, { onProcessData: o.exportData, sendData: r.sendData, account: r.account })] })] }) });
903
- };
904
- export {
905
- en as default
906
- };