@prosopo/procaptcha-puzzle 2.16.0 → 2.17.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.
@@ -45,8 +45,8 @@ rendering chunks...
45
45
  computing gzip size...
46
46
  dist/cjs/components/procaptchaPuzzle.cjs 0.47 kB │ gzip: 0.22 kB
47
47
  dist/cjs/index.cjs 0.60 kB │ gzip: 0.21 kB
48
- dist/cjs/components/procaptchaWidget.cjs 8.18 kB │ gzip: 2.22 kB
49
- dist/cjs/services/Manager.cjs 8.61 kB │ gzip: 2.42 kB
50
- dist/cjs/components/puzzleCanvas.cjs 15.20 kB │ gzip: 4.47 kB
48
+ dist/cjs/services/Manager.cjs 8.66 kB │ gzip: 2.45 kB
49
+ dist/cjs/components/procaptchaWidget.cjs 8.86 kB │ gzip: 2.40 kB
50
+ dist/cjs/components/puzzleCanvas.cjs 16.87 kB │ gzip: 4.79 kB
51
51
 
52
- ✓ built in 45ms
52
+ ✓ built in 71ms
@@ -1,5 +1,5 @@
1
1
  $ tsc --build --verbose
2
- 10:11:54 AM - Projects in this build:
2
+ 4:44:30 PM - Projects in this build:
3
3
  * ../../dev/config/tsconfig.json
4
4
  * ../util/tsconfig.json
5
5
  * ../locale/tsconfig.json
@@ -17,37 +17,37 @@ $ tsc --build --verbose
17
17
  * ../procaptcha-common/tsconfig.json
18
18
  * tsconfig.json
19
19
 
20
- 10:11:54 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
20
+ 4:44:30 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
21
21
 
22
- 10:11:54 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/table.ts' is older than output '../util/tsconfig.tsbuildinfo'
22
+ 4:44:30 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
23
23
 
24
- 10:11:54 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
24
+ 4:44:30 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
25
25
 
26
- 10:11:54 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
26
+ 4:44:30 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
27
27
 
28
- 10:11:54 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
28
+ 4:44:30 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
29
29
 
30
- 10:11:54 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
30
+ 4:44:30 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
31
31
 
32
- 10:11:54 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
32
+ 4:44:30 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
33
33
 
34
- 10:11:55 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/batches.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
34
+ 4:44:30 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
35
35
 
36
- 10:11:55 AM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
36
+ 4:44:30 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/tests/productionProviderList.unit.test.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
37
37
 
38
- 10:11:55 AM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/constants.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
38
+ 4:44:30 PM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/webComponent/createWidget.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
39
39
 
40
- 10:11:55 AM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/sources/session_storage.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
40
+ 4:44:30 PM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/sources/touch_support.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
41
41
 
42
- 10:11:55 AM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
42
+ 4:44:30 PM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
43
43
 
44
- 10:11:55 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
44
+ 4:44:30 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.test.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
45
45
 
46
- 10:11:55 AM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/index.ts' is older than output '../account/tsconfig.tsbuildinfo'
46
+ 4:44:31 PM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/index.ts' is older than output '../account/tsconfig.tsbuildinfo'
47
47
 
48
- 10:11:55 AM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/tests/testModeBanner.unit.test.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
48
+ 4:44:31 PM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/state/managerLifecycle.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
49
49
 
50
- 10:11:55 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
50
+ 4:44:31 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
51
51
 
52
- 10:11:55 AM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-puzzle/tsconfig.json'...
52
+ 4:44:31 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-puzzle/tsconfig.json'...
53
53
 
@@ -47,8 +47,8 @@ computing gzip size...
47
47
  dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
48
48
  dist/components/procaptchaPuzzle.js 0.33 kB │ gzip: 0.19 kB
49
49
  dist/index.js 0.38 kB │ gzip: 0.16 kB
50
- dist/components/procaptchaWidget.js 7.81 kB │ gzip: 2.22 kB
51
- dist/services/Manager.js 8.06 kB │ gzip: 2.38 kB
52
- dist/components/puzzleCanvas.js 14.47 kB │ gzip: 4.46 kB
50
+ dist/services/Manager.js 8.12 kB │ gzip: 2.41 kB
51
+ dist/components/procaptchaWidget.js 8.49 kB │ gzip: 2.40 kB
52
+ dist/components/puzzleCanvas.js 16.04 kB │ gzip: 4.78 kB
53
53
 
