@prosopo/user-access-policy 3.12.8 → 3.12.10
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 +45 -41
- package/.turbo/turbo-build$colon$tsc.log +14 -14
- package/.turbo/turbo-build.log +46 -42
- package/CHANGELOG.md +24 -0
- package/dist/.export.js +7 -21
- package/dist/_virtual/_rolldown/runtime.js +3 -0
- package/dist/api/.export.js +2 -9
- package/dist/api/accessRulesApiClient.js +1 -1
- package/dist/api/delete/.export.js +2 -1
- package/dist/api/delete/deleteAllRules.js +22 -24
- package/dist/api/delete/deleteRuleGroups.js +39 -51
- package/dist/api/delete/deleteRules.js +37 -41
- package/dist/api/read/.export.js +2 -1
- package/dist/api/read/fetchRules.js +34 -42
- package/dist/api/read/findRuleIds.js +35 -48
- package/dist/api/read/getMissingIds.js +36 -40
- package/dist/api/ruleApiRoutes.js +62 -120
- package/dist/api/rulesApiClient.js +51 -87
- package/dist/api/write/.export.js +2 -1
- package/dist/api/write/insertRules.js +84 -102
- package/dist/api/write/rehashRules.js +48 -56
- package/dist/cjs/.export.cjs +21 -23
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/api/.export.cjs +6 -10
- package/dist/cjs/api/accessRulesApiClient.cjs +0 -0
- package/dist/cjs/api/delete/.export.cjs +0 -1
- package/dist/cjs/api/delete/deleteAllRules.cjs +22 -24
- package/dist/cjs/api/delete/deleteRuleGroups.cjs +39 -51
- package/dist/cjs/api/delete/deleteRules.cjs +41 -42
- package/dist/cjs/api/read/.export.cjs +0 -1
- package/dist/cjs/api/read/fetchRules.cjs +34 -41
- package/dist/cjs/api/read/findRuleIds.cjs +37 -48
- package/dist/cjs/api/read/getMissingIds.cjs +36 -39
- package/dist/cjs/api/ruleApiRoutes.cjs +69 -125
- package/dist/cjs/api/rulesApiClient.cjs +54 -90
- package/dist/cjs/api/write/.export.cjs +0 -1
- package/dist/cjs/api/write/insertRules.cjs +85 -103
- package/dist/cjs/api/write/rehashRules.cjs +48 -56
- package/dist/cjs/classifyOs.cjs +46 -26
- package/dist/cjs/mongoose/.export.cjs +2 -3
- package/dist/cjs/mongoose/mongooseRuleSchema.cjs +97 -36
- package/dist/cjs/redis/.export.cjs +4 -5
- package/dist/cjs/redis/reader/redisAggregate.cjs +59 -84
- package/dist/cjs/redis/reader/redisRulesQuery.cjs +74 -116
- package/dist/cjs/redis/reader/redisRulesReader.cjs +322 -503
- package/dist/cjs/redis/reader/redisRulesSplitQuery.cjs +94 -72
- package/dist/cjs/redis/redisClient.cjs +53 -58
- package/dist/cjs/redis/redisRuleIndex.cjs +93 -49
- package/dist/cjs/redis/redisRulesStorage.cjs +21 -30
- package/dist/cjs/redis/redisRulesWriter.cjs +86 -112
- package/dist/cjs/rule.cjs +8 -7
- package/dist/cjs/ruleInput/.export.cjs +7 -8
- package/dist/cjs/ruleInput/policyInput.cjs +35 -58
- package/dist/cjs/ruleInput/ruleInput.cjs +37 -42
- package/dist/cjs/ruleInput/userScopeInput.cjs +47 -55
- package/dist/cjs/ruleRecord.cjs +15 -22
- package/dist/cjs/rulesStorage.cjs +7 -6
- package/dist/cjs/transformRule.cjs +36 -70
- package/dist/classifyOs.js +48 -29
- package/dist/mongoose/.export.js +2 -3
- package/dist/mongoose/mongooseRuleSchema.js +99 -38
- package/dist/redis/.export.js +3 -5
- package/dist/redis/reader/redisAggregate.js +60 -86
- package/dist/redis/reader/redisRulesQuery.js +75 -118
- package/dist/redis/reader/redisRulesReader.js +312 -487
- package/dist/redis/reader/redisRulesSplitQuery.js +96 -75
- package/dist/redis/redisClient.js +54 -62
- package/dist/redis/redisRuleIndex.js +93 -58
- package/dist/redis/redisRulesStorage.js +21 -30
- package/dist/redis/redisRulesWriter.js +82 -113
- package/dist/rule.js +10 -10
- package/dist/ruleInput/.export.js +3 -7
- package/dist/ruleInput/policyInput.js +35 -61
- package/dist/ruleInput/ruleInput.js +36 -44
- package/dist/ruleInput/userScopeInput.js +44 -55
- package/dist/ruleRecord.js +17 -27
- package/dist/rulesStorage.js +9 -8
- package/dist/tests/redis/redisRulesStorage.integration.test.js +1 -3
- package/dist/tests/redis/redisRulesStorage.integration.test.js.map +1 -1
- package/dist/transformRule.js +34 -73
- package/entries.ts +25 -6
- package/package.json +13 -12
- package/src/tests/redis/redisRulesStorage.integration.test.ts +191 -195
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,105 +1,87 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
rule: {
|
|
89
|
-
...ruleBase,
|
|
90
|
-
...policyScope
|
|
91
|
-
},
|
|
92
|
-
expiresUnixTimestamp: group.expiresUnixTimestamp
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
} else {
|
|
96
|
-
ruleEntries.push({
|
|
97
|
-
rule: ruleBase,
|
|
98
|
-
expiresUnixTimestamp: group.expiresUnixTimestamp
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return this.accessRulesWriter.insertRules(ruleEntries);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
2
|
+
const require_ruleInput_policyInput = require("../../ruleInput/policyInput.cjs");
|
|
3
|
+
const require_ruleInput_userScopeInput = require("../../ruleInput/userScopeInput.cjs");
|
|
4
|
+
let zod = require("zod");
|
|
5
|
+
let _prosopo_api_route = require("@prosopo/api-route");
|
|
6
|
+
let _prosopo_logger = require("@prosopo/logger");
|
|
7
|
+
//#region src/api/write/insertRules.ts
|
|
8
|
+
var InsertRulesEndpoint = class {
|
|
9
|
+
constructor(accessRulesWriter, logger) {
|
|
10
|
+
this.accessRulesWriter = accessRulesWriter;
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
}
|
|
13
|
+
getRequestArgsSchema() {
|
|
14
|
+
return zod.z.array(zod.z.object({
|
|
15
|
+
accessPolicy: require_ruleInput_policyInput.accessPolicyInput,
|
|
16
|
+
policyScopes: zod.z.array(require_ruleInput_policyInput.policyScopeInput).optional(),
|
|
17
|
+
groupId: zod.z.string().optional(),
|
|
18
|
+
userScopes: zod.z.array(require_ruleInput_userScopeInput.userScopeInput),
|
|
19
|
+
expiresUnixTimestamp: zod.z.number().optional()
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
async processRequest(args, logger) {
|
|
23
|
+
const log = logger ?? this.logger;
|
|
24
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
25
|
+
setTimeout(() => {
|
|
26
|
+
resolve({ status: _prosopo_api_route.ApiEndpointResponseStatus.PROCESSING });
|
|
27
|
+
}, 5e3);
|
|
28
|
+
});
|
|
29
|
+
const userScopesCount = args.reduce((userScopesCount, group) => userScopesCount + group.userScopes.length, 0);
|
|
30
|
+
const createRulesPromise = this.createRuleGroups(args).then((insertedIds) => {
|
|
31
|
+
log.info(() => ({
|
|
32
|
+
msg: "Endpoint inserted access rules",
|
|
33
|
+
data: {
|
|
34
|
+
userScopesCount,
|
|
35
|
+
insertedCount: insertedIds.length,
|
|
36
|
+
uniqueIdsCount: new Set(insertedIds).size
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
log.debug(() => ({
|
|
40
|
+
msg: "Inserted access rules details",
|
|
41
|
+
data: {
|
|
42
|
+
insertedIds,
|
|
43
|
+
input: args
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
return { status: _prosopo_api_route.ApiEndpointResponseStatus.SUCCESS };
|
|
47
|
+
}).catch((error) => {
|
|
48
|
+
if (_prosopo_logger.LogLevel.enum.debug === log.getLogLevel()) log.error(() => ({
|
|
49
|
+
err: error,
|
|
50
|
+
data: { args },
|
|
51
|
+
msg: "Failed to insert access rules"
|
|
52
|
+
}));
|
|
53
|
+
return { status: _prosopo_api_route.ApiEndpointResponseStatus.FAIL };
|
|
54
|
+
});
|
|
55
|
+
return Promise.race([timeoutPromise, createRulesPromise]);
|
|
56
|
+
}
|
|
57
|
+
async createRuleGroups(groups) {
|
|
58
|
+
const ruleIdPromises = groups.map((group) => this.createRulesGroup(group));
|
|
59
|
+
return (await Promise.all(ruleIdPromises)).flat();
|
|
60
|
+
}
|
|
61
|
+
async createRulesGroup(group) {
|
|
62
|
+
const ruleEntries = [];
|
|
63
|
+
const policyScopes = group.policyScopes || [];
|
|
64
|
+
const sanitizedPolicy = require_ruleInput_policyInput.sanitizeAccessPolicy(group.accessPolicy);
|
|
65
|
+
for (const userScope of group.userScopes) {
|
|
66
|
+
const ruleBase = {
|
|
67
|
+
...sanitizedPolicy,
|
|
68
|
+
...userScope,
|
|
69
|
+
...group.groupId ? { groupId: group.groupId } : {}
|
|
70
|
+
};
|
|
71
|
+
if (policyScopes.length > 0) for (const policyScope of policyScopes) ruleEntries.push({
|
|
72
|
+
rule: {
|
|
73
|
+
...ruleBase,
|
|
74
|
+
...policyScope
|
|
75
|
+
},
|
|
76
|
+
expiresUnixTimestamp: group.expiresUnixTimestamp
|
|
77
|
+
});
|
|
78
|
+
else ruleEntries.push({
|
|
79
|
+
rule: ruleBase,
|
|
80
|
+
expiresUnixTimestamp: group.expiresUnixTimestamp
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return this.accessRulesWriter.insertRules(ruleEntries);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
//#endregion
|
|
105
87
|
exports.InsertRulesEndpoint = InsertRulesEndpoint;
|
|
@@ -1,58 +1,50 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
return {
|
|
53
|
-
status: apiRoute.ApiEndpointResponseStatus.SUCCESS,
|
|
54
|
-
data: {}
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
}
|
|
2
|
+
let _prosopo_api_route = require("@prosopo/api-route");
|
|
3
|
+
//#region src/api/write/rehashRules.ts
|
|
4
|
+
var RehashRulesEndpoint = class {
|
|
5
|
+
constructor(accessRulesStorage, logger) {
|
|
6
|
+
this.accessRulesStorage = accessRulesStorage;
|
|
7
|
+
this.logger = logger;
|
|
8
|
+
}
|
|
9
|
+
getRequestArgsSchema() {}
|
|
10
|
+
async processRequest(logger) {
|
|
11
|
+
const log = logger ?? this.logger;
|
|
12
|
+
await this.accessRulesStorage.fetchAllRuleIds(async (ruleIds) => {
|
|
13
|
+
log.info(() => ({
|
|
14
|
+
msg: "Fetched rule ids batch",
|
|
15
|
+
data: {
|
|
16
|
+
count: ruleIds.length,
|
|
17
|
+
ruleIds
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
const ruleEntries = await this.accessRulesStorage.fetchRules(ruleIds);
|
|
21
|
+
log.info(() => ({
|
|
22
|
+
msg: "Fetched rules",
|
|
23
|
+
data: { count: ruleEntries.length }
|
|
24
|
+
}));
|
|
25
|
+
if (ruleEntries.length !== ruleIds.length) log.warn(() => ({
|
|
26
|
+
msg: "Fetched rules count is not equal to the requested count",
|
|
27
|
+
data: {
|
|
28
|
+
fetchedCount: ruleEntries.length,
|
|
29
|
+
requestedCount: ruleIds.length
|
|
30
|
+
}
|
|
31
|
+
}));
|
|
32
|
+
await this.accessRulesStorage.deleteRules(ruleIds);
|
|
33
|
+
log.info(() => ({
|
|
34
|
+
msg: "Deleted rules",
|
|
35
|
+
data: { count: ruleIds.length }
|
|
36
|
+
}));
|
|
37
|
+
await this.accessRulesStorage.insertRules(ruleEntries);
|
|
38
|
+
log.info(() => ({
|
|
39
|
+
msg: "Inserted rules",
|
|
40
|
+
data: { count: ruleEntries.length }
|
|
41
|
+
}));
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
status: _prosopo_api_route.ApiEndpointResponseStatus.SUCCESS,
|
|
45
|
+
data: {}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
58
50
|
exports.RehashRulesEndpoint = RehashRulesEndpoint;
|
package/dist/cjs/classifyOs.cjs
CHANGED
|
@@ -1,31 +1,51 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
//#region src/classifyOs.ts
|
|
3
|
+
/**
|
|
4
|
+
* The operating systems the classifier can resolve a request to. Kept
|
|
5
|
+
* deliberately in step with the OS vocabulary in
|
|
6
|
+
* `@prosopo/decision-machines`' `uaClassify` (so a routing-rule `osNameIn` and
|
|
7
|
+
* an access-rule `os` agree on the same names), but defined here because the
|
|
8
|
+
* provider / user-access-policy request path cannot depend on the
|
|
9
|
+
* decision-machines package.
|
|
10
|
+
*
|
|
11
|
+
* `unknown` is the catch-all when no signature matches. It is a first-class
|
|
12
|
+
* value so an allow-list ("only let Windows through") can block unrecognised
|
|
13
|
+
* User-Agents instead of silently passing them.
|
|
14
|
+
*/
|
|
15
|
+
var OS_NAMES = [
|
|
16
|
+
"windows",
|
|
17
|
+
"macos",
|
|
18
|
+
"ios",
|
|
19
|
+
"android",
|
|
20
|
+
"linux",
|
|
21
|
+
"unknown"
|
|
10
22
|
];
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Classify the operating system from a raw User-Agent string. Pure — no
|
|
25
|
+
* navigator/window/DOM dependence — so it is safe to call on the provider's
|
|
26
|
+
* server-side request path.
|
|
27
|
+
*
|
|
28
|
+
* Detection order matches `uaClassify.classifyUserAgent`: iOS (iphone/ipad/
|
|
29
|
+
* ipod) is tested before the generic mac signature, and Android before Linux,
|
|
30
|
+
* because those User-Agents contain the more general token too. Detection is
|
|
31
|
+
* conservative — anything unrecognised returns `unknown` rather than guessing,
|
|
32
|
+
* so an `os === "ios"` rule never fires on a UA we don't understand.
|
|
33
|
+
*
|
|
34
|
+
* The classification is driven off the full User-Agent rather than the
|
|
35
|
+
* `sec-ch-ua-platform` client hint on purpose: a client can simply omit client
|
|
36
|
+
* hints, but stripping the User-Agent breaks far more, so the UA is the more
|
|
37
|
+
* reliable signal for an OS-restriction rule that is meant to be hard to
|
|
38
|
+
* bypass.
|
|
39
|
+
*/
|
|
40
|
+
var classifyOs = (userAgent) => {
|
|
41
|
+
const ua = (userAgent || "").toLowerCase();
|
|
42
|
+
if (/iphone|ipad|ipod/.test(ua)) return "ios";
|
|
43
|
+
if (/android/.test(ua)) return "android";
|
|
44
|
+
if (/windows/.test(ua)) return "windows";
|
|
45
|
+
if (/macintosh|mac os/.test(ua)) return "macos";
|
|
46
|
+
if (/linux/.test(ua)) return "linux";
|
|
47
|
+
return "unknown";
|
|
29
48
|
};
|
|
49
|
+
//#endregion
|
|
30
50
|
exports.OS_NAMES = OS_NAMES;
|
|
31
51
|
exports.classifyOs = classifyOs;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
exports.accessRuleMongooseSchema =
|
|
2
|
+
const require_mongoose_mongooseRuleSchema = require("./mongooseRuleSchema.cjs");
|
|
3
|
+
exports.accessRuleMongooseSchema = require_mongoose_mongooseRuleSchema.accessRuleMongooseSchema;
|
|
@@ -1,42 +1,103 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
//#region src/mongoose/mongooseRuleSchema.ts
|
|
3
|
+
var userAttributesSchema = {
|
|
4
|
+
userId: {
|
|
5
|
+
type: String,
|
|
6
|
+
required: false
|
|
7
|
+
},
|
|
8
|
+
ja4Hash: {
|
|
9
|
+
type: String,
|
|
10
|
+
required: false
|
|
11
|
+
},
|
|
12
|
+
userAgent: {
|
|
13
|
+
type: String,
|
|
14
|
+
required: false
|
|
15
|
+
},
|
|
16
|
+
headersHash: {
|
|
17
|
+
type: String,
|
|
18
|
+
required: false
|
|
19
|
+
},
|
|
20
|
+
headHash: {
|
|
21
|
+
type: String,
|
|
22
|
+
required: false
|
|
23
|
+
},
|
|
24
|
+
coords: {
|
|
25
|
+
type: String,
|
|
26
|
+
required: false
|
|
27
|
+
},
|
|
28
|
+
countryCode: {
|
|
29
|
+
type: String,
|
|
30
|
+
required: false
|
|
31
|
+
},
|
|
32
|
+
asn: {
|
|
33
|
+
type: Number,
|
|
34
|
+
required: false
|
|
35
|
+
},
|
|
36
|
+
os: {
|
|
37
|
+
type: String,
|
|
38
|
+
required: false
|
|
39
|
+
}
|
|
13
40
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
41
|
+
var userIpSchema = {
|
|
42
|
+
ip: {
|
|
43
|
+
type: String,
|
|
44
|
+
required: false
|
|
45
|
+
},
|
|
46
|
+
ipMask: {
|
|
47
|
+
type: String,
|
|
48
|
+
required: false
|
|
49
|
+
}
|
|
17
50
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
51
|
+
var userScopeSchema = {
|
|
52
|
+
...userAttributesSchema,
|
|
53
|
+
...userIpSchema
|
|
21
54
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
55
|
+
var accessRuleMongooseSchema = {
|
|
56
|
+
type: {
|
|
57
|
+
type: String,
|
|
58
|
+
required: true
|
|
59
|
+
},
|
|
60
|
+
captchaType: {
|
|
61
|
+
type: String,
|
|
62
|
+
required: false
|
|
63
|
+
},
|
|
64
|
+
description: {
|
|
65
|
+
type: String,
|
|
66
|
+
required: false
|
|
67
|
+
},
|
|
68
|
+
solvedImagesCount: {
|
|
69
|
+
type: Number,
|
|
70
|
+
required: false
|
|
71
|
+
},
|
|
72
|
+
imageThreshold: {
|
|
73
|
+
type: Number,
|
|
74
|
+
required: false
|
|
75
|
+
},
|
|
76
|
+
powDifficulty: {
|
|
77
|
+
type: Number,
|
|
78
|
+
required: false
|
|
79
|
+
},
|
|
80
|
+
unsolvedImagesCount: {
|
|
81
|
+
type: Number,
|
|
82
|
+
required: false
|
|
83
|
+
},
|
|
84
|
+
frictionlessScore: {
|
|
85
|
+
type: Number,
|
|
86
|
+
required: false
|
|
87
|
+
},
|
|
88
|
+
deferToVerify: {
|
|
89
|
+
type: Boolean,
|
|
90
|
+
required: false
|
|
91
|
+
},
|
|
92
|
+
clientId: {
|
|
93
|
+
type: String,
|
|
94
|
+
required: false
|
|
95
|
+
},
|
|
96
|
+
...userScopeSchema,
|
|
97
|
+
ruleGroupId: {
|
|
98
|
+
type: String,
|
|
99
|
+
required: false
|
|
100
|
+
}
|
|
41
101
|
};
|
|
102
|
+
//#endregion
|
|
42
103
|
exports.accessRuleMongooseSchema = accessRuleMongooseSchema;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
2
|
+
const require_redis_redisRuleIndex = require("./redisRuleIndex.cjs");
|
|
3
|
+
const require_redis_redisRulesStorage = require("./redisRulesStorage.cjs");
|
|
4
|
+
exports.accessRulesRedisIndex = require_redis_redisRuleIndex.accessRulesRedisIndex;
|
|
5
|
+
exports.createRedisAccessRulesStorage = require_redis_redisRulesStorage.createRedisAccessRulesStorage;
|