@prosopo/procaptcha-react 2.9.97 → 2.9.99

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.
Files changed (66) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +8 -8
  2. package/.turbo/turbo-build$colon$tsc.log +21 -21
  3. package/.turbo/turbo-build.log +8 -8
  4. package/CHANGELOG.md +30 -0
  5. package/dist/cjs/components/CaptchaComponent.cjs +4 -5
  6. package/dist/cjs/components/CaptchaWidget.cjs +4 -12
  7. package/dist/cjs/components/ProcaptchaWidget.cjs +8 -6
  8. package/dist/components/CaptchaComponent.d.ts.map +1 -1
  9. package/dist/components/CaptchaComponent.js +4 -5
  10. package/dist/components/CaptchaComponent.js.map +1 -1
  11. package/dist/components/CaptchaWidget.d.ts.map +1 -1
  12. package/dist/components/CaptchaWidget.js +4 -12
  13. package/dist/components/CaptchaWidget.js.map +1 -1
  14. package/dist/components/ProcaptchaWidget.d.ts.map +1 -1
  15. package/dist/components/ProcaptchaWidget.js +8 -6
  16. package/dist/components/ProcaptchaWidget.js.map +1 -1
  17. package/dist/tests/button.unit.test.d.ts +2 -0
  18. package/dist/tests/button.unit.test.d.ts.map +1 -0
  19. package/dist/tests/button.unit.test.js +113 -0
  20. package/dist/tests/button.unit.test.js.map +1 -0
  21. package/dist/tests/captchaComponent.unit.test.d.ts +2 -0
  22. package/dist/tests/captchaComponent.unit.test.d.ts.map +1 -0
  23. package/dist/tests/captchaComponent.unit.test.js +141 -0
  24. package/dist/tests/captchaComponent.unit.test.js.map +1 -0
  25. package/dist/tests/captchaWidget.unit.test.d.ts +2 -0
  26. package/dist/tests/captchaWidget.unit.test.d.ts.map +1 -0
  27. package/dist/tests/captchaWidget.unit.test.js +191 -0
  28. package/dist/tests/captchaWidget.unit.test.js.map +1 -0
  29. package/dist/tests/collector.unit.test.d.ts +2 -0
  30. package/dist/tests/collector.unit.test.d.ts.map +1 -0
  31. package/dist/tests/collector.unit.test.js +109 -0
  32. package/dist/tests/collector.unit.test.js.map +1 -0
  33. package/dist/tests/harness.d.ts +12 -0
  34. package/dist/tests/harness.d.ts.map +1 -0
  35. package/dist/tests/harness.js +69 -0
  36. package/dist/tests/harness.js.map +1 -0
  37. package/dist/tests/modal.unit.test.d.ts +2 -0
  38. package/dist/tests/modal.unit.test.d.ts.map +1 -0
  39. package/dist/tests/modal.unit.test.js +72 -0
  40. package/dist/tests/modal.unit.test.js.map +1 -0
  41. package/dist/tests/procaptcha.unit.test.d.ts +2 -0
  42. package/dist/tests/procaptcha.unit.test.d.ts.map +1 -0
  43. package/dist/tests/procaptcha.unit.test.js +57 -0
  44. package/dist/tests/procaptcha.unit.test.js.map +1 -0
  45. package/dist/tests/procaptchaReact.test-d.d.ts +2 -0
  46. package/dist/tests/procaptchaReact.test-d.d.ts.map +1 -0
  47. package/dist/tests/procaptchaReact.test-d.js +72 -0
  48. package/dist/tests/procaptchaReact.test-d.js.map +1 -0
  49. package/dist/tests/procaptchaWidget.unit.test.d.ts +2 -0
  50. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
  51. package/dist/tests/procaptchaWidget.unit.test.js +403 -0
  52. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -0
  53. package/dist/tests/render.d.ts +23 -0
  54. package/dist/tests/render.d.ts.map +1 -0
  55. package/dist/tests/render.js +77 -0
  56. package/dist/tests/render.js.map +1 -0
  57. package/dist/tests/setup.d.ts +5 -0
  58. package/dist/tests/setup.d.ts.map +1 -0
  59. package/dist/tests/setup.js +3 -0
  60. package/dist/tests/setup.js.map +1 -0
  61. package/dist/tests/util.unit.test.d.ts +2 -0
  62. package/dist/tests/util.unit.test.d.ts.map +1 -0
  63. package/dist/tests/util.unit.test.js +84 -0
  64. package/dist/tests/util.unit.test.js.map +1 -0
  65. package/package.json +9 -5
  66. package/vite.test.config.ts +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/tests/harness.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EAEZ,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAC;AAQxB,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,eAAO,MAAM,MAAM,eACP,OAAO,CAAC,2BAA2B,CAAC,KAC7C,2BAID,CAAC;AAEH,eAAO,MAAM,KAAK,eACN,OAAO,CAAC,eAAe,CAAC,KACjC,eAkBD,CAAC;AAEH,eAAO,MAAM,OAAO,QAAO,OAEzB,CAAC;AAEH,eAAO,MAAM,cAAc,SAAS,MAAM,KAAkB,cAG1D,CAAC;AAGH,eAAO,MAAM,OAAO,eAAe,OAAO,CAAC,OAAO,CAAC,KAAQ,OAkBzD,CAAC;AAEH,eAAO,MAAM,iBAAiB,eAClB,OAAO,CAAC,mBAAmB,CAAC,KACrC,mBAOD,CAAC;AAEH,eAAO,MAAM,YAAY,eACb,OAAO,CAAC,iBAAiB,CAAC,KACnC,iBAKD,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { CaptchaItemTypes, } from "@prosopo/types";
