ribaunt 0.0.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
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): Promise<ChallengeSolution | undefined>;
12
+ /**
13
+ * Solve multiple challenge tokens (browser-compatible)
14
+ */
15
+ export declare function solveChallenge(tokens: string[], onProgress?: (progress: number) => void): Promise<ChallengeSolution[]>;
16
+ //# sourceMappingURL=solver.d.ts.map
@@ -0,0 +1 @@
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;AAkCD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA0BhG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwB9B"}
package/dist/solver.js ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Browser-compatible challenge solver using Web Crypto API
3
+ */
4
+ /**
5
+ * Decode JWT token (browser-compatible, without verification)
6
+ */
7
+ function decodeJWT(token) {
8
+ try {
9
+ const parts = token.split('.');
10
+ if (parts.length !== 3 || !parts[1])
11
+ return null;
12
+ const payload = JSON.parse(atob(parts[1].replace(/-/g, '+').replace(/_/g, '/')));
13
+ return payload;
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ /**
20
+ * SHA-256 hash using Web Crypto API
21
+ */
22
+ async function sha256(message) {
23
+ const msgBuffer = new TextEncoder().encode(message);
24
+ const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
25
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
26
+ const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
27
+ return hashHex;
28
+ }
29
+ /**
30
+ * Solve a single challenge token (browser-compatible)
31
+ */
32
+ export async function solveSingleChallenge(token) {
33
+ try {
34
+ const payload = decodeJWT(token);
35
+ if (!payload)
36
+ return undefined;
37
+ const { challenge, difficulty } = payload;
38
+ const prefix = '0'.repeat(difficulty);
39
+ let nonce = 0;
40
+ while (true) {
41
+ const hash = await sha256(`${challenge}${nonce}`);
42
+ if (hash.startsWith(prefix)) {
43
+ return { nonce: String(nonce), hash };
44
+ }
45
+ nonce++;
46
+ // Yield to prevent blocking the UI (every 1000 iterations)
47
+ if (nonce % 1000 === 0) {
48
+ await new Promise(resolve => setTimeout(resolve, 0));
49
+ }
50
+ }
51
+ }
52
+ catch (err) {
53
+ return undefined;
54
+ }
55
+ }
56
+ /**
57
+ * Solve multiple challenge tokens (browser-compatible)
58
+ */
59
+ export async function solveChallenge(tokens, onProgress) {
60
+ const solutions = [];
61
+ for (let i = 0; i < tokens.length; i++) {
62
+ const token = tokens[i];
63
+ if (!token) {
64
+ throw new Error(`Invalid token at index ${i}`);
65
+ }
66
+ const solution = await solveSingleChallenge(token);
67
+ if (!solution) {
68
+ throw new Error(`Failed to solve challenge ${i + 1}`);
69
+ }
70
+ solutions.push(solution);
71
+ // Report progress
72
+ if (onProgress) {
73
+ const progress = Math.round(((i + 1) / tokens.length) * 100);
74
+ onProgress(progress);
75
+ }
76
+ }
77
+ return solutions;
78
+ }
79
+ //# sourceMappingURL=solver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solver.js","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,8 @@
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
+ // Auto-register the widget when imported
7
+ import './widget.js';
8
+ //# sourceMappingURL=widget-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-browser.js","sourceRoot":"","sources":["../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,yCAAyC;AACzC,OAAO,aAAa,CAAC"}
@@ -0,0 +1,64 @@
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
+ * show-warning="true"
10
+ * warning-message="Custom warning message"
11
+ * ></ribaunt-widget>
12
+ * ```
13
+ *
14
+ * Or in React/Vue/Svelte:
15
+ * ```jsx
16
+ * <ribaunt-widget
17
+ * challengeEndpoint="/api/challenge"
18
+ * verifyEndpoint="/api/verify"
19
+ * />
20
+ * ```
21
+ *
22
+ * Events:
23
+ * - verify: Fired when verification is complete
24
+ * - error: Fired when an error occurs
25
+ * - state-change: Fired when widget state changes
26
+ */
27
+ type WidgetState = 'initial' | 'verifying' | 'done' | 'error';
28
+ export declare class RibauntWidget extends HTMLElement {
29
+ private shadow;
30
+ private state;
31
+ private progress;
32
+ private captchaElement;
33
+ private checkboxElement;
34
+ private messageElement;
35
+ private warningElement;
36
+ static get observedAttributes(): string[];
37
+ constructor();
38
+ connectedCallback(): void;
39
+ disconnectedCallback(): void;
40
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
41
+ private render;
42
+ private attachEventListeners;
43
+ private removeEventListeners;
44
+ private handleClick;
45
+ private handleKeyPress;
46
+ private getMessage;
47
+ private setState;
48
+ private setProgress;
49
+ private verify;
50
+ /**
51
+ * Public API: Reset the widget to initial state
52
+ */
53
+ reset(): void;
54
+ /**
55
+ * Public API: Get current state
56
+ */
57
+ getState(): WidgetState;
58
+ /**
59
+ * Public API: Programmatically trigger verification
60
+ */
61
+ startVerification(): void;
62
+ }
63
+ export default RibauntWidget;
64
+ //# sourceMappingURL=widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA+KH,KAAK,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,cAAc,CAA+B;IAErD,MAAM,KAAK,kBAAkB,aAQ5B;;IASD,iBAAiB;IAKjB,oBAAoB;IAIpB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMvF,OAAO,CAAC,MAAM;IA+Bd,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,WAAW;YAYL,MAAM;IAgEpB;;OAEG;IACH,KAAK;IAKL;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,iBAAiB;CAKlB;AAQD,eAAe,aAAa,CAAC"}
package/dist/widget.js ADDED
@@ -0,0 +1,398 @@
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
+ * show-warning="true"
10
+ * warning-message="Custom warning message"
11
+ * ></ribaunt-widget>
12
+ * ```
13
+ *
14
+ * Or in React/Vue/Svelte:
15
+ * ```jsx
16
+ * <ribaunt-widget
17
+ * challengeEndpoint="/api/challenge"
18
+ * verifyEndpoint="/api/verify"
19
+ * />
20
+ * ```
21
+ *
22
+ * Events:
23
+ * - verify: Fired when verification is complete
24
+ * - error: Fired when an error occurs
25
+ * - state-change: Fired when widget state changes
26
+ */
27
+ import { solveChallenge } from './solver.js';
28
+ const WIDGET_STYLES = `
29
+ /* Widget Container Styles */
30
+ :host,
31
+ :host * {
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ .captcha {
36
+ background-color: var(--ribaunt-background, #fdfdfd);
37
+ border: 1px solid var(--ribaunt-border-color, #dddddd8f);
38
+ border-radius: var(--ribaunt-border-radius, 14px);
39
+ user-select: none;
40
+ height: var(--ribaunt-widget-height, 58px);
41
+ width: var(--ribaunt-widget-width, 230px);
42
+ display: flex;
43
+ align-items: center;
44
+ padding: var(--ribaunt-widget-padding, 14px);
45
+ gap: var(--ribaunt-gap, 15px);
46
+ cursor: pointer;
47
+ transition: filter .2s, transform .2s;
48
+ position: relative;
49
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
50
+ overflow: hidden;
51
+ color: var(--ribaunt-color, #212121);
52
+ }
53
+
54
+ .captcha:hover {
55
+ filter: brightness(98%);
56
+ }
57
+
58
+ /* Checkbox Styles */
59
+ .checkbox {
60
+ width: var(--ribaunt-checkbox-size, 25px);
61
+ height: var(--ribaunt-checkbox-size, 25px);
62
+ border: var(--ribaunt-checkbox-border, 1px solid #aaaaaad1);
63
+ border-radius: var(--ribaunt-checkbox-border-radius, 6px);
64
+ background-color: var(--ribaunt-checkbox-background, #fafafa91);
65
+ transition: opacity .2s;
66
+ margin-top: var(--ribaunt-checkbox-margin, 2px);
67
+ margin-bottom: var(--ribaunt-checkbox-margin, 2px);
68
+ flex-shrink: 0;
69
+ }
70
+
71
+ /* Font Family */
72
+ .captcha * {
73
+ font-family: var(--ribaunt-font, system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif);
74
+ }
75
+
76
+ /* Label Text */
77
+ .captcha p {
78
+ margin: 0;
79
+ font-weight: 500;
80
+ font-size: 15px;
81
+ user-select: none;
82
+ transition: opacity .2s;
83
+ }
84
+
85
+ /* Verifying State */
86
+ .captcha[data-state=verifying] .checkbox {
87
+ background: none;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ transform: scale(1.1);
92
+ border: none;
93
+ border-radius: 50%;
94
+ background: conic-gradient(
95
+ var(--ribaunt-spinner-color, #000) 0%,
96
+ var(--ribaunt-spinner-color, #000) var(--progress, 0%),
97
+ var(--ribaunt-spinner-background-color, #eee) var(--progress, 0%),
98
+ var(--ribaunt-spinner-background-color, #eee) 100%
99
+ );
100
+ position: relative;
101
+ transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
102
+ }
103
+
104
+ .captcha[data-state=verifying] .checkbox::after {
105
+ content: "";
106
+ background-color: var(--ribaunt-background, #fdfdfd);
107
+ width: calc(100% - var(--ribaunt-spinner-thickness, 5px));
108
+ height: calc(100% - var(--ribaunt-spinner-thickness, 5px));
109
+ border-radius: 50%;
110
+ margin: calc(var(--ribaunt-spinner-thickness, 5px) / 2);
111
+ transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
112
+ }
113
+
114
+ /* Done/Success State */
115
+ .captcha[data-state=done] .checkbox {
116
+ border: 1px solid transparent;
117
+ background-image: var(--ribaunt-checkmark, url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cstyle%3E%40keyframes%20anim%7B0%25%7Bstroke-dashoffset%3A23.21320343017578px%7Dto%7Bstroke-dashoffset%3A0%7D%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%2300a67d%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m5%2012%205%205L20%207%22%20style%3D%22stroke-dashoffset%3A0%3Bstroke-dasharray%3A23.21320343017578px%3Banimation%3Aanim%20.5s%20ease%22%2F%3E%3C%2Fsvg%3E"));
118
+ background-size: cover;
119
+ }
120
+
121
+ /* Error State */
122
+ .captcha[data-state=error] .checkbox {
123
+ border: 1px solid transparent;
124
+ background-image: var(--ribaunt-error-cross, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96' viewBox='0 0 24 24'%3E%3Cpath fill='%23f55b50' d='M11 15h2v2h-2zm0-8h2v6h-2zm1-5C6.47 2 2 6.5 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18a8 8 0 0 1-8-8a8 8 0 0 1 8-8a8 8 0 0 1 8 8a8 8 0 0 1-8 8'/%3E%3C/svg%3E"));
125
+ background-size: cover;
126
+ }
127
+
128
+ /* Disabled State */
129
+ .captcha[disabled] {
130
+ cursor: not-allowed;
131
+ }
132
+
133
+ .captcha[disabled][data-state=verifying] {
134
+ cursor: progress;
135
+ }
136
+
137
+ .captcha[disabled][data-state=done] {
138
+ cursor: default;
139
+ }
140
+
141
+ /* Logo */
142
+ .logo {
143
+ position: absolute;
144
+ bottom: 8px;
145
+ right: 8px;
146
+ width: 20px;
147
+ height: auto;
148
+ opacity: 0.6;
149
+ transition: opacity 0.2s, color 0.2s;
150
+ color: var(--ribaunt-logo-color, #666);
151
+ pointer-events: auto;
152
+ }
153
+
154
+ .logo svg {
155
+ width: 100%;
156
+ height: auto;
157
+ display: block;
158
+ }
159
+
160
+ /* Logo color adapts to theme */
161
+ @media (prefers-color-scheme: dark) {
162
+ .logo {
163
+ color: var(--ribaunt-logo-color, #999);
164
+ }
165
+ }
166
+
167
+ /* Warning Message */
168
+ .warning {
169
+ width: var(--ribaunt-widget-width, 230px);
170
+ background: rgb(237, 56, 46);
171
+ color: white;
172
+ padding: 4px 6px;
173
+ padding-bottom: calc(var(--ribaunt-border-radius, 14px) + 5px);
174
+ font-size: 10px;
175
+ box-sizing: border-box;
176
+ font-family: system-ui;
177
+ border-top-left-radius: 8px;
178
+ border-top-right-radius: 8px;
179
+ text-align: center;
180
+ user-select: none;
181
+ margin-bottom: -35.5px;
182
+ opacity: 0;
183
+ transition: margin-bottom .3s, opacity .3s;
184
+ }
185
+
186
+ .warning.visible {
187
+ margin-bottom: calc(-1 * var(--ribaunt-border-radius, 14px));
188
+ opacity: 1;
189
+ }
190
+ `;
191
+ const RIBAUNT_LOGO = `
192
+ <svg width="500" height="384" viewBox="0 0 500 384" fill="none" xmlns="http://www.w3.org/2000/svg">
193
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M368.357 122.188H236.618L187.59 0H450.972L500 122.188L434.14 286.295H302.478L368.357 122.188Z" fill="currentColor"/>
194
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M236.619 122.188L341.575 383.702H209.913L170.796 286.199L131.663 383.702H0L104.957 122.188H236.619Z" fill="currentColor"/>
195
+ </svg>
196
+ `;
197
+ export class RibauntWidget extends HTMLElement {
198
+ static get observedAttributes() {
199
+ return [
200
+ 'challenge-endpoint',
201
+ 'verify-endpoint',
202
+ 'show-warning',
203
+ 'warning-message',
204
+ 'disabled',
205
+ ];
206
+ }
207
+ constructor() {
208
+ super();
209
+ this.state = 'initial';
210
+ this.progress = 0;
211
+ this.captchaElement = null;
212
+ this.checkboxElement = null;
213
+ this.messageElement = null;
214
+ this.warningElement = null;
215
+ this.shadow = this.attachShadow({ mode: 'open' });
216
+ this.handleClick = this.handleClick.bind(this);
217
+ this.handleKeyPress = this.handleKeyPress.bind(this);
218
+ }
219
+ connectedCallback() {
220
+ this.render();
221
+ this.attachEventListeners();
222
+ }
223
+ disconnectedCallback() {
224
+ this.removeEventListeners();
225
+ }
226
+ attributeChangedCallback(name, oldValue, newValue) {
227
+ if (oldValue !== newValue) {
228
+ this.render();
229
+ }
230
+ }
231
+ render() {
232
+ const showWarning = this.hasAttribute('show-warning') && this.getAttribute('show-warning') !== 'false';
233
+ const warningMessage = this.getAttribute('warning-message') || 'Enable WASM for significantly faster solving';
234
+ this.shadow.innerHTML = `
235
+ <style>${WIDGET_STYLES}</style>
236
+ <div>
237
+ ${showWarning ? `<div class="warning ${showWarning ? 'visible' : ''}">${warningMessage}</div>` : ''}
238
+ <div class="captcha" data-state="${this.state}" role="button" tabindex="0" aria-label="${this.getMessage()}">
239
+ <div class="checkbox"></div>
240
+ <p>${this.getMessage()}</p>
241
+ <a class="logo" href="https://ribaunt.com" target="_blank" rel="noopener noreferrer" aria-label="Powered by Ribaunt">
242
+ ${RIBAUNT_LOGO}
243
+ </a>
244
+ </div>
245
+ </div>
246
+ `;
247
+ this.captchaElement = this.shadow.querySelector('.captcha');
248
+ this.checkboxElement = this.shadow.querySelector('.checkbox');
249
+ this.messageElement = this.shadow.querySelector('p');
250
+ this.warningElement = this.shadow.querySelector('.warning');
251
+ // Update progress CSS variable if verifying
252
+ if (this.state === 'verifying' && this.captchaElement) {
253
+ this.captchaElement.style.setProperty('--progress', `${this.progress}%`);
254
+ }
255
+ this.attachEventListeners();
256
+ }
257
+ attachEventListeners() {
258
+ if (this.captchaElement) {
259
+ this.captchaElement.addEventListener('click', this.handleClick);
260
+ this.captchaElement.addEventListener('keypress', this.handleKeyPress);
261
+ }
262
+ }
263
+ removeEventListeners() {
264
+ if (this.captchaElement) {
265
+ this.captchaElement.removeEventListener('click', this.handleClick);
266
+ this.captchaElement.removeEventListener('keypress', this.handleKeyPress);
267
+ }
268
+ }
269
+ handleClick() {
270
+ if (this.state !== 'initial' && this.state !== 'error')
271
+ return;
272
+ this.verify();
273
+ }
274
+ handleKeyPress(e) {
275
+ if (e.key === 'Enter' || e.key === ' ') {
276
+ e.preventDefault();
277
+ this.handleClick();
278
+ }
279
+ }
280
+ getMessage() {
281
+ switch (this.state) {
282
+ case 'initial':
283
+ return "I'm a human";
284
+ case 'verifying':
285
+ return `Verifying... ${this.progress}%`;
286
+ case 'done':
287
+ return "You're a human";
288
+ case 'error':
289
+ return 'Error. Try again.';
290
+ }
291
+ }
292
+ setState(newState) {
293
+ this.state = newState;
294
+ if (this.captchaElement) {
295
+ this.captchaElement.setAttribute('data-state', this.state);
296
+ this.captchaElement.setAttribute('aria-label', this.getMessage());
297
+ }
298
+ if (this.messageElement) {
299
+ this.messageElement.textContent = this.getMessage();
300
+ }
301
+ // Dispatch state change event
302
+ this.dispatchEvent(new CustomEvent('state-change', {
303
+ detail: { state: this.state },
304
+ bubbles: true,
305
+ composed: true,
306
+ }));
307
+ }
308
+ setProgress(value) {
309
+ // Smooth the progress value for better animation
310
+ const smoothedProgress = Math.round(value * 10) / 10;
311
+ this.progress = smoothedProgress;
312
+ if (this.messageElement) {
313
+ this.messageElement.textContent = this.getMessage();
314
+ }
315
+ if (this.captchaElement) {
316
+ this.captchaElement.style.setProperty('--progress', `${smoothedProgress}%`);
317
+ }
318
+ }
319
+ async verify() {
320
+ this.setState('verifying');
321
+ this.setProgress(0);
322
+ try {
323
+ const challengeEndpoint = this.getAttribute('challenge-endpoint');
324
+ const verifyEndpoint = this.getAttribute('verify-endpoint');
325
+ // Get challenge tokens
326
+ let tokens = [];
327
+ if (challengeEndpoint) {
328
+ const response = await fetch(challengeEndpoint);
329
+ if (!response.ok)
330
+ throw new Error('Failed to fetch challenge');
331
+ const data = await response.json();
332
+ tokens = data.challenges || data.tokens || data;
333
+ }
334
+ if (!tokens || !Array.isArray(tokens) || tokens.length === 0) {
335
+ throw new Error('No challenge tokens available');
336
+ }
337
+ // Solve challenges using the browser-compatible solver
338
+ const solutions = await solveChallenge(tokens, (progress) => {
339
+ this.setProgress(progress);
340
+ });
341
+ // Verify solution
342
+ if (verifyEndpoint) {
343
+ const response = await fetch(verifyEndpoint, {
344
+ method: 'POST',
345
+ headers: { 'Content-Type': 'application/json' },
346
+ body: JSON.stringify({ tokens, solutions }),
347
+ });
348
+ if (!response.ok) {
349
+ throw new Error('Verification failed');
350
+ }
351
+ }
352
+ this.setState('done');
353
+ // Dispatch verify event
354
+ this.dispatchEvent(new CustomEvent('verify', {
355
+ detail: { solutions },
356
+ bubbles: true,
357
+ composed: true,
358
+ }));
359
+ }
360
+ catch (error) {
361
+ this.setState('error');
362
+ // Dispatch error event
363
+ this.dispatchEvent(new CustomEvent('error', {
364
+ detail: { error: error instanceof Error ? error.message : String(error) },
365
+ bubbles: true,
366
+ composed: true,
367
+ }));
368
+ }
369
+ }
370
+ /**
371
+ * Public API: Reset the widget to initial state
372
+ */
373
+ reset() {
374
+ this.setState('initial');
375
+ this.setProgress(0);
376
+ }
377
+ /**
378
+ * Public API: Get current state
379
+ */
380
+ getState() {
381
+ return this.state;
382
+ }
383
+ /**
384
+ * Public API: Programmatically trigger verification
385
+ */
386
+ startVerification() {
387
+ if (this.state === 'initial' || this.state === 'error') {
388
+ this.verify();
389
+ }
390
+ }
391
+ }
392
+ // Register the custom element
393
+ if (typeof window !== 'undefined' && !customElements.get('ribaunt-widget')) {
394
+ customElements.define('ribaunt-widget', RibauntWidget);
395
+ }
396
+ // Export for use in TypeScript
397
+ export default RibauntWidget;
398
+ //# sourceMappingURL=widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "ribaunt",
3
+ "version": "0.0.5",
4
+ "description": "A PoW CAPTCHA library that provides stateless and secure user verification",
5
+ "homepage": "https://ribaunt.com",
6
+ "bugs": {
7
+ "url": "https://github.com/computebaker/ribaunt/issues"
8
+ },
9
+ "main": "dist/cjs/index.cjs",
10
+ "types": "dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/cjs/index.cjs"
15
+ },
16
+ "./widget": {
17
+ "import": "./dist/widget-browser.js",
18
+ "types": "./dist/widget-browser.d.ts"
19
+ }
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/computebaker/ribaunt.git"
24
+ },
25
+ "license": "EUPL-1.2",
26
+ "author": "computebaker",
27
+ "type": "module",
28
+ "scripts": {
29
+ "build": "tsc && tsc --project tsconfig.cjs.json && mv dist/cjs/index.js dist/cjs/index.cjs && mv dist/cjs/index.d.ts dist/cjs/index.d.cts",
30
+ "test": "jest --config jest.config.cjs"
31
+ },
32
+ "devDependencies": {
33
+ "@types/jest": "^30.0.0",
34
+ "@types/jsonwebtoken": "^9.0.10",
35
+ "@types/node": "^24.6.2",
36
+ "dotenv": "^17.2.3",
37
+ "jest": "^30.2.0",
38
+ "ts-jest": "^29.4.4",
39
+ "typescript": "^5.9.3"
40
+ },
41
+ "dependencies": {
42
+ "jsonwebtoken": "^9.0.2"
43
+ }
44
+ }