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
package/dist/worker-client.js
CHANGED
|
@@ -9,7 +9,8 @@ export class WorkerUnavailableError extends Error {
|
|
|
9
9
|
function abortError() {
|
|
10
10
|
return new DOMException('Challenge solving aborted', 'AbortError');
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
const CANCEL_GRACE_MS = 250;
|
|
13
|
+
function solveInWorker(tokens, onProgress, signal, wasmMode = 'preferred', onBackend) {
|
|
13
14
|
return new Promise((resolve, reject) => {
|
|
14
15
|
if (typeof Worker === 'undefined') {
|
|
15
16
|
reject(new WorkerUnavailableError());
|
|
@@ -24,47 +25,96 @@ function solveInWorker(tokens, onProgress, signal) {
|
|
|
24
25
|
return;
|
|
25
26
|
}
|
|
26
27
|
const id = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;
|
|
27
|
-
|
|
28
|
+
let cancelTimer;
|
|
29
|
+
let cancelled = false;
|
|
30
|
+
const release = () => {
|
|
31
|
+
if (cancelTimer !== undefined)
|
|
32
|
+
clearTimeout(cancelTimer);
|
|
33
|
+
cancelTimer = undefined;
|
|
28
34
|
signal?.removeEventListener('abort', handleAbort);
|
|
35
|
+
};
|
|
36
|
+
const finish = () => {
|
|
37
|
+
release();
|
|
29
38
|
worker.terminate();
|
|
30
39
|
};
|
|
31
40
|
const handleAbort = () => {
|
|
32
|
-
|
|
33
|
-
|
|
41
|
+
if (cancelled)
|
|
42
|
+
return;
|
|
43
|
+
cancelled = true;
|
|
44
|
+
worker.postMessage({ type: 'cancel', id });
|
|
45
|
+
cancelTimer = setTimeout(() => {
|
|
46
|
+
finish();
|
|
47
|
+
reject(abortError());
|
|
48
|
+
}, CANCEL_GRACE_MS);
|
|
34
49
|
};
|
|
35
|
-
if (signal?.aborted) {
|
|
36
|
-
handleAbort();
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
signal?.addEventListener('abort', handleAbort, { once: true });
|
|
40
|
-
worker.addEventListener('error', () => {
|
|
41
|
-
cleanup();
|
|
42
|
-
reject(new WorkerUnavailableError('The solver worker failed to load'));
|
|
43
|
-
}, { once: true });
|
|
44
50
|
worker.addEventListener('message', (event) => {
|
|
45
51
|
const message = event.data;
|
|
46
52
|
if (!message || message.id !== id)
|
|
47
53
|
return;
|
|
54
|
+
if (message.type === 'cancelled') {
|
|
55
|
+
release();
|
|
56
|
+
reject(abortError());
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (message.type === 'backend' && message.backend) {
|
|
60
|
+
if (cancelled)
|
|
61
|
+
return;
|
|
62
|
+
try {
|
|
63
|
+
onBackend?.(message.backend);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// telemetry must never break solving
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (cancelled)
|
|
71
|
+
return;
|
|
48
72
|
if (message.type === 'progress' && message.progress !== undefined) {
|
|
49
73
|
onProgress?.(message.progress);
|
|
50
74
|
}
|
|
51
75
|
else if (message.type === 'result' && message.solutions) {
|
|
52
|
-
|
|
76
|
+
finish();
|
|
53
77
|
resolve(message.solutions);
|
|
54
78
|
}
|
|
55
79
|
else if (message.type === 'error') {
|
|
56
|
-
|
|
80
|
+
finish();
|
|
57
81
|
reject(new Error(message.error ?? 'Worker solving failed'));
|
|
58
82
|
}
|
|
59
83
|
});
|
|
60
|
-
worker.
|
|
84
|
+
worker.addEventListener('error', () => {
|
|
85
|
+
finish();
|
|
86
|
+
reject(new WorkerUnavailableError('The solver worker failed to load'));
|
|
87
|
+
}, { once: true });
|
|
88
|
+
if (signal?.aborted) {
|
|
89
|
+
finish();
|
|
90
|
+
reject(abortError());
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
signal?.addEventListener('abort', handleAbort, { once: true });
|
|
94
|
+
worker.postMessage({ type: 'solve', id, tokens, wasmMode });
|
|
61
95
|
});
|
|
62
96
|
}
|
|
63
|
-
export async function solveChallengeWithWorker(tokens, onProgress, signal, mode = 'preferred') {
|
|
64
|
-
if
|
|
97
|
+
export async function solveChallengeWithWorker(tokens, onProgress, signal, mode = 'preferred', wasmMode = 'preferred', onBackend) {
|
|
98
|
+
// Backwards compat: if wasmMode is an options object, normalize
|
|
99
|
+
// Also support legacy 4-arg calls where 5th arg is wasmMode string
|
|
100
|
+
let normalizedWasmMode = wasmMode;
|
|
101
|
+
let normalizedOnBackend = onBackend;
|
|
102
|
+
// If 5th arg looks like object with wasmMode property, handle (future proof)
|
|
103
|
+
if (typeof wasmMode === 'object' && wasmMode !== null && 'wasmMode' in wasmMode) {
|
|
104
|
+
const opts = wasmMode;
|
|
105
|
+
normalizedWasmMode = opts.wasmMode ?? 'preferred';
|
|
106
|
+
normalizedOnBackend = opts.onBackend;
|
|
107
|
+
}
|
|
108
|
+
if (normalizedWasmMode !== 'preferred' && normalizedWasmMode !== 'disabled') {
|
|
109
|
+
normalizedWasmMode = 'preferred';
|
|
110
|
+
}
|
|
111
|
+
if (mode === 'disabled') {
|
|
112
|
+
// Even when worker disabled, we still solve on main thread via JS (no wasm on main thread for v1)
|
|
113
|
+
// Telemetry for main thread fallback is not needed
|
|
65
114
|
return solveChallenge(tokens, onProgress, signal);
|
|
115
|
+
}
|
|
66
116
|
try {
|
|
67
|
-
return await solveInWorker(tokens, onProgress, signal);
|
|
117
|
+
return await solveInWorker(tokens, onProgress, signal, normalizedWasmMode, normalizedOnBackend);
|
|
68
118
|
}
|
|
69
119
|
catch (error) {
|
|
70
120
|
if (mode === 'preferred'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-client.js","sourceRoot":"","sources":["../src/worker-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAEf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-client.js","sourceRoot":"","sources":["../src/worker-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ribaunt",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "A PoW CAPTCHA library that provides stateless and secure user verification",
|
|
5
5
|
"homepage": "https://ribaunt.com",
|
|
6
6
|
"bugs": {
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"./worker-client": {
|
|
37
37
|
"types": "./dist/worker-client.d.ts",
|
|
38
38
|
"default": "./dist/worker-client.js"
|
|
39
|
-
}
|
|
39
|
+
},
|
|
40
|
+
"./package.json": "./package.json"
|
|
40
41
|
},
|
|
41
42
|
"repository": {
|
|
42
43
|
"type": "git",
|
|
@@ -45,29 +46,34 @@
|
|
|
45
46
|
"license": "GPL-3.0-only",
|
|
46
47
|
"author": "ribaunt",
|
|
47
48
|
"type": "module",
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"test": "vitest run",
|
|
51
|
-
"test:coverage": "vitest run --coverage"
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=22"
|
|
52
51
|
},
|
|
53
52
|
"devDependencies": {
|
|
53
|
+
"@eslint/js": "^10.0.1",
|
|
54
54
|
"@types/jsonwebtoken": "^9.0.10",
|
|
55
55
|
"@types/node": "^24.6.2",
|
|
56
56
|
"@types/react": "^19.2.14",
|
|
57
57
|
"@types/react-dom": "^19.2.3",
|
|
58
58
|
"@vitest/coverage-v8": "^4.1.9",
|
|
59
|
+
"assemblyscript": "0.28.20",
|
|
59
60
|
"dotenv": "^17.2.3",
|
|
61
|
+
"eslint": "^10.9.0",
|
|
62
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
63
|
+
"globals": "^17.11.0",
|
|
64
|
+
"ioredis": "^6.0.0",
|
|
60
65
|
"jsdom": "^27.0.1",
|
|
61
66
|
"react": "^19.2.4",
|
|
62
67
|
"react-dom": "^19.2.4",
|
|
63
68
|
"typescript": "^5.9.3",
|
|
69
|
+
"typescript-eslint": "^8.67.0",
|
|
64
70
|
"vitest": "^4.1.9"
|
|
65
71
|
},
|
|
66
72
|
"peerDependencies": {
|
|
67
73
|
"ioredis": ">=5.0.0",
|
|
68
|
-
"redis": ">=4.0.0",
|
|
69
74
|
"react": "^18.0.0 || ^19.0.0",
|
|
70
|
-
"react-dom": "^18.0.0 || ^19.0.0"
|
|
75
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
76
|
+
"redis": ">=4.0.0"
|
|
71
77
|
},
|
|
72
78
|
"peerDependenciesMeta": {
|
|
73
79
|
"ioredis": {
|
|
@@ -85,5 +91,12 @@
|
|
|
85
91
|
},
|
|
86
92
|
"dependencies": {
|
|
87
93
|
"jsonwebtoken": "^9.0.2"
|
|
94
|
+
},
|
|
95
|
+
"scripts": {
|
|
96
|
+
"build": "node scripts/clean.mjs && node scripts/build-wasm.mjs && tsc && tsc --project tsconfig.cjs.json && node scripts/prepare-cjs.mjs && node scripts/prepare-demo.mjs",
|
|
97
|
+
"build:wasm": "node scripts/build-wasm.mjs",
|
|
98
|
+
"lint": "eslint .",
|
|
99
|
+
"test": "pnpm run build && vitest run",
|
|
100
|
+
"test:coverage": "pnpm run build && vitest run --coverage"
|
|
88
101
|
}
|
|
89
|
-
}
|
|
102
|
+
}
|
package/context7.json
DELETED