54
- ✓ built in 110ms
54
+ ✓ built in 70ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @prosopo/procaptcha-puzzle
2
2
 
3
+ ## 2.17.1
4
+ ### Patch Changes
5
+
6
+ - Updated dependencies [1f36456]
7
+ - Updated dependencies [0e02b4b]
8
+ - @prosopo/types@5.15.1
9
+ - @prosopo/util@3.3.15
10
+ - @prosopo/procaptcha-common@2.21.1
11
+ - @prosopo/api@4.6.1
12
+ - @prosopo/common@3.1.65
13
+ - @prosopo/locale@3.9.1
14
+ - @prosopo/util-crypto@13.6.0
15
+ - @prosopo/widget-skeleton@2.10.1
16
+
17
+ ## 2.17.0
18
+ ### Minor Changes
19
+
20
+ - 4570692: Let a user swap the puzzle captcha for an image challenge, on sites where Prosopo has switched it on.
21
+
22
+ Sites get a new staff-only setting, `widgetFeatureFlags.puzzleImageSwitch`. It is off by default and has no stored default. When it is on and the site allows image challenges, the puzzle response says `imageSwitchAvailable: true`. The puzzle then shows a small grid icon next to its title, with a "Switch to an image challenge" tooltip on hover or keyboard focus. After two wrong answers or refreshes in a row, the icon fills with the primary colour and its tooltip shows without a hover, because a touch screen has no hover. The tooltip goes away once the user starts moving the piece.
23
+
24
+ Pressing it re-mints the session the same way refresh does, with `switchToImage: true`. The provider only honours that when the request is a refresh of a puzzle session on the same site and the switch is on. The new session is then an image challenge with reason `PUZZLE_USER_SWITCH`. Like the refresh limit, it only ever moves from puzzle to image, so a client that fakes the request can only make its own challenge harder.
25
+
26
+ Also fixes a wrong puzzle answer restarting the whole widget. The user was sent back to the checkbox instead of getting a new puzzle with "Not quite — try again", and a wasted `/frictionless` request went out. The puzzle now retries in place.
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies [4570692]
31
+ - @prosopo/procaptcha-common@2.21.0
32
+ - @prosopo/api@4.6.0
33
+ - @prosopo/types@5.15.0
34
+ - @prosopo/locale@3.9.0
35
+ - @prosopo/common@3.1.64
36
+
3
37
  ## 2.16.0
4
38
  ### Minor Changes
5
39
 
@@ -5,6 +5,7 @@ let _prosopo_procaptcha_common = require("@prosopo/procaptcha-common");
5
5
  let _prosopo_types = require("@prosopo/types");
6
6
  let _prosopo_widget_skeleton = require("@prosopo/widget-skeleton");
7
7
  //#region src/components/procaptchaWidget.ts
8
+ var IMAGE_SWITCH_HIGHLIGHT_AFTER = 2;
8
9
  var mountProcaptchaPuzzleWidget = (container, props) => {
9
10
  const teardown = new _prosopo_procaptcha_common.Teardown();
10
11
  const config = props.config;
@@ -25,7 +26,8 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
25
26
  let checkbox;
26
27
  let puzzle;
27
28
  const updateState = (0, _prosopo_procaptcha_common.buildUpdateState)(store.state, store.update);
28
- const manager = require_Manager.Manager(config, store.state, updateState, callbacks, frictionlessState, () => honeypot?.getValue());
29
+ const remintsSession = void 0 !== frictionlessState?.sessionId && void 0 !== props.onReload;
30
+ const manager = require_Manager.Manager(config, store.state, updateState, callbacks, frictionlessState, () => honeypot?.getValue(), { widgetReloadsOnFailure: remintsSession });
29
31
  const root = (0, _prosopo_procaptcha_common.createElement)("div");
30
32
  container.appendChild(root);
31
33
  if (frictionlessState?.hp) honeypot = (0, _prosopo_procaptcha_common.mountHoneypot)(root, { encodedQuestion: frictionlessState.hp });
@@ -52,10 +54,10 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
52
54
  await replaceChallenge({ showRetry: true });
53
55
  };
