@prosopo/provider 5.6.0 → 5.6.2
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 +16 -16
- package/.turbo/turbo-build$colon$tsc.log +25 -25
- package/.turbo/turbo-build.log +17 -17
- package/CHANGELOG.md +54 -0
- package/dist/api/blacklistRequestInspector.d.ts +1 -0
- package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
- package/dist/api/blacklistRequestInspector.js +4 -2
- package/dist/api/blacklistRequestInspector.js.map +1 -1
- package/dist/api/block.d.ts.map +1 -1
- package/dist/api/block.js +6 -0
- package/dist/api/block.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +9 -5
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js +17 -3
- package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js +16 -2
- package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js +16 -4
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +5 -3
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/hardBlockVerdictCache.d.ts +1 -1
- package/dist/api/hardBlockVerdictCache.d.ts.map +1 -1
- package/dist/api/hardBlockVerdictCache.js +2 -2
- package/dist/api/hardBlockVerdictCache.js.map +1 -1
- package/dist/cjs/api/blacklistRequestInspector.cjs +4 -2
- package/dist/cjs/api/block.cjs +6 -0
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +9 -5
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +17 -3
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +16 -2
- package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +16 -4
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +5 -3
- package/dist/cjs/api/hardBlockVerdictCache.cjs +2 -2
- package/dist/cjs/tasks/captchaManager.cjs +4 -1
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +10 -3
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +3 -1
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +3 -1
- package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +3 -1
- package/dist/cjs/utils/devicePlatform.cjs +34 -0
- package/dist/tasks/captchaManager.d.ts +3 -2
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +4 -1
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +10 -3
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +3 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.js +3 -1
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js +3 -1
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
- package/dist/tests/integration/routingDecisionMachines.integration.test.js +280 -3
- package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
- package/dist/tests/unit/api/block.unit.test.js +37 -0
- package/dist/tests/unit/api/block.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.unit.test.js +29 -0
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.unit.test.js.map +1 -1
- package/dist/tests/unit/api/hardBlockVerdictCache.unit.test.js +8 -0
- package/dist/tests/unit/api/hardBlockVerdictCache.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js +119 -0
- package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js.map +1 -0
- package/dist/tests/unit/utils/devicePlatform.unit.test.js +61 -1
- package/dist/tests/unit/utils/devicePlatform.unit.test.js.map +1 -1
- package/dist/utils/devicePlatform.d.ts +2 -1
- package/dist/utils/devicePlatform.d.ts.map +1 -1
- package/dist/utils/devicePlatform.js +34 -1
- package/dist/utils/devicePlatform.js.map +1 -1
- package/package.json +13 -13
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { CaptchaType, FrictionlessPenalties, } from "@prosopo/types";
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
const { applyRouterMock } = vi.hoisted(() => ({
|
|
4
|
+
applyRouterMock: vi.fn(),
|
|
5
|
+
}));
|
|
6
|
+
vi.mock("../../../../tasks/frictionless/routingMachine.js", () => ({
|
|
7
|
+
applyRouter: applyRouterMock,
|
|
8
|
+
}));
|
|
9
|
+
import { getCompositeIpAddress } from "../../../../compositeIpAddress.js";
|
|
10
|
+
import { FrictionlessManager } from "../../../../tasks/frictionless/frictionlessTasks.js";
|
|
11
|
+
const SITE_KEY = "5EjTA28bKSbFPPyMbUjNtArxyqjwq38r1BapVmLZShaqEedV";
|
|
12
|
+
describe("router-supplied puzzle overrides reach the session record", () => {
|
|
13
|
+
let db;
|
|
14
|
+
let storeSessionRecord;
|
|
15
|
+
let manager;
|
|
16
|
+
const context = {
|
|
17
|
+
dappAccount: SITE_KEY,
|
|
18
|
+
userAccount: "user",
|
|
19
|
+
ip: "1.2.3.4",
|
|
20
|
+
score: 0.9,
|
|
21
|
+
platform: { isMobile: false, isApple: true, isWebView: false },
|
|
22
|
+
raw: { headers: {}, userAgent: "ua" },
|
|
23
|
+
imageMaxRounds: 8,
|
|
24
|
+
};
|
|
25
|
+
const storedSession = () => {
|
|
26
|
+
const call = storeSessionRecord.mock.calls[0];
|
|
27
|
+
if (!call)
|
|
28
|
+
throw new Error("no session was stored");
|
|
29
|
+
return call[0];
|
|
30
|
+
};
|
|
31
|
+
const routerReturns = (output) => {
|
|
32
|
+
applyRouterMock.mockResolvedValue(output);
|
|
33
|
+
};
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
vi.clearAllMocks();
|
|
36
|
+
storeSessionRecord = vi.fn();
|
|
37
|
+
db = { storeSessionRecord };
|
|
38
|
+
const pair = {
|
|
39
|
+
sign: vi.fn(),
|
|
40
|
+
address: "testAddress",
|
|
41
|
+
};
|
|
42
|
+
const config = {
|
|
43
|
+
penalties: FrictionlessPenalties.parse({}),
|
|
44
|
+
captchas: { solved: { count: 2 }, unsolved: { count: 0 } },
|
|
45
|
+
lRules: { en: 1 },
|
|
46
|
+
};
|
|
47
|
+
manager = new FrictionlessManager(db, pair, config);
|
|
48
|
+
manager.setSessionParams({
|
|
49
|
+
token: "tok",
|
|
50
|
+
score: 0.9,
|
|
51
|
+
threshold: 0.5,
|
|
52
|
+
scoreComponents: { baseScore: 0.9 },
|
|
53
|
+
ipAddress: getCompositeIpAddress("1.2.3.4"),
|
|
54
|
+
siteKey: SITE_KEY,
|
|
55
|
+
webView: false,
|
|
56
|
+
iFrame: false,
|
|
57
|
+
decryptedHeadHash: "",
|
|
58
|
+
});
|
|
59
|
+
manager.setRoutingContext(context);
|
|
60
|
+
});
|
|
61
|
+
it("persists puzzleTolerance and puzzle settings on a puzzle session", async () => {
|
|
62
|
+
routerReturns({
|
|
63
|
+
captchaType: CaptchaType.puzzle,
|
|
64
|
+
puzzleTolerance: 5,
|
|
65
|
+
puzzle: { decoyCount: 12, pieceScale: { min: 0.2, max: 0.4 } },
|
|
66
|
+
});
|
|
67
|
+
await manager.sendPuzzleCaptcha();
|
|
68
|
+
expect(storedSession().puzzleTolerance).toBe(5);
|
|
69
|
+
expect(storedSession().puzzle).toEqual({
|
|
70
|
+
decoyCount: 12,
|
|
71
|
+
pieceScale: { min: 0.2, max: 0.4 },
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it("persists a partial override without inventing the other fields", async () => {
|
|
75
|
+
routerReturns({
|
|
76
|
+
captchaType: CaptchaType.puzzle,
|
|
77
|
+
puzzle: { decoyCount: 30 },
|
|
78
|
+
});
|
|
79
|
+
await manager.sendPuzzleCaptcha();
|
|
80
|
+
expect(storedSession().puzzle).toEqual({ decoyCount: 30 });
|
|
81
|
+
expect(storedSession().puzzleTolerance).toBeUndefined();
|
|
82
|
+
});
|
|
83
|
+
it("persists tolerance alone when no render settings were named", async () => {
|
|
84
|
+
routerReturns({ captchaType: CaptchaType.puzzle, puzzleTolerance: 8 });
|
|
85
|
+
await manager.sendPuzzleCaptcha();
|
|
86
|
+
expect(storedSession().puzzleTolerance).toBe(8);
|
|
87
|
+
expect(storedSession().puzzle).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
it("leaves both undefined when the router named neither", async () => {
|
|
90
|
+
routerReturns({ captchaType: CaptchaType.puzzle });
|
|
91
|
+
await manager.sendPuzzleCaptcha();
|
|
92
|
+
expect(storedSession().puzzleTolerance).toBeUndefined();
|
|
93
|
+
expect(storedSession().puzzle).toBeUndefined();
|
|
94
|
+
});
|
|
95
|
+
it("drops the overrides when the router chose an image", async () => {
|
|
96
|
+
routerReturns({
|
|
97
|
+
captchaType: CaptchaType.image,
|
|
98
|
+
solvedImagesCount: 2,
|
|
99
|
+
puzzleTolerance: 5,
|
|
100
|
+
puzzle: { decoyCount: 12 },
|
|
101
|
+
});
|
|
102
|
+
await manager.sendPuzzleCaptcha();
|
|
103
|
+
expect(storedSession().captchaType).toBe(CaptchaType.image);
|
|
104
|
+
expect(storedSession().puzzleTolerance).toBeUndefined();
|
|
105
|
+
expect(storedSession().puzzle).toBeUndefined();
|
|
106
|
+
});
|
|
107
|
+
it("drops the overrides when the router chose pow", async () => {
|
|
108
|
+
routerReturns({
|
|
109
|
+
captchaType: CaptchaType.pow,
|
|
110
|
+
puzzleTolerance: 5,
|
|
111
|
+
puzzle: { decoyCount: 12 },
|
|
112
|
+
});
|
|
113
|
+
await manager.sendPuzzleCaptcha();
|
|
114
|
+
expect(storedSession().captchaType).toBe(CaptchaType.pow);
|
|
115
|
+
expect(storedSession().puzzleTolerance).toBeUndefined();
|
|
116
|
+
expect(storedSession().puzzle).toBeUndefined();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=routerPuzzleOverrides.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routerPuzzleOverrides.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CaptchaType, TrafficFilterAction, } from "@prosopo/types";
|
|
1
2
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { derivePlatform } from "../../../utils/devicePlatform.js";
|
|
3
|
+
import { derivePlatform, deriveTrafficPolicies, } from "../../../utils/devicePlatform.js";
|
|
3
4
|
const IPHONE_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
|
|
4
5
|
const IPAD_UA = "Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
|
|
5
6
|
const MAC_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15";
|
|
@@ -55,4 +56,63 @@ describe("derivePlatform", () => {
|
|
|
55
56
|
});
|
|
56
57
|
});
|
|
57
58
|
});
|
|
59
|
+
describe("deriveTrafficPolicies", () => {
|
|
60
|
+
const block = { action: TrafficFilterAction.Block };
|
|
61
|
+
const challenge = { action: TrafficFilterAction.Challenge };
|
|
62
|
+
it("returns undefined when there is no trafficFilter", () => {
|
|
63
|
+
expect(deriveTrafficPolicies(undefined)).toBeUndefined();
|
|
64
|
+
});
|
|
65
|
+
it("returns undefined when no category is configured", () => {
|
|
66
|
+
const tf = {
|
|
67
|
+
abuserScoreThreshold: 0.9,
|
|
68
|
+
skipExtrasOnValidDnsPath: true,
|
|
69
|
+
datacenterNameAllowlist: ["Cloudflare"],
|
|
70
|
+
};
|
|
71
|
+
expect(deriveTrafficPolicies(tf)).toBeUndefined();
|
|
72
|
+
});
|
|
73
|
+
it("carries challenge policies through, not just blocks", () => {
|
|
74
|
+
const tf = { vpn: challenge, datacenter: block };
|
|
75
|
+
expect(deriveTrafficPolicies(tf)).toEqual({
|
|
76
|
+
vpn: challenge,
|
|
77
|
+
datacenter: block,
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it("preserves the challenge policy's captcha overrides", () => {
|
|
81
|
+
const vpn = {
|
|
82
|
+
action: TrafficFilterAction.Challenge,
|
|
83
|
+
captchaType: CaptchaType.image,
|
|
84
|
+
solvedImagesCount: 4,
|
|
85
|
+
};
|
|
86
|
+
const tf = { vpn };
|
|
87
|
+
expect(deriveTrafficPolicies(tf)?.vpn).toEqual(vpn);
|
|
88
|
+
});
|
|
89
|
+
it("omits a category that is absent from the filter", () => {
|
|
90
|
+
const tf = { datacenter: block };
|
|
91
|
+
const policies = deriveTrafficPolicies(tf);
|
|
92
|
+
expect(policies).toEqual({ datacenter: block });
|
|
93
|
+
expect(policies?.vpn).toBeUndefined();
|
|
94
|
+
});
|
|
95
|
+
it("covers every policy-carrying category", () => {
|
|
96
|
+
const tf = {
|
|
97
|
+
vpn: block,
|
|
98
|
+
proxy: block,
|
|
99
|
+
tor: block,
|
|
100
|
+
datacenter: block,
|
|
101
|
+
abuser: block,
|
|
102
|
+
mobile: block,
|
|
103
|
+
satellite: block,
|
|
104
|
+
crawler: block,
|
|
105
|
+
};
|
|
106
|
+
expect(Object.keys(deriveTrafficPolicies(tf) ?? {}).sort()).toEqual([
|
|
107
|
+
"abuser",
|
|
108
|
+
"crawler",
|
|
109
|
+
"datacenter",
|
|
110
|
+
"mobile",
|
|
111
|
+
"proxy",
|
|
112
|
+
"satellite",
|
|
113
|
+
"tor",
|
|
114
|
+
"vpn",
|
|
115
|
+
]);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
58
118
|
//# sourceMappingURL=devicePlatform.unit.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devicePlatform.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/utils/devicePlatform.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"devicePlatform.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/utils/devicePlatform.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { RoutingMachinePlatform } from "@prosopo/types";
|
|
1
|
+
import type { ITrafficFilter, RoutingMachinePlatform, TrafficCategoryPolicies } from "@prosopo/types";
|
|
2
2
|
export declare const derivePlatform: (userAgent: string, webView: boolean, ipInfo?: {
|
|
3
3
|
isMobile?: boolean;
|
|
4
4
|
}) => RoutingMachinePlatform;
|
|
5
|
+
export declare const deriveTrafficPolicies: (trafficFilter: Partial<ITrafficFilter> | undefined) => TrafficCategoryPolicies | undefined;
|
|
5
6
|
//# sourceMappingURL=devicePlatform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devicePlatform.d.ts","sourceRoot":"","sources":["../../src/utils/devicePlatform.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"devicePlatform.d.ts","sourceRoot":"","sources":["../../src/utils/devicePlatform.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,gBAAgB,CAAC;AAcxB,eAAO,MAAM,cAAc,cACf,MAAM,WACR,OAAO,WACP;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7B,sBAOD,CAAC;AA0BH,eAAO,MAAM,qBAAqB,kBAClB,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,KAChD,uBAAuB,GAAG,SAY5B,CAAC"}
|
|
@@ -12,5 +12,38 @@ var derivePlatform = (userAgent, webView, ipInfo) => ({
|
|
|
12
12
|
isWebView: webView,
|
|
13
13
|
isMobile: typeof ipInfo?.isMobile === "boolean" ? ipInfo.isMobile : MOBILE_UA_REGEX.test(userAgent)
|
|
14
14
|
});
|
|
15
|
+
var TRAFFIC_FILTER_CATEGORIES = [
|
|
16
|
+
"vpn",
|
|
17
|
+
"proxy",
|
|
18
|
+
"tor",
|
|
19
|
+
"datacenter",
|
|
20
|
+
"abuser",
|
|
21
|
+
"mobile",
|
|
22
|
+
"satellite",
|
|
23
|
+
"crawler"
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Project a site's `trafficFilter` down to just its per-category policies, for
|
|
27
|
+
* consumption by routing / decision machines. Machines use these both to tell
|
|
28
|
+
* whether the operator rejects an egress class at all, and to inherit the
|
|
29
|
+
* operator's configured action when they classify one themselves — see
|
|
30
|
+
* `TrafficCategoryPolicies`.
|
|
31
|
+
*
|
|
32
|
+
* Returns `undefined` when no category is configured, so the field can be
|
|
33
|
+
* omitted from the machine input entirely.
|
|
34
|
+
*/
|
|
35
|
+
var deriveTrafficPolicies = (trafficFilter) => {
|
|
36
|
+
if (!trafficFilter) return void 0;
|
|
37
|
+
const policies = {};
|
|
38
|
+
let any = false;
|
|
39
|
+
for (const category of TRAFFIC_FILTER_CATEGORIES) {
|
|
40
|
+
const policy = trafficFilter[category];
|
|
41
|
+
if (policy) {
|
|
42
|
+
policies[category] = policy;
|
|
43
|
+
any = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return any ? policies : void 0;
|
|
47
|
+
};
|
|
15
48
|
//#endregion
|
|
16
|
-
export { derivePlatform };
|
|
49
|
+
export { derivePlatform, deriveTrafficPolicies };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devicePlatform.js","sourceRoot":"","sources":["../../src/utils/devicePlatform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"devicePlatform.js","sourceRoot":"","sources":["../../src/utils/devicePlatform.ts"],"names":[],"mappings":"AAuBA,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAC9D,MAAM,eAAe,GAAG,sDAAsD,CAAC;AAQ/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,SAAiB,EACjB,OAAgB,EAChB,MAA+B,EACN,EAAE,CAAC,CAAC;IAC7B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;IACvC,SAAS,EAAE,OAAO;IAClB,QAAQ,EACP,OAAO,MAAM,EAAE,QAAQ,KAAK,SAAS;QACpC,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;CACnC,CAAC,CAAC;AAKH,MAAM,yBAAyB,GAAG;IACjC,KAAK;IACL,OAAO;IACP,KAAK;IACL,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,SAAS;CACqD,CAAC;AAYhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,aAAkD,EACZ,EAAE;IACxC,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,MAAM,QAAQ,IAAI,yBAAyB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACZ,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC5B,GAAG,GAAG,IAAI,CAAC;QACZ,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/provider",
|
|
3
|
-
"version": "5.6.
|
|
3
|
+
"version": "5.6.2",
|
|
4
4
|
"author": "PROSOPO LIMITED <info@prosopo.io>",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -23,26 +23,26 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@noble/hashes": "1.8.0",
|
|
25
25
|
"@polkadot/util": "13.5.7",
|
|
26
|
-
"@prosopo/api": "4.1.
|
|
27
|
-
"@prosopo/api-express-router": "3.1.
|
|
26
|
+
"@prosopo/api": "4.1.2",
|
|
27
|
+
"@prosopo/api-express-router": "3.1.78",
|
|
28
28
|
"@prosopo/api-route": "2.6.56",
|
|
29
29
|
"@prosopo/common": "3.1.52",
|
|
30
|
-
"@prosopo/database": "4.0.
|
|
31
|
-
"@prosopo/datasets": "3.1.
|
|
32
|
-
"@prosopo/env": "3.6.
|
|
33
|
-
"@prosopo/ipinfo": "0.3.
|
|
34
|
-
"@prosopo/keyring": "2.9.
|
|
35
|
-
"@prosopo/load-balancer": "2.10.
|
|
30
|
+
"@prosopo/database": "4.0.24",
|
|
31
|
+
"@prosopo/datasets": "3.1.74",
|
|
32
|
+
"@prosopo/env": "3.6.47",
|
|
33
|
+
"@prosopo/ipinfo": "0.3.19",
|
|
34
|
+
"@prosopo/keyring": "2.9.81",
|
|
35
|
+
"@prosopo/load-balancer": "2.10.36",
|
|
36
36
|
"@prosopo/locale": "3.4.0",
|
|
37
37
|
"@prosopo/logger": "2.0.7",
|
|
38
38
|
"@prosopo/native-ja4": "0.0.3",
|
|
39
39
|
"@prosopo/native-merkle": "0.0.3",
|
|
40
40
|
"@prosopo/puzzle-assets": "0.1.3",
|
|
41
41
|
"@prosopo/redis-client": "1.0.33",
|
|
42
|
-
"@prosopo/types": "5.5.
|
|
43
|
-
"@prosopo/types-database": "5.3.
|
|
44
|
-
"@prosopo/types-env": "2.10.
|
|
45
|
-
"@prosopo/user-access-policy": "3.12.
|
|
42
|
+
"@prosopo/types": "5.5.1",
|
|
43
|
+
"@prosopo/types-database": "5.3.2",
|
|
44
|
+
"@prosopo/types-env": "2.10.41",
|
|
45
|
+
"@prosopo/user-access-policy": "3.12.30",
|
|
46
46
|
"@prosopo/util": "3.3.7",
|
|
47
47
|
"@prosopo/util-crypto": "13.5.30",
|
|
48
48
|
"cron": "3.1.7",
|