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.
- package/README.md +113 -10
- package/demo/lib/ribaunt-solver.wasm +0 -0
- package/demo/lib/solver-worker.js +174 -0
- package/demo/lib/solver-worker.js.map +1 -0
- package/demo/lib/solver.js +135 -0
- package/demo/lib/solver.js.map +1 -0
- package/demo/lib/wasm-solver.js +296 -0
- package/demo/lib/wasm-solver.js.map +1 -0
- package/demo/lib/widget-browser.js +9 -0
- package/demo/lib/widget-browser.js.map +1 -0
- package/demo/lib/widget.js +942 -0
- package/demo/lib/widget.js.map +1 -0
- package/demo/lib/worker-client.js +128 -0
- package/demo/lib/worker-client.js.map +1 -0
- package/dist/cjs/index.d.ts +48 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +196 -17
- 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 +48 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +193 -16
- 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 +166 -7
- 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 +4 -1
- package/dist/widget-react.d.ts.map +1 -1
- package/dist/widget-react.js +102 -14
- package/dist/widget-react.js.map +1 -1
- package/dist/widget.d.ts +42 -14
- package/dist/widget.d.ts.map +1 -1
- package/dist/widget.js +254 -12
- 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 +69 -19
- package/dist/worker-client.js.map +1 -1
- package/package.json +22 -9
- package/context7.json +0 -4
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript adapter for the WASM SHA-256 solver.
|
|
3
|
+
* Contains all WASM-specific implementation details and validates boundary values.
|
|
4
|
+
*/
|
|
5
|
+
let wasmInstance = null;
|
|
6
|
+
let wasmState = 'uninitialized';
|
|
7
|
+
let loadPromise = null;
|
|
8
|
+
let cachedChallenge = null;
|
|
9
|
+
let cachedPtr = 0;
|
|
10
|
+
let cachedLen = 0;
|
|
11
|
+
const VALID_HASH_RE = /^[a-f0-9]{64}$/;
|
|
12
|
+
const VALID_NONCE_RE = /^\d+$/;
|
|
13
|
+
const VALID_SHA256_HEX_RE = /^[a-f0-9]{64}$/i;
|
|
14
|
+
// Embedded SHA-256 of dist/ribaunt-solver.wasm for integrity verification.
|
|
15
|
+
// Recompute with `shasum -a 256 dist/ribaunt-solver.wasm` after rebuilding wasm.
|
|
16
|
+
const EMBEDDED_WASM_SHA256 = '774398452596d67491a6ee5bd6291c9665dc4fc1a83db15f14dbbb4058f74c3e';
|
|
17
|
+
function isValidHash(hash) {
|
|
18
|
+
return VALID_HASH_RE.test(hash);
|
|
19
|
+
}
|
|
20
|
+
function isValidNonce(nonce) {
|
|
21
|
+
return nonce.length > 0 && VALID_NONCE_RE.test(nonce);
|
|
22
|
+
}
|
|
23
|
+
function bytesToHex(bytes) {
|
|
24
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
25
|
+
}
|
|
26
|
+
async function sha256Hex(bytes) {
|
|
27
|
+
const subtle = typeof crypto !== 'undefined' ? crypto.subtle : undefined;
|
|
28
|
+
if (subtle) {
|
|
29
|
+
const digest = await subtle.digest('SHA-256', bytes);
|
|
30
|
+
return bytesToHex(new Uint8Array(digest));
|
|
31
|
+
}
|
|
32
|
+
// Node fallback when Web Crypto is unavailable
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
+
const nodeCrypto = await import('node:crypto');
|
|
35
|
+
return nodeCrypto.createHash('sha256').update(bytes).digest('hex');
|
|
36
|
+
}
|
|
37
|
+
function getExpectedWasmSha256() {
|
|
38
|
+
const g = globalThis;
|
|
39
|
+
const fromGlobal = typeof g.__RIBAUNT_WASM_SHA256__ === 'string' ? g.__RIBAUNT_WASM_SHA256__.trim().toLowerCase() : '';
|
|
40
|
+
if (fromGlobal && VALID_SHA256_HEX_RE.test(fromGlobal))
|
|
41
|
+
return fromGlobal;
|
|
42
|
+
const proc = typeof process !== 'undefined' ? process : undefined;
|
|
43
|
+
const fromEnv = proc?.env?.RIBAUNT_WASM_SHA256?.trim().toLowerCase() ?? '';
|
|
44
|
+
if (fromEnv && VALID_SHA256_HEX_RE.test(fromEnv))
|
|
45
|
+
return fromEnv;
|
|
46
|
+
if (EMBEDDED_WASM_SHA256 && VALID_SHA256_HEX_RE.test(EMBEDDED_WASM_SHA256))
|
|
47
|
+
return EMBEDDED_WASM_SHA256.toLowerCase();
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
async function loadWasmBytes() {
|
|
51
|
+
const candidates = [];
|
|
52
|
+
try {
|
|
53
|
+
candidates.push(new URL('./ribaunt-solver.wasm', import.meta.url));
|
|
54
|
+
}
|
|
55
|
+
catch (_e) {
|
|
56
|
+
void _e;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
candidates.push(new URL('../dist/ribaunt-solver.wasm', import.meta.url));
|
|
60
|
+
}
|
|
61
|
+
catch (_e) {
|
|
62
|
+
void _e;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
candidates.push(new URL('./dist/ribaunt-solver.wasm', import.meta.url));
|
|
66
|
+
}
|
|
67
|
+
catch (_e) {
|
|
68
|
+
void _e;
|
|
69
|
+
}
|
|
70
|
+
// Browser / worker path: try fetch for each candidate
|
|
71
|
+
if (typeof fetch === 'function') {
|
|
72
|
+
for (const cand of candidates) {
|
|
73
|
+
try {
|
|
74
|
+
const res = await fetch(cand);
|
|
75
|
+
if (res.ok) {
|
|
76
|
+
const buf = await res.arrayBuffer();
|
|
77
|
+
if (buf.byteLength > 0)
|
|
78
|
+
return new Uint8Array(buf);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (_e) {
|
|
82
|
+
void _e;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Node.js fallback: try fs for candidates plus cwd
|
|
87
|
+
const fsCandidates = [...candidates];
|
|
88
|
+
try {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
+
const pathMod = await import('node:path');
|
|
91
|
+
const cwd = typeof process !== 'undefined' ? process.cwd() : '';
|
|
92
|
+
if (cwd) {
|
|
93
|
+
fsCandidates.push(pathMod.resolve(cwd, 'dist/ribaunt-solver.wasm'));
|
|
94
|
+
fsCandidates.push(pathMod.resolve(cwd, 'dist/cjs/ribaunt-solver.wasm'));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (_e) {
|
|
98
|
+
void _e;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
+
const fs = await import('node:fs/promises');
|
|
103
|
+
for (const cand of fsCandidates) {
|
|
104
|
+
try {
|
|
105
|
+
const bytes = await fs.readFile(cand);
|
|
106
|
+
if (bytes && bytes.length > 0)
|
|
107
|
+
return bytes;
|
|
108
|
+
}
|
|
109
|
+
catch (_e) {
|
|
110
|
+
void _e;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (_e) {
|
|
115
|
+
void _e;
|
|
116
|
+
}
|
|
117
|
+
throw new Error('WASM asset fetch failure');
|
|
118
|
+
}
|
|
119
|
+
async function instantiateWasm() {
|
|
120
|
+
if (typeof WebAssembly === 'undefined')
|
|
121
|
+
return false;
|
|
122
|
+
try {
|
|
123
|
+
const bytes = await loadWasmBytes();
|
|
124
|
+
const expectedSha256 = getExpectedWasmSha256();
|
|
125
|
+
if (!expectedSha256)
|
|
126
|
+
return false;
|
|
127
|
+
const actualSha256 = await sha256Hex(bytes);
|
|
128
|
+
if (actualSha256 !== expectedSha256)
|
|
129
|
+
return false;
|
|
130
|
+
const mod = await WebAssembly.compile(bytes);
|
|
131
|
+
const instance = await WebAssembly.instantiate(mod, {});
|
|
132
|
+
const exp = instance.exports;
|
|
133
|
+
if (!exp.memory || typeof exp.solve_batch !== 'function' || typeof exp.get_hash_ptr !== 'function' || typeof exp.alloc !== 'function') {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
wasmInstance = instance;
|
|
137
|
+
wasmState = 'wasm-ready';
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export async function ensureWasm() {
|
|
145
|
+
if (wasmState === 'wasm-ready')
|
|
146
|
+
return true;
|
|
147
|
+
if (wasmState === 'wasm-unavailable')
|
|
148
|
+
return false;
|
|
149
|
+
if (loadPromise)
|
|
150
|
+
return loadPromise;
|
|
151
|
+
loadPromise = (async () => {
|
|
152
|
+
const ok = await instantiateWasm();
|
|
153
|
+
wasmState = ok ? 'wasm-ready' : 'wasm-unavailable';
|
|
154
|
+
return ok;
|
|
155
|
+
})();
|
|
156
|
+
return loadPromise;
|
|
157
|
+
}
|
|
158
|
+
export function getWasmState() {
|
|
159
|
+
return wasmState;
|
|
160
|
+
}
|
|
161
|
+
export function resetWasmForTesting() {
|
|
162
|
+
wasmInstance = null;
|
|
163
|
+
wasmState = 'uninitialized';
|
|
164
|
+
loadPromise = null;
|
|
165
|
+
cachedChallenge = null;
|
|
166
|
+
cachedPtr = 0;
|
|
167
|
+
cachedLen = 0;
|
|
168
|
+
}
|
|
169
|
+
// For testing: allow injecting failure or mock
|
|
170
|
+
export function setWasmUnavailableForTesting() {
|
|
171
|
+
wasmState = 'wasm-unavailable';
|
|
172
|
+
wasmInstance = null;
|
|
173
|
+
loadPromise = Promise.resolve(false);
|
|
174
|
+
}
|
|
175
|
+
export function isWasmAvailable() {
|
|
176
|
+
return wasmState === 'wasm-ready';
|
|
177
|
+
}
|
|
178
|
+
export function resetWasmHeap() {
|
|
179
|
+
cachedChallenge = null;
|
|
180
|
+
cachedPtr = 0;
|
|
181
|
+
cachedLen = 0;
|
|
182
|
+
if (wasmInstance) {
|
|
183
|
+
try {
|
|
184
|
+
const exp = wasmInstance.exports;
|
|
185
|
+
exp.reset_heap?.();
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// ignore
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Synchronous batch solver - must be called after ensureWasm() succeeds.
|
|
194
|
+
* Encodes challenge as UTF-8, allocates in WASM memory, calls solve_batch,
|
|
195
|
+
* validates and returns result.
|
|
196
|
+
*/
|
|
197
|
+
export function solveBatch(challenge, startNonce, batchSize, difficulty) {
|
|
198
|
+
if (wasmState !== 'wasm-ready' || !wasmInstance) {
|
|
199
|
+
throw new Error('WASM solver not initialized');
|
|
200
|
+
}
|
|
201
|
+
// Validate inputs
|
|
202
|
+
if (!Number.isInteger(difficulty) || difficulty < 1 || difficulty > 64) {
|
|
203
|
+
throw new Error('Invalid difficulty');
|
|
204
|
+
}
|
|
205
|
+
if (!Number.isInteger(batchSize) || batchSize <= 0 || batchSize > 16384) {
|
|
206
|
+
throw new Error('Invalid batchSize');
|
|
207
|
+
}
|
|
208
|
+
if (!Number.isInteger(startNonce) || startNonce < 0 || !Number.isFinite(startNonce)) {
|
|
209
|
+
throw new Error('Invalid startNonce');
|
|
210
|
+
}
|
|
211
|
+
if (typeof challenge !== 'string') {
|
|
212
|
+
throw new Error('Invalid challenge');
|
|
213
|
+
}
|
|
214
|
+
// Overflow guard before calling WASM (also checked inside)
|
|
215
|
+
if (startNonce > 0xffffffff - batchSize + 1) {
|
|
216
|
+
throw new Error('Nonce range exceeds u32');
|
|
217
|
+
}
|
|
218
|
+
// Also guard signed limit to avoid sentinel confusion (max 2^31-1 for v1); allow final batch where last nonce is 0x7fffffff
|
|
219
|
+
if (startNonce > 0x7fffffff || startNonce + batchSize > 0x7fffffff + 1) {
|
|
220
|
+
throw new Error('Nonce exceeds wasm signed limit');
|
|
221
|
+
}
|
|
222
|
+
const exp = wasmInstance.exports;
|
|
223
|
+
const mem = exp.memory;
|
|
224
|
+
let ptr;
|
|
225
|
+
let challengeLen;
|
|
226
|
+
if (cachedChallenge === challenge && cachedPtr !== 0) {
|
|
227
|
+
ptr = cachedPtr;
|
|
228
|
+
challengeLen = cachedLen;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
// Encode challenge as UTF-8 bytes
|
|
232
|
+
const encoder = new TextEncoder();
|
|
233
|
+
const challengeBytes = encoder.encode(challenge);
|
|
234
|
+
if (challengeBytes.length > 1014) {
|
|
235
|
+
throw new Error('Challenge too long for WASM solver');
|
|
236
|
+
}
|
|
237
|
+
const newPtr = exp.alloc(challengeBytes.length);
|
|
238
|
+
// Refresh view after possible growth
|
|
239
|
+
const memU8 = new Uint8Array(mem.buffer);
|
|
240
|
+
// Bounds check: ensure ptr + len within memory
|
|
241
|
+
if (newPtr < 0 || newPtr + challengeBytes.length > memU8.length) {
|
|
242
|
+
throw new Error('WASM memory allocation out of bounds');
|
|
243
|
+
}
|
|
244
|
+
memU8.set(challengeBytes, newPtr);
|
|
245
|
+
cachedChallenge = challenge;
|
|
246
|
+
cachedPtr = newPtr;
|
|
247
|
+
cachedLen = challengeBytes.length;
|
|
248
|
+
ptr = newPtr;
|
|
249
|
+
challengeLen = cachedLen;
|
|
250
|
+
}
|
|
251
|
+
let result;
|
|
252
|
+
try {
|
|
253
|
+
result = exp.solve_batch(ptr, challengeLen, startNonce >>> 0, batchSize, difficulty);
|
|
254
|
+
}
|
|
255
|
+
catch (e) {
|
|
256
|
+
throw new Error(`WASM solver trap: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
257
|
+
}
|
|
258
|
+
if (result === -1) {
|
|
259
|
+
return { found: false };
|
|
260
|
+
}
|
|
261
|
+
if (result === -2) {
|
|
262
|
+
throw new Error('WASM solver overflow');
|
|
263
|
+
}
|
|
264
|
+
if (result < 0) {
|
|
265
|
+
throw new Error(`WASM solver internal error: ${result}`);
|
|
266
|
+
}
|
|
267
|
+
// Validate nonce
|
|
268
|
+
const nonceStr = String(result >>> 0);
|
|
269
|
+
if (!isValidNonce(nonceStr)) {
|
|
270
|
+
throw new Error('WASM returned invalid nonce');
|
|
271
|
+
}
|
|
272
|
+
// Read hash
|
|
273
|
+
const hashPtr = exp.get_hash_ptr();
|
|
274
|
+
const hashLen = 32;
|
|
275
|
+
const mem2 = new Uint8Array(mem.buffer);
|
|
276
|
+
if (hashPtr < 0 || hashPtr + hashLen > mem2.length) {
|
|
277
|
+
throw new Error('WASM hash pointer out of bounds');
|
|
278
|
+
}
|
|
279
|
+
const hashBytes = mem2.slice(hashPtr, hashPtr + hashLen);
|
|
280
|
+
const hashHex = Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
281
|
+
if (!isValidHash(hashHex)) {
|
|
282
|
+
throw new Error('WASM returned invalid hash');
|
|
283
|
+
}
|
|
284
|
+
if (!hashHex.startsWith('0'.repeat(difficulty))) {
|
|
285
|
+
throw new Error('WASM returned hash that does not satisfy difficulty');
|
|
286
|
+
}
|
|
287
|
+
// Additional validation: ensure hash corresponds to challenge+nonce (defense in depth)
|
|
288
|
+
// We trust WASM but validate shape; deeper verification (re-hashing in JS) could be done
|
|
289
|
+
// but would duplicate work. We just validate invariants.
|
|
290
|
+
return { found: true, nonce: nonceStr, hash: hashHex };
|
|
291
|
+
}
|
|
292
|
+
// Re-export for worker to use TextEncoder check
|
|
293
|
+
export function isTextEncoderAvailable() {
|
|
294
|
+
return typeof TextEncoder !== 'undefined';
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=wasm-solver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-solver.js","sourceRoot":"","sources":["../src/wasm-solver.ts"],"names":[],"mappings":"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"}
|
package/dist/widget-browser.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Browser-only entry point for the Ribaunt Widget
|
|
3
3
|
* This file only exports the web component, not the server-side functions
|
|
4
4
|
*/
|
|
5
|
-
export { RibauntWidget } from './widget.js';
|
|
6
|
-
export {
|
|
5
|
+
export { RibauntWidget, WidgetError } from './widget.js';
|
|
6
|
+
export type { RibauntWidgetElement, WidgetErrorCode, WidgetErrorDetail, WidgetState, WidgetStateDetail, WidgetVerifyDetail, } from './widget.js';
|
|
7
|
+
export { calibrateBrowser, calibrateClient, type ChallengeSolution } from './solver.js';
|
|
7
8
|
import './widget.js';
|
|
8
9
|
//# sourceMappingURL=widget-browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-browser.d.ts","sourceRoot":"","sources":["../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"widget-browser.d.ts","sourceRoot":"","sources":["../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGxF,OAAO,aAAa,CAAC"}
|
package/dist/widget-browser.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Browser-only entry point for the Ribaunt Widget
|
|
3
3
|
* This file only exports the web component, not the server-side functions
|
|
4
4
|
*/
|
|
5
|
-
export { RibauntWidget } from './widget.js';
|
|
5
|
+
export { RibauntWidget, WidgetError } from './widget.js';
|
|
6
6
|
export { calibrateBrowser, calibrateClient } from './solver.js';
|
|
7
7
|
// Auto-register the widget when imported
|
|
8
8
|
import './widget.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-browser.js","sourceRoot":"","sources":["../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"widget-browser.js","sourceRoot":"","sources":["../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AASzD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AAExF,yCAAyC;AACzC,OAAO,aAAa,CAAC"}
|
package/dist/widget-react.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { RibauntWidgetElement, WidgetErrorDetail, WidgetState, WidgetStateDetail, WidgetVerifyDetail } from './widget.js';
|
|
3
|
-
import type { WorkerMode } from './worker-client.js';
|
|
3
|
+
import type { WorkerMode, WasmMode } from './worker-client.js';
|
|
4
|
+
export type { RibauntWidgetElement, WidgetErrorDetail, WidgetState, WidgetStateDetail, WidgetVerifyDetail, } from './widget.js';
|
|
4
5
|
export interface RibauntWidgetProps extends Omit<React.HTMLAttributes<RibauntWidgetElement>, 'onError' | 'onLoad'> {
|
|
5
6
|
challengeEndpoint?: string;
|
|
6
7
|
verifyEndpoint?: string;
|
|
@@ -9,8 +10,10 @@ export interface RibauntWidgetProps extends Omit<React.HTMLAttributes<RibauntWid
|
|
|
9
10
|
warningMessage?: string;
|
|
10
11
|
solveTimeout?: number | string;
|
|
11
12
|
workerMode?: WorkerMode;
|
|
13
|
+
wasmMode?: WasmMode;
|
|
12
14
|
challengeMethod?: 'GET' | 'POST';
|
|
13
15
|
calibrate?: boolean | string;
|
|
16
|
+
showProgress?: boolean | string;
|
|
14
17
|
disabled?: boolean | string;
|
|
15
18
|
fallback?: React.ReactNode;
|
|
16
19
|
onVerify?: (detail: WidgetVerifyDetail) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-react.d.ts","sourceRoot":"","sources":["../src/widget-react.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuE,MAAM,OAAO,CAAC;AAC5F,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"widget-react.d.ts","sourceRoot":"","sources":["../src/widget-react.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuE,MAAM,OAAO,CAAC;AAC5F,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/D,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAChH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;IACnD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1F;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,WAAW,GAAG,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAgHD;;;GAGG;AACH,eAAO,MAAM,aAAa,gGAwPzB,CAAC;AAIF,eAAe,aAAa,CAAC"}
|
package/dist/widget-react.js
CHANGED
|
@@ -8,7 +8,42 @@ function syncAttribute(element, name, value) {
|
|
|
8
8
|
}
|
|
9
9
|
element.setAttribute(name, typeof value === 'boolean' ? 'true' : String(value));
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
const HANDLER_PROP_PATTERN = /^on[A-Z]/;
|
|
12
|
+
function toDomEventType(key) {
|
|
13
|
+
return key.slice(2).toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Applies non-widget HTML props (title, className, data-*, ...) to the
|
|
17
|
+
* custom element as attributes, and removes attributes for props that are
|
|
18
|
+
* no longer present. Handler props (onClick, ...) and non-serializable
|
|
19
|
+
* values (functions, objects) are ignored here; handlers are bound as real
|
|
20
|
+
* event listeners because assigning `element.onClick` does nothing.
|
|
21
|
+
*/
|
|
22
|
+
const appliedPropsCache = new WeakMap();
|
|
23
|
+
function applyStandardProps(element, props) {
|
|
24
|
+
const applied = new Set();
|
|
25
|
+
Object.entries(props).forEach(([key, value]) => {
|
|
26
|
+
if (key === 'children'
|
|
27
|
+
|| value === undefined
|
|
28
|
+
|| value === null
|
|
29
|
+
|| typeof value === 'function'
|
|
30
|
+
|| typeof value === 'object'
|
|
31
|
+
|| HANDLER_PROP_PATTERN.test(key)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
element.setAttribute(key, value === true ? '' : String(value));
|
|
35
|
+
applied.add(key);
|
|
36
|
+
});
|
|
37
|
+
const previous = appliedPropsCache.get(element);
|
|
38
|
+
if (previous) {
|
|
39
|
+
for (const key of previous) {
|
|
40
|
+
if (!applied.has(key))
|
|
41
|
+
element.removeAttribute(key);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
appliedPropsCache.set(element, applied);
|
|
45
|
+
}
|
|
46
|
+
function syncWidgetProps(element, { challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, workerMode, wasmMode, challengeMethod, calibrate, showProgress, disabled, autoVerify, }) {
|
|
12
47
|
syncAttribute(element, 'challenge-endpoint', challengeEndpoint);
|
|
13
48
|
syncAttribute(element, 'verify-endpoint', verifyEndpoint);
|
|
14
49
|
syncAttribute(element, 'auto-verify', autoVerify);
|
|
@@ -16,15 +51,25 @@ function syncWidgetProps(element, { challengeEndpoint, verifyEndpoint, showWarni
|
|
|
16
51
|
syncAttribute(element, 'warning-message', warningMessage);
|
|
17
52
|
syncAttribute(element, 'solve-timeout', solveTimeout);
|
|
18
53
|
syncAttribute(element, 'worker-mode', workerMode);
|
|
54
|
+
syncAttribute(element, 'wasm-mode', wasmMode);
|
|
19
55
|
syncAttribute(element, 'challenge-method', challengeMethod);
|
|
20
56
|
syncAttribute(element, 'calibrate', calibrate);
|
|
57
|
+
// showProgress is tri-state, not presence-based: the widget hides progress
|
|
58
|
+
// only when the attribute is present with literal value "false", so false
|
|
59
|
+
// must be passed through verbatim instead of removing the attribute.
|
|
60
|
+
if (showProgress === undefined) {
|
|
61
|
+
element.removeAttribute('show-progress');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
element.setAttribute('show-progress', String(showProgress));
|
|
65
|
+
}
|
|
21
66
|
syncAttribute(element, 'disabled', disabled);
|
|
22
67
|
}
|
|
23
68
|
/**
|
|
24
69
|
* React wrapper for the Ribaunt Web Component.
|
|
25
70
|
* Safely loads the web component dynamically, avoiding Next.js SSR issues.
|
|
26
71
|
*/
|
|
27
|
-
export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, workerMode, challengeMethod, calibrate, disabled, autoVerify, fallback, onVerify, onError, onStateChange, onReady, onLoad, onEvent, ...props }, ref) => {
|
|
72
|
+
export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, showWarning, warningMessage, solveTimeout, workerMode, wasmMode, challengeMethod, calibrate, showProgress, disabled, autoVerify, fallback, onVerify, onError, onStateChange, onReady, onLoad, onEvent, ...props }, ref) => {
|
|
28
73
|
const widgetRef = useRef(null);
|
|
29
74
|
const containerRef = useRef(null);
|
|
30
75
|
const [isLoading, setIsLoading] = useState(true);
|
|
@@ -36,8 +81,30 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
36
81
|
onLoad,
|
|
37
82
|
onEvent,
|
|
38
83
|
});
|
|
84
|
+
const handlersRef = useRef(new Map());
|
|
85
|
+
const boundEventTypesRef = useRef(new Set());
|
|
86
|
+
const nativeDispatcherRef = useRef((event) => {
|
|
87
|
+
for (const handler of handlersRef.current.get(event.type) ?? []) {
|
|
88
|
+
handler(event);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
39
91
|
const hasStateEventRef = useRef(false);
|
|
40
92
|
const hasReadyRef = useRef(false);
|
|
93
|
+
const standardProps = {};
|
|
94
|
+
const nextHandlers = new Map();
|
|
95
|
+
Object.entries(props).forEach(([key, value]) => {
|
|
96
|
+
if (value === undefined)
|
|
97
|
+
return;
|
|
98
|
+
if (HANDLER_PROP_PATTERN.test(key) && typeof value === 'function') {
|
|
99
|
+
const eventType = toDomEventType(key);
|
|
100
|
+
const listeners = nextHandlers.get(eventType) ?? [];
|
|
101
|
+
listeners.push(value);
|
|
102
|
+
nextHandlers.set(eventType, listeners);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
standardProps[key] = value;
|
|
106
|
+
});
|
|
107
|
+
handlersRef.current = nextHandlers;
|
|
41
108
|
useImperativeHandle(ref, () => ({
|
|
42
109
|
reset: () => widgetRef.current?.reset?.(),
|
|
43
110
|
getState: () => widgetRef.current?.getState?.() ?? '',
|
|
@@ -84,18 +151,6 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
84
151
|
widget.addEventListener('verify', handleVerify);
|
|
85
152
|
widget.addEventListener('error', handleError);
|
|
86
153
|
widget.addEventListener('state-change', handleStateChange);
|
|
87
|
-
// Apply any remaining standard HTML attributes to the element
|
|
88
|
-
Object.entries(props).forEach(([key, value]) => {
|
|
89
|
-
if (value !== undefined) {
|
|
90
|
-
// Check if it's a valid property of the HTML element, if so set it
|
|
91
|
-
if (key in widget) {
|
|
92
|
-
widget[key] = value;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
widget.setAttribute(key, String(value));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
154
|
syncWidgetProps(widget, {
|
|
100
155
|
challengeEndpoint,
|
|
101
156
|
verifyEndpoint,
|
|
@@ -104,8 +159,10 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
104
159
|
warningMessage,
|
|
105
160
|
solveTimeout,
|
|
106
161
|
workerMode,
|
|
162
|
+
wasmMode,
|
|
107
163
|
challengeMethod,
|
|
108
164
|
calibrate,
|
|
165
|
+
showProgress,
|
|
109
166
|
disabled,
|
|
110
167
|
});
|
|
111
168
|
containerRef.current.appendChild(widget);
|
|
@@ -129,15 +186,42 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
129
186
|
callbacksRef.current.onEvent?.('state-change', detail);
|
|
130
187
|
}
|
|
131
188
|
}, 0);
|
|
189
|
+
// The dispatcher is a stable ref created once, so capturing it here is
|
|
190
|
+
// safe and keeps the cleanup function self-contained.
|
|
191
|
+
const dispatchNativeEvent = nativeDispatcherRef.current;
|
|
132
192
|
return () => {
|
|
133
193
|
clearTimeout(fallbackTimer);
|
|
134
194
|
widget.removeEventListener('verify', handleVerify);
|
|
135
195
|
widget.removeEventListener('error', handleError);
|
|
136
196
|
widget.removeEventListener('state-change', handleStateChange);
|
|
197
|
+
for (const eventType of boundEventTypesRef.current) {
|
|
198
|
+
widget.removeEventListener(eventType, dispatchNativeEvent);
|
|
199
|
+
}
|
|
200
|
+
boundEventTypesRef.current = new Set();
|
|
201
|
+
handlersRef.current = new Map();
|
|
137
202
|
widget.remove();
|
|
138
203
|
widgetRef.current = null;
|
|
139
204
|
};
|
|
205
|
+
// Creation-only effect: prop changes are synced to the element by the
|
|
206
|
+
// effects below, so re-creating the element on every prop change would
|
|
207
|
+
// reset the widget and restart any verification in flight.
|
|
208
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
140
209
|
}, [isLoading]);
|
|
210
|
+
// Re-apply standard HTML props after every render so updates propagate
|
|
211
|
+
// to the imperatively-created element (React never re-renders it), and
|
|
212
|
+
// bind native listeners for any newly-seen handler props (onClick, ...).
|
|
213
|
+
useEffect(() => {
|
|
214
|
+
const widget = widgetRef.current;
|
|
215
|
+
if (!widget)
|
|
216
|
+
return;
|
|
217
|
+
applyStandardProps(widget, standardProps);
|
|
218
|
+
for (const eventType of handlersRef.current.keys()) {
|
|
219
|
+
if (boundEventTypesRef.current.has(eventType))
|
|
220
|
+
continue;
|
|
221
|
+
boundEventTypesRef.current.add(eventType);
|
|
222
|
+
widget.addEventListener(eventType, nativeDispatcherRef.current);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
141
225
|
useEffect(() => {
|
|
142
226
|
if (!widgetRef.current)
|
|
143
227
|
return;
|
|
@@ -149,8 +233,10 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
149
233
|
warningMessage,
|
|
150
234
|
solveTimeout,
|
|
151
235
|
workerMode,
|
|
236
|
+
wasmMode,
|
|
152
237
|
challengeMethod,
|
|
153
238
|
calibrate,
|
|
239
|
+
showProgress,
|
|
154
240
|
disabled,
|
|
155
241
|
});
|
|
156
242
|
}, [
|
|
@@ -161,8 +247,10 @@ export const RibauntWidget = forwardRef(({ challengeEndpoint, verifyEndpoint, sh
|
|
|
161
247
|
warningMessage,
|
|
162
248
|
solveTimeout,
|
|
163
249
|
workerMode,
|
|
250
|
+
wasmMode,
|
|
164
251
|
challengeMethod,
|
|
165
252
|
calibrate,
|
|
253
|
+
showProgress,
|
|
166
254
|
disabled,
|
|
167
255
|
]);
|
|
168
256
|
return isLoading ? (fallback ?? (_jsxs(_Fragment, { children: [_jsx("style", { children: `
|
package/dist/widget-react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-react.js","sourceRoot":"","sources":["../src/widget-react.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"widget-react.js","sourceRoot":"","sources":["../src/widget-react.tsx"],"names":[],"mappings":"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"}
|