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