ribaunt 0.1.2 → 0.1.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.
package/dist/widget.js CHANGED
@@ -6,6 +6,7 @@
6
6
  * <ribaunt-widget
7
7
  * challenge-endpoint="/api/challenge"
8
8
  * verify-endpoint="/api/verify"
9
+ * auto-verify="true"
9
10
  * show-warning="true"
10
11
  * warning-message="Custom warning message"
11
12
  * ></ribaunt-widget>
@@ -198,13 +199,43 @@ const RIBAUNT_LOGO = `
198
199
  <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"/>
199
200
  </svg>
200
201
  `;
202
+ function parseTokenArray(value) {
203
+ if (!Array.isArray(value)) {
204
+ throw new Error('Challenge response must be an array of token strings');
205
+ }
206
+ if (value.length === 0) {
207
+ throw new Error('No challenge tokens available');
208
+ }
209
+ if (!value.every((entry) => typeof entry === 'string' && entry.length > 0)) {
210
+ throw new Error('Challenge response contains invalid token values');
211
+ }
212
+ return value;
213
+ }
214
+ function parseChallengeTokens(payload) {
215
+ if (Array.isArray(payload)) {
216
+ return parseTokenArray(payload);
217
+ }
218
+ if (!payload || typeof payload !== 'object') {
219
+ throw new Error('Challenge response must be an object or array of token strings');
220
+ }
221
+ const record = payload;
222
+ if ('challenges' in record) {
223
+ return parseTokenArray(record.challenges);
224
+ }
225
+ if ('tokens' in record) {
226
+ return parseTokenArray(record.tokens);
227
+ }
228
+ throw new Error('Challenge response must include "challenges" or "tokens"');
229
+ }
201
230
  export class RibauntWidget extends HTMLElement {
202
231
  static get observedAttributes() {
203
232
  return [
204
233
  'challenge-endpoint',
205
234
  'verify-endpoint',
235
+ 'auto-verify',
206
236
  'show-warning',
207
237
  'warning-message',
238
+ 'solve-timeout',
208
239
  'disabled',
209
240
  ];
210
241
  }
@@ -212,11 +243,13 @@ export class RibauntWidget extends HTMLElement {
212
243
  super();
213
244
  this.state = 'initial';
214
245
  this.progress = 0;
246
+ this.timeoutError = false;
215
247
  this.captchaElement = null;
216
248
  this.checkboxElement = null;
217
249
  this.messageElement = null;
218
250
  this.warningElement = null;
219
251
  this.logoElement = null;
252
+ this.autoVerifyStarted = false;
220
253
  this.shadow = this.attachShadow({ mode: 'open' });
221
254
  this.handleClick = this.handleClick.bind(this);
222
255
  this.handleKeyPress = this.handleKeyPress.bind(this);
@@ -225,6 +258,7 @@ export class RibauntWidget extends HTMLElement {
225
258
  connectedCallback() {
226
259
  this.render();
227
260
  this.dispatchStateChange();
261
+ this.maybeAutoVerify();
228
262
  }
229
263
  disconnectedCallback() {
230
264
  this.removeEventListeners();
@@ -232,6 +266,9 @@ export class RibauntWidget extends HTMLElement {
232
266
  attributeChangedCallback(name, oldValue, newValue) {
233
267
  if (oldValue !== newValue) {
234
268
  this.render();
269
+ if (name === 'auto-verify') {
270
+ this.maybeAutoVerify();
271
+ }
235
272
  }
236
273
  }
237
274
  render() {
@@ -242,7 +279,7 @@ export class RibauntWidget extends HTMLElement {
242
279
  this.shadow.innerHTML = `
243
280
  <style>${WIDGET_STYLES}</style>
244
281
  <div>
245
- ${showWarning ? `<div class="warning ${showWarning ? 'visible' : ''}">${warningMessage}</div>` : ''}
282
+ ${showWarning ? '<div class="warning"></div>' : ''}
246
283
  <div class="captcha" data-state="${this.state}" role="button" tabindex="${disabled ? '-1' : '0'}" aria-disabled="${disabled}" aria-label="${this.getMessage()}">
247
284
  <div class="checkbox"></div>
248
285
  <p>${this.getMessage()}</p>
@@ -257,6 +294,12 @@ export class RibauntWidget extends HTMLElement {
257
294
  this.messageElement = this.shadow.querySelector('p');
258
295
  this.warningElement = this.shadow.querySelector('.warning');
259
296
  this.logoElement = this.shadow.querySelector('.logo');
297
+ if (showWarning && this.warningElement) {
298
+ this.warningElement.textContent = warningMessage;
299
+ setTimeout(() => {
300
+ this.warningElement?.classList.add('visible');
301
+ }, 0);
302
+ }
260
303
  // Update progress CSS variable if verifying
261
304
  if (this.state === 'verifying' && this.captchaElement) {
262
305
  this.captchaElement.style.setProperty('--progress', `${this.progress}%`);
@@ -306,13 +349,39 @@ export class RibauntWidget extends HTMLElement {
306
349
  case 'done':
307
350
  return "You're a human";
308
351
  case 'error':
309
- return 'Error. Try again.';
352
+ return this.timeoutError ? 'Timed out. Try again.' : 'Error. Try again.';
310
353
  }
311
354
  }
355
+ getSolveTimeoutMs() {
356
+ const raw = this.getAttribute('solve-timeout');
357
+ if (!raw) {
358
+ return undefined;
359
+ }
360
+ const value = Number(raw);
361
+ if (!Number.isFinite(value) || value <= 0) {
362
+ return undefined;
363
+ }
364
+ return Math.floor(value);
365
+ }
312
366
  isDisabled() {
313
367
  return this.hasAttribute('disabled') && this.getAttribute('disabled') !== 'false';
314
368
  }
369
+ shouldAutoVerify() {
370
+ return this.hasAttribute('auto-verify') && this.getAttribute('auto-verify') !== 'false';
371
+ }
372
+ maybeAutoVerify() {
373
+ if (!this.isConnected || this.autoVerifyStarted || !this.shouldAutoVerify()) {
374
+ return;
375
+ }
376
+ this.autoVerifyStarted = true;
377
+ queueMicrotask(() => {
378
+ this.startVerification();
379
+ });
380
+ }
315
381
  setState(newState) {
382
+ if (newState !== 'error') {
383
+ this.timeoutError = false;
384
+ }
316
385
  this.state = newState;
317
386
  if (this.captchaElement) {
318
387
  this.captchaElement.setAttribute('data-state', this.state);
@@ -347,6 +416,13 @@ export class RibauntWidget extends HTMLElement {
347
416
  async verify() {
348
417
  this.setState('verifying');
349
418
  this.setProgress(0);
419
+ const timeoutMs = this.getSolveTimeoutMs();
420
+ const controller = timeoutMs ? new AbortController() : undefined;
421
+ const timeoutHandle = timeoutMs
422
+ ? setTimeout(() => {
423
+ controller?.abort();
424
+ }, timeoutMs)
425
+ : undefined;
350
426
  try {
351
427
  const challengeEndpoint = this.getAttribute('challenge-endpoint');
352
428
  const verifyEndpoint = this.getAttribute('verify-endpoint');
@@ -357,15 +433,15 @@ export class RibauntWidget extends HTMLElement {
357
433
  if (!response.ok)
358
434
  throw new Error('Failed to fetch challenge');
359
435
  const data = await response.json();
360
- tokens = data.challenges || data.tokens || data;
436
+ tokens = parseChallengeTokens(data);
361
437
  }
362
- if (!tokens || !Array.isArray(tokens) || tokens.length === 0) {
438
+ if (tokens.length === 0) {
363
439
  throw new Error('No challenge tokens available');
364
440
  }
365
441
  // Solve challenges using the browser-compatible solver
366
442
  const solutions = await solveChallenge(tokens, (progress) => {
367
443
  this.setProgress(progress);
368
- });
444
+ }, controller?.signal);
369
445
  // Verify solution
370
446
  if (verifyEndpoint) {
371
447
  const response = await fetch(verifyEndpoint, {
@@ -386,19 +462,31 @@ export class RibauntWidget extends HTMLElement {
386
462
  }));
387
463
  }
388
464
  catch (error) {
465
+ this.timeoutError = error instanceof DOMException && error.name === 'AbortError';
389
466
  this.setState('error');
390
467
  // Dispatch error event
391
468
  this.dispatchEvent(new CustomEvent('error', {
392
- detail: { error: error instanceof Error ? error.message : String(error) },
469
+ detail: {
470
+ error: this.timeoutError
471
+ ? 'Timed out. Try again.'
472
+ : (error instanceof Error ? error.message : String(error)),
473
+ timeout: this.timeoutError,
474
+ },
393
475
  bubbles: true,
394
476
  composed: true,
395
477
  }));
396
478
  }
479
+ finally {
480
+ if (timeoutHandle !== undefined) {
481
+ clearTimeout(timeoutHandle);
482
+ }
483
+ }
397
484
  }
398
485
  /**
399
486
  * Public API: Reset the widget to initial state
400
487
  */
401
488
  reset() {
489
+ this.timeoutError = false;
402
490
  this.setState('initial');
403
491
  this.setProgress(0);
404
492
  }
@@ -418,6 +506,7 @@ export class RibauntWidget extends HTMLElement {
418
506
  }
419
507
  }
420
508
  // Register the custom element
509
+ /* v8 ignore next -- environment guard for SSR/repeated imports */
421
510
  if (typeof window !== 'undefined' && typeof customElements !== 'undefined' && !customElements.get('ribaunt-widget')) {
422
511
  customElements.define('ribaunt-widget', RibauntWidget);
423
512
  }
@@ -1 +1 @@
1
- {"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "ribaunt",
3
- "version": "0.1.2",
3
+ "version": "0.1.5",
4
4
  "description": "A PoW CAPTCHA library that provides stateless and secure user verification",
5
5
  "homepage": "https://ribaunt.com",
6
6
  "bugs": {
7
- "url": "https://github.com/computebaker/ribaunt/issues"
7
+ "url": "https://github.com/ribaunt/ribaunt/issues"
8
8
  },
9
9
  "main": "dist/cjs/index.js",
10
10
  "types": "dist/index.d.ts",
@@ -27,29 +27,28 @@
27
27
  },
28
28
  "repository": {
29
29
  "type": "git",
30
- "url": "git+https://github.com/computebaker/ribaunt.git"
30
+ "url": "git+https://github.com/ribaunt/ribaunt.git"
31
31
  },
32
- "license": "EUPL-1.2",
33
- "author": "computebaker",
32
+ "license": "GPL-3.0-only",
33
+ "author": "ribaunt",
34
34
  "type": "module",
35
35
  "scripts": {
36
36
  "build": "tsc && tsc --project tsconfig.cjs.json && node scripts/prepare-cjs.mjs",
37
- "test": "jest --config jest.config.cjs"
37
+ "test": "vitest run",
38
+ "test:coverage": "vitest run --coverage"
38
39
  },
39
40
  "devDependencies": {
40
- "@types/jest": "^30.0.0",
41
41
  "@types/jsonwebtoken": "^9.0.10",
42
42
  "@types/node": "^24.6.2",
43
43
  "@types/react": "^19.2.14",
44
44
  "@types/react-dom": "^19.2.3",
45
+ "@vitest/coverage-v8": "^4.1.9",
45
46
  "dotenv": "^17.2.3",
46
- "jest": "^30.2.0",
47
- "jest-environment-jsdom": "^30.3.0",
48
47
  "jsdom": "^27.0.1",
49
48
  "react": "^19.2.4",
50
49
  "react-dom": "^19.2.4",
51
- "ts-jest": "^29.4.6",
52
- "typescript": "^5.9.3"
50
+ "typescript": "^5.9.3",
51
+ "vitest": "^4.1.9"
53
52
  },
54
53
  "peerDependencies": {
55
54
  "react": "^18.0.0 || ^19.0.0",
@@ -1,200 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createChallenge = createChallenge;
7
- exports.solveChallenge = solveChallenge;
8
- exports.verifySolution = verifySolution;
9
- const crypto_1 = __importDefault(require("crypto"));
10
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
11
- function generateChallenge(length = 8) {
12
- const buffer = crypto_1.default.randomBytes(length);
13
- return buffer.toString('base64').slice(0, length);
14
- }
15
- function createChallengePayload(difficulty, ttlSeconds) {
16
- return {
17
- challenge: generateChallenge(),
18
- difficulty,
19
- expires: Math.floor(Date.now() / 1000) + ttlSeconds,
20
- };
21
- }
22
- function getSecret() {
23
- const secret = process.env.RIBAUNT_SECRET;
24
- if (!secret) {
25
- throw new Error('RIBAUNT_SECRET environment variable is not set!');
26
- }
27
- return secret;
28
- }
29
- function signChallenge(payload) {
30
- return jsonwebtoken_1.default.sign(payload, getSecret());
31
- }
32
- function assertValidAmount(amount) {
33
- if (!Number.isFinite(amount)) {
34
- throw new Error('Challenge amount must be a finite number');
35
- }
36
- const normalized = Math.floor(amount);
37
- if (normalized < 1) {
38
- throw new Error('Challenge amount must be at least 1');
39
- }
40
- return normalized;
41
- }
42
- function assertValidDifficulty(difficulty) {
43
- if (!Number.isFinite(difficulty)) {
44
- throw new Error('Challenge difficulty must be a finite number');
45
- }
46
- const normalized = Math.floor(difficulty);
47
- if (normalized < 1) {
48
- throw new Error('Challenge difficulty must be at least 1');
49
- }
50
- return normalized;
51
- }
52
- function assertValidTtl(ttlSeconds) {
53
- if (!Number.isFinite(ttlSeconds)) {
54
- throw new Error('Challenge TTL must be a finite number');
55
- }
56
- const normalized = Math.floor(ttlSeconds);
57
- if (normalized < 1) {
58
- throw new Error('Challenge TTL must be at least 1 second');
59
- }
60
- return normalized;
61
- }
62
- function createSingleChallenge(difficulty, ttlSeconds) {
63
- const payload = createChallengePayload(difficulty, ttlSeconds);
64
- return signChallenge(payload);
65
- }
66
- /**
67
- * Creates one or more PoW challenges and returns them as signed JWT tokens.
68
- *
69
- * @param difficulty - Number of leading zeros required in the hash (default 6)
70
- * @param amount - Number of challenges to create (default 4)
71
- * @param ttlSeconds - Time to live for each challenge in seconds (default 30)
72
- * @returns An array of JWT challenge tokens
73
- */
74
- function createChallenge(difficulty = 5, amount = 4, ttlSeconds = 30) {
75
- const normalizedDifficulty = assertValidDifficulty(difficulty);
76
- const normalizedAmount = assertValidAmount(amount);
77
- const normalizedTtl = assertValidTtl(ttlSeconds);
78
- const challenges = Array.from({ length: normalizedAmount }, () => createSingleChallenge(normalizedDifficulty, normalizedTtl));
79
- return challenges;
80
- }
81
- function solveSingleChallenge(token) {
82
- try {
83
- const payload = jsonwebtoken_1.default.decode(token);
84
- if (!payload)
85
- return undefined;
86
- const { challenge, difficulty } = payload;
87
- const prefix = '0'.repeat(difficulty);
88
- let nonce = 0;
89
- while (true) {
90
- const hash = crypto_1.default
91
- .createHash('sha256')
92
- .update(`${challenge}${nonce}`)
93
- .digest('hex');
94
- if (hash.startsWith(prefix)) {
95
- return { nonce: String(nonce), hash };
96
- }
97
- nonce++;
98
- }
99
- }
100
- catch (err) {
101
- return undefined;
102
- }
103
- }
104
- function verifySingleSolution(token, nonce) {
105
- if (nonce === undefined || nonce === null) {
106
- return false;
107
- }
108
- try {
109
- const payload = jsonwebtoken_1.default.verify(token, getSecret());
110
- const now = Math.floor(Date.now() / 1000);
111
- if (payload.expires < now)
112
- return false;
113
- const nonceValue = typeof nonce === 'number' ? String(nonce) : nonce;
114
- const hash = crypto_1.default
115
- .createHash('sha256')
116
- .update(`${payload.challenge}${nonceValue}`)
117
- .digest('hex');
118
- const prefix = '0'.repeat(payload.difficulty);
119
- return hash.startsWith(prefix);
120
- }
121
- catch (err) {
122
- return false;
123
- }
124
- }
125
- function solveChallenge(token) {
126
- if (Array.isArray(token)) {
127
- const solutions = [];
128
- for (const singleToken of token) {
129
- const solution = solveSingleChallenge(singleToken);
130
- if (!solution) {
131
- return undefined;
132
- }
133
- solutions.push(solution);
134
- }
135
- return solutions;
136
- }
137
- const solution = solveSingleChallenge(token);
138
- return solution;
139
- }
140
- /**
141
- * Verifies a PoW solution returned by the client.
142
- *
143
- * @param token - The original JWT issued as the challenge (single token or array of tokens)
144
- * @param nonce - The nonce/answer submitted by the client (single nonce, array of nonces, or array of solution objects)
145
- * @returns true only if every provided solution is valid; otherwise false
146
- */
147
- function verifySolution(token, nonce) {
148
- if (Array.isArray(token)) {
149
- let nonces;
150
- if (Array.isArray(nonce)) {
151
- if (nonce.length !== token.length) {
152
- return false;
153
- }
154
- if (nonce.length > 0 && typeof nonce[0] === 'object' && 'nonce' in nonce[0]) {
155
- nonces = nonce.map(s => s.nonce);
156
- }
157
- else {
158
- nonces = nonce;
159
- }
160
- }
161
- else {
162
- return false;
163
- }
164
- for (let index = 0; index < token.length; index++) {
165
- const challengeToken = token[index];
166
- const nonceEntry = nonces[index];
167
- if (challengeToken === undefined || nonceEntry === undefined) {
168
- return false;
169
- }
170
- if (!verifySingleSolution(challengeToken, nonceEntry)) {
171
- return false;
172
- }
173
- }
174
- return true;
175
- }
176
- let effectiveNonce;
177
- if (Array.isArray(nonce)) {
178
- if (nonce.length === 0) {
179
- return false;
180
- }
181
- if (typeof nonce[0] === 'object' && 'nonce' in nonce[0]) {
182
- effectiveNonce = nonce[0].nonce;
183
- }
184
- else {
185
- effectiveNonce = nonce[0];
186
- }
187
- }
188
- else if (typeof nonce === 'object' && 'nonce' in nonce) {
189
- effectiveNonce = nonce.nonce;
190
- }
191
- else {
192
- effectiveNonce = nonce;
193
- }
194
- if (effectiveNonce === undefined) {
195
- return false;
196
- }
197
- const result = verifySingleSolution(token, effectiveNonce);
198
- return result;
199
- }
200
- //# sourceMappingURL=index.js.map
@@ -1,31 +0,0 @@
1
- export type ChallengeToken = string;
2
- export interface ChallengeSolution {
3
- nonce: string;
4
- hash: string;
5
- }
6
- /**
7
- * Creates one or more PoW challenges and returns them as signed JWT tokens.
8
- *
9
- * @param difficulty - Number of leading zeros required in the hash (default 6)
10
- * @param amount - Number of challenges to create (default 4)
11
- * @param ttlSeconds - Time to live for each challenge in seconds (default 30)
12
- * @returns An array of JWT challenge tokens
13
- */
14
- export declare function createChallenge(difficulty?: number, amount?: number, ttlSeconds?: number): ChallengeToken[];
15
- /**
16
- * Solves one or more PoW challenges encoded in JWT tokens.
17
- *
18
- * @param token - The JWT challenge token or an array of tokens
19
- * @returns The nonce/hash pair for single input or an array of them for multiple tokens
20
- */
21
- export declare function solveChallenge(token: ChallengeToken): ChallengeSolution | undefined;
22
- export declare function solveChallenge(token: ChallengeToken[]): ChallengeSolution[] | undefined;
23
- /**
24
- * Verifies a PoW solution returned by the client.
25
- *
26
- * @param token - The original JWT issued as the challenge (single token or array of tokens)
27
- * @param nonce - The nonce/answer submitted by the client (single nonce, array of nonces, or array of solution objects)
28
- * @returns true only if every provided solution is valid; otherwise false
29
- */
30
- export declare function verifySolution(token: ChallengeToken | ChallengeToken[], nonce: number | string | Array<number | string> | ChallengeSolution | ChallengeSolution[]): boolean;
31
- //# sourceMappingURL=index.d.ts.map
@@ -1,11 +0,0 @@
1
- import { mkdir, writeFile } from 'node:fs/promises';
2
- import { resolve } from 'node:path';
3
-
4
- const cjsDir = resolve(process.cwd(), 'dist/cjs');
5
-
6
- await mkdir(cjsDir, { recursive: true });
7
- await writeFile(
8
- resolve(cjsDir, 'package.json'),
9
- `${JSON.stringify({ type: 'commonjs' }, null, 2)}\n`,
10
- 'utf8'
11
- );