@prosopo/provider 5.0.1 → 5.0.4
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 +24 -24
- package/.turbo/turbo-build.log +17 -17
- package/CHANGELOG.md +147 -0
- package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
- package/dist/api/blacklistRequestInspector.js +5 -2
- package/dist/api/blacklistRequestInspector.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +3 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts +1 -0
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +23 -19
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js.map +1 -1
- package/dist/api/captcha/maintenanceModeResponses.d.ts +3 -1
- package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
- package/dist/api/captcha/maintenanceModeResponses.js +6 -1
- package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +7 -12
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/blacklistRequestInspector.cjs +5 -2
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +3 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +23 -19
- package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +6 -0
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +1 -1
- package/dist/cjs/api/verify.cjs +7 -12
- package/dist/cjs/tasks/captchaManager.cjs +62 -14
- package/dist/cjs/tasks/detection/decodePayload.cjs +890 -905
- package/dist/cjs/tasks/detection/decodePayload.js +1 -1
- package/dist/cjs/tasks/detection/getBotScore.cjs +3 -1
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +10 -3
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +3 -2
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +13 -6
- package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +54 -18
- package/dist/cjs/util.cjs +13 -31
- package/dist/tasks/captchaManager.d.ts +1 -0
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +62 -14
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/detection/decodePayload.d.ts +3 -2
- package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
- package/dist/tasks/detection/decodePayload.js +1 -1
- package/dist/tasks/detection/decodePayload.js.map +1 -1
- package/dist/tasks/detection/getBotScore.d.ts +2 -0
- package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
- package/dist/tasks/detection/getBotScore.js +5 -3
- package/dist/tasks/detection/getBotScore.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +2 -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 +4 -3
- 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 +14 -7
- 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 +55 -19
- package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/api/blacklistRequestInspector.storm.integration.test.js +1 -1
- package/dist/tests/integration/api/blacklistRequestInspector.storm.integration.test.js.map +1 -1
- package/dist/tests/integration/usageCounters.integration.test.js +10 -6
- package/dist/tests/integration/usageCounters.integration.test.js.map +1 -1
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +4 -1
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js +53 -1
- package/dist/tests/unit/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.js +16 -1
- package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.js.map +1 -1
- package/dist/tests/unit/api/verifyMaintenanceMode.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/verifyMaintenanceMode.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/verifyMaintenanceMode.unit.test.js +82 -0
- package/dist/tests/unit/api/verifyMaintenanceMode.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +211 -0
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +19 -0
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +2 -0
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +8 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/util.ipDistance.unit.test.js +2 -0
- package/dist/tests/unit/util.ipDistance.unit.test.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +13 -31
- package/dist/util.js.map +1 -1
- package/package.json +21 -21
|
@@ -71,6 +71,53 @@ var CaptchaManager = class CaptchaManager {
|
|
|
71
71
|
return readings;
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
|
+
* Read a session and, if it's an escalation missing one of the
|
|
75
|
+
* inherently-origin-populated fields, walk to `originSessionId` and fill
|
|
76
|
+
* the gap. Intended for the decision-machine input read path only —
|
|
77
|
+
* `simdReadings`, `dnsEvent`, `entropyMathRandomFingerprint` etc. are
|
|
78
|
+
* populated on the origin session (SIMD via pow-submit's fire-and-forget
|
|
79
|
+
* attach; DNS via the sidecar's origin-TLS-scoped patch) and don't
|
|
80
|
+
* automatically end up on the escalation record because
|
|
81
|
+
* `buildEscalation` reads the origin from Mongo before the async writes
|
|
82
|
+
* settle. Rather than duplicating the origin's state onto every
|
|
83
|
+
* escalation at write time, keep the origin as the source of truth and
|
|
84
|
+
* fall back to it at read time.
|
|
85
|
+
*
|
|
86
|
+
* Fields intentionally NOT walked:
|
|
87
|
+
* - captchaType / sessionId / score / threshold / scoreComponents /
|
|
88
|
+
* ipAddress / ipInfo / headers — these describe the escalation
|
|
89
|
+
* itself and must never be overridden by the origin.
|
|
90
|
+
* - Anything already present on the escalation — first-write wins.
|
|
91
|
+
*
|
|
92
|
+
* Non-escalation sessions and escalations without `originSessionId`
|
|
93
|
+
* (older records) fall through as no-op.
|
|
94
|
+
*/
|
|
95
|
+
async getSessionRecordWithOriginFallback(sessionId) {
|
|
96
|
+
const session = await this.db.getSessionRecordBySessionId(sessionId);
|
|
97
|
+
if (!session) return void 0;
|
|
98
|
+
if (!session.originSessionId) return session;
|
|
99
|
+
const needsSimd = session.simdReadings === void 0 || session.simdReadings === null;
|
|
100
|
+
const needsDns = session.dnsEvent === void 0 || session.dnsEvent === null;
|
|
101
|
+
const needsEntropyMath = session.entropyMathRandomFingerprint === void 0;
|
|
102
|
+
const needsEntropyCrypto = session.entropyCryptoFingerprint === void 0;
|
|
103
|
+
const needsEntropyWall = session.entropyWallClockOffsetMs === void 0;
|
|
104
|
+
const needsEntropyFirst = session.entropyMathRandomFirst === void 0;
|
|
105
|
+
const needsG = session.g === void 0;
|
|
106
|
+
if (!needsSimd && !needsDns && !needsEntropyMath && !needsEntropyCrypto && !needsEntropyWall && !needsEntropyFirst && !needsG) return session;
|
|
107
|
+
const origin = await this.db.getSessionRecordBySessionId(session.originSessionId);
|
|
108
|
+
if (!origin) return session;
|
|
109
|
+
return {
|
|
110
|
+
...session,
|
|
111
|
+
...needsSimd && origin.simdReadings && { simdReadings: origin.simdReadings },
|
|
112
|
+
...needsDns && origin.dnsEvent && { dnsEvent: origin.dnsEvent },
|
|
113
|
+
...needsEntropyMath && origin.entropyMathRandomFingerprint !== void 0 && { entropyMathRandomFingerprint: origin.entropyMathRandomFingerprint },
|
|
114
|
+
...needsEntropyCrypto && origin.entropyCryptoFingerprint !== void 0 && { entropyCryptoFingerprint: origin.entropyCryptoFingerprint },
|
|
115
|
+
...needsEntropyWall && origin.entropyWallClockOffsetMs !== void 0 && { entropyWallClockOffsetMs: origin.entropyWallClockOffsetMs },
|
|
116
|
+
...needsEntropyFirst && origin.entropyMathRandomFirst !== void 0 && { entropyMathRandomFirst: origin.entropyMathRandomFirst },
|
|
117
|
+
...needsG && origin.g !== void 0 && { g: origin.g }
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
74
121
|
* Decrypt + first-hop-wins attach. Resolves the session's detector pool
|
|
75
122
|
* bundle (promoted onto the session record at frictionless time) to decrypt.
|
|
76
123
|
* No-op on decrypt failure / no bundle.
|
|
@@ -130,20 +177,6 @@ var CaptchaManager = class CaptchaManager {
|
|
|
130
177
|
sessionId
|
|
131
178
|
}
|
|
132
179
|
}));
|
|
133
|
-
if (userAccessPolicy?.captchaType !== void 0 && userAccessPolicy.captchaType !== requestedCaptchaType) {
|
|
134
|
-
this.logger.warn(() => ({
|
|
135
|
-
msg: "Invalid captcha type for user access policy",
|
|
136
|
-
data: {
|
|
137
|
-
account: clientSettings.account,
|
|
138
|
-
captchaType: userAccessPolicy.captchaType
|
|
139
|
-
}
|
|
140
|
-
}));
|
|
141
|
-
return {
|
|
142
|
-
valid: false,
|
|
143
|
-
reason: _prosopo_types.ResultReason.INCORRECT_CAPTCHA_TYPE,
|
|
144
|
-
type: requestedCaptchaType
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
180
|
if (sessionId) {
|
|
148
181
|
const cachedBeforeRemove = this.writeQueue ? await this.writeQueue.getCachedSession(sessionId) : null;
|
|
149
182
|
const cachedHash = typeof cachedBeforeRemove?.userSitekeyIpHash === "string" ? cachedBeforeRemove.userSitekeyIpHash : void 0;
|
|
@@ -246,6 +279,21 @@ var CaptchaManager = class CaptchaManager {
|
|
|
246
279
|
ipInfo: sessionRecord.ipInfo
|
|
247
280
|
};
|
|
248
281
|
}
|
|
282
|
+
if (userAccessPolicy?.captchaType !== void 0 && userAccessPolicy.captchaType !== requestedCaptchaType) {
|
|
283
|
+
this.logger.warn(() => ({
|
|
284
|
+
msg: "Invalid captcha type for user access policy (sessionless)",
|
|
285
|
+
data: {
|
|
286
|
+
account: clientSettings.account,
|
|
287
|
+
captchaType: userAccessPolicy.captchaType,
|
|
288
|
+
requestedCaptchaType
|
|
289
|
+
}
|
|
290
|
+
}));
|
|
291
|
+
return {
|
|
292
|
+
valid: false,
|
|
293
|
+
reason: _prosopo_types.ResultReason.INCORRECT_CAPTCHA_TYPE,
|
|
294
|
+
type: requestedCaptchaType
|
|
295
|
+
};
|
|
296
|
+
}
|
|
249
297
|
if (clientSettings?.settings?.captchaType !== requestedCaptchaType) {
|
|
250
298
|
this.logger.warn(() => ({
|
|
251
299
|
msg: `Invalid ${requestedCaptchaType} request`,
|