ribaunt 0.1.6 → 0.2.0

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 (54) hide show
  1. package/README.md +10 -6
  2. package/dist/cjs/index.d.ts +43 -24
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +248 -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 +43 -24
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +247 -237
  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 +10 -0
  23. package/dist/solver.d.ts.map +1 -1
  24. package/dist/solver.js +14 -0
  25. package/dist/solver.js.map +1 -1
  26. package/dist/widget-react.d.ts +8 -11
  27. package/dist/widget-react.d.ts.map +1 -1
  28. package/dist/widget-react.js +30 -5
  29. package/dist/widget-react.js.map +1 -1
  30. package/dist/widget.d.ts +30 -1
  31. package/dist/widget.d.ts.map +1 -1
  32. package/dist/widget.js +132 -19
  33. package/dist/widget.js.map +1 -1
  34. package/dist/worker-client.d.ts +8 -0
  35. package/dist/worker-client.d.ts.map +1 -0
  36. package/dist/worker-client.js +78 -0
  37. package/dist/worker-client.js.map +1 -0
  38. package/package.json +23 -2
  39. package/dist/cjs/solver.d.ts +0 -16
  40. package/dist/cjs/solver.d.ts.map +0 -1
  41. package/dist/cjs/solver.js +0 -89
  42. package/dist/cjs/solver.js.map +0 -1
  43. package/dist/cjs/widget-browser.d.ts +0 -7
  44. package/dist/cjs/widget-browser.d.ts.map +0 -1
  45. package/dist/cjs/widget-browser.js +0 -12
  46. package/dist/cjs/widget-browser.js.map +0 -1
  47. package/dist/cjs/widget-react.d.ts +0 -40
  48. package/dist/cjs/widget-react.d.ts.map +0 -1
  49. package/dist/cjs/widget-react.js +0 -182
  50. package/dist/cjs/widget-react.js.map +0 -1
  51. package/dist/cjs/widget.d.ts +0 -97
  52. package/dist/cjs/widget.d.ts.map +0 -1
  53. package/dist/cjs/widget.js +0 -519
  54. package/dist/cjs/widget.js.map +0 -1
