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/LICENSE +674 -286
- package/README.md +258 -0
- package/context7.json +4 -0
- package/dist/cjs/index.d.ts +30 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +166 -27
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/solver.d.ts +2 -2
- package/dist/cjs/solver.d.ts.map +1 -1
- package/dist/cjs/solver.js +6 -3
- package/dist/cjs/solver.js.map +1 -1
- package/dist/cjs/widget-react.d.ts +3 -0
- package/dist/cjs/widget-react.d.ts.map +1 -1
- package/dist/cjs/widget-react.js +12 -6
- package/dist/cjs/widget-react.js.map +1 -1
- package/dist/cjs/widget.d.ts +8 -0
- package/dist/cjs/widget.d.ts.map +1 -1
- package/dist/cjs/widget.js +95 -6
- package/dist/cjs/widget.js.map +1 -1
- package/dist/index.d.ts +30 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +164 -27
- package/dist/index.js.map +1 -1
- package/dist/solver.d.ts +2 -2
- package/dist/solver.d.ts.map +1 -1
- package/dist/solver.js +6 -3
- package/dist/solver.js.map +1 -1
- package/dist/widget-react.d.ts +3 -0
- package/dist/widget-react.d.ts.map +1 -1
- package/dist/widget-react.js +12 -6
- package/dist/widget-react.js.map +1 -1
- package/dist/widget.d.ts +8 -0
- package/dist/widget.d.ts.map +1 -1
- package/dist/widget.js +95 -6
- package/dist/widget.js.map +1 -1
- package/package.json +10 -11
- package/dist/cjs/index.cjs +0 -200
- package/dist/cjs/index.d.cts +0 -31
- package/scripts/prepare-cjs.mjs +0 -11
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 ?
|
|
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
|
|
436
|
+
tokens = parseChallengeTokens(data);
|
|
361
437
|
}
|
|
362
|
-
if (
|
|
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: {
|
|
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
|
}
|
package/dist/widget.js.map
CHANGED
|
@@ -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.
|
|
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/
|
|
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/
|
|
30
|
+
"url": "git+https://github.com/ribaunt/ribaunt.git"
|
|
31
31
|
},
|
|
32
|
-
"license": "
|
|
33
|
-
"author": "
|
|
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": "
|
|
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
|
-
"
|
|
52
|
-
"
|
|
50
|
+
"typescript": "^5.9.3",
|
|
51
|
+
"vitest": "^4.1.9"
|
|
53
52
|
},
|
|
54
53
|
"peerDependencies": {
|
|
55
54
|
"react": "^18.0.0 || ^19.0.0",
|
package/dist/cjs/index.cjs
DELETED
|
@@ -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
|
package/dist/cjs/index.d.cts
DELETED
|
@@ -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
|
package/scripts/prepare-cjs.mjs
DELETED
|
@@ -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
|
-
);
|