ribaunt 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -8
- package/dist/cjs/index.d.ts +24 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +160 -13
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/risk.d.ts +124 -0
- package/dist/cjs/risk.d.ts.map +1 -0
- package/dist/cjs/risk.js +213 -0
- package/dist/cjs/risk.js.map +1 -0
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +158 -12
- package/dist/index.js.map +1 -1
- package/dist/ribaunt-solver.wasm +0 -0
- package/dist/risk.d.ts +124 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +202 -0
- package/dist/risk.js.map +1 -0
- package/dist/solver-worker.d.ts.map +1 -1
- package/dist/solver-worker.js +135 -5
- package/dist/solver-worker.js.map +1 -1
- package/dist/solver.d.ts +1 -0
- package/dist/solver.d.ts.map +1 -1
- package/dist/solver.js +38 -3
- package/dist/solver.js.map +1 -1
- package/dist/wasm-solver.d.ts +29 -0
- package/dist/wasm-solver.d.ts.map +1 -0
- package/dist/wasm-solver.js +296 -0
- package/dist/wasm-solver.js.map +1 -0
- package/dist/widget-browser.d.ts +3 -2
- package/dist/widget-browser.d.ts.map +1 -1
- package/dist/widget-browser.js +1 -1
- package/dist/widget-browser.js.map +1 -1
- package/dist/widget-react.d.ts +3 -1
- package/dist/widget-react.d.ts.map +1 -1
- package/dist/widget-react.js +99 -15
- package/dist/widget-react.js.map +1 -1
- package/dist/widget.d.ts +35 -15
- package/dist/widget.d.ts.map +1 -1
- package/dist/widget.js +61 -10
- package/dist/widget.js.map +1 -1
- package/dist/worker-client.d.ts +7 -1
- package/dist/worker-client.d.ts.map +1 -1
- package/dist/worker-client.js +32 -5
- package/dist/worker-client.js.map +1 -1
- package/package.json +22 -7
- package/SECURITY.md +0 -36
- package/context7.json +0 -4
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ Ribaunt is a stateless proof-of-work CAPTCHA library for Node.js and modern brow
|
|
|
16
16
|
- Browser widget for plain HTML apps
|
|
17
17
|
- React and Next.js-friendly wrapper via `ribaunt/widget-react`
|
|
18
18
|
- Server helpers for creating, solving, and verifying PoW challenges
|
|
19
|
+
- Programmable risk engine (`assess()`) with caller-supplied signals, pluggable scorers, and `allow`/`challenge`/`block` policy
|
|
19
20
|
- Default process-local replay protection with support for remote replay stores
|
|
20
21
|
- CSS custom properties for theming
|
|
21
22
|
- TypeScript types included
|
|
@@ -151,6 +152,8 @@ const challenges = await createChallenge(5, 4, 120);
|
|
|
151
152
|
|
|
152
153
|
Validate user- or config-controlled values before passing them to `createChallenge()`. Invalid values throw.
|
|
153
154
|
|
|
155
|
+
> **API note:** the options object form defaults to a single challenge (`amount: 1`) unless you pass `amount`; only the positional form above defaults to `4`.
|
|
156
|
+
|
|
154
157
|
### `createChallenge({ difficulty: "auto", ... })`
|
|
155
158
|
|
|
156
159
|
Creates adaptive challenge tokens from a server-bounded calibration hint. Calibration is untrusted and raise-only: it can increase work for fast clients, but it never lowers the server baseline.
|
|
@@ -204,9 +207,41 @@ const workload = selectWorkload({
|
|
|
204
207
|
minDifficulty: 3,
|
|
205
208
|
maxDifficulty: 6,
|
|
206
209
|
});
|
|
207
|
-
// { difficulty:
|
|
210
|
+
// { difficulty: 3, amount: 5, estimatedAttempts: 20480 }
|
|
208
211
|
```
|
|
209
212
|
|
|
213
|
+
### `assess(options)` — Risk Engine
|
|
214
|
+
|
|
215
|
+
Stateless, caller-driven risk assessment. All signals are caller-supplied (untrusted). Returns a bounded heuristic risk score (0–100, not a probability) and a policy action.
|
|
216
|
+
|
|
217
|
+
```ts
|
|
218
|
+
import { assess } from 'ribaunt';
|
|
219
|
+
|
|
220
|
+
const assessment = await assess({
|
|
221
|
+
signals: {
|
|
222
|
+
accountAgeSeconds: account.ageSeconds,
|
|
223
|
+
requestVelocity: requestsPerMinute,
|
|
224
|
+
userAgent: req.headers['user-agent'],
|
|
225
|
+
ip: req.ip, // accepted for custom scorers; default scorer ignores it
|
|
226
|
+
},
|
|
227
|
+
// thresholds: { challenge: 40, block: 80 }, // defaults shown
|
|
228
|
+
// scorer: myScorer, // optional pluggable RiskScorer
|
|
229
|
+
// workload: { minDifficulty: 3, maxDifficulty: 6, targetDurationMs: 750, calibration },
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
if (assessment.action === 'allow') { /* continue */ }
|
|
233
|
+
else if (assessment.action === 'challenge') {
|
|
234
|
+
const workload = assessment.workload!; // { difficulty, amount, estimatedAttempts } from selectWorkload()
|
|
235
|
+
}
|
|
236
|
+
else { /* block — application decides how to reject */ }
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
- `risk < challenge` → `allow` (no workload)
|
|
240
|
+
- `challenge ≤ risk < block` → `challenge` (with workload via existing `selectWorkload()`)
|
|
241
|
+
- `risk ≥ block` → `block` (no workload)
|
|
242
|
+
|
|
243
|
+
Defaults are `DEFAULT_RISK_THRESHOLDS = { challenge: 40, block: 80 }` — tune to your app; they are policy defaults, not fraud probabilities. Custom scorers (`RiskScorer { score(signals): Promise<number> }`) are `async` so you can call a remote model; invalid outputs (`NaN`/`Infinity`/`<0`/`>100`/non-number) are rejected, not clamped, and thrown errors propagate. See `docs/risk-engine.md` for the full default-scorer buckets, trust model, and limitations.
|
|
244
|
+
|
|
210
245
|
### `verifySolution(tokens, solutions, options?)`
|
|
211
246
|
|
|
212
247
|
Verifies submitted solutions and returns a structured result:
|
|
@@ -245,13 +280,15 @@ const rateLimiter = {
|
|
|
245
280
|
check: async (key?: string) => (await redisBucket.hit(key ?? 'unknown')) < 10,
|
|
246
281
|
};
|
|
247
282
|
|
|
248
|
-
// Challenge endpoint: key on the client IP
|
|
283
|
+
// Challenge endpoint: key the limiter on the client IP by closing over the
|
|
284
|
+
// request instead of passing `context`. Passing `context: req.ip` here would
|
|
285
|
+
// also cryptographically bind each challenge to that IP, forcing the verify
|
|
286
|
+
// call to pass the exact same `context` (see `verifySolution` below).
|
|
249
287
|
app.get('/api/captcha/challenge', async (req, res) => {
|
|
250
288
|
try {
|
|
251
289
|
const challenges = await createChallenge({
|
|
252
290
|
difficulty: 5,
|
|
253
291
|
amount: 4,
|
|
254
|
-
context: req.ip,
|
|
255
292
|
rateLimiter,
|
|
256
293
|
});
|
|
257
294
|
res.json({ challenges });
|
|
@@ -264,6 +301,8 @@ app.get('/api/captcha/challenge', async (req, res) => {
|
|
|
264
301
|
});
|
|
265
302
|
```
|
|
266
303
|
|
|
304
|
+
> **Context binding:** if you *do* pass `context` to `createChallenge()`, every challenge token is bound to that context via an HMAC digest. You must then pass the identical `context` to `verifySolution()` or verification fails with `context-mismatch`. Use `context` for binding a challenge to a specific action (e.g. one signup attempt), not for rate limiting.
|
|
305
|
+
|
|
267
306
|
### `onEvent` telemetry hook
|
|
268
307
|
|
|
269
308
|
Both entry points accept an optional synchronous `onEvent` callback for structured lifecycle events. It is fire-and-forget: a throwing consumer can never break challenge issuance or verification.
|
|
@@ -281,7 +320,7 @@ await createChallenge({ difficulty: 5, amount: 4, onEvent });
|
|
|
281
320
|
const result = await verifySolution(tokens, solutions, { onEvent });
|
|
282
321
|
```
|
|
283
322
|
|
|
284
|
-
`verify-failure` events carry the same `reason` values as `VerifySolutionResult` (`invalid-token`, `expired-token`, `invalid-solution`, `context-mismatch`, `replay-detected`, `configuration-error`). Add aggregation over Windows, StatsD, or Prometheus yourself — Ribaunt only emits raw events.
|
|
323
|
+
`verify-failure` events carry the same `reason` values as `VerifySolutionResult` (`invalid-token`, `expired-token`, `invalid-solution`, `context-mismatch`, `replay-detected`, `replay-store-unavailable`, `configuration-error`). Add aggregation over Windows, StatsD, or Prometheus yourself — Ribaunt only emits raw events.
|
|
285
324
|
|
|
286
325
|
### `solveChallenge(token, options?)`
|
|
287
326
|
|
|
@@ -306,6 +345,8 @@ const solutions = solveChallenge(challenges, {
|
|
|
306
345
|
show-warning="false"
|
|
307
346
|
warning-message="Verification may take longer on this device."
|
|
308
347
|
solve-timeout="15000"
|
|
348
|
+
worker-mode="preferred"
|
|
349
|
+
wasm-mode="preferred"
|
|
309
350
|
disabled="false"
|
|
310
351
|
></ribaunt-widget>
|
|
311
352
|
```
|
|
@@ -320,7 +361,9 @@ const solutions = solveChallenge(challenges, {
|
|
|
320
361
|
| `show-warning` | `showWarning` | Shows a warning banner. |
|
|
321
362
|
| `warning-message` | `warningMessage` | Custom warning text. |
|
|
322
363
|
| `show-progress` | `showProgress` | Set to `"false"` to swap the percentage ring for a plain bars spinner with a static `Loading...` label. |
|
|
323
|
-
| `solve-timeout` | `solveTimeout` | Optional
|
|
364
|
+
| `solve-timeout` | `solveTimeout` | Optional timeout in milliseconds for the whole verification attempt (fetching, solving, and verifying). |
|
|
365
|
+
| `worker-mode` | `workerMode` | Web Worker solving: `preferred` (default; falls back to the main thread), `required` (fail if unavailable), or `disabled`. |
|
|
366
|
+
| `wasm-mode` | `wasmMode` | WASM solver: `preferred` (default; uses WASM batch solver inside worker if available), `disabled` (always use JS solver inside worker). Independent from `worker-mode`. |
|
|
324
367
|
| `disabled` | `disabled` | Blocks user interaction and automatic verification. |
|
|
325
368
|
| | `fallback` | React-only. Custom loading element while widget dynamic import loads. Defaults to a built-in shimmer skeleton. |
|
|
326
369
|
|
|
@@ -353,6 +396,7 @@ See [theming docs](https://github.com/ribaunt/ribaunt/blob/main/docs/theming.md)
|
|
|
353
396
|
|
|
354
397
|
- [Quick start](https://github.com/ribaunt/ribaunt/blob/main/docs/quick-start.md)
|
|
355
398
|
- [Configuration](https://github.com/ribaunt/ribaunt/blob/main/docs/configuration.md)
|
|
399
|
+
- [Risk Engine](https://github.com/ribaunt/ribaunt/blob/main/docs/risk-engine.md)
|
|
356
400
|
- [Events](https://github.com/ribaunt/ribaunt/blob/main/docs/events.md)
|
|
357
401
|
- [HTML integration](https://github.com/ribaunt/ribaunt/blob/main/docs/integrations/html.md)
|
|
358
402
|
- [React integration](https://github.com/ribaunt/ribaunt/blob/main/docs/integrations/react.md)
|
|
@@ -371,9 +415,10 @@ You can also ask documentation-aware tools to use the Context7 library ID:
|
|
|
371
415
|
## Development
|
|
372
416
|
|
|
373
417
|
```bash
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
418
|
+
corepack enable
|
|
419
|
+
pnpm install
|
|
420
|
+
pnpm test
|
|
421
|
+
pnpm run build
|
|
377
422
|
```
|
|
378
423
|
|
|
379
424
|
## License
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -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;
|
|
@@ -60,7 +64,7 @@ export interface VerifySolutionOptions {
|
|
|
60
64
|
rateLimiter?: RateLimiter;
|
|
61
65
|
onEvent?: (event: RibauntEvent) => void;
|
|
62
66
|
}
|
|
63
|
-
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';
|
|
64
68
|
export type VerifyWarningReason = VerifyFailureReason;
|
|
65
69
|
export interface VerifyWarning {
|
|
66
70
|
reason: VerifyWarningReason;
|
|
@@ -99,6 +103,25 @@ export declare class LocalReplayStore implements ReplayStore {
|
|
|
99
103
|
* Selects bounded proof-of-work using a server-owned risk floor and untrusted timing calibration.
|
|
100
104
|
*/
|
|
101
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>;
|
|
102
125
|
export declare function calibrateNode(iterations?: number): ClientCalibration;
|
|
103
126
|
export declare const calibrateClient: typeof calibrateNode;
|
|
104
127
|
export declare function createChallenge(difficulty?: number, amount?: number, ttlSeconds?: number): Promise<ChallengeToken[]>;
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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,17 @@ 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 = exports.RateLimitedError = 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; } });
|
|
14
17
|
class RateLimitedError extends Error {
|
|
15
18
|
constructor(message = 'Rate limit exceeded') {
|
|
16
19
|
super(message);
|
|
@@ -53,6 +56,9 @@ const DEFAULT_BOUNDS = {
|
|
|
53
56
|
minAmount: 1,
|
|
54
57
|
maxAmount: 8,
|
|
55
58
|
};
|
|
59
|
+
const MAX_WORKLOAD_DIFFICULTY = 64;
|
|
60
|
+
const MAX_WORKLOAD_AMOUNT = 64;
|
|
61
|
+
const MAX_WORKLOAD_CANDIDATES = 10000;
|
|
56
62
|
function assertFiniteInteger(value, name, minimum) {
|
|
57
63
|
if (!Number.isFinite(value))
|
|
58
64
|
throw new Error(`${name} must be a finite number`);
|
|
@@ -85,9 +91,25 @@ function assertRange(value, name, minimum, maximum) {
|
|
|
85
91
|
}
|
|
86
92
|
function normalizeBounds(options) {
|
|
87
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
|
+
}
|
|
88
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
|
+
}
|
|
89
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
|
+
}
|
|
90
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
|
+
}
|
|
91
113
|
return { minDifficulty, maxDifficulty, minAmount, maxAmount };
|
|
92
114
|
}
|
|
93
115
|
function closestWorkload(targetAttempts, bounds) {
|
|
@@ -125,6 +147,131 @@ function selectWorkload(options = {}) {
|
|
|
125
147
|
const maximumAttempts = (16 ** bounds.maxDifficulty) * bounds.maxAmount;
|
|
126
148
|
return closestWorkload(Math.min(targetAttempts, maximumAttempts), bounds);
|
|
127
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
|
+
}
|
|
128
275
|
function calibrateNode(iterations = 128) {
|
|
129
276
|
if (!Number.isFinite(iterations) || iterations < 1) {
|
|
130
277
|
throw new Error('Calibration iterations must be at least 1');
|
|
@@ -151,20 +298,15 @@ function hashContext(context, jti) {
|
|
|
151
298
|
.update(context, 'utf8')
|
|
152
299
|
.digest('hex');
|
|
153
300
|
}
|
|
154
|
-
let cachedSecret;
|
|
155
301
|
function getSecret() {
|
|
156
302
|
const secret = process.env.RIBAUNT_SECRET;
|
|
157
303
|
if (!secret) {
|
|
158
|
-
cachedSecret = undefined;
|
|
159
304
|
throw new Error('RIBAUNT_SECRET environment variable is not set!');
|
|
160
305
|
}
|
|
161
306
|
if (Buffer.byteLength(secret, 'utf8') < 32) {
|
|
162
|
-
cachedSecret = undefined;
|
|
163
307
|
throw new Error('RIBAUNT_SECRET must be at least 32 bytes');
|
|
164
308
|
}
|
|
165
|
-
|
|
166
|
-
cachedSecret = secret;
|
|
167
|
-
return cachedSecret;
|
|
309
|
+
return secret;
|
|
168
310
|
}
|
|
169
311
|
function createSingleChallenge(difficulty, ttlSeconds, context) {
|
|
170
312
|
const jti = crypto_1.default.randomUUID();
|
|
@@ -370,14 +512,19 @@ async function verifySolution(token, nonce, options) {
|
|
|
370
512
|
if (replayStore && jtis.length > 0) {
|
|
371
513
|
const expiresAt = Math.max(...validated.map((payload) => payload.expires));
|
|
372
514
|
let consumed;
|
|
373
|
-
|
|
374
|
-
if (
|
|
375
|
-
|
|
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);
|
|
376
524
|
}
|
|
377
|
-
consumed = await replayStore.consumeMany(jtis, expiresAt);
|
|
378
525
|
}
|
|
379
|
-
|
|
380
|
-
|
|
526
|
+
catch (error) {
|
|
527
|
+
return warn('replay-store-unavailable', 'verifySolution failed because the replay store could not be reached', options, error);
|
|
381
528
|
}
|
|
382
529
|
if (!consumed)
|
|
383
530
|
return warn('replay-detected', 'verifySolution rejected a replayed token', options);
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAmOA,wCAuBC;AAED,sCAeC;AAkED,0CAsCC;AAuCD,wCAcC;AA6DD,wCAqFC;AA1jBD,oDAA4B;AAC5B,gEAA+B;AAmE/B,MAAa,gBAAiB,SAAQ,KAAK;IAGzC,YAAY,OAAO,GAAG,qBAAqB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAG,cAAc,CAAC;QAI7B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAPD,4CAOC;AA4CD,MAAa,gBAAgB;IAA7B;QACU,eAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAyBjD,CAAC;IAvBC,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAiB;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAc,EAAE,SAAiB;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,SAAS,GAAG,GAAG;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF;AA1BD,4CA0BC;AAED,MAAM,uBAAuB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACvD,MAAM,6BAA6B,GAAG,KAAM,CAAC;AAC7C,MAAM,cAAc,GAAG;IACrB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;CACb,CAAC;AAEF,SAAS,mBAAmB,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe;IACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,UAAU,GAAG,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,OAAO,EAAE,CAAC,CAAC;IACjF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB;IACtC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAyC,CAAC;IACxD,OAAO,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;WACrC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;WAC1B,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;WACpC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;WAClC,KAAK,CAAC,UAAU,IAAI,CAAC;WACrB,KAAK,CAAC,UAAU,IAAI,EAAE;WACtB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;WACjC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;WAC/B,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;WAC7B,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;WACpB,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe,EAAE,OAAe;IAChF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,OAAO,QAAQ,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,OAAuB;IAC9C,MAAM,aAAa,GAAG,mBAAmB,CACvC,OAAO,CAAC,aAAa,IAAI,cAAc,CAAC,aAAa,EACrD,oBAAoB,EACpB,CAAC,CACF,CAAC;IACF,MAAM,aAAa,GAAG,mBAAmB,CACvC,OAAO,CAAC,aAAa,IAAI,cAAc,CAAC,aAAa,EACrD,oBAAoB,EACpB,aAAa,CACd,CAAC;IACF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAC1G,MAAM,SAAS,GAAG,mBAAmB,CACnC,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,SAAS,EAC7C,gBAAgB,EAChB,SAAS,CACV,CAAC;IACF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,eAAe,CAAC,cAAsB,EAAE,MAA0C;IACzF,IAAI,IAA0B,CAAC;IAC/B,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAE5C,KAAK,IAAI,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,UAAU,IAAI,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC;QAC7F,KAAK,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;YACzE,MAAM,iBAAiB,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC;YACxE,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;gBAC5B,YAAY,GAAG,QAAQ,CAAC;gBACxB,IAAI,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,UAAmC,EAAE;IAClE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,OAAO,CAAC,gBAAgB,IAAI,GAAG,EAC/B,iBAAiB,EACjB,CAAC,CACF,CAAC;IAEF,MAAM,eAAe,GAAG,EAAE,IAAI,MAAM,CAAC,aAAa;UAC9C,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnF,IAAI,cAAc,GAAG,eAAe,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,UAAU,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,kBAAkB,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,gBAAgB,CAAC;QACxE,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;IACxE,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,aAAa,CAAC,UAAU,GAAG,GAAG;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IAED,OAAO;QACL,UAAU,EAAE,oBAAoB;QAChC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;KACnE,CAAC;AACJ,CAAC;AAEY,QAAA,eAAe,GAAG,aAAa,CAAC;AAE7C,SAAS,iBAAiB,CAAC,MAAM,GAAG,CAAC;IACnC,OAAO,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,GAAW;IAC/C,OAAO,gBAAM;SACV,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;SACjC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;SACnB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;SACvB,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,IAAI,YAAgC,CAAC;AACrC,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,YAAY,GAAG,SAAS,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,YAAY,GAAG,SAAS,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,YAAY,KAAK,MAAM;QAAE,YAAY,GAAG,MAAM,CAAC;IACnD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAAkB,EAClB,UAAkB,EAClB,OAAgB;IAEhB,MAAM,GAAG,GAAG,gBAAM,CAAC,UAAU,EAAE,CAAC;IAChC,MAAM,OAAO,GAA0B;QACrC,SAAS,EAAE,iBAAiB,EAAE;QAC9B,UAAU;QACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU;QACnD,GAAG;KACJ,CAAC;IACF,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3E,OAAO,sBAAG,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAChB,OAAgE,EAChE,KAAmB;IAEnB,IAAI,CAAC,OAAO,EAAE,OAAO;QAAE,OAAO;IAC9B,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;AACH,CAAC;AAQM,KAAK,UAAU,eAAe,CACnC,sBAAiD,CAAC,EAClD,MAAM,GAAG,CAAC,EACV,UAAU,GAAG,EAAE;IAEf,MAAM,OAAO,GAAG,OAAO,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,MAAM,gBAAgB,GAAG,OAAO,EAAE,QAAQ;WACrC,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,oBAAoB,GAAG,OAAO,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC;IAC9F,MAAM,UAAU,GAAG,mBAAmB,CACpC,gBAAgB,EAAE,UAAU,IAAI,oBAAoB;WAC/C,CAAC,OAAO,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,EACxE,sBAAsB,EACtB,CAAC,CACF,CAAC;IACF,IAAI,UAAU,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACrE,kBAAkB,EAClB,CAAC,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAExE,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAC5B,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CACzE,CAAC;IACF,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACvF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAAC,OAA+B;IAC7D,IAAI,OAAO,EAAE,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC;IACtG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,sBAAsB,CAAC,OAA+B;IAC7D,IAAI,OAAO,EAAE,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACpF,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAqB,EACrB,OAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,KAAK,CAAiC,CAAC;QAClE,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,KAAK,IAAI,KAAK,GAAG,CAAC,GAAI,KAAK,EAAE,EAAE,CAAC;YAC9B,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,IAAI,aAAa;gBAAE,OAAO,SAAS,CAAC;YAC5E,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,aAAa;gBAAE,OAAO,SAAS,CAAC;YAC9D,MAAM,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9F,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAID,SAAgB,cAAc,CAC5B,KAAwC,EACxC,OAA+B;IAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,SAAS,GAAwB,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,OAA+B;IAClD,OAAO,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;AAClE,CAAC;AAED,SAAS,IAAI,CACX,MAA2B,EAC3B,OAAe,EACf,OAA+B,EAC/B,KAAe;IAEf,MAAM,OAAO,GAAkB,KAAK,KAAK,SAAS;QAChD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE;QACrB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,mBAAmB;YAAE,OAAO,eAAe,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAClG,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,OAA+B;IACrD,MAAM,IAAI,GAAG,OAAO,EAAE,gBAAgB,IAAI,OAAO,CAAC;IAClD,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,uBAAuB,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CACpB,MAAwB,EACxB,KAAyF;IAEzF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACtF,CAA2B,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,OAA8B,EAAE,eAAmC;IACzF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,eAAe,KAAK,SAAS,CAAC;IAC5E,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,GAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,gBAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACvF,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,KAAwC,EACxC,KAAyF,EACzF,OAA+B;IAE/B,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,gBAAgB,CAAC,qCAAqC,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,kBAAkB,EAAE,sDAAsD,EAAE,OAAO,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,MAA8B,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,kBAAkB,EAAE,8CAA8C,EAAE,OAAO,CAAC,CAAC;QACzG,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,kBAAkB,EAAE,wCAAwC,EAAE,OAAO,CAAC,CAAC;QAC3G,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,kBAAkB,EAAE,wCAAwC,EAAE,OAAO,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;gBAChG,OAAO,IAAI,CAAC,kBAAkB,EAAE,wCAAwC,EAAE,OAAO,CAAC,CAAC;YACrF,CAAC;YAED,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjF,MAAM,OAAO,GAAG,OAAO,CAAC;YACxB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC,eAAe,EAAE,oDAAoD,EAAE,OAAO,CAAC,CAAC;YAC9F,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC,kBAAkB,EAAE,wDAAwD,EAAE,OAAO,CAAC,CAAC;YACrG,CAAC;YAED,MAAM,IAAI,GAAG,gBAAM;iBAChB,UAAU,CAAC,QAAQ,CAAC;iBACpB,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;iBACrD,MAAM,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC,kBAAkB,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;YACvF,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,IAAI,QAAiB,CAAC;YACtB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;oBAC7B,OAAO,IAAI,CACT,qBAAqB,EACrB,0EAA0E,EAC1E,OAAO,CACR,CAAC;gBACJ,CAAC;gBACD,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;QACrG,CAAC;QAED,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,MAAM,EAAE,0CAA0C,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|