@prosopo/types-database 3.3.5 → 4.0.0
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/CHANGELOG.md +99 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/types/captcha.cjs +3 -19
- package/dist/cjs/types/client.cjs +68 -8
- package/dist/cjs/types/index.cjs +1 -1
- package/dist/cjs/types/provider.cjs +39 -36
- package/dist/index.js +2 -2
- package/dist/types/captcha.js +4 -20
- package/dist/types/client.js +68 -8
- package/dist/types/index.js +2 -2
- package/dist/types/provider.js +42 -39
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,104 @@
|
|
|
1
1
|
# @prosopo/types-database
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
### Major Changes
|
|
5
|
+
|
|
6
|
+
- 8f22479: Update settings schema
|
|
7
|
+
|
|
8
|
+
### Minor Changes
|
|
9
|
+
|
|
10
|
+
- bb5f41c: Context awareness
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 55a64c6: stop refresh image to pow
|
|
15
|
+
- 8ce9205: Change engine requirements
|
|
16
|
+
- b6e98b2: Run npm audit
|
|
17
|
+
- 55a64c6: Persist sessions for user ip combinations
|
|
18
|
+
- Updated dependencies [8ce9205]
|
|
19
|
+
- Updated dependencies [15ae7cf]
|
|
20
|
+
- Updated dependencies [bb5f41c]
|
|
21
|
+
- Updated dependencies [8ce9205]
|
|
22
|
+
- Updated dependencies [df79c03]
|
|
23
|
+
- Updated dependencies [b6e98b2]
|
|
24
|
+
- @prosopo/user-access-policy@3.5.28
|
|
25
|
+
- @prosopo/types@3.6.0
|
|
26
|
+
- @prosopo/common@3.1.22
|
|
27
|
+
- @prosopo/locale@3.1.22
|
|
28
|
+
- @prosopo/config@3.1.22
|
|
29
|
+
|
|
30
|
+
## 3.3.13
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Updated dependencies [8f1773a]
|
|
34
|
+
- @prosopo/types@3.5.11
|
|
35
|
+
- @prosopo/user-access-policy@3.5.27
|
|
36
|
+
|
|
37
|
+
## 3.3.12
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- cb8ab85: head entropy for bot detection
|
|
41
|
+
- Updated dependencies [cb8ab85]
|
|
42
|
+
- @prosopo/types@3.5.10
|
|
43
|
+
- @prosopo/user-access-policy@3.5.26
|
|
44
|
+
|
|
45
|
+
## 3.3.11
|
|
46
|
+
### Patch Changes
|
|
47
|
+
|
|
48
|
+
- 43907e8: Convert timestamp fields from numbers to Date objects throughout codebase
|
|
49
|
+
- b4639ec: Merge frictionless tokens into sessions
|
|
50
|
+
- 7101036: Force consistent IPs logic
|
|
51
|
+
- Updated dependencies [43907e8]
|
|
52
|
+
- Updated dependencies [005ce66]
|
|
53
|
+
- Updated dependencies [7101036]
|
|
54
|
+
- @prosopo/types@3.5.9
|
|
55
|
+
- @prosopo/user-access-policy@3.5.25
|
|
56
|
+
|
|
57
|
+
## 3.3.10
|
|
58
|
+
### Patch Changes
|
|
59
|
+
|
|
60
|
+
- b10a65f: Allow saving webview
|
|
61
|
+
- 6420187: Save iframe
|
|
62
|
+
- Updated dependencies [e5c259d]
|
|
63
|
+
- @prosopo/types@3.5.8
|
|
64
|
+
- @prosopo/user-access-policy@3.5.24
|
|
65
|
+
|
|
66
|
+
## 3.3.9
|
|
67
|
+
### Patch Changes
|
|
68
|
+
|
|
69
|
+
- 3a027ef: Fix session storer
|
|
70
|
+
- 3a027ef: Release cycle
|
|
71
|
+
- Updated dependencies [c9d8fdf]
|
|
72
|
+
- Updated dependencies [b8185a4]
|
|
73
|
+
- @prosopo/user-access-policy@3.5.23
|
|
74
|
+
- @prosopo/common@3.1.21
|
|
75
|
+
- @prosopo/config@3.1.21
|
|
76
|
+
- @prosopo/locale@3.1.21
|
|
77
|
+
- @prosopo/types@3.5.7
|
|
78
|
+
|
|
79
|
+
## 3.3.8
|
|
80
|
+
### Patch Changes
|
|
81
|
+
|
|
82
|
+
- Updated dependencies [5d11a81]
|
|
83
|
+
- @prosopo/types@3.5.6
|
|
84
|
+
- @prosopo/user-access-policy@3.5.22
|
|
85
|
+
|
|
86
|
+
## 3.3.7
|
|
87
|
+
### Patch Changes
|
|
88
|
+
|
|
89
|
+
- 494c5a8: Updated payload
|
|
90
|
+
- Updated dependencies [494c5a8]
|
|
91
|
+
- @prosopo/types@3.5.5
|
|
92
|
+
- @prosopo/user-access-policy@3.5.21
|
|
93
|
+
|
|
94
|
+
## 3.3.6
|
|
95
|
+
### Patch Changes
|
|
96
|
+
|
|
97
|
+
- 08ff50f: IP Validation Schema update
|
|
98
|
+
- Updated dependencies [08ff50f]
|
|
99
|
+
- @prosopo/types@3.5.4
|
|
100
|
+
- @prosopo/user-access-policy@3.5.20
|
|
101
|
+
|
|
3
102
|
## 3.3.5
|
|
4
103
|
### Patch Changes
|
|
5
104
|
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -5,12 +5,12 @@ const provider = require("./types/provider.cjs");
|
|
|
5
5
|
const client = require("./types/client.cjs");
|
|
6
6
|
const captcha = require("./types/captcha.cjs");
|
|
7
7
|
exports.CaptchaRecordSchema = provider.CaptchaRecordSchema;
|
|
8
|
+
exports.ClientEntropyRecordSchema = provider.ClientEntropyRecordSchema;
|
|
8
9
|
exports.ClientRecordSchema = provider.ClientRecordSchema;
|
|
9
10
|
exports.CompositeIpAddressRecordSchemaObj = provider.CompositeIpAddressRecordSchemaObj;
|
|
10
11
|
exports.CompositeIpAddressSchema = provider.CompositeIpAddressSchema;
|
|
11
12
|
exports.DatasetRecordSchema = provider.DatasetRecordSchema;
|
|
12
13
|
exports.DetectorRecordSchema = provider.DetectorRecordSchema;
|
|
13
|
-
exports.FrictionlessTokenRecordSchema = provider.FrictionlessTokenRecordSchema;
|
|
14
14
|
exports.IpAddressType = provider.IpAddressType;
|
|
15
15
|
exports.PendingRecordSchema = provider.PendingRecordSchema;
|
|
16
16
|
exports.PoWCaptchaRecordSchema = provider.PoWCaptchaRecordSchema;
|
|
@@ -2,31 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const mongoose = require("mongoose");
|
|
4
4
|
const provider = require("./provider.cjs");
|
|
5
|
-
const StoredSessionRecordSchema =
|
|
6
|
-
...provider.SessionRecordSchema.obj,
|
|
7
|
-
...Object.fromEntries(
|
|
8
|
-
Object.entries(provider.FrictionlessTokenRecordSchema.obj).filter(
|
|
9
|
-
([key]) => key !== "token"
|
|
10
|
-
)
|
|
11
|
-
)
|
|
12
|
-
});
|
|
13
|
-
const existingIndexes = StoredSessionRecordSchema.indexes();
|
|
14
|
-
const filteredIndexes = existingIndexes.filter(
|
|
15
|
-
(idx) => !("sessionId" in idx[0])
|
|
16
|
-
);
|
|
17
|
-
for (const [fields, options] of filteredIndexes) {
|
|
18
|
-
StoredSessionRecordSchema.index(fields, options);
|
|
19
|
-
}
|
|
20
|
-
StoredSessionRecordSchema.index({ tokenId: 1 });
|
|
21
|
-
StoredSessionRecordSchema.index({ sessionId: 1 }, { unique: false });
|
|
5
|
+
const StoredSessionRecordSchema = provider.SessionRecordSchema;
|
|
22
6
|
const StoredUserCommitmentRecordSchema = new mongoose.Schema({
|
|
23
7
|
...provider.UserCommitmentRecordSchema.obj
|
|
24
8
|
});
|
|
25
|
-
StoredUserCommitmentRecordSchema.index({
|
|
9
|
+
StoredUserCommitmentRecordSchema.index({ sessionId: 1 });
|
|
26
10
|
const StoredPoWCaptchaRecordSchema = new mongoose.Schema({
|
|
27
11
|
...provider.PoWCaptchaRecordSchema.obj
|
|
28
12
|
});
|
|
29
|
-
StoredPoWCaptchaRecordSchema.index({
|
|
13
|
+
StoredPoWCaptchaRecordSchema.index({ sessionId: 1 });
|
|
30
14
|
exports.StoredPoWCaptchaRecordSchema = StoredPoWCaptchaRecordSchema;
|
|
31
15
|
exports.StoredSessionRecordSchema = StoredSessionRecordSchema;
|
|
32
16
|
exports.StoredUserCommitmentRecordSchema = StoredUserCommitmentRecordSchema;
|
|
@@ -1,12 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const types = require("@prosopo/types");
|
|
3
4
|
const mongoose = require("mongoose");
|
|
4
5
|
const IPValidationRulesSchema = new mongoose.Schema({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
actions: {
|
|
7
|
+
countryChangeAction: {
|
|
8
|
+
type: mongoose.Schema.Types.Mixed,
|
|
9
|
+
default: () => types.countryChangeActionDefault
|
|
10
|
+
},
|
|
11
|
+
cityChangeAction: {
|
|
12
|
+
type: mongoose.Schema.Types.Mixed,
|
|
13
|
+
default: () => types.cityChangeActionDefault
|
|
14
|
+
},
|
|
15
|
+
ispChangeAction: {
|
|
16
|
+
type: mongoose.Schema.Types.Mixed,
|
|
17
|
+
default: () => types.ispChangeActionDefault
|
|
18
|
+
},
|
|
19
|
+
distanceExceedAction: {
|
|
20
|
+
type: mongoose.Schema.Types.Mixed,
|
|
21
|
+
default: () => types.distanceExceedActionDefault
|
|
22
|
+
},
|
|
23
|
+
abuseScoreExceedAction: {
|
|
24
|
+
type: mongoose.Schema.Types.Mixed,
|
|
25
|
+
default: () => types.abuseScoreThresholdExceedActionDefault
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
distanceThresholdKm: {
|
|
29
|
+
type: Number,
|
|
30
|
+
min: 0,
|
|
31
|
+
default: types.distanceThresholdKmDefault
|
|
32
|
+
},
|
|
33
|
+
abuseScoreThreshold: {
|
|
34
|
+
type: Number,
|
|
35
|
+
min: 0,
|
|
36
|
+
default: types.abuseScoreThresholdDefault
|
|
37
|
+
},
|
|
38
|
+
requireAllConditions: {
|
|
39
|
+
type: Boolean,
|
|
40
|
+
default: types.requireAllConditionsDefault
|
|
41
|
+
},
|
|
42
|
+
forceConsistentIp: {
|
|
43
|
+
type: Boolean,
|
|
44
|
+
default: false
|
|
45
|
+
},
|
|
46
|
+
countryOverrides: {
|
|
47
|
+
type: Map,
|
|
48
|
+
of: new mongoose.Schema({
|
|
49
|
+
actions: {
|
|
50
|
+
countryChangeAction: { type: mongoose.Schema.Types.Mixed },
|
|
51
|
+
cityChangeAction: { type: mongoose.Schema.Types.Mixed },
|
|
52
|
+
ispChangeAction: { type: mongoose.Schema.Types.Mixed },
|
|
53
|
+
distanceExceedAction: { type: mongoose.Schema.Types.Mixed },
|
|
54
|
+
abuseScoreExceedAction: { type: mongoose.Schema.Types.Mixed }
|
|
55
|
+
},
|
|
56
|
+
distanceThresholdKm: { type: Number, min: 0 },
|
|
57
|
+
abuseScoreThreshold: { type: Number, min: 0 },
|
|
58
|
+
requireAllConditions: { type: Boolean }
|
|
59
|
+
}),
|
|
60
|
+
default: void 0
|
|
61
|
+
}
|
|
10
62
|
});
|
|
11
63
|
const UserSettingsSchema = new mongoose.Schema({
|
|
12
64
|
captchaType: String,
|
|
@@ -14,7 +66,15 @@ const UserSettingsSchema = new mongoose.Schema({
|
|
|
14
66
|
powDifficulty: Number,
|
|
15
67
|
imageThreshold: Number,
|
|
16
68
|
ipValidationRules: IPValidationRulesSchema,
|
|
17
|
-
domains: [String]
|
|
69
|
+
domains: [String],
|
|
70
|
+
disallowWebView: {
|
|
71
|
+
type: Boolean,
|
|
72
|
+
default: false
|
|
73
|
+
},
|
|
74
|
+
contextAware: {
|
|
75
|
+
enabled: { type: Boolean, default: false },
|
|
76
|
+
threshold: { type: Number, default: types.contextAwareThresholdDefault }
|
|
77
|
+
}
|
|
18
78
|
});
|
|
19
79
|
const UserDataSchema = new mongoose.Schema({
|
|
20
80
|
email: String,
|
|
@@ -22,14 +82,14 @@ const UserDataSchema = new mongoose.Schema({
|
|
|
22
82
|
account: String,
|
|
23
83
|
url: String,
|
|
24
84
|
mnemonic: String,
|
|
25
|
-
createdAt:
|
|
85
|
+
createdAt: Date,
|
|
26
86
|
activated: Boolean,
|
|
27
87
|
tier: String,
|
|
28
88
|
settings: {
|
|
29
89
|
type: UserSettingsSchema,
|
|
30
90
|
required: false
|
|
31
91
|
},
|
|
32
|
-
updatedAtTimestamp:
|
|
92
|
+
updatedAtTimestamp: Date
|
|
33
93
|
});
|
|
34
94
|
const AccountSchema = new mongoose.Schema({
|
|
35
95
|
createdAt: Number,
|
package/dist/cjs/types/index.cjs
CHANGED
|
@@ -6,12 +6,12 @@ const client = require("./client.cjs");
|
|
|
6
6
|
const captcha = require("./captcha.cjs");
|
|
7
7
|
require("./userAgent.cjs");
|
|
8
8
|
exports.CaptchaRecordSchema = provider.CaptchaRecordSchema;
|
|
9
|
+
exports.ClientEntropyRecordSchema = provider.ClientEntropyRecordSchema;
|
|
9
10
|
exports.ClientRecordSchema = provider.ClientRecordSchema;
|
|
10
11
|
exports.CompositeIpAddressRecordSchemaObj = provider.CompositeIpAddressRecordSchemaObj;
|
|
11
12
|
exports.CompositeIpAddressSchema = provider.CompositeIpAddressSchema;
|
|
12
13
|
exports.DatasetRecordSchema = provider.DatasetRecordSchema;
|
|
13
14
|
exports.DetectorRecordSchema = provider.DetectorRecordSchema;
|
|
14
|
-
exports.FrictionlessTokenRecordSchema = provider.FrictionlessTokenRecordSchema;
|
|
15
15
|
exports.IpAddressType = provider.IpAddressType;
|
|
16
16
|
exports.PendingRecordSchema = provider.PendingRecordSchema;
|
|
17
17
|
exports.PoWCaptchaRecordSchema = provider.PoWCaptchaRecordSchema;
|
|
@@ -69,13 +69,10 @@ const UserCommitmentSchema = zod.object({
|
|
|
69
69
|
ja4: zod.string(),
|
|
70
70
|
userSubmitted: zod.boolean(),
|
|
71
71
|
serverChecked: zod.boolean(),
|
|
72
|
-
storedAtTimestamp:
|
|
73
|
-
requestedAtTimestamp:
|
|
74
|
-
lastUpdatedTimestamp:
|
|
75
|
-
|
|
76
|
-
zod.string(),
|
|
77
|
-
zod.instanceof(mongoose.Types.ObjectId)
|
|
78
|
-
]).optional(),
|
|
72
|
+
storedAtTimestamp: zod.date().optional(),
|
|
73
|
+
requestedAtTimestamp: zod.date(),
|
|
74
|
+
lastUpdatedTimestamp: zod.date().optional(),
|
|
75
|
+
sessionId: zod.string().optional(),
|
|
79
76
|
coords: zod.array(zod.array(zod.array(zod.number()))).optional()
|
|
80
77
|
});
|
|
81
78
|
const CaptchaRecordSchema = new mongoose.Schema({
|
|
@@ -108,8 +105,8 @@ const PoWCaptchaRecordSchema = new mongoose.Schema({
|
|
|
108
105
|
challenge: { type: String, required: true },
|
|
109
106
|
dappAccount: { type: String, required: true },
|
|
110
107
|
userAccount: { type: String, required: true },
|
|
111
|
-
requestedAtTimestamp: { type:
|
|
112
|
-
lastUpdatedTimestamp: { type:
|
|
108
|
+
requestedAtTimestamp: { type: Date, required: true },
|
|
109
|
+
lastUpdatedTimestamp: { type: Date, required: false },
|
|
113
110
|
result: {
|
|
114
111
|
status: { type: String, enum: types.CaptchaStatus, required: true },
|
|
115
112
|
reason: {
|
|
@@ -134,8 +131,8 @@ const PoWCaptchaRecordSchema = new mongoose.Schema({
|
|
|
134
131
|
geolocation: { type: String, required: false },
|
|
135
132
|
vpn: { type: Boolean, required: false },
|
|
136
133
|
parsedUserAgentInfo: { type: Object, required: false },
|
|
137
|
-
|
|
138
|
-
type:
|
|
134
|
+
sessionId: {
|
|
135
|
+
type: String,
|
|
139
136
|
required: false
|
|
140
137
|
},
|
|
141
138
|
coords: { type: [[[Number]]], required: false }
|
|
@@ -171,13 +168,13 @@ const UserCommitmentRecordSchema = new mongoose.Schema({
|
|
|
171
168
|
userSubmitted: { type: Boolean, required: true },
|
|
172
169
|
serverChecked: { type: Boolean, required: true },
|
|
173
170
|
storedAtTimestamp: { type: Date, required: false, expires: ONE_MONTH },
|
|
174
|
-
requestedAtTimestamp: { type:
|
|
175
|
-
lastUpdatedTimestamp: { type:
|
|
171
|
+
requestedAtTimestamp: { type: Date, required: true },
|
|
172
|
+
lastUpdatedTimestamp: { type: Date, required: false },
|
|
176
173
|
geolocation: { type: String, required: false },
|
|
177
174
|
vpn: { type: Boolean, required: false },
|
|
178
175
|
parsedUserAgentInfo: { type: Object, required: false },
|
|
179
|
-
|
|
180
|
-
type:
|
|
176
|
+
sessionId: {
|
|
177
|
+
type: String,
|
|
181
178
|
required: false
|
|
182
179
|
},
|
|
183
180
|
coords: { type: [[[Number]]], required: false }
|
|
@@ -240,8 +237,8 @@ const PendingRecordSchema = new mongoose.Schema({
|
|
|
240
237
|
// unix timestamp
|
|
241
238
|
requestedAtTimestamp: { type: Date, required: true, expires: ONE_WEEK },
|
|
242
239
|
ipAddress: CompositeIpAddressRecordSchemaObj,
|
|
243
|
-
|
|
244
|
-
type:
|
|
240
|
+
sessionId: {
|
|
241
|
+
type: String,
|
|
245
242
|
required: false
|
|
246
243
|
},
|
|
247
244
|
threshold: { type: Number, required: true, default: 0.8 }
|
|
@@ -249,8 +246,8 @@ const PendingRecordSchema = new mongoose.Schema({
|
|
|
249
246
|
PendingRecordSchema.index({ requestHash: -1 });
|
|
250
247
|
const ScheduledTaskSchema = zod.object({
|
|
251
248
|
processName: zod.nativeEnum(types.ScheduledTaskNames),
|
|
252
|
-
datetime:
|
|
253
|
-
updated:
|
|
249
|
+
datetime: zod.date(),
|
|
250
|
+
updated: zod.date().optional(),
|
|
254
251
|
status: zod.nativeEnum(types.ScheduledTaskStatus),
|
|
255
252
|
result: zod.object({
|
|
256
253
|
data: zod.any().optional(),
|
|
@@ -260,7 +257,7 @@ const ScheduledTaskSchema = zod.object({
|
|
|
260
257
|
const ScheduledTaskRecordSchema = new mongoose.Schema({
|
|
261
258
|
processName: { type: String, enum: types.ScheduledTaskNames, required: true },
|
|
262
259
|
datetime: { type: Date, required: true, expires: ONE_WEEK },
|
|
263
|
-
updated: { type:
|
|
260
|
+
updated: { type: Date, required: false },
|
|
264
261
|
status: { type: String, enum: types.ScheduledTaskStatus, required: true },
|
|
265
262
|
result: {
|
|
266
263
|
type: new mongoose.Schema(
|
|
@@ -276,7 +273,9 @@ const ScheduledTaskRecordSchema = new mongoose.Schema({
|
|
|
276
273
|
ScheduledTaskRecordSchema.index({ processName: 1 });
|
|
277
274
|
ScheduledTaskRecordSchema.index({ processName: 1, status: 1 });
|
|
278
275
|
ScheduledTaskRecordSchema.index({ _id: 1, status: 1 });
|
|
279
|
-
const
|
|
276
|
+
const SessionRecordSchema = new mongoose.Schema({
|
|
277
|
+
sessionId: { type: String, required: true },
|
|
278
|
+
createdAt: { type: Date, required: true },
|
|
280
279
|
token: { type: String, required: true, unique: true },
|
|
281
280
|
score: { type: Number, required: true },
|
|
282
281
|
threshold: { type: Number, required: true },
|
|
@@ -284,32 +283,29 @@ const FrictionlessTokenRecordSchema = new mongoose.Schema({
|
|
|
284
283
|
baseScore: { type: Number, required: true },
|
|
285
284
|
lScore: { type: Number, required: false },
|
|
286
285
|
timeout: { type: Number, required: false },
|
|
287
|
-
accessPolicy: { type: Number, required: false }
|
|
286
|
+
accessPolicy: { type: Number, required: false },
|
|
287
|
+
unverifiedHost: { type: Number, required: false },
|
|
288
|
+
webView: { type: Number, required: false }
|
|
288
289
|
},
|
|
289
290
|
providerSelectEntropy: { type: Number, required: true },
|
|
290
291
|
ipAddress: CompositeIpAddressRecordSchemaObj,
|
|
291
|
-
createdAt: { type: Date, default: Date.now },
|
|
292
|
-
lastUpdatedTimestamp: { type: Date, required: false },
|
|
293
|
-
storedAtTimestamp: { type: Date, required: false, expires: ONE_DAY }
|
|
294
|
-
});
|
|
295
|
-
FrictionlessTokenRecordSchema.index({ createdAt: 1 });
|
|
296
|
-
FrictionlessTokenRecordSchema.index({ providerSelectEntropy: 1 });
|
|
297
|
-
const SessionRecordSchema = new mongoose.Schema({
|
|
298
|
-
sessionId: { type: String, required: true },
|
|
299
|
-
createdAt: { type: Date, required: true },
|
|
300
|
-
tokenId: {
|
|
301
|
-
type: mongoose.Schema.Types.ObjectId
|
|
302
|
-
},
|
|
303
292
|
captchaType: { type: String, enum: types.CaptchaType, required: true },
|
|
304
293
|
solvedImagesCount: { type: Number, required: false },
|
|
305
294
|
powDifficulty: { type: Number, required: false },
|
|
306
295
|
storedAtTimestamp: { type: Date, required: false, expires: ONE_DAY },
|
|
307
296
|
lastUpdatedTimestamp: { type: Date, required: false },
|
|
308
|
-
deleted: { type: Boolean, required: false }
|
|
297
|
+
deleted: { type: Boolean, required: false },
|
|
298
|
+
userSitekeyIpHash: { type: String, required: false },
|
|
299
|
+
webView: { type: Boolean, required: true, default: false },
|
|
300
|
+
iFrame: { type: Boolean, required: true, default: false },
|
|
301
|
+
decryptedHeadHash: { type: String, required: false, default: "" }
|
|
309
302
|
});
|
|
310
303
|
SessionRecordSchema.index({ createdAt: 1 });
|
|
311
304
|
SessionRecordSchema.index({ deleted: 1 });
|
|
312
305
|
SessionRecordSchema.index({ sessionId: 1 }, { unique: true });
|
|
306
|
+
SessionRecordSchema.index({ userSitekeyIpHash: 1 });
|
|
307
|
+
SessionRecordSchema.index({ providerSelectEntropy: 1 });
|
|
308
|
+
SessionRecordSchema.index({ token: 1 });
|
|
313
309
|
const DetectorRecordSchema = new mongoose.Schema({
|
|
314
310
|
createdAt: { type: Date, required: true },
|
|
315
311
|
detectorKey: { type: String, required: true },
|
|
@@ -317,13 +313,20 @@ const DetectorRecordSchema = new mongoose.Schema({
|
|
|
317
313
|
});
|
|
318
314
|
DetectorRecordSchema.index({ createdAt: 1 }, { unique: true });
|
|
319
315
|
DetectorRecordSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
|
|
316
|
+
const ClientEntropyRecordSchema = new mongoose.Schema({
|
|
317
|
+
account: { type: String, required: true, unique: true },
|
|
318
|
+
entropy: { type: String, required: true },
|
|
319
|
+
createdAt: { type: Date, required: true },
|
|
320
|
+
updatedAt: { type: Date, required: true }
|
|
321
|
+
});
|
|
322
|
+
ClientEntropyRecordSchema.index({ account: 1 }, { unique: true });
|
|
320
323
|
exports.CaptchaRecordSchema = CaptchaRecordSchema;
|
|
324
|
+
exports.ClientEntropyRecordSchema = ClientEntropyRecordSchema;
|
|
321
325
|
exports.ClientRecordSchema = ClientRecordSchema;
|
|
322
326
|
exports.CompositeIpAddressRecordSchemaObj = CompositeIpAddressRecordSchemaObj;
|
|
323
327
|
exports.CompositeIpAddressSchema = CompositeIpAddressSchema;
|
|
324
328
|
exports.DatasetRecordSchema = DatasetRecordSchema;
|
|
325
329
|
exports.DetectorRecordSchema = DetectorRecordSchema;
|
|
326
|
-
exports.FrictionlessTokenRecordSchema = FrictionlessTokenRecordSchema;
|
|
327
330
|
exports.IpAddressType = IpAddressType;
|
|
328
331
|
exports.PendingRecordSchema = PendingRecordSchema;
|
|
329
332
|
exports.PoWCaptchaRecordSchema = PoWCaptchaRecordSchema;
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import "./types/index.js";
|
|
2
|
-
import { CaptchaRecordSchema, ClientRecordSchema, CompositeIpAddressRecordSchemaObj, CompositeIpAddressSchema, DatasetRecordSchema, DetectorRecordSchema,
|
|
2
|
+
import { CaptchaRecordSchema, ClientEntropyRecordSchema, ClientRecordSchema, CompositeIpAddressRecordSchemaObj, CompositeIpAddressSchema, DatasetRecordSchema, DetectorRecordSchema, IpAddressType, PendingRecordSchema, PoWCaptchaRecordSchema, ScheduledTaskRecordSchema, ScheduledTaskSchema, SessionRecordSchema, SolutionRecordSchema, UserCommitmentRecordSchema, UserCommitmentSchema, UserCommitmentWithSolutionsSchema, UserSolutionRecordSchema, UserSolutionSchema, parseMongooseCompositeIpAddress } from "./types/provider.js";
|
|
3
3
|
import { AccountSchema, IPValidationRulesSchema, TableNames, UserDataSchema, UserSettingsSchema } from "./types/client.js";
|
|
4
4
|
import { StoredPoWCaptchaRecordSchema, StoredSessionRecordSchema, StoredUserCommitmentRecordSchema } from "./types/captcha.js";
|
|
5
5
|
export {
|
|
6
6
|
AccountSchema,
|
|
7
7
|
CaptchaRecordSchema,
|
|
8
|
+
ClientEntropyRecordSchema,
|
|
8
9
|
ClientRecordSchema,
|
|
9
10
|
CompositeIpAddressRecordSchemaObj,
|
|
10
11
|
CompositeIpAddressSchema,
|
|
11
12
|
DatasetRecordSchema,
|
|
12
13
|
DetectorRecordSchema,
|
|
13
|
-
FrictionlessTokenRecordSchema,
|
|
14
14
|
IPValidationRulesSchema,
|
|
15
15
|
IpAddressType,
|
|
16
16
|
PendingRecordSchema,
|
package/dist/types/captcha.js
CHANGED
|
@@ -1,30 +1,14 @@
|
|
|
1
1
|
import { Schema } from "mongoose";
|
|
2
|
-
import {
|
|
3
|
-
const StoredSessionRecordSchema =
|
|
4
|
-
...SessionRecordSchema.obj,
|
|
5
|
-
...Object.fromEntries(
|
|
6
|
-
Object.entries(FrictionlessTokenRecordSchema.obj).filter(
|
|
7
|
-
([key]) => key !== "token"
|
|
8
|
-
)
|
|
9
|
-
)
|
|
10
|
-
});
|
|
11
|
-
const existingIndexes = StoredSessionRecordSchema.indexes();
|
|
12
|
-
const filteredIndexes = existingIndexes.filter(
|
|
13
|
-
(idx) => !("sessionId" in idx[0])
|
|
14
|
-
);
|
|
15
|
-
for (const [fields, options] of filteredIndexes) {
|
|
16
|
-
StoredSessionRecordSchema.index(fields, options);
|
|
17
|
-
}
|
|
18
|
-
StoredSessionRecordSchema.index({ tokenId: 1 });
|
|
19
|
-
StoredSessionRecordSchema.index({ sessionId: 1 }, { unique: false });
|
|
2
|
+
import { SessionRecordSchema, UserCommitmentRecordSchema, PoWCaptchaRecordSchema } from "./provider.js";
|
|
3
|
+
const StoredSessionRecordSchema = SessionRecordSchema;
|
|
20
4
|
const StoredUserCommitmentRecordSchema = new Schema({
|
|
21
5
|
...UserCommitmentRecordSchema.obj
|
|
22
6
|
});
|
|
23
|
-
StoredUserCommitmentRecordSchema.index({
|
|
7
|
+
StoredUserCommitmentRecordSchema.index({ sessionId: 1 });
|
|
24
8
|
const StoredPoWCaptchaRecordSchema = new Schema({
|
|
25
9
|
...PoWCaptchaRecordSchema.obj
|
|
26
10
|
});
|
|
27
|
-
StoredPoWCaptchaRecordSchema.index({
|
|
11
|
+
StoredPoWCaptchaRecordSchema.index({ sessionId: 1 });
|
|
28
12
|
export {
|
|
29
13
|
StoredPoWCaptchaRecordSchema,
|
|
30
14
|
StoredSessionRecordSchema,
|
package/dist/types/client.js
CHANGED
|
@@ -1,10 +1,62 @@
|
|
|
1
|
+
import { requireAllConditionsDefault, abuseScoreThresholdDefault, distanceThresholdKmDefault, abuseScoreThresholdExceedActionDefault, distanceExceedActionDefault, ispChangeActionDefault, cityChangeActionDefault, countryChangeActionDefault, contextAwareThresholdDefault } from "@prosopo/types";
|
|
1
2
|
import { Schema } from "mongoose";
|
|
2
3
|
const IPValidationRulesSchema = new Schema({
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
actions: {
|
|
5
|
+
countryChangeAction: {
|
|
6
|
+
type: Schema.Types.Mixed,
|
|
7
|
+
default: () => countryChangeActionDefault
|
|
8
|
+
},
|
|
9
|
+
cityChangeAction: {
|
|
10
|
+
type: Schema.Types.Mixed,
|
|
11
|
+
default: () => cityChangeActionDefault
|
|
12
|
+
},
|
|
13
|
+
ispChangeAction: {
|
|
14
|
+
type: Schema.Types.Mixed,
|
|
15
|
+
default: () => ispChangeActionDefault
|
|
16
|
+
},
|
|
17
|
+
distanceExceedAction: {
|
|
18
|
+
type: Schema.Types.Mixed,
|
|
19
|
+
default: () => distanceExceedActionDefault
|
|
20
|
+
},
|
|
21
|
+
abuseScoreExceedAction: {
|
|
22
|
+
type: Schema.Types.Mixed,
|
|
23
|
+
default: () => abuseScoreThresholdExceedActionDefault
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
distanceThresholdKm: {
|
|
27
|
+
type: Number,
|
|
28
|
+
min: 0,
|
|
29
|
+
default: distanceThresholdKmDefault
|
|
30
|
+
},
|
|
31
|
+
abuseScoreThreshold: {
|
|
32
|
+
type: Number,
|
|
33
|
+
min: 0,
|
|
34
|
+
default: abuseScoreThresholdDefault
|
|
35
|
+
},
|
|
36
|
+
requireAllConditions: {
|
|
37
|
+
type: Boolean,
|
|
38
|
+
default: requireAllConditionsDefault
|
|
39
|
+
},
|
|
40
|
+
forceConsistentIp: {
|
|
41
|
+
type: Boolean,
|
|
42
|
+
default: false
|
|
43
|
+
},
|
|
44
|
+
countryOverrides: {
|
|
45
|
+
type: Map,
|
|
46
|
+
of: new Schema({
|
|
47
|
+
actions: {
|
|
48
|
+
countryChangeAction: { type: Schema.Types.Mixed },
|
|
49
|
+
cityChangeAction: { type: Schema.Types.Mixed },
|
|
50
|
+
ispChangeAction: { type: Schema.Types.Mixed },
|
|
51
|
+
distanceExceedAction: { type: Schema.Types.Mixed },
|
|
52
|
+
abuseScoreExceedAction: { type: Schema.Types.Mixed }
|
|
53
|
+
},
|
|
54
|
+
distanceThresholdKm: { type: Number, min: 0 },
|
|
55
|
+
abuseScoreThreshold: { type: Number, min: 0 },
|
|
56
|
+
requireAllConditions: { type: Boolean }
|
|
57
|
+
}),
|
|
58
|
+
default: void 0
|
|
59
|
+
}
|
|
8
60
|
});
|
|
9
61
|
const UserSettingsSchema = new Schema({
|
|
10
62
|
captchaType: String,
|
|
@@ -12,7 +64,15 @@ const UserSettingsSchema = new Schema({
|
|
|
12
64
|
powDifficulty: Number,
|
|
13
65
|
imageThreshold: Number,
|
|
14
66
|
ipValidationRules: IPValidationRulesSchema,
|
|
15
|
-
domains: [String]
|
|
67
|
+
domains: [String],
|
|
68
|
+
disallowWebView: {
|
|
69
|
+
type: Boolean,
|
|
70
|
+
default: false
|
|
71
|
+
},
|
|
72
|
+
contextAware: {
|
|
73
|
+
enabled: { type: Boolean, default: false },
|
|
74
|
+
threshold: { type: Number, default: contextAwareThresholdDefault }
|
|
75
|
+
}
|
|
16
76
|
});
|
|
17
77
|
const UserDataSchema = new Schema({
|
|
18
78
|
email: String,
|
|
@@ -20,14 +80,14 @@ const UserDataSchema = new Schema({
|
|
|
20
80
|
account: String,
|
|
21
81
|
url: String,
|
|
22
82
|
mnemonic: String,
|
|
23
|
-
createdAt:
|
|
83
|
+
createdAt: Date,
|
|
24
84
|
activated: Boolean,
|
|
25
85
|
tier: String,
|
|
26
86
|
settings: {
|
|
27
87
|
type: UserSettingsSchema,
|
|
28
88
|
required: false
|
|
29
89
|
},
|
|
30
|
-
updatedAtTimestamp:
|
|
90
|
+
updatedAtTimestamp: Date
|
|
31
91
|
});
|
|
32
92
|
const AccountSchema = new Schema({
|
|
33
93
|
createdAt: Number,
|
package/dist/types/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import "./mongo.js";
|
|
2
|
-
import { CaptchaRecordSchema, ClientRecordSchema, CompositeIpAddressRecordSchemaObj, CompositeIpAddressSchema, DatasetRecordSchema, DetectorRecordSchema,
|
|
2
|
+
import { CaptchaRecordSchema, ClientEntropyRecordSchema, ClientRecordSchema, CompositeIpAddressRecordSchemaObj, CompositeIpAddressSchema, DatasetRecordSchema, DetectorRecordSchema, IpAddressType, PendingRecordSchema, PoWCaptchaRecordSchema, ScheduledTaskRecordSchema, ScheduledTaskSchema, SessionRecordSchema, SolutionRecordSchema, UserCommitmentRecordSchema, UserCommitmentSchema, UserCommitmentWithSolutionsSchema, UserSolutionRecordSchema, UserSolutionSchema, parseMongooseCompositeIpAddress } from "./provider.js";
|
|
3
3
|
import { AccountSchema, IPValidationRulesSchema, TableNames, UserDataSchema, UserSettingsSchema } from "./client.js";
|
|
4
4
|
import { StoredPoWCaptchaRecordSchema, StoredSessionRecordSchema, StoredUserCommitmentRecordSchema } from "./captcha.js";
|
|
5
5
|
import "./userAgent.js";
|
|
6
6
|
export {
|
|
7
7
|
AccountSchema,
|
|
8
8
|
CaptchaRecordSchema,
|
|
9
|
+
ClientEntropyRecordSchema,
|
|
9
10
|
ClientRecordSchema,
|
|
10
11
|
CompositeIpAddressRecordSchemaObj,
|
|
11
12
|
CompositeIpAddressSchema,
|
|
12
13
|
DatasetRecordSchema,
|
|
13
14
|
DetectorRecordSchema,
|
|
14
|
-
FrictionlessTokenRecordSchema,
|
|
15
15
|
IPValidationRulesSchema,
|
|
16
16
|
IpAddressType,
|
|
17
17
|
PendingRecordSchema,
|
package/dist/types/provider.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TranslationKeysSchema } from "@prosopo/locale";
|
|
2
|
-
import { Tier, CaptchaStatus,
|
|
3
|
-
import
|
|
4
|
-
import { object, nativeEnum, bigint, string, array, number,
|
|
2
|
+
import { Tier, CaptchaStatus, CaptchaSolutionSchema, ScheduledTaskStatus, ScheduledTaskNames, CaptchaType } from "@prosopo/types";
|
|
3
|
+
import { Schema } from "mongoose";
|
|
4
|
+
import { object, nativeEnum, bigint, string, array, number, date, boolean, any } from "zod";
|
|
5
5
|
import { UserSettingsSchema } from "./client.js";
|
|
6
6
|
const ONE_HOUR = 60 * 60;
|
|
7
7
|
const ONE_DAY = ONE_HOUR * 24;
|
|
@@ -67,13 +67,10 @@ const UserCommitmentSchema = object({
|
|
|
67
67
|
ja4: string(),
|
|
68
68
|
userSubmitted: boolean(),
|
|
69
69
|
serverChecked: boolean(),
|
|
70
|
-
storedAtTimestamp:
|
|
71
|
-
requestedAtTimestamp:
|
|
72
|
-
lastUpdatedTimestamp:
|
|
73
|
-
|
|
74
|
-
string(),
|
|
75
|
-
_instanceof(mongoose.Types.ObjectId)
|
|
76
|
-
]).optional(),
|
|
70
|
+
storedAtTimestamp: date().optional(),
|
|
71
|
+
requestedAtTimestamp: date(),
|
|
72
|
+
lastUpdatedTimestamp: date().optional(),
|
|
73
|
+
sessionId: string().optional(),
|
|
77
74
|
coords: array(array(array(number()))).optional()
|
|
78
75
|
});
|
|
79
76
|
const CaptchaRecordSchema = new Schema({
|
|
@@ -106,8 +103,8 @@ const PoWCaptchaRecordSchema = new Schema({
|
|
|
106
103
|
challenge: { type: String, required: true },
|
|
107
104
|
dappAccount: { type: String, required: true },
|
|
108
105
|
userAccount: { type: String, required: true },
|
|
109
|
-
requestedAtTimestamp: { type:
|
|
110
|
-
lastUpdatedTimestamp: { type:
|
|
106
|
+
requestedAtTimestamp: { type: Date, required: true },
|
|
107
|
+
lastUpdatedTimestamp: { type: Date, required: false },
|
|
111
108
|
result: {
|
|
112
109
|
status: { type: String, enum: CaptchaStatus, required: true },
|
|
113
110
|
reason: {
|
|
@@ -132,8 +129,8 @@ const PoWCaptchaRecordSchema = new Schema({
|
|
|
132
129
|
geolocation: { type: String, required: false },
|
|
133
130
|
vpn: { type: Boolean, required: false },
|
|
134
131
|
parsedUserAgentInfo: { type: Object, required: false },
|
|
135
|
-
|
|
136
|
-
type:
|
|
132
|
+
sessionId: {
|
|
133
|
+
type: String,
|
|
137
134
|
required: false
|
|
138
135
|
},
|
|
139
136
|
coords: { type: [[[Number]]], required: false }
|
|
@@ -169,13 +166,13 @@ const UserCommitmentRecordSchema = new Schema({
|
|
|
169
166
|
userSubmitted: { type: Boolean, required: true },
|
|
170
167
|
serverChecked: { type: Boolean, required: true },
|
|
171
168
|
storedAtTimestamp: { type: Date, required: false, expires: ONE_MONTH },
|
|
172
|
-
requestedAtTimestamp: { type:
|
|
173
|
-
lastUpdatedTimestamp: { type:
|
|
169
|
+
requestedAtTimestamp: { type: Date, required: true },
|
|
170
|
+
lastUpdatedTimestamp: { type: Date, required: false },
|
|
174
171
|
geolocation: { type: String, required: false },
|
|
175
172
|
vpn: { type: Boolean, required: false },
|
|
176
173
|
parsedUserAgentInfo: { type: Object, required: false },
|
|
177
|
-
|
|
178
|
-
type:
|
|
174
|
+
sessionId: {
|
|
175
|
+
type: String,
|
|
179
176
|
required: false
|
|
180
177
|
},
|
|
181
178
|
coords: { type: [[[Number]]], required: false }
|
|
@@ -238,8 +235,8 @@ const PendingRecordSchema = new Schema({
|
|
|
238
235
|
// unix timestamp
|
|
239
236
|
requestedAtTimestamp: { type: Date, required: true, expires: ONE_WEEK },
|
|
240
237
|
ipAddress: CompositeIpAddressRecordSchemaObj,
|
|
241
|
-
|
|
242
|
-
type:
|
|
238
|
+
sessionId: {
|
|
239
|
+
type: String,
|
|
243
240
|
required: false
|
|
244
241
|
},
|
|
245
242
|
threshold: { type: Number, required: true, default: 0.8 }
|
|
@@ -247,8 +244,8 @@ const PendingRecordSchema = new Schema({
|
|
|
247
244
|
PendingRecordSchema.index({ requestHash: -1 });
|
|
248
245
|
const ScheduledTaskSchema = object({
|
|
249
246
|
processName: nativeEnum(ScheduledTaskNames),
|
|
250
|
-
datetime:
|
|
251
|
-
updated:
|
|
247
|
+
datetime: date(),
|
|
248
|
+
updated: date().optional(),
|
|
252
249
|
status: nativeEnum(ScheduledTaskStatus),
|
|
253
250
|
result: object({
|
|
254
251
|
data: any().optional(),
|
|
@@ -258,7 +255,7 @@ const ScheduledTaskSchema = object({
|
|
|
258
255
|
const ScheduledTaskRecordSchema = new Schema({
|
|
259
256
|
processName: { type: String, enum: ScheduledTaskNames, required: true },
|
|
260
257
|
datetime: { type: Date, required: true, expires: ONE_WEEK },
|
|
261
|
-
updated: { type:
|
|
258
|
+
updated: { type: Date, required: false },
|
|
262
259
|
status: { type: String, enum: ScheduledTaskStatus, required: true },
|
|
263
260
|
result: {
|
|
264
261
|
type: new Schema(
|
|
@@ -274,7 +271,9 @@ const ScheduledTaskRecordSchema = new Schema({
|
|
|
274
271
|
ScheduledTaskRecordSchema.index({ processName: 1 });
|
|
275
272
|
ScheduledTaskRecordSchema.index({ processName: 1, status: 1 });
|
|
276
273
|
ScheduledTaskRecordSchema.index({ _id: 1, status: 1 });
|
|
277
|
-
const
|
|
274
|
+
const SessionRecordSchema = new Schema({
|
|
275
|
+
sessionId: { type: String, required: true },
|
|
276
|
+
createdAt: { type: Date, required: true },
|
|
278
277
|
token: { type: String, required: true, unique: true },
|
|
279
278
|
score: { type: Number, required: true },
|
|
280
279
|
threshold: { type: Number, required: true },
|
|
@@ -282,32 +281,29 @@ const FrictionlessTokenRecordSchema = new Schema({
|
|
|
282
281
|
baseScore: { type: Number, required: true },
|
|
283
282
|
lScore: { type: Number, required: false },
|
|
284
283
|
timeout: { type: Number, required: false },
|
|
285
|
-
accessPolicy: { type: Number, required: false }
|
|
284
|
+
accessPolicy: { type: Number, required: false },
|
|
285
|
+
unverifiedHost: { type: Number, required: false },
|
|
286
|
+
webView: { type: Number, required: false }
|
|
286
287
|
},
|
|
287
288
|
providerSelectEntropy: { type: Number, required: true },
|
|
288
289
|
ipAddress: CompositeIpAddressRecordSchemaObj,
|
|
289
|
-
createdAt: { type: Date, default: Date.now },
|
|
290
|
-
lastUpdatedTimestamp: { type: Date, required: false },
|
|
291
|
-
storedAtTimestamp: { type: Date, required: false, expires: ONE_DAY }
|
|
292
|
-
});
|
|
293
|
-
FrictionlessTokenRecordSchema.index({ createdAt: 1 });
|
|
294
|
-
FrictionlessTokenRecordSchema.index({ providerSelectEntropy: 1 });
|
|
295
|
-
const SessionRecordSchema = new Schema({
|
|
296
|
-
sessionId: { type: String, required: true },
|
|
297
|
-
createdAt: { type: Date, required: true },
|
|
298
|
-
tokenId: {
|
|
299
|
-
type: mongoose.Schema.Types.ObjectId
|
|
300
|
-
},
|
|
301
290
|
captchaType: { type: String, enum: CaptchaType, required: true },
|
|
302
291
|
solvedImagesCount: { type: Number, required: false },
|
|
303
292
|
powDifficulty: { type: Number, required: false },
|
|
304
293
|
storedAtTimestamp: { type: Date, required: false, expires: ONE_DAY },
|
|
305
294
|
lastUpdatedTimestamp: { type: Date, required: false },
|
|
306
|
-
deleted: { type: Boolean, required: false }
|
|
295
|
+
deleted: { type: Boolean, required: false },
|
|
296
|
+
userSitekeyIpHash: { type: String, required: false },
|
|
297
|
+
webView: { type: Boolean, required: true, default: false },
|
|
298
|
+
iFrame: { type: Boolean, required: true, default: false },
|
|
299
|
+
decryptedHeadHash: { type: String, required: false, default: "" }
|
|
307
300
|
});
|
|
308
301
|
SessionRecordSchema.index({ createdAt: 1 });
|
|
309
302
|
SessionRecordSchema.index({ deleted: 1 });
|
|
310
303
|
SessionRecordSchema.index({ sessionId: 1 }, { unique: true });
|
|
304
|
+
SessionRecordSchema.index({ userSitekeyIpHash: 1 });
|
|
305
|
+
SessionRecordSchema.index({ providerSelectEntropy: 1 });
|
|
306
|
+
SessionRecordSchema.index({ token: 1 });
|
|
311
307
|
const DetectorRecordSchema = new Schema({
|
|
312
308
|
createdAt: { type: Date, required: true },
|
|
313
309
|
detectorKey: { type: String, required: true },
|
|
@@ -315,14 +311,21 @@ const DetectorRecordSchema = new Schema({
|
|
|
315
311
|
});
|
|
316
312
|
DetectorRecordSchema.index({ createdAt: 1 }, { unique: true });
|
|
317
313
|
DetectorRecordSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
|
|
314
|
+
const ClientEntropyRecordSchema = new Schema({
|
|
315
|
+
account: { type: String, required: true, unique: true },
|
|
316
|
+
entropy: { type: String, required: true },
|
|
317
|
+
createdAt: { type: Date, required: true },
|
|
318
|
+
updatedAt: { type: Date, required: true }
|
|
319
|
+
});
|
|
320
|
+
ClientEntropyRecordSchema.index({ account: 1 }, { unique: true });
|
|
318
321
|
export {
|
|
319
322
|
CaptchaRecordSchema,
|
|
323
|
+
ClientEntropyRecordSchema,
|
|
320
324
|
ClientRecordSchema,
|
|
321
325
|
CompositeIpAddressRecordSchemaObj,
|
|
322
326
|
CompositeIpAddressSchema,
|
|
323
327
|
DatasetRecordSchema,
|
|
324
328
|
DetectorRecordSchema,
|
|
325
|
-
FrictionlessTokenRecordSchema,
|
|
326
329
|
IpAddressType,
|
|
327
330
|
PendingRecordSchema,
|
|
328
331
|
PoWCaptchaRecordSchema,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/types-database",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Types for prosopo database",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": "
|
|
17
|
-
"npm": "10.
|
|
16
|
+
"node": ">=v20.0.0",
|
|
17
|
+
"npm": ">=10.6.0"
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
20
|
"clean": "del-cli --verbose dist tsconfig.tsbuildinfo",
|
|
@@ -34,25 +34,25 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://github.com/prosopo/captcha#readme",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@prosopo/common": "3.1.
|
|
38
|
-
"@prosopo/locale": "3.1.
|
|
39
|
-
"@prosopo/types": "3.
|
|
40
|
-
"@prosopo/user-access-policy": "3.5.
|
|
41
|
-
"@prosopo/config": "3.1.
|
|
37
|
+
"@prosopo/common": "3.1.22",
|
|
38
|
+
"@prosopo/locale": "3.1.22",
|
|
39
|
+
"@prosopo/types": "3.6.0",
|
|
40
|
+
"@prosopo/user-access-policy": "3.5.28",
|
|
41
|
+
"@prosopo/config": "3.1.22",
|
|
42
42
|
"mongoose": "8.13.0",
|
|
43
43
|
"zod": "3.23.8"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "22.10.2",
|
|
47
|
-
"@vitest/coverage-v8": "3.
|
|
47
|
+
"@vitest/coverage-v8": "3.2.4",
|
|
48
48
|
"concurrently": "9.0.1",
|
|
49
49
|
"del-cli": "6.0.0",
|
|
50
50
|
"npm-run-all": "4.1.5",
|
|
51
51
|
"tslib": "2.7.0",
|
|
52
52
|
"tsx": "4.20.3",
|
|
53
53
|
"typescript": "5.6.2",
|
|
54
|
-
"vite": "6.
|
|
55
|
-
"vitest": "3.
|
|
54
|
+
"vite": "6.4.1",
|
|
55
|
+
"vitest": "3.2.4"
|
|
56
56
|
},
|
|
57
57
|
"sideEffects": false
|
|
58
58
|
}
|