@prosopo/provider 5.10.1 → 5.10.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 +12 -11
- package/.turbo/turbo-build$colon$tsc.log +27 -27
- package/.turbo/turbo-build.log +13 -12
- package/CHANGELOG.md +141 -0
- package/dist/api/captcha/assignDetectorBundle.d.ts.map +1 -1
- package/dist/api/captcha/assignDetectorBundle.js +27 -9
- package/dist/api/captcha/assignDetectorBundle.js.map +1 -1
- package/dist/api/captcha/assignDetectorBundle.unit.test.d.ts +2 -0
- package/dist/api/captcha/assignDetectorBundle.unit.test.d.ts.map +1 -0
- package/dist/api/captcha/assignDetectorBundle.unit.test.js +153 -0
- package/dist/api/captcha/assignDetectorBundle.unit.test.js.map +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +4 -2
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/cjs/api/captcha/assignDetectorBundle.cjs +26 -8
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +4 -2
- package/dist/cjs/tasks/captchaManager.cjs +36 -4
- package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +20 -17
- package/dist/cjs/tasks/detection/assignSecret.cjs +45 -0
- package/dist/cjs/tasks/detection/bundlePool.cjs +18 -11
- package/dist/cjs/tasks/detection/decodePayload.cjs +1140 -1105
- package/dist/cjs/tasks/detection/decodePayload.js +1 -1
- package/dist/cjs/tasks/detection/getBotScore.cjs +4 -2
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +7 -5
- package/dist/tasks/captchaManager.d.ts +2 -0
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +36 -4
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +2 -0
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.js +20 -17
- package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
- package/dist/tasks/detection/assignSecret.d.ts +8 -0
- package/dist/tasks/detection/assignSecret.d.ts.map +1 -0
- package/dist/tasks/detection/assignSecret.js +45 -0
- package/dist/tasks/detection/assignSecret.js.map +1 -0
- package/dist/tasks/detection/bundlePool.d.ts +3 -1
- package/dist/tasks/detection/bundlePool.d.ts.map +1 -1
- package/dist/tasks/detection/bundlePool.js +18 -12
- package/dist/tasks/detection/bundlePool.js.map +1 -1
- package/dist/tasks/detection/bundlePool.test.js +40 -3
- package/dist/tasks/detection/bundlePool.test.js.map +1 -1
- 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.d.ts +3 -1
- package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
- package/dist/tasks/detection/getBotScore.js +5 -3
- package/dist/tasks/detection/getBotScore.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +1 -0
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +7 -5
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tests/integration/decisionMachines.integration.test.js +65 -1
- package/dist/tests/integration/decisionMachines.integration.test.js.map +1 -1
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +5 -3
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +46 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +10 -9
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +9 -3
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +11 -6
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +38 -0
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +3 -3
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +78 -84
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/package.json +28 -28
- package/dist/api/captcha/assignDetectorBundle.test.d.ts +0 -2
- package/dist/api/captcha/assignDetectorBundle.test.d.ts.map +0 -1
- package/dist/api/captcha/assignDetectorBundle.test.js +0 -71
- package/dist/api/captcha/assignDetectorBundle.test.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { stringToHex, u8aToHex } from "@polkadot/util";
|
|
2
|
-
import { ApiParams, CaptchaStatus, CaptchaType, FrictionlessReason, POW_SEPARATOR, ResultReason, } from "@prosopo/types";
|
|
2
|
+
import { ApiParams, CaptchaStatus, CaptchaType, FrictionlessReason, IPValidationAction, POW_SEPARATOR, ResultReason, } from "@prosopo/types";
|
|
3
3
|
import { AccessPolicyType, } from "@prosopo/user-access-policy";
|
|
4
4
|
import { getIPAddress, verifyRecency } from "@prosopo/util";
|
|
5
5
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
@@ -88,12 +88,12 @@ describe("PowCaptchaManager", () => {
|
|
|
88
88
|
const dappAccount = "dappAccount";
|
|
89
89
|
const origin = "origin";
|
|
90
90
|
const challengeRegExp = new RegExp(`[0-9]+___${userAccount}___${dappAccount}`);
|
|
91
|
-
pair.sign.mockReturnValueOnce("signedChallenge");
|
|
92
|
-
u8aToHex.mockReturnValueOnce("
|
|
91
|
+
vi.mocked(pair.sign).mockReturnValueOnce(new TextEncoder().encode("signedChallenge"));
|
|
92
|
+
vi.mocked(u8aToHex).mockReturnValueOnce("0xhexSignedChallenge");
|
|
93
93
|
const result = await powCaptchaManager.getPowCaptchaChallenge(userAccount, dappAccount, origin);
|
|
94
94
|
expect(result.challenge.match(challengeRegExp)).toBeTruthy();
|
|
95
95
|
expect(result.difficulty).toEqual(4);
|
|
96
|
-
expect(result.providerSignature).toEqual("
|
|
96
|
+
expect(result.providerSignature).toEqual("0xhexSignedChallenge");
|
|
97
97
|
expect(pair.sign).toHaveBeenCalledWith(stringToHex(result.challenge));
|
|
98
98
|
});
|
|
99
99
|
});
|
|
@@ -125,12 +125,12 @@ describe("PowCaptchaManager", () => {
|
|
|
125
125
|
providerSignature,
|
|
126
126
|
lastUpdatedTimestamp: new Date(),
|
|
127
127
|
};
|
|
128
|
-
verifyRecency.mockImplementation(() => true);
|
|
129
|
-
checkPowSignature.mockImplementation(() =>
|
|
130
|
-
validateSolution.mockImplementation(() => true);
|
|
131
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
132
|
-
db.updatePowCaptchaRecordResult.mockResolvedValue(
|
|
133
|
-
db.markDappUserPoWCommitmentsChecked.mockResolvedValue(
|
|
128
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
129
|
+
vi.mocked(checkPowSignature).mockImplementation(() => undefined);
|
|
130
|
+
vi.mocked(validateSolution).mockImplementation(() => true);
|
|
131
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
132
|
+
vi.mocked(db.updatePowCaptchaRecordResult).mockResolvedValue(undefined);
|
|
133
|
+
vi.mocked(db.markDappUserPoWCommitmentsChecked).mockResolvedValue(undefined);
|
|
134
134
|
const verifyPowCaptchaSolutionArgs = [
|
|
135
135
|
challenge,
|
|
136
136
|
providerSignature,
|
|
@@ -202,11 +202,11 @@ describe("PowCaptchaManager", () => {
|
|
|
202
202
|
difficulty,
|
|
203
203
|
lastUpdatedTimestamp: new Date(0),
|
|
204
204
|
};
|
|
205
|
-
verifyRecency.mockImplementation(() => {
|
|
205
|
+
vi.mocked(verifyRecency).mockImplementation(() => {
|
|
206
206
|
return true;
|
|
207
207
|
});
|
|
208
208
|
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
209
|
-
validateSolution.mockImplementation(() => false);
|
|
209
|
+
vi.mocked(validateSolution).mockImplementation(() => false);
|
|
210
210
|
expect((await powCaptchaManager.verifyPowCaptchaSolution(challenge, signature, nonce, timeout, timestampSignature, ipAddress, headers, undefined)).verified).toBe(false);
|
|
211
211
|
});
|
|
212
212
|
it("auto-fails with CAPTCHA_INVALID_SALT when salt decodes to invalid coords", async () => {
|
|
@@ -234,8 +234,8 @@ describe("PowCaptchaManager", () => {
|
|
|
234
234
|
difficulty,
|
|
235
235
|
lastUpdatedTimestamp: new Date(0),
|
|
236
236
|
};
|
|
237
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
238
|
-
db.updatePowCaptchaRecordResult.mockResolvedValue(
|
|
237
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
238
|
+
vi.mocked(db.updatePowCaptchaRecordResult).mockResolvedValue(undefined);
|
|
239
239
|
const malformedSalt = "0x010200";
|
|
240
240
|
const result = await powCaptchaManager.verifyPowCaptchaSolution(challenge, signature, nonce, timeout, timestampSignature, ipAddress, headers, undefined, malformedSalt);
|
|
241
241
|
expect(result.verified).toBe(false);
|
|
@@ -341,8 +341,8 @@ describe("PowCaptchaManager", () => {
|
|
|
341
341
|
result: { status: CaptchaStatus.approved },
|
|
342
342
|
ipAddress: getCompositeIpAddress(getIPAddress("1.1.1.1")),
|
|
343
343
|
};
|
|
344
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
345
|
-
verifyRecency.mockImplementation(() => true);
|
|
344
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
345
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
346
346
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
347
347
|
expect(result.verified).toBe(true);
|
|
348
348
|
expect(db.getPowCaptchaRecordByChallenge).toHaveBeenCalledWith(challenge);
|
|
@@ -366,12 +366,12 @@ describe("PowCaptchaManager", () => {
|
|
|
366
366
|
result: { status: CaptchaStatus.approved },
|
|
367
367
|
ipAddress: getCompositeIpAddress(getIPAddress("1.1.1.1")),
|
|
368
368
|
};
|
|
369
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
370
|
-
verifyRecency.mockImplementation(() => true);
|
|
369
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
370
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
371
371
|
const verified = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
372
372
|
expect(verified.verified).toBe(true);
|
|
373
373
|
expect(verified.sessionId).toBe("session-abc");
|
|
374
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
374
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue({
|
|
375
375
|
...challengeRecord,
|
|
376
376
|
serverChecked: true,
|
|
377
377
|
});
|
|
@@ -385,7 +385,7 @@ describe("PowCaptchaManager", () => {
|
|
|
385
385
|
const userAccount = "testUserAccount";
|
|
386
386
|
const challenge = `${timestamp}${POW_SEPARATOR}${userAccount}${POW_SEPARATOR}${dappAccount}`;
|
|
387
387
|
const timeout = 1000;
|
|
388
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(null);
|
|
388
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(null);
|
|
389
389
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
390
390
|
expect(result.verified).toBe(false);
|
|
391
391
|
expect(db.getPowCaptchaRecordByChallenge).toHaveBeenCalledWith(challenge);
|
|
@@ -445,11 +445,9 @@ describe("PowCaptchaManager", () => {
|
|
|
445
445
|
findRuleIds: vi.fn(),
|
|
446
446
|
fetchAllRuleIds: vi.fn(),
|
|
447
447
|
};
|
|
448
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
449
|
-
db.getSessionRecordBySessionId
|
|
450
|
-
|
|
451
|
-
.mockResolvedValue(sessionRecord);
|
|
452
|
-
verifyRecency.mockImplementation(() => true);
|
|
448
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
449
|
+
vi.mocked(db.getSessionRecordBySessionId).mockResolvedValue(sessionRecord);
|
|
450
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
453
451
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, undefined, mockAccessRulesStorage);
|
|
454
452
|
expect(result.verified).toBe(false);
|
|
455
453
|
expect(db.updateSessionRecord).toHaveBeenCalledWith(sessionId, expect.objectContaining({
|
|
@@ -516,11 +514,9 @@ describe("PowCaptchaManager", () => {
|
|
|
516
514
|
findRuleIds: vi.fn(),
|
|
517
515
|
fetchAllRuleIds: vi.fn(),
|
|
518
516
|
};
|
|
519
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
520
|
-
db.getSessionRecordBySessionId
|
|
521
|
-
|
|
522
|
-
.mockResolvedValue(sessionRecord);
|
|
523
|
-
verifyRecency.mockImplementation(() => true);
|
|
517
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
518
|
+
vi.mocked(db.getSessionRecordBySessionId).mockResolvedValue(sessionRecord);
|
|
519
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
524
520
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, undefined, mockAccessRulesStorage);
|
|
525
521
|
expect(result.verified).toBe(true);
|
|
526
522
|
});
|
|
@@ -558,8 +554,8 @@ describe("PowCaptchaManager", () => {
|
|
|
558
554
|
findRuleIds: vi.fn(),
|
|
559
555
|
fetchAllRuleIds: vi.fn(),
|
|
560
556
|
};
|
|
561
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
562
|
-
verifyRecency.mockImplementation(() => true);
|
|
557
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
558
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
563
559
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, undefined, mockAccessRulesStorage);
|
|
564
560
|
expect(result.verified).toBe(true);
|
|
565
561
|
});
|
|
@@ -597,8 +593,8 @@ describe("PowCaptchaManager", () => {
|
|
|
597
593
|
behavioralDataPacked,
|
|
598
594
|
deviceCapability: "test-device",
|
|
599
595
|
};
|
|
600
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
601
|
-
verifyRecency.mockImplementation(() => true);
|
|
596
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
597
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
602
598
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
603
599
|
expect(result.verified).toBe(true);
|
|
604
600
|
});
|
|
@@ -634,9 +630,9 @@ describe("PowCaptchaManager", () => {
|
|
|
634
630
|
behavioralDataPacked,
|
|
635
631
|
deviceCapability: "suspicious-device",
|
|
636
632
|
};
|
|
637
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
638
|
-
db.updatePowCaptchaRecord.mockResolvedValue(undefined);
|
|
639
|
-
verifyRecency.mockImplementation(() => true);
|
|
633
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
634
|
+
vi.mocked(db.updatePowCaptchaRecord).mockResolvedValue(undefined);
|
|
635
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
640
636
|
mockDecisionMachine(vi.fn().mockResolvedValue({
|
|
641
637
|
decision: "deny",
|
|
642
638
|
reason: "Suspicious device detected",
|
|
@@ -680,8 +676,8 @@ describe("PowCaptchaManager", () => {
|
|
|
680
676
|
providerSignature: "testSignature",
|
|
681
677
|
lastUpdatedTimestamp: new Date(),
|
|
682
678
|
};
|
|
683
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
684
|
-
verifyRecency.mockImplementation(() => true);
|
|
679
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
680
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
685
681
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
686
682
|
expect(result.verified).toBe(true);
|
|
687
683
|
});
|
|
@@ -717,8 +713,8 @@ describe("PowCaptchaManager", () => {
|
|
|
717
713
|
behavioralDataPacked,
|
|
718
714
|
deviceCapability: "test-device",
|
|
719
715
|
};
|
|
720
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
721
|
-
verifyRecency.mockImplementation(() => true);
|
|
716
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
717
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
722
718
|
mockDecisionMachine(vi.fn().mockRejectedValue(new Error("Decision machine error")));
|
|
723
719
|
try {
|
|
724
720
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
@@ -792,11 +788,9 @@ describe("PowCaptchaManager", () => {
|
|
|
792
788
|
ops: [],
|
|
793
789
|
},
|
|
794
790
|
};
|
|
795
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
796
|
-
db.getSessionRecordBySessionId
|
|
797
|
-
|
|
798
|
-
.mockResolvedValue(sessionRecord);
|
|
799
|
-
verifyRecency.mockImplementation(() => true);
|
|
791
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
792
|
+
vi.mocked(db.getSessionRecordBySessionId).mockResolvedValue(sessionRecord);
|
|
793
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
800
794
|
const decideSpy = vi
|
|
801
795
|
.fn()
|
|
802
796
|
.mockResolvedValue({ decision: "allow" });
|
|
@@ -845,13 +839,13 @@ describe("PowCaptchaManager", () => {
|
|
|
845
839
|
providerSignature: "testSignature",
|
|
846
840
|
lastUpdatedTimestamp: new Date(),
|
|
847
841
|
};
|
|
848
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
849
|
-
db.getClientRecord.mockResolvedValue({
|
|
842
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
843
|
+
vi.mocked(db.getClientRecord).mockResolvedValue({
|
|
850
844
|
settings: {},
|
|
851
845
|
});
|
|
852
|
-
checkPowSignature.mockReturnValue(
|
|
853
|
-
validateSolution.mockReturnValue(true);
|
|
854
|
-
verifyRecency.mockImplementation(() => true);
|
|
846
|
+
vi.mocked(checkPowSignature).mockReturnValue(undefined);
|
|
847
|
+
vi.mocked(validateSolution).mockReturnValue(true);
|
|
848
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
855
849
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, ip);
|
|
856
850
|
expect(result.verified).toBe(true);
|
|
857
851
|
expect(db.updatePowCaptchaRecord).toHaveBeenCalledWith(challenge, {
|
|
@@ -881,21 +875,21 @@ describe("PowCaptchaManager", () => {
|
|
|
881
875
|
userSubmitted: true,
|
|
882
876
|
lastUpdatedTimestamp: new Date(),
|
|
883
877
|
};
|
|
884
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
885
|
-
db.getClientRecord.mockResolvedValue({
|
|
878
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
879
|
+
vi.mocked(db.getClientRecord).mockResolvedValue({
|
|
886
880
|
settings: {
|
|
887
881
|
ipValidationRules: {
|
|
888
882
|
enabled: false,
|
|
889
883
|
actions: {
|
|
890
|
-
countryChangeAction:
|
|
891
|
-
cityChangeAction:
|
|
884
|
+
countryChangeAction: IPValidationAction.Reject,
|
|
885
|
+
cityChangeAction: IPValidationAction.Reject,
|
|
892
886
|
},
|
|
893
887
|
},
|
|
894
888
|
},
|
|
895
889
|
});
|
|
896
|
-
checkPowSignature.mockReturnValue(
|
|
897
|
-
validateSolution.mockReturnValue(true);
|
|
898
|
-
verifyRecency.mockImplementation(() => true);
|
|
890
|
+
vi.mocked(checkPowSignature).mockReturnValue(undefined);
|
|
891
|
+
vi.mocked(validateSolution).mockReturnValue(true);
|
|
892
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
899
893
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, ip);
|
|
900
894
|
expect(result.verified).toBe(true);
|
|
901
895
|
expect(db.updatePowCaptchaRecord).toHaveBeenCalledWith(challenge, {
|
|
@@ -925,20 +919,20 @@ describe("PowCaptchaManager", () => {
|
|
|
925
919
|
userSubmitted: true,
|
|
926
920
|
lastUpdatedTimestamp: new Date(),
|
|
927
921
|
};
|
|
928
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
929
|
-
db.getClientRecord.mockResolvedValue({
|
|
922
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
923
|
+
vi.mocked(db.getClientRecord).mockResolvedValue({
|
|
930
924
|
settings: {
|
|
931
925
|
ipValidationRules: {
|
|
932
926
|
actions: {
|
|
933
|
-
countryChangeAction:
|
|
934
|
-
cityChangeAction:
|
|
927
|
+
countryChangeAction: IPValidationAction.Reject,
|
|
928
|
+
cityChangeAction: IPValidationAction.Reject,
|
|
935
929
|
},
|
|
936
930
|
},
|
|
937
931
|
},
|
|
938
932
|
});
|
|
939
|
-
checkPowSignature.mockReturnValue(
|
|
940
|
-
validateSolution.mockReturnValue(true);
|
|
941
|
-
verifyRecency.mockImplementation(() => true);
|
|
933
|
+
vi.mocked(checkPowSignature).mockReturnValue(undefined);
|
|
934
|
+
vi.mocked(validateSolution).mockReturnValue(true);
|
|
935
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
942
936
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, ip);
|
|
943
937
|
expect(result.verified).toBe(true);
|
|
944
938
|
expect(db.updatePowCaptchaRecord).toHaveBeenCalledWith(challenge, {
|
|
@@ -968,11 +962,11 @@ describe("PowCaptchaManager", () => {
|
|
|
968
962
|
userSubmitted: true,
|
|
969
963
|
lastUpdatedTimestamp: new Date(),
|
|
970
964
|
};
|
|
971
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
972
|
-
db.getClientRecord.mockResolvedValue(
|
|
973
|
-
checkPowSignature.mockReturnValue(
|
|
974
|
-
validateSolution.mockReturnValue(true);
|
|
975
|
-
verifyRecency.mockImplementation(() => true);
|
|
965
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
966
|
+
vi.mocked(db.getClientRecord).mockResolvedValue(undefined);
|
|
967
|
+
vi.mocked(checkPowSignature).mockReturnValue(undefined);
|
|
968
|
+
vi.mocked(validateSolution).mockReturnValue(true);
|
|
969
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
976
970
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv, ip);
|
|
977
971
|
expect(result.verified).toBe(true);
|
|
978
972
|
expect(db.updatePowCaptchaRecord).toHaveBeenCalledWith(challenge, {
|
|
@@ -1001,20 +995,20 @@ describe("PowCaptchaManager", () => {
|
|
|
1001
995
|
userSubmitted: true,
|
|
1002
996
|
lastUpdatedTimestamp: new Date(),
|
|
1003
997
|
};
|
|
1004
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
1005
|
-
db.getClientRecord.mockResolvedValue({
|
|
998
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
999
|
+
vi.mocked(db.getClientRecord).mockResolvedValue({
|
|
1006
1000
|
settings: {
|
|
1007
1001
|
ipValidationRules: {
|
|
1008
1002
|
enabled: true,
|
|
1009
1003
|
actions: {
|
|
1010
|
-
countryChangeAction:
|
|
1004
|
+
countryChangeAction: IPValidationAction.Reject,
|
|
1011
1005
|
},
|
|
1012
1006
|
},
|
|
1013
1007
|
},
|
|
1014
1008
|
});
|
|
1015
|
-
checkPowSignature.mockReturnValue(
|
|
1016
|
-
validateSolution.mockReturnValue(true);
|
|
1017
|
-
verifyRecency.mockImplementation(() => true);
|
|
1009
|
+
vi.mocked(checkPowSignature).mockReturnValue(undefined);
|
|
1010
|
+
vi.mocked(validateSolution).mockReturnValue(true);
|
|
1011
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
1018
1012
|
const result = await powCaptchaManager.serverVerifyPowCaptchaSolution(dappAccount, challenge, timeout, mockEnv);
|
|
1019
1013
|
expect(result.verified).toBe(true);
|
|
1020
1014
|
});
|
|
@@ -1129,10 +1123,10 @@ module.exports = (input) => {
|
|
|
1129
1123
|
};
|
|
1130
1124
|
};
|
|
1131
1125
|
`;
|
|
1132
|
-
db.getSessionRecordBySessionId.mockResolvedValue(undefined);
|
|
1133
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
1134
|
-
db.updatePowCaptchaRecord.mockResolvedValue(undefined);
|
|
1135
|
-
verifyRecency.mockImplementation(() => true);
|
|
1126
|
+
vi.mocked(db.getSessionRecordBySessionId).mockResolvedValue(undefined);
|
|
1127
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
1128
|
+
vi.mocked(db.updatePowCaptchaRecord).mockResolvedValue(undefined);
|
|
1129
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
1136
1130
|
mockDecisionMachine(async (input) => {
|
|
1137
1131
|
const decideFn = eval(`(function() { const module = { exports: {} }; ${decisionMachineSource}; return module.exports; })()`);
|
|
1138
1132
|
return decideFn(input);
|
|
@@ -1232,8 +1226,8 @@ module.exports = (input) => {
|
|
|
1232
1226
|
};
|
|
1233
1227
|
};
|
|
1234
1228
|
`;
|
|
1235
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
1236
|
-
verifyRecency.mockImplementation(() => true);
|
|
1229
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
1230
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
1237
1231
|
mockDecisionMachine(async (input) => {
|
|
1238
1232
|
const decideFn = eval(`(function() { const module = { exports: {} }; ${decisionMachineSource}; return module.exports; })()`);
|
|
1239
1233
|
return decideFn(input);
|
|
@@ -1317,8 +1311,8 @@ module.exports = (input) => {
|
|
|
1317
1311
|
};
|
|
1318
1312
|
};
|
|
1319
1313
|
`;
|
|
1320
|
-
db.getPowCaptchaRecordByChallenge.mockResolvedValue(challengeRecord);
|
|
1321
|
-
verifyRecency.mockImplementation(() => true);
|
|
1314
|
+
vi.mocked(db.getPowCaptchaRecordByChallenge).mockResolvedValue(challengeRecord);
|
|
1315
|
+
vi.mocked(verifyRecency).mockImplementation(() => true);
|
|
1322
1316
|
mockDecisionMachine(async (input) => {
|
|
1323
1317
|
const decideFn = eval(`(function() { const module = { exports: {} }; ${decisionMachineSource}; return module.exports; })()`);
|
|
1324
1318
|
return decideFn(input);
|