@prosopo/procaptcha-puzzle 2.13.3 → 2.14.1

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 (77) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +6 -6
  2. package/.turbo/turbo-build$colon$tsc.log +20 -20
  3. package/.turbo/turbo-build.log +7 -7
  4. package/CHANGELOG.md +66 -0
  5. package/dist/cjs/components/procaptchaPuzzle.cjs +22 -0
  6. package/dist/cjs/components/procaptchaWidget.cjs +225 -0
  7. package/dist/cjs/components/puzzleCanvas.cjs +451 -0
  8. package/dist/cjs/index.cjs +7 -2
  9. package/dist/components/procaptchaPuzzle.d.ts +7 -0
  10. package/dist/components/procaptchaPuzzle.d.ts.map +1 -0
  11. package/dist/components/procaptchaPuzzle.js +21 -0
  12. package/dist/components/procaptchaPuzzle.js.map +1 -0
  13. package/dist/components/procaptchaWidget.d.ts +7 -0
  14. package/dist/components/procaptchaWidget.d.ts.map +1 -0
  15. package/dist/components/procaptchaWidget.js +225 -0
  16. package/dist/components/procaptchaWidget.js.map +1 -0
  17. package/dist/components/{PuzzleCanvas.d.ts → puzzleCanvas.d.ts} +6 -4
  18. package/dist/components/puzzleCanvas.d.ts.map +1 -0
  19. package/dist/components/puzzleCanvas.js +451 -0
  20. package/dist/components/puzzleCanvas.js.map +1 -0
  21. package/dist/index.d.ts +3 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/tests/domHarness.d.ts +20 -0
  26. package/dist/tests/domHarness.d.ts.map +1 -0
  27. package/dist/tests/domHarness.js +56 -0
  28. package/dist/tests/domHarness.js.map +1 -0
  29. package/dist/tests/invisibleCanvasVisibility.unit.test.d.ts +2 -0
  30. package/dist/tests/invisibleCanvasVisibility.unit.test.d.ts.map +1 -0
  31. package/dist/tests/invisibleCanvasVisibility.unit.test.js +102 -0
  32. package/dist/tests/invisibleCanvasVisibility.unit.test.js.map +1 -0
  33. package/dist/tests/procaptchaPuzzle.test-d.js +13 -10
  34. package/dist/tests/procaptchaPuzzle.test-d.js.map +1 -1
  35. package/dist/tests/procaptchaPuzzle.unit.test.js +44 -33
  36. package/dist/tests/procaptchaPuzzle.unit.test.js.map +1 -1
  37. package/dist/tests/procaptchaWidget.unit.test.js +108 -175
  38. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -1
  39. package/dist/tests/puzzleCanvas.unit.test.js +56 -82
  40. package/dist/tests/puzzleCanvas.unit.test.js.map +1 -1
  41. package/package.json +10 -14
  42. package/src/components/procaptchaPuzzle.ts +54 -0
  43. package/src/components/procaptchaWidget.ts +392 -0
  44. package/src/components/puzzleCanvas.ts +658 -0
  45. package/src/index.ts +3 -2
  46. package/src/tests/domHarness.ts +122 -0
  47. package/src/tests/invisibleCanvasVisibility.unit.test.ts +179 -0
  48. package/src/tests/procaptchaPuzzle.test-d.ts +33 -17
  49. package/src/tests/procaptchaPuzzle.unit.test.ts +59 -44
  50. package/src/tests/procaptchaWidget.unit.test.ts +145 -258
  51. package/src/tests/puzzleCanvas.unit.test.ts +94 -122
  52. package/tsconfig.cjs.json +1 -2
  53. package/tsconfig.json +1 -2
  54. package/tsconfig.tsbuildinfo +1 -1
  55. package/vite.test.config.ts +3 -4
  56. package/dist/cjs/components/ProcaptchaPuzzle.cjs +0 -7
  57. package/dist/cjs/components/ProcaptchaWidget.cjs +0 -206
  58. package/dist/cjs/components/PuzzleCanvas.cjs +0 -476
  59. package/dist/components/ProcaptchaPuzzle.d.ts +0 -3
  60. package/dist/components/ProcaptchaPuzzle.d.ts.map +0 -1
  61. package/dist/components/ProcaptchaPuzzle.js +0 -7
  62. package/dist/components/ProcaptchaPuzzle.js.map +0 -1
  63. package/dist/components/ProcaptchaWidget.d.ts +0 -4
  64. package/dist/components/ProcaptchaWidget.d.ts.map +0 -1
  65. package/dist/components/ProcaptchaWidget.js +0 -207
  66. package/dist/components/ProcaptchaWidget.js.map +0 -1
  67. package/dist/components/PuzzleCanvas.d.ts.map +0 -1
  68. package/dist/components/PuzzleCanvas.js +0 -476
  69. package/dist/components/PuzzleCanvas.js.map +0 -1
  70. package/dist/tests/setup.d.ts +0 -5
  71. package/dist/tests/setup.d.ts.map +0 -1
  72. package/dist/tests/setup.js +0 -3
  73. package/dist/tests/setup.js.map +0 -1
  74. package/src/components/ProcaptchaPuzzle.tsx +0 -36
  75. package/src/components/ProcaptchaWidget.tsx +0 -320
  76. package/src/components/PuzzleCanvas.tsx +0 -638
  77. package/src/tests/setup.ts +0 -26
