ribaunt 0.2.2 → 0.2.4

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 (60) hide show
  1. package/README.md +113 -10
  2. package/demo/lib/ribaunt-solver.wasm +0 -0
  3. package/demo/lib/solver-worker.js +174 -0
  4. package/demo/lib/solver-worker.js.map +1 -0
  5. package/demo/lib/solver.js +135 -0
  6. package/demo/lib/solver.js.map +1 -0
  7. package/demo/lib/wasm-solver.js +296 -0
  8. package/demo/lib/wasm-solver.js.map +1 -0
  9. package/demo/lib/widget-browser.js +9 -0
  10. package/demo/lib/widget-browser.js.map +1 -0
  11. package/demo/lib/widget.js +942 -0
  12. package/demo/lib/widget.js.map +1 -0
  13. package/demo/lib/worker-client.js +128 -0
  14. package/demo/lib/worker-client.js.map +1 -0
  15. package/dist/cjs/index.d.ts +48 -3
  16. package/dist/cjs/index.d.ts.map +1 -1
  17. package/dist/cjs/index.js +196 -17
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/risk.d.ts +124 -0
  20. package/dist/cjs/risk.d.ts.map +1 -0
  21. package/dist/cjs/risk.js +213 -0
  22. package/dist/cjs/risk.js.map +1 -0
  23. package/dist/index.d.ts +48 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +193 -16
  26. package/dist/index.js.map +1 -1
  27. package/dist/ribaunt-solver.wasm +0 -0
  28. package/dist/risk.d.ts +124 -0
  29. package/dist/risk.d.ts.map +1 -0
  30. package/dist/risk.js +202 -0
  31. package/dist/risk.js.map +1 -0
  32. package/dist/solver-worker.d.ts.map +1 -1
  33. package/dist/solver-worker.js +166 -7
  34. package/dist/solver-worker.js.map +1 -1
  35. package/dist/solver.d.ts +1 -0
  36. package/dist/solver.d.ts.map +1 -1
  37. package/dist/solver.js +38 -3
  38. package/dist/solver.js.map +1 -1
  39. package/dist/wasm-solver.d.ts +29 -0
  40. package/dist/wasm-solver.d.ts.map +1 -0
  41. package/dist/wasm-solver.js +296 -0
  42. package/dist/wasm-solver.js.map +1 -0
  43. package/dist/widget-browser.d.ts +3 -2
  44. package/dist/widget-browser.d.ts.map +1 -1
  45. package/dist/widget-browser.js +1 -1
  46. package/dist/widget-browser.js.map +1 -1
  47. package/dist/widget-react.d.ts +4 -1
  48. package/dist/widget-react.d.ts.map +1 -1
  49. package/dist/widget-react.js +102 -14
  50. package/dist/widget-react.js.map +1 -1
  51. package/dist/widget.d.ts +42 -14
  52. package/dist/widget.d.ts.map +1 -1
  53. package/dist/widget.js +254 -12
  54. package/dist/widget.js.map +1 -1
  55. package/dist/worker-client.d.ts +7 -1
  56. package/dist/worker-client.d.ts.map +1 -1
  57. package/dist/worker-client.js +69 -19
  58. package/dist/worker-client.js.map +1 -1
  59. package/package.json +22 -9
  60. package/context7.json +0 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { solveChallenge, } from './solver.js';
