@akasecurity/cli 0.9.14 → 0.9.15
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/dist/cli.js +762 -267
- package/extension/manifest.json +1 -1
- package/native-host/content-retention.js +184 -55
- package/native-host/history-sync.js +190 -61
- package/native-host/host.js +469 -120
- package/native-host/scan-worker.js +241 -34
- package/native-host/sync.js +91 -36
- package/package.json +9 -9
- package/web-ui/package.json +6 -6
- package/web-ui/packages/dashboard-ui/package.json +1 -1
- package/web-ui/packages/plugin-sdk/package.json +1 -1
- package/web-ui/packages/schema/package.json +2 -2
- package/web-ui/web-ui/.next/BUILD_ID +1 -1
- package/web-ui/web-ui/.next/app-build-manifest.json +254 -254
- package/web-ui/web-ui/.next/app-path-routes-manifest.json +7 -7
- package/web-ui/web-ui/.next/build-manifest.json +14 -14
- package/web-ui/web-ui/.next/prerender-manifest.json +14 -14
- package/web-ui/web-ui/.next/required-server-files.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/detections/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/findings/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/policies/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/policies/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +3 -3
- package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/security/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/settings/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/vault/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/vault/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/vault/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found.rsc +10 -10
- package/web-ui/web-ui/.next/server/app/icon.svg/route.js +1 -1
- package/web-ui/web-ui/.next/server/app/icon.svg/route.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/index.html +1 -1
- package/web-ui/web-ui/.next/server/app/index.rsc +10 -10
- package/web-ui/web-ui/.next/server/app/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app-paths-manifest.json +7 -7
- package/web-ui/web-ui/.next/server/chunks/184.js +1039 -0
- package/web-ui/web-ui/.next/server/chunks/245.js +11 -0
- package/web-ui/web-ui/.next/server/chunks/{670.js → 250.js} +1 -1
- package/web-ui/web-ui/.next/server/chunks/491.js +1 -0
- package/web-ui/web-ui/.next/server/chunks/51.js +1 -0
- package/web-ui/web-ui/.next/server/chunks/511.js +66 -0
- package/web-ui/web-ui/.next/server/chunks/537.js +1 -0
- package/web-ui/web-ui/.next/server/chunks/{74.js → 586.js} +55 -38
- package/web-ui/web-ui/.next/server/chunks/643.js +6 -0
- package/web-ui/web-ui/.next/server/chunks/660.js +109 -0
- package/web-ui/web-ui/.next/server/chunks/662.js +1 -0
- package/web-ui/web-ui/.next/server/chunks/749.js +22 -0
- package/web-ui/web-ui/.next/server/chunks/756.js +6 -0
- package/web-ui/web-ui/.next/server/chunks/774.js +12 -0
- package/web-ui/web-ui/.next/server/functions-config-manifest.json +5 -5
- package/web-ui/web-ui/.next/server/middleware-build-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
- package/web-ui/web-ui/.next/server/middleware.js +2 -2
- package/web-ui/web-ui/.next/server/pages/404.html +1 -1
- package/web-ui/web-ui/.next/server/pages/500.html +1 -1
- package/web-ui/web-ui/.next/server/pages/_app.js +1 -1
- package/web-ui/web-ui/.next/server/pages/_app.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/pages/_document.js +1 -1
- package/web-ui/web-ui/.next/server/pages/_document.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/pages/_error.js +3 -3
- package/web-ui/web-ui/.next/server/pages/_error.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
- package/web-ui/web-ui/.next/static/chunks/394-310a18b4e4df5baf.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/458-51313fc93031a722.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/784-4ea191865f1d4d08.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/800-5a959d56ff462fa5.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/982-d4c17097640bdc58.js +55 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-6a2b4ce7f62aa2ba.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-3032d8c5d83ed0ae.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-541933106e3fbbd5.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/error-8db18c71ebeb633c.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-b2913fd29067c1aa.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-d71ddfb1b6a8508a.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-db4102808bb1d7ba.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-8fc32e776e5c8f17.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-5136fa903953a1f1.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-0a38af585fc577fa.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-7b0a5b76d199ec55.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-dd238c793fc58e5b.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/security/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-27448935d7ce4168.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-e8f75d1d2a05a860.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-34525856979b2faf.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/loading-1c2f7a583c03a3ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-90ff82a26647fc29.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/_not-found/page-688942265deca357.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/layout-66e4db4cb3e3b073.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/page-64c3ee82a8af8ca6.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/fc2b9f2a-dbaa334f7301101d.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/{framework-4a8a69f5ce633b25.js → framework-f6112ebf12822e8c.js} +1 -1
- package/web-ui/web-ui/.next/static/chunks/main-app-9c9fe8121a92e5d6.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/main-b1c87d0ac6039542.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/pages/_app-3a76cb93bbdd6993.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/pages/_error-690c2fcfe129b529.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/{webpack-c0fb35a40828243e.js → webpack-27570aabc530cb21.js} +1 -1
- package/web-ui/web-ui/.next/static/css/010b6061327092dd.css +2 -0
- package/web-ui/web-ui/.next/static/{5Pl1KmhN7uMqXkPkq0ZmS → zCQxcf2ZbK52vQeWXgBgs}/_buildManifest.js +1 -1
- package/web-ui/web-ui/dist/scan-worker.js +241 -34
- package/web-ui/web-ui/package.json +3 -3
- package/web-ui/web-ui/.next/server/chunks/167.js +0 -11
- package/web-ui/web-ui/.next/server/chunks/197.js +0 -12
- package/web-ui/web-ui/.next/server/chunks/247.js +0 -66
- package/web-ui/web-ui/.next/server/chunks/259.js +0 -22
- package/web-ui/web-ui/.next/server/chunks/285.js +0 -1
- package/web-ui/web-ui/.next/server/chunks/293.js +0 -1022
- package/web-ui/web-ui/.next/server/chunks/498.js +0 -1
- package/web-ui/web-ui/.next/server/chunks/524.js +0 -109
- package/web-ui/web-ui/.next/server/chunks/618.js +0 -1
- package/web-ui/web-ui/.next/server/chunks/807.js +0 -6
- package/web-ui/web-ui/.next/server/chunks/811.js +0 -6
- package/web-ui/web-ui/.next/server/chunks/97.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/333-837ec42ac57bd0f5.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/423b6282-fc44d01f7ffd176d.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/539-ca04468e745ed73a.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/614-2c96a5e95ce63862.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/639-6f64a434dce13266.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/826-e806952dd7b636f8.js +0 -55
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-5fc18420d8d5bf62.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-fe72214e54d52a14.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-47e4dd015f24c04d.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/error-be2032a4770a35bf.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-f90fbb03406e4383.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-0a1d6a3557b99750.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-dbf32c5303140e8c.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-cb1934547acde891.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-6688bc58741c7c7d.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-d357a1d54c653d14.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-bc95c7097cca0dfc.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-5bebd818c1bb3a79.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/security/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-42845dce0b734eeb.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-d3ce8a503e8ce592.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-802942c0a06fbe31.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/loading-dd5849a39c269cf4.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-52c8cd3a2a09a067.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/_not-found/page-260d84f0d7697773.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/layout-c64d57251ee073d5.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/page-b7ea78b4203d219b.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/main-89a5d50418a9a7e3.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/main-app-4a18e3117ef3af1e.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/pages/_app-671d04cd06b05cac.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/pages/_error-ae172b6a97f64258.js +0 -1
- package/web-ui/web-ui/.next/static/css/616a1cc3e0d40480.css +0 -2
- /package/web-ui/web-ui/.next/static/{5Pl1KmhN7uMqXkPkq0ZmS → zCQxcf2ZbK52vQeWXgBgs}/_ssgManifest.js +0 -0
package/extension/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "AI Traffic Control",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.15",
|
|
5
5
|
"description": "Local secret detection and redaction for ChatGPT and Claude.ai web chat.",
|
|
6
6
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnwx5Snbi3oZ7mDBC78NaTHO6dTKYRtCqr29YnOImR47UM21tP1us3KF6FjQMtR6tAsffflRok1PThQpjBNwYdRM+stvPIUr5GqBRQL1Ge///kZaVz7eCptCjKg00ygk2HwelaCNt6nWy6czIcM3/HssrNflw42IKsBORW7qQ+KhhKqlABjkRUDvBcuhwOU34HHMJxeP2XdyI5T5msqVJN1nVA+X9T/18dP7cCSzkp9RwLN1hvQMS6n3A1R0HUCmfra1lb1KqQhy3EBdm2VwxTDGVPfGYbTdNSyRT70wzcZy1IdQkfT6YOy1M//+yT7Vu9p/aajs+dNNn/zUn0qJyQIDAQAB",
|
|
7
7
|
"icons": {
|
|
@@ -32,9 +32,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
32
32
|
mod
|
|
33
33
|
));
|
|
34
34
|
|
|
35
|
-
// ../../node_modules/.pnpm/ignore@7.0.
|
|
35
|
+
// ../../node_modules/.pnpm/ignore@7.0.10/node_modules/ignore/index.js
|
|
36
36
|
var require_ignore = __commonJS({
|
|
37
|
-
"../../node_modules/.pnpm/ignore@7.0.
|
|
37
|
+
"../../node_modules/.pnpm/ignore@7.0.10/node_modules/ignore/index.js"(exports, module) {
|
|
38
38
|
"use strict";
|
|
39
39
|
function makeArray(subject) {
|
|
40
40
|
return Array.isArray(subject) ? subject : [subject];
|
|
@@ -429,6 +429,13 @@ var require_ignore = __commonJS({
|
|
|
429
429
|
}
|
|
430
430
|
};
|
|
431
431
|
var WILDCARD = "[^\\/]*";
|
|
432
|
+
var separatorAfter = (run, at) => {
|
|
433
|
+
let separator = EMPTY;
|
|
434
|
+
for (let index = at + 1; index < run.length && !run[index].wildcard; index++) {
|
|
435
|
+
separator += run[index].single;
|
|
436
|
+
}
|
|
437
|
+
return separator;
|
|
438
|
+
};
|
|
432
439
|
var pinWildcards = (source) => {
|
|
433
440
|
if (source.indexOf(WILDCARD) < 0) {
|
|
434
441
|
return source;
|
|
@@ -498,7 +505,7 @@ var require_ignore = __commonJS({
|
|
|
498
505
|
out += token.single;
|
|
499
506
|
return;
|
|
500
507
|
}
|
|
501
|
-
out += at === lastWildcard ? WILDCARD : `(?:(?!${run
|
|
508
|
+
out += at === lastWildcard ? WILDCARD : `(?:(?!${separatorAfter(run, at)})[^\\/])*`;
|
|
502
509
|
});
|
|
503
510
|
run = [];
|
|
504
511
|
};
|
|
@@ -675,13 +682,13 @@ var require_ignore = __commonJS({
|
|
|
675
682
|
const rules = this._rules;
|
|
676
683
|
const { length } = rules;
|
|
677
684
|
const shortcut = this._basenameCount * 2 >= length;
|
|
678
|
-
const
|
|
685
|
+
const basename7 = shortcut ? basenameOf(path) : path;
|
|
679
686
|
for (let index = 0; index < length; index++) {
|
|
680
687
|
const rule = rules[index];
|
|
681
688
|
const { negative } = rule;
|
|
682
689
|
const skip = unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored;
|
|
683
690
|
if (!skip && rule[mode].test(
|
|
684
|
-
shortcut && rule._basenameOnly ?
|
|
691
|
+
shortcut && rule._basenameOnly ? basename7 : path
|
|
685
692
|
)) {
|
|
686
693
|
ignored = !negative;
|
|
687
694
|
unignored = negative;
|
|
@@ -995,6 +1002,10 @@ var SQLITE_MIGRATIONS = [
|
|
|
995
1002
|
{
|
|
996
1003
|
tag: "0035_share_destination_provider_id",
|
|
997
1004
|
sql: "ALTER TABLE `share_destination` ADD `provider_id` text;"
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
tag: "0036_secret_vault_identity_fingerprint",
|
|
1008
|
+
sql: "ALTER TABLE `secret_vault` ADD `value_identity_fingerprint` text DEFAULT '' NOT NULL;--> statement-breakpoint\nUPDATE `secret_vault` SET `value_identity_fingerprint` = `value_fingerprint`;\n"
|
|
998
1009
|
}
|
|
999
1010
|
];
|
|
1000
1011
|
|
|
@@ -6030,7 +6041,7 @@ var recursive = /* @__PURE__ */ new WeakMap();
|
|
|
6030
6041
|
var NONE = 0;
|
|
6031
6042
|
var ASSUMED = 1;
|
|
6032
6043
|
var PROVEN = 2;
|
|
6033
|
-
function isRecursive(inst, stack,
|
|
6044
|
+
function isRecursive(inst, stack, resolve3) {
|
|
6034
6045
|
const cached2 = recursive.get(inst);
|
|
6035
6046
|
if (cached2 !== void 0)
|
|
6036
6047
|
return cached2 ? PROVEN : NONE;
|
|
@@ -6040,7 +6051,7 @@ function isRecursive(inst, stack, resolve2) {
|
|
|
6040
6051
|
let result = NONE;
|
|
6041
6052
|
const check2 = (child) => {
|
|
6042
6053
|
if (result !== PROVEN && child?._zod) {
|
|
6043
|
-
const answer = isRecursive(child, stack,
|
|
6054
|
+
const answer = isRecursive(child, stack, resolve3);
|
|
6044
6055
|
if (answer > result)
|
|
6045
6056
|
result = answer;
|
|
6046
6057
|
}
|
|
@@ -6051,7 +6062,7 @@ function isRecursive(inst, stack, resolve2) {
|
|
|
6051
6062
|
const desc = Object.getOwnPropertyDescriptor(sh, key);
|
|
6052
6063
|
if (spread && !desc.enumerable)
|
|
6053
6064
|
continue;
|
|
6054
|
-
const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack,
|
|
6065
|
+
const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve3) : NONE;
|
|
6055
6066
|
if (child > answer)
|
|
6056
6067
|
answer = child;
|
|
6057
6068
|
}
|
|
@@ -6115,7 +6126,7 @@ function isRecursive(inst, stack, resolve2) {
|
|
|
6115
6126
|
break;
|
|
6116
6127
|
// `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly
|
|
6117
6128
|
case "lazy": {
|
|
6118
|
-
const inner = def._cachedInner ?? (
|
|
6129
|
+
const inner = def._cachedInner ?? (resolve3 ? inst._zod.innerType : void 0);
|
|
6119
6130
|
merge2(inner ? isRecursive(inner, stack, false) : ASSUMED);
|
|
6120
6131
|
break;
|
|
6121
6132
|
}
|
|
@@ -23371,7 +23382,29 @@ var StorePosturePlugin = external_exports.object({
|
|
|
23371
23382
|
*/
|
|
23372
23383
|
policyBundleVersion: external_exports.string().max(200).nullable(),
|
|
23373
23384
|
/** Epoch millis, on the CLIENT clock, of that fetch. */
|
|
23374
|
-
policyFetchedAt: external_exports.number().int().min(0).max(MAX_DATE_MS).nullable()
|
|
23385
|
+
policyFetchedAt: external_exports.number().int().min(0).max(MAX_DATE_MS).nullable(),
|
|
23386
|
+
/**
|
|
23387
|
+
* The newest version the host's own install record holds for this plugin —
|
|
23388
|
+
* what is on disk. After an update it leads `version` (the running copy) by
|
|
23389
|
+
* one launch. Null when no usable version can be read: no install record
|
|
23390
|
+
* (a plugin run from a checkout), no entry with a valid version, or every
|
|
23391
|
+
* such entry names an `installPath` that no longer exists; OPTIONAL, not
|
|
23392
|
+
* required, so a build that predates the member keeps getting its 200.
|
|
23393
|
+
* Bounded like `version`.
|
|
23394
|
+
*/
|
|
23395
|
+
installedVersion: external_exports.string().max(64).nullable().optional(),
|
|
23396
|
+
/**
|
|
23397
|
+
* The local-store schema version this running build migrates a store to:
|
|
23398
|
+
* the number of store migrations it carries, the count it stamps into
|
|
23399
|
+
* `PRAGMA user_version`. A snapshot whose `schemaVersion` is above it
|
|
23400
|
+
* usually describes a store a newer build migrated. It is a hint, not a
|
|
23401
|
+
* verdict: the stamp is write-only, so a store whose count ran past this
|
|
23402
|
+
* build's while this build knows every migration in its ledger reads above
|
|
23403
|
+
* it too, which is why describeStoreSkew decides skew on ledger tags and
|
|
23404
|
+
* never on the count. OPTIONAL for the same reason as `installedVersion`;
|
|
23405
|
+
* bounded like `schemaVersion`.
|
|
23406
|
+
*/
|
|
23407
|
+
buildSchemaVersion: external_exports.number().int().min(0).max(MAX_INT4).optional()
|
|
23375
23408
|
}).meta({ id: "StorePosturePlugin" });
|
|
23376
23409
|
var StorePostureSnapshot = external_exports.object({
|
|
23377
23410
|
deviceId: external_exports.guid(),
|
|
@@ -24927,10 +24960,15 @@ var ParsedPointer = external_exports.object({
|
|
|
24927
24960
|
});
|
|
24928
24961
|
var VaultEntry = external_exports.object({
|
|
24929
24962
|
pointerId: external_exports.string(),
|
|
24930
|
-
// The keyed HMAC of the raw
|
|
24931
|
-
// derived under.
|
|
24932
|
-
// independently of the vault encryption
|
|
24963
|
+
// The keyed HMAC of the EXACT raw bytes under `exception.key`, and the epoch it
|
|
24964
|
+
// was derived under. The vault's own dedupe key: a value and its invisibly
|
|
24965
|
+
// padded twin are two rows. It rotates independently of the vault encryption
|
|
24966
|
+
// key below. Never matched against an exception or grant.
|
|
24933
24967
|
valueFingerprint: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
24968
|
+
// The same HMAC over the raw with invisible padding removed: the identity a
|
|
24969
|
+
// reveal-to-model grant and every exception match on. Shared by a value and
|
|
24970
|
+
// its padded twin.
|
|
24971
|
+
valueIdentityFingerprint: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
24934
24972
|
fingerprintKeyVersion: external_exports.number().int().positive(),
|
|
24935
24973
|
// The vault-key epoch this row's ciphertext was sealed under.
|
|
24936
24974
|
keyVersion: external_exports.number().int().positive(),
|
|
@@ -25506,10 +25544,18 @@ var SeveritySummaryItem = external_exports.object({
|
|
|
25506
25544
|
count: external_exports.number().int().nonnegative(),
|
|
25507
25545
|
// Resolution-aware breakdown (optional, additive). Populated once findings
|
|
25508
25546
|
// carry lifecycle state: `caught` = handled in-flight (enforced); `openAtRest`
|
|
25509
|
-
// = still open with no in-flight enforcement (needs remediation)
|
|
25510
|
-
//
|
|
25547
|
+
// = still open with no in-flight enforcement (needs remediation); `dismissed`
|
|
25548
|
+
// = closed by a human judgement rather than a fix — visible, but not counted as
|
|
25549
|
+
// needing remediation. The three are disjoint. Absent on the legacy count-only
|
|
25550
|
+
// response until the resolution feature lands.
|
|
25511
25551
|
caught: external_exports.number().int().nonnegative().optional(),
|
|
25512
|
-
openAtRest: external_exports.number().int().nonnegative().optional()
|
|
25552
|
+
openAtRest: external_exports.number().int().nonnegative().optional(),
|
|
25553
|
+
dismissed: external_exports.number().int().nonnegative().optional(),
|
|
25554
|
+
// The two halves of `caught`, for a reader that wants them apart: `handled` =
|
|
25555
|
+
// in-flight findings an enforcement action already contained; `resolved` =
|
|
25556
|
+
// at-rest findings closed out by fixing them. `handled + resolved === caught`.
|
|
25557
|
+
handled: external_exports.number().int().nonnegative().optional(),
|
|
25558
|
+
resolved: external_exports.number().int().nonnegative().optional()
|
|
25513
25559
|
}).meta({ id: "SeveritySummaryItem" });
|
|
25514
25560
|
var SeveritySummaryResponse = external_exports.object({
|
|
25515
25561
|
// Sum of bySeverity[].count.
|
|
@@ -25517,6 +25563,9 @@ var SeveritySummaryResponse = external_exports.object({
|
|
|
25517
25563
|
// Findings still open at rest (sum of bySeverity[].openAtRest). Optional and
|
|
25518
25564
|
// additive — absent on the legacy response until the resolution feature lands.
|
|
25519
25565
|
needsRemediation: external_exports.number().int().nonnegative().optional(),
|
|
25566
|
+
// Findings a user dismissed (sum of bySeverity[].dismissed). Excluded from
|
|
25567
|
+
// needsRemediation, and kept visible here so an accepted risk is not erased.
|
|
25568
|
+
dismissed: external_exports.number().int().nonnegative().optional(),
|
|
25520
25569
|
// All four severity levels are always present (count may be 0).
|
|
25521
25570
|
bySeverity: external_exports.array(SeveritySummaryItem)
|
|
25522
25571
|
}).meta({ id: "SeveritySummaryResponse" });
|
|
@@ -32115,7 +32164,10 @@ var SqliteResolutionsRepository = class {
|
|
|
32115
32164
|
* Insert many dispositions as ONE transaction — all of them or none.
|
|
32116
32165
|
*
|
|
32117
32166
|
* A dashboard dismissal closes every open finding of a rule, which is one
|
|
32118
|
-
* write per key
|
|
32167
|
+
* write per key. It reaches this through
|
|
32168
|
+
* `LocalDatabase.dismissOpenFindingsForRule`, which calls it inside the
|
|
32169
|
+
* transaction that selected the keys, so there it runs as a SAVEPOINT of
|
|
32170
|
+
* that transaction. Run loose, a fault partway leaves half a rule closed with
|
|
32119
32171
|
* nothing recording that the other half was meant to be. The caller then has
|
|
32120
32172
|
* no way to tell a partial run from a complete one, because the card it
|
|
32121
32173
|
* refreshes into just shows a smaller number either way.
|
|
@@ -32335,6 +32387,7 @@ function toSighting(row) {
|
|
|
32335
32387
|
var SELECT_COLUMNS = `
|
|
32336
32388
|
pointer_id AS pointerId,
|
|
32337
32389
|
value_fingerprint AS valueFingerprint,
|
|
32390
|
+
value_identity_fingerprint AS valueIdentityFingerprint,
|
|
32338
32391
|
fingerprint_key_version AS fingerprintKeyVersion,
|
|
32339
32392
|
key_version AS keyVersion,
|
|
32340
32393
|
format_version AS formatVersion,
|
|
@@ -32359,13 +32412,13 @@ var SqliteSecretVaultRepository = class {
|
|
|
32359
32412
|
this.db = db;
|
|
32360
32413
|
this.insertStmt = db.prepare(
|
|
32361
32414
|
`INSERT INTO secret_vault (
|
|
32362
|
-
pointer_id, value_fingerprint,
|
|
32363
|
-
format_version, category, rule_id, masked_match, provider,
|
|
32415
|
+
pointer_id, value_fingerprint, value_identity_fingerprint,
|
|
32416
|
+
fingerprint_key_version, key_version, format_version, category, rule_id, masked_match, provider,
|
|
32364
32417
|
ciphertext, nonce, auth_tag,
|
|
32365
32418
|
user_authorized, occurrence_count, first_seen, last_seen
|
|
32366
32419
|
) VALUES (
|
|
32367
|
-
:pointerId, :valueFingerprint, :
|
|
32368
|
-
:formatVersion, :category, :ruleId, :maskedMatch, :provider,
|
|
32420
|
+
:pointerId, :valueFingerprint, :valueIdentityFingerprint,
|
|
32421
|
+
:fingerprintKeyVersion, :keyVersion, :formatVersion, :category, :ruleId, :maskedMatch, :provider,
|
|
32369
32422
|
:ciphertext, :nonce, :authTag,
|
|
32370
32423
|
:userAuthorized, 1, :now, :now
|
|
32371
32424
|
)`
|
|
@@ -32390,7 +32443,13 @@ var SqliteSecretVaultRepository = class {
|
|
|
32390
32443
|
);
|
|
32391
32444
|
this.refreshFingerprintStmt = db.prepare(
|
|
32392
32445
|
`UPDATE secret_vault
|
|
32393
|
-
SET value_fingerprint = :valueFingerprint,
|
|
32446
|
+
SET value_fingerprint = :valueFingerprint,
|
|
32447
|
+
value_identity_fingerprint = :valueIdentityFingerprint,
|
|
32448
|
+
fingerprint_key_version = :fingerprintKeyVersion
|
|
32449
|
+
WHERE pointer_id = :pointerId`
|
|
32450
|
+
);
|
|
32451
|
+
this.setIdentityStmt = db.prepare(
|
|
32452
|
+
`UPDATE secret_vault SET value_identity_fingerprint = :valueIdentityFingerprint
|
|
32394
32453
|
WHERE pointer_id = :pointerId`
|
|
32395
32454
|
);
|
|
32396
32455
|
this.deleteByPointerStmt = db.prepare(`DELETE FROM secret_vault WHERE pointer_id = :pointerId`);
|
|
@@ -32407,6 +32466,7 @@ var SqliteSecretVaultRepository = class {
|
|
|
32407
32466
|
listStmt;
|
|
32408
32467
|
replaceCiphertextStmt;
|
|
32409
32468
|
refreshFingerprintStmt;
|
|
32469
|
+
setIdentityStmt;
|
|
32410
32470
|
deleteByPointerStmt;
|
|
32411
32471
|
derefStmt;
|
|
32412
32472
|
/**
|
|
@@ -32437,6 +32497,7 @@ var SqliteSecretVaultRepository = class {
|
|
|
32437
32497
|
bindParams({
|
|
32438
32498
|
pointerId: input2.pointerId,
|
|
32439
32499
|
valueFingerprint: input2.valueFingerprint,
|
|
32500
|
+
valueIdentityFingerprint: input2.valueIdentityFingerprint,
|
|
32440
32501
|
fingerprintKeyVersion: input2.fingerprintKeyVersion,
|
|
32441
32502
|
keyVersion: input2.keyVersion,
|
|
32442
32503
|
formatVersion: input2.formatVersion ?? POINTER_FORMAT_VERSION,
|
|
@@ -32498,7 +32559,15 @@ var SqliteSecretVaultRepository = class {
|
|
|
32498
32559
|
replaceCiphertext(pointerId, next) {
|
|
32499
32560
|
this.replaceCiphertextStmt.run({ pointerId, ...next });
|
|
32500
32561
|
}
|
|
32501
|
-
/**
|
|
32562
|
+
/**
|
|
32563
|
+
* Correct an entry's identity fingerprint in place, leaving its exact
|
|
32564
|
+
* fingerprint and key epoch alone. For a row whose identity column still holds
|
|
32565
|
+
* the exact value copied in by the migration that added it.
|
|
32566
|
+
*/
|
|
32567
|
+
setIdentityFingerprint(pointerId, valueIdentityFingerprint) {
|
|
32568
|
+
this.setIdentityStmt.run({ pointerId, valueIdentityFingerprint });
|
|
32569
|
+
}
|
|
32570
|
+
/** Re-derive an entry's fingerprints under a new fingerprint-key epoch. */
|
|
32502
32571
|
refreshFingerprint(pointerId, next) {
|
|
32503
32572
|
this.refreshFingerprintStmt.run({ pointerId, ...next });
|
|
32504
32573
|
}
|
|
@@ -32629,7 +32698,7 @@ var SqliteSecretVaultRepository = class {
|
|
|
32629
32698
|
`SELECT ${INVENTORY_COLUMNS},
|
|
32630
32699
|
(SELECT e.id FROM exceptions e
|
|
32631
32700
|
WHERE e.rule_id = v.rule_id
|
|
32632
|
-
AND e.value_fingerprint = v.
|
|
32701
|
+
AND e.value_fingerprint = v.value_identity_fingerprint
|
|
32633
32702
|
AND e.key_version = v.fingerprint_key_version
|
|
32634
32703
|
AND ${ACTIVE_REVEAL_GRANT_PREDICATE}
|
|
32635
32704
|
LIMIT 1) AS grant_id
|
|
@@ -32672,7 +32741,7 @@ var SqliteSecretVaultRepository = class {
|
|
|
32672
32741
|
`SELECT ${INVENTORY_COLUMNS},
|
|
32673
32742
|
(SELECT e.id FROM exceptions e
|
|
32674
32743
|
WHERE e.rule_id = v.rule_id
|
|
32675
|
-
AND e.value_fingerprint = v.
|
|
32744
|
+
AND e.value_fingerprint = v.value_identity_fingerprint
|
|
32676
32745
|
AND e.key_version = v.fingerprint_key_version
|
|
32677
32746
|
AND ${ACTIVE_REVEAL_GRANT_PREDICATE}
|
|
32678
32747
|
LIMIT 1) AS grant_id
|
|
@@ -32776,6 +32845,18 @@ var OPEN_AT_REST_FINDINGS_SQL = `FROM inspection_findings f
|
|
|
32776
32845
|
OR latest.status IS NULL
|
|
32777
32846
|
OR latest.status NOT IN ('resolved', 'dismissed')
|
|
32778
32847
|
)`;
|
|
32848
|
+
function selectOpenFindingKeysForRule(db, ruleId) {
|
|
32849
|
+
const rows = allRows(
|
|
32850
|
+
db.prepare(
|
|
32851
|
+
`SELECT DISTINCT f.finding_key AS finding_key
|
|
32852
|
+
${OPEN_AT_REST_FINDINGS_SQL}
|
|
32853
|
+
AND d.rule_id = :ruleId
|
|
32854
|
+
AND f.finding_key IS NOT NULL`
|
|
32855
|
+
),
|
|
32856
|
+
{ ruleId }
|
|
32857
|
+
);
|
|
32858
|
+
return rows.map((r) => r.finding_key);
|
|
32859
|
+
}
|
|
32779
32860
|
var SEVERITIES = ["critical", "high", "medium", "low"];
|
|
32780
32861
|
var ACTION_TO_KIND = {
|
|
32781
32862
|
block: "blocked",
|
|
@@ -32832,16 +32913,16 @@ var SqliteSecurityRepository = class {
|
|
|
32832
32913
|
// findings are caught only once their latest disposition is resolved,
|
|
32833
32914
|
// otherwise they are open-at-rest.
|
|
32834
32915
|
//
|
|
32835
|
-
//
|
|
32836
|
-
//
|
|
32837
|
-
//
|
|
32838
|
-
//
|
|
32839
|
-
// be bucketed as caught
|
|
32916
|
+
// Only latest status 'resolved' counts as caught above. 'dismissed' is its
|
|
32917
|
+
// own bucket: a judgement rather than a fix, so it is neither caught nor
|
|
32918
|
+
// needing remediation, and stays countable. A further manual disposition
|
|
32919
|
+
// (acknowledged, false-positive) must be placed deliberately — 'acknowledged'
|
|
32920
|
+
// is accepted risk, not a fix, and must NOT be bucketed as caught.
|
|
32840
32921
|
//
|
|
32841
32922
|
// Legacy at-rest findings from pre-branch scans carry finding_key = NULL —
|
|
32842
32923
|
// the resolution lifecycle is keyed by finding_key, so it can never attach a
|
|
32843
32924
|
// disposition to (or clear) one of these on re-scan. They are excluded from
|
|
32844
|
-
//
|
|
32925
|
+
// all three buckets (untracked, not "needs remediation forever"),
|
|
32845
32926
|
// but still counted in total/count below — this keeps this predicate
|
|
32846
32927
|
// consistent with SqliteResolutionsRepository.openAtRestKeysForPath, which
|
|
32847
32928
|
// already filters `finding_key IS NOT NULL`.
|
|
@@ -32864,12 +32945,25 @@ var SqliteSecurityRepository = class {
|
|
|
32864
32945
|
WHEN latest.status = 'resolved' THEN 1
|
|
32865
32946
|
ELSE 0
|
|
32866
32947
|
END) AS caught,
|
|
32948
|
+
SUM(CASE WHEN e.event_type != 'code_change' THEN 1 ELSE 0 END) AS handled,
|
|
32867
32949
|
SUM(CASE
|
|
32868
32950
|
WHEN e.event_type = 'code_change'
|
|
32869
32951
|
AND f.finding_key IS NOT NULL
|
|
32870
|
-
AND
|
|
32952
|
+
AND latest.status = 'resolved' THEN 1
|
|
32953
|
+
ELSE 0
|
|
32954
|
+
END) AS resolved,
|
|
32955
|
+
SUM(CASE
|
|
32956
|
+
WHEN e.event_type = 'code_change'
|
|
32957
|
+
AND f.finding_key IS NOT NULL
|
|
32958
|
+
AND (latest.status IS NULL
|
|
32959
|
+
OR latest.status NOT IN ('resolved', 'dismissed')) THEN 1
|
|
32960
|
+
ELSE 0
|
|
32961
|
+
END) AS open_at_rest,
|
|
32962
|
+
SUM(CASE
|
|
32963
|
+
WHEN e.event_type = 'code_change'
|
|
32964
|
+
AND latest.status = 'dismissed' THEN 1
|
|
32871
32965
|
ELSE 0
|
|
32872
|
-
END) AS
|
|
32966
|
+
END) AS dismissed
|
|
32873
32967
|
FROM inspection_findings f
|
|
32874
32968
|
JOIN audit_events e INDEXED BY idx_audit_capture_rollup ON e.id = f.audit_event_id
|
|
32875
32969
|
JOIN inspection_definitions d ON d.id = f.inspection_definition_id
|
|
@@ -32884,11 +32978,15 @@ var SqliteSecurityRepository = class {
|
|
|
32884
32978
|
severity,
|
|
32885
32979
|
count: byRow.get(severity)?.count ?? 0,
|
|
32886
32980
|
caught: byRow.get(severity)?.caught ?? 0,
|
|
32887
|
-
|
|
32981
|
+
handled: byRow.get(severity)?.handled ?? 0,
|
|
32982
|
+
resolved: byRow.get(severity)?.resolved ?? 0,
|
|
32983
|
+
openAtRest: byRow.get(severity)?.open_at_rest ?? 0,
|
|
32984
|
+
dismissed: byRow.get(severity)?.dismissed ?? 0
|
|
32888
32985
|
}));
|
|
32889
32986
|
const total = bySeverity.reduce((sum, s) => sum + s.count, 0);
|
|
32890
32987
|
const needsRemediation = bySeverity.reduce((sum, s) => sum + s.openAtRest, 0);
|
|
32891
|
-
|
|
32988
|
+
const dismissed = bySeverity.reduce((sum, s) => sum + s.dismissed, 0);
|
|
32989
|
+
return Promise.resolve({ total, needsRemediation, dismissed, bySeverity });
|
|
32892
32990
|
}
|
|
32893
32991
|
// Range is echoed but does not change the result today — coverage is a constant
|
|
32894
32992
|
// business fact (see SCAN_COVERAGE), not a measured per-window metric. Order
|
|
@@ -33205,10 +33303,10 @@ var SqliteSecurityRepository = class {
|
|
|
33205
33303
|
* machine, and the second reported "no recommendations" over live exposure.
|
|
33206
33304
|
*
|
|
33207
33305
|
* `open` mirrors `deriveFindingStatus` — at-rest, minus resolved and dismissed —
|
|
33208
|
-
* so a row's count is exactly what `?status=open&type=<rule>` returns.
|
|
33209
|
-
*
|
|
33210
|
-
*
|
|
33211
|
-
*
|
|
33306
|
+
* so a row's count is exactly what `?status=open&type=<rule>` returns. It
|
|
33307
|
+
* differs from `severitySummary`'s `openAtRest` only in including untracked
|
|
33308
|
+
* legacy rows, which that bucket leaves out; dismissed is excluded from both.
|
|
33309
|
+
* Only this one has to match a link.
|
|
33212
33310
|
*
|
|
33213
33311
|
* Aggregated in SQL: the result is O(distinct rule × category × severity), so a
|
|
33214
33312
|
* whole-store scope costs a grouped scan rather than a row per finding.
|
|
@@ -33236,6 +33334,8 @@ var SqliteSecurityRepository = class {
|
|
|
33236
33334
|
/**
|
|
33237
33335
|
* The distinct `finding_key`s behind ONE rule's {@link recommendationInputs}
|
|
33238
33336
|
* tally — what a dashboard dismissal of that row writes a disposition for.
|
|
33337
|
+
* The dismissal itself does not call this: it reads the same set through
|
|
33338
|
+
* {@link selectOpenFindingKeysForRule}, inside its own write transaction.
|
|
33239
33339
|
*
|
|
33240
33340
|
* It shares {@link OPEN_AT_REST_FINDINGS_SQL} with the count rather than
|
|
33241
33341
|
* restating the predicate, because a dismissal has to act on exactly the set
|
|
@@ -33252,16 +33352,7 @@ var SqliteSecurityRepository = class {
|
|
|
33252
33352
|
* this set SMALLER than the tally, never larger.
|
|
33253
33353
|
*/
|
|
33254
33354
|
openFindingKeysForRule(ruleId) {
|
|
33255
|
-
|
|
33256
|
-
this.db.prepare(
|
|
33257
|
-
`SELECT DISTINCT f.finding_key AS finding_key
|
|
33258
|
-
${OPEN_AT_REST_FINDINGS_SQL}
|
|
33259
|
-
AND d.rule_id = :ruleId
|
|
33260
|
-
AND f.finding_key IS NOT NULL`
|
|
33261
|
-
),
|
|
33262
|
-
{ ruleId }
|
|
33263
|
-
);
|
|
33264
|
-
return Promise.resolve(rows.map((r) => r.finding_key));
|
|
33355
|
+
return Promise.resolve(selectOpenFindingKeysForRule(this.db, ruleId));
|
|
33265
33356
|
}
|
|
33266
33357
|
// Findings whose parent event occurred in [fromMs, toMs), with the parent's
|
|
33267
33358
|
// epoch-millis timestamp. started_at is an INTEGER column, so the bounds stay
|
|
@@ -34307,6 +34398,31 @@ function openLocalDatabase(dir, options = {}) {
|
|
|
34307
34398
|
);
|
|
34308
34399
|
});
|
|
34309
34400
|
}
|
|
34401
|
+
function dismissOpenFindingsForRule(ruleId, disposition) {
|
|
34402
|
+
let dismissed = 0;
|
|
34403
|
+
withTransaction(
|
|
34404
|
+
db,
|
|
34405
|
+
() => {
|
|
34406
|
+
const keys = selectOpenFindingKeysForRule(db, ruleId);
|
|
34407
|
+
resolutions.insertResolutions(
|
|
34408
|
+
keys.map((findingKey) => ({
|
|
34409
|
+
findingKey,
|
|
34410
|
+
status: "dismissed",
|
|
34411
|
+
method: disposition.method,
|
|
34412
|
+
resolvedAt: disposition.resolvedAt,
|
|
34413
|
+
evidence: disposition.evidence
|
|
34414
|
+
}))
|
|
34415
|
+
);
|
|
34416
|
+
dismissed = keys.length;
|
|
34417
|
+
},
|
|
34418
|
+
// IMMEDIATE takes the write lock at BEGIN, before the select, which is
|
|
34419
|
+
// what keeps a concurrent resolve out of the gap. It also makes waiting
|
|
34420
|
+
// on a busy writer an ordinary busy_timeout wait rather than a
|
|
34421
|
+
// read-to-write upgrade SQLite refuses to retry.
|
|
34422
|
+
"IMMEDIATE"
|
|
34423
|
+
);
|
|
34424
|
+
return dismissed;
|
|
34425
|
+
}
|
|
34310
34426
|
function recordCapture(event, detected) {
|
|
34311
34427
|
failOpenTransaction(db, () => {
|
|
34312
34428
|
const sessionId = event.metadata?.sessionId;
|
|
@@ -34490,6 +34606,7 @@ function openLocalDatabase(dir, options = {}) {
|
|
|
34490
34606
|
inspectionDefinitions,
|
|
34491
34607
|
inspectionFindings,
|
|
34492
34608
|
recordCapture,
|
|
34609
|
+
dismissOpenFindingsForRule,
|
|
34493
34610
|
markCaptureDelivered,
|
|
34494
34611
|
markCaptureOwed,
|
|
34495
34612
|
markAuditEventsDelivered,
|
|
@@ -34575,6 +34692,9 @@ var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
|
|
|
34575
34692
|
// ../../packages/remote/src/client.ts
|
|
34576
34693
|
var SLASH2 = "/".charCodeAt(0);
|
|
34577
34694
|
|
|
34695
|
+
// ../../packages/plugin-runtime/src/attached/with-timeout.ts
|
|
34696
|
+
var REQUEST_TIMEOUT_MS = 2e3;
|
|
34697
|
+
|
|
34578
34698
|
// ../../packages/plugin-runtime/src/attached/forward-drops.ts
|
|
34579
34699
|
import { readFileSync as readFileSync10 } from "fs";
|
|
34580
34700
|
import { join as join16 } from "path";
|
|
@@ -35207,6 +35327,10 @@ function escapeRegExp2(value) {
|
|
|
35207
35327
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
35208
35328
|
}
|
|
35209
35329
|
|
|
35330
|
+
// ../../packages/detections/src/format-chars.ts
|
|
35331
|
+
var HAS_FORMAT_CHAR = new RegExp("\\p{Cf}", "u");
|
|
35332
|
+
var FORMAT_CHAR_GLOBAL = new RegExp("\\p{Cf}", "gu");
|
|
35333
|
+
|
|
35210
35334
|
// ../../packages/detections/src/regex-cache.ts
|
|
35211
35335
|
var singles = /* @__PURE__ */ new WeakMap();
|
|
35212
35336
|
var keywordLists = /* @__PURE__ */ new WeakMap();
|
|
@@ -35575,13 +35699,18 @@ import { spawn } from "child_process";
|
|
|
35575
35699
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
35576
35700
|
var HISTORY_SYNC_THROTTLE_MS = 5 * 60 * 1e3;
|
|
35577
35701
|
|
|
35702
|
+
// ../../packages/plugin-runtime/src/attached/install-record.ts
|
|
35703
|
+
import { readFile as readFile2, stat } from "fs/promises";
|
|
35704
|
+
import { basename as basename6, dirname as dirname6, join as join28, resolve as resolve2 } from "path";
|
|
35705
|
+
|
|
35578
35706
|
// ../../packages/plugin-runtime/src/attached/plugin-block.ts
|
|
35579
35707
|
import { readFileSync as readFileSync18 } from "fs";
|
|
35708
|
+
var INSTALL_RECORD_READ_TIMEOUT_MS = REQUEST_TIMEOUT_MS / 2;
|
|
35580
35709
|
|
|
35581
35710
|
// ../../packages/plugin-runtime/src/attached/policy-store.ts
|
|
35582
35711
|
import { randomUUID as randomUUID16 } from "crypto";
|
|
35583
|
-
import { readFile as
|
|
35584
|
-
import { join as
|
|
35712
|
+
import { readFile as readFile3, rm, writeFile as writeFile2 } from "fs/promises";
|
|
35713
|
+
import { join as join29 } from "path";
|
|
35585
35714
|
|
|
35586
35715
|
// ../../packages/plugin-runtime/src/attached/atomic-publish.ts
|
|
35587
35716
|
import { rename as rename2 } from "fs/promises";
|
|
@@ -35591,7 +35720,7 @@ var ATTEMPTS = 1 + IMMEDIATE_RETRIES + TIMED_RETRIES;
|
|
|
35591
35720
|
|
|
35592
35721
|
// ../../packages/plugin-runtime/src/attached/posture-report-state.ts
|
|
35593
35722
|
import { readFileSync as readFileSync19 } from "fs";
|
|
35594
|
-
import { join as
|
|
35723
|
+
import { join as join30 } from "path";
|
|
35595
35724
|
var OUTCOME_KEYS = {
|
|
35596
35725
|
ok: true,
|
|
35597
35726
|
unauthorized: true,
|
|
@@ -35613,12 +35742,12 @@ import { DatabaseSync as DatabaseSync4 } from "node:sqlite";
|
|
|
35613
35742
|
|
|
35614
35743
|
// ../../packages/plugin-runtime/src/attached/posture-store.ts
|
|
35615
35744
|
import { randomUUID as randomUUID17 } from "crypto";
|
|
35616
|
-
import { readFile as
|
|
35617
|
-
import { join as
|
|
35745
|
+
import { readFile as readFile4, rm as rm2, writeFile as writeFile3 } from "fs/promises";
|
|
35746
|
+
import { join as join31 } from "path";
|
|
35618
35747
|
|
|
35619
35748
|
// ../../packages/plugin-runtime/src/attached/sync-state.ts
|
|
35620
35749
|
import { readFileSync as readFileSync20 } from "fs";
|
|
35621
|
-
import { join as
|
|
35750
|
+
import { join as join32 } from "path";
|
|
35622
35751
|
|
|
35623
35752
|
// ../../packages/plugin-runtime/src/attached/status.ts
|
|
35624
35753
|
var REFUSAL_LINES = {
|