@@ -0,0 +1,102 @@
1
+ import { ModeEnum, } from "@prosopo/types";
2
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
3
+ import { mountProcaptchaPuzzleWidget, } from "../components/procaptchaWidget.js";
4
+ import { fire, mount, settle } from "./domHarness.js";
5
+ import { challengeResponse, config, frictionless } from "./managerHarness.js";
6
+ const mocks = vi.hoisted(() => {
7
+ const start = vi.fn();
8
+ const submitSolution = vi.fn();
9
+ const resetState = vi.fn();
10
+ return { start, submitSolution, resetState };
11
+ });
12
+ vi.mock("../services/Manager.js", () => ({
13
+ Manager: (_config, _state, _updateState) => ({
14
+ start: mocks.start,
15
+ submitSolution: mocks.submitSolution,
16
+ resetState: mocks.resetState,
17
+ }),
18
+ }));
19
+ vi.mock("@prosopo/locale", async (importOriginal) => ({
20
+ ...(await importOriginal()),
21
+ loadI18next: vi.fn(async () => undefined),
22
+ }));
23
+ const i18nStub = {
24
+ isInitialized: true,
25
+ language: "en",
26
+ t: (key) => key,
27
+ changeLanguage: vi.fn(),
28
+ hasLoadedNamespace: () => true,
29
+ on: () => undefined,
30
+ off: () => undefined,
31
+ };
32
+ const props = (overrides = {}) => ({
33
+ config: config({ mode: ModeEnum.visible }),
34
+ callbacks: {},
35
+ i18n: i18nStub,
36
+ frictionlessState: frictionless(),
37
+ ...overrides,
38
+ });
39
+ let mounted;
40
+ let handle;
41
+ const surface = () => document.querySelector('[data-cy="challenge-surface"]');
42
+ const panelOpacity = () => {
43
+ const content = document.querySelector('[data-cy="challenge-content"]');
44
+ if (!content)
45
+ return undefined;
46
+ return Array.from(content.querySelectorAll("[style*='opacity']")).at(-1)?.style.opacity;
47
+ };
48
+ const frame = async () => {
49
+ await new Promise((resolve) => requestAnimationFrame(() => resolve()));
50
+ await settle();
51
+ };
52
+ beforeEach(() => {
53
+ mocks.start.mockResolvedValue(challengeResponse());
54
+ mounted = mount();
55
+ });
56
+ afterEach(() => {
57
+ handle?.destroy();
58
+ handle = undefined;
59
+ mounted.unmount();
60
+ for (const layer of Array.from(document.querySelectorAll(".prosopo-challenge-surface"))) {
61
+ layer.remove();
62
+ }
63
+ vi.clearAllMocks();
64
+ });
65
+ describe("the puzzle overlay actually reaches the screen", () => {
66
+ test("visible mode: the panel is opaque after the entrance frame", async () => {
67
+ handle = mountProcaptchaPuzzleWidget(mounted.container, props());
68
+ const checkbox = mounted.container.querySelector("input");
69
+ expect(checkbox, "the visible widget renders a checkbox").not.toBeNull();
70
+ if (checkbox)
71
+ fire(checkbox, "click");
72
+ await settle();
73
+ await frame();
74
+ expect(mocks.start).toHaveBeenCalledTimes(1);
75
+ expect(surface(), "the overlay is mounted").not.toBeNull();
76
+ expect(panelOpacity()).toBe("1");
77
+ });
78
+ test("invisible mode: the panel is opaque after the entrance frame", async () => {
79
+ handle = mountProcaptchaPuzzleWidget(mounted.container, props({ config: config({ mode: ModeEnum.invisible }) }));
80
+ document.dispatchEvent(new Event("procaptcha:execute"));
81
+ await settle();
82
+ await frame();
83
+ expect(mocks.start).toHaveBeenCalledTimes(1);
84
+ expect(surface(), "the overlay is mounted").not.toBeNull();
85
+ expect(panelOpacity()).toBe("1");
86
+ });
87
+ test("invisible mode: a remounted overlay still becomes opaque", async () => {
88
+ handle = mountProcaptchaPuzzleWidget(mounted.container, props({ config: config({ mode: ModeEnum.invisible }) }));
89
+ document.dispatchEvent(new Event("procaptcha:execute"));
90
+ await settle();
91
+ await frame();
92
+ expect(panelOpacity()).toBe("1");
93
+ handle.destroy();
94
+ handle = mountProcaptchaPuzzleWidget(mounted.container, props({ config: config({ mode: ModeEnum.invisible }) }));
95
+ document.dispatchEvent(new Event("procaptcha:execute"));
96
+ await settle();
97
+ await frame();
98
+ expect(surface(), "the overlay is mounted again").not.toBeNull();
99
+ expect(panelOpacity()).toBe("1");
100
+ });
101
+ });
102
+ //# sourceMappingURL=invisibleCanvasVisibility.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invisibleCanvasVisibility.unit.test.js","sourceRoot":"","sources":["../../src/tests/invisibleCanvasVisibility.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { lightTheme } from "@prosopo/widget-skeleton";
2
2
  import { assertType, describe, expectTypeOf, test } from "vitest";
