ribaunt 0.1.6 → 0.2.1

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 (58) hide show
  1. package/README.md +39 -6
  2. package/dist/cjs/index.d.ts +52 -24
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +267 -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 +52 -24
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +264 -236
  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 +11 -0
  23. package/dist/solver.d.ts.map +1 -1
  24. package/dist/solver.js +15 -0
  25. package/dist/solver.js.map +1 -1
  26. package/dist/widget-browser.d.ts +1 -0
  27. package/dist/widget-browser.d.ts.map +1 -1
  28. package/dist/widget-browser.js +1 -0
  29. package/dist/widget-browser.js.map +1 -1
  30. package/dist/widget-react.d.ts +9 -11
  31. package/dist/widget-react.d.ts.map +1 -1
  32. package/dist/widget-react.js +44 -7
  33. package/dist/widget-react.js.map +1 -1
  34. package/dist/widget.d.ts +31 -1
  35. package/dist/widget.d.ts.map +1 -1
  36. package/dist/widget.js +220 -33
  37. package/dist/widget.js.map +1 -1
  38. package/dist/worker-client.d.ts +8 -0
  39. package/dist/worker-client.d.ts.map +1 -0
  40. package/dist/worker-client.js +78 -0
  41. package/dist/worker-client.js.map +1 -0
  42. package/package.json +23 -2
  43. package/dist/cjs/solver.d.ts +0 -16
  44. package/dist/cjs/solver.d.ts.map +0 -1
  45. package/dist/cjs/solver.js +0 -89
  46. package/dist/cjs/solver.js.map +0 -1
  47. package/dist/cjs/widget-browser.d.ts +0 -7
  48. package/dist/cjs/widget-browser.d.ts.map +0 -1
  49. package/dist/cjs/widget-browser.js +0 -12
  50. package/dist/cjs/widget-browser.js.map +0 -1
  51. package/dist/cjs/widget-react.d.ts +0 -40
  52. package/dist/cjs/widget-react.d.ts.map +0 -1
  53. package/dist/cjs/widget-react.js +0 -182
  54. package/dist/cjs/widget-react.js.map +0 -1
  55. package/dist/cjs/widget.d.ts +0 -97
  56. package/dist/cjs/widget.d.ts.map +0 -1
  57. package/dist/cjs/widget.js +0 -519
  58. package/dist/cjs/widget.js.map +0 -1
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LocalReplayStore = void 0;
6
+ exports.calibrateClient = exports.LocalReplayStore = void 0;
7
+ exports.selectWorkload = selectWorkload;
8
+ exports.calibrateNode = calibrateNode;
7
9
  exports.createChallenge = createChallenge;
8
10
  exports.solveChallenge = solveChallenge;
9
11
  exports.verifySolution = verifySolution;
@@ -14,37 +16,133 @@ class LocalReplayStore {
14
16
  this.usedTokens = new Map();
15
17
  }
16
18
  async consume(jti, expiresAt) {
19
+ return this.consumeMany([jti], expiresAt);
20
+ }
21
+ async consumeMany(jtis, expiresAt) {
17
22
  this.cleanup();
18
- if (this.usedTokens.has(jti)) {
23
+ if (new Set(jtis).size !== jtis.length || jtis.some((jti) => this.usedTokens.has(jti))) {
19
24
  return false;
20
25
  }
21
- this.usedTokens.set(jti, expiresAt);
26
+ for (const jti of jtis) {
27
+ this.usedTokens.set(jti, expiresAt);
28
+ }
22
29
  return true;
23
30
  }
24
31
  cleanup() {
25
32
  const now = Math.floor(Date.now() / 1000);
26
33
  for (const [jti, expiresAt] of this.usedTokens.entries()) {
27
- if (expiresAt < now) {
34
+ if (expiresAt < now)
28
35
  this.usedTokens.delete(jti);
29
- }
30
36
  }
31
37
  }
32
38
  }
33
39
  exports.LocalReplayStore = LocalReplayStore;
34
40
  const defaultLocalReplayStore = new LocalReplayStore();
35
41
  const DEFAULT_SOLVE_MAX_DURATION_MS = 30000;
