ribaunt 0.2.5 → 0.2.6
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 -11
- package/dist/cjs/index.d.ts +103 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +466 -44
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redis.d.ts +16 -0
- package/dist/cjs/redis.d.ts.map +1 -1
- package/dist/cjs/redis.js +30 -0
- package/dist/cjs/redis.js.map +1 -1
- package/dist/cjs/risk.d.ts +4 -0
- package/dist/cjs/risk.d.ts.map +1 -1
- package/dist/cjs/risk.js +4 -0
- package/dist/cjs/risk.js.map +1 -1
- package/dist/hash-wasm.js +2671 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +429 -43
- package/dist/index.js.map +1 -1
- package/dist/redis.d.ts +16 -0
- package/dist/redis.d.ts.map +1 -1
- package/dist/redis.js +30 -0
- package/dist/redis.js.map +1 -1
- package/dist/risk.d.ts +4 -0
- package/dist/risk.d.ts.map +1 -1
- package/dist/risk.js +4 -0
- package/dist/risk.js.map +1 -1
- package/dist/solver-worker.d.ts.map +1 -1
- package/dist/solver-worker.js +17 -2
- package/dist/solver-worker.js.map +1 -1
- package/dist/solver.d.ts +23 -1
- package/dist/solver.d.ts.map +1 -1
- package/dist/solver.js +176 -1
- package/dist/solver.js.map +1 -1
- package/dist/wasm-solver.d.ts +29 -0
- package/dist/wasm-solver.d.ts.map +1 -1
- package/dist/wasm-solver.js +39 -5
- package/dist/wasm-solver.js.map +1 -1
- package/dist/widget-browser.d.ts +1 -1
- 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.map +1 -1
- package/dist/widget-react.js +12 -0
- package/dist/widget-react.js.map +1 -1
- package/dist/worker-client.d.ts +20 -1
- package/dist/worker-client.d.ts.map +1 -1
- package/dist/worker-client.js +18 -0
- package/dist/worker-client.js.map +1 -1
- package/package.json +6 -3
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,20 @@ import { DEFAULT_RISK_THRESHOLDS } from './risk.js';
|
|
|
2
2
|
import type { AssessOptions, RiskAssessment } from './risk.js';
|
|
3
3
|
export type { AssessOptions, AssessWorkloadOptions, RiskAssessment, RiskScorer, RiskSignals, RiskThresholds } from './risk.js';
|
|
4
4
|
export { DEFAULT_RISK_THRESHOLDS };
|
|
5
|
+
export type PowAlgorithm = 'sha256' | 'argon2id';
|
|
6
|
+
export type ArgonProfile = 'mobile' | 'standard';
|
|
7
|
+
export declare const HARD_MAX: {
|
|
8
|
+
readonly m: number;
|
|
9
|
+
readonly t: 3;
|
|
10
|
+
readonly p: 1;
|
|
11
|
+
readonly hashLen: 32;
|
|
12
|
+
};
|
|
13
|
+
export declare const ARGON_PROFILES: Record<ArgonProfile, {
|
|
14
|
+
m: number;
|
|
15
|
+
t: number;
|
|
16
|
+
p: number;
|
|
17
|
+
hashLen: number;
|
|
18
|
+
}>;
|
|
5
19
|
export type ChallengeToken = string;
|
|
6
20
|
export interface ChallengeSolution {
|
|
7
21
|
nonce: string;
|
|
@@ -21,11 +35,20 @@ export interface AdaptiveWorkloadOptions extends WorkloadBounds {
|
|
|
21
35
|
riskScore?: number;
|
|
22
36
|
targetDurationMs?: number;
|
|
23
37
|
calibration?: ClientCalibration;
|
|
38
|
+
algorithm?: PowAlgorithm;
|
|
39
|
+
argonProfile?: ArgonProfile;
|
|
24
40
|
}
|
|
25
41
|
export interface Workload {
|
|
26
42
|
difficulty: number;
|
|
27
43
|
amount: number;
|
|
28
44
|
estimatedAttempts: number;
|
|
45
|
+
algorithm: PowAlgorithm;
|
|
46
|
+
argon?: {
|
|
47
|
+
m: number;
|
|
48
|
+
t: number;
|
|
49
|
+
p: number;
|
|
50
|
+
hashLen: number;
|
|
51
|
+
};
|
|
29
52
|
}
|
|
30
53
|
export interface ChallengeOptions {
|
|
31
54
|
difficulty?: number | 'auto';
|
|
@@ -42,6 +65,8 @@ export interface ChallengeOptions {
|
|
|
42
65
|
maxAmount?: number;
|
|
43
66
|
rateLimiter?: RateLimiter;
|
|
44
67
|
onEvent?: (event: RibauntEvent) => void;
|
|
68
|
+
algorithm?: PowAlgorithm;
|
|
69
|
+
argonProfile?: ArgonProfile;
|
|
45
70
|
}
|
|
46
71
|
export interface ReplayStore {
|
|
47
72
|
consume(jti: string, expiresAt: number): Promise<boolean>;
|
|
@@ -75,6 +100,7 @@ export type RibauntEvent = {
|
|
|
75
100
|
type: 'challenge-issued';
|
|
76
101
|
difficulty: number;
|
|
77
102
|
amount: number;
|
|
103
|
+
algorithm?: PowAlgorithm;
|
|
78
104
|
} | {
|
|
79
105
|
type: 'verify-success';
|
|
80
106
|
} | {
|
|
@@ -101,6 +127,8 @@ export declare class LocalReplayStore implements ReplayStore {
|
|
|
101
127
|
}
|
|
102
128
|
/**
|
|
103
129
|
* Selects bounded proof-of-work using a server-owned risk floor and untrusted timing calibration.
|
|
130
|
+
* For `algorithm:'argon2id'` difficulty is capped to the argon max (default 2) and the returned
|
|
131
|
+
* workload carries `argon:{m,t,p}` derived from `argonProfile` so the device can comfortably solve it.
|
|
104
132
|
*/
|
|
105
133
|
export declare function selectWorkload(options?: AdaptiveWorkloadOptions): Workload;
|
|
106
134
|
/**
|
|
@@ -122,11 +150,86 @@ export declare function selectWorkload(options?: AdaptiveWorkloadOptions): Workl
|
|
|
122
150
|
* -> if challenge, delegate to existing selectWorkload() with riskScore
|
|
123
151
|
*/
|
|
124
152
|
export declare function assess(options: AssessOptions): Promise<RiskAssessment>;
|
|
153
|
+
/**
|
|
154
|
+
* Measures SHA-256 hashing speed on Node.js to calibrate adaptive workload selection.
|
|
155
|
+
* Runs a small benchmark to estimate device performance.
|
|
156
|
+
*
|
|
157
|
+
* @param iterations - Number of SHA-256 hashes to run (default: 128)
|
|
158
|
+
* @returns Calibration object with iterations and measured duration
|
|
159
|
+
*/
|
|
125
160
|
export declare function calibrateNode(iterations?: number): ClientCalibration;
|
|
161
|
+
/**
|
|
162
|
+
* Alias for calibrateNode - measures device hashing speed for adaptive workload.
|
|
163
|
+
*/
|
|
126
164
|
export declare const calibrateClient: typeof calibrateNode;
|
|
165
|
+
/**
|
|
166
|
+
* Calibrate Argon2id on Node — measures device speed for the memory-hard algorithm.
|
|
167
|
+
* Uses a smaller iteration default (16) because each hash is ~6ms (mobile) vs microseconds for SHA.
|
|
168
|
+
* The returned shape is identical to `calibrateNode()` so `selectWorkload({calibration, algorithm:'argon2id'})` can consume it.
|
|
169
|
+
* Keep SHA `calibrateNode()` for `algorithm:'sha256'` — mismatched calibration will over/under-estimate.
|
|
170
|
+
*/
|
|
171
|
+
export declare function calibrateArgonNode(iterations?: number): Promise<ClientCalibration>;
|
|
172
|
+
/**
|
|
173
|
+
* Alias for calibrateArgonNode - measures Argon2id performance for adaptive workload.
|
|
174
|
+
*/
|
|
175
|
+
export declare const calibrateArgonClient: typeof calibrateArgonNode;
|
|
176
|
+
/**
|
|
177
|
+
* Resets Argon2id module cache for testing purposes.
|
|
178
|
+
* Should not be called in production code.
|
|
179
|
+
*/
|
|
180
|
+
export declare function __resetArgonForTesting(): void;
|
|
181
|
+
/**
|
|
182
|
+
* Creates cryptographically-signed challenge tokens for proof-of-work verification.
|
|
183
|
+
*
|
|
184
|
+
* Supports two call signatures:
|
|
185
|
+
* 1. `createChallenge(difficulty, amount, ttlSeconds)` - simple numeric params
|
|
186
|
+
* 2. `createChallenge(options)` - full options object with adaptive workload, rate limiting, etc.
|
|
187
|
+
*
|
|
188
|
+
* When `difficulty: 'auto'` is used, workload is selected based on risk score and calibration.
|
|
189
|
+
* Supports both SHA-256 and Argon2id algorithms (via `algorithm` option).
|
|
190
|
+
*
|
|
191
|
+
* @param difficultyOrOptions - Difficulty level (1-64) or options object
|
|
192
|
+
* @param amount - Number of challenges to create (default: 4)
|
|
193
|
+
* @param ttlSeconds - Token expiration in seconds (default: 30)
|
|
194
|
+
* @returns Array of signed challenge tokens
|
|
195
|
+
*/
|
|
127
196
|
export declare function createChallenge(difficulty?: number, amount?: number, ttlSeconds?: number): Promise<ChallengeToken[]>;
|
|
128
197
|
export declare function createChallenge(options: ChallengeOptions): Promise<ChallengeToken[]>;
|
|
198
|
+
/**
|
|
199
|
+
* Solves SHA-256 proof-of-work challenge(s) synchronously on Node.js.
|
|
200
|
+
* Does not support Argon2id challenges (use solveChallengeAsync for those).
|
|
201
|
+
*
|
|
202
|
+
* @param token - Single challenge token or array of tokens
|
|
203
|
+
* @param options - Optional constraints (maxIterations, maxDurationMs)
|
|
204
|
+
* @returns Solution(s) with nonce and hash, or undefined if unsolvable
|
|
205
|
+
*/
|
|
129
206
|
export declare function solveChallenge(token: ChallengeToken, options?: SolveChallengeOptions): ChallengeSolution | undefined;
|
|
130
207
|
export declare function solveChallenge(token: ChallengeToken[], options?: SolveChallengeOptions): ChallengeSolution[] | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* Solves proof-of-work challenge(s) asynchronously on Node.js.
|
|
210
|
+
* Supports both SHA-256 and Argon2id challenges.
|
|
211
|
+
*
|
|
212
|
+
* @param token - Single challenge token or array of tokens
|
|
213
|
+
* @param options - Optional constraints (maxIterations, maxDurationMs)
|
|
214
|
+
* @returns Promise resolving to solution(s) with nonce and hash, or undefined if unsolvable
|
|
215
|
+
*/
|
|
216
|
+
export declare function solveChallengeAsync(token: ChallengeToken, options?: SolveChallengeOptions): Promise<ChallengeSolution | undefined>;
|
|
217
|
+
export declare function solveChallengeAsync(token: ChallengeToken[], options?: SolveChallengeOptions): Promise<ChallengeSolution[] | undefined>;
|
|
218
|
+
/**
|
|
219
|
+
* Verifies that a proof-of-work solution correctly solves the challenge token(s).
|
|
220
|
+
*
|
|
221
|
+
* Validation steps:
|
|
222
|
+
* 1. JWT signature and expiration check
|
|
223
|
+
* 2. Hash verification (recomputed hash matches difficulty)
|
|
224
|
+
* 3. Context binding check (if context was provided)
|
|
225
|
+
* 4. Replay prevention (via ReplayStore if configured)
|
|
226
|
+
*
|
|
227
|
+
* Supports batch verification with atomic replay detection.
|
|
228
|
+
*
|
|
229
|
+
* @param token - Challenge token(s) to verify
|
|
230
|
+
* @param nonce - Solution nonce(s) or ChallengeSolution object(s)
|
|
231
|
+
* @param options - Verification options (replay prevention, context, rate limiting)
|
|
232
|
+
* @returns Result indicating validity or specific failure reason
|
|
233
|
+
*/
|
|
131
234
|
export declare function verifySolution(token: ChallengeToken | ChallengeToken[], nonce: number | string | Array<number | string> | ChallengeSolution | ChallengeSolution[], options?: VerifySolutionOptions): Promise<VerifySolutionResult>;
|
|
132
235
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EAIxB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EACV,aAAa,EAEb,cAAc,EAIf,MAAM,WAAW,CAAC;AAGnB,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/H,OAAO,EAAE,uBAAuB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|