54
56
  const replaceChallenge = async (options) => {
55
- if (frictionlessState?.sessionId && props.onReload) {
57
+ if (remintsSession) {
56
58
  puzzlePhase = "submitting";
57
59
  scheduler.schedule();
58
- props.onReload(lastCoords?.x, lastCoords?.y, options);
60
+ props.onReload?.(lastCoords?.x, lastCoords?.y, options);
59
61
  return;
60
62
  }
61
63
  try {
@@ -84,6 +86,18 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
84
86
  scheduler.schedule();
85
87
  replaceChallenge({ refresh: true });
86
88
  };
89
+ const handleSwitchToImage = () => {
90
+ if ("dragging" !== puzzlePhase) return;
91
+ callbacks.onReload?.();
92
+ showRetry = false;
93
+ puzzlePhase = "submitting";
94
+ scheduler.schedule();
95
+ replaceChallenge({
96
+ refresh: true,
97
+ switchToImage: true
98
+ });
99
+ };
100
+ const canSwitchToImage = (challenge) => true === challenge.imageSwitchAvailable && remintsSession;
87
101
  const handleDismiss = () => {
88
102
  puzzlePhase = "checkbox";
89
103
  challengeData = null;
@@ -108,7 +122,11 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
108
122
  anchor: props.container,
109
123
  onDismiss: handleDismiss,
110
124
  audioAlternative: (0, _prosopo_procaptcha_common.audioAlternativeOffer)(props, translator.isReady() ? translator.t("WIDGET.AUDIO_ALTERNATIVE") : ""),
111
- onRefresh: handleRefresh
125
+ onRefresh: handleRefresh,
126
+ ...canSwitchToImage(challenge) && {
127
+ onSwitchToImage: handleSwitchToImage,
128
+ imageSwitchHighlighted: (props.startReplacementCount ?? 0) >= IMAGE_SWITCH_HIGHLIGHT_AFTER
129
+ }
112
130
  });
113
131
  const runErrorEffect = () => {
114
132
  if (store.state.error === lastError) return;
@@ -104,6 +104,7 @@ var mountPuzzleCanvas = (initialProps) => {
104
104
  let shakeTimer;
105
105
  let announceTimer;
106
106
  let keyboardDragging = false;
107
+ let hasMovedPiece = false;
107
108
  const baseId = `prosopo-puzzle-${instanceCount++}`;
108
109
  const instructionId = `${baseId}-instruction`;
109
110
  const keyboardHintId = `${baseId}-keyboard-hint`;
@@ -182,6 +183,13 @@ var mountPuzzleCanvas = (initialProps) => {
182
183
  top: "50%",
183
184
  transform: "translateY(-50%)"
184
185
  } });
186
+ const switchSlot = (0, _prosopo_procaptcha_common.createElement)("div", { style: {
187
+ position: "absolute",
188
+ left: "8px",
189
+ top: "50%",
190
+ transform: "translateY(-50%)",
191
+ zIndex: "1"
192
+ } });
185
193
  const instruction = (0, _prosopo_procaptcha_common.createElement)("div", {
186
194
  style: {
187
195
  position: "relative",
@@ -194,7 +202,11 @@ var mountPuzzleCanvas = (initialProps) => {
194
202
  fontWeight: 500,
195
203
  transition: "color 0.3s ease, border-color 0.3s ease"
196
204
  },
197
- children: [instructionText, refreshSlot]
205
+ children: [
206
+ instructionText,
207
+ refreshSlot,
208
+ switchSlot
209
+ ]
198
210
  });
199
211
  const panel = (0, _prosopo_procaptcha_common.createElement)("div", {
200
212
  style: {
@@ -215,6 +227,29 @@ var mountPuzzleCanvas = (initialProps) => {
215
227
  }
216
228
  });
217
229
  const refreshButton = props.onRefresh ? (0, _prosopo_procaptcha_common.mountReloadButton)(refreshSlot, refreshButtonProps()) : void 0;
230
+ const imageSwitchButtonProps = () => ({
231
+ themeColor: _prosopo_widget_skeleton.lightTheme === props.theme ? "light" : "dark",
232
+ label: t("WIDGET.PUZZLE.SWITCH_TO_IMAGE", { defaultValue: "Switch to an image challenge" }),
233
+ tooltipPinned: true === props.imageSwitchHighlighted && !hasMovedPiece,
234
+ onSwitch: () => {
235
+ if (!props.submitting && !dragging) props.onSwitchToImage?.();
236
+ }
237
+ });
238
+ let imageSwitchButton;
239
+ const hidePinnedSwitchTooltip = () => {
240
+ if (hasMovedPiece) return;
241
+ hasMovedPiece = true;
242
+ imageSwitchButton?.update(imageSwitchButtonProps());
243
+ };
244
+ const syncImageSwitchButton = () => {
245
+ if (void 0 === props.onSwitchToImage) {
246
+ imageSwitchButton?.destroy();
247
+ imageSwitchButton = void 0;
248
+ return;
249
+ }
250
+ if (imageSwitchButton) imageSwitchButton.update(imageSwitchButtonProps());
251
+ else imageSwitchButton = (0, _prosopo_procaptcha_common.mountImageSwitchButton)(switchSlot, imageSwitchButtonProps());
252
+ };
218
253
  const surfaceProps = () => ({
219
254
  show: true,
220
255
  placement: props.placement,
@@ -299,6 +334,8 @@ var mountPuzzleCanvas = (initialProps) => {
299
334
  });
300
335
  (0, _prosopo_procaptcha_common.applyStyles)(refreshSlot, { visibility: props.submitting ? "hidden" : "visible" });
301
336
  refreshButton?.update(refreshButtonProps());
337
+ syncImageSwitchButton();
338
+ (0, _prosopo_procaptcha_common.applyStyles)(switchSlot, { visibility: props.submitting ? "hidden" : "visible" });
302
339
  (0, _prosopo_procaptcha_common.applyStyles)(area, {
303
340
  background: `linear-gradient(135deg, ${theme.palette.surface} 0%, ${theme.palette.primaryContainer.main} 50%, ${theme.palette.surface} 100%)`,
304
341
  opacity: props.submitting ? .6 : 1,
@@ -354,6 +391,7 @@ var mountPuzzleCanvas = (initialProps) => {
354
391
  dragging = true;
355
392
  keyboardDragging = false;
356
393
  puzzleEvents = [];
394
+ hidePinnedSwitchTooltip();
357
395
  const offset = containerOffset();
358
396
  dragOffset = {
359
397
  x: clientX - offset.x - posX,
@@ -366,6 +404,7 @@ var mountPuzzleCanvas = (initialProps) => {
366
404
  if (!keyboardDragging) {
367
405
  keyboardDragging = true;
368
406
  puzzleEvents = [];
407
+ hidePinnedSwitchTooltip();
369
408
  }
370
409
  posX = clamp(posX + deltaX, 0, CONTAINER_WIDTH);
371
410
  posY = clamp(posY + deltaY, 0, CONTAINER_HEIGHT);
@@ -447,7 +486,9 @@ var mountPuzzleCanvas = (initialProps) => {
447
486
  announce(t("WIDGET.PUZZLE.CHECKING", { defaultValue: "Checking your answer" }));
448
487
  };
449
488
  const announceRetry = () => {
450
- announce(t("WIDGET.PUZZLE.RETRY_ANNOUNCEMENT", { defaultValue: "Not quite. A new puzzle has loaded and the piece is back at the start." }));
489
+ const retry = t("WIDGET.PUZZLE.RETRY_ANNOUNCEMENT", { defaultValue: "Not quite. A new puzzle has loaded and the piece is back at the start." });
490
+ const offerSwitch = void 0 !== props.onSwitchToImage && true === props.imageSwitchHighlighted;
491
+ announce(offerSwitch ? `${retry} ${t("WIDGET.PUZZLE.SWITCH_TO_IMAGE_ANNOUNCEMENT", { defaultValue: "You can also switch to an image challenge." })}` : retry);
451
492
  };
452
493
  if (props.submitting) announceSubmitting();
453
494
  else if (props.showRetry) announceRetry();
@@ -473,6 +514,7 @@ var mountPuzzleCanvas = (initialProps) => {
473
514
  teardown.run();
474
515
  audioAlternativeFooter.destroy();
475
516
  refreshButton?.destroy();
517
+ imageSwitchButton?.destroy();
476
518
  surface.destroy();
477
519
  }
478
520
  };
@@ -6,7 +6,7 @@ let _prosopo_common = require("@prosopo/common");
6
6
  let _prosopo_util = require("@prosopo/util");
7
7
  let _prosopo_util_crypto = require("@prosopo/util-crypto");
8
8
  //#region src/services/Manager.ts
9
- var Manager = (configInput, state, onStateUpdate, callbacks, frictionlessState, getHoneypotValue) => {
9
+ var Manager = (configInput, state, onStateUpdate, callbacks, frictionlessState, getHoneypotValue, options = {}) => {
10
10
  const events = (0, _prosopo_procaptcha_common.getDefaultEvents)(callbacks);
11
11
  let storedChallengeResponse;
12
12
  let storedProviderApi;
@@ -34,7 +34,7 @@ var Manager = (configInput, state, onStateUpdate, callbacks, frictionlessState,
34
34
  loading: false
35
35
  });
36
36
  events.onFailed();
37
- resetState(frictionlessState?.restart);
37
+ resetState(options.widgetReloadsOnFailure ? void 0 : frictionlessState?.restart);
38
38
  };
39
39
  const getConfig = () => {
40
40
  const config = {
@@ -1 +1 @@
1
- {"version":3,"file":"procaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"AAmCA,OAAO,EAGN,KAAK,eAAe,EAIpB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,WAAW,sBAAsB;IACtC,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,2BAA2B,cAC5B,WAAW,SACf,eAAe,KACpB,sBAyXF,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
1
+ {"version":3,"file":"procaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"AAmCA,OAAO,EAGN,KAAK,eAAe,EAIpB,MAAM,gBAAgB,CAAC;AAWxB,MAAM,WAAW,sBAAsB;IACtC,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,2BAA2B,cAC5B,WAAW,SACf,eAAe,KACpB,sBAkZF,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
@@ -6,6 +6,7 @@ import { PROCAPTCHA_EXECUTE_EVENT, Teardown, audioAlternativeOffer, buildUpdateS
6
6
  import { ModeEnum } from "@prosopo/types";
7
7
  import { darkTheme, lightTheme } from "@prosopo/widget-skeleton";
8
8
  //#region src/components/procaptchaWidget.ts
9
+ var IMAGE_SWITCH_HIGHLIGHT_AFTER = 2;
9
10
  var mountProcaptchaPuzzleWidget = (container, props) => {
10
11
  const teardown = new Teardown();
11
12
  const config = props.config;
@@ -26,7 +27,8 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
26
27
  let checkbox;
27
28
  let puzzle;
28
29
  const updateState = buildUpdateState(store.state, store.update);
29
- const manager = Manager(config, store.state, updateState, callbacks, frictionlessState, () => honeypot?.getValue());
30
+ const remintsSession = void 0 !== frictionlessState?.sessionId && void 0 !== props.onReload;
31
+ const manager = Manager(config, store.state, updateState, callbacks, frictionlessState, () => honeypot?.getValue(), { widgetReloadsOnFailure: remintsSession });
30
32
  const root = createElement("div");
31
33
  container.appendChild(root);
32
34
  if (frictionlessState?.hp) honeypot = mountHoneypot(root, { encodedQuestion: frictionlessState.hp });
@@ -53,10 +55,10 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
53
55
  await replaceChallenge({ showRetry: true });
54
56
  };
55
57
  const replaceChallenge = async (options) => {
56
- if (frictionlessState?.sessionId && props.onReload) {
58
+ if (remintsSession) {
57
59
  puzzlePhase = "submitting";
58
60
  scheduler.schedule();
59
- props.onReload(lastCoords?.x, lastCoords?.y, options);
61
+ props.onReload?.(lastCoords?.x, lastCoords?.y, options);
60
62
  return;
61
63
  }
62
64
  try {
@@ -85,6 +87,18 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
85
87
  scheduler.schedule();
86
88
  replaceChallenge({ refresh: true });
87
89
  };
90
+ const handleSwitchToImage = () => {
91
+ if ("dragging" !== puzzlePhase) return;
92
+ callbacks.onReload?.();
93
+ showRetry = false;
94
+ puzzlePhase = "submitting";
95
+ scheduler.schedule();
96
+ replaceChallenge({
97
+ refresh: true,
98
+ switchToImage: true
99
+ });
100
+ };
101
+ const canSwitchToImage = (challenge) => true === challenge.imageSwitchAvailable && remintsSession;
88
102
  const handleDismiss = () => {
89
103
  puzzlePhase = "checkbox";
90
104
  challengeData = null;
@@ -109,7 +123,11 @@ var mountProcaptchaPuzzleWidget = (container, props) => {
109
123
  anchor: props.container,
110
124
  onDismiss: handleDismiss,
111
125
  audioAlternative: audioAlternativeOffer(props, translator.isReady() ? translator.t("WIDGET.AUDIO_ALTERNATIVE") : ""),
112
- onRefresh: handleRefresh
126
+ onRefresh: handleRefresh,
127
+ ...canSwitchToImage(challenge) && {
128
+ onSwitchToImage: handleSwitchToImage,
129
+ imageSwitchHighlighted: (props.startReplacementCount ?? 0) >= IMAGE_SWITCH_HIGHLIGHT_AFTER
130
+ }
113
131
  });
114
132
  const runErrorEffect = () => {
115
133
  if (store.state.error === lastError) return;
@@ -1 +1 @@
1
- {"version":3,"file":"procaptchaWidget.js","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"procaptchaWidget.js","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,8 @@ export interface PuzzleCanvasProps {
18
18
  onDismiss?: () => void;
19
19
  audioAlternative?: AudioAlternativeOffer;
20
20
  onRefresh?: () => void;
21
+ onSwitchToImage?: () => void;
22
+ imageSwitchHighlighted?: boolean;
21
23
  }
22
24
  export declare const mountPuzzleCanvas: (initialProps: PuzzleCanvasProps) => Component<PuzzleCanvasProps>;
23
25
  //# sourceMappingURL=puzzleCanvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"puzzleCanvas.d.ts","sourceRoot":"","sources":["../../src/components/puzzleCanvas.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAEN,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAUd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,EAAE,KACvB,IAAI,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAEvB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AA+DD,eAAO,MAAM,iBAAiB,iBACf,iBAAiB,KAC7B,SAAS,CAAC,iBAAiB,CAilB7B,CAAC"}
1
+ {"version":3,"file":"puzzleCanvas.d.ts","sourceRoot":"","sources":["../../src/components/puzzleCanvas.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAEN,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAYd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,EAAE,KACvB,IAAI,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAEvB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAEvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAG7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AA+DD,eAAO,MAAM,iBAAiB,iBACf,iBAAiB,KAC7B,SAAS,CAAC,iBAAiB,CAopB7B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Teardown, applyAttributes, applyStyles, createElement, isEventTrusted, mountAudioAlternativeFooter, mountChallengeSurface, mountReloadButton } from "@prosopo/procaptcha-common";
1
+ import { Teardown, applyAttributes, applyStyles, createElement, isEventTrusted, mountAudioAlternativeFooter, mountChallengeSurface, mountImageSwitchButton, mountReloadButton } from "@prosopo/procaptcha-common";
2
2
  import { lightTheme } from "@prosopo/widget-skeleton";
3
3
  //#region src/components/puzzleCanvas.ts
4
4
  var CONTAINER_WIDTH = 300;
@@ -104,6 +104,7 @@ var mountPuzzleCanvas = (initialProps) => {
104
104
  let shakeTimer;
105
105
  let announceTimer;
106
106
  let keyboardDragging = false;
107
+ let hasMovedPiece = false;
107
108
  const baseId = `prosopo-puzzle-${instanceCount++}`;
108
109
  const instructionId = `${baseId}-instruction`;
109
110
  const keyboardHintId = `${baseId}-keyboard-hint`;
@@ -182,6 +183,13 @@ var mountPuzzleCanvas = (initialProps) => {
182
183
  top: "50%",
183
184
  transform: "translateY(-50%)"
184
185
  } });
186
+ const switchSlot = createElement("div", { style: {
187
+ position: "absolute",
188
+ left: "8px",
189
+ top: "50%",
190
+ transform: "translateY(-50%)",
191
+ zIndex: "1"
192
+ } });
185
193
  const instruction = createElement("div", {
186
194
  style: {
187
195
  position: "relative",
@@ -194,7 +202,11 @@ var mountPuzzleCanvas = (initialProps) => {
194
202
  fontWeight: 500,
195
203
  transition: "color 0.3s ease, border-color 0.3s ease"
196
204
  },
197
- children: [instructionText, refreshSlot]
205
+ children: [
206
+ instructionText,
207
+ refreshSlot,
208
+ switchSlot
209
+ ]
198
210
  });
199
211
  const panel = createElement("div", {
200
212
  style: {
@@ -215,6 +227,29 @@ var mountPuzzleCanvas = (initialProps) => {
215
227
  }
216
228
  });
217
229
  const refreshButton = props.onRefresh ? mountReloadButton(refreshSlot, refreshButtonProps()) : void 0;
230
+ const imageSwitchButtonProps = () => ({
231
+ themeColor: lightTheme === props.theme ? "light" : "dark",
232
+ label: t("WIDGET.PUZZLE.SWITCH_TO_IMAGE", { defaultValue: "Switch to an image challenge" }),
233
+ tooltipPinned: true === props.imageSwitchHighlighted && !hasMovedPiece,
234
+ onSwitch: () => {
235
+ if (!props.submitting && !dragging) props.onSwitchToImage?.();
236
+ }
237
+ });
238
+ let imageSwitchButton;
239
+ const hidePinnedSwitchTooltip = () => {
240
+ if (hasMovedPiece) return;
241
+ hasMovedPiece = true;
242
+ imageSwitchButton?.update(imageSwitchButtonProps());
243
+ };
244
+ const syncImageSwitchButton = () => {
245
+ if (void 0 === props.onSwitchToImage) {
246
+ imageSwitchButton?.destroy();
247
+ imageSwitchButton = void 0;
248
+ return;
249
+ }
250
+ if (imageSwitchButton) imageSwitchButton.update(imageSwitchButtonProps());
251
+ else imageSwitchButton = mountImageSwitchButton(switchSlot, imageSwitchButtonProps());
252
+ };
218
253
  const surfaceProps = () => ({
219
254
  show: true,
220
255
  placement: props.placement,
@@ -299,6 +334,8 @@ var mountPuzzleCanvas = (initialProps) => {
299
334
  });
300
335
  applyStyles(refreshSlot, { visibility: props.submitting ? "hidden" : "visible" });
301
336
  refreshButton?.update(refreshButtonProps());
337
+ syncImageSwitchButton();
338
+ applyStyles(switchSlot, { visibility: props.submitting ? "hidden" : "visible" });
302
339
  applyStyles(area, {
303
340
  background: `linear-gradient(135deg, ${theme.palette.surface} 0%, ${theme.palette.primaryContainer.main} 50%, ${theme.palette.surface} 100%)`,
304
341
  opacity: props.submitting ? .6 : 1,
@@ -354,6 +391,7 @@ var mountPuzzleCanvas = (initialProps) => {
354
391
  dragging = true;
355
392
  keyboardDragging = false;
356
393
  puzzleEvents = [];
394
+ hidePinnedSwitchTooltip();
357
395
  const offset = containerOffset();
358
396
  dragOffset = {
359
397
  x: clientX - offset.x - posX,
@@ -366,6 +404,7 @@ var mountPuzzleCanvas = (initialProps) => {
366
404
  if (!keyboardDragging) {
367
405
  keyboardDragging = true;
368
406
  puzzleEvents = [];
407
+ hidePinnedSwitchTooltip();
369
408
  }
370
409
  posX = clamp(posX + deltaX, 0, CONTAINER_WIDTH);
371
410
  posY = clamp(posY + deltaY, 0, CONTAINER_HEIGHT);
@@ -447,7 +486,9 @@ var mountPuzzleCanvas = (initialProps) => {
447
486
  announce(t("WIDGET.PUZZLE.CHECKING", { defaultValue: "Checking your answer" }));
448
487
  };
449
488
  const announceRetry = () => {
450
- announce(t("WIDGET.PUZZLE.RETRY_ANNOUNCEMENT", { defaultValue: "Not quite. A new puzzle has loaded and the piece is back at the start." }));
489
+ const retry = t("WIDGET.PUZZLE.RETRY_ANNOUNCEMENT", { defaultValue: "Not quite. A new puzzle has loaded and the piece is back at the start." });
490
+ const offerSwitch = void 0 !== props.onSwitchToImage && true === props.imageSwitchHighlighted;
491
+ announce(offerSwitch ? `${retry} ${t("WIDGET.PUZZLE.SWITCH_TO_IMAGE_ANNOUNCEMENT", { defaultValue: "You can also switch to an image challenge." })}` : retry);
451
492
  };
452
493
  if (props.submitting) announceSubmitting();
453
494
  else if (props.showRetry) announceRetry();
@@ -473,6 +514,7 @@ var mountPuzzleCanvas = (initialProps) => {
473
514
  teardown.run();
474
515
  audioAlternativeFooter.destroy();
475
516
  refreshButton?.destroy();
517
+ imageSwitchButton?.destroy();
476
518
  surface.destroy();
477
519
  }
478
520
  };