3
- import { PuzzleCanvas } from "../components/PuzzleCanvas.js";
4
- import { ProcaptchaPuzzle } from "../index.js";
3
+ import { mountPuzzleCanvas, } from "../components/puzzleCanvas.js";
4
+ import { mountProcaptchaPuzzle } from "../index.js";
5
5
  import { Manager } from "../services/Manager.js";
6
6
  import { challengeResponse, config, frictionless, puzzleEvents, state, } from "./managerHarness.js";
7
7
  const i18n = () => undefined;
8
8
  describe("the package entrypoint's types", () => {
9
- test("ProcaptchaPuzzle takes the shared widget props and renders an element", () => {
10
- expectTypeOf(ProcaptchaPuzzle).parameters.toEqualTypeOf();
11
- expectTypeOf(ProcaptchaPuzzle).returns.toExtend();
9
+ test("mountProcaptchaPuzzle takes a host element and the shared widget props", () => {
10
+ expectTypeOf(mountProcaptchaPuzzle).parameters.toEqualTypeOf();
11
+ expectTypeOf(mountProcaptchaPuzzle).returns.toExtend();
12
12
  });
13
- test("the inner widget's default export is not re-exported", () => {
13
+ test("the entrypoint exposes the lazy wrapper and the widget itself", () => {
14
14
  expectTypeOf().toEqualTypeOf();
15
15
  });
16
16
  test("config, callbacks and i18n are all required", () => {
@@ -59,10 +59,11 @@ describe("Manager's types", () => {
59
59
  });
60
60
  });
61
61
  describe("PuzzleCanvas' types", () => {
62
+ const translator = () => undefined;
62
63
  const onComplete = (_finalX, _finalY, _events) => undefined;
63
64
  test("every prop is required, since none has a sensible default", () => {
64
- PuzzleCanvas({ originX: 0, originY: 0 });
65
- PuzzleCanvas({
65
+ mountPuzzleCanvas({ originX: 0, originY: 0 });
66
+ mountPuzzleCanvas({
66
67
  originX: 0,
67
68
  originY: 0,
68
69
  background: "data:image/webp;base64,UklGRg==",
@@ -71,10 +72,11 @@ describe("PuzzleCanvas' types", () => {
71
72
  onComplete,
72
73
  showRetry: false,
73
74
  theme: lightTheme,
75
+ translator: translator(),
74
76
  });
75
77
  });
76
- test("the full prop set renders an element", () => {
77
- expectTypeOf(PuzzleCanvas({
78
+ test("the full prop set mounts a component that can be updated and torn down", () => {
79
+ expectTypeOf(mountPuzzleCanvas({
78
80
  originX: 0,
79
81
  originY: 0,
80
82
  background: "data:image/webp;base64,UklGRg==",
@@ -84,6 +86,7 @@ describe("PuzzleCanvas' types", () => {
84
86
  showRetry: false,
85
87
  submitting: false,
86
88
  theme: lightTheme,
89
+ translator: translator(),
87
90
  })).toExtend();
88
91
  });
89
92
  test("the drop is reported synchronously, not as a promise", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"procaptchaPuzzle.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.test-d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"procaptchaPuzzle.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.test-d.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,27 @@
1
- import { act, createElement } from "react";
2
- import { createRoot } from "react-dom/client";
3
1
  import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
2
  import * as entrypoint from "../index.js";
3
+ import { mount, settle } from "./domHarness.js";
5
4
  import { config } from "./managerHarness.js";
6
5
  const mocks = vi.hoisted(() => ({
7
6
  received: [],
7
+ destroyed: { count: 0 },
8
8
  }));
9
- vi.mock("../components/ProcaptchaWidget.js", async () => {
10
- const { createElement: create } = await import("react");
11
- return {
12
- default: (props) => {
13
- mocks.received.push(props);
14
- return create("div", { "data-testid": "widget" });
15
- },
16
- };
17
- });
18
- let container;
19
- let root;
9
+ vi.mock("../components/procaptchaWidget.js", () => ({
10
+ mountProcaptchaPuzzleWidget: (container, props) => {
11
+ mocks.received.push(props);
12
+ const element = document.createElement("div");
13
+ element.setAttribute("data-testid", "widget");
14
+ container.appendChild(element);
15
+ return {
16
+ destroy: () => {
17
+ element.remove();
18
+ mocks.destroyed.count += 1;
19
+ },
20
+ };
21
+ },
22
+ }));
23
+ let mounted;
24
+ let widget;
20
25
  const props = (overrides = {}) => ({
21
26
  config: config(),
22
27
  callbacks: {},
@@ -24,28 +29,24 @@ const props = (overrides = {}) => ({
24
29
  ...overrides,
25
30
  });
26
31
  const render = async (widgetProps) => {
27
- await act(async () => {
28
- root.render(createElement(entrypoint.ProcaptchaPuzzle, widgetProps));
29
- });
32
+ widget = entrypoint.mountProcaptchaPuzzle(mounted.container, widgetProps);
33
+ await settle();
30
34
  };
31
35
  beforeEach(() => {
32
36
  mocks.received.length = 0;
33
- container = document.createElement("div");
34
- document.body.appendChild(container);
35
- act(() => {
36
- root = createRoot(container);
37
- });
37
+ mocks.destroyed.count = 0;
38
+ widget = undefined;
39
+ mounted = mount();
38
40
  });
39
41
  afterEach(() => {
40
- act(() => {
41
- root.unmount();
42
- });
43
- container.remove();
42
+ widget?.destroy();
43
+ widget = undefined;
44
+ mounted.unmount();
44
45
  });
45
- describe("ProcaptchaPuzzle", () => {
46
+ describe("mountProcaptchaPuzzle", () => {
46
47
  test("renders the widget once it has loaded", async () => {
47
48
  await render(props());
48
- expect(container.querySelector('[data-testid="widget"]')).not.toBeNull();
49
+ expect(mounted.container.querySelector('[data-testid="widget"]')).not.toBeNull();
49
50
  });
50
51
  test("passes on the props the widget needs but never names", async () => {
51
52
  const onSessionInvalidated = vi.fn();
@@ -66,16 +67,26 @@ describe("ProcaptchaPuzzle", () => {
66
67
  expect(mocks.received[0]?.callbacks).toBe(callbacks);
67
68
  expect(mocks.received[0]?.config).toEqual(config());
68
69
  });
69
- test("mounts one widget per render, not one per prop change", async () => {
70
+ test("tears the loaded widget down", async () => {
70
71
  await render(props());
71
- await render(props({ autoStart: true }));
72
- expect(container.querySelectorAll('[data-testid="widget"]')).toHaveLength(1);
72
+ widget?.destroy();
73
+ widget = undefined;
74
+ expect(mocks.destroyed.count).toBe(1);
75
+ expect(mounted.container.querySelector('[data-testid="widget"]')).toBeNull();
76
+ });
77
+ test("cancels a mount that is still loading", async () => {
78
+ widget = entrypoint.mountProcaptchaPuzzle(mounted.container, props());
79
+ widget.destroy();
80
+ widget = undefined;
81
+ await settle();
82
+ expect(mocks.received).toHaveLength(0);
73
83
  });
74
84
  });
75
85
  describe("the package entrypoint", () => {
76
- test("exports the wrapper a consumer mounts", () => {
77
- expect(typeof entrypoint.ProcaptchaPuzzle).toBe("function");
78
- expect(Object.keys(entrypoint)).toEqual(["ProcaptchaPuzzle"]);
86
+ test("exports the mount functions a consumer needs", () => {
87
+ expect(typeof entrypoint.mountProcaptchaPuzzle).toBe("function");
88
+ expect(typeof entrypoint.loadProcaptchaPuzzle).toBe("function");
89
+ expect(typeof entrypoint.mountProcaptchaPuzzleWidget).toBe("function");
79
90
  });
80
91
  });
81
92
  //# sourceMappingURL=procaptchaPuzzle.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"procaptchaPuzzle.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"procaptchaPuzzle.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.unit.test.ts"],"names":[],"mappings":"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"}