36
- function generateChallenge(length = 8) {
37
- const buffer = crypto_1.default.randomBytes(length);
38
- return buffer.toString('base64').slice(0, length);
42
+ const DEFAULT_BOUNDS = {
43
+ minDifficulty: 3,
44
+ maxDifficulty: 6,
45
+ minAmount: 1,
46
+ maxAmount: 8,
47
+ };
48
+ function assertFiniteInteger(value, name, minimum) {
49
+ if (!Number.isFinite(value))
50
+ throw new Error(`${name} must be a finite number`);
51
+ const normalized = Math.floor(value);
52
+ if (normalized < minimum)
53
+ throw new Error(`${name} must be at least ${minimum}`);
54
+ return normalized;
55
+ }
56
+ function isValidPayload(payload) {
57
+ if (!payload || typeof payload !== 'object')
58
+ return false;
59
+ const value = payload;
60
+ return typeof value.challenge === 'string'
61
+ && value.challenge.length > 0
62
+ && typeof value.difficulty === 'number'
63
+ && Number.isInteger(value.difficulty)
64
+ && value.difficulty >= 1
65
+ && value.difficulty <= 64
66
+ && typeof value.expires === 'number'
67
+ && Number.isInteger(value.expires)
68
+ && typeof value.jti === 'string'
69
+ && value.jti.length > 0
70
+ && (value.contextHash === undefined || /^[a-f0-9]{64}$/.test(value.contextHash));
71
+ }
72
+ function assertRange(value, name, minimum, maximum) {
73
+ if (!Number.isFinite(value) || value < minimum || value > maximum) {
74
+ throw new Error(`${name} must be between ${minimum} and ${maximum}`);
75
+ }
76
+ return value;
39
77
  }
40
- function createChallengePayload(difficulty, ttlSeconds) {
78
+ function normalizeBounds(options) {
79
+ const minDifficulty = assertFiniteInteger(options.minDifficulty ?? DEFAULT_BOUNDS.minDifficulty, 'Minimum difficulty', 1);
80
+ const maxDifficulty = assertFiniteInteger(options.maxDifficulty ?? DEFAULT_BOUNDS.maxDifficulty, 'Maximum difficulty', minDifficulty);
81
+ const minAmount = assertFiniteInteger(options.minAmount ?? DEFAULT_BOUNDS.minAmount, 'Minimum amount', 1);
82
+ const maxAmount = assertFiniteInteger(options.maxAmount ?? DEFAULT_BOUNDS.maxAmount, 'Maximum amount', minAmount);
83
+ return { minDifficulty, maxDifficulty, minAmount, maxAmount };
84
+ }
85
+ function closestWorkload(targetAttempts, bounds) {
86
+ let best;
87
+ let bestDistance = Number.POSITIVE_INFINITY;
88
+ for (let difficulty = bounds.minDifficulty; difficulty <= bounds.maxDifficulty; difficulty++) {
89
+ for (let amount = bounds.minAmount; amount <= bounds.maxAmount; amount++) {
90
+ const estimatedAttempts = (16 ** difficulty) * amount;
91
+ const distance = Math.abs(Math.log(estimatedAttempts / targetAttempts));
92
+ if (distance < bestDistance) {
93
+ bestDistance = distance;
94
+ best = { difficulty, amount, estimatedAttempts };
95
+ }
96
+ }
97
+ }
98
+ return best;
99
+ }
100
+ /**
101
+ * Selects bounded proof-of-work using a server-owned risk floor and untrusted timing calibration.
102
+ */
103
+ function selectWorkload(options = {}) {
104
+ const bounds = normalizeBounds(options);
105
+ const riskScore = assertRange(options.riskScore ?? 50, 'Risk score', 0, 100);
106
+ const targetDurationMs = assertFiniteInteger(options.targetDurationMs ?? 750, 'Target duration', 1);
107
+ const minimumAttempts = 16 ** bounds.minDifficulty
108
+ * (bounds.minAmount + (bounds.maxAmount - bounds.minAmount) * (riskScore / 100));
109
+ let targetAttempts = minimumAttempts;
110
+ const calibration = options.calibration;
111
+ if (calibration) {
112
+ const iterations = assertFiniteInteger(calibration.iterations, 'Calibration iterations', 1);
113
+ const durationMs = assertFiniteInteger(calibration.durationMs, 'Calibration duration', 1);
114
+ const calibratedAttempts = (iterations / durationMs) * targetDurationMs;
115
+ targetAttempts = Math.max(minimumAttempts, calibratedAttempts);
116
+ }
117
+ const maximumAttempts = (16 ** bounds.maxDifficulty) * bounds.maxAmount;
118
+ return closestWorkload(Math.min(targetAttempts, maximumAttempts), bounds);
119
+ }
120
+ function calibrateNode(iterations = 128) {
121
+ if (!Number.isFinite(iterations) || iterations < 1) {
122
+ throw new Error('Calibration iterations must be at least 1');
123
+ }
124
+ const normalizedIterations = Math.floor(iterations);
125
+ const startedAt = performance.now();
126
+ for (let index = 0; index < normalizedIterations; index++) {
127
+ crypto_1.default.createHash('sha256').update(`ribaunt-calibration:${index}`).digest('hex');
128
+ }
41
129
  return {
42
- challenge: generateChallenge(),
43
- difficulty,
44
- expires: Math.floor(Date.now() / 1000) + ttlSeconds,
45
- jti: crypto_1.default.randomUUID(),
130
+ iterations: normalizedIterations,
131
+ durationMs: Math.max(1, Math.round(performance.now() - startedAt)),
46
132
  };
47
133
  }
134
+ exports.calibrateClient = calibrateNode;
135
+ function generateChallenge(length = 8) {
136
+ return crypto_1.default.randomBytes(length).toString('base64url').slice(0, length);
137
+ }
138
+ function hashContext(context, jti) {
139
+ return crypto_1.default
140
+ .createHmac('sha256', getSecret())
141
+ .update(jti, 'utf8')
142
+ .update('\0')
143
+ .update(context, 'utf8')
144
+ .digest('hex');
145
+ }
48
146
  let cachedSecret;
49
147
  function getSecret() {
50
148
  const secret = process.env.RIBAUNT_SECRET;
@@ -52,280 +150,212 @@ function getSecret() {
52
150
  cachedSecret = undefined;
53
151
  throw new Error('RIBAUNT_SECRET environment variable is not set!');
54
152
  }
55
- if (cachedSecret === secret) {
56
- return cachedSecret;
153
+ if (Buffer.byteLength(secret, 'utf8') < 32) {
154
+ cachedSecret = undefined;
155
+ throw new Error('RIBAUNT_SECRET must be at least 32 bytes');
57
156
  }
58
- cachedSecret = secret;
157
+ if (cachedSecret !== secret)
158
+ cachedSecret = secret;
59
159
  return cachedSecret;
60
160
  }
61
- function shouldDebugVerifyErrors(options) {
62
- if (options?.debug !== undefined) {
63
- return options.debug;
64
- }
65
- return process.env.NODE_ENV === 'development';
66
- }
67
- function logVerifyWarning(message, options, error) {
68
- const warning = {
69
- reason: classifyVerifyWarningReason(error),
70
- message,
71
- error,
161
+ function createSingleChallenge(difficulty, ttlSeconds, context) {
162
+ const jti = crypto_1.default.randomUUID();
163
+ const payload = {
164
+ challenge: generateChallenge(),
165
+ difficulty,
166
+ expires: Math.floor(Date.now() / 1000) + ttlSeconds,
167
+ jti,
72
168
  };
73
- options?.onWarning?.(warning);
74
- if (!shouldDebugVerifyErrors(options)) {
75
- return;
76
- }
77
- const details = error instanceof Error ? error.message : error;
78
- console.warn(`[ribaunt] ${message}`, details ?? '');
79
- }
80
- function emitVerifyWarning(reason, message, options) {
81
- options?.onWarning?.({ reason, message });
82
- if (!shouldDebugVerifyErrors(options)) {
83
- return;
84
- }
85
- console.warn(`[ribaunt] ${message}`, '');
169
+ if (context !== undefined)
170
+ payload.contextHash = hashContext(context, jti);
171
+ return jsonwebtoken_1.default.sign(payload, getSecret());
86
172
  }
87
- function classifyVerifyWarningReason(error) {
88
- if (error && typeof error === 'object' && 'name' in error) {
89
- const name = String(error.name);
90
- if (name === 'TokenExpiredError') {
91
- return 'expired-token';
92
- }
93
- if (name === 'JsonWebTokenError' || name === 'NotBeforeError') {
94
- return 'invalid-token';
95
- }
96
- }
97
- if (error instanceof Error && error.message.includes('replayStore')) {
98
- return 'configuration-error';
173
+ function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds = 30) {
174
+ const options = typeof difficultyOrOptions === 'object' ? difficultyOrOptions : undefined;
175
+ const selectedWorkload = options?.workload
176
+ ?? (options?.difficulty === 'auto' ? selectWorkload(options) : undefined);
177
+ const configuredDifficulty = options?.difficulty === 'auto' ? undefined : options?.difficulty;
178
+ const difficulty = assertFiniteInteger(selectedWorkload?.difficulty ?? configuredDifficulty
179
+ ?? (typeof difficultyOrOptions === 'number' ? difficultyOrOptions : 5), 'Challenge difficulty', 1);
180
+ if (difficulty > 64)
181
+ throw new Error('Challenge difficulty must be at most 64');
182
+ const normalizedAmount = assertFiniteInteger(selectedWorkload?.amount ?? options?.amount ?? (options ? 1 : amount), 'Challenge amount', 1);
183
+ const ttlValue = options?.ttlSeconds ?? (options ? 30 : ttlSeconds);
184
+ if (Number.isFinite(ttlValue) && Math.floor(ttlValue) < 1) {
185
+ throw new Error('Challenge TTL must be at least 1 second');
99
186
  }
100
- return 'invalid-token';
187
+ const normalizedTtl = assertFiniteInteger(ttlValue, 'Challenge TTL', 1);
188
+ return Array.from({ length: normalizedAmount }, () => createSingleChallenge(difficulty, normalizedTtl, options?.context));
101
189
  }
102
190
  function normalizeMaxIterations(options) {
103
- if (options?.maxIterations === undefined) {
191
+ if (options?.maxIterations === undefined || !Number.isFinite(options.maxIterations))
104
192
  return undefined;
105
- }
106
- if (!Number.isFinite(options.maxIterations)) {
107
- return undefined;
108
- }
109
193
  return Math.max(0, Math.floor(options.maxIterations));
110
194
  }
111
195
  function normalizeMaxDurationMs(options) {
112
- if (options?.maxDurationMs === undefined) {
113
- return DEFAULT_SOLVE_MAX_DURATION_MS;
114
- }
115
- if (!Number.isFinite(options.maxDurationMs)) {
196
+ if (options?.maxDurationMs === undefined || !Number.isFinite(options.maxDurationMs)) {
116
197
  return DEFAULT_SOLVE_MAX_DURATION_MS;
117
198
  }
118
199
  return Math.max(0, Math.floor(options.maxDurationMs));
119
200
  }
120
- function getReplayStore(options) {
121
- const mode = options?.replayPrevention ?? 'local';
122
- if (mode === 'disabled') {
123
- return undefined;
124
- }
125
- if (mode === 'local') {
126
- return defaultLocalReplayStore;
127
- }
128
- if (!options?.replayStore) {
129
- throw new Error('A replayStore is required when replayPrevention is set to "remote"');
130
- }
131
- return options.replayStore;
132
- }
133
- function signChallenge(payload) {
134
- return jsonwebtoken_1.default.sign(payload, getSecret());
135
- }
136
- function assertValidAmount(amount) {
137
- if (!Number.isFinite(amount)) {
138
- throw new Error('Challenge amount must be a finite number');
139
- }
140
- const normalized = Math.floor(amount);
141
- if (normalized < 1) {
142
- throw new Error('Challenge amount must be at least 1');
143
- }
144
- return normalized;
145
- }
146
- function assertValidDifficulty(difficulty) {
147
- if (!Number.isFinite(difficulty)) {
148
- throw new Error('Challenge difficulty must be a finite number');
149
- }
150
- const normalized = Math.floor(difficulty);
151
- if (normalized < 1) {
152
- throw new Error('Challenge difficulty must be at least 1');
153
- }
154
- return normalized;
155
- }
156
- function assertValidTtl(ttlSeconds) {
157
- if (!Number.isFinite(ttlSeconds)) {
158
- throw new Error('Challenge TTL must be a finite number');
159
- }
160
- const normalized = Math.floor(ttlSeconds);
161
- if (normalized < 1) {
162
- throw new Error('Challenge TTL must be at least 1 second');
163
- }
164
- return normalized;
165
- }
166
- function createSingleChallenge(difficulty, ttlSeconds) {
167
- const payload = createChallengePayload(difficulty, ttlSeconds);
168
- return signChallenge(payload);
169
- }
170
- /**
171
- * Creates one or more PoW challenges and returns them as signed JWT tokens.
172
- *
173
- * @param difficulty - Number of leading zeros required in the hash (default 5)
174
- * @param amount - Number of challenges to create (default 4)
175
- * @param ttlSeconds - Time to live for each challenge in seconds (default 30)
176
- * @returns An array of JWT challenge tokens
177
- */
178
- function createChallenge(difficulty = 5, amount = 4, ttlSeconds = 30) {
179
- const normalizedDifficulty = assertValidDifficulty(difficulty);
180
- const normalizedAmount = assertValidAmount(amount);
181
- const normalizedTtl = assertValidTtl(ttlSeconds);
182
- const challenges = Array.from({ length: normalizedAmount }, () => createSingleChallenge(normalizedDifficulty, normalizedTtl));
183
- return challenges;
184
- }
185
201
  function solveSingleChallenge(token, options) {
186
202
  try {
187
203
  const payload = jsonwebtoken_1.default.decode(token);
188
204
  if (!payload)
189
205
  return undefined;
190
- const { challenge, difficulty } = payload;
191
- const prefix = '0'.repeat(difficulty);
206
+ const prefix = '0'.repeat(payload.difficulty);
192
207
  const maxIterations = normalizeMaxIterations(options);
193
208
  const maxDurationMs = normalizeMaxDurationMs(options);
194
209
  const startedAt = Date.now();
195
- let nonce = 0;
196
- while (true) {
197
- if (maxIterations !== undefined && nonce >= maxIterations) {
210
+ for (let nonce = 0;; nonce++) {
211
+ if (maxIterations !== undefined && nonce >= maxIterations)
198
212
  return undefined;
199
- }
200
- if (Date.now() - startedAt >= maxDurationMs) {
213
+ if (Date.now() - startedAt >= maxDurationMs)
201
214
  return undefined;
202
- }
203
- const hash = crypto_1.default
204
- .createHash('sha256')
205
- .update(`${challenge}${nonce}`)
206
- .digest('hex');
207
- if (hash.startsWith(prefix)) {
215
+ const hash = crypto_1.default.createHash('sha256').update(`${payload.challenge}${nonce}`).digest('hex');
216
+ if (hash.startsWith(prefix))
208
217
  return { nonce: String(nonce), hash };
209
- }
210
- nonce++;
211
218
  }
212
219
  }
213
- catch (err) {
220
+ catch {
214
221
  return undefined;
215
222
  }
216
223
  }
217
- async function verifySingleSolution(token, nonce, options) {
218
- if (nonce === undefined || nonce === null || nonce === '') {
219
- emitVerifyWarning('invalid-solution', 'verifySolution received an empty nonce', options);
220
- return false;
221
- }
222
- try {
223
- const replayStore = getReplayStore(options);
224
- const payload = jsonwebtoken_1.default.verify(token, getSecret());
225
- const now = Math.floor(Date.now() / 1000);
226
- if (payload.expires < now) {
227
- emitVerifyWarning('expired-token', 'verifySolution rejected an expired challenge token', options);
228
- return false;
229
- }
230
- const nonceValue = typeof nonce === 'number' ? String(nonce) : nonce;
231
- const hash = crypto_1.default
232
- .createHash('sha256')
233
- .update(`${payload.challenge}${nonceValue}`)
234
- .digest('hex');
235
- const prefix = '0'.repeat(payload.difficulty);
236
- const isValid = hash.startsWith(prefix);
237
- if (!isValid) {
238
- emitVerifyWarning('invalid-solution', 'verifySolution rejected an invalid nonce', options);
239
- return false;
240
- }
241
- if (replayStore && payload.jti) {
242
- const consumed = await replayStore.consume(payload.jti, payload.expires);
243
- if (!consumed) {
244
- emitVerifyWarning('replay-detected', 'verifySolution rejected a replayed token', options);
245
- return false;
246
- }
247
- }
248
- return true;
249
- }
250
- catch (err) {
251
- logVerifyWarning('verifySolution rejected a token or nonce', options, err);
252
- return false;
253
- }
254
- }
255
224
  function solveChallenge(token, options) {
256
225
  if (Array.isArray(token)) {
257
226
  const solutions = [];
258
- for (const singleToken of token) {
259
- const solution = solveSingleChallenge(singleToken, options);
260
- if (!solution) {
227
+ for (const item of token) {
228
+ const solution = solveSingleChallenge(item, options);
229
+ if (!solution)
261
230
  return undefined;
262
- }
263
231
  solutions.push(solution);
264
232
  }
265
233
  return solutions;
266
234
  }
267
- const solution = solveSingleChallenge(token, options);
268
- return solution;
235
+ return solveSingleChallenge(token, options);
269
236
  }
270
- /**
271
- * Verifies a PoW solution returned by the client.
272
- *
273
- * @param token - The original JWT issued as the challenge (single token or array of tokens)
274
- * @param nonce - The nonce/answer submitted by the client (single nonce, array of nonces, or array of solution objects)
275
- * @returns true only if every provided solution is valid; otherwise false
276
- */
277
- function verifySolution(token, nonce, options) {
237
+ function shouldDebug(options) {
238
+ return options?.debug ?? process.env.NODE_ENV === 'development';
239
+ }
240
+ function warn(reason, message, options, error) {
241
+ const warning = error === undefined
242
+ ? { reason, message }
243
+ : { reason, message, error };
244
+ options?.onWarning?.(warning);
245
+ if (shouldDebug(options)) {
246
+ const details = error instanceof Error ? error.message : error;
247
+ console.warn(`[ribaunt] ${message}`, details ?? '');
248
+ }
249
+ return { valid: false, reason, message };
250
+ }
251
+ function classifyTokenError(error) {
252
+ if (error && typeof error === 'object' && 'name' in error) {
253
+ const name = String(error.name);
254
+ if (name === 'TokenExpiredError')
255
+ return 'expired-token';
256
+ }
257
+ if (error instanceof Error && error.message.includes('replayStore'))
258
+ return 'configuration-error';
259
+ return 'invalid-token';
260
+ }
261
+ function getReplayStore(options) {
262
+ const mode = options?.replayPrevention ?? 'local';
263
+ if (mode === 'disabled')
264
+ return undefined;
265
+ if (mode === 'local')
266
+ return defaultLocalReplayStore;
267
+ if (!options?.replayStore) {
268
+ throw new Error('A replayStore is required when replayPrevention is set to "remote"');
269
+ }
270
+ return options.replayStore;
271
+ }
272
+ function extractNonces(tokens, input) {
273
+ if (!Array.isArray(input) || input.length !== tokens.length)
274
+ return undefined;
275
+ return input.map((entry) => (typeof entry === 'object' && entry !== null && 'nonce' in entry ? entry.nonce : entry));
276
+ }
277
+ function contextMatches(payload, suppliedContext) {
278
+ if (payload.contextHash === undefined)
279
+ return suppliedContext === undefined;
280
+ if (suppliedContext === undefined)
281
+ return false;
282
+ const expected = Buffer.from(payload.contextHash, 'hex');
283
+ const actual = Buffer.from(hashContext(suppliedContext, payload.jti), 'hex');
284
+ return expected.length === actual.length && crypto_1.default.timingSafeEqual(expected, actual);
285
+ }
286
+ async function verifySolution(token, nonce, options) {
287
+ const tokens = Array.isArray(token) ? token : [token];
288
+ if (tokens.length === 0) {
289
+ return warn('invalid-solution', 'verifySolution requires at least one challenge token', options);
290
+ }
291
+ let nonces;
278
292
  if (Array.isArray(token)) {
279
- let nonces;
280
- if (Array.isArray(nonce)) {
281
- if (nonce.length !== token.length) {
282
- return Promise.resolve(false);
293
+ const extracted = extractNonces(tokens, nonce);
294
+ if (!extracted)
295
+ return warn('invalid-solution', 'verifySolution received mismatched solutions', options);
296
+ nonces = extracted;
297
+ }
298
+ else if (Array.isArray(nonce)) {
299
+ if (nonce.length === 0)
300
+ return warn('invalid-solution', 'verifySolution received an empty nonce', options);
301
+ const first = nonce[0];
302
+ if (first === undefined) {
303
+ return warn('invalid-solution', 'verifySolution received an empty nonce', options);
304
+ }
305
+ nonces = [typeof first === 'object' && first !== null && 'nonce' in first ? first.nonce : first];
306
+ }
307
+ else {
308
+ nonces = [typeof nonce === 'object' && nonce !== null && 'nonce' in nonce ? nonce.nonce : nonce];
309
+ }
310
+ const validated = [];
311
+ try {
312
+ for (let index = 0; index < tokens.length; index++) {
313
+ const currentToken = tokens[index];
314
+ const currentNonce = nonces[index];
315
+ if (!currentToken || currentNonce === undefined || currentNonce === null || currentNonce === '') {
316
+ return warn('invalid-solution', 'verifySolution received an empty nonce', options);
283
317
  }
284
- if (nonce.length > 0 && typeof nonce[0] === 'object' && 'nonce' in nonce[0]) {
285
- nonces = nonce.map(s => s.nonce);
318
+ const decoded = jsonwebtoken_1.default.verify(currentToken, getSecret());
319
+ if (!isValidPayload(decoded))
320
+ throw new Error('Invalid challenge token payload');
321
+ const payload = decoded;
322
+ if (payload.expires < Math.floor(Date.now() / 1000)) {
323
+ return warn('expired-token', 'verifySolution rejected an expired challenge token', options);
286
324
  }
287
- else {
288
- nonces = nonce;
325
+ if (!contextMatches(payload, options?.context)) {
326
+ return warn('context-mismatch', 'verifySolution rejected a mismatched challenge context', options);
289
327
  }
328
+ const hash = crypto_1.default
329
+ .createHash('sha256')
330
+ .update(`${payload.challenge}${String(currentNonce)}`)
331
+ .digest('hex');
332
+ if (!hash.startsWith('0'.repeat(payload.difficulty))) {
333
+ return warn('invalid-solution', 'verifySolution rejected an invalid nonce', options);
334
+ }
335
+ validated.push(payload);
290
336
  }
291
- else {
292
- return Promise.resolve(false);
293
- }
294
- return (async () => {
295
- for (let index = 0; index < token.length; index++) {
296
- const challengeToken = token[index];
297
- const nonceEntry = nonces[index];
298
- if (challengeToken === undefined || nonceEntry === undefined) {
299
- return false;
300
- }
301
- if (!await verifySingleSolution(challengeToken, nonceEntry, options)) {
302
- return false;
337
+ const replayStore = getReplayStore(options);
338
+ const jtis = validated.flatMap((payload) => payload.jti ? [payload.jti] : []);
339
+ if (replayStore && jtis.length > 0) {
340
+ const expiresAt = Math.max(...validated.map((payload) => payload.expires));
341
+ let consumed;
342
+ if (jtis.length > 1) {
343
+ if (!replayStore.consumeMany) {
344
+ return warn('configuration-error', 'A replayStore with consumeMany is required for atomic batch verification', options);
303
345
  }
346
+ consumed = await replayStore.consumeMany(jtis, expiresAt);
304
347
  }
305
- return true;
306
- })();
307
- }
308
- let effectiveNonce;
309
- if (Array.isArray(nonce)) {
310
- if (nonce.length === 0) {
311
- return Promise.resolve(false);
312
- }
313
- if (typeof nonce[0] === 'object' && 'nonce' in nonce[0]) {
314
- effectiveNonce = nonce[0].nonce;
315
- }
316
- else {
317
- effectiveNonce = nonce[0];
348
+ else {
349
+ consumed = await replayStore.consume(jtis[0], expiresAt);
350
+ }
351
+ if (!consumed)
352
+ return warn('replay-detected', 'verifySolution rejected a replayed token', options);
318
353
  }
354
+ return { valid: true };
319
355
  }
320
- else if (nonce && typeof nonce === 'object' && 'nonce' in nonce) {
321
- effectiveNonce = nonce.nonce;
322
- }
323
- else {
324
- effectiveNonce = nonce;
325
- }
326
- if (effectiveNonce === undefined) {
327
- return Promise.resolve(false);
356
+ catch (error) {
357
+ const reason = classifyTokenError(error);
358
+ return warn(reason, 'verifySolution rejected a token or nonce', options, error);
328
359
  }
329
- return verifySingleSolution(token, effectiveNonce, options);
330
360
  }
331
361
  //# sourceMappingURL=index.js.map
@@ -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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"}