@@ -1,519 +0,0 @@
1
- "use strict";
2
- /**
3
- * Ribaunt CAPTCHA Widget - Web Component
4
- *
5
- * Usage:
6
- * ```html
7
- * <ribaunt-widget
8
- * challenge-endpoint="/api/challenge"
9
- * verify-endpoint="/api/verify"
10
- * auto-verify="true"
11
- * show-warning="true"
12
- * warning-message="Custom warning message"
13
- * ></ribaunt-widget>
14
- * ```
15
- *
16
- * Or in React/Vue/Svelte:
17
- * ```jsx
18
- * <ribaunt-widget
19
- * challengeEndpoint="/api/challenge"
20
- * verifyEndpoint="/api/verify"
21
- * />
22
- * ```
23
- *
24
- * Events:
25
- * - verify: Fired when verification is complete
26
- * - error: Fired when an error occurs
27
- * - state-change: Fired when widget state changes
28
- */
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.RibauntWidget = void 0;
31
- const solver_js_1 = require("./solver.js");
32
- const WIDGET_STYLES = `
33
- /* Widget Container Styles */
34
- :host,
35
- :host * {
36
- box-sizing: border-box;
37
- }
38
-
39
- .captcha {
40
- background-color: var(--ribaunt-background, #fdfdfd);
41
- border: 1px solid var(--ribaunt-border-color, #dddddd8f);
42
- border-radius: var(--ribaunt-border-radius, 14px);
43
- user-select: none;
44
- height: var(--ribaunt-widget-height, 58px);
45
- width: var(--ribaunt-widget-width, 230px);
46
- display: flex;
47
- align-items: center;
48
- padding: var(--ribaunt-widget-padding, 14px);
49
- gap: var(--ribaunt-gap, 15px);
50
- cursor: pointer;
51
- transition: filter .2s, transform .2s;
52
- position: relative;
53
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
54
- overflow: hidden;
55
- color: var(--ribaunt-color, #212121);
56
- }
57
-
58
- :host([disabled]) .captcha {
59
- cursor: not-allowed;
60
- opacity: 0.72;
61
- }
62
-
63
- :host([disabled]) .captcha:hover {
64
- filter: none;
65
- }
66
-
67
- :host([disabled]) .captcha[data-state=verifying] {
68
- cursor: progress;
69
- }
70
-
71
- :host([disabled]) .captcha[data-state=done] {
72
- cursor: default;
73
- }
74
-
75
- .captcha:hover {
76
- filter: brightness(98%);
77
- }
78
-
79
- /* Checkbox Styles */
80
- .checkbox {
81
- width: var(--ribaunt-checkbox-size, 25px);
82
- height: var(--ribaunt-checkbox-size, 25px);
83
- border: var(--ribaunt-checkbox-border, 1px solid #aaaaaad1);
84
- border-radius: var(--ribaunt-checkbox-border-radius, 6px);
85
- background-color: var(--ribaunt-checkbox-background, #fafafa91);
86
- transition: opacity .2s;
87
- margin-top: var(--ribaunt-checkbox-margin, 2px);
88
- margin-bottom: var(--ribaunt-checkbox-margin, 2px);
89
- flex-shrink: 0;
90
- }
91
-
92
- /* Font Family */
93
- .captcha * {
94
- font-family: var(--ribaunt-font, system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif);
95
- }
96
-
97
- /* Label Text */
98
- .captcha p {
99
- margin: 0;
100
- font-weight: 500;
101
- font-size: 15px;
102
- user-select: none;
103
- transition: opacity .2s;
104
- }
105
-
106
- /* Verifying State */
107
- .captcha[data-state=verifying] .checkbox {
108
- background: none;
109
- display: flex;
110
- align-items: center;
111
- justify-content: center;
112
- transform: scale(1.1);
113
- border: none;
114
- border-radius: 50%;
115
- background: conic-gradient(
116
- var(--ribaunt-spinner-color, #000) 0%,
117
- var(--ribaunt-spinner-color, #000) var(--progress, 0%),
118
- var(--ribaunt-spinner-background-color, #eee) var(--progress, 0%),
119
- var(--ribaunt-spinner-background-color, #eee) 100%
120
- );
121
- position: relative;
122
- transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
123
- }
124
-
125
- .captcha[data-state=verifying] .checkbox::after {
126
- content: "";
127
- background-color: var(--ribaunt-background, #fdfdfd);
128
- width: calc(100% - var(--ribaunt-spinner-thickness, 5px));
129
- height: calc(100% - var(--ribaunt-spinner-thickness, 5px));
130
- border-radius: 50%;
131
- margin: calc(var(--ribaunt-spinner-thickness, 5px) / 2);
132
- transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
133
- }
134
-
135
- /* Done/Success State */
136
- .captcha[data-state=done] .checkbox {
137
- border: 1px solid transparent;
138
- 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"));
139
- background-size: cover;
140
- }
141
-
142
- /* Error State */
143
- .captcha[data-state=error] .checkbox {
144
- border: 1px solid transparent;
145
- 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"));
146
- background-size: cover;
147
- }
148
-
149
- /* Logo */
150
- .logo {
151
- position: absolute;
152
- bottom: 8px;
153
- right: 8px;
154
- width: 20px;
155
- height: auto;
156
- opacity: 0.6;
157
- transition: opacity 0.2s, color 0.2s;
158
- color: var(--ribaunt-logo-color, #666);
159
- pointer-events: auto;
160
- }
161
-
162
- .logo svg {
163
- width: 100%;
164
- height: auto;
165
- display: block;
166
- }
167
-
168
- /* Logo color adapts to theme */
169
- @media (prefers-color-scheme: dark) {
170
- .logo {
171
- color: var(--ribaunt-logo-color, #999);
172
- }
173
- }
174
-
175
- /* Warning Message */
176
- .warning {
177
- width: var(--ribaunt-widget-width, 230px);
178
- background: rgb(237, 56, 46);
179
- color: white;
180
- padding: 4px 6px;
181
- padding-bottom: calc(var(--ribaunt-border-radius, 14px) + 5px);
182
- font-size: 10px;
183
- box-sizing: border-box;
184
- font-family: system-ui;
185
- border-top-left-radius: 8px;
186
- border-top-right-radius: 8px;
187
- text-align: center;
188
- user-select: none;
189
- margin-bottom: -35.5px;
190
- opacity: 0;
191
- transition: margin-bottom .3s, opacity .3s;
192
- }
193
-
194
- .warning.visible {
195
- margin-bottom: calc(-1 * var(--ribaunt-border-radius, 14px));
196
- opacity: 1;
197
- }
198
- `;
199
- const RIBAUNT_LOGO = `
200
- <svg width="500" height="384" viewBox="0 0 500 384" fill="none" xmlns="http://www.w3.org/2000/svg">
201
- <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"/>
202
- <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"/>
203
- </svg>
204
- `;
205
- function parseTokenArray(value) {
206
- if (!Array.isArray(value)) {
207
- throw new Error('Challenge response must be an array of token strings');
208
- }
209
- if (value.length === 0) {
210
- throw new Error('No challenge tokens available');
211
- }
212
- if (!value.every((entry) => typeof entry === 'string' && entry.length > 0)) {
213
- throw new Error('Challenge response contains invalid token values');
214
- }
215
- return value;
216
- }
217
- function parseChallengeTokens(payload) {
218
- if (Array.isArray(payload)) {
219
- return parseTokenArray(payload);
220
- }
221
- if (!payload || typeof payload !== 'object') {
222
- throw new Error('Challenge response must be an object or array of token strings');
223
- }
224
- const record = payload;
225
- if ('challenges' in record) {
226
- return parseTokenArray(record.challenges);
227
- }
228
- if ('tokens' in record) {
229
- return parseTokenArray(record.tokens);
230
- }
231
- throw new Error('Challenge response must include "challenges" or "tokens"');
232
- }
233
- class RibauntWidget extends HTMLElement {
234
- static get observedAttributes() {
235
- return [
236
- 'challenge-endpoint',
237
- 'verify-endpoint',
238
- 'auto-verify',
239
- 'show-warning',
240
- 'warning-message',
241
- 'solve-timeout',
242
- 'disabled',
243
- ];
244
- }
245
- constructor() {
246
- super();
247
- this.state = 'initial';
248
- this.progress = 0;
249
- this.timeoutError = false;
250
- this.captchaElement = null;
251
- this.checkboxElement = null;
252
- this.messageElement = null;
253
- this.warningElement = null;
254
- this.logoElement = null;
255
- this.autoVerifyStarted = false;
256
- this.shadow = this.attachShadow({ mode: 'open' });
257
- this.handleClick = this.handleClick.bind(this);
258
- this.handleKeyPress = this.handleKeyPress.bind(this);
259
- this.handleLogoClick = this.handleLogoClick.bind(this);
260
- }
261
- connectedCallback() {
262
- this.render();
263
- this.dispatchStateChange();
264
- this.maybeAutoVerify();
265
- }
266
- disconnectedCallback() {
267
- this.removeEventListeners();
268
- }
269
- attributeChangedCallback(name, oldValue, newValue) {
270
- if (oldValue !== newValue) {
271
- this.render();
272
- if (name === 'auto-verify') {
273
- this.maybeAutoVerify();
274
- }
275
- }
276
- }
277
- render() {
278
- this.removeEventListeners();
279
- const showWarning = this.hasAttribute('show-warning') && this.getAttribute('show-warning') !== 'false';
280
- const warningMessage = this.getAttribute('warning-message') || 'Enable WASM for significantly faster solving';
281
- const disabled = this.isDisabled();
282
- this.shadow.innerHTML = `
283
- <style>${WIDGET_STYLES}</style>
284
- <div>
285
- ${showWarning ? '<div class="warning"></div>' : ''}
286
- <div class="captcha" data-state="${this.state}" role="button" tabindex="${disabled ? '-1' : '0'}" aria-disabled="${disabled}" aria-label="${this.getMessage()}">
287
- <div class="checkbox"></div>
288
- <p>${this.getMessage()}</p>
289
- <a class="logo" href="https://ribaunt.com" target="_blank" rel="noopener noreferrer" aria-label="Powered by Ribaunt">
290
- ${RIBAUNT_LOGO}
291
- </a>
292
- </div>
293
- </div>
294
- `;
295
- this.captchaElement = this.shadow.querySelector('.captcha');
296
- this.checkboxElement = this.shadow.querySelector('.checkbox');
297
- this.messageElement = this.shadow.querySelector('p');
298
- this.warningElement = this.shadow.querySelector('.warning');
299
- this.logoElement = this.shadow.querySelector('.logo');
300
- if (showWarning && this.warningElement) {
301
- this.warningElement.textContent = warningMessage;
302
- setTimeout(() => {
303
- this.warningElement?.classList.add('visible');
304
- }, 0);
305
- }
306
- // Update progress CSS variable if verifying
307
- if (this.state === 'verifying' && this.captchaElement) {
308
- this.captchaElement.style.setProperty('--progress', `${this.progress}%`);
309
- }
310
- this.attachEventListeners();
311
- }
312
- attachEventListeners() {
313
- if (this.captchaElement) {
314
- this.captchaElement.addEventListener('click', this.handleClick);
315
- this.captchaElement.addEventListener('keypress', this.handleKeyPress);
316
- }
317
- if (this.logoElement) {
318
- this.logoElement.addEventListener('click', this.handleLogoClick);
319
- }
320
- }
321
- removeEventListeners() {
322
- if (this.captchaElement) {
323
- this.captchaElement.removeEventListener('click', this.handleClick);
324
- this.captchaElement.removeEventListener('keypress', this.handleKeyPress);
325
- }
326
- if (this.logoElement) {
327
- this.logoElement.removeEventListener('click', this.handleLogoClick);
328
- }
329
- }
330
- handleLogoClick(event) {
331
- event.stopPropagation();
332
- }
333
- handleClick() {
334
- if (this.isDisabled())
335
- return;
336
- if (this.state !== 'initial' && this.state !== 'error')
337
- return;
338
- this.verify();
339
- }
340
- handleKeyPress(e) {
341
- if (e.key === 'Enter' || e.key === ' ') {
342
- e.preventDefault();
343
- this.handleClick();
344
- }
345
- }
346
- getMessage() {
347
- switch (this.state) {
348
- case 'initial':
349
- return "I'm a human";
350
- case 'verifying':
351
- return `Verifying... ${this.progress}%`;
352
- case 'done':
353
- return "You're a human";
354
- case 'error':
355
- return this.timeoutError ? 'Timed out. Try again.' : 'Error. Try again.';
356
- }
357
- }
358
- getSolveTimeoutMs() {
359
- const raw = this.getAttribute('solve-timeout');
360
- if (!raw) {
361
- return undefined;
362
- }
363
- const value = Number(raw);
364
- if (!Number.isFinite(value) || value <= 0) {
365
- return undefined;
366
- }
367
- return Math.floor(value);
368
- }
369
- isDisabled() {
370
- return this.hasAttribute('disabled') && this.getAttribute('disabled') !== 'false';
371
- }
372
- shouldAutoVerify() {
373
- return this.hasAttribute('auto-verify') && this.getAttribute('auto-verify') !== 'false';
374
- }
375
- maybeAutoVerify() {
376
- if (!this.isConnected || this.autoVerifyStarted || !this.shouldAutoVerify()) {
377
- return;
378
- }
379
- this.autoVerifyStarted = true;
380
- queueMicrotask(() => {
381
- this.startVerification();
382
- });
383
- }
384
- setState(newState) {
385
- if (newState !== 'error') {
386
- this.timeoutError = false;
387
- }
388
- this.state = newState;
389
- if (this.captchaElement) {
390
- this.captchaElement.setAttribute('data-state', this.state);
391
- this.captchaElement.setAttribute('aria-label', this.getMessage());
392
- this.captchaElement.tabIndex = this.isDisabled() ? -1 : 0;
393
- this.captchaElement.setAttribute('aria-disabled', String(this.isDisabled()));
394
- }
395
- if (this.messageElement) {
396
- this.messageElement.textContent = this.getMessage();
397
- }
398
- this.dispatchStateChange();
399
- }
400
- dispatchStateChange() {
401
- // Dispatch state change event
402
- this.dispatchEvent(new CustomEvent('state-change', {
403
- detail: { state: this.state },
404
- bubbles: true,
405
- composed: true,
406
- }));
407
- }
408
- setProgress(value) {
409
- // Smooth the progress value for better animation
410
- const smoothedProgress = Math.round(value * 10) / 10;
411
- this.progress = smoothedProgress;
412
- if (this.messageElement) {
413
- this.messageElement.textContent = this.getMessage();
414
- }
415
- if (this.captchaElement) {
416
- this.captchaElement.style.setProperty('--progress', `${smoothedProgress}%`);
417
- }
418
- }
419
- async verify() {
420
- this.setState('verifying');
421
- this.setProgress(0);
422
- const timeoutMs = this.getSolveTimeoutMs();
423
- const controller = timeoutMs ? new AbortController() : undefined;
424
- const timeoutHandle = timeoutMs
425
- ? setTimeout(() => {
426
- controller?.abort();
427
- }, timeoutMs)
428
- : undefined;
429
- try {
430
- const challengeEndpoint = this.getAttribute('challenge-endpoint');
431
- const verifyEndpoint = this.getAttribute('verify-endpoint');
432
- // Get challenge tokens
433
- let tokens = [];
434
- if (challengeEndpoint) {
435
- const response = await fetch(challengeEndpoint);
436
- if (!response.ok)
437
- throw new Error('Failed to fetch challenge');
438
- const data = await response.json();
439
- tokens = parseChallengeTokens(data);
440
- }
441
- if (tokens.length === 0) {
442
- throw new Error('No challenge tokens available');
443
- }
444
- // Solve challenges using the browser-compatible solver
445
- const solutions = await (0, solver_js_1.solveChallenge)(tokens, (progress) => {
446
- this.setProgress(progress);
447
- }, controller?.signal);
448
- // Verify solution
449
- if (verifyEndpoint) {
450
- const response = await fetch(verifyEndpoint, {
451
- method: 'POST',
452
- headers: { 'Content-Type': 'application/json' },
453
- body: JSON.stringify({ tokens, solutions }),
454
- });
455
- if (!response.ok) {
456
- throw new Error('Verification failed');
457
- }
458
- }
459
- this.setState('done');
460
- // Dispatch verify event
461
- this.dispatchEvent(new CustomEvent('verify', {
462
- detail: { solutions },
463
- bubbles: true,
464
- composed: true,
465
- }));
466
- }
467
- catch (error) {
468
- this.timeoutError = error instanceof DOMException && error.name === 'AbortError';
469
- this.setState('error');
470
- // Dispatch error event
471
- this.dispatchEvent(new CustomEvent('error', {
472
- detail: {
473
- error: this.timeoutError
474
- ? 'Timed out. Try again.'
475
- : (error instanceof Error ? error.message : String(error)),
476
- timeout: this.timeoutError,
477
- },
478
- bubbles: true,
479
- composed: true,
480
- }));
481
- }
482
- finally {
483
- if (timeoutHandle !== undefined) {
484
- clearTimeout(timeoutHandle);
485
- }
486
- }
487
- }
488
- /**
489
- * Public API: Reset the widget to initial state
490
- */
491
- reset() {
492
- this.timeoutError = false;
493
- this.setState('initial');
494
- this.setProgress(0);
495
- }
496
- /**
497
- * Public API: Get current state
498
- */
499
- getState() {
500
- return this.state;
501
- }
502
- /**
503
- * Public API: Programmatically trigger verification
504
- */
505
- startVerification() {
506
- if (!this.isDisabled() && (this.state === 'initial' || this.state === 'error')) {
507
- this.verify();
508
- }
509
- }
510
- }
511
- exports.RibauntWidget = RibauntWidget;
512
- // Register the custom element
513
- /* v8 ignore next -- environment guard for SSR/repeated imports */
514
- if (typeof window !== 'undefined' && typeof customElements !== 'undefined' && !customElements.get('ribaunt-widget')) {
515
- customElements.define('ribaunt-widget', RibauntWidget);
516
- }
517
- // Export for use in TypeScript
518
- exports.default = RibauntWidget;
519
- //# sourceMappingURL=widget.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget.js","sourceRoot":"","sources":["../../src/widget.ts"],"names":[],"mappings":"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"}