2
+ export class WorkerUnavailableError extends Error {
3
+ constructor(message = 'Web Worker solving is unavailable') {
4
+ super(message);
5
+ this.code = 'worker-unavailable';
6
+ this.name = 'WorkerUnavailableError';
7
+ }
8
+ }
9
+ function abortError() {
10
+ return new DOMException('Challenge solving aborted', 'AbortError');
11
+ }
12
+ const CANCEL_GRACE_MS = 250;
13
+ function solveInWorker(tokens, onProgress, signal, wasmMode = 'preferred', onBackend) {
14
+ return new Promise((resolve, reject) => {
15
+ if (typeof Worker === 'undefined') {
16
+ reject(new WorkerUnavailableError());
17
+ return;
18
+ }
19
+ let worker;
20
+ try {
21
+ worker = new Worker(new URL('./solver-worker.js', import.meta.url), { type: 'module' });
22
+ }
23
+ catch (error) {
24
+ reject(new WorkerUnavailableError(error instanceof Error ? error.message : String(error)));
25
+ return;
26
+ }
27
+ const id = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;
28
+ let cancelTimer;
29
+ let cancelled = false;
30
+ const release = () => {
31
+ if (cancelTimer !== undefined)
32
+ clearTimeout(cancelTimer);
33
+ cancelTimer = undefined;
34
+ signal?.removeEventListener('abort', handleAbort);
35
+ };
36
+ const finish = () => {
37
+ release();
38
+ worker.terminate();
39
+ };
40
+ const handleAbort = () => {
41
+ if (cancelled)
42
+ return;
43
+ cancelled = true;
44
+ worker.postMessage({ type: 'cancel', id });
45
+ cancelTimer = setTimeout(() => {
46
+ finish();
47
+ reject(abortError());
48
+ }, CANCEL_GRACE_MS);
49
+ };
50
+ worker.addEventListener('message', (event) => {
51
+ const message = event.data;
52
+ if (!message || message.id !== id)
53
+ return;
54
+ if (message.type === 'cancelled') {
55
+ release();
56
+ reject(abortError());
57
+ return;
58
+ }
59
+ if (message.type === 'backend' && message.backend) {
60
+ if (cancelled)
61
+ return;
62
+ try {
63
+ onBackend?.(message.backend);
64
+ }
65
+ catch {
66
+ // telemetry must never break solving
67
+ }
68
+ return;
69
+ }
70
+ if (cancelled)
71
+ return;
72
+ if (message.type === 'progress' && message.progress !== undefined) {
73
+ onProgress?.(message.progress);
74
+ }
75
+ else if (message.type === 'result' && message.solutions) {
76
+ finish();
77
+ resolve(message.solutions);
78
+ }
79
+ else if (message.type === 'error') {
80
+ finish();
81
+ reject(new Error(message.error ?? 'Worker solving failed'));
82
+ }
83
+ });
84
+ worker.addEventListener('error', () => {
85
+ finish();
86
+ reject(new WorkerUnavailableError('The solver worker failed to load'));
87
+ }, { once: true });
88
+ if (signal?.aborted) {
89
+ finish();
90
+ reject(abortError());
91
+ return;
92
+ }
93
+ signal?.addEventListener('abort', handleAbort, { once: true });
94
+ worker.postMessage({ type: 'solve', id, tokens, wasmMode });
95
+ });
96
+ }
97
+ export async function solveChallengeWithWorker(tokens, onProgress, signal, mode = 'preferred', wasmMode = 'preferred', onBackend) {
98
+ // Backwards compat: if wasmMode is an options object, normalize
99
+ // Also support legacy 4-arg calls where 5th arg is wasmMode string
100
+ let normalizedWasmMode = wasmMode;
101
+ let normalizedOnBackend = onBackend;
102
+ // If 5th arg looks like object with wasmMode property, handle (future proof)
103
+ if (typeof wasmMode === 'object' && wasmMode !== null && 'wasmMode' in wasmMode) {
104
+ const opts = wasmMode;
105
+ normalizedWasmMode = opts.wasmMode ?? 'preferred';
106
+ normalizedOnBackend = opts.onBackend;
107
+ }
108
+ if (normalizedWasmMode !== 'preferred' && normalizedWasmMode !== 'disabled') {
109
+ normalizedWasmMode = 'preferred';
110
+ }
111
+ if (mode === 'disabled') {
112
+ // Even when worker disabled, we still solve on main thread via JS (no wasm on main thread for v1)
113
+ // Telemetry for main thread fallback is not needed
114
+ return solveChallenge(tokens, onProgress, signal);
115
+ }
116
+ try {
117
+ return await solveInWorker(tokens, onProgress, signal, normalizedWasmMode, normalizedOnBackend);
118
+ }
119
+ catch (error) {
120
+ if (mode === 'preferred'
121
+ && error instanceof WorkerUnavailableError
122
+ && !signal?.aborted) {
123
+ return solveChallenge(tokens, onProgress, signal);
124
+ }
125
+ throw error;
126
+ }
127
+ }
128
+ //# sourceMappingURL=worker-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-client.js","sourceRoot":"","sources":["../src/worker-client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ import { DEFAULT_RISK_THRESHOLDS } from './risk.js';
2
+ import type { AssessOptions, RiskAssessment } from './risk.js';
3
+ export type { AssessOptions, AssessWorkloadOptions, RiskAssessment, RiskScorer, RiskSignals, RiskThresholds } from './risk.js';
4
+ export { DEFAULT_RISK_THRESHOLDS };
1
5
  export type ChallengeToken = string;
