bilt-toolkit 1.0.0 → 1.0.2
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/bin/bilt.js +1 -1
- package/dist/cli.js +62 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +113 -52
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/fix.d.ts +1 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +211 -64
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +15 -13
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/scan.d.ts +6 -9
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +326 -206
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/undo.d.ts +3 -1
- package/dist/commands/undo.d.ts.map +1 -1
- package/dist/commands/undo.js +32 -14
- package/dist/commands/undo.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +17 -8
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +10 -0
- package/dist/config/config.js.map +1 -1
- package/dist/core/fix/confirm.d.ts +1 -1
- package/dist/core/fix/confirm.d.ts.map +1 -1
- package/dist/core/fix/confirm.js +4 -2
- package/dist/core/fix/confirm.js.map +1 -1
- package/dist/core/fix/git.d.ts +6 -0
- package/dist/core/fix/git.d.ts.map +1 -0
- package/dist/core/fix/git.js +45 -0
- package/dist/core/fix/git.js.map +1 -0
- package/dist/core/fix/snapshot.d.ts.map +1 -1
- package/dist/core/fix/snapshot.js +68 -1
- package/dist/core/fix/snapshot.js.map +1 -1
- package/dist/core/rules/providers.d.ts +2 -1
- package/dist/core/rules/providers.d.ts.map +1 -1
- package/dist/core/rules/providers.js +91 -0
- package/dist/core/rules/providers.js.map +1 -1
- package/dist/core/rules/secret-rules.d.ts.map +1 -1
- package/dist/core/rules/secret-rules.js +82 -3
- package/dist/core/rules/secret-rules.js.map +1 -1
- package/dist/core/scan/env.d.ts.map +1 -1
- package/dist/core/scan/env.js +15 -1
- package/dist/core/scan/env.js.map +1 -1
- package/dist/core/scan/secrets.d.ts.map +1 -1
- package/dist/core/scan/secrets.js +49 -4
- package/dist/core/scan/secrets.js.map +1 -1
- package/dist/core/scan/verifiers/aws.d.ts +4 -0
- package/dist/core/scan/verifiers/aws.d.ts.map +1 -0
- package/dist/core/scan/verifiers/aws.js +98 -0
- package/dist/core/scan/verifiers/aws.js.map +1 -0
- package/dist/core/scan/verifiers/github.d.ts +4 -0
- package/dist/core/scan/verifiers/github.d.ts.map +1 -0
- package/dist/core/scan/verifiers/github.js +23 -0
- package/dist/core/scan/verifiers/github.js.map +1 -0
- package/dist/core/scan/verifiers/index.d.ts +7 -0
- package/dist/core/scan/verifiers/index.d.ts.map +1 -0
- package/dist/core/scan/verifiers/index.js +15 -0
- package/dist/core/scan/verifiers/index.js.map +1 -0
- package/dist/core/scan/verifiers/openai.d.ts +4 -0
- package/dist/core/scan/verifiers/openai.d.ts.map +1 -0
- package/dist/core/scan/verifiers/openai.js +22 -0
- package/dist/core/scan/verifiers/openai.js.map +1 -0
- package/dist/core/scan/verifiers/slack.d.ts +4 -0
- package/dist/core/scan/verifiers/slack.d.ts.map +1 -0
- package/dist/core/scan/verifiers/slack.js +28 -0
- package/dist/core/scan/verifiers/slack.js.map +1 -0
- package/dist/core/scan/verifiers/stripe.d.ts +4 -0
- package/dist/core/scan/verifiers/stripe.d.ts.map +1 -0
- package/dist/core/scan/verifiers/stripe.js +22 -0
- package/dist/core/scan/verifiers/stripe.js.map +1 -0
- package/dist/core/scan/verifiers/supabase.d.ts +4 -0
- package/dist/core/scan/verifiers/supabase.d.ts.map +1 -0
- package/dist/core/scan/verifiers/supabase.js +35 -0
- package/dist/core/scan/verifiers/supabase.js.map +1 -0
- package/dist/core/score/health.d.ts.map +1 -1
- package/dist/core/score/health.js +1 -0
- package/dist/core/score/health.js.map +1 -1
- package/dist/core/watch/watcher.d.ts +4 -1
- package/dist/core/watch/watcher.d.ts.map +1 -1
- package/dist/core/watch/watcher.js +4 -2
- package/dist/core/watch/watcher.js.map +1 -1
- package/dist/types/index.d.ts +55 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/format.d.ts +22 -12
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +223 -74
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/reporter.d.ts +18 -15
- package/dist/ui/reporter.d.ts.map +1 -1
- package/dist/ui/reporter.js +142 -182
- package/dist/ui/reporter.js.map +1 -1
- package/dist/ui/sound.d.ts +6 -0
- package/dist/ui/sound.d.ts.map +1 -0
- package/dist/ui/sound.js +13 -0
- package/dist/ui/sound.js.map +1 -0
- package/dist/ui/theme.d.ts +67 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +252 -0
- package/dist/ui/theme.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const name = "github";
|
|
2
|
+
export async function verify(secret) {
|
|
3
|
+
try {
|
|
4
|
+
const res = await fetch("https://api.github.com/user", {
|
|
5
|
+
method: "GET",
|
|
6
|
+
headers: {
|
|
7
|
+
Authorization: `token ${secret}`,
|
|
8
|
+
"User-Agent": "bilt-security-scanner",
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
if (res.status === 200) {
|
|
12
|
+
return "verified-live";
|
|
13
|
+
}
|
|
14
|
+
if (res.status === 401) {
|
|
15
|
+
return "verified-dead";
|
|
16
|
+
}
|
|
17
|
+
return "unverified";
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return "unverified";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/github.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE;YACrD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,EAAE;gBAChC,YAAY,EAAE,uBAAuB;aACtC;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { VerificationState } from "../../../types/index.js";
|
|
2
|
+
export interface Verifier {
|
|
3
|
+
name: string;
|
|
4
|
+
verify: (secret: string) => Promise<VerificationState>;
|
|
5
|
+
}
|
|
6
|
+
export declare const VERIFIERS: Record<string, (secret: string) => Promise<VerificationState>>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxD;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAOpF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as stripe from "./stripe.js";
|
|
2
|
+
import * as github from "./github.js";
|
|
3
|
+
import * as aws from "./aws.js";
|
|
4
|
+
import * as supabase from "./supabase.js";
|
|
5
|
+
import * as openai from "./openai.js";
|
|
6
|
+
import * as slack from "./slack.js";
|
|
7
|
+
export const VERIFIERS = {
|
|
8
|
+
stripe: stripe.verify,
|
|
9
|
+
github: github.verify,
|
|
10
|
+
aws: aws.verify,
|
|
11
|
+
supabase: supabase.verify,
|
|
12
|
+
openai: openai.verify,
|
|
13
|
+
slack: slack.verify,
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAQpC,MAAM,CAAC,MAAM,SAAS,GAAmE;IACvF,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,GAAG,EAAE,GAAG,CAAC,MAAM;IACf,QAAQ,EAAE,QAAQ,CAAC,MAAM;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC,MAAM;CACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,eAAO,MAAM,IAAI,WAAW,CAAC;AAE7B,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBvE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const name = "openai";
|
|
2
|
+
export async function verify(secret) {
|
|
3
|
+
try {
|
|
4
|
+
const res = await fetch("https://api.openai.com/v1/models", {
|
|
5
|
+
method: "GET",
|
|
6
|
+
headers: {
|
|
7
|
+
Authorization: `Bearer ${secret}`,
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
if (res.status === 200) {
|
|
11
|
+
return "verified-live";
|
|
12
|
+
}
|
|
13
|
+
if (res.status === 401) {
|
|
14
|
+
return "verified-dead";
|
|
15
|
+
}
|
|
16
|
+
return "unverified";
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return "unverified";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/openai.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,kCAAkC,EAAE;YAC1D,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,eAAO,MAAM,IAAI,UAAU,CAAC;AAE5B,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyBvE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const name = "slack";
|
|
2
|
+
export async function verify(secret) {
|
|
3
|
+
try {
|
|
4
|
+
if (secret.includes("hooks.slack.com")) {
|
|
5
|
+
return "unverified";
|
|
6
|
+
}
|
|
7
|
+
const res = await fetch("https://slack.com/api/auth.test", {
|
|
8
|
+
method: "POST",
|
|
9
|
+
headers: {
|
|
10
|
+
Authorization: `Bearer ${secret}`,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
if (res.status === 200) {
|
|
14
|
+
const data = (await res.json());
|
|
15
|
+
if (data.ok) {
|
|
16
|
+
return "verified-live";
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return "verified-dead";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return "unverified";
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return "unverified";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/slack.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc;IACzC,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iCAAiC,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoB,CAAC;YACnD,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,OAAO,eAAe,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,eAAe,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,eAAO,MAAM,IAAI,WAAW,CAAC;AAE7B,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBvE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const name = "stripe";
|
|
2
|
+
export async function verify(secret) {
|
|
3
|
+
try {
|
|
4
|
+
const res = await fetch("https://api.stripe.com/v1/balance", {
|
|
5
|
+
method: "GET",
|
|
6
|
+
headers: {
|
|
7
|
+
Authorization: `Basic ${Buffer.from(secret + ":").toString("base64")}`,
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
if (res.status === 200) {
|
|
11
|
+
return "verified-live";
|
|
12
|
+
}
|
|
13
|
+
if (res.status === 401) {
|
|
14
|
+
return "verified-dead";
|
|
15
|
+
}
|
|
16
|
+
return "unverified";
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return "unverified";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=stripe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/stripe.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mCAAmC,EAAE;YAC3D,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aACvE;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,eAAO,MAAM,IAAI,aAAa,CAAC;AAE/B,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkCvE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const name = "supabase";
|
|
2
|
+
export async function verify(secret) {
|
|
3
|
+
try {
|
|
4
|
+
const parts = secret.split(".");
|
|
5
|
+
if (parts.length !== 3)
|
|
6
|
+
return "unverified";
|
|
7
|
+
const payloadRaw = Buffer.from(parts[1], "base64").toString("utf-8");
|
|
8
|
+
const payload = JSON.parse(payloadRaw);
|
|
9
|
+
const iss = payload.iss;
|
|
10
|
+
if (!iss || typeof iss !== "string")
|
|
11
|
+
return "unverified";
|
|
12
|
+
const match = iss.match(/^(https:\/\/[a-z0-9-]+\.supabase\.co)/);
|
|
13
|
+
if (!match?.[1])
|
|
14
|
+
return "unverified";
|
|
15
|
+
const baseUrl = match[1];
|
|
16
|
+
const res = await fetch(`${baseUrl}/rest/v1/`, {
|
|
17
|
+
method: "GET",
|
|
18
|
+
headers: {
|
|
19
|
+
apikey: secret,
|
|
20
|
+
Authorization: `Bearer ${secret}`,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
if (res.status === 200) {
|
|
24
|
+
return "verified-live";
|
|
25
|
+
}
|
|
26
|
+
if (res.status === 401 || res.status === 403) {
|
|
27
|
+
return "verified-dead";
|
|
28
|
+
}
|
|
29
|
+
return "unverified";
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return "unverified";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=supabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../../../src/core/scan/verifiers/supabase.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc;IACzC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAE5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;QAEzD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAErC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE;YAC7C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,MAAM;gBACd,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/core/score/health.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/core/score/health.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,sBAAsB,CAAC;AA8B9B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,YAAY,CAwC1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/core/score/health.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,wEAAwE;AACxE,gEAAgE;AAChE,gFAAgF;AAQhF,gFAAgF;AAEhF,MAAM,aAAa,GAA6B;IAC9C,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/core/score/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,10 @@ export interface WatcherHandle {
|
|
|
19
19
|
* @param onEvent Callback invoked with watch events.
|
|
20
20
|
* @returns A handle with a `close()` method to stop watching.
|
|
21
21
|
*/
|
|
22
|
-
export declare function startWatcher(projectDir: string, config: BiltConfig, onEvent: (event: WatchEvent) => void
|
|
22
|
+
export declare function startWatcher(projectDir: string, config: BiltConfig, onEvent: (event: WatchEvent) => void, options?: {
|
|
23
|
+
debounce?: number;
|
|
24
|
+
poll?: boolean;
|
|
25
|
+
}): WatcherHandle;
|
|
23
26
|
/**
|
|
24
27
|
* Stop a running watcher.
|
|
25
28
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/core/watch/watcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAe,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIhF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAyFD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/core/watch/watcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAe,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIhF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAyFD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,aAAa,CAsFf;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE"}
|
|
@@ -101,7 +101,7 @@ function debounce(fn, delayMs) {
|
|
|
101
101
|
* @param onEvent Callback invoked with watch events.
|
|
102
102
|
* @returns A handle with a `close()` method to stop watching.
|
|
103
103
|
*/
|
|
104
|
-
export function startWatcher(projectDir, config, onEvent) {
|
|
104
|
+
export function startWatcher(projectDir, config, onEvent, options = {}) {
|
|
105
105
|
// Merge user-configured ignore patterns with defaults
|
|
106
106
|
const ignorePatterns = [...IGNORED_PATTERNS, ...config.ignore];
|
|
107
107
|
// Combine built-in rules with custom rules
|
|
@@ -110,6 +110,7 @@ export function startWatcher(projectDir, config, onEvent) {
|
|
|
110
110
|
ignored: ignorePatterns,
|
|
111
111
|
persistent: true,
|
|
112
112
|
ignoreInitial: true,
|
|
113
|
+
usePolling: options.poll || undefined,
|
|
113
114
|
awaitWriteFinish: {
|
|
114
115
|
stabilityThreshold: 200,
|
|
115
116
|
pollInterval: 100,
|
|
@@ -140,9 +141,10 @@ export function startWatcher(projectDir, config, onEvent) {
|
|
|
140
141
|
onEvent(event);
|
|
141
142
|
};
|
|
142
143
|
// Create debounced handler
|
|
144
|
+
const debounceMs = options.debounce ?? DEFAULT_DEBOUNCE_MS;
|
|
143
145
|
const debouncedProcess = debounce((eventType, filePath) => {
|
|
144
146
|
void processFile(eventType, filePath);
|
|
145
|
-
},
|
|
147
|
+
}, debounceMs);
|
|
146
148
|
// Attach event handlers
|
|
147
149
|
watcher.on("add", (filePath) => {
|
|
148
150
|
debouncedProcess("add", filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/core/watch/watcher.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,uCAAuC;AACvC,gFAAgF;AAEhF,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASxD,gFAAgF;AAEhF,iDAAiD;AACjD,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,sDAAsD;AACtD,MAAM,gBAAgB,GAAG;IACvB,oBAAoB;IACpB,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,mBAAmB;CACpB,CAAC;AAEF,sCAAsC;AACtC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH,gFAAgF;AAEhF;;GAEG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CACf,EAAK,EACL,OAAe;IAEf,IAAI,KAAK,GAAyC,IAAI,CAAC;IAEvD,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,IAAI,KAAK,KAAK,IAAI;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,MAAkB,EAClB,OAAoC;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/core/watch/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
export type Severity = "critical" | "warning" | "info";
|
|
1
|
+
export type Severity = "critical" | "warning" | "info" | "passed";
|
|
2
2
|
export type FindingCategory = "secret-detected" | "env-missing" | "env-unused" | "env-mismatch" | "env-exposed" | "gitignore-missing" | "framework-warning" | "plugin-finding";
|
|
3
|
+
export type VerificationState = "verified-live" | "verified-dead" | "unverified";
|
|
4
|
+
export type ConfidenceBucket = "low" | "medium" | "high";
|
|
5
|
+
export interface ProviderKnowledge {
|
|
6
|
+
provider: string;
|
|
7
|
+
type: string;
|
|
8
|
+
whatItIs: string;
|
|
9
|
+
why: string;
|
|
10
|
+
safeAsPublic: boolean;
|
|
11
|
+
action: string;
|
|
12
|
+
docsUrl: string;
|
|
13
|
+
}
|
|
3
14
|
export interface ScanFinding {
|
|
4
15
|
id: string;
|
|
5
16
|
severity: Severity;
|
|
@@ -13,6 +24,14 @@ export interface ScanFinding {
|
|
|
13
24
|
ruleId?: string;
|
|
14
25
|
/** Masked preview of the detected value */
|
|
15
26
|
preview?: string;
|
|
27
|
+
/** Liveness verification state of a detected credential */
|
|
28
|
+
verificationState?: VerificationState;
|
|
29
|
+
/** Raw secret value (removed before serializing to user-facing results) */
|
|
30
|
+
secret?: string;
|
|
31
|
+
/** Context-aware confidence level */
|
|
32
|
+
confidence?: ConfidenceBucket;
|
|
33
|
+
/** The 5-question provider knowledge block */
|
|
34
|
+
knowledge?: ProviderKnowledge;
|
|
16
35
|
}
|
|
17
36
|
export interface ScanResult {
|
|
18
37
|
findings: ScanFinding[];
|
|
@@ -39,15 +58,39 @@ export interface ProviderInfo {
|
|
|
39
58
|
docsUrl: string;
|
|
40
59
|
}
|
|
41
60
|
export type FixType = "safe" | "destructive" | "irreversible";
|
|
61
|
+
export type FixRisk = "Low" | "High" | "Critical";
|
|
62
|
+
export interface FixPlan {
|
|
63
|
+
steps: string[];
|
|
64
|
+
estimatedTime: string;
|
|
65
|
+
risk: FixRisk;
|
|
66
|
+
requiresConfirmation?: string;
|
|
67
|
+
instructions?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface FixResult {
|
|
70
|
+
success: boolean;
|
|
71
|
+
stepsApplied: string[];
|
|
72
|
+
error?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface VerificationResult {
|
|
75
|
+
passed: boolean;
|
|
76
|
+
message: string;
|
|
77
|
+
}
|
|
78
|
+
export interface Fix {
|
|
79
|
+
id: string;
|
|
80
|
+
type: FixType;
|
|
81
|
+
findingId: string;
|
|
82
|
+
description: string;
|
|
83
|
+
preview(): Promise<FixPlan>;
|
|
84
|
+
apply(): Promise<FixResult>;
|
|
85
|
+
verify(): Promise<VerificationResult>;
|
|
86
|
+
undo(): Promise<void>;
|
|
87
|
+
}
|
|
42
88
|
export interface FixAction {
|
|
43
89
|
id: string;
|
|
44
90
|
description: string;
|
|
45
91
|
type: FixType;
|
|
46
|
-
/** The finding this fix addresses */
|
|
47
92
|
findingId: string;
|
|
48
|
-
/** Preview of what the fix will do */
|
|
49
93
|
preview?: string;
|
|
50
|
-
/** Function to apply the fix — returns true if successful */
|
|
51
94
|
apply: () => Promise<boolean>;
|
|
52
95
|
}
|
|
53
96
|
export interface SnapshotFile {
|
|
@@ -81,6 +124,8 @@ export interface BiltConfig {
|
|
|
81
124
|
customRules: SecretRule[];
|
|
82
125
|
/** Enable fun mode */
|
|
83
126
|
funMode: boolean;
|
|
127
|
+
/** Play subtle terminal sound on critical findings */
|
|
128
|
+
sound?: boolean;
|
|
84
129
|
}
|
|
85
130
|
export interface FrameworkInfo {
|
|
86
131
|
name: string;
|
|
@@ -144,15 +189,21 @@ export interface ScanOptions {
|
|
|
144
189
|
quiet?: boolean;
|
|
145
190
|
dryRun?: boolean;
|
|
146
191
|
fun?: boolean;
|
|
192
|
+
details?: boolean;
|
|
193
|
+
noVerify?: boolean;
|
|
194
|
+
debug?: boolean;
|
|
195
|
+
retainSecrets?: boolean;
|
|
147
196
|
}
|
|
148
197
|
export interface FixOptions {
|
|
149
198
|
safe?: boolean;
|
|
150
199
|
dryRun?: boolean;
|
|
151
200
|
verbose?: boolean;
|
|
152
201
|
quiet?: boolean;
|
|
202
|
+
debug?: boolean;
|
|
153
203
|
}
|
|
154
204
|
export interface WatchOptions {
|
|
155
205
|
quiet?: boolean;
|
|
156
206
|
debounce?: number;
|
|
207
|
+
poll?: boolean;
|
|
157
208
|
}
|
|
158
209
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/format.d.ts
CHANGED
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
import type { ScanFinding, Severity, ProviderInfo } from "../types/index.js";
|
|
2
2
|
/**
|
|
3
|
-
* Return the
|
|
3
|
+
* Return the themed glyph for a severity level.
|
|
4
|
+
*
|
|
5
|
+
* - critical → ✖ (Pulse Coral)
|
|
6
|
+
* - warning → ▲ (Amber Flag)
|
|
7
|
+
* - info → ◆ (Slate Dim)
|
|
4
8
|
*/
|
|
5
9
|
export declare function severityIcon(severity: Severity): string;
|
|
6
10
|
/**
|
|
7
|
-
* Return the
|
|
11
|
+
* Return the theme color function for a severity level.
|
|
12
|
+
*/
|
|
13
|
+
export declare function severityColorFn(severity: Severity): (text: string) => string;
|
|
14
|
+
/**
|
|
15
|
+
* Compatibility wrapper returning a styling function.
|
|
8
16
|
*/
|
|
9
17
|
export declare function severityColor(severity: Severity): (text: string) => string;
|
|
10
18
|
/**
|
|
11
|
-
* Format a single finding
|
|
12
|
-
* colored message, and file:line reference.
|
|
13
|
-
*
|
|
14
|
-
* Example: 🔴 AWS access key detected config.js:12
|
|
19
|
+
* Format a single finding in either headline or detail mode.
|
|
15
20
|
*/
|
|
16
|
-
export declare function formatFinding(finding: ScanFinding): string;
|
|
21
|
+
export declare function formatFinding(finding: ScanFinding, mode?: "headline" | "detail"): string;
|
|
17
22
|
/**
|
|
18
|
-
* Format a health score
|
|
23
|
+
* Format a health score using the Pulse Bar.
|
|
24
|
+
*
|
|
25
|
+
* Example: Health ████████████████████░░░ 92/100
|
|
19
26
|
*
|
|
20
|
-
*
|
|
27
|
+
* Score-color mapping:
|
|
28
|
+
* 0-39 Pulse Coral
|
|
29
|
+
* 40-74 Amber Flag
|
|
30
|
+
* 75-100 Mint Clear
|
|
21
31
|
*/
|
|
22
|
-
export declare function formatHealthScore(score: number
|
|
32
|
+
export declare function formatHealthScore(score: number): string;
|
|
23
33
|
/**
|
|
24
34
|
* Format a provider name with a clickable rotation URL as a terminal hyperlink.
|
|
25
35
|
*
|
|
@@ -35,8 +45,8 @@ export declare function formatProviderLink(provider: ProviderInfo): string;
|
|
|
35
45
|
export declare function maskSecret(value: string): string;
|
|
36
46
|
/**
|
|
37
47
|
* Simple colored diff between two strings.
|
|
38
|
-
* Lines prefixed with - are colored
|
|
39
|
-
* Lines prefixed with + are colored
|
|
48
|
+
* Lines prefixed with - are colored Pulse Coral (removed).
|
|
49
|
+
* Lines prefixed with + are colored Mint Clear (added).
|
|
40
50
|
* Context lines are dimmed.
|
|
41
51
|
*/
|
|
42
52
|
export declare function formatDiff(before: string, after: string): string;
|
package/dist/ui/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAI7E;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,GACjB,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAE1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAE1E;AAyJD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE,UAAU,GAAG,QAAqB,GACvC,MAAM,CAqCR;AAID;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBvD;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAIjE;AAID;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAehD;AAID;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA6ChE"}
|