@prosopo/procaptcha-puzzle 2.10.39 → 2.10.41

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 (59) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +13 -11
  2. package/.turbo/turbo-build$colon$tsc.log +19 -19
  3. package/.turbo/turbo-build.log +15 -12
  4. package/CHANGELOG.md +41 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/cjs/components/ProcaptchaPuzzle.cjs +6 -9
  7. package/dist/cjs/components/ProcaptchaWidget.cjs +191 -213
  8. package/dist/cjs/components/PuzzleCanvas.cjs +228 -270
  9. package/dist/cjs/index.cjs +2 -4
  10. package/dist/cjs/services/Manager.cjs +209 -289
  11. package/dist/components/ProcaptchaPuzzle.js +6 -8
  12. package/dist/components/ProcaptchaWidget.d.ts.map +1 -1
  13. package/dist/components/ProcaptchaWidget.js +190 -212
  14. package/dist/components/ProcaptchaWidget.js.map +1 -1
  15. package/dist/components/PuzzleCanvas.js +229 -271
  16. package/dist/index.js +2 -4
  17. package/dist/services/Manager.d.ts.map +1 -1
  18. package/dist/services/Manager.js +205 -286
  19. package/dist/services/Manager.js.map +1 -1
  20. package/dist/tests/manager.unit.test.d.ts +2 -0
  21. package/dist/tests/manager.unit.test.d.ts.map +1 -0
  22. package/dist/tests/manager.unit.test.js +506 -0
  23. package/dist/tests/manager.unit.test.js.map +1 -0
  24. package/dist/tests/managerHarness.d.ts +20 -0
  25. package/dist/tests/managerHarness.d.ts.map +1 -0
  26. package/dist/tests/managerHarness.js +86 -0
  27. package/dist/tests/managerHarness.js.map +1 -0
  28. package/dist/tests/procaptchaPuzzle.test-d.d.ts +2 -0
  29. package/dist/tests/procaptchaPuzzle.test-d.d.ts.map +1 -0
  30. package/dist/tests/procaptchaPuzzle.test-d.js +97 -0
  31. package/dist/tests/procaptchaPuzzle.test-d.js.map +1 -0
  32. package/dist/tests/procaptchaPuzzle.unit.test.d.ts +2 -0
  33. package/dist/tests/procaptchaPuzzle.unit.test.d.ts.map +1 -0
  34. package/dist/tests/procaptchaPuzzle.unit.test.js +81 -0
  35. package/dist/tests/procaptchaPuzzle.unit.test.js.map +1 -0
  36. package/dist/tests/procaptchaWidget.unit.test.d.ts +2 -0
  37. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
  38. package/dist/tests/procaptchaWidget.unit.test.js +547 -0
  39. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -0
  40. package/dist/tests/puzzleCanvas.unit.test.d.ts +2 -0
  41. package/dist/tests/puzzleCanvas.unit.test.d.ts.map +1 -0
  42. package/dist/tests/puzzleCanvas.unit.test.js +312 -0
  43. package/dist/tests/puzzleCanvas.unit.test.js.map +1 -0
  44. package/dist/tests/setup.d.ts +5 -0
  45. package/dist/tests/setup.d.ts.map +1 -0
  46. package/dist/tests/setup.js +3 -0
  47. package/dist/tests/setup.js.map +1 -0
  48. package/package.json +17 -12
  49. package/src/components/ProcaptchaWidget.tsx +17 -6
  50. package/src/services/Manager.ts +14 -10
  51. package/src/tests/manager.unit.test.ts +763 -0
  52. package/src/tests/managerHarness.ts +169 -0
  53. package/src/tests/procaptchaPuzzle.test-d.ts +191 -0
  54. package/src/tests/procaptchaPuzzle.unit.test.ts +123 -0
  55. package/src/tests/procaptchaWidget.unit.test.ts +789 -0
  56. package/src/tests/puzzleCanvas.unit.test.ts +418 -0
  57. package/src/tests/setup.ts +26 -0
  58. package/tsconfig.tsbuildinfo +1 -1
  59. package/vite.test.config.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managerHarness.js","sourceRoot":"","sources":["../../src/tests/managerHarness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procaptchaPuzzle.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaPuzzle.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ import { assertType, describe, expectTypeOf, test } from "vitest";
