ribaunt 0.1.6 → 0.2.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 (58) hide show
  1. package/README.md +39 -6
  2. package/dist/cjs/index.d.ts +52 -24
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +267 -237
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/redis.d.ts +13 -0
  7. package/dist/cjs/redis.d.ts.map +1 -0
  8. package/dist/cjs/redis.js +53 -0
  9. package/dist/cjs/redis.js.map +1 -0
  10. package/dist/index.d.ts +52 -24
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +264 -236
  13. package/dist/index.js.map +1 -1
  14. package/dist/redis.d.ts +13 -0
  15. package/dist/redis.d.ts.map +1 -0
  16. package/dist/redis.js +49 -0
  17. package/dist/redis.js.map +1 -0
  18. package/dist/solver-worker.d.ts +2 -0
  19. package/dist/solver-worker.d.ts.map +1 -0
  20. package/dist/solver-worker.js +15 -0
  21. package/dist/solver-worker.js.map +1 -0
  22. package/dist/solver.d.ts +11 -0
  23. package/dist/solver.d.ts.map +1 -1
  24. package/dist/solver.js +15 -0
  25. package/dist/solver.js.map +1 -1
  26. package/dist/widget-browser.d.ts +1 -0
  27. package/dist/widget-browser.d.ts.map +1 -1
  28. package/dist/widget-browser.js +1 -0
  29. package/dist/widget-browser.js.map +1 -1
  30. package/dist/widget-react.d.ts +9 -11
  31. package/dist/widget-react.d.ts.map +1 -1
  32. package/dist/widget-react.js +44 -7
  33. package/dist/widget-react.js.map +1 -1
  34. package/dist/widget.d.ts +31 -1
  35. package/dist/widget.d.ts.map +1 -1
  36. package/dist/widget.js +220 -33
  37. package/dist/widget.js.map +1 -1
  38. package/dist/worker-client.d.ts +8 -0
  39. package/dist/worker-client.d.ts.map +1 -0
  40. package/dist/worker-client.js +78 -0
  41. package/dist/worker-client.js.map +1 -0
  42. package/package.json +23 -2
  43. package/dist/cjs/solver.d.ts +0 -16
  44. package/dist/cjs/solver.d.ts.map +0 -1
  45. package/dist/cjs/solver.js +0 -89
  46. package/dist/cjs/solver.js.map +0 -1
  47. package/dist/cjs/widget-browser.d.ts +0 -7
  48. package/dist/cjs/widget-browser.d.ts.map +0 -1
  49. package/dist/cjs/widget-browser.js +0 -12
  50. package/dist/cjs/widget-browser.js.map +0 -1
  51. package/dist/cjs/widget-react.d.ts +0 -40
  52. package/dist/cjs/widget-react.d.ts.map +0 -1
  53. package/dist/cjs/widget-react.js +0 -182
  54. package/dist/cjs/widget-react.js.map +0 -1
  55. package/dist/cjs/widget.d.ts +0 -97
  56. package/dist/cjs/widget.d.ts.map +0 -1
  57. package/dist/cjs/widget.js +0 -519
  58. package/dist/cjs/widget.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ribaunt",
3
- "version": "0.1.6",
3
+ "version": "0.2.1",
4
4
  "description": "A PoW CAPTCHA library that provides stateless and secure user verification",
5
5
  "homepage": "https://ribaunt.com",
6
6
  "bugs": {
@@ -23,6 +23,19 @@
23
23
  "client": "./dist/widget-react.js",
24
24
  "default": "./dist/widget-react.js",
25
25
  "types": "./dist/widget-react.d.ts"
26
+ },
27
+ "./redis": {
28
+ "types": "./dist/redis.d.ts",
29
+ "import": "./dist/redis.js",
30
+ "require": "./dist/cjs/redis.js"
31
+ },
32
+ "./worker": {
33
+ "types": "./dist/solver-worker.d.ts",
34
+ "default": "./dist/solver-worker.js"
35
+ },
36
+ "./worker-client": {
37
+ "types": "./dist/worker-client.d.ts",
38
+ "default": "./dist/worker-client.js"
26
39
  }