2
+ export const PROVIDER_URL = "https://provider.one";
3
+ export const USER_ADDRESS = "user-address";
4
+ export const SITE_KEY = "site-key";
5
+ export const config = (overrides = {}) => ({
6
+ account: { address: SITE_KEY },
7
+ defaultEnvironment: "production",
8
+ ...overrides,
9
+ });
10
+ export const state = (overrides = {}) => ({
11
+ isHuman: false,
12
+ index: 0,
13
+ solutions: [],
14
+ captchaApi: undefined,
15
+ challenge: undefined,
16
+ showModal: false,
17
+ loading: false,
18
+ account: undefined,
19
+ dappAccount: undefined,
20
+ submission: undefined,
21
+ timeout: undefined,
22
+ successfullChallengeTimeout: undefined,
23
+ sendData: false,
24
+ attemptCount: 0,
25
+ error: undefined,
26
+ sessionId: undefined,
27
+ ...overrides,
28
+ });
29
+ export const account = () => ({
30
+ account: { address: USER_ADDRESS },
31
+ });
32
+ export const randomProvider = (url = PROVIDER_URL) => ({
33
+ providerAccount: "provider-account",
34
+ provider: { url },
35
+ });
36
+ export const captcha = (overrides = {}) => ({
37
+ captchaId: "captcha-id-1",
38
+ captchaContentId: "captcha-content-id-1",
39
+ salt: "0xsalt",
40
+ target: "bus",
41
+ items: [
42
+ {
43
+ hash: "hash-1",
44
+ data: "https://provider.one/img/1.png",
45
+ type: CaptchaItemTypes.Image,
46
+ },
47
+ {
48
+ hash: "hash-2",
49
+ data: "https://provider.one/img/2.png",
50
+ type: CaptchaItemTypes.Image,
51
+ },
52
+ ],
53
+ ...overrides,
54
+ });
55
+ export const challengeResponse = (overrides = {}) => ({
56
+ status: "ok",
57
+ captchas: [captcha()],
58
+ requestHash: "0xrequest-hash",
59
+ timestamp: "1700000000000",
60
+ signature: { provider: { requestHash: "0xprovider-request-hash" } },
61
+ ...overrides,
62
+ });
63
+ export const frictionless = (overrides = {}) => ({
64
+ provider: randomProvider(),
65
+ userAccount: account(),
66
+ restart: () => undefined,
67
+ ...overrides,
68
+ });
69
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/tests/harness.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,gBAAgB,GAMhB,MAAM,gBAAgB,CAAC;AAQxB,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG,CACrB,YAAkD,EAAE,EACtB,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC9B,kBAAkB,EAAE,YAAY;IAChC,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,CACpB,YAAsC,EAAE,EACtB,EAAE,CAAC,CAAC;IACtB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,2BAA2B,EAAE,SAAS;IACtC,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,CAAC;IACf,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,SAAS;IACpB,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAY,EAAE,CAAC,CAAC;IACtC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,YAAY,EAAkB,EAAE,CAAC,CAAC;IAC9E,eAAe,EAAE,kBAAkB;IACnC,QAAQ,EAAE,EAAE,GAAG,EAAE;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,YAA8B,EAAE,EAAW,EAAE,CAAC,CAAC;IACtE,SAAS,EAAE,cAAc;IACzB,gBAAgB,EAAE,sBAAsB;IACxC,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,KAAK;IACb,KAAK,EAAE;QACN;YACC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,gBAAgB,CAAC,KAAK;SAC5B;QACD;YACC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,gBAAgB,CAAC,KAAK;SAC5B;KACD;IACD,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,YAA0C,EAAE,EACtB,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IACrB,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,EAAE;IACnE,GAAG,SAAS;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,YAAwC,EAAE,EACtB,EAAE,CAAC,CAAC;IACxB,QAAQ,EAAE,cAAc,EAAE;IAC1B,WAAW,EAAE,OAAO,EAAE;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;IACxB,GAAG,SAAS;CACZ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=modal.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/modal.unit.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
+ import { afterEach, beforeEach, describe, expect, test } from "vitest";
3
+ import Modal from "../components/Modal.js";
4
+ import { mount } from "./render.js";
5
+ let mounted;
6
+ const render = (show, children = _jsx("p", { children: "challenge" })) => {
7
+ mounted.render(_jsx(Modal, { show: show, children: children }));
8
+ };
9
+ const outer = () => {
10
+ const element = document.querySelector(".prosopo-modalOuter");
11
+ if (!element)
12
+ throw new Error("expected the modal to be rendered");
13
+ return element;
14
+ };
15
+ beforeEach(() => {
16
+ mounted = mount();
17
+ });
18
+ afterEach(() => {
19
+ mounted.unmount();
20
+ });
21
+ describe("where the modal renders", () => {
22
+ test("attaches itself to the document body, not to the widget", () => {
23
+ render(true);
24
+ expect(outer().parentElement).toBe(document.body);
25
+ expect(mounted.container.querySelector(".prosopo-modalOuter")).toBeNull();
26
+ });
27
+ test("renders its children inside the inner panel", () => {
28
+ render(true);
29
+ const inner = outer().querySelector(".prosopo-modalInner");
30
+ expect(inner?.textContent).toBe("challenge");
31
+ });
32
+ test("renders an empty panel when there is nothing to show", () => {
33
+ render(true, null);
34
+ expect(outer().querySelector(".prosopo-modalInner")?.textContent).toBe("");
35
+ });
36
+ test("is removed from the body when the widget unmounts", () => {
37
+ render(true);
38
+ mounted.unmount();
39
+ expect(document.querySelector(".prosopo-modalOuter")).toBeNull();
40
+ mounted = mount();
41
+ });
42
+ });
43
+ describe("showing and hiding", () => {
44
+ test("a shown modal lays its contents out", () => {
45
+ render(true);
46
+ expect(outer().style.display).toBe("flex");
47
+ });
48
+ test("a hidden modal stays in the DOM but is not displayed", () => {
49
+ render(false);
50
+ expect(outer().style.display).toBe("none");
51
+ expect(outer().textContent).toBe("challenge");
52
+ });
53
+ test("toggling show flips the display without remounting", () => {
54
+ render(false);
55
+ const before = outer();
56
+ render(true);
57
+ expect(outer()).toBe(before);
58
+ expect(outer().style.display).toBe("flex");
59
+ });
60
+ });
61
+ describe("stacking", () => {
62
+ test("sits above everything a host page is likely to stack", () => {
63
+ render(true);
64
+ expect(outer().style.zIndex).toBe("2147483646");
65
+ });
66
+ test("covers the viewport so the page behind cannot be clicked", () => {
67
+ render(true);
68
+ expect(outer().style.position).toBe("fixed");
69
+ expect(outer().style.minHeight).toBe("100vh");
70
+ });
71
+ });
72
+ //# sourceMappingURL=modal.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.unit.test.js","sourceRoot":"","sources":["../../src/tests/modal.unit.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procaptcha.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptcha.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
+ import { act } from "react";
3
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
+ import Procaptcha from "../components/Procaptcha.js";
5
+ import { config } from "./harness.js";
6
+ import { mount } from "./render.js";
7
+ const seen = [];
8
+ vi.mock("../components/ProcaptchaWidget.js", () => ({
9
+ default: (props) => {
10
+ seen.push(props);
11
+ return _jsx("div", { "data-cy": "widget-stub", children: "widget" });
12
+ },
13
+ }));
14
+ let mounted;
15
+ const props = (overrides = {}) => ({
16
+ config: config(),
17
+ callbacks: {},
18
+ i18n: undefined,
19
+ ...overrides,
20
+ });
21
+ const settle = async () => {
22
+ await act(async () => {
23
+ await Promise.resolve();
24
+ });
25
+ };
26
+ beforeEach(() => {
27
+ seen.length = 0;
28
+ mounted = mount();
29
+ });
30
+ afterEach(() => {
31
+ mounted.unmount();
32
+ });
33
+ describe("the lazy boundary", () => {
34
+ test("renders the widget once the chunk arrives", async () => {
35
+ mounted.render(_jsx(Procaptcha, { ...props() }));
36
+ await settle();
37
+ expect(mounted.container.querySelector('[data-cy="widget-stub"]')).not.toBeNull();
38
+ });
39
+ test("hands the widget every prop it was given", async () => {
40
+ const callbacks = { onHuman: vi.fn() };
41
+ const given = props({ callbacks, autoStart: true });
42
+ mounted.render(_jsx(Procaptcha, { ...given }));
43
+ await settle();
44
+ expect(seen[0]).toMatchObject({
45
+ callbacks,
46
+ autoStart: true,
47
+ config: given.config,
48
+ });
49
+ });
50
+ test("does not add props of its own", async () => {
51
+ const given = props();
52
+ mounted.render(_jsx(Procaptcha, { ...given }));
53
+ await settle();
54
+ expect(Object.keys(seen[0] ?? {}).sort()).toEqual(Object.keys(given).sort());
55
+ });
56
+ });
57
+ //# sourceMappingURL=procaptcha.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptcha.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procaptchaReact.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaReact.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaReact.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { assertType, describe, expectTypeOf, test } from "vitest";
2
+ import Procaptcha from "../components/Procaptcha.js";
3
+ import addDataAttr from "../util/index.js";
4
+ describe("the package's public surface", () => {
5
+ test("Procaptcha takes exactly the shared props type", () => {
6
+ expectTypeOf(Procaptcha).parameter(0).toEqualTypeOf();
7
+ });
8
+ test("Procaptcha renders an element rather than a fragment or void", () => {
9
+ expectTypeOf(Procaptcha).returns.toMatchTypeOf();
10
+ });
11
+ });
12
+ describe("CaptchaWidget's props", () => {
13
+ test("takes a single captcha, not the whole challenge", () => {
14
+ expectTypeOf().toEqualTypeOf();
15
+ });
16
+ test("reports a selection as a hash and a pair of coordinates", () => {
17
+ expectTypeOf().toEqualTypeOf();
18
+ });
19
+ test("accepts only the two themes the palette defines", () => {
20
+ expectTypeOf().toEqualTypeOf();
21
+ });
22
+ test("rejects a theme name the palette does not have", () => {
23
+ assertType("blue");
24
+ });
25
+ test("holds the solution as hash-plus-coordinates triples", () => {
26
+ expectTypeOf().toEqualTypeOf();
27
+ });
28
+ test("cannot be rendered without a solution to display", () => {
29
+ assertType({
30
+ challenge: {},
31
+ solution: [],
32
+ onClick: () => undefined,
33
+ themeColor: "light",
34
+ });
35
+ assertType({
36
+ challenge: {},
37
+ onClick: () => undefined,
38
+ themeColor: "light",
39
+ });
40
+ });
41
+ });
42
+ describe("CaptchaComponent's props", () => {
43
+ test("takes the round to render as a number", () => {
44
+ expectTypeOf().toEqualTypeOf();
45
+ });
46
+ test("takes one solution list per round", () => {
47
+ expectTypeOf().toEqualTypeOf();
48
+ });
49
+ test("lets a click be reported without coordinates", () => {
50
+ expectTypeOf().toEqualTypeOf();
51
+ });
52
+ test("takes callbacks that report nothing back", () => {
53
+ expectTypeOf().toEqualTypeOf();
54
+ expectTypeOf().toEqualTypeOf();
55
+ expectTypeOf().toEqualTypeOf();
56
+ expectTypeOf().toEqualTypeOf();
57
+ });
58
+ });
59
+ describe("addDataAttr", () => {
60
+ test("returns an object of attributes, not the input", () => {
61
+ expectTypeOf(addDataAttr({ general: { cy: "x" } })).toBeObject();
62
+ });
63
+ test("takes both groups as optional", () => {
64
+ assertType(addDataAttr({}));
65
+ assertType(addDataAttr({ general: { cy: "x" } }));
66
+ assertType(addDataAttr({ dev: { cy: "x" } }));
67
+ });
68
+ test("rejects attribute values that are not strings", () => {
69
+ assertType(addDataAttr({ general: { cy: 1 } }));
70
+ });
71
+ });
72
+ //# sourceMappingURL=procaptchaReact.test-d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaReact.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaReact.test-d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procaptchaWidget.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaWidget.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaWidget.unit.test.tsx"],"names":[],"mappings":""}