ribaunt 0.1.1 → 0.1.3
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/cjs/index.cjs +32 -7
- package/dist/cjs/index.d.ts +59 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +340 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/solver.d.ts +2 -2
- package/dist/cjs/solver.d.ts.map +1 -1
- package/dist/cjs/solver.js +30 -24
- package/dist/cjs/solver.js.map +1 -1
- package/dist/cjs/widget-react.d.ts +2 -0
- package/dist/cjs/widget-react.d.ts.map +1 -1
- package/dist/cjs/widget-react.js +38 -12
- package/dist/cjs/widget-react.js.map +1 -1
- package/dist/cjs/widget.d.ts +6 -0
- package/dist/cjs/widget.d.ts.map +1 -1
- package/dist/cjs/widget.js +114 -22
- 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 +194 -31
- 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 +30 -24
- package/dist/solver.js.map +1 -1
- package/dist/widget-react.d.ts +2 -0
- package/dist/widget-react.d.ts.map +1 -1
- package/dist/widget-react.js +38 -12
- package/dist/widget-react.js.map +1 -1
- package/dist/widget.d.ts +6 -0
- package/dist/widget.d.ts.map +1 -1
- package/dist/widget.js +114 -22
- package/dist/widget.js.map +1 -1
- package/package.json +10 -7
- package/scripts/prepare-cjs.mjs +11 -0
package/dist/index.js
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
2
|
import jwt from 'jsonwebtoken';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export class LocalReplayStore {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.usedTokens = new Map();
|
|
6
|
+
}
|
|
7
|
+
async consume(jti, expiresAt) {
|
|
8
|
+
this.cleanup();
|
|
9
|
+
if (this.usedTokens.has(jti)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
this.usedTokens.set(jti, expiresAt);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
cleanup() {
|
|
16
|
+
const now = Math.floor(Date.now() / 1000);
|
|
17
|
+
for (const [jti, expiresAt] of this.usedTokens.entries()) {
|
|
18
|
+
if (expiresAt < now) {
|
|
19
|
+
this.usedTokens.delete(jti);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
6
23
|
}
|
|
24
|
+
const defaultLocalReplayStore = new LocalReplayStore();
|
|
25
|
+
const DEFAULT_SOLVE_MAX_DURATION_MS = 30000;
|
|
7
26
|
function generateChallenge(length = 8) {
|
|
8
27
|
const buffer = crypto.randomBytes(length);
|
|
9
28
|
return buffer.toString('base64').slice(0, length);
|
|
@@ -13,10 +32,105 @@ function createChallengePayload(difficulty, ttlSeconds) {
|
|
|
13
32
|
challenge: generateChallenge(),
|
|
14
33
|
difficulty,
|
|
15
34
|
expires: Math.floor(Date.now() / 1000) + ttlSeconds,
|
|
35
|
+
jti: crypto.randomUUID(),
|
|
16
36
|
};
|
|
17
37
|
}
|
|
38
|
+
let cachedSecret;
|
|
39
|
+
function getSecret() {
|
|
40
|
+
const secret = process.env.RIBAUNT_SECRET;
|
|
41
|
+
if (!secret) {
|
|
42
|
+
cachedSecret = undefined;
|
|
43
|
+
throw new Error('RIBAUNT_SECRET environment variable is not set!');
|
|
44
|
+
}
|
|
45
|
+
if (cachedSecret === secret) {
|
|
46
|
+
return cachedSecret;
|
|
47
|
+
}
|
|
48
|
+
cachedSecret = secret;
|
|
49
|
+
return cachedSecret;
|
|
50
|
+
}
|
|
51
|
+
function shouldDebugVerifyErrors(options) {
|
|
52
|
+
if (options?.debug !== undefined) {
|
|
53
|
+
return options.debug;
|
|
54
|
+
}
|
|
55
|
+
return process.env.NODE_ENV === 'development';
|
|
56
|
+
}
|
|
57
|
+
function logVerifyWarning(message, options, error) {
|
|
58
|
+
const warning = {
|
|
59
|
+
reason: classifyVerifyWarningReason(error),
|
|
60
|
+
message,
|
|
61
|
+
error,
|
|
62
|
+
};
|
|
63
|
+
options?.onWarning?.(warning);
|
|
64
|
+
if (!shouldDebugVerifyErrors(options)) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const details = error instanceof Error ? error.message : error;
|
|
68
|
+
console.warn(`[ribaunt] ${message}`, details ?? '');
|
|
69
|
+
}
|
|
70
|
+
function emitVerifyWarning(reason, message, options, error) {
|
|
71
|
+
options?.onWarning?.({ reason, message, error });
|
|
72
|
+
if (!shouldDebugVerifyErrors(options)) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const details = error instanceof Error ? error.message : error;
|
|
76
|
+
console.warn(`[ribaunt] ${message}`, details ?? '');
|
|
77
|
+
}
|
|
78
|
+
function classifyVerifyWarningReason(error) {
|
|
79
|
+
if (error && typeof error === 'object' && 'name' in error) {
|
|
80
|
+
const name = String(error.name);
|
|
81
|
+
if (name === 'TokenExpiredError') {
|
|
82
|
+
return 'expired-token';
|
|
83
|
+
}
|
|
84
|
+
if (name === 'JsonWebTokenError' || name === 'NotBeforeError') {
|
|
85
|
+
return 'invalid-token';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (error instanceof Error && error.message.includes('replayStore')) {
|
|
89
|
+
return 'configuration-error';
|
|
90
|
+
}
|
|
91
|
+
return 'invalid-token';
|
|
92
|
+
}
|
|
93
|
+
function normalizeMaxIterations(options) {
|
|
94
|
+
if (options?.maxIterations === undefined) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
if (!Number.isFinite(options.maxIterations)) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const normalized = Math.floor(options.maxIterations);
|
|
101
|
+
if (normalized < 1) {
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
return normalized;
|
|
105
|
+
}
|
|
106
|
+
function normalizeMaxDurationMs(options) {
|
|
107
|
+
if (options?.maxDurationMs === undefined) {
|
|
108
|
+
return DEFAULT_SOLVE_MAX_DURATION_MS;
|
|
109
|
+
}
|
|
110
|
+
if (!Number.isFinite(options.maxDurationMs)) {
|
|
111
|
+
return DEFAULT_SOLVE_MAX_DURATION_MS;
|
|
112
|
+
}
|
|
113
|
+
const normalized = Math.floor(options.maxDurationMs);
|
|
114
|
+
if (normalized < 1) {
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
return normalized;
|
|
118
|
+
}
|
|
119
|
+
function getReplayStore(options) {
|
|
120
|
+
const mode = options?.replayPrevention ?? 'disabled';
|
|
121
|
+
if (mode === 'disabled') {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
if (mode === 'local') {
|
|
125
|
+
return defaultLocalReplayStore;
|
|
126
|
+
}
|
|
127
|
+
if (!options?.replayStore) {
|
|
128
|
+
throw new Error('A replayStore is required when replayPrevention is set to "remote"');
|
|
129
|
+
}
|
|
130
|
+
return options.replayStore;
|
|
131
|
+
}
|
|
18
132
|
function signChallenge(payload) {
|
|
19
|
-
return jwt.sign(payload,
|
|
133
|
+
return jwt.sign(payload, getSecret());
|
|
20
134
|
}
|
|
21
135
|
function assertValidAmount(amount) {
|
|
22
136
|
if (!Number.isFinite(amount)) {
|
|
@@ -28,6 +142,26 @@ function assertValidAmount(amount) {
|
|
|
28
142
|
}
|
|
29
143
|
return normalized;
|
|
30
144
|
}
|
|
145
|
+
function assertValidDifficulty(difficulty) {
|
|
146
|
+
if (!Number.isFinite(difficulty)) {
|
|
147
|
+
throw new Error('Challenge difficulty must be a finite number');
|
|
148
|
+
}
|
|
149
|
+
const normalized = Math.floor(difficulty);
|
|
150
|
+
if (normalized < 1) {
|
|
151
|
+
throw new Error('Challenge difficulty must be at least 1');
|
|
152
|
+
}
|
|
153
|
+
return normalized;
|
|
154
|
+
}
|
|
155
|
+
function assertValidTtl(ttlSeconds) {
|
|
156
|
+
if (!Number.isFinite(ttlSeconds)) {
|
|
157
|
+
throw new Error('Challenge TTL must be a finite number');
|
|
158
|
+
}
|
|
159
|
+
const normalized = Math.floor(ttlSeconds);
|
|
160
|
+
if (normalized < 1) {
|
|
161
|
+
throw new Error('Challenge TTL must be at least 1 second');
|
|
162
|
+
}
|
|
163
|
+
return normalized;
|
|
164
|
+
}
|
|
31
165
|
function createSingleChallenge(difficulty, ttlSeconds) {
|
|
32
166
|
const payload = createChallengePayload(difficulty, ttlSeconds);
|
|
33
167
|
return signChallenge(payload);
|
|
@@ -35,25 +169,36 @@ function createSingleChallenge(difficulty, ttlSeconds) {
|
|
|
35
169
|
/**
|
|
36
170
|
* Creates one or more PoW challenges and returns them as signed JWT tokens.
|
|
37
171
|
*
|
|
38
|
-
* @param difficulty - Number of leading zeros required in the hash (default
|
|
172
|
+
* @param difficulty - Number of leading zeros required in the hash (default 5)
|
|
39
173
|
* @param amount - Number of challenges to create (default 4)
|
|
40
174
|
* @param ttlSeconds - Time to live for each challenge in seconds (default 30)
|
|
41
175
|
* @returns An array of JWT challenge tokens
|
|
42
176
|
*/
|
|
43
177
|
export function createChallenge(difficulty = 5, amount = 4, ttlSeconds = 30) {
|
|
178
|
+
const normalizedDifficulty = assertValidDifficulty(difficulty);
|
|
44
179
|
const normalizedAmount = assertValidAmount(amount);
|
|
45
|
-
const
|
|
180
|
+
const normalizedTtl = assertValidTtl(ttlSeconds);
|
|
181
|
+
const challenges = Array.from({ length: normalizedAmount }, () => createSingleChallenge(normalizedDifficulty, normalizedTtl));
|
|
46
182
|
return challenges;
|
|
47
183
|
}
|
|
48
|
-
function solveSingleChallenge(token) {
|
|
184
|
+
function solveSingleChallenge(token, options) {
|
|
49
185
|
try {
|
|
50
186
|
const payload = jwt.decode(token);
|
|
51
187
|
if (!payload)
|
|
52
188
|
return undefined;
|
|
53
189
|
const { challenge, difficulty } = payload;
|
|
54
190
|
const prefix = '0'.repeat(difficulty);
|
|
191
|
+
const maxIterations = normalizeMaxIterations(options);
|
|
192
|
+
const maxDurationMs = normalizeMaxDurationMs(options);
|
|
193
|
+
const startedAt = Date.now();
|
|
55
194
|
let nonce = 0;
|
|
56
195
|
while (true) {
|
|
196
|
+
if (maxIterations !== undefined && nonce >= maxIterations) {
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
if (Date.now() - startedAt >= maxDurationMs) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
57
202
|
const hash = crypto
|
|
58
203
|
.createHash('sha256')
|
|
59
204
|
.update(`${challenge}${nonce}`)
|
|
@@ -68,32 +213,49 @@ function solveSingleChallenge(token) {
|
|
|
68
213
|
return undefined;
|
|
69
214
|
}
|
|
70
215
|
}
|
|
71
|
-
function verifySingleSolution(token, nonce) {
|
|
216
|
+
async function verifySingleSolution(token, nonce, options) {
|
|
72
217
|
if (nonce === undefined || nonce === null) {
|
|
218
|
+
emitVerifyWarning('invalid-solution', 'verifySolution received an empty nonce', options);
|
|
73
219
|
return false;
|
|
74
220
|
}
|
|
75
221
|
try {
|
|
76
|
-
const
|
|
222
|
+
const replayStore = getReplayStore(options);
|
|
223
|
+
const payload = jwt.verify(token, getSecret());
|
|
77
224
|
const now = Math.floor(Date.now() / 1000);
|
|
78
|
-
if (payload.expires < now)
|
|
225
|
+
if (payload.expires < now) {
|
|
226
|
+
emitVerifyWarning('expired-token', 'verifySolution rejected an expired challenge token', options);
|
|
79
227
|
return false;
|
|
228
|
+
}
|
|
80
229
|
const nonceValue = typeof nonce === 'number' ? String(nonce) : nonce;
|
|
81
230
|
const hash = crypto
|
|
82
231
|
.createHash('sha256')
|
|
83
232
|
.update(`${payload.challenge}${nonceValue}`)
|
|
84
233
|
.digest('hex');
|
|
85
234
|
const prefix = '0'.repeat(payload.difficulty);
|
|
86
|
-
|
|
235
|
+
const isValid = hash.startsWith(prefix);
|
|
236
|
+
if (!isValid) {
|
|
237
|
+
emitVerifyWarning('invalid-solution', 'verifySolution rejected an invalid nonce', options);
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
if (replayStore && payload.jti) {
|
|
241
|
+
const consumed = await replayStore.consume(payload.jti, payload.expires);
|
|
242
|
+
if (!consumed) {
|
|
243
|
+
emitVerifyWarning('replay-detected', 'verifySolution rejected a replayed token', options);
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
87
248
|
}
|
|
88
249
|
catch (err) {
|
|
250
|
+
logVerifyWarning('verifySolution rejected a token or nonce', options, err);
|
|
89
251
|
return false;
|
|
90
252
|
}
|
|
91
253
|
}
|
|
92
|
-
export function solveChallenge(token) {
|
|
254
|
+
export function solveChallenge(token, options) {
|
|
93
255
|
if (Array.isArray(token)) {
|
|
94
256
|
const solutions = [];
|
|
95
257
|
for (const singleToken of token) {
|
|
96
|
-
const solution = solveSingleChallenge(singleToken);
|
|
258
|
+
const solution = solveSingleChallenge(singleToken, options);
|
|
97
259
|
if (!solution) {
|
|
98
260
|
return undefined;
|
|
99
261
|
}
|
|
@@ -101,7 +263,7 @@ export function solveChallenge(token) {
|
|
|
101
263
|
}
|
|
102
264
|
return solutions;
|
|
103
265
|
}
|
|
104
|
-
const solution = solveSingleChallenge(token);
|
|
266
|
+
const solution = solveSingleChallenge(token, options);
|
|
105
267
|
return solution;
|
|
106
268
|
}
|
|
107
269
|
/**
|
|
@@ -111,12 +273,12 @@ export function solveChallenge(token) {
|
|
|
111
273
|
* @param nonce - The nonce/answer submitted by the client (single nonce, array of nonces, or array of solution objects)
|
|
112
274
|
* @returns true only if every provided solution is valid; otherwise false
|
|
113
275
|
*/
|
|
114
|
-
export function verifySolution(token, nonce) {
|
|
276
|
+
export function verifySolution(token, nonce, options) {
|
|
115
277
|
if (Array.isArray(token)) {
|
|
116
278
|
let nonces;
|
|
117
279
|
if (Array.isArray(nonce)) {
|
|
118
280
|
if (nonce.length !== token.length) {
|
|
119
|
-
return false;
|
|
281
|
+
return Promise.resolve(false);
|
|
120
282
|
}
|
|
121
283
|
if (nonce.length > 0 && typeof nonce[0] === 'object' && 'nonce' in nonce[0]) {
|
|
122
284
|
nonces = nonce.map(s => s.nonce);
|
|
@@ -126,24 +288,26 @@ export function verifySolution(token, nonce) {
|
|
|
126
288
|
}
|
|
127
289
|
}
|
|
128
290
|
else {
|
|
129
|
-
return false;
|
|
291
|
+
return Promise.resolve(false);
|
|
130
292
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
293
|
+
return (async () => {
|
|
294
|
+
for (let index = 0; index < token.length; index++) {
|
|
295
|
+
const challengeToken = token[index];
|
|
296
|
+
const nonceEntry = nonces[index];
|
|
297
|
+
if (challengeToken === undefined || nonceEntry === undefined) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
if (!await verifySingleSolution(challengeToken, nonceEntry, options)) {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
139
303
|
}
|
|
140
|
-
|
|
141
|
-
|
|
304
|
+
return true;
|
|
305
|
+
})();
|
|
142
306
|
}
|
|
143
307
|
let effectiveNonce;
|
|
144
308
|
if (Array.isArray(nonce)) {
|
|
145
309
|
if (nonce.length === 0) {
|
|
146
|
-
return false;
|
|
310
|
+
return Promise.resolve(false);
|
|
147
311
|
}
|
|
148
312
|
if (typeof nonce[0] === 'object' && 'nonce' in nonce[0]) {
|
|
149
313
|
effectiveNonce = nonce[0].nonce;
|
|
@@ -159,9 +323,8 @@ export function verifySolution(token, nonce) {
|
|
|
159
323
|
effectiveNonce = nonce;
|
|
160
324
|
}
|
|
161
325
|
if (effectiveNonce === undefined) {
|
|
162
|
-
return false;
|
|
326
|
+
return Promise.resolve(false);
|
|
163
327
|
}
|
|
164
|
-
|
|
165
|
-
return result;
|
|
328
|
+
return verifySingleSolution(token, effectiveNonce, options);
|
|
166
329
|
}
|
|
167
330
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/solver.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ export interface ChallengeSolution {
|
|
|
8
8
|
/**
|
|
9
9
|
* Solve a single challenge token (browser-compatible)
|
|
10
10
|
*/
|
|
11
|
-
export declare function solveSingleChallenge(token: string): Promise<ChallengeSolution | undefined>;
|
|
11
|
+
export declare function solveSingleChallenge(token: string, signal?: AbortSignal): Promise<ChallengeSolution | undefined>;
|
|
12
12
|
/**
|
|
13
13
|
* Solve multiple challenge tokens (browser-compatible)
|
|
14
14
|
*/
|
|
15
|
-
export declare function solveChallenge(tokens: string[], onProgress?: (progress: number) => void): Promise<ChallengeSolution[]>;
|
|
15
|
+
export declare function solveChallenge(tokens: string[], onProgress?: (progress: number) => void, signal?: AbortSignal): Promise<ChallengeSolution[]>;
|
|
16
16
|
//# sourceMappingURL=solver.d.ts.map
|
package/dist/solver.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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"}
|
package/dist/solver.js
CHANGED
|
@@ -9,7 +9,9 @@ function decodeJWT(token) {
|
|
|
9
9
|
const parts = token.split('.');
|
|
10
10
|
if (parts.length !== 3 || !parts[1])
|
|
11
11
|
return null;
|
|
12
|
-
const
|
|
12
|
+
const normalizedPayload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
13
|
+
const paddedPayload = normalizedPayload.padEnd(normalizedPayload.length + ((4 - (normalizedPayload.length % 4)) % 4), '=');
|
|
14
|
+
const payload = JSON.parse(atob(paddedPayload));
|
|
13
15
|
return payload;
|
|
14
16
|
}
|
|
15
17
|
catch {
|
|
@@ -20,6 +22,12 @@ function decodeJWT(token) {
|
|
|
20
22
|
* SHA-256 hash using Web Crypto API
|
|
21
23
|
*/
|
|
22
24
|
async function sha256(message) {
|
|
25
|
+
if (typeof TextEncoder === 'undefined') {
|
|
26
|
+
throw new Error('TextEncoder is unavailable in this browser environment');
|
|
27
|
+
}
|
|
28
|
+
if (!globalThis.crypto?.subtle) {
|
|
29
|
+
throw new Error('Web Crypto API is unavailable. Use HTTPS or localhost.');
|
|
30
|
+
}
|
|
23
31
|
const msgBuffer = new TextEncoder().encode(message);
|
|
24
32
|
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
|
|
25
33
|
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
@@ -29,41 +37,39 @@ async function sha256(message) {
|
|
|
29
37
|
/**
|
|
30
38
|
* Solve a single challenge token (browser-compatible)
|
|
31
39
|
*/
|
|
32
|
-
export async function solveSingleChallenge(token) {
|
|
33
|
-
|
|
34
|
-
|
|
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) {
|
|
40
|
+
export async function solveSingleChallenge(token, signal) {
|
|
41
|
+
const payload = decodeJWT(token);
|
|
42
|
+
if (!payload)
|
|
53
43
|
return undefined;
|
|
44
|
+
const { challenge, difficulty } = payload;
|
|
45
|
+
const prefix = '0'.repeat(difficulty);
|
|
46
|
+
let nonce = 0;
|
|
47
|
+
while (true) {
|
|
48
|
+
if (signal?.aborted) {
|
|
49
|
+
throw new DOMException('Challenge solving aborted', 'AbortError');
|
|
50
|
+
}
|
|
51
|
+
const hash = await sha256(`${challenge}${nonce}`);
|
|
52
|
+
if (hash.startsWith(prefix)) {
|
|
53
|
+
return { nonce: String(nonce), hash };
|
|
54
|
+
}
|
|
55
|
+
nonce++;
|
|
56
|
+
// Yield to prevent blocking the UI (every 1000 iterations)
|
|
57
|
+
if (nonce % 1000 === 0) {
|
|
58
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
59
|
+
}
|
|
54
60
|
}
|
|
55
61
|
}
|
|
56
62
|
/**
|
|
57
63
|
* Solve multiple challenge tokens (browser-compatible)
|
|
58
64
|
*/
|
|
59
|
-
export async function solveChallenge(tokens, onProgress) {
|
|
65
|
+
export async function solveChallenge(tokens, onProgress, signal) {
|
|
60
66
|
const solutions = [];
|
|
61
67
|
for (let i = 0; i < tokens.length; i++) {
|
|
62
68
|
const token = tokens[i];
|
|
63
69
|
if (!token) {
|
|
64
70
|
throw new Error(`Invalid token at index ${i}`);
|
|
65
71
|
}
|
|
66
|
-
const solution = await solveSingleChallenge(token);
|
|
72
|
+
const solution = await solveSingleChallenge(token, signal);
|
|
67
73
|
if (!solution) {
|
|
68
74
|
throw new Error(`Failed to solve challenge ${i + 1}`);
|
|
69
75
|
}
|
package/dist/solver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solver.js","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;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,
|
|
1
|
+
{"version":3,"file":"solver.js","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"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"}
|
package/dist/widget-react.d.ts
CHANGED
|
@@ -5,12 +5,14 @@ export interface RibauntWidgetProps extends Omit<React.HTMLAttributes<RibauntWid
|
|
|
5
5
|
verifyEndpoint?: string;
|
|
6
6
|
showWarning?: boolean | string;
|
|
7
7
|
warningMessage?: string;
|
|
8
|
+
solveTimeout?: number | string;
|
|
8
9
|
disabled?: boolean | string;
|
|
9
10
|
onVerify?: (detail: {
|
|
10
11
|
solutions: any[];
|
|
11
12
|
}) => void;
|
|
12
13
|
onError?: (detail: {
|
|
13
14
|
error: string;
|
|
15
|
+
timeout?: boolean;
|
|
14
16
|
}) => void;
|
|
15
17
|
onStateChange?: (detail: {
|
|
16
18
|
state: WidgetState;
|
|
@@ -1 +1 @@
|
|
|
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,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,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,CAAA;KAAE,KAAK,IAAI,CAAC;
|
|
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,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;AAyCD;;;GAGG;AACH,eAAO,MAAM,aAAa,gGAyJzB,CAAC;AAIF,eAAe,aAAa,CAAC"}
|
package/dist/widget-react.js
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import React, { useEffect, useRef, forwardRef, useImperativeHandle, useState } from 'react';
|
|
4
|
+
function syncAttribute(element, name, value) {
|
|
5
|
+
if (value === undefined || value === false || value === 'false') {
|
|
6
|
+
element.removeAttribute(name);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
element.setAttribute(name, typeof value === 'boolean' ? 'true' : String(value));
|
|
10
|
+
}
|
|
11
|
+
function syncWidgetProps(element, { challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, disabled, }) {
|
|
12
|
+
syncAttribute(element, 'challenge-endpoint', challengeEndpoint);
|
|
13
|
+
syncAttribute(element, 'verify-endpoint', verifyEndpoint);
|
|
14
|
+
syncAttribute(element, 'show-warning', showWarning);
|
|
15
|
+
syncAttribute(element, 'warning-message', warningMessage);
|
|
16
|
+
syncAttribute(element, 'solve-timeout', solveTimeout);
|
|
17
|
+
syncAttribute(element, 'disabled', disabled);
|
|
18
|
+
}
|
|
4
19
|
/**
|
|
5
20
|
* React wrapper for the Ribaunt Web Component.
|
|
6
21
|
* Safely loads the web component dynamically, avoiding Next.js SSR issues.
|
|
7
22
|
*/
|
|
8
|
-
export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, showWarning, warningMessage, disabled, onVerify, onError, onStateChange, onReady, onLoad, onEvent, ...props }, ref) => {
|
|
23
|
+
export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, disabled, onVerify, onError, onStateChange, onReady, onLoad, onEvent, ...props }, ref) => {
|
|
9
24
|
const widgetRef = useRef(null);
|
|
10
25
|
const containerRef = useRef(null);
|
|
11
26
|
const [isLoading, setIsLoading] = useState(true);
|
|
@@ -65,17 +80,6 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
65
80
|
widget.addEventListener('verify', handleVerify);
|
|
66
81
|
widget.addEventListener('error', handleError);
|
|
67
82
|
widget.addEventListener('state-change', handleStateChange);
|
|
68
|
-
// Map camelCase props to kebab-case attributes
|
|
69
|
-
if (challengeEndpoint)
|
|
70
|
-
widget.setAttribute('challenge-endpoint', challengeEndpoint);
|
|
71
|
-
if (verifyEndpoint)
|
|
72
|
-
widget.setAttribute('verify-endpoint', verifyEndpoint);
|
|
73
|
-
if (showWarning !== undefined)
|
|
74
|
-
widget.setAttribute('show-warning', String(showWarning));
|
|
75
|
-
if (warningMessage)
|
|
76
|
-
widget.setAttribute('warning-message', warningMessage);
|
|
77
|
-
if (disabled !== undefined)
|
|
78
|
-
widget.setAttribute('disabled', String(disabled));
|
|
79
83
|
// Apply any remaining standard HTML attributes to the element
|
|
80
84
|
Object.entries(props).forEach(([key, value]) => {
|
|
81
85
|
if (value !== undefined) {
|
|
@@ -88,6 +92,14 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
94
|
});
|
|
95
|
+
syncWidgetProps(widget, {
|
|
96
|
+
challengeEndpoint,
|
|
97
|
+
verifyEndpoint,
|
|
98
|
+
showWarning,
|
|
99
|
+
warningMessage,
|
|
100
|
+
solveTimeout,
|
|
101
|
+
disabled,
|
|
102
|
+
});
|
|
91
103
|
containerRef.current.appendChild(widget);
|
|
92
104
|
widgetRef.current = widget;
|
|
93
105
|
const currentState = widget.getState?.() ?? 'initial';
|
|
@@ -109,8 +121,22 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
109
121
|
widget.removeEventListener('verify', handleVerify);
|
|
110
122
|
widget.removeEventListener('error', handleError);
|
|
111
123
|
widget.removeEventListener('state-change', handleStateChange);
|
|
124
|
+
widget.remove();
|
|
125
|
+
widgetRef.current = null;
|
|
112
126
|
};
|
|
113
127
|
}, [isLoading]);
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
if (!widgetRef.current)
|
|
130
|
+
return;
|
|
131
|
+
syncWidgetProps(widgetRef.current, {
|
|
132
|
+
challengeEndpoint,
|
|
133
|
+
verifyEndpoint,
|
|
134
|
+
showWarning,
|
|
135
|
+
warningMessage,
|
|
136
|
+
solveTimeout,
|
|
137
|
+
disabled,
|
|
138
|
+
});
|
|
139
|
+
}, [challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, disabled]);
|
|
114
140
|
return isLoading ? null : _jsx("div", { ref: containerRef });
|
|
115
141
|
});
|
|
116
142
|
RibauntWidget.displayName = 'RibauntWidget';
|
package/dist/widget-react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-react.js","sourceRoot":"","sources":["../src/widget-react.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"widget-react.js","sourceRoot":"","sources":["../src/widget-react.tsx"],"names":[],"mappings":"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"}
|
package/dist/widget.d.ts
CHANGED
|
@@ -29,10 +29,12 @@ export declare class RibauntWidget extends HTMLElement {
|
|
|
29
29
|
private shadow;
|
|
30
30
|
private state;
|
|
31
31
|
private progress;
|
|
32
|
+
private timeoutError;
|
|
32
33
|
private captchaElement;
|
|
33
34
|
private checkboxElement;
|
|
34
35
|
private messageElement;
|
|
35
36
|
private warningElement;
|
|
37
|
+
private logoElement;
|
|
36
38
|
static get observedAttributes(): string[];
|
|
37
39
|
constructor();
|
|
38
40
|
connectedCallback(): void;
|
|
@@ -41,9 +43,12 @@ export declare class RibauntWidget extends HTMLElement {
|
|
|
41
43
|
private render;
|
|
42
44
|
private attachEventListeners;
|
|
43
45
|
private removeEventListeners;
|
|
46
|
+
private handleLogoClick;
|
|
44
47
|
private handleClick;
|
|
45
48
|
private handleKeyPress;
|
|
46
49
|
private getMessage;
|
|
50
|
+
private getSolveTimeoutMs;
|
|
51
|
+
private isDisabled;
|
|
47
52
|
private setState;
|
|
48
53
|
private dispatchStateChange;
|
|
49
54
|
private setProgress;
|
|
@@ -78,6 +83,7 @@ declare global {
|
|
|
78
83
|
'verify-endpoint'?: string;
|
|
79
84
|
'show-warning'?: string | boolean;
|
|
80
85
|
'warning-message'?: string;
|
|
86
|
+
'solve-timeout'?: string;
|
|
81
87
|
disabled?: string | boolean;
|
|
82
88
|
};
|
|
83
89
|
}
|