27
40
  },
28
41
  "repository": {
@@ -33,7 +46,7 @@
33
46
  "author": "ribaunt",
34
47
  "type": "module",
35
48
  "scripts": {
36
- "build": "tsc && tsc --project tsconfig.cjs.json && node scripts/prepare-cjs.mjs",
49
+ "build": "node scripts/clean.mjs && tsc && tsc --project tsconfig.cjs.json && node scripts/prepare-cjs.mjs",
37
50
  "test": "vitest run",
38
51
  "test:coverage": "vitest run --coverage"
39
52
  },
@@ -51,10 +64,18 @@
51
64
  "vitest": "^4.1.9"
52
65
  },
53
66
  "peerDependencies": {
67
+ "ioredis": ">=5.0.0",
68
+ "redis": ">=4.0.0",
54
69
  "react": "^18.0.0 || ^19.0.0",
55
70
  "react-dom": "^18.0.0 || ^19.0.0"
56
71
  },
57
72
  "peerDependenciesMeta": {
73
+ "ioredis": {
74
+ "optional": true
75
+ },
76
+ "redis": {
77
+ "optional": true
78
+ },
58
79
  "react": {
59
80
  "optional": true
60
81
  },
@@ -1,16 +0,0 @@
1
- /**
2
- * Browser-compatible challenge solver using Web Crypto API
3
- */
4
- export interface ChallengeSolution {
5
- nonce: string;
6
- hash: string;
7
- }
8
- /**
9
- * Solve a single challenge token (browser-compatible)
10
- */
11
- export declare function solveSingleChallenge(token: string, signal?: AbortSignal): Promise<ChallengeSolution | undefined>;
12
- /**
13
- * Solve multiple challenge tokens (browser-compatible)
14
- */
15
- export declare function solveChallenge(tokens: string[], onProgress?: (progress: number) => void, signal?: AbortSignal): Promise<ChallengeSolution[]>;
16
- //# sourceMappingURL=solver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../src/solver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAgDD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA0BxC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwB9B"}
@@ -1,89 +0,0 @@
1
- "use strict";
2
- /**
3
- * Browser-compatible challenge solver using Web Crypto API
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.solveSingleChallenge = solveSingleChallenge;
7
- exports.solveChallenge = solveChallenge;
8
- /**
9
- * Decode JWT token (browser-compatible, without verification)
10
- */
11
- function decodeJWT(token) {
12
- try {
13
- const parts = token.split('.');
14
- if (parts.length !== 3 || !parts[1])
15
- return null;
16
- const normalizedPayload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
17
- const paddedPayload = normalizedPayload.padEnd(normalizedPayload.length + ((4 - (normalizedPayload.length % 4)) % 4), '=');
18
- const payload = JSON.parse(atob(paddedPayload));
19
- return payload;
20
- }
21
- catch {
22
- return null;
23
- }
24
- }
25
- /**
26
- * SHA-256 hash using Web Crypto API
27
- */
28
- async function sha256(message) {
29
- if (typeof TextEncoder === 'undefined') {
30
- throw new Error('TextEncoder is unavailable in this browser environment');
31
- }
32
- if (!globalThis.crypto?.subtle) {
33
- throw new Error('Web Crypto API is unavailable. Use HTTPS or localhost.');
34
- }
35
- const msgBuffer = new TextEncoder().encode(message);
36
- const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
37
- const hashArray = Array.from(new Uint8Array(hashBuffer));
38
- const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
39
- return hashHex;
40
- }
41
- /**
42
- * Solve a single challenge token (browser-compatible)
43
- */
44
- async function solveSingleChallenge(token, signal) {
45
- const payload = decodeJWT(token);
46
- if (!payload)
47
- return undefined;
48
- const { challenge, difficulty } = payload;
49
- const prefix = '0'.repeat(difficulty);
50
- let nonce = 0;
51
- while (true) {
52
- if (signal?.aborted) {
53
- throw new DOMException('Challenge solving aborted', 'AbortError');
54
- }
55
- const hash = await sha256(`${challenge}${nonce}`);
56
- if (hash.startsWith(prefix)) {
57
- return { nonce: String(nonce), hash };
58
- }
59
- nonce++;
60
- // Yield to prevent blocking the UI (every 1000 iterations)
61
- if (nonce % 1000 === 0) {
62
- await new Promise(resolve => setTimeout(resolve, 0));
63
- }
64
- }
65
- }
66
- /**
67
- * Solve multiple challenge tokens (browser-compatible)
68
- */
69
- async function solveChallenge(tokens, onProgress, signal) {
70
- const solutions = [];
71
- for (let i = 0; i < tokens.length; i++) {
72
- const token = tokens[i];
73
- if (!token) {
74
- throw new Error(`Invalid token at index ${i}`);
75
- }
76
- const solution = await solveSingleChallenge(token, signal);
77
- if (!solution) {
78
- throw new Error(`Failed to solve challenge ${i + 1}`);
79
- }
80
- solutions.push(solution);
81
- // Report progress
82
- if (onProgress) {
83
- const progress = Math.round(((i + 1) / tokens.length) * 100);
84
- onProgress(progress);
85
- }
86
- }
87
- return solutions;
88
- }
89
- //# sourceMappingURL=solver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solver.js","sourceRoot":"","sources":["../../src/solver.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAwDH,oDA6BC;AAKD,wCA4BC;AAzGD;;GAEG;AACH,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjD,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAC5C,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACrE,GAAG,CACJ,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAChD,OAAO,OAA2B,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,MAAM,CAAC,OAAe;IACnC,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,MAAoB;IAEpB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC;QAElD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC;QAED,KAAK,EAAE,CAAC;QAER,2DAA2D;QAC3D,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc,CAClC,MAAgB,EAChB,UAAuC,EACvC,MAAoB;IAEpB,MAAM,SAAS,GAAwB,EAAE,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzB,kBAAkB;QAClB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YAC7D,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Browser-only entry point for the Ribaunt Widget
3
- * This file only exports the web component, not the server-side functions
4
- */
5
- export { RibauntWidget } from './widget.js';
6
- import './widget.js';
7
- //# sourceMappingURL=widget-browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-browser.d.ts","sourceRoot":"","sources":["../../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,aAAa,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- /**
3
- * Browser-only entry point for the Ribaunt Widget
4
- * This file only exports the web component, not the server-side functions
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.RibauntWidget = void 0;
8
- var widget_js_1 = require("./widget.js");
9
- Object.defineProperty(exports, "RibauntWidget", { enumerable: true, get: function () { return widget_js_1.RibauntWidget; } });
10
- // Auto-register the widget when imported
11
- require("./widget.js");
12
- //# sourceMappingURL=widget-browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-browser.js","sourceRoot":"","sources":["../../src/widget-browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,yCAAyC;AACzC,uBAAqB"}
@@ -1,40 +0,0 @@
1
- import React from 'react';
2
- import type { RibauntWidgetElement, WidgetState } from './widget.js';
3
- export interface RibauntWidgetProps extends Omit<React.HTMLAttributes<RibauntWidgetElement>, 'onError' | 'onLoad'> {
4
- challengeEndpoint?: string;
5
- verifyEndpoint?: string;
6
- autoVerify?: boolean | string;
7
- showWarning?: boolean | string;
8
- warningMessage?: string;
9
- solveTimeout?: number | string;
10
- disabled?: boolean | string;
11
- onVerify?: (detail: {
12
- solutions: any[];
13
- }) => void;
14
- onError?: (detail: {
15
- error: string;
16
- timeout?: boolean;
17
- }) => void;
18
- onStateChange?: (detail: {
19
- state: WidgetState;
20
- }) => void;
21
- onReady?: (detail: {
22
- state: WidgetState;
23
- }) => void;
24
- onLoad?: (detail: {
25
- state: WidgetState;
26
- }) => void;
27
- onEvent?: (type: 'verify' | 'error' | 'state-change' | 'ready', detail: unknown) => void;
28
- }
29
- export interface RibauntWidgetHandle {
30
- reset: () => void;
31
- getState: () => WidgetState | '';
32
- startVerification: () => void;
33
- }
34
- /**
35
- * React wrapper for the Ribaunt Web Component.
36
- * Safely loads the web component dynamically, avoiding Next.js SSR issues.
37
- */
38
- export declare const RibauntWidget: React.ForwardRefExoticComponent<RibauntWidgetProps & React.RefAttributes<RibauntWidgetHandle>>;
39
- export default RibauntWidget;
40
- //# sourceMappingURL=widget-react.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-react.d.ts","sourceRoot":"","sources":["../../src/widget-react.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuE,MAAM,OAAO,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAChH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,GAAG,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;IACnD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1F;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,WAAW,GAAG,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AA4CD;;;GAGG;AACH,eAAO,MAAM,aAAa,gGA4JzB,CAAC;AAIF,eAAe,aAAa,CAAC"}
@@ -1,182 +0,0 @@
1
- "use strict";
2
- 'use client';
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.RibauntWidget = void 0;
38
- const jsx_runtime_1 = require("react/jsx-runtime");
39
- const react_1 = require("react");
40
- function syncAttribute(element, name, value) {
41
- if (value === undefined || value === false || value === 'false') {
42
- element.removeAttribute(name);
43
- return;
44
- }
45
- element.setAttribute(name, typeof value === 'boolean' ? 'true' : String(value));
46
- }
47
- function syncWidgetProps(element, { challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, disabled, autoVerify, }) {
48
- syncAttribute(element, 'challenge-endpoint', challengeEndpoint);
49
- syncAttribute(element, 'verify-endpoint', verifyEndpoint);
50
- syncAttribute(element, 'auto-verify', autoVerify);
51
- syncAttribute(element, 'show-warning', showWarning);
52
- syncAttribute(element, 'warning-message', warningMessage);
53
- syncAttribute(element, 'solve-timeout', solveTimeout);
54
- syncAttribute(element, 'disabled', disabled);
55
- }
56
- /**
57
- * React wrapper for the Ribaunt Web Component.
58
- * Safely loads the web component dynamically, avoiding Next.js SSR issues.
59
- */
60
- exports.RibauntWidget = (0, react_1.forwardRef)(({ challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, disabled, autoVerify, onVerify, onError, onStateChange, onReady, onLoad, onEvent, ...props }, ref) => {
61
- const widgetRef = (0, react_1.useRef)(null);
62
- const containerRef = (0, react_1.useRef)(null);
63
- const [isLoading, setIsLoading] = (0, react_1.useState)(true);
64
- const callbacksRef = (0, react_1.useRef)({
65
- onVerify,
66
- onError,
67
- onStateChange,
68
- onReady,
69
- onLoad,
70
- onEvent,
71
- });
72
- const hasStateEventRef = (0, react_1.useRef)(false);
73
- const hasReadyRef = (0, react_1.useRef)(false);
74
- (0, react_1.useImperativeHandle)(ref, () => ({
75
- reset: () => widgetRef.current?.reset?.(),
76
- getState: () => widgetRef.current?.getState?.() ?? '',
77
- startVerification: () => widgetRef.current?.startVerification?.(),
78
- }));
79
- (0, react_1.useEffect)(() => {
80
- // Dynamically import the browser component to bypass SSR issues
81
- Promise.resolve().then(() => __importStar(require('./widget-browser.js'))).then(() => {
82
- setIsLoading(false);
83
- })
84
- .catch(console.error);
85
- }, []);
86
- (0, react_1.useEffect)(() => {
87
- callbacksRef.current = {
88
- onVerify,
89
- onError,
90
- onStateChange,
91
- onReady,
92
- onLoad,
93
- onEvent,
94
- };
95
- }, [onVerify, onError, onStateChange, onReady, onLoad, onEvent]);
96
- (0, react_1.useEffect)(() => {
97
- if (isLoading || !containerRef.current || widgetRef.current)
98
- return;
99
- const widget = document.createElement('ribaunt-widget');
100
- const handleVerify = (e) => {
101
- const customEvent = e;
102
- callbacksRef.current.onVerify?.(customEvent.detail);
103
- callbacksRef.current.onEvent?.('verify', customEvent.detail);
104
- };
105
- const handleError = (e) => {
106
- const customEvent = e;
107
- callbacksRef.current.onError?.(customEvent.detail);
108
- callbacksRef.current.onEvent?.('error', customEvent.detail);
109
- };
110
- const handleStateChange = (e) => {
111
- hasStateEventRef.current = true;
112
- const customEvent = e;
113
- callbacksRef.current.onStateChange?.(customEvent.detail);
114
- callbacksRef.current.onEvent?.('state-change', customEvent.detail);
115
- };
116
- widget.addEventListener('verify', handleVerify);
117
- widget.addEventListener('error', handleError);
118
- widget.addEventListener('state-change', handleStateChange);
119
- // Apply any remaining standard HTML attributes to the element
120
- Object.entries(props).forEach(([key, value]) => {
121
- if (value !== undefined) {
122
- // Check if it's a valid property of the HTML element, if so set it
123
- if (key in widget) {
124
- widget[key] = value;
125
- }
126
- else {
127
- widget.setAttribute(key, String(value));
128
- }
129
- }
130
- });
131
- syncWidgetProps(widget, {
132
- challengeEndpoint,
133
- verifyEndpoint,
134
- autoVerify,
135
- showWarning,
136
- warningMessage,
137
- solveTimeout,
138
- disabled,
139
- });
140
- containerRef.current.appendChild(widget);
141
- widgetRef.current = widget;
142
- const currentState = widget.getState?.() ?? 'initial';
143
- if (!hasReadyRef.current) {
144
- hasReadyRef.current = true;
145
- callbacksRef.current.onReady?.({ state: currentState });
146
- callbacksRef.current.onLoad?.({ state: currentState });
147
- callbacksRef.current.onEvent?.('ready', { state: currentState });
148
- }
149
- const fallbackTimer = setTimeout(() => {
150
- if (!hasStateEventRef.current) {
151
- hasStateEventRef.current = true;
152
- callbacksRef.current.onStateChange?.({ state: currentState });
153
- callbacksRef.current.onEvent?.('state-change', { state: currentState });
154
- }
155
- }, 0);
156
- return () => {
157
- clearTimeout(fallbackTimer);
158
- widget.removeEventListener('verify', handleVerify);
159
- widget.removeEventListener('error', handleError);
160
- widget.removeEventListener('state-change', handleStateChange);
161
- widget.remove();
162
- widgetRef.current = null;
163
- };
164
- }, [isLoading]);
165
- (0, react_1.useEffect)(() => {
166
- if (!widgetRef.current)
167
- return;
168
- syncWidgetProps(widgetRef.current, {
169
- challengeEndpoint,
170
- verifyEndpoint,
171
- autoVerify,
172
- showWarning,
173
- warningMessage,
174
- solveTimeout,
175
- disabled,
176
- });
177
- }, [challengeEndpoint, verifyEndpoint, autoVerify, showWarning, warningMessage, solveTimeout, disabled]);
178
- return isLoading ? null : (0, jsx_runtime_1.jsx)("div", { ref: containerRef });
179
- });
180
- exports.RibauntWidget.displayName = 'RibauntWidget';
181
- exports.default = exports.RibauntWidget;
182
- //# sourceMappingURL=widget-react.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-react.js","sourceRoot":"","sources":["../../src/widget-react.tsx"],"names":[],"mappings":"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"}
@@ -1,97 +0,0 @@
1
- /**
2
- * Ribaunt CAPTCHA Widget - Web Component
3
- *
4
- * Usage:
5
- * ```html
6
- * <ribaunt-widget
7
- * challenge-endpoint="/api/challenge"
8
- * verify-endpoint="/api/verify"
9
- * auto-verify="true"
10
- * show-warning="true"
11
- * warning-message="Custom warning message"
12
- * ></ribaunt-widget>
13
- * ```
14
- *
15
- * Or in React/Vue/Svelte:
16
- * ```jsx
17
- * <ribaunt-widget
18
- * challengeEndpoint="/api/challenge"
19
- * verifyEndpoint="/api/verify"
20
- * />
21
- * ```
22
- *
23
- * Events:
24
- * - verify: Fired when verification is complete
25
- * - error: Fired when an error occurs
26
- * - state-change: Fired when widget state changes
27
- */
28
- export type WidgetState = 'initial' | 'verifying' | 'done' | 'error';
29
- export declare class RibauntWidget extends HTMLElement {
30
- private shadow;
31
- private state;
32
- private progress;
33
- private timeoutError;
34
- private captchaElement;
35
- private checkboxElement;
36
- private messageElement;
37
- private warningElement;
38
- private logoElement;
39
- private autoVerifyStarted;
40
- static get observedAttributes(): string[];
41
- constructor();
42
- connectedCallback(): void;
43
- disconnectedCallback(): void;
44
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
45
- private render;
46
- private attachEventListeners;
47
- private removeEventListeners;
48
- private handleLogoClick;
49
- private handleClick;
50
- private handleKeyPress;
51
- private getMessage;
52
- private getSolveTimeoutMs;
53
- private isDisabled;
54
- private shouldAutoVerify;
55
- private maybeAutoVerify;
56
- private setState;
57
- private dispatchStateChange;
58
- private setProgress;
59
- private verify;
60
- /**
61
- * Public API: Reset the widget to initial state
62
- */
63
- reset(): void;
64
- /**
65
- * Public API: Get current state
66
- */
67
- getState(): WidgetState;
68
- /**
69
- * Public API: Programmatically trigger verification
70
- */
71
- startVerification(): void;
72
- }
73
- export interface RibauntWidgetElement extends HTMLElement {
74
- reset(): void;
75
- getState(): WidgetState;
76
- startVerification(): void;
77
- }
78
- export default RibauntWidget;
79
- declare global {
80
- interface HTMLElementTagNameMap {
81
- 'ribaunt-widget': RibauntWidgetElement;
82
- }
83
- namespace JSX {
84
- interface IntrinsicElements {
85
- 'ribaunt-widget': import('react').DetailedHTMLProps<import('react').HTMLAttributes<RibauntWidgetElement>, RibauntWidgetElement> & {
86
- 'challenge-endpoint'?: string;
87
- 'verify-endpoint'?: string;
88
- 'auto-verify'?: string | boolean;
89
- 'show-warning'?: string | boolean;
90
- 'warning-message'?: string;
91
- 'solve-timeout'?: string;
92
- disabled?: string | boolean;
93
- };
94
- }
95
- }
96
- }
97
- //# sourceMappingURL=widget.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAmLH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAwCrE,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,iBAAiB,CAAS;IAElC,MAAM,KAAK,kBAAkB,aAU5B;;IAUD,iBAAiB;IAMjB,oBAAoB;IAIpB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IASvF,OAAO,CAAC,MAAM;IA0Cd,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,WAAW;YAYL,MAAM;IAkFpB;;OAEG;IACH,KAAK;IAML;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,iBAAiB;CAKlB;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,IAAI,WAAW,CAAC;IACxB,iBAAiB,IAAI,IAAI,CAAC;CAC3B;AASD,eAAe,aAAa,CAAC;AAG7B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,oBAAoB,CAAC;KACxC;IAED,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,gBAAgB,EAAE,OAAO,OAAO,EAAE,iBAAiB,CAAC,OAAO,OAAO,EAAE,cAAc,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,GAAG;gBAChI,oBAAoB,CAAC,EAAE,MAAM,CAAC;gBAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;gBACjC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;gBAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;gBACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;aAC7B,CAAC;SACH;KACF;CACF"}