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
package/dist/index.js CHANGED
@@ -1,5 +1,14 @@
1
1
  import crypto from 'crypto';
2
2
  import jwt from 'jsonwebtoken';
3
+ import { DEFAULT_RISK_THRESHOLDS, defaultScorer, validateRiskThresholds, validateScorerOutput, } from './risk.js';
4
+ export { DEFAULT_RISK_THRESHOLDS };
5
+ export class RateLimitedError extends Error {
6
+ constructor(message = 'Rate limit exceeded') {
7
+ super(message);
8
+ this.code = 'rate-limited';
9
+ this.name = 'RateLimitedError';
10
+ }
11
+ }
3
12
  export class LocalReplayStore {
4
13
  constructor() {
5
14
  this.usedTokens = new Map();
@@ -33,6 +42,9 @@ const DEFAULT_BOUNDS = {
33
42
  minAmount: 1,
34
43
  maxAmount: 8,
35
44
  };
45
+ const MAX_WORKLOAD_DIFFICULTY = 64;
46
+ const MAX_WORKLOAD_AMOUNT = 64;
47
+ const MAX_WORKLOAD_CANDIDATES = 10000;
36
48
  function assertFiniteInteger(value, name, minimum) {
37
49
  if (!Number.isFinite(value))
38
50
  throw new Error(`${name} must be a finite number`);
@@ -65,9 +77,25 @@ function assertRange(value, name, minimum, maximum) {
65
77
  }
66
78
  function normalizeBounds(options) {
67
79
  const minDifficulty = assertFiniteInteger(options.minDifficulty ?? DEFAULT_BOUNDS.minDifficulty, 'Minimum difficulty', 1);
80
+ if (minDifficulty > MAX_WORKLOAD_DIFFICULTY) {
81
+ throw new Error(`Minimum difficulty must be at most ${MAX_WORKLOAD_DIFFICULTY}`);
82
+ }
68
83
  const maxDifficulty = assertFiniteInteger(options.maxDifficulty ?? DEFAULT_BOUNDS.maxDifficulty, 'Maximum difficulty', minDifficulty);
84
+ if (maxDifficulty > MAX_WORKLOAD_DIFFICULTY) {
85
+ throw new Error(`Maximum difficulty must be at most ${MAX_WORKLOAD_DIFFICULTY}`);
86
+ }
69
87
  const minAmount = assertFiniteInteger(options.minAmount ?? DEFAULT_BOUNDS.minAmount, 'Minimum amount', 1);
88
+ if (minAmount > MAX_WORKLOAD_AMOUNT) {
89
+ throw new Error(`Minimum amount must be at most ${MAX_WORKLOAD_AMOUNT}`);
90
+ }
70
91
  const maxAmount = assertFiniteInteger(options.maxAmount ?? DEFAULT_BOUNDS.maxAmount, 'Maximum amount', minAmount);
92
+ if (maxAmount > MAX_WORKLOAD_AMOUNT) {
93
+ throw new Error(`Maximum amount must be at most ${MAX_WORKLOAD_AMOUNT}`);
94
+ }
95
+ const candidateCount = (maxDifficulty - minDifficulty + 1) * (maxAmount - minAmount + 1);
96
+ if (candidateCount > MAX_WORKLOAD_CANDIDATES) {
97
+ throw new Error(`Workload bounds too large: candidate count ${candidateCount} exceeds ${MAX_WORKLOAD_CANDIDATES}`);
98
+ }
71
99
  return { minDifficulty, maxDifficulty, minAmount, maxAmount };
72
100
  }
73
101
  function closestWorkload(targetAttempts, bounds) {
@@ -105,6 +133,131 @@ export function selectWorkload(options = {}) {
105
133
  const maximumAttempts = (16 ** bounds.maxDifficulty) * bounds.maxAmount;
106
134
  return closestWorkload(Math.min(targetAttempts, maximumAttempts), bounds);
107
135
  }
136
+ function validateAssessWorkloadOptions(workload) {
137
+ // Reuse same validation messages as normalizeBounds / selectWorkload for regression safety
138
+ if (workload.minDifficulty !== undefined) {
139
+ assertFiniteInteger(workload.minDifficulty, 'Minimum difficulty', 1);
140
+ }
141
+ if (workload.maxDifficulty !== undefined) {
142
+ // Need to ensure we validate max >= min (using resolved min)
143
+ const min = workload.minDifficulty !== undefined ? Math.floor(workload.minDifficulty) : DEFAULT_BOUNDS.minDifficulty;
144
+ assertFiniteInteger(workload.maxDifficulty, 'Maximum difficulty', min);
145
+ }
146
+ else if (workload.minDifficulty !== undefined) {
147
+ // If only minDifficulty provided, still need to ensure default max >= min
148
+ if (DEFAULT_BOUNDS.maxDifficulty < Math.floor(workload.minDifficulty)) {
149
+ throw new Error(`Maximum difficulty must be at least ${Math.floor(workload.minDifficulty)}`);
150
+ }
151
+ }
152
+ if (workload.minAmount !== undefined) {
153
+ assertFiniteInteger(workload.minAmount, 'Minimum amount', 1);
154
+ }
155
+ if (workload.maxAmount !== undefined) {
156
+ const minAmt = workload.minAmount !== undefined ? Math.floor(workload.minAmount) : DEFAULT_BOUNDS.minAmount;
157
+ assertFiniteInteger(workload.maxAmount, 'Maximum amount', minAmt);
158
+ }
159
+ else if (workload.minAmount !== undefined) {
160
+ if (DEFAULT_BOUNDS.maxAmount < Math.floor(workload.minAmount)) {
161
+ throw new Error(`Maximum amount must be at least ${Math.floor(workload.minAmount)}`);
162
+ }
163
+ }
164
+ // Cross-check when both are provided, normalizeBounds already checks but we also check explicit ordering
165
+ // Also need to handle case where both provided but max < min — already caught above with min as floor.
166
+ // For completeness, if both undefined, no check needed.
167
+ // Validate targetDurationMs
168
+ if (workload.targetDurationMs !== undefined) {
169
+ assertFiniteInteger(workload.targetDurationMs, 'Target duration', 1);
170
+ }
171
+ // Validate calibration
172
+ if (workload.calibration !== undefined) {
173
+ if (!workload.calibration || typeof workload.calibration !== 'object' || Array.isArray(workload.calibration)) {
174
+ throw new Error('Calibration must be an object');
175
+ }
176
+ const cal = workload.calibration;
177
+ assertFiniteInteger(cal.iterations, 'Calibration iterations', 1);
178
+ assertFiniteInteger(cal.durationMs, 'Calibration duration', 1);
179
+ }
180
+ // If any of min/max are provided, also run through normalizeBounds to ensure combined validation matches selectWorkload exactly
181
+ // This catches edge cases like non-finite values already handled, but ensures parity
182
+ if (workload.minDifficulty !== undefined ||
183
+ workload.maxDifficulty !== undefined ||
184
+ workload.minAmount !== undefined ||
185
+ workload.maxAmount !== undefined) {
186
+ normalizeBounds(workload);
187
+ }
188
+ }
189
+ /**
190
+ * Programmable risk-assessment subsystem.
191
+ *
192
+ * All signals are caller-supplied and treated as untrusted inputs.
193
+ * The default scorer is a transparent heuristic (not an ML model).
194
+ * The returned `risk` is a bounded heuristic score, not a probability
195
+ * or identity confidence. The caller is responsible for obtaining
196
+ * trustworthy inputs.
197
+ *
198
+ * Flow:
199
+ * validate AssessOptions
200
+ * -> resolve scorer (custom or default)
201
+ * -> await scorer.score(signals)
202
+ * -> validate risk 0..100
203
+ * -> resolve thresholds (custom or DEFAULT_RISK_THRESHOLDS)
204
+ * -> apply policy (allow / challenge / block)
205
+ * -> if challenge, delegate to existing selectWorkload() with riskScore
206
+ */
207
+ export async function assess(options) {
208
+ if (!options || typeof options !== 'object' || Array.isArray(options)) {
209
+ throw new Error('AssessOptions must be an object');
210
+ }
211
+ const { signals, scorer, thresholds, workload } = options;
212
+ if (!signals || typeof signals !== 'object' || Array.isArray(signals)) {
213
+ throw new Error('signals must be an object');
214
+ }
215
+ if (scorer !== undefined) {
216
+ if (!scorer || typeof scorer !== 'object' || typeof scorer.score !== 'function') {
217
+ throw new Error('scorer must be an object with a score function');
218
+ }
219
+ }
220
+ if (thresholds !== undefined) {
221
+ validateRiskThresholds(thresholds);
222
+ }
223
+ // Use a private immutable default via copy so consumer mutation of the exported
224
+ // DEFAULT_RISK_THRESHOLDS cannot change library behavior
225
+ const resolvedThresholds = thresholds
226
+ ? { challenge: thresholds.challenge, block: thresholds.block }
227
+ : { challenge: DEFAULT_RISK_THRESHOLDS.challenge, block: DEFAULT_RISK_THRESHOLDS.block };
228
+ // Validate resolved copy as well (defensive)
229
+ validateRiskThresholds(resolvedThresholds);
230
+ if (workload !== undefined) {
231
+ if (!workload || typeof workload !== 'object' || Array.isArray(workload)) {
232
+ throw new Error('workload must be an object');
233
+ }
234
+ validateAssessWorkloadOptions(workload);
235
+ }
236
+ const activeScorer = scorer ?? defaultScorer;
237
+ const rawRisk = await activeScorer.score(signals);
238
+ const risk = validateScorerOutput(rawRisk);
239
+ const { challenge, block } = resolvedThresholds;
240
+ let action;
241
+ if (risk < challenge)
242
+ action = 'allow';
243
+ else if (risk < block)
244
+ action = 'challenge';
245
+ else
246
+ action = 'block';
247
+ if (action === 'challenge') {
248
+ // Reuse existing adaptive workload selection. Do not duplicate logic.
249
+ // Ensure assessed risk overrides any riskScore that might be present in workload (defensive copy).
250
+ const workloadOptions = {
251
+ ...workload,
252
+ riskScore: risk,
253
+ };
254
+ // Ensure workload's riskScore is overridden even if spread included one
255
+ workloadOptions.riskScore = risk;
256
+ const resultWorkload = selectWorkload(workloadOptions);
257
+ return { risk, action, workload: resultWorkload };
258
+ }
259
+ return { risk, action };
260
+ }
108
261
  export function calibrateNode(iterations = 128) {
109
262
  if (!Number.isFinite(iterations) || iterations < 1) {
110
263
  throw new Error('Calibration iterations must be at least 1');
@@ -131,20 +284,15 @@ function hashContext(context, jti) {
131
284
  .update(context, 'utf8')
132
285
  .digest('hex');
133
286
  }
134
- let cachedSecret;
135
287
  function getSecret() {
136
288
  const secret = process.env.RIBAUNT_SECRET;
137
289
  if (!secret) {
138
- cachedSecret = undefined;
139
290
  throw new Error('RIBAUNT_SECRET environment variable is not set!');
140
291
  }
141
292
  if (Buffer.byteLength(secret, 'utf8') < 32) {
142
- cachedSecret = undefined;
143
293
  throw new Error('RIBAUNT_SECRET must be at least 32 bytes');
144
294
  }
145
- if (cachedSecret !== secret)
146
- cachedSecret = secret;
147
- return cachedSecret;
295
+ return secret;
148
296
  }
149
297
  function createSingleChallenge(difficulty, ttlSeconds, context) {
150
298
  const jti = crypto.randomUUID();
@@ -156,9 +304,19 @@ function createSingleChallenge(difficulty, ttlSeconds, context) {
156
304
  };
157
305
  if (context !== undefined)
158
306
  payload.contextHash = hashContext(context, jti);
159
- return jwt.sign(payload, getSecret());
307
+ return jwt.sign(payload, getSecret(), { algorithm: 'HS256' });
160
308
  }
161
- export function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds = 30) {
309
+ function emitEvent(options, event) {
310
+ if (!options?.onEvent)
311
+ return;
312
+ try {
313
+ options.onEvent(event);
314
+ }
315
+ catch {
316
+ // telemetry must never break challenge issuance or verification
317
+ }
318
+ }
319
+ export async function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds = 30) {
162
320
  const options = typeof difficultyOrOptions === 'object' ? difficultyOrOptions : undefined;
163
321
  const selectedWorkload = options?.workload
164
322
  ?? (options?.difficulty === 'auto' ? selectWorkload(options) : undefined);
@@ -173,7 +331,14 @@ export function createChallenge(difficultyOrOptions = 5, amount = 4, ttlSeconds
173
331
  throw new Error('Challenge TTL must be at least 1 second');
174
332
  }
175
333
  const normalizedTtl = assertFiniteInteger(ttlValue, 'Challenge TTL', 1);
176
- return Array.from({ length: normalizedAmount }, () => createSingleChallenge(difficulty, normalizedTtl, options?.context));
334
+ if (options?.rateLimiter) {
335
+ const allowed = await options.rateLimiter.check(options?.context);
336
+ if (!allowed)
337
+ throw new RateLimitedError('Challenge issuance rate limited');
338
+ }
339
+ const challenges = Array.from({ length: normalizedAmount }, () => createSingleChallenge(difficulty, normalizedTtl, options?.context));
340
+ emitEvent(options, { type: 'challenge-issued', difficulty, amount: normalizedAmount });
341
+ return challenges;
177
342
  }
178
343
  function normalizeMaxIterations(options) {
179
344
  if (options?.maxIterations === undefined || !Number.isFinite(options.maxIterations))
@@ -230,6 +395,7 @@ function warn(reason, message, options, error) {
230
395
  ? { reason, message }
231
396
  : { reason, message, error };
232
397
  options?.onWarning?.(warning);
398
+ emitEvent(options, { type: 'verify-failure', reason, message });
233
399
  if (shouldDebug(options)) {
234
400
  const details = error instanceof Error ? error.message : error;
235
401
  console.warn(`[ribaunt] ${message}`, details ?? '');
@@ -272,6 +438,11 @@ function contextMatches(payload, suppliedContext) {
272
438
  return expected.length === actual.length && crypto.timingSafeEqual(expected, actual);
273
439
  }
274
440
  export async function verifySolution(token, nonce, options) {
441
+ if (options?.rateLimiter) {
442
+ const allowed = await options.rateLimiter.check(options?.context);
443
+ if (!allowed)
444
+ throw new RateLimitedError('Challenge verification rate limited');
445
+ }
275
446
  const tokens = Array.isArray(token) ? token : [token];
276
447
  if (tokens.length === 0) {
277
448
  return warn('invalid-solution', 'verifySolution requires at least one challenge token', options);
@@ -303,7 +474,7 @@ export async function verifySolution(token, nonce, options) {
303
474
  if (!currentToken || currentNonce === undefined || currentNonce === null || currentNonce === '') {
304
475
  return warn('invalid-solution', 'verifySolution received an empty nonce', options);
305
476
  }
306
- const decoded = jwt.verify(currentToken, getSecret());
477
+ const decoded = jwt.verify(currentToken, getSecret(), { algorithms: ['HS256'] });
307
478
  if (!isValidPayload(decoded))
308
479
  throw new Error('Invalid challenge token payload');
309
480
  const payload = decoded;
@@ -327,18 +498,24 @@ export async function verifySolution(token, nonce, options) {
327
498
  if (replayStore && jtis.length > 0) {
328
499
  const expiresAt = Math.max(...validated.map((payload) => payload.expires));
329
500
  let consumed;
330
- if (jtis.length > 1) {
331
- if (!replayStore.consumeMany) {
332
- return warn('configuration-error', 'A replayStore with consumeMany is required for atomic batch verification', options);
501
+ try {
502
+ if (jtis.length > 1) {
503
+ if (!replayStore.consumeMany) {
504
+ return warn('configuration-error', 'A replayStore with consumeMany is required for atomic batch verification', options);
505
+ }
506
+ consumed = await replayStore.consumeMany(jtis, expiresAt);
507
+ }
508
+ else {
509
+ consumed = await replayStore.consume(jtis[0], expiresAt);
333
510
  }
334
- consumed = await replayStore.consumeMany(jtis, expiresAt);
335
511
  }
336
- else {
337
- consumed = await replayStore.consume(jtis[0], expiresAt);
512
+ catch (error) {
513
+ return warn('replay-store-unavailable', 'verifySolution failed because the replay store could not be reached', options, error);
338
514
  }
339
515
  if (!consumed)
340
516
  return warn('replay-detected', 'verifySolution rejected a replayed token', options);
341
517
  }
518
+ emitEvent(options, { type: 'verify-success' });
342
519
  return { valid: true };
343
520
  }
344
521
  catch (error) {
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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"}
Binary file
package/dist/risk.d.ts ADDED
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Ribaunt Risk Engine — programmable risk-assessment subsystem.
3
+ *
4
+ * This module is intentionally small, stateless, and caller-driven.
5
+ * All incoming signals are caller-supplied and treated as untrusted
6
+ * inputs. The default scorer is a transparent, deterministic heuristic
7
+ * (not an ML/fraud probability model) that can be inspected and replaced.
8
+ *
9
+ * Scoring is CPU-only, O(1) over the small set of known signals, and
10
+ * performs no I/O.
11
+ */
12
+ import type { ClientCalibration, Workload, WorkloadBounds } from './index.js';
13
+ export interface RiskSignals {
14
+ ip?: string;
15
+ userAgent?: string;
16
+ accountAgeSeconds?: number;
17
+ requestVelocity?: number;
18
+ [key: string]: unknown;
19
+ }
20
+ export interface RiskScorer {
21
+ score(signals: RiskSignals): number | Promise<number>;
22
+ }
23
+ export interface RiskThresholds {
24
+ challenge: number;
25
+ block: number;
26
+ }
27
+ export interface AssessWorkloadOptions extends WorkloadBounds {
28
+ targetDurationMs?: number;
29
+ calibration?: ClientCalibration;
30
+ }
31
+ export interface AssessOptions {
32
+ signals: RiskSignals;
33
+ scorer?: RiskScorer;
34
+ thresholds?: RiskThresholds;
35
+ workload?: AssessWorkloadOptions;
36
+ }
37
+ export interface RiskAssessment {
38
+ risk: number;
39
+ action: 'allow' | 'challenge' | 'block';
40
+ workload?: Workload;
41
+ }
42
+ export declare const DEFAULT_RISK_THRESHOLDS: RiskThresholds;
43
+ /**
44
+ * Validate thresholds. Throws if invalid rather than silently repairing.
45
+ * Requires 0 <= challenge < block <= 100
46
+ */
47
+ export declare function validateRiskThresholds(thresholds: RiskThresholds): void;
48
+ /**
49
+ * Validate scorer output. Custom scorers must return a finite number
50
+ * between 0 and 100 inclusive. Do not silently clamp — reject as a
51
+ * configuration/programming error so broken policies are visible.
52
+ */
53
+ export declare function validateScorerOutput(value: unknown): number;
54
+ export declare function clampRisk(value: number): number;
55
+ /**
56
+ * Normalize account age to a bounded risk contribution (0..30).
57
+ *
58
+ * Younger accounts contribute more risk than older accounts.
59
+ * - Negative ages are invalid/ignored (0)
60
+ * - NaN / Infinity are ignored (0)
61
+ * - Very large values saturate to 0 rather than overflow (no dominance)
62
+ *
63
+ * Buckets are documented and deterministic:
64
+ * < 60s -> 30
65
+ * < 1h -> 25
66
+ * < 1d -> 20
67
+ * < 7d -> 15
68
+ * < 30d -> 10
69
+ * < 90d -> 5
70
+ * >= 90d -> 0
71
+ */
72
+ export declare function normalizeAccountAge(value: unknown): number;
73
+ /**
74
+ * Normalize caller-derived request velocity to a bounded contribution (0..40).
75
+ *
76
+ * Higher velocity contributes more risk.
77
+ * - Negative values are invalid/ignored
78
+ * - Non-finite values are ignored
79
+ * - Saturates rather than growing without bound
80
+ *
81
+ * Buckets:
82
+ * < 1 -> 0
83
+ * < 5 -> 10
84
+ * < 20 -> 20
85
+ * < 60 -> 30
86
+ * < 200 -> 35
87
+ * >= 200 -> 40
88
+ *
89
+ * The caller-derived velocity is not assumed to be authoritative; it is
90
+ * a weak heuristic contributed to the total score.
91
+ */
92
+ export declare function normalizeRequestVelocity(value: unknown): number;
93
+ /**
94
+ * Inspect user-agent signal as a weak signal only.
95
+ *
96
+ * - Missing or non-string UA -> 0 (not treated as strong signal)
97
+ * - Empty / whitespace-only UA -> 5
98
+ * - Very short UA (<10 chars) -> 10
99
+ * - Otherwise -> 0
100
+ *
101
+ * No fragile substring bans (e.g. `ua.includes('bot')`) are used.
102
+ * UA classification is not treated as trustworthy.
103
+ */
104
+ export declare function scoreUserAgent(value: unknown): number;
105
+ /**
106
+ * IP is accepted for custom scorers but the default scorer does not
107
+ * pretend to know whether an IP is malicious. The safest v1 choice is
108
+ * to return 0 and let custom scorers handle IP reputation if needed.
109
+ */
110
+ export declare function scoreIp(_value: unknown): number;
111
+ /**
112
+ * Deterministic default scorer. Transparent heuristic:
113
+ * signals -> normalizeAccountAge + normalizeRequestVelocity + scoreUserAgent + scoreIp -> clamp 0..100
114
+ *
115
+ * Unknown properties on RiskSignals are ignored by the default scorer;
116
+ * custom scorers may use them.
117
+ *
118
+ * This scorer is synchronous internally but exposed as async via the
119
+ * RiskScorer interface so callers can supply remote/model-based scorers
120
+ * without changing the API.
121
+ */
122
+ export declare function defaultScore(signals: RiskSignals): number;
123
+ export declare const defaultScorer: RiskScorer;
124
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../src/risk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI9E,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;IACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAmBD,eAAO,MAAM,uBAAuB,EAAE,cAAyC,CAAC;AAIhF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAsBvE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW3D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW1D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE/C;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAOzD;AAED,eAAO,MAAM,aAAa,EAAE,UAI3B,CAAC"}