@prosopo/provider 5.10.2 → 5.10.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 +13 -12
- package/.turbo/turbo-build$colon$tsc.log +27 -27
- package/.turbo/turbo-build.log +14 -13
- package/CHANGELOG.md +68 -0
- package/dist/api/assetDocument.d.ts +3 -0
- package/dist/api/assetDocument.d.ts.map +1 -0
- package/dist/api/assetDocument.js +41 -0
- package/dist/api/assetDocument.js.map +1 -0
- package/dist/api/captcha/assignDetectorBundle.d.ts.map +1 -1
- package/dist/api/captcha/assignDetectorBundle.js +24 -2
- package/dist/api/captcha/assignDetectorBundle.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +2 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/public.d.ts.map +1 -1
- package/dist/api/public.js +2 -0
- package/dist/api/public.js.map +1 -1
- package/dist/cjs/api/assetDocument.cjs +43 -0
- package/dist/cjs/api/captcha/assignDetectorBundle.cjs +23 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +2 -1
- package/dist/cjs/api/public.cjs +2 -0
- package/dist/cjs/tasks/captchaManager.cjs +2 -1
- package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +20 -17
- package/dist/cjs/tasks/detection/bundlePool.cjs +7 -4
- package/dist/cjs/tasks/detection/decodePayload.cjs +1139 -1120
- package/dist/cjs/tasks/detection/decodePayload.js +1 -1
- package/dist/cjs/tasks/detection/getBotScore.cjs +2 -2
- package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +7 -2
- package/dist/tasks/captchaManager.d.ts +1 -0
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +2 -1
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +2 -0
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.js +20 -17
- package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
- package/dist/tasks/detection/bundlePool.d.ts +1 -0
- package/dist/tasks/detection/bundlePool.d.ts.map +1 -1
- package/dist/tasks/detection/bundlePool.js +7 -4
- package/dist/tasks/detection/bundlePool.js.map +1 -1
- package/dist/tasks/detection/bundlePool.test.js +36 -0
- package/dist/tasks/detection/bundlePool.test.js.map +1 -1
- package/dist/tasks/detection/decodePayload.d.ts +2 -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 +1 -1
- package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
- package/dist/tasks/detection/getBotScore.js +3 -3
- package/dist/tasks/detection/getBotScore.js.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.d.ts +2 -0
- package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
- package/dist/tasks/frictionless/frictionlessTasks.js +7 -2
- package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
- package/dist/tests/integration/decisionMachines.integration.test.js +65 -1
- package/dist/tests/integration/decisionMachines.integration.test.js.map +1 -1
- package/dist/tests/unit/api/assetDocument.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/assetDocument.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/assetDocument.unit.test.js +55 -0
- package/dist/tests/unit/api/assetDocument.unit.test.js.map +1 -0
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +5 -3
- package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +10 -9
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +9 -3
- package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +11 -6
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +38 -0
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +3 -3
- package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js +6 -0
- package/dist/tests/unit/tasks/frictionless/decryptPayload.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +78 -84
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/package.json +28 -28
package/dist/api/public.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { metricsEnabled, metricsHandler, recordHealthzGeoOutcome } from "./metrics.js";
|
|
2
|
+
import { assetDocumentRouter } from "./assetDocument.js";
|
|
2
3
|
import { getHealthzGeoRouter } from "./healthzGeo.js";
|
|
3
4
|
import { ProsopoApiError } from "@prosopo/common";
|
|
4
5
|
import { PublicApiPaths } from "@prosopo/types";
|
|
@@ -61,6 +62,7 @@ function publicRouter(env) {
|
|
|
61
62
|
return next(new ProsopoApiError("API.BAD_REQUEST", { context: { code: 500 } }));
|
|
62
63
|
}
|
|
63
64
|
});
|
|
65
|
+
router.use(assetDocumentRouter());
|
|
64
66
|
router.use(handleErrors);
|
|
65
67
|
return router;
|
|
66
68
|
}
|
package/dist/api/public.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/api/public.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/api/public.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAwB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,OAAwB,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACN,cAAc,EACd,cAAc,EACd,uBAAuB,GACvB,MAAM,cAAc,CAAC;AAOtB,MAAM,UAAU,YAAY,CAAC,GAAwB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKhC,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAYrC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/C,MAAM,OAAO,GACZ,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI;YACjB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAOD,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAKH,IAAI,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAKD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACtE,IAAI,CAAC;YACJ,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAEvB,MAAM,eAAe,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAChD,MAAM,0BAA0B,GAAG,EAAE,CAAC,6BAA6B,EAAE,CAAC;YAItE,MAAM,IAAI,GACT,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBAC5C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI;gBACjB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEjB,MAAM,QAAQ,GAAoB;gBACjC,OAAO;gBACP,OAAO,EAAE,iBAAiB;gBAC1B,IAAI;gBACJ,KAAK,EAAE;oBACN;wBACC,KAAK,EAAE,SAAS;wBAChB,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE;wBAClC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAC7B,eAAe,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAC1C;qBACD;oBACD;wBACC,KAAK,EAAE,KAAK;wBACZ,OAAO,EAAE,0BAA0B,CAAC,OAAO,EAAE;wBAC7C,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAC7B,0BAA0B,CAAC,iBAAiB,EAAE,GAAG,IAAI,CACrD;qBACD;iBACD;aACD,CAAC;YAEF,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,GAAG;gBACH,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;gBAC/B,GAAG,EAAE,gCAAgC;aACrC,CAAC,CAAC,CAAC;YACJ,OAAO,IAAI,CACV,IAAI,eAAe,CAAC,iBAAiB,EAAE;gBACtC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;aACtB,CAAC,CACF,CAAC;QACH,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAKlC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEzB,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let express = require("express");
|
|
3
|
+
express = require_runtime.__toESM(express, 1);
|
|
4
|
+
//#region src/api/assetDocument.ts
|
|
5
|
+
var scriptLiteral = (value) => JSON.stringify(value).replace(/</g, "\\u003c").replace(/>/g, "\\u003e");
|
|
6
|
+
var page = (inner, id) => `<!doctype html>
|
|
7
|
+
<meta charset="utf-8">
|
|
8
|
+
<body><script>
|
|
9
|
+
var f=document.createElement('iframe');
|
|
10
|
+
f.src=${scriptLiteral(inner)};
|
|
11
|
+
f.onload=function(){window.top.postMessage({p:'n',i:${scriptLiteral(id)}},'*')};
|
|
12
|
+
document.body.appendChild(f);
|
|
13
|
+
<\/script></body>`;
|
|
14
|
+
var ID_PATTERN = /^[A-Za-z0-9]{1,64}$/;
|
|
15
|
+
var probeId = (raw) => "string" === typeof raw && ID_PATTERN.test(raw) ? raw : "";
|
|
16
|
+
var innerUrl = (raw) => {
|
|
17
|
+
if ("string" !== typeof raw || 0 === raw.length) return;
|
|
18
|
+
try {
|
|
19
|
+
const url = new URL(raw);
|
|
20
|
+
return "http:" === url.protocol || "https:" === url.protocol ? url.href : void 0;
|
|
21
|
+
} catch {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
function assetDocumentRouter() {
|
|
26
|
+
const router = express.default.Router();
|
|
27
|
+
router.get(/.*/, (req, res, next) => {
|
|
28
|
+
if ("n" !== req.query.m) return next();
|
|
29
|
+
const inner = innerUrl(req.query.u);
|
|
30
|
+
if (!inner) return next();
|
|
31
|
+
const id = probeId(req.query.i);
|
|
32
|
+
res.removeHeader("X-Frame-Options");
|
|
33
|
+
res.set({
|
|
34
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
35
|
+
"Cache-Control": "no-store",
|
|
36
|
+
"Content-Security-Policy": "frame-ancestors *"
|
|
37
|
+
});
|
|
38
|
+
return res.status(200).send(page(inner, id));
|
|
39
|
+
});
|
|
40
|
+
return router;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
exports.assetDocumentRouter = assetDocumentRouter;
|
|
@@ -8,6 +8,26 @@ let uuid = require("uuid");
|
|
|
8
8
|
//#region src/api/captcha/assignDetectorBundle.ts
|
|
9
9
|
/** Pool position for this caller: a keyed hash of their address. */
|
|
10
10
|
var clientIndex = (ip, secret) => (0, node_crypto.createHmac)("sha256", secret).update(ip).digest().readUIntBE(0, 6);
|
|
11
|
+
var siteConfig = async (tasks, body, logger) => {
|
|
12
|
+
const parsed = _prosopo_types.AssignDetectorBundleRequestBody.safeParse(body);
|
|
13
|
+
if (!parsed.success) return {};
|
|
14
|
+
try {
|
|
15
|
+
const client = await tasks.db.getClientRecord(parsed.data[_prosopo_types.ApiParams.dapp]);
|
|
16
|
+
const clientUrl = client?.settings?.clientUrl;
|
|
17
|
+
const assetOrigin = client?.settings?.assetOrigin;
|
|
18
|
+
if (!clientUrl || !assetOrigin) return {};
|
|
19
|
+
return {
|
|
20
|
+
[_prosopo_types.ApiParams.clientUrl]: clientUrl,
|
|
21
|
+
[_prosopo_types.ApiParams.assetOrigin]: assetOrigin
|
|
22
|
+
};
|
|
23
|
+
} catch (err) {
|
|
24
|
+
logger.warn(() => ({
|
|
25
|
+
msg: "assignDetectorBundle site config failed",
|
|
26
|
+
err
|
|
27
|
+
}));
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
11
31
|
/**
|
|
12
32
|
* Assigns a precomputed detector bundle for this detection session.
|
|
13
33
|
*
|
|
@@ -43,13 +63,15 @@ var assignDetectorBundle_default = (env) => async (req, res, _next) => {
|
|
|
43
63
|
});
|
|
44
64
|
const { bundleId, bundle } = pool.at(clientIndex(require_normalizeRequestIp.normalizeRequestIp(req.ip, req.logger), secret));
|
|
45
65
|
const detectorSessionId = `det-${(0, uuid.v4)()}`;
|
|
46
|
-
const
|
|
66
|
+
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
67
|
+
const writeQueue = tasks.frictionlessManager.writeQueue;
|
|
47
68
|
if (!writeQueue) return res.json(noBundle);
|
|
48
69
|
if (!await writeQueue.cacheDetectorBundle(detectorSessionId, bundleId)) return res.json(noBundle);
|
|
49
70
|
const response = {
|
|
50
71
|
[_prosopo_types.ApiParams.useProviderBundle]: true,
|
|
51
72
|
[_prosopo_types.ApiParams.detectorSessionId]: detectorSessionId,
|
|
52
73
|
[_prosopo_types.ApiParams.detectorScript]: bundle.js,
|
|
74
|
+
...await siteConfig(tasks, req.body, req.logger),
|
|
53
75
|
status: "ok"
|
|
54
76
|
};
|
|
55
77
|
return res.json(response);
|
|
@@ -267,7 +267,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
267
267
|
...verifiedSignerUrl && { agent: verifiedSignerUrl }
|
|
268
268
|
});
|
|
269
269
|
}
|
|
270
|
-
const { baseBotScore: rawBaseBotScore, timestamp: rawTimestamp, userId: rawUserId, userAgent: rawUserAgent, webView, iFrame, decryptedHeadHash, decryptionFailed: rawDecryptionFailed, triggeredDetectors, shadowDomPenalty, entropyMathRandomFingerprint, entropyCryptoFingerprint, entropyWallClockOffsetMs, entropyMathRandomFirst, g, i, cv, sq, cg, sm, b, sw, md, bn, fs, bundleId } = decryptedPayload;
|
|
270
|
+
const { baseBotScore: rawBaseBotScore, timestamp: rawTimestamp, userId: rawUserId, userAgent: rawUserAgent, webView, iFrame, decryptedHeadHash, decryptionFailed: rawDecryptionFailed, triggeredDetectors, shadowDomPenalty, entropyMathRandomFingerprint, entropyCryptoFingerprint, entropyWallClockOffsetMs, entropyMathRandomFirst, g, i, cv, sq, cg, sm, dz, b, sw, md, bn, fs, bundleId } = decryptedPayload;
|
|
271
271
|
const detectorOverride = process.env.PROSOPO_TEST_FRICTIONLESS_DETECTOR_OVERRIDE === "1";
|
|
272
272
|
const baseBotScore = detectorOverride ? 0 : rawBaseBotScore;
|
|
273
273
|
const timestamp = detectorOverride ? Date.now() : rawTimestamp;
|
|
@@ -333,6 +333,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
|
|
|
333
333
|
...sq !== void 0 && { sq },
|
|
334
334
|
...cg !== void 0 && { cg },
|
|
335
335
|
...sm !== void 0 && { sm },
|
|
336
|
+
...dz !== void 0 && { dz },
|
|
336
337
|
...b !== void 0 && { b },
|
|
337
338
|
...sw !== void 0 && { sw },
|
|
338
339
|
...md !== void 0 && { md },
|
package/dist/cjs/api/public.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
const require_metrics = require("./metrics.cjs");
|
|
3
|
+
const require_assetDocument = require("./assetDocument.cjs");
|
|
3
4
|
const require_healthzGeo = require("./healthzGeo.cjs");
|
|
4
5
|
let _prosopo_common = require("@prosopo/common");
|
|
5
6
|
let _prosopo_types = require("@prosopo/types");
|
|
@@ -64,6 +65,7 @@ function publicRouter(env) {
|
|
|
64
65
|
return next(new _prosopo_common.ProsopoApiError("API.BAD_REQUEST", { context: { code: 500 } }));
|
|
65
66
|
}
|
|
66
67
|
});
|
|
68
|
+
router.use(require_assetDocument.assetDocumentRouter());
|
|
67
69
|
router.use(_prosopo_api_express_router.handleErrors);
|
|
68
70
|
return router;
|
|
69
71
|
}
|
|
@@ -345,7 +345,8 @@ var CaptchaManager = class CaptchaManager {
|
|
|
345
345
|
const bundle = bundleId ? require_bundlePool.getDetectorBundlePool()?.get(bundleId) : void 0;
|
|
346
346
|
return bundle ? {
|
|
347
347
|
key: bundle.privateKey,
|
|
348
|
-
innerConfig: bundle.innerConfig
|
|
348
|
+
innerConfig: bundle.innerConfig,
|
|
349
|
+
...bundle.payloadLayout && { payloadLayout: bundle.payloadLayout }
|
|
349
350
|
} : void 0;
|
|
350
351
|
}
|
|
351
352
|
/**
|
|
@@ -43,46 +43,49 @@ var ARTIFACT_CACHE_TTL_MS = Number.parseInt(process.env.DECISION_MACHINE_ARTIFAC
|
|
|
43
43
|
var DEFAULT_DECISION = { decision: _prosopo_types.DecisionMachineDecision.Allow };
|
|
44
44
|
var RequiredCountersSchema = zod.z.array(_prosopo_types.CounterSpecSchema);
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
47
|
-
* and
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
46
|
+
* Bumped by {@link invalidateAllDecisionMachineArtifactCaches}. A runner
|
|
47
|
+
* caches the value it last saw and drops its artifact cache whenever the two
|
|
48
|
+
* diverge, which flushes every runner — including ones built after the
|
|
49
|
+
* invalidation — without holding a reference to any of them.
|
|
50
|
+
*
|
|
51
|
+
* This replaces a registry of live runners, which assumed runners were built
|
|
52
|
+
* once per process. They are built per request, so the registry grew without
|
|
53
|
+
* bound and construction eventually began to fail. `WeakRef` did not bound
|
|
54
|
+
* it: the set held the wrapper, which outlives its referent.
|
|
53
55
|
*/
|
|
54
|
-
var
|
|
56
|
+
var artifactCacheGeneration = 0;
|
|
55
57
|
/**
|
|
56
58
|
* Flush every runner's in-memory artifact cache. Companion to
|
|
57
59
|
* {@link invalidateDecisionMachineScriptCache}. Call both after any
|
|
58
60
|
* `upsertDecisionMachineArtifact` upload.
|
|
59
61
|
*/
|
|
60
62
|
var invalidateAllDecisionMachineArtifactCaches = () => {
|
|
61
|
-
|
|
62
|
-
const runner = ref.deref();
|
|
63
|
-
if (runner === void 0) {
|
|
64
|
-
liveRunners.delete(ref);
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
runner.invalidateArtifactCache();
|
|
68
|
-
}
|
|
63
|
+
artifactCacheGeneration++;
|
|
69
64
|
};
|
|
70
65
|
var DecisionMachineRunner = class DecisionMachineRunner {
|
|
71
66
|
constructor(db) {
|
|
72
67
|
this.db = db;
|
|
73
68
|
this.artifactCache = /* @__PURE__ */ new Map();
|
|
74
|
-
|
|
69
|
+
this.seenArtifactCacheGeneration = artifactCacheGeneration;
|
|
75
70
|
}
|
|
76
71
|
/** Drop every entry in this runner's artifact cache. */
|
|
77
72
|
invalidateArtifactCache() {
|
|
78
73
|
this.artifactCache.clear();
|
|
79
74
|
}
|
|
75
|
+
/** Drop the cache if an invalidation happened since it was last consulted. */
|
|
76
|
+
dropArtifactCacheIfStale() {
|
|
77
|
+
if (this.seenArtifactCacheGeneration !== artifactCacheGeneration) {
|
|
78
|
+
this.seenArtifactCacheGeneration = artifactCacheGeneration;
|
|
79
|
+
this.artifactCache.clear();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
80
82
|
/** Build a cache key for a given scope + kind + dappAccount tuple. */
|
|
81
83
|
static cacheKey(scope, kind, dappAccount) {
|
|
82
84
|
return `${scope}:${kind}:${dappAccount ?? ""}`;
|
|
83
85
|
}
|
|
84
86
|
/** Return a cached artifact if still fresh, or undefined. */
|
|
85
87
|
getCachedArtifact(scope, kind, dappAccount) {
|
|
88
|
+
this.dropArtifactCacheIfStale();
|
|
86
89
|
const entry = this.artifactCache.get(DecisionMachineRunner.cacheKey(scope, kind, dappAccount));
|
|
87
90
|
if (!entry) return null;
|
|
88
91
|
if (Date.now() - entry.cachedAt > ARTIFACT_CACHE_TTL_MS) {
|
|
@@ -7,8 +7,8 @@ let node_path = require("node:path");
|
|
|
7
7
|
* Loads a pool of precomputed, obfuscated detector bundles from disk and caches
|
|
8
8
|
* them in memory — the Node analogue of the Rust "bumblebee" `bundle_manager`.
|
|
9
9
|
* Each bundle is a `{id}.js` (served to the browser) paired with a `{id}.json`
|
|
10
|
-
* (`{ privateKey, innerConfig }`, kept server-side) produced by
|
|
11
|
-
* `bundle:pool` build script.
|
|
10
|
+
* (`{ privateKey, innerConfig, payloadLayout }`, kept server-side) produced by
|
|
11
|
+
* the catcher `bundle:pool` build script.
|
|
12
12
|
*
|
|
13
13
|
* A bundle is assigned per detector session by {@link DetectorBundlePool.at},
|
|
14
14
|
* served by id, and resolved again at decryption time so the provider uses the
|
|
@@ -67,11 +67,13 @@ var DetectorBundlePool = class {
|
|
|
67
67
|
continue;
|
|
68
68
|
}
|
|
69
69
|
if (expectedRelease && !release) unstamped++;
|
|
70
|
+
const payloadLayout = typeof secrets.payloadLayout === "string" ? secrets.payloadLayout : void 0;
|
|
70
71
|
next.set(bundleId, {
|
|
71
72
|
js,
|
|
72
73
|
privateKey: secrets.privateKey,
|
|
73
74
|
innerConfig: secrets.innerConfig,
|
|
74
|
-
...release && { release }
|
|
75
|
+
...release && { release },
|
|
76
|
+
...payloadLayout && { payloadLayout }
|
|
75
77
|
});
|
|
76
78
|
} catch (error) {
|
|
77
79
|
logger.warn?.("failed to load bundle pool entry", {
|
|
@@ -167,7 +169,8 @@ function persistDetectorBundlePool(bundles, dir = globalPoolDir) {
|
|
|
167
169
|
(0, node_fs.writeFileSync)(jsonTmp, JSON.stringify({
|
|
168
170
|
privateKey: bundle.privateKey,
|
|
169
171
|
innerConfig: bundle.innerConfig,
|
|
170
|
-
...bundle.release && { release: bundle.release }
|
|
172
|
+
...bundle.release && { release: bundle.release },
|
|
173
|
+
...bundle.payloadLayout && { payloadLayout: bundle.payloadLayout }
|
|
171
174
|
}), {
|
|
172
175
|
encoding: "utf8",
|
|
173
176
|
mode: 384
|