2
6
  export interface ChallengeSolution {
3
7
  nonce: string;
@@ -36,11 +40,20 @@ export interface ChallengeOptions {
36
40
  maxDifficulty?: number;
37
41
  minAmount?: number;
38
42
  maxAmount?: number;
43
+ rateLimiter?: RateLimiter;
44
+ onEvent?: (event: RibauntEvent) => void;
39
45
  }
40
46
  export interface ReplayStore {
41
47
  consume(jti: string, expiresAt: number): Promise<boolean>;
42
48
  consumeMany?(jtis: string[], expiresAt: number): Promise<boolean>;
43
49
  }
50
+ export interface RateLimiter {
51
+ check(key?: string): Promise<boolean>;
52
+ }
53
+ export declare class RateLimitedError extends Error {
54
+ readonly code = "rate-limited";
55
+ constructor(message?: string);
56
+ }
44
57
  export type ReplayPreventionMode = 'disabled' | 'local' | 'remote';
45
58
  export interface VerifySolutionOptions {
46
59
  replayPrevention?: ReplayPreventionMode;
@@ -48,14 +61,27 @@ export interface VerifySolutionOptions {
48
61
  context?: string;
49
62
  debug?: boolean;
50
63
  onWarning?: (warning: VerifyWarning) => void;
64
+ rateLimiter?: RateLimiter;
65
+ onEvent?: (event: RibauntEvent) => void;
51
66
  }
52
- export type VerifyFailureReason = 'invalid-token' | 'expired-token' | 'invalid-solution' | 'context-mismatch' | 'replay-detected' | 'configuration-error';
67
+ export type VerifyFailureReason = 'invalid-token' | 'expired-token' | 'invalid-solution' | 'context-mismatch' | 'replay-detected' | 'replay-store-unavailable' | 'configuration-error';
53
68
  export type VerifyWarningReason = VerifyFailureReason;
54
69
  export interface VerifyWarning {
55
70
  reason: VerifyWarningReason;
56
71
  message: string;
57
72
  error?: unknown;
58
73
  }
74
+ export type RibauntEvent = {
75
+ type: 'challenge-issued';
76
+ difficulty: number;
77
+ amount: number;
78
+ } | {
79
+ type: 'verify-success';
80
+ } | {
81
+ type: 'verify-failure';
82
+ reason: VerifyFailureReason;
83
+ message: string;
84
+ };
59
85
  export type VerifySolutionResult = {
60
86
  valid: true;
61
87
  } | {
@@ -77,10 +103,29 @@ export declare class LocalReplayStore implements ReplayStore {
77
103
  * Selects bounded proof-of-work using a server-owned risk floor and untrusted timing calibration.
78
104
  */
79
105
  export declare function selectWorkload(options?: AdaptiveWorkloadOptions): Workload;
106
+ /**
107
+ * Programmable risk-assessment subsystem.
108
+ *
109
+ * All signals are caller-supplied and treated as untrusted inputs.
110
+ * The default scorer is a transparent heuristic (not an ML model).
111
+ * The returned `risk` is a bounded heuristic score, not a probability
112
+ * or identity confidence. The caller is responsible for obtaining
113
+ * trustworthy inputs.
114
+ *
115
+ * Flow:
116
+ * validate AssessOptions
117
+ * -> resolve scorer (custom or default)
118
+ * -> await scorer.score(signals)
119
+ * -> validate risk 0..100
120
+ * -> resolve thresholds (custom or DEFAULT_RISK_THRESHOLDS)
121
+ * -> apply policy (allow / challenge / block)
122
+ * -> if challenge, delegate to existing selectWorkload() with riskScore
123
+ */
124
+ export declare function assess(options: AssessOptions): Promise<RiskAssessment>;
80
125
  export declare function calibrateNode(iterations?: number): ClientCalibration;
81
126
  export declare const calibrateClient: typeof calibrateNode;
82
- export declare function createChallenge(difficulty?: number, amount?: number, ttlSeconds?: number): ChallengeToken[];
83
- export declare function createChallenge(options: ChallengeOptions): ChallengeToken[];
127
+ export declare function createChallenge(difficulty?: number, amount?: number, ttlSeconds?: number): Promise<ChallengeToken[]>;
128
+ export declare function createChallenge(options: ChallengeOptions): Promise<ChallengeToken[]>;
84
129
  export declare function solveChallenge(token: ChallengeToken, options?: SolveChallengeOptions): ChallengeSolution | undefined;
85
130
  export declare function solveChallenge(token: ChallengeToken[], options?: SolveChallengeOptions): ChallengeSolution[] | undefined;
86
131
  export declare function verifySolution(token: ChallengeToken | ChallengeToken[], nonce: number | string | Array<number | string> | ChallengeSolution | ChallengeSolution[], options?: VerifySolutionOptions): Promise<VerifySolutionResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -3,14 +3,25 @@ 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.calibrateClient = exports.LocalReplayStore = void 0;
6
+ exports.calibrateClient = exports.LocalReplayStore = exports.RateLimitedError = exports.DEFAULT_RISK_THRESHOLDS = void 0;
7
7
  exports.selectWorkload = selectWorkload;
8
+ exports.assess = assess;
8
9
  exports.calibrateNode = calibrateNode;
9
10
  exports.createChallenge = createChallenge;
10
11
  exports.solveChallenge = solveChallenge;
11
12
  exports.verifySolution = verifySolution;
12
13
  const crypto_1 = __importDefault(require("crypto"));
13
14
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
15
+ const risk_js_1 = require("./risk.js");
16
+ Object.defineProperty(exports, "DEFAULT_RISK_THRESHOLDS", { enumerable: true, get: function () { return risk_js_1.DEFAULT_RISK_THRESHOLDS; } });
17
+ class RateLimitedError extends Error {
18
+ constructor(message = 'Rate limit exceeded') {
19
+ super(message);
20
+ this.code = 'rate-limited';
21
+ this.name = 'RateLimitedError';
22
+ }
23
+ }
24
+ exports.RateLimitedError = RateLimitedError;
14
25
  class LocalReplayStore {
15
26
  constructor() {
16
27
  this.usedTokens = new Map();
@@ -45,6 +56,9 @@ const DEFAULT_BOUNDS = {
45
56
  minAmount: 1,
46
57
  maxAmount: 8,
47
58
  };
59
+ const MAX_WORKLOAD_DIFFICULTY = 64;
60
+ const MAX_WORKLOAD_AMOUNT = 64;
61
+ const MAX_WORKLOAD_CANDIDATES = 10000;
48
62
  function assertFiniteInteger(value, name, minimum) {
49
63
  if (!Number.isFinite(value))
50
64
  throw new Error(`${name} must be a finite number`);
@@ -77,9 +91,25 @@ function assertRange(value, name, minimum, maximum) {
77
91
  }
78
92
  function normalizeBounds(options) {
79
93
  const minDifficulty = assertFiniteInteger(options.minDifficulty ?? DEFAULT_BOUNDS.minDifficulty, 'Minimum difficulty', 1);
94
+ if (minDifficulty > MAX_WORKLOAD_DIFFICULTY) {
95
+ throw new Error(`Minimum difficulty must be at most ${MAX_WORKLOAD_DIFFICULTY}`);
96
+ }
80
97
  const maxDifficulty = assertFiniteInteger(options.maxDifficulty ?? DEFAULT_BOUNDS.maxDifficulty, 'Maximum difficulty', minDifficulty);
98
+ if (maxDifficulty > MAX_WORKLOAD_DIFFICULTY) {
99
+ throw new Error(`Maximum difficulty must be at most ${MAX_WORKLOAD_DIFFICULTY}`);
100
+ }
81
101
  const minAmount = assertFiniteInteger(options.minAmount ?? DEFAULT_BOUNDS.minAmount, 'Minimum amount', 1);
102
+ if (minAmount > MAX_WORKLOAD_AMOUNT) {
103
+ throw new Error(`Minimum amount must be at most ${MAX_WORKLOAD_AMOUNT}`);
104
+ }
82
105
  const maxAmount = assertFiniteInteger(options.maxAmount ?? DEFAULT_BOUNDS.maxAmount, 'Maximum amount', minAmount);
106
+ if (maxAmount > MAX_WORKLOAD_AMOUNT) {
107
+ throw new Error(`Maximum amount must be at most ${MAX_WORKLOAD_AMOUNT}`);
108
+ }
109
+ const candidateCount = (maxDifficulty - minDifficulty + 1) * (maxAmount - minAmount + 1);
110
+ if (candidateCount > MAX_WORKLOAD_CANDIDATES) {
111
+ throw new Error(`Workload bounds too large: candidate count ${candidateCount} exceeds ${MAX_WORKLOAD_CANDIDATES}`);
112
+ }
83
113
  return { minDifficulty, maxDifficulty, minAmount, maxAmount };
84
114
  }
85
115
  function closestWorkload(targetAttempts, bounds) {
@@ -117,6 +147,131 @@ function selectWorkload(options = {}) {
117
147
  const maximumAttempts = (16 ** bounds.maxDifficulty) * bounds.maxAmount;
118
148
  return closestWorkload(Math.min(targetAttempts, maximumAttempts), bounds);
119
149
  }
150
+ function validateAssessWorkloadOptions(workload) {
151
+ // Reuse same validation messages as normalizeBounds / selectWorkload for regression safety
152
+ if (workload.minDifficulty !== undefined) {
153
+ assertFiniteInteger(workload.minDifficulty, 'Minimum difficulty', 1);
154
+ }
155
+ if (workload.maxDifficulty !== undefined) {
156
+ // Need to ensure we validate max >= min (using resolved min)
157
+ const min = workload.minDifficulty !== undefined ? Math.floor(workload.minDifficulty) : DEFAULT_BOUNDS.minDifficulty;
158
+ assertFiniteInteger(workload.maxDifficulty, 'Maximum difficulty', min);
159
+ }
160
+ else if (workload.minDifficulty !== undefined) {
161
+ // If only minDifficulty provided, still need to ensure default max >= min
162
+ if (DEFAULT_BOUNDS.maxDifficulty < Math.floor(workload.minDifficulty)) {
163
+ throw new Error(`Maximum difficulty must be at least ${Math.floor(workload.minDifficulty)}`);
164
+ }
165
+ }
166
+ if (workload.minAmount !== undefined) {
167
+ assertFiniteInteger(workload.minAmount, 'Minimum amount', 1);
168
+ }
169
+ if (workload.maxAmount !== undefined) {
170
+ const minAmt = workload.minAmount !== undefined ? Math.floor(workload.minAmount) : DEFAULT_BOUNDS.minAmount;
171
+ assertFiniteInteger(workload.maxAmount, 'Maximum amount', minAmt);
172
+ }
173
+ else if (workload.minAmount !== undefined) {
174
+ if (DEFAULT_BOUNDS.maxAmount < Math.floor(workload.minAmount)) {
175
+ throw new Error(`Maximum amount must be at least ${Math.floor(workload.minAmount)}`);
176
+ }
177
+ }
178
+ // Cross-check when both are provided, normalizeBounds already checks but we also check explicit ordering
179
+ // Also need to handle case where both provided but max < min — already caught above with min as floor.
180
+ // For completeness, if both undefined, no check needed.
181
+ // Validate targetDurationMs
182
+ if (workload.targetDurationMs !== undefined) {
183
+ assertFiniteInteger(workload.targetDurationMs, 'Target duration', 1);
184
+ }
185
+ // Validate calibration
186
+ if (workload.calibration !== undefined) {
187
+ if (!workload.calibration || typeof workload.calibration !== 'object' || Array.isArray(workload.calibration)) {
188
+ throw new Error('Calibration must be an object');
189
+ }
190
+ const cal = workload.calibration;
191
+ assertFiniteInteger(cal.iterations, 'Calibration iterations', 1);
192
+ assertFiniteInteger(cal.durationMs, 'Calibration duration', 1);
193
+ }
194
+ // If any of min/max are provided, also run through normalizeBounds to ensure combined validation matches selectWorkload exactly
195
+ // This catches edge cases like non-finite values already handled, but ensures parity
196
+ if (workload.minDifficulty !== undefined ||
197
+ workload.maxDifficulty !== undefined ||
198
+ workload.minAmount !== undefined ||
199
+ workload.maxAmount !== undefined) {
200
+ normalizeBounds(workload);
201
+ }
202
+ }
203
+ /**
204
+ * Programmable risk-assessment subsystem.
205
+ *
206
+ * All signals are caller-supplied and treated as untrusted inputs.
207
+ * The default scorer is a transparent heuristic (not an ML model).
208
+ * The returned `risk` is a bounded heuristic score, not a probability
209
+ * or identity confidence. The caller is responsible for obtaining
210
+ * trustworthy inputs.
211
+ *
212
+ * Flow:
213
+ * validate AssessOptions
214
+ * -> resolve scorer (custom or default)
215
+ * -> await scorer.score(signals)
216
+ * -> validate risk 0..100
217
+ * -> resolve thresholds (custom or DEFAULT_RISK_THRESHOLDS)
218
+ * -> apply policy (allow / challenge / block)
219
+ * -> if challenge, delegate to existing selectWorkload() with riskScore
220
+ */
221
+ async function assess(options) {
222
+ if (!options || typeof options !== 'object' || Array.isArray(options)) {
223
+ throw new Error('AssessOptions must be an object');
224
+ }
225
+ const { signals, scorer, thresholds, workload } = options;
226
+ if (!signals || typeof signals !== 'object' || Array.isArray(signals)) {
227
+ throw new Error('signals must be an object');
228
+ }
229
+ if (scorer !== undefined) {
230
+ if (!scorer || typeof scorer !== 'object' || typeof scorer.score !== 'function') {
231
+ throw new Error('scorer must be an object with a score function');
232
+ }
233
+ }
234
+ if (thresholds !== undefined) {
235
+ (0, risk_js_1.validateRiskThresholds)(thresholds);
236
+ }
237
+ // Use a private immutable default via copy so consumer mutation of the exported
238
+ // DEFAULT_RISK_THRESHOLDS cannot change library behavior
239
+ const resolvedThresholds = thresholds
240
+ ? { challenge: thresholds.challenge, block: thresholds.block }
241
+ : { challenge: risk_js_1.DEFAULT_RISK_THRESHOLDS.challenge, block: risk_js_1.DEFAULT_RISK_THRESHOLDS.block };
242
+ // Validate resolved copy as well (defensive)
243
+ (0, risk_js_1.validateRiskThresholds)(resolvedThresholds);
244
+ if (workload !== undefined) {
245
+ if (!workload || typeof workload !== 'object' || Array.isArray(workload)) {
246
+ throw new Error('workload must be an object');
247
+ }
248
+ validateAssessWorkloadOptions(workload);
249
+ }
250
+ const activeScorer = scorer ?? risk_js_1.defaultScorer;
251
+ const rawRisk = await activeScorer.score(signals);
252
+ const risk = (0, risk_js_1.validateScorerOutput)(rawRisk);
253
+ const { challenge, block } = resolvedThresholds;
254
+ let action;
255
+ if (risk < challenge)
256
+ action = 'allow';
257
+ else if (risk < block)
258
+ action = 'challenge';
259
+ else
260
+ action = 'block';
261
+ if (action === 'challenge') {
262
+ // Reuse existing adaptive workload selection. Do not duplicate logic.
263
+ // Ensure assessed risk overrides any riskScore that might be present in workload (defensive copy).
264
+ const workloadOptions = {
265
+ ...workload,
266
+ riskScore: risk,
267
+ };
268
+ // Ensure workload's riskScore is overridden even if spread included one
269
+ workloadOptions.riskScore = risk;
270
+ const resultWorkload = selectWorkload(workloadOptions);
271
+ return { risk, action, workload: resultWorkload };
272
+ }
273
+ return { risk, action };
274
+ }
120
275
  function calibrateNode(iterations = 128) {
121
276
  if (!Number.isFinite(iterations) || iterations < 1) {
122
277
  throw new Error('Calibration iterations must be at least 1');
@@ -143,20 +298,15 @@ function hashContext(context, jti) {
143
298
  .update(context, 'utf8')
144
299
  .digest('hex');
145
300
  }
146
- let cachedSecret;
147
301
  function getSecret() {
148
302
  const secret = process.env.RIBAUNT_SECRET;
149
303
  if (!secret) {
150
- cachedSecret = undefined;
151
304
  throw new Error('RIBAUNT_SECRET environment variable is not set!');
152
305
  }
153
306
  if (Buffer.byteLength(secret, 'utf8') < 32) {
154
- cachedSecret = undefined;
155
307
  throw new Error('RIBAUNT_SECRET must be at least 32 bytes');
156
308
  }
157
- if (cachedSecret !== secret)
158
- cachedSecret = secret;
159
- return cachedSecret;
309
+ return secret;
160
310
  }
161
311
  function createSingleChallenge(difficulty, ttlSeconds, context) {
162
312
  const jti = crypto_1.default.randomUUID();
@@ -168,9 +318,19 @@ function createSingleChallenge(difficulty, ttlSeconds, context) {
168
318
  };
169
319
  if (context !== undefined)
170
320
  payload.contextHash = hashContext(context, jti);
171
- return jsonwebtoken_1.default.sign(payload, getSecret());
321
+ return jsonwebtoken_1.default.sign(payload, getSecret(), { algorithm: 'HS256' });
172
322
  }
173
- function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds = 30) {
323
+ function emitEvent(options, event) {
324
+ if (!options?.onEvent)
325
+ return;
326
+ try {
327
+ options.onEvent(event);
328
+ }
329
+ catch {
330
+ // telemetry must never break challenge issuance or verification
331
+ }
332
+ }
333
+ async function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds = 30) {
174
334
  const options = typeof difficultyOrOptions === 'object' ? difficultyOrOptions : undefined;
175
335
  const selectedWorkload = options?.workload
176
336
  ?? (options?.difficulty === 'auto' ? selectWorkload(options) : undefined);
@@ -185,7 +345,14 @@ function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds = 30) {
185
345
  throw new Error('Challenge TTL must be at least 1 second');
186
346
  }
187
347
  const normalizedTtl = assertFiniteInteger(ttlValue, 'Challenge TTL', 1);
188
- return Array.from({ length: normalizedAmount }, () => createSingleChallenge(difficulty, normalizedTtl, options?.context));
348
+ if (options?.rateLimiter) {
349
+ const allowed = await options.rateLimiter.check(options?.context);
350
+ if (!allowed)
351
+ throw new RateLimitedError('Challenge issuance rate limited');
352
+ }
353
+ const challenges = Array.from({ length: normalizedAmount }, () => createSingleChallenge(difficulty, normalizedTtl, options?.context));
354
+ emitEvent(options, { type: 'challenge-issued', difficulty, amount: normalizedAmount });
355
+ return challenges;
189
356
  }
190
357
  function normalizeMaxIterations(options) {
191
358
  if (options?.maxIterations === undefined || !Number.isFinite(options.maxIterations))
@@ -242,6 +409,7 @@ function warn(reason, message, options, error) {
242
409
  ? { reason, message }
243
410
  : { reason, message, error };
244
411
  options?.onWarning?.(warning);
412
+ emitEvent(options, { type: 'verify-failure', reason, message });
245
413
  if (shouldDebug(options)) {
246
414
  const details = error instanceof Error ? error.message : error;
247
415
  console.warn(`[ribaunt] ${message}`, details ?? '');
@@ -284,6 +452,11 @@ function contextMatches(payload, suppliedContext) {
284
452
  return expected.length === actual.length && crypto_1.default.timingSafeEqual(expected, actual);
285
453
  }
286
454
  async function verifySolution(token, nonce, options) {
455
+ if (options?.rateLimiter) {
456
+ const allowed = await options.rateLimiter.check(options?.context);
457
+ if (!allowed)
458
+ throw new RateLimitedError('Challenge verification rate limited');
459
+ }
287
460
  const tokens = Array.isArray(token) ? token : [token];
288
461
  if (tokens.length === 0) {
289
462
  return warn('invalid-solution', 'verifySolution requires at least one challenge token', options);
@@ -315,7 +488,7 @@ async function verifySolution(token, nonce, options) {
315
488
  if (!currentToken || currentNonce === undefined || currentNonce === null || currentNonce === '') {
316
489
  return warn('invalid-solution', 'verifySolution received an empty nonce', options);
317
490
  }
318
- const decoded = jsonwebtoken_1.default.verify(currentToken, getSecret());
491
+ const decoded = jsonwebtoken_1.default.verify(currentToken, getSecret(), { algorithms: ['HS256'] });
319
492
  if (!isValidPayload(decoded))
320
493
  throw new Error('Invalid challenge token payload');
321
494
  const payload = decoded;
@@ -339,18 +512,24 @@ async function verifySolution(token, nonce, options) {
339
512
  if (replayStore && jtis.length > 0) {
340
513
  const expiresAt = Math.max(...validated.map((payload) => payload.expires));
341
514
  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);
515
+ try {
516
+ if (jtis.length > 1) {
517
+ if (!replayStore.consumeMany) {
518
+ return warn('configuration-error', 'A replayStore with consumeMany is required for atomic batch verification', options);
519
+ }
520
+ consumed = await replayStore.consumeMany(jtis, expiresAt);
521
+ }
522
+ else {
523
+ consumed = await replayStore.consume(jtis[0], expiresAt);
345
524
  }
346
- consumed = await replayStore.consumeMany(jtis, expiresAt);
347
525
  }
348
- else {
349
- consumed = await replayStore.consume(jtis[0], expiresAt);
526
+ catch (error) {
527
+ return warn('replay-store-unavailable', 'verifySolution failed because the replay store could not be reached', options, error);
350
528
  }
351
529
  if (!consumed)
352
530
  return warn('replay-detected', 'verifySolution rejected a replayed token', options);
353
531
  }
532
+ emitEvent(options, { type: 'verify-success' });
354
533
  return { valid: true };
355
534
  }
356
535
  catch (error) {