@prosopo/provider 5.3.1 → 5.3.3
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/.turbo/turbo-build$colon$cjs.log +11 -10
- package/.turbo/turbo-build$colon$tsc.log +25 -25
- package/.turbo/turbo-build.log +12 -11
- package/CHANGELOG.md +74 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +9 -4
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.powFallback.test.js +2 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.powFallback.test.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts +10 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +17 -4
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/ja4.d.ts.map +1 -1
- package/dist/api/ja4.js +1 -1
- package/dist/api/ja4.js.map +1 -1
- package/dist/api/rawTlsSignalsMiddleware.d.ts +19 -0
- package/dist/api/rawTlsSignalsMiddleware.d.ts.map +1 -0
- package/dist/api/rawTlsSignalsMiddleware.js +82 -0
- package/dist/api/rawTlsSignalsMiddleware.js.map +1 -0
- package/dist/api/startProviderApi.d.ts.map +1 -1
- package/dist/api/startProviderApi.js +2 -0
- package/dist/api/startProviderApi.js.map +1 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +9 -4
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +17 -4
- package/dist/cjs/api/ja4.cjs +1 -1
- package/dist/cjs/api/rawTlsSignalsMiddleware.cjs +84 -0
- package/dist/cjs/api/startProviderApi.cjs +2 -0
- package/dist/cjs/tasks/detection/decodePayload.cjs +985 -1197
- package/dist/cjs/tasks/detection/decodePayload.js +1 -1
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +34 -4
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +19 -5
- package/dist/tasks/detection/decodePayload.d.ts +2 -2
- package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
- package/dist/tasks/detection/decodePayload.js +1 -1
- package/dist/tasks/detection/decodePayload.js.map +1 -1
- package/dist/tasks/detection/getBotScore.js +2 -2
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +2 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +34 -4
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +21 -6
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js +2 -2
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js.map +1 -1
- package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.js +127 -0
- package/dist/tests/unit/api/rawTlsSignalsMiddleware.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +30 -54
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
- package/package.json +16 -15
|
@@ -1,15 +1,30 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
1
2
|
import { ProsopoEnvError } from "@prosopo/common";
|
|
2
|
-
import { CaptchaMerkleTree
|
|
3
|
+
import { CaptchaMerkleTree } from "@prosopo/datasets";
|
|
3
4
|
//#region src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts
|
|
5
|
+
var req = createRequire(import.meta.url);
|
|
6
|
+
var nativeMerkle = (() => {
|
|
7
|
+
try {
|
|
8
|
+
return req("@prosopo/native-merkle");
|
|
9
|
+
} catch {
|
|
10
|
+
return req("./prosopo-native-merkle.node");
|
|
11
|
+
}
|
|
12
|
+
})();
|
|
4
13
|
/**
|
|
5
|
-
* Build merkle tree and get commitment
|
|
6
|
-
*
|
|
7
|
-
* @
|
|
14
|
+
* Build merkle tree and get commitment id, returning both. The hash-heavy
|
|
15
|
+
* work (per-solution leaf hash + every intermediate layer) runs in Rust via
|
|
16
|
+
* @prosopo/native-merkle; the resulting layers are grafted into a JS
|
|
17
|
+
* CaptchaMerkleTree so callers can still generate proofs.
|
|
8
18
|
*/
|
|
9
19
|
var buildTreeAndGetCommitmentId = (captchaSolutions) => {
|
|
20
|
+
if (captchaSolutions.length === 0) throw new ProsopoEnvError("CONTRACT.CAPTCHA_SOLUTION_COMMITMENT_DOES_NOT_EXIST", { context: {
|
|
21
|
+
failedFuncName: buildTreeAndGetCommitmentId.name,
|
|
22
|
+
commitmentId: null
|
|
23
|
+
} });
|
|
24
|
+
const solutionsHashed = captchaSolutions.map((captcha) => nativeMerkle.computeCaptchaSolutionHash(captcha.captchaId, captcha.captchaContentId, captcha.solution, captcha.salt));
|
|
25
|
+
const layers = nativeMerkle.buildMerkleLayers(solutionsHashed);
|
|
10
26
|
const tree = new CaptchaMerkleTree();
|
|
11
|
-
|
|
12
|
-
tree.build(solutionsHashed);
|
|
27
|
+
tree.hydrateFromLayers(layers);
|
|
13
28
|
const commitmentId = tree.root?.hash;
|
|
14
29
|
if (!commitmentId) throw new ProsopoEnvError("CONTRACT.CAPTCHA_SOLUTION_COMMITMENT_DOES_NOT_EXIST", { context: {
|
|
15
30
|
failedFuncName: buildTreeAndGetCommitmentId.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imgCaptchaTasksUtils.js","sourceRoot":"","sources":["../../../src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"imgCaptchaTasksUtils.js","sourceRoot":"","sources":["../../../src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAetD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,YAAY,GAAuB,CAAC,GAAG,EAAE;IAC9C,IAAI,CAAC;QACJ,OAAO,GAAG,CAAC,wBAAwB,CAAuB,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QAIR,OAAO,GAAG,CAAC,8BAA8B,CAAuB,CAAC;IAClE,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AAQL,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,gBAAmC,EACiB,EAAE;IAKtD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CACxB,qDAAqD,EACrD;YACC,OAAO,EAAE;gBACR,cAAc,EAAE,2BAA2B,CAAC,IAAI;gBAChD,YAAY,EAAE,IAAI;aAClB;SACD,CACD,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACxD,YAAY,CAAC,0BAA0B,CACtC,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,gBAAgB,EACxB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CACZ,CACD,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IACrC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CACxB,qDAAqD,EACrD;YACC,OAAO,EAAE;gBACR,cAAc,EAAE,2BAA2B,CAAC,IAAI;gBAChD,YAAY,EAAE,YAAY;aAC1B;SACD,CACD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC/B,CAAC,CAAC"}
|
package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CaptchaType } from "@prosopo/types";
|
|
1
|
+
import { CaptchaType, ModeEnum } from "@prosopo/types";
|
|
2
2
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
3
|
import { runConfiguredCaptchaTypeShortCircuit } from "../../../../../api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js";
|
|
4
4
|
const buildInput = (overrides = {}, { resolvedBundleId } = {}) => {
|
|
@@ -34,7 +34,7 @@ const buildInput = (overrides = {}, { resolvedBundleId } = {}) => {
|
|
|
34
34
|
ipAddress: { lower: 0n, type: "v4" },
|
|
35
35
|
ipInfo: undefined,
|
|
36
36
|
flatHeaders: {},
|
|
37
|
-
sessionMode:
|
|
37
|
+
sessionMode: ModeEnum.visible,
|
|
38
38
|
userSitekeyIpHash: "hash",
|
|
39
39
|
logger: { info: vi.fn(), debug: vi.fn(), warn: vi.fn(), error: vi.fn() },
|
|
40
40
|
...overrides,
|
package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shortCircuit.unit.test.js","sourceRoot":"","sources":["../../../../../../src/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shortCircuit.unit.test.js","sourceRoot":"","sources":["../../../../../../src/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawTlsSignalsMiddleware.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit/api/rawTlsSignalsMiddleware.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { getRawTlsSignals, rawTlsSignalsForSession, } from "../../../api/rawTlsSignalsMiddleware.js";
|
|
3
|
+
const mockLogger = () => {
|
|
4
|
+
const log = {
|
|
5
|
+
debug: vi.fn(),
|
|
6
|
+
info: vi.fn(),
|
|
7
|
+
warn: vi.fn(),
|
|
8
|
+
error: vi.fn(),
|
|
9
|
+
trace: vi.fn(),
|
|
10
|
+
fatal: vi.fn(),
|
|
11
|
+
with: vi.fn().mockImplementation(() => log),
|
|
12
|
+
};
|
|
13
|
+
return log;
|
|
14
|
+
};
|
|
15
|
+
describe("getRawTlsSignals", () => {
|
|
16
|
+
it("parses every present header", () => {
|
|
17
|
+
const headers = {
|
|
18
|
+
"x-tls-syn-ns": "100000000",
|
|
19
|
+
"x-tls-synack-ns": "100050000",
|
|
20
|
+
"x-tls-ack-ns": "100100000",
|
|
21
|
+
"x-tls-observed-ttl": "53",
|
|
22
|
+
"x-tls-tcp-mss": "1452",
|
|
23
|
+
"x-tls-tcp-wscale": "7",
|
|
24
|
+
"x-tls-tcp-opts-flags": "31",
|
|
25
|
+
"x-tls-tcp-opts-order": "202818",
|
|
26
|
+
"x-tls-tcp-window": "64240",
|
|
27
|
+
};
|
|
28
|
+
const result = getRawTlsSignals(headers, mockLogger());
|
|
29
|
+
expect(result.synNs).toBe(100000000);
|
|
30
|
+
expect(result.synackNs).toBe(100050000);
|
|
31
|
+
expect(result.ackNs).toBe(100100000);
|
|
32
|
+
expect(result.observedTtl).toBe(53);
|
|
33
|
+
expect(result.tcpMss).toBe(1452);
|
|
34
|
+
expect(result.tcpWscale).toBe(7);
|
|
35
|
+
expect(result.tcpOptsFlags).toBe(31);
|
|
36
|
+
expect(result.tcpOptsOrder).toBe(202818);
|
|
37
|
+
expect(result.tcpWindow).toBe(64240);
|
|
38
|
+
});
|
|
39
|
+
it("returns undefined for every field when no headers are present", () => {
|
|
40
|
+
const result = getRawTlsSignals({}, mockLogger());
|
|
41
|
+
expect(result.synNs).toBeUndefined();
|
|
42
|
+
expect(result.synackNs).toBeUndefined();
|
|
43
|
+
expect(result.ackNs).toBeUndefined();
|
|
44
|
+
expect(result.observedTtl).toBeUndefined();
|
|
45
|
+
expect(result.tcpMss).toBeUndefined();
|
|
46
|
+
expect(result.tcpWscale).toBeUndefined();
|
|
47
|
+
expect(result.tcpOptsFlags).toBeUndefined();
|
|
48
|
+
expect(result.tcpOptsOrder).toBeUndefined();
|
|
49
|
+
expect(result.tcpWindow).toBeUndefined();
|
|
50
|
+
});
|
|
51
|
+
it("rejects out-of-range values with the field-specific cap", () => {
|
|
52
|
+
const headers = {
|
|
53
|
+
"x-tls-observed-ttl": "999",
|
|
54
|
+
"x-tls-tcp-mss": "70000",
|
|
55
|
+
"x-tls-tcp-opts-flags": "300",
|
|
56
|
+
"x-tls-tcp-wscale": "42",
|
|
57
|
+
};
|
|
58
|
+
const result = getRawTlsSignals(headers, mockLogger());
|
|
59
|
+
expect(result.observedTtl).toBeUndefined();
|
|
60
|
+
expect(result.tcpMss).toBeUndefined();
|
|
61
|
+
expect(result.tcpOptsFlags).toBeUndefined();
|
|
62
|
+
expect(result.tcpWscale).toBe(42);
|
|
63
|
+
});
|
|
64
|
+
it("rejects negative values", () => {
|
|
65
|
+
const headers = {
|
|
66
|
+
"x-tls-tcp-wscale": "-1",
|
|
67
|
+
};
|
|
68
|
+
const result = getRawTlsSignals(headers, mockLogger());
|
|
69
|
+
expect(result.tcpWscale).toBeUndefined();
|
|
70
|
+
});
|
|
71
|
+
it("rejects non-numeric values", () => {
|
|
72
|
+
const headers = {
|
|
73
|
+
"x-tls-tcp-mss": "not-a-number",
|
|
74
|
+
"x-tls-tcp-wscale": "7",
|
|
75
|
+
};
|
|
76
|
+
const result = getRawTlsSignals(headers, mockLogger());
|
|
77
|
+
expect(result.tcpMss).toBeUndefined();
|
|
78
|
+
expect(result.tcpWscale).toBe(7);
|
|
79
|
+
});
|
|
80
|
+
it("takes the first value when the header is repeated (string[])", () => {
|
|
81
|
+
const headers = {
|
|
82
|
+
"x-tls-tcp-mss": ["1452", "1460"],
|
|
83
|
+
};
|
|
84
|
+
const result = getRawTlsSignals(headers, mockLogger());
|
|
85
|
+
expect(result.tcpMss).toBe(1452);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe("rawTlsSignalsForSession", () => {
|
|
89
|
+
it("omits undefined fields so Mongo docs stay slim", () => {
|
|
90
|
+
const out = rawTlsSignalsForSession({
|
|
91
|
+
tcpMss: 1460,
|
|
92
|
+
});
|
|
93
|
+
expect(out).toEqual({ tcpMss: 1460 });
|
|
94
|
+
});
|
|
95
|
+
it("copies every defined field verbatim", () => {
|
|
96
|
+
const out = rawTlsSignalsForSession({
|
|
97
|
+
synNs: 1,
|
|
98
|
+
synackNs: 2,
|
|
99
|
+
ackNs: 3,
|
|
100
|
+
observedTtl: 4,
|
|
101
|
+
tcpMss: 5,
|
|
102
|
+
tcpWscale: 6,
|
|
103
|
+
tcpOptsFlags: 7,
|
|
104
|
+
tcpOptsOrder: 8,
|
|
105
|
+
tcpWindow: 9,
|
|
106
|
+
});
|
|
107
|
+
expect(out).toEqual({
|
|
108
|
+
synNs: 1,
|
|
109
|
+
synackNs: 2,
|
|
110
|
+
ackNs: 3,
|
|
111
|
+
observedTtl: 4,
|
|
112
|
+
tcpMss: 5,
|
|
113
|
+
tcpWscale: 6,
|
|
114
|
+
tcpOptsFlags: 7,
|
|
115
|
+
tcpOptsOrder: 8,
|
|
116
|
+
tcpWindow: 9,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe("rawTlsSignalsMiddleware", () => {
|
|
121
|
+
it("returns a middleware function", async () => {
|
|
122
|
+
const { rawTlsSignalsMiddleware } = await import("../../../api/rawTlsSignalsMiddleware.js");
|
|
123
|
+
const middleware = rawTlsSignalsMiddleware({});
|
|
124
|
+
expect(typeof middleware).toBe("function");
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=rawTlsSignalsMiddleware.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawTlsSignalsMiddleware.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/api/rawTlsSignalsMiddleware.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +1,38 @@
|
|
|
1
1
|
import { ProsopoEnvError } from "@prosopo/common";
|
|
2
|
-
import {
|
|
3
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
4
3
|
import { buildTreeAndGetCommitmentId } from "../../../../tasks/imgCaptcha/imgCaptchaTasksUtils.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
const mockCaptchaSolutions = [
|
|
5
|
+
{
|
|
6
|
+
captchaId: "captchaId1",
|
|
7
|
+
captchaContentId: "captchaContentId1",
|
|
8
|
+
salt: "salt1",
|
|
9
|
+
solution: ["a", "b"],
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
captchaId: "captchaId2",
|
|
13
|
+
captchaContentId: "captchaContentId2",
|
|
14
|
+
salt: "salt2",
|
|
15
|
+
solution: ["c", "d"],
|
|
16
|
+
},
|
|
17
|
+
];
|
|
17
18
|
describe("buildTreeAndGetCommitmentId", () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
build: vi.fn(),
|
|
27
|
-
root: { hash: "mockedRootHash" },
|
|
28
|
-
};
|
|
29
|
-
});
|
|
19
|
+
it("builds a tree and returns a commitmentId that is deterministic across calls", () => {
|
|
20
|
+
const first = buildTreeAndGetCommitmentId(mockCaptchaSolutions);
|
|
21
|
+
const second = buildTreeAndGetCommitmentId(mockCaptchaSolutions);
|
|
22
|
+
expect(first.commitmentId).toMatch(/^0x[0-9a-f]{64}$/);
|
|
23
|
+
expect(first.commitmentId).toBe(second.commitmentId);
|
|
24
|
+
expect(first.tree.root?.hash).toBe(first.commitmentId);
|
|
25
|
+
expect(first.tree.leaves.length).toBe(mockCaptchaSolutions.length);
|
|
30
26
|
});
|
|
31
|
-
it("
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
expect(
|
|
37
|
-
expect(computeCaptchaSolutionHash).toHaveBeenCalledWith(mockCaptchaSolutions[0]);
|
|
38
|
-
expect(computeCaptchaSolutionHash).toHaveBeenCalledWith(mockCaptchaSolutions[1]);
|
|
39
|
-
expect(result).toEqual({
|
|
40
|
-
tree: expect.any(Object),
|
|
41
|
-
commitmentId: "mockedRootHash",
|
|
42
|
-
});
|
|
27
|
+
it("still returns a valid commitmentId when there is only one solution (single-leaf tree)", () => {
|
|
28
|
+
const single = mockCaptchaSolutions.slice(0, 1);
|
|
29
|
+
const { commitmentId, tree } = buildTreeAndGetCommitmentId(single);
|
|
30
|
+
expect(commitmentId).toMatch(/^0x[0-9a-f]{64}$/);
|
|
31
|
+
expect(tree.root?.hash).toBe(commitmentId);
|
|
32
|
+
expect(tree.leaves.length).toBe(1);
|
|
43
33
|
});
|
|
44
|
-
it("
|
|
45
|
-
|
|
46
|
-
vi.mocked(CaptchaMerkleTree).mockImplementationOnce(function () {
|
|
47
|
-
return {
|
|
48
|
-
build: vi.fn(),
|
|
49
|
-
root: { hash: null },
|
|
50
|
-
getRoot: vi.fn().mockReturnValue({ hash: null }),
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
expect(() => buildTreeAndGetCommitmentId(mockCaptchaSolutions)).toThrow(new ProsopoEnvError("CONTRACT.CAPTCHA_SOLUTION_COMMITMENT_DOES_NOT_EXIST", {
|
|
54
|
-
context: {
|
|
55
|
-
failedFuncName: "buildTreeAndGetCommitmentId",
|
|
56
|
-
commitmentId: null,
|
|
57
|
-
},
|
|
58
|
-
}));
|
|
59
|
-
vi.mocked(CaptchaMerkleTree).mockImplementation(originalMock.getMockImplementation());
|
|
34
|
+
it("throws CAPTCHA_SOLUTION_COMMITMENT_DOES_NOT_EXIST when passed no solutions", () => {
|
|
35
|
+
expect(() => buildTreeAndGetCommitmentId([])).toThrow(ProsopoEnvError);
|
|
60
36
|
});
|
|
61
37
|
});
|
|
62
38
|
//# sourceMappingURL=imgCaptchaTasksUtils.unit.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imgCaptchaTasksUtils.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"imgCaptchaTasksUtils.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAMnG,MAAM,oBAAoB,GAAsB;IAC/C;QACC,SAAS,EAAE,YAAY;QACvB,gBAAgB,EAAE,mBAAmB;QACrC,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;KACpB;IACD;QACC,SAAS,EAAE,YAAY;QACvB,gBAAgB,EAAE,mBAAmB;QACrC,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;KACpB;CACD,CAAC;AAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACtF,MAAM,KAAK,GAAG,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAChG,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAEnE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEjD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QAGrF,MAAM,CAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/provider",
|
|
3
|
-
"version": "5.3.
|
|
3
|
+
"version": "5.3.3",
|
|
4
4
|
"author": "PROSOPO LIMITED <info@prosopo.io>",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -23,25 +23,26 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@noble/hashes": "1.8.0",
|
|
25
25
|
"@polkadot/util": "13.5.7",
|
|
26
|
-
"@prosopo/api": "4.0.
|
|
27
|
-
"@prosopo/api-express-router": "3.1.
|
|
26
|
+
"@prosopo/api": "4.0.11",
|
|
27
|
+
"@prosopo/api-express-router": "3.1.66",
|
|
28
28
|
"@prosopo/api-route": "2.6.55",
|
|
29
29
|
"@prosopo/common": "3.1.50",
|
|
30
30
|
"@prosopo/logger": "2.0.6",
|
|
31
|
-
"@prosopo/database": "4.0.
|
|
32
|
-
"@prosopo/datasets": "3.1.
|
|
33
|
-
"@prosopo/env": "3.6.
|
|
34
|
-
"@prosopo/ipinfo": "0.3.
|
|
35
|
-
"@prosopo/keyring": "2.9.
|
|
36
|
-
"@prosopo/load-balancer": "2.10.
|
|
31
|
+
"@prosopo/database": "4.0.12",
|
|
32
|
+
"@prosopo/datasets": "3.1.67",
|
|
33
|
+
"@prosopo/env": "3.6.35",
|
|
34
|
+
"@prosopo/ipinfo": "0.3.12",
|
|
35
|
+
"@prosopo/keyring": "2.9.74",
|
|
36
|
+
"@prosopo/load-balancer": "2.10.28",
|
|
37
37
|
"@prosopo/puzzle-assets": "0.1.1",
|
|
38
38
|
"@prosopo/redis-client": "1.0.32",
|
|
39
39
|
"@prosopo/locale": "3.3.0",
|
|
40
|
-
"@prosopo/native-ja4": "0.0.
|
|
41
|
-
"@prosopo/
|
|
42
|
-
"@prosopo/types
|
|
43
|
-
"@prosopo/types-
|
|
44
|
-
"@prosopo/
|
|
40
|
+
"@prosopo/native-ja4": "0.0.3",
|
|
41
|
+
"@prosopo/native-merkle": "0.0.3",
|
|
42
|
+
"@prosopo/types": "5.2.3",
|
|
43
|
+
"@prosopo/types-database": "5.1.6",
|
|
44
|
+
"@prosopo/types-env": "2.10.31",
|
|
45
|
+
"@prosopo/user-access-policy": "3.12.22",
|
|
45
46
|
"@prosopo/util": "3.3.6",
|
|
46
47
|
"@prosopo/util-crypto": "13.5.30",
|
|
47
48
|
"cron": "3.1.7",
|
|
@@ -56,7 +57,7 @@
|
|
|
56
57
|
"zod": "3.23.8"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
|
-
"@prosopo/config": "3.3.
|
|
60
|
+
"@prosopo/config": "3.3.11",
|
|
60
61
|
"@types/node": "22.5.5",
|
|
61
62
|
"@types/pg": "8.16.0",
|
|
62
63
|
"@types/uuid": "10.0.0",
|