2
+ import { PuzzleCanvas } from "../components/PuzzleCanvas.js";
3
+ import { ProcaptchaPuzzle } from "../index.js";
4
+ import { Manager } from "../services/Manager.js";
5
+ import { challengeResponse, config, frictionless, puzzleEvents, state, } from "./managerHarness.js";
6
+ const i18n = () => undefined;
7
+ describe("the package entrypoint's types", () => {
8
+ test("ProcaptchaPuzzle takes the shared widget props and renders an element", () => {
9
+ expectTypeOf(ProcaptchaPuzzle).parameters.toEqualTypeOf();
10
+ expectTypeOf(ProcaptchaPuzzle).returns.toExtend();
11
+ });
12
+ test("the inner widget's default export is not re-exported", () => {
13
+ expectTypeOf().toEqualTypeOf();
14
+ });
15
+ test("config, callbacks and i18n are all required", () => {
16
+ assertType({ callbacks: {}, i18n: i18n() });
17
+ assertType({ config: config(), i18n: i18n() });
18
+ assertType({
19
+ config: config(),
20
+ callbacks: {},
21
+ i18n: i18n(),
22
+ });
23
+ });
24
+ });
25
+ describe("Manager's types", () => {
26
+ const updateState = () => undefined;
27
+ const callbacks = {};
28
+ test("only the first four arguments are required", () => {
29
+ assertType(Manager(config(), state(), updateState, callbacks));
30
+ Manager(config(), state(), updateState);
31
+ });
32
+ test("the optional arguments keep their positions", () => {
33
+ expectTypeOf(Manager)
34
+ .parameter(4)
35
+ .toEqualTypeOf();
36
+ expectTypeOf(Manager)
37
+ .parameter(5)
38
+ .toEqualTypeOf();
39
+ });
40
+ test("it exposes exactly start, submitSolution and resetState", () => {
41
+ expectTypeOf().toEqualTypeOf();
42
+ });
43
+ test("start hands back the challenge the canvas needs to draw", () => {
44
+ expectTypeOf().toEqualTypeOf();
45
+ });
46
+ test("submitSolution takes the drop point and the full event trail", () => {
47
+ expectTypeOf().toEqualTypeOf();
48
+ expectTypeOf().toEqualTypeOf();
49
+ });
50
+ test("resetState takes the frictionless restart callback and nothing else", () => {
51
+ expectTypeOf().toEqualTypeOf();
52
+ expectTypeOf().toEqualTypeOf();
53
+ });
54
+ test("coordinates come off DOM events, so they are numbers", () => {
55
+ const manager = Manager(config(), state(), updateState, callbacks, frictionless());
56
+ manager.start("1", "2");
57
+ manager.submitSolution(1, 2);
58
+ });
59
+ });
60
+ describe("PuzzleCanvas' types", () => {
61
+ const onComplete = (_finalX, _finalY, _events) => undefined;
62
+ test("every prop is required, since none has a sensible default", () => {
63
+ PuzzleCanvas({ originX: 0, originY: 0 });
64
+ PuzzleCanvas({
65
+ originX: 0,
66
+ originY: 0,
67
+ targetX: 1,
68
+ targetY: 1,
69
+ onComplete,
70
+ showRetry: false,
71
+ });
72
+ });
73
+ test("the full prop set renders an element", () => {
74
+ expectTypeOf(PuzzleCanvas({
75
+ originX: 0,
76
+ originY: 0,
77
+ targetX: 1,
78
+ targetY: 1,
79
+ onComplete,
80
+ showRetry: false,
81
+ submitting: false,
82
+ })).toExtend();
83
+ });
84
+ test("the drop is reported synchronously, not as a promise", () => {
85
+ expectTypeOf(onComplete).returns.toEqualTypeOf();
86
+ });
87
+ });
88
+ describe("the harness fixtures match the shared types", () => {
89
+ test("they build the real shapes, not lookalikes", () => {
90
+ expectTypeOf(config()).toEqualTypeOf();
91
+ expectTypeOf(state()).toEqualTypeOf();
92
+ expectTypeOf(frictionless()).toEqualTypeOf();
93
+ expectTypeOf(challengeResponse()).toEqualTypeOf();
94
+ expectTypeOf(puzzleEvents()).toEqualTypeOf();
95
+ });
96
+ });
97
+ //# sourceMappingURL=procaptchaPuzzle.test-d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaPuzzle.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.test-d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=procaptchaPuzzle.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaPuzzle.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { act, createElement } from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
+ import * as entrypoint from "../index.js";
5
+ import { config } from "./managerHarness.js";
6
+ const mocks = vi.hoisted(() => ({
7
+ received: [],
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;
20
+ const props = (overrides = {}) => ({
21
+ config: config(),
22
+ callbacks: {},
23
+ i18n: undefined,
24
+ ...overrides,
25
+ });
26
+ const render = async (widgetProps) => {
27
+ await act(async () => {
28
+ root.render(createElement(entrypoint.ProcaptchaPuzzle, widgetProps));
29
+ });
30
+ };
31
+ beforeEach(() => {
32
+ mocks.received.length = 0;
33
+ container = document.createElement("div");
34
+ document.body.appendChild(container);
35
+ act(() => {
36
+ root = createRoot(container);
37
+ });
38
+ });
39
+ afterEach(() => {
40
+ act(() => {
41
+ root.unmount();
42
+ });
43
+ container.remove();
44
+ });
45
+ describe("ProcaptchaPuzzle", () => {
46
+ test("renders the widget once it has loaded", async () => {
47
+ await render(props());
48
+ expect(container.querySelector('[data-testid="widget"]')).not.toBeNull();
49
+ });
50
+ test("passes on the props the widget needs but never names", async () => {
51
+ const onSessionInvalidated = vi.fn();
52
+ await render(props({
53
+ autoStart: true,
54
+ startCoords: { x: 1, y: 2 },
55
+ onSessionInvalidated,
56
+ }));
57
+ expect(mocks.received[0]).toMatchObject({
58
+ autoStart: true,
59
+ startCoords: { x: 1, y: 2 },
60
+ onSessionInvalidated,
61
+ });
62
+ });
63
+ test("passes on the props it does name, too", async () => {
64
+ const callbacks = { onHuman: vi.fn() };
65
+ await render(props({ callbacks }));
66
+ expect(mocks.received[0]?.callbacks).toBe(callbacks);
67
+ expect(mocks.received[0]?.config).toEqual(config());
68
+ });
69
+ test("mounts one widget per render, not one per prop change", async () => {
70
+ await render(props());
71
+ await render(props({ autoStart: true }));
72
+ expect(container.querySelectorAll('[data-testid="widget"]')).toHaveLength(1);
73
+ });
74
+ });
75
+ 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"]);
79
+ });
80
+ });
81
+ //# sourceMappingURL=procaptchaPuzzle.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaPuzzle.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptchaPuzzle.unit.test.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.ts"],"names":[],"mappings":""}