@prosopo/provider 4.8.0 → 4.8.1
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 +3 -3
- package/.turbo/turbo-build$colon$tsc.log +24 -24
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +5 -0
- package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +1 -1
- package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
- package/dist/tasks/spam/checkTrafficFilter.js +1 -1
- package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
- package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +15 -0
- package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@4.8.
|
|
2
|
+
> @prosopo/provider@4.8.1 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -100,9 +100,9 @@ rendering chunks...
|
|
|
100
100
|
[2mdist/cjs/[22m[36mapi/admin/apiGetAllDecisionMachinesEndpoint.cjs [39m[1m[2m 1.57 kB[22m[1m[22m
|
|
101
101
|
[2mdist/cjs/[22m[36mcompositeIpAddress.cjs [39m[1m[2m 1.64 kB[22m[1m[22m
|
|
102
102
|
[2mdist/cjs/[22m[36mschedulers/updateSpamEmailDomains.cjs [39m[1m[2m 1.65 kB[22m[1m[22m
|
|
103
|
-
[2mdist/cjs/[22m[36mtasks/spam/checkTrafficFilter.cjs [39m[1m[2m 1.67 kB[22m[1m[22m
|
|
104
103
|
[2mdist/cjs/[22m[36mutils/honeypot/phraseBank.cjs [39m[1m[2m 1.71 kB[22m[1m[22m
|
|
105
104
|
[2mdist/cjs/[22m[36mapi/admin/apiToggleMaintenanceModeEndpoint.cjs [39m[1m[2m 1.72 kB[22m[1m[22m
|
|
105
|
+
[2mdist/cjs/[22m[36mtasks/spam/checkTrafficFilter.cjs [39m[1m[2m 1.72 kB[22m[1m[22m
|
|
106
106
|
[2mdist/cjs/[22m[36mapi/public.cjs [39m[1m[2m 1.74 kB[22m[1m[22m
|
|
107
107
|
[2mdist/cjs/[22m[36mapi/admin/apiClearAllCountersEndpoint.cjs [39m[1m[2m 1.78 kB[22m[1m[22m
|
|
108
108
|
[2mdist/cjs/[22m[36mapi/admin/apiUpdateDecisionMachineEndpoint.cjs [39m[1m[2m 1.79 kB[22m[1m[22m
|
|
@@ -148,7 +148,7 @@ rendering chunks...
|
|
|
148
148
|
[2mdist/cjs/[22m[36mtasks/powCaptcha/powTasks.cjs [39m[1m[2m21.06 kB[22m[1m[22m
|
|
149
149
|
[2mdist/cjs/[22m[36mtasks/imgCaptcha/imgCaptchaTasks.cjs [39m[1m[2m26.91 kB[22m[1m[22m
|
|
150
150
|
[2mdist/cjs/[22m[36mtasks/detection/decodePayload.cjs [39m[1m[2m44.26 kB[22m[1m[22m
|
|
151
|
-
[32m✓ built in
|
|
151
|
+
[32m✓ built in 750ms[39m
|
|
152
152
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeBehavior.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodeBehavior.js
|
|
153
153
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodePayload.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodePayload.js
|
|
154
154
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeSimd.js to /home/runner/work/captcha/captcha/packages/provider/dist/cjs/tasks/detection/decodeSimd.js
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@4.8.
|
|
2
|
+
> @prosopo/provider@4.8.1 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
1:25:10 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../util/tsconfig.json
|
|
8
8
|
* ../logger/tsconfig.json
|
|
@@ -25,47 +25,47 @@
|
|
|
25
25
|
* ../load-balancer/tsconfig.json
|
|
26
26
|
* tsconfig.json
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
1:25:10 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
1:25:10 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
1:25:10 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
1:25:10 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
1:25:10 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
1:25:10 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
1:25:10 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
1:25:10 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
1:25:10 PM - Project '../ipinfo/tsconfig.json' is up to date because newest input '../ipinfo/src/IpInfoService.ts' is older than output '../ipinfo/tsconfig.tsbuildinfo'
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
1:25:10 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
1:25:10 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
1:25:10 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
1:25:10 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/index.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
1:25:10 PM - Project '../database/tsconfig.json' is up to date because newest input '../database/src/tests/integration/ipInfoPersistence.integration.test.ts' is older than output '../database/tsconfig.tsbuildinfo'
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
1:25:10 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
1:25:10 PM - Project '../types-env/tsconfig.json' is up to date because newest input '../types-env/src/env.ts' is older than output '../types-env/tsconfig.tsbuildinfo'
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
1:25:10 PM - Project '../env/tsconfig.json' is up to date because newest input '../env/src/env.ts' is older than output '../env/tsconfig.tsbuildinfo'
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
1:25:10 PM - Project '../api-express-router/tsconfig.json' is up to date because newest input '../api-express-router/src/errorHandler.ts' is older than output '../api-express-router/tsconfig.tsbuildinfo'
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
1:25:10 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/tests/mocks/data/captchas.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
1:25:10 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
1:25:10 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
1:25:10 PM - Building project '/home/runner/work/captcha/captcha/packages/provider/tsconfig.json'...
|
|
71
71
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/provider@4.8.
|
|
2
|
+
> @prosopo/provider@4.8.1 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/provider@4.8.
|
|
6
|
+
> @prosopo/provider@4.8.1 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -105,9 +105,9 @@ rendering chunks...
|
|
|
105
105
|
[2mdist/[22m[36mcompositeIpAddress.js [39m[1m[2m 1.44 kB[22m[1m[22m
|
|
106
106
|
[2mdist/[22m[36mapi/captcha/maintenanceModeResponses.js [39m[1m[2m 1.47 kB[22m[1m[22m
|
|
107
107
|
[2mdist/[22m[36mschedulers/updateSpamEmailDomains.js [39m[1m[2m 1.50 kB[22m[1m[22m
|
|
108
|
-
[2mdist/[22m[36mtasks/spam/checkTrafficFilter.js [39m[1m[2m 1.56 kB[22m[1m[22m
|
|
109
108
|
[2mdist/[22m[36mutils/honeypot/phraseBank.js [39m[1m[2m 1.57 kB[22m[1m[22m
|
|
110
109
|
[2mdist/[22m[36mapi/public.js [39m[1m[2m 1.60 kB[22m[1m[22m
|
|
110
|
+
[2mdist/[22m[36mtasks/spam/checkTrafficFilter.js [39m[1m[2m 1.61 kB[22m[1m[22m
|
|
111
111
|
[2mdist/[22m[36mapi/admin/apiDnsEventEndpoint.js [39m[1m[2m 1.64 kB[22m[1m[22m
|
|
112
112
|
[2mdist/[22m[36mapi/admin/apiClearAllCountersEndpoint.js [39m[1m[2m 1.66 kB[22m[1m[22m
|
|
113
113
|
[2mdist/[22m[36mapi/admin/apiUpdateDecisionMachineEndpoint.js [39m[1m[2m 1.67 kB[22m[1m[22m
|
|
@@ -150,7 +150,7 @@ rendering chunks...
|
|
|
150
150
|
[2mdist/[22m[36mtasks/powCaptcha/powTasks.js [39m[1m[2m20.71 kB[22m[1m[22m
|
|
151
151
|
[2mdist/[22m[36mtasks/imgCaptcha/imgCaptchaTasks.js [39m[1m[2m26.52 kB[22m[1m[22m
|
|
152
152
|
[2mdist/[22m[36mtasks/detection/decodePayload.js [39m[1m[2m44.24 kB[22m[1m[22m
|
|
153
|
-
[32m✓ built in
|
|
153
|
+
[32m✓ built in 906ms[39m
|
|
154
154
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeBehavior.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodeBehavior.js
|
|
155
155
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodePayload.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodePayload.js
|
|
156
156
|
[copy-plugin] copying /home/runner/work/captcha/captcha/packages/provider/src/tasks/detection/decodeSimd.js to /home/runner/work/captcha/captcha/packages/provider/dist/tasks/detection/decodeSimd.js
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# @prosopo/provider
|
|
2
2
|
|
|
3
|
+
## 4.8.1
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- 8a30164: `checkTrafficFilter` no longer treats VPN traffic that exits from a datacenter IP as datacenter traffic. Commercial VPNs (Mullvad, NordVPN, ProtonVPN, …) all run on cloud providers, so operators who enabled `blockDatacenter` but not `blockVpn` were silently catching VPN end-users they did not intend to block. The datacenter rule is now suppressed when `ipInfo.isVPN` is true and `blockVpn` is false. Closes prosopo/captcha-private#3479.
|
|
7
|
+
|
|
3
8
|
## 4.8.0
|
|
4
9
|
### Minor Changes
|
|
5
10
|
|
|
@@ -24,7 +24,7 @@ const checkTrafficFilter = (ipInfo, trafficFilter) => {
|
|
|
24
24
|
return { isBlocked: true, reason: types.ResultReason.ABUSER_BLOCKED };
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
if (trafficFilter.blockDatacenter && ipInfo.isDatacenter) {
|
|
27
|
+
if (trafficFilter.blockDatacenter && ipInfo.isDatacenter && !(ipInfo.isVPN && !trafficFilter.blockVpn)) {
|
|
28
28
|
return { isBlocked: true, reason: types.ResultReason.DATACENTER_BLOCKED };
|
|
29
29
|
}
|
|
30
30
|
if (trafficFilter.blockMobile && ipInfo.isMobile) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTrafficFilter.d.ts","sourceRoot":"","sources":["../../../src/tasks/spam/checkTrafficFilter.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,YAAY,EAEZ,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,kBAAkB,GAC3B,YAAY,CAAC,WAAW,GACxB,YAAY,CAAC,aAAa,GAC1B,YAAY,CAAC,WAAW,GACxB,YAAY,CAAC,cAAc,GAC3B,YAAY,CAAC,kBAAkB,GAC/B,YAAY,CAAC,cAAc,GAC3B,YAAY,CAAC,iBAAiB,GAC9B,YAAY,CAAC,eAAe,CAAC;AAEhC,MAAM,MAAM,kBAAkB,GAC3B;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GACpB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"checkTrafficFilter.d.ts","sourceRoot":"","sources":["../../../src/tasks/spam/checkTrafficFilter.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,YAAY,EAEZ,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,kBAAkB,GAC3B,YAAY,CAAC,WAAW,GACxB,YAAY,CAAC,aAAa,GAC1B,YAAY,CAAC,WAAW,GACxB,YAAY,CAAC,cAAc,GAC3B,YAAY,CAAC,kBAAkB,GAC/B,YAAY,CAAC,cAAc,GAC3B,YAAY,CAAC,iBAAiB,GAC9B,YAAY,CAAC,eAAe,CAAC;AAEhC,MAAM,MAAM,kBAAkB,GAC3B;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GACpB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAmBnD,eAAO,MAAM,kBAAkB,WACtB,cAAc,GAAG,SAAS,iBACnB,OAAO,CAAC,cAAc,CAAC,KACpC,kBAmDF,CAAC"}
|
|
@@ -22,7 +22,7 @@ const checkTrafficFilter = (ipInfo, trafficFilter) => {
|
|
|
22
22
|
return { isBlocked: true, reason: ResultReason.ABUSER_BLOCKED };
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
if (trafficFilter.blockDatacenter && ipInfo.isDatacenter) {
|
|
25
|
+
if (trafficFilter.blockDatacenter && ipInfo.isDatacenter && !(ipInfo.isVPN && !trafficFilter.blockVpn)) {
|
|
26
26
|
return { isBlocked: true, reason: ResultReason.DATACENTER_BLOCKED };
|
|
27
27
|
}
|
|
28
28
|
if (trafficFilter.blockMobile && ipInfo.isMobile) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTrafficFilter.js","sourceRoot":"","sources":["../../../src/tasks/spam/checkTrafficFilter.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,YAAY,EACZ,wCAAwC,GACxC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkTrafficFilter.js","sourceRoot":"","sources":["../../../src/tasks/spam/checkTrafficFilter.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,YAAY,EACZ,wCAAwC,GACxC,MAAM,gBAAgB,CAAC;AAiCxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,MAAkC,EAClC,aAAsC,EACjB,EAAE;IACvB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,aAAa,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,aAAa,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,aAAa,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5D,MAAM,SAAS,GACd,aAAa,CAAC,oBAAoB;YAClC,wCAAwC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACxB,MAAM,CAAC,WAAW,IAAI,CAAC,EACvB,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAC9B,CAAC;QACF,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,cAAc,EAAE,CAAC;QACjE,CAAC;IACF,CAAC;IAED,IACC,aAAa,CAAC,eAAe;QAC7B,MAAM,CAAC,YAAY;QACnB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzC,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,aAAa,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,cAAc,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,aAAa,CAAC,cAAc,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACxD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,iBAAiB,EAAE,CAAC;IACpE,CAAC;IAED,IAAI,aAAa,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,eAAe,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -68,6 +68,21 @@ describe("checkTrafficFilter", () => {
|
|
|
68
68
|
reason: "API.DATACENTER_BLOCKED",
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
|
+
it("does not block VPN-on-datacenter IPs when blockDatacenter is on but blockVpn is off", () => {
|
|
72
|
+
const result = checkTrafficFilter(baseInfo({ isDatacenter: true, isVPN: true }), { ...allBlocked, blockVpn: false });
|
|
73
|
+
expect(result).toEqual({ isBlocked: false });
|
|
74
|
+
});
|
|
75
|
+
it("still blocks raw datacenter (non-VPN) IPs when blockDatacenter is on and blockVpn is off", () => {
|
|
76
|
+
const result = checkTrafficFilter(baseInfo({ isDatacenter: true, isVPN: false }), { ...allBlocked, blockVpn: false });
|
|
77
|
+
expect(result).toEqual({
|
|
78
|
+
isBlocked: true,
|
|
79
|
+
reason: "API.DATACENTER_BLOCKED",
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
it("blocks VPN-on-datacenter IPs as VPN when both filters are enabled", () => {
|
|
83
|
+
const result = checkTrafficFilter(baseInfo({ isDatacenter: true, isVPN: true }), allBlocked);
|
|
84
|
+
expect(result).toEqual({ isBlocked: true, reason: "API.VPN_BLOCKED" });
|
|
85
|
+
});
|
|
71
86
|
it("blocks mobile when blockMobile is true", () => {
|
|
72
87
|
const result = checkTrafficFilter(baseInfo({ isMobile: true }), allBlocked);
|
|
73
88
|
expect(result).toEqual({ isBlocked: true, reason: "API.MOBILE_BLOCKED" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTrafficFilter.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/spam/checkTrafficFilter.unit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkTrafficFilter.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/spam/checkTrafficFilter.unit.test.ts"],"names":[],"mappings":"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"}
|