@integsec/agentic-pentest-proxy 0.2.5 → 0.2.6
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/LICENSE +201 -0
- package/README.md +250 -54
- package/dist/bin/integsec-agentic-pentest-manifest.d.ts +3 -0
- package/dist/bin/integsec-agentic-pentest-manifest.d.ts.map +1 -0
- package/dist/bin/integsec-agentic-pentest-manifest.js +180 -0
- package/dist/bin/integsec-agentic-pentest-manifest.js.map +1 -0
- package/dist/bin/integsec-agentic-pentest-proxy.d.ts +1 -1
- package/dist/bin/integsec-agentic-pentest-proxy.d.ts.map +1 -1
- package/dist/bin/integsec-agentic-pentest-proxy.js +8 -4
- package/dist/bin/integsec-agentic-pentest-proxy.js.map +1 -1
- package/dist/src/audit/azure-monitor.d.ts +2 -2
- package/dist/src/audit/azure-monitor.d.ts.map +1 -1
- package/dist/src/audit/azure-monitor.js +8 -5
- package/dist/src/audit/azure-monitor.js.map +1 -1
- package/dist/src/audit/cloudwatch.d.ts.map +1 -1
- package/dist/src/audit/cloudwatch.js.map +1 -1
- package/dist/src/audit/gcp-logging.d.ts.map +1 -1
- package/dist/src/audit/gcp-logging.js +4 -6
- package/dist/src/audit/gcp-logging.js.map +1 -1
- package/dist/src/audit/index.d.ts +7 -0
- package/dist/src/audit/index.d.ts.map +1 -1
- package/dist/src/audit/index.js +11 -1
- package/dist/src/audit/index.js.map +1 -1
- package/dist/src/audit/local.d.ts.map +1 -1
- package/dist/src/audit/local.js +2 -1
- package/dist/src/audit/local.js.map +1 -1
- package/dist/src/builder/dry-run.d.ts +12 -0
- package/dist/src/builder/dry-run.d.ts.map +1 -0
- package/dist/src/builder/dry-run.js +103 -0
- package/dist/src/builder/dry-run.js.map +1 -0
- package/dist/src/builder/manifest-writer.d.ts +7 -0
- package/dist/src/builder/manifest-writer.d.ts.map +1 -0
- package/dist/src/builder/manifest-writer.js +17 -0
- package/dist/src/builder/manifest-writer.js.map +1 -0
- package/dist/src/builder/review-display.d.ts +10 -0
- package/dist/src/builder/review-display.d.ts.map +1 -0
- package/dist/src/builder/review-display.js +55 -0
- package/dist/src/builder/review-display.js.map +1 -0
- package/dist/src/builder/smart-validator.d.ts +39 -0
- package/dist/src/builder/smart-validator.d.ts.map +1 -0
- package/dist/src/builder/smart-validator.js +157 -0
- package/dist/src/builder/smart-validator.js.map +1 -0
- package/dist/src/builder/steps/domains.d.ts +10 -0
- package/dist/src/builder/steps/domains.d.ts.map +1 -0
- package/dist/src/builder/steps/domains.js +71 -0
- package/dist/src/builder/steps/domains.js.map +1 -0
- package/dist/src/builder/steps/engagement-info.d.ts +17 -0
- package/dist/src/builder/steps/engagement-info.d.ts.map +1 -0
- package/dist/src/builder/steps/engagement-info.js +49 -0
- package/dist/src/builder/steps/engagement-info.js.map +1 -0
- package/dist/src/builder/steps/engagement-window.d.ts +15 -0
- package/dist/src/builder/steps/engagement-window.d.ts.map +1 -0
- package/dist/src/builder/steps/engagement-window.js +57 -0
- package/dist/src/builder/steps/engagement-window.js.map +1 -0
- package/dist/src/builder/steps/exclusions.d.ts +13 -0
- package/dist/src/builder/steps/exclusions.d.ts.map +1 -0
- package/dist/src/builder/steps/exclusions.js +57 -0
- package/dist/src/builder/steps/exclusions.js.map +1 -0
- package/dist/src/builder/steps/ip-ranges.d.ts +10 -0
- package/dist/src/builder/steps/ip-ranges.d.ts.map +1 -0
- package/dist/src/builder/steps/ip-ranges.js +64 -0
- package/dist/src/builder/steps/ip-ranges.js.map +1 -0
- package/dist/src/builder/steps/review.d.ts +10 -0
- package/dist/src/builder/steps/review.d.ts.map +1 -0
- package/dist/src/builder/steps/review.js +29 -0
- package/dist/src/builder/steps/review.js.map +1 -0
- package/dist/src/builder/steps/techniques.d.ts +13 -0
- package/dist/src/builder/steps/techniques.d.ts.map +1 -0
- package/dist/src/builder/steps/techniques.js +68 -0
- package/dist/src/builder/steps/techniques.js.map +1 -0
- package/dist/src/builder/steps/urls-and-cloud.d.ts +15 -0
- package/dist/src/builder/steps/urls-and-cloud.d.ts.map +1 -0
- package/dist/src/builder/steps/urls-and-cloud.js +53 -0
- package/dist/src/builder/steps/urls-and-cloud.js.map +1 -0
- package/dist/src/builder/web/api.d.ts +9 -0
- package/dist/src/builder/web/api.d.ts.map +1 -0
- package/dist/src/builder/web/api.js +40 -0
- package/dist/src/builder/web/api.js.map +1 -0
- package/dist/src/builder/web/client-form.html +222 -0
- package/dist/src/builder/web/server.d.ts +14 -0
- package/dist/src/builder/web/server.d.ts.map +1 -0
- package/dist/src/builder/web/server.js +85 -0
- package/dist/src/builder/web/server.js.map +1 -0
- package/dist/src/builder/wizard.d.ts +9 -0
- package/dist/src/builder/wizard.d.ts.map +1 -0
- package/dist/src/builder/wizard.js +49 -0
- package/dist/src/builder/wizard.js.map +1 -0
- package/dist/src/config.d.ts +11 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +15 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/dns-resolver.d.ts +10 -1
- package/dist/src/dns-resolver.d.ts.map +1 -1
- package/dist/src/dns-resolver.js +41 -3
- package/dist/src/dns-resolver.js.map +1 -1
- package/dist/src/extractor.d.ts +12 -0
- package/dist/src/extractor.d.ts.map +1 -1
- package/dist/src/extractor.js +386 -0
- package/dist/src/extractor.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/ip-matcher.d.ts +23 -0
- package/dist/src/ip-matcher.d.ts.map +1 -1
- package/dist/src/ip-matcher.js +96 -23
- package/dist/src/ip-matcher.js.map +1 -1
- package/dist/src/manifest-schema.d.ts +12 -62
- package/dist/src/manifest-schema.d.ts.map +1 -1
- package/dist/src/manifest.d.ts +6 -0
- package/dist/src/manifest.d.ts.map +1 -1
- package/dist/src/manifest.js +21 -6
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/proxy.d.ts +19 -4
- package/dist/src/proxy.d.ts.map +1 -1
- package/dist/src/proxy.js +111 -33
- package/dist/src/proxy.js.map +1 -1
- package/dist/src/safe-filename.d.ts +3 -0
- package/dist/src/safe-filename.d.ts.map +1 -0
- package/dist/src/safe-filename.js +8 -0
- package/dist/src/safe-filename.js.map +1 -0
- package/dist/src/sanitizer.d.ts.map +1 -1
- package/dist/src/sanitizer.js +36 -10
- package/dist/src/sanitizer.js.map +1 -1
- package/dist/src/technique-checker.d.ts +14 -0
- package/dist/src/technique-checker.d.ts.map +1 -1
- package/dist/src/technique-checker.js +123 -2
- package/dist/src/technique-checker.js.map +1 -1
- package/dist/src/transports/http.d.ts +6 -2
- package/dist/src/transports/http.d.ts.map +1 -1
- package/dist/src/transports/http.js +101 -13
- package/dist/src/transports/http.js.map +1 -1
- package/dist/src/transports/sse.d.ts +1 -1
- package/dist/src/transports/sse.d.ts.map +1 -1
- package/dist/src/transports/sse.js +28 -18
- package/dist/src/transports/sse.js.map +1 -1
- package/dist/src/transports/stdio.d.ts +2 -2
- package/dist/src/transports/stdio.d.ts.map +1 -1
- package/dist/src/transports/stdio.js +77 -48
- package/dist/src/transports/stdio.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/validator.d.ts +19 -28
- package/dist/src/validator.d.ts.map +1 -1
- package/dist/src/validator.js +315 -113
- package/dist/src/validator.js.map +1 -1
- package/examples/claude-desktop-burp-config.json +6 -6
- package/package.json +21 -11
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { checkOrphanedExclusion } from "../smart-validator.js";
|
|
5
|
+
const SUGGESTED_EXCLUSIONS = [
|
|
6
|
+
{ target: "169.254.169.254", reason: "AWS/Azure/GCP metadata endpoint" },
|
|
7
|
+
{ target: "127.0.0.1", reason: "localhost" },
|
|
8
|
+
];
|
|
9
|
+
export function ExclusionsStep({ initial, authorized, onComplete, onBack }) {
|
|
10
|
+
const [excluded, setExcluded] = useState(initial ?? []);
|
|
11
|
+
const [input, setInput] = useState("");
|
|
12
|
+
const [messages, setMessages] = useState([]);
|
|
13
|
+
const [showSuggestions, setShowSuggestions] = useState(true);
|
|
14
|
+
useInput((ch, key) => {
|
|
15
|
+
if (key.escape) {
|
|
16
|
+
if (input === "" && onBack) {
|
|
17
|
+
onBack();
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
setInput("");
|
|
21
|
+
setMessages([]);
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (ch === "d" && key.ctrl) {
|
|
26
|
+
onComplete(excluded);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (key.return) {
|
|
30
|
+
if (input.trim() === "") {
|
|
31
|
+
onComplete(excluded);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const items = input.split(",").map((s) => s.trim()).filter(Boolean);
|
|
35
|
+
const allMsgs = [];
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
allMsgs.push(...checkOrphanedExclusion(item, authorized));
|
|
38
|
+
}
|
|
39
|
+
setExcluded((prev) => [...prev, ...items]);
|
|
40
|
+
setMessages(allMsgs);
|
|
41
|
+
setInput("");
|
|
42
|
+
setShowSuggestions(false);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (key.backspace || key.delete) {
|
|
46
|
+
setInput((prev) => prev.slice(0, -1));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (ch && !key.ctrl && !key.meta) {
|
|
50
|
+
setInput((prev) => prev + ch);
|
|
51
|
+
setShowSuggestions(false);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const activeSuggestions = SUGGESTED_EXCLUSIONS.filter((s) => !excluded.includes(s.target));
|
|
55
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Step 6: Excluded Targets" }), _jsx(Text, { dimColor: true, children: "Targets that are in scope but must NOT be tested. Empty enter or Ctrl+D when done." }), _jsx(Box, { marginTop: 1 }), showSuggestions && activeSuggestions.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Suggested exclusions:" }), activeSuggestions.map((s, i) => (_jsxs(Text, { dimColor: true, children: [" \u2022 ", s.target, " (", s.reason, ")"] }, i)))] })), excluded.map((e, i) => (_jsxs(Text, { color: "red", children: [" \u2717 ", e] }, i))), _jsxs(Box, { children: [_jsx(Text, { children: "\u203A " }), _jsxs(Text, { children: [input, _jsx(Text, { dimColor: true, children: "\u2502" })] })] }), messages.map((msg, i) => (_jsx(Box, { marginTop: i === 0 ? 1 : 0, children: _jsxs(Text, { color: msg.level === "warning" ? "yellow" : "blue", children: [msg.level === "warning" ? "⚠" : "ℹ", " ", msg.message] }) }, i))), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: [excluded.length, " exclusion(s) added"] }) })] }));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=exclusions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exclusions.js","sourceRoot":"","sources":["../../../../src/builder/steps/exclusions.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAA0B,MAAM,uBAAuB,CAAC;AASvF,MAAM,oBAAoB,GAAG;IAC3B,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,iCAAiC,EAAE;IACxE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE;CAC7C,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAS;IAC/E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,OAAO,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7D,QAAQ,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC;YAAC,CAAC;iBAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpE,MAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAAC,CAAC;YACxF,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YAC3C,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACnF,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3F,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,yCAAgC,EACvD,KAAC,IAAI,IAAC,QAAQ,yGAA0F,EACxG,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,GAAI,EACpB,eAAe,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAClD,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,QAAQ,4CAA6B,EAC1C,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAC,IAAI,IAAS,QAAQ,gCAAM,CAAC,CAAC,MAAM,QAAI,CAAC,CAAC,MAAM,UAArC,CAAC,CAA6C,CAAC,CAAC,IACzF,CACP,EACA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAC,IAAI,IAAS,KAAK,EAAC,KAAK,0BAAM,CAAC,KAArB,CAAC,CAA4B,CAAC,CAAC,EACnE,MAAC,GAAG,eAAC,KAAC,IAAI,0BAAU,EAAA,MAAC,IAAI,eAAE,KAAK,EAAC,KAAC,IAAI,IAAC,QAAQ,6BAAS,IAAO,IAAM,EACpE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,KAAC,GAAG,IAAS,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YACrC,MAAC,IAAI,IAAC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,aACrD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAG,GAAG,CAAC,OAAO,IAC7C,IAHC,CAAC,CAIL,CACP,CAAC,EACF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAAE,MAAC,IAAI,IAAC,QAAQ,mBAAE,QAAQ,CAAC,MAAM,2BAA2B,GAAM,IAC/E,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
initial?: string[];
|
|
4
|
+
resolvedDomainIps?: string[];
|
|
5
|
+
onComplete: (ranges: string[]) => void;
|
|
6
|
+
onBack?: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function IpRangesStep({ initial, resolvedDomainIps, onComplete, onBack }: Props): React.ReactElement;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ip-ranges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-ranges.d.ts","sourceRoot":"","sources":["../../../../src/builder/steps/ip-ranges.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CAoD1G"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { validateCidr, checkOverlap } from "../smart-validator.js";
|
|
5
|
+
export function IpRangesStep({ initial, resolvedDomainIps, onComplete, onBack }) {
|
|
6
|
+
const [ranges, setRanges] = useState(initial ?? []);
|
|
7
|
+
const [input, setInput] = useState("");
|
|
8
|
+
const [messages, setMessages] = useState([]);
|
|
9
|
+
useInput((ch, key) => {
|
|
10
|
+
if (key.escape) {
|
|
11
|
+
if (input === "" && onBack) {
|
|
12
|
+
onBack();
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
setInput("");
|
|
16
|
+
setMessages([]);
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (ch === "d" && key.ctrl) {
|
|
21
|
+
onComplete(ranges);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (key.return) {
|
|
25
|
+
if (input.trim() === "") {
|
|
26
|
+
onComplete(ranges);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const newRanges = input.split(",").map((r) => r.trim()).filter(Boolean);
|
|
30
|
+
const allMsgs = [];
|
|
31
|
+
const validRanges = [];
|
|
32
|
+
for (const range of newRanges) {
|
|
33
|
+
const cidrMsgs = validateCidr(range);
|
|
34
|
+
if (cidrMsgs.some((m) => m.level === "error")) {
|
|
35
|
+
allMsgs.push(...cidrMsgs);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
validRanges.push(range);
|
|
39
|
+
allMsgs.push(...cidrMsgs);
|
|
40
|
+
if (resolvedDomainIps) {
|
|
41
|
+
allMsgs.push(...checkOverlap(resolvedDomainIps, [range]));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (allMsgs.some((m) => m.level === "error")) {
|
|
46
|
+
setMessages(allMsgs);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
setRanges((prev) => [...prev, ...validRanges]);
|
|
50
|
+
setMessages(allMsgs);
|
|
51
|
+
setInput("");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (key.backspace || key.delete) {
|
|
55
|
+
setInput((prev) => prev.slice(0, -1));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (ch && !key.ctrl && !key.meta) {
|
|
59
|
+
setInput((prev) => prev + ch);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Step 4: Authorized IP Ranges" }), _jsx(Text, { dimColor: true, children: "Enter CIDR ranges (e.g. 10.10.10.0/24). Empty enter or Ctrl+D when done. Esc to go back." }), _jsx(Box, { marginTop: 1 }), ranges.map((r, i) => (_jsxs(Text, { color: "green", children: [" \u2713 ", r] }, i))), _jsxs(Box, { children: [_jsx(Text, { children: "\u203A " }), _jsxs(Text, { children: [input, _jsx(Text, { dimColor: true, children: "\u2502" })] })] }), messages.map((msg, i) => (_jsx(Box, { marginTop: i === 0 ? 1 : 0, children: _jsxs(Text, { color: msg.level === "error" ? "red" : msg.level === "warning" ? "yellow" : "blue", children: [msg.level === "error" ? "✗" : msg.level === "warning" ? "⚠" : "ℹ", " ", msg.message] }) }, i))), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: [ranges.length, " range(s) added"] }) })] }));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=ip-ranges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-ranges.js","sourceRoot":"","sources":["../../../../src/builder/steps/ip-ranges.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ScopeManifest } from "../../types.js";
|
|
3
|
+
interface Props {
|
|
4
|
+
manifest: ScopeManifest;
|
|
5
|
+
onConfirm: () => void;
|
|
6
|
+
onBack?: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function ReviewStep({ manifest, onConfirm, onBack }: Props): React.ReactElement;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../../src/builder/steps/review.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,UAAU,KAAK;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CAkErF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import Spinner from "ink-spinner";
|
|
5
|
+
import { runDryRun } from "../dry-run.js";
|
|
6
|
+
export function ReviewStep({ manifest, onConfirm, onBack }) {
|
|
7
|
+
const [dryRunResults, setDryRunResults] = useState(null);
|
|
8
|
+
const [dryRunError, setDryRunError] = useState(null);
|
|
9
|
+
const [confirmed, setConfirmed] = useState(false);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
runDryRun(manifest)
|
|
12
|
+
.then(setDryRunResults)
|
|
13
|
+
.catch((err) => setDryRunError(err.message));
|
|
14
|
+
}, []);
|
|
15
|
+
useInput((ch, key) => {
|
|
16
|
+
if (key.escape && onBack) {
|
|
17
|
+
onBack();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (key.return && dryRunResults !== null) {
|
|
21
|
+
setConfirmed(true);
|
|
22
|
+
onConfirm();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
const { authorized_targets: at, excluded_targets: et } = manifest;
|
|
27
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Step 8: Review & Dry-Run" }), _jsx(Box, { marginTop: 1 }), _jsx(Text, { bold: true, children: "Engagement:" }), _jsxs(Text, { children: [" ID: ", manifest.engagement_id] }), _jsxs(Text, { children: [" Client: ", manifest.client] }), _jsxs(Text, { children: [" Operator: ", manifest.operator] }), _jsxs(Text, { children: [" Window: ", manifest.engagement_window.start, " \u2192 ", manifest.engagement_window.end] }), _jsx(Box, { marginTop: 1 }), _jsx(Text, { bold: true, children: "Authorized Targets:" }), _jsxs(Text, { children: [" Domains (", at.domains.length, "): ", at.domains.join(", ") || "none"] }), _jsxs(Text, { children: [" IP Ranges (", at.ip_ranges.length, "): ", at.ip_ranges.join(", ") || "none"] }), _jsxs(Text, { children: [" URLs (", at.urls.length, "): ", at.urls.join(", ") || "none"] }), _jsxs(Text, { children: [" Cloud (", at.cloud_accounts.length, "): ", at.cloud_accounts.join(", ") || "none"] }), _jsx(Box, { marginTop: 1 }), _jsxs(Text, { bold: true, children: ["Exclusions (", et.length, "):"] }), et.length > 0 ? et.map((e, i) => _jsxs(Text, { color: "red", children: [" \u2717 ", e] }, i)) : _jsx(Text, { dimColor: true, children: " none" }), _jsx(Box, { marginTop: 1 }), _jsx(Text, { bold: true, children: "Techniques:" }), _jsxs(Text, { color: "green", children: [" Authorized: ", manifest.authorized_techniques.join(", ") || "none"] }), _jsxs(Text, { color: "red", children: [" Excluded: ", manifest.excluded_techniques.join(", ") || "none"] }), _jsx(Box, { marginTop: 1 }), _jsx(Text, { bold: true, children: "Dry-Run Preview:" }), dryRunError && _jsxs(Text, { color: "red", children: [" Error: ", dryRunError] }), dryRunResults === null && !dryRunError && (_jsxs(Text, { children: [" ", _jsx(Spinner, { type: "dots" }), " Running dry-run..."] })), dryRunResults !== null && (_jsxs(Box, { flexDirection: "column", children: [dryRunResults.map((r, i) => (_jsxs(Text, { color: r.pass ? "green" : "red", children: [" ", r.pass ? "✓" : "✗", " ", r.tool, " \u2192 ", r.target, ": ", r.actual, !r.pass ? ` (expected ${r.expected})` : ""] }, i))), _jsx(Box, { marginTop: 1 }), dryRunResults.some((r) => !r.pass) ? (_jsx(Text, { color: "red", bold: true, children: "\u26A0 Some dry-run checks did not match expectations. Review above." })) : (_jsx(Text, { color: "green", bold: true, children: "\u2713 All dry-run checks passed." }))] })), _jsx(Box, { marginTop: 1 }), dryRunResults !== null && !confirmed && (_jsx(Text, { dimColor: true, children: "Press Enter to confirm and write manifest, Esc to go back." }))] }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../../src/builder/steps/review.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
initialAuthorized?: string[];
|
|
4
|
+
initialExcluded?: string[];
|
|
5
|
+
onComplete: (data: {
|
|
6
|
+
authorized: string[];
|
|
7
|
+
excluded: string[];
|
|
8
|
+
}) => void;
|
|
9
|
+
onBack?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function TechniquesStep({ initialAuthorized, initialExcluded, onComplete, onBack }: Props): React.ReactElement;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=techniques.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"techniques.d.ts","sourceRoot":"","sources":["../../../../src/builder/steps/techniques.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,UAAU,KAAK;IACb,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAkBD,wBAAgB,cAAc,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CA+DpH"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
// Must mirror the categories in src/technique-checker.ts — the proxy enforces
|
|
5
|
+
// authorized_techniques against exactly these names.
|
|
6
|
+
const KNOWN_CATEGORIES = [
|
|
7
|
+
{ name: "recon", description: "Reconnaissance and scanning", tools: "nmap, amass, subfinder, httpx, sslscan" },
|
|
8
|
+
{ name: "web_app", description: "Web application testing", tools: "burp, zap, nikto, sqlmap, nuclei" },
|
|
9
|
+
{ name: "exploitation", description: "Exploitation and credential attacks", tools: "metasploit, hydra, hashcat, crackmapexec" },
|
|
10
|
+
{ name: "cloud_audit", description: "Cloud configuration auditing", tools: "prowler, scoutsuite" },
|
|
11
|
+
{ name: "dos", description: "Denial of service", tools: "hping3, slowloris, synflood" },
|
|
12
|
+
{ name: "destructive", description: "Destructive operations", tools: "disk_wiper, *destroy*, *wipe*" },
|
|
13
|
+
{ name: "social_engineering", description: "Social engineering", tools: "gophish, setoolkit, evilginx" },
|
|
14
|
+
];
|
|
15
|
+
const DEFAULT_EXCLUDED = ["dos", "destructive", "social_engineering"];
|
|
16
|
+
export function TechniquesStep({ initialAuthorized, initialExcluded, onComplete, onBack }) {
|
|
17
|
+
const [phase, setPhase] = useState("authorized");
|
|
18
|
+
const [cursor, setCursor] = useState(0);
|
|
19
|
+
const [authorized, setAuthorized] = useState(new Set(initialAuthorized ?? ["recon", "web_app"]));
|
|
20
|
+
const [excluded, setExcluded] = useState(new Set(initialExcluded ?? DEFAULT_EXCLUDED));
|
|
21
|
+
useInput((ch, key) => {
|
|
22
|
+
if (key.escape && onBack) {
|
|
23
|
+
if (phase === "excluded") {
|
|
24
|
+
setPhase("authorized");
|
|
25
|
+
setCursor(0);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
onBack();
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (key.upArrow) {
|
|
33
|
+
setCursor((prev) => Math.max(0, prev - 1));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (key.downArrow) {
|
|
37
|
+
setCursor((prev) => Math.min(KNOWN_CATEGORIES.length - 1, prev + 1));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (ch === " ") {
|
|
41
|
+
const category = KNOWN_CATEGORIES[cursor].name;
|
|
42
|
+
if (phase === "authorized") {
|
|
43
|
+
setAuthorized((prev) => { const next = new Set(prev); next.has(category) ? next.delete(category) : next.add(category); return next; });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
setExcluded((prev) => { const next = new Set(prev); next.has(category) ? next.delete(category) : next.add(category); return next; });
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (key.return) {
|
|
51
|
+
if (phase === "authorized") {
|
|
52
|
+
setPhase("excluded");
|
|
53
|
+
setCursor(0);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
onComplete({ authorized: Array.from(authorized), excluded: Array.from(excluded) });
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const currentSet = phase === "authorized" ? authorized : excluded;
|
|
62
|
+
const title = phase === "authorized" ? "Authorized Techniques" : "Excluded Techniques";
|
|
63
|
+
const color = phase === "authorized" ? "green" : "red";
|
|
64
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["Step 7: ", title] }), _jsx(Text, { dimColor: true, children: "Space to toggle, Enter to confirm, \u2191/\u2193 to navigate." }), _jsx(Box, { marginTop: 1 }), KNOWN_CATEGORIES.map((cat, i) => (_jsxs(Box, { children: [_jsxs(Text, { color: i === cursor ? "white" : undefined, dimColor: i !== cursor, children: [i === cursor ? "›" : " ", " [", currentSet.has(cat.name) ? "×" : " ", "]", " "] }), _jsx(Text, { color: currentSet.has(cat.name) ? color : undefined, bold: i === cursor, children: cat.name }), _jsxs(Text, { dimColor: true, children: [" \u2014 ", cat.description, " (", cat.tools, ")"] })] }, cat.name))), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: phase === "authorized"
|
|
65
|
+
? `${authorized.size} authorized. Press Enter to configure excluded techniques.`
|
|
66
|
+
: `${excluded.size} excluded. Press Enter to finish.` }) })] }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=techniques.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"techniques.js","sourceRoot":"","sources":["../../../../src/builder/steps/techniques.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
initial?: {
|
|
4
|
+
urls?: string[];
|
|
5
|
+
cloud_accounts?: string[];
|
|
6
|
+
};
|
|
7
|
+
onComplete: (data: {
|
|
8
|
+
urls: string[];
|
|
9
|
+
cloud_accounts: string[];
|
|
10
|
+
}) => void;
|
|
11
|
+
onBack?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function UrlsAndCloudStep({ initial, onComplete, onBack }: Props): React.ReactElement;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=urls-and-cloud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls-and-cloud.d.ts","sourceRoot":"","sources":["../../../../src/builder/steps/urls-and-cloud.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,UAAU,KAAK;IACb,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzD,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CAyC3F"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
export function UrlsAndCloudStep({ initial, onComplete, onBack }) {
|
|
5
|
+
const [section, setSection] = useState("urls");
|
|
6
|
+
const [urls, setUrls] = useState(initial?.urls ?? []);
|
|
7
|
+
const [cloudAccounts, setCloudAccounts] = useState(initial?.cloud_accounts ?? []);
|
|
8
|
+
const [input, setInput] = useState("");
|
|
9
|
+
useInput((ch, key) => {
|
|
10
|
+
if (key.escape) {
|
|
11
|
+
if (input === "" && section === "urls" && onBack) {
|
|
12
|
+
onBack();
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
setInput("");
|
|
16
|
+
}
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (ch === "d" && key.ctrl) {
|
|
20
|
+
onComplete({ urls, cloud_accounts: cloudAccounts });
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (key.return) {
|
|
24
|
+
if (input.trim() === "") {
|
|
25
|
+
if (section === "urls") {
|
|
26
|
+
setSection("cloud_accounts");
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
onComplete({ urls, cloud_accounts: cloudAccounts });
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const items = input.split(",").map((s) => s.trim()).filter(Boolean);
|
|
34
|
+
if (section === "urls") {
|
|
35
|
+
setUrls((prev) => [...prev, ...items]);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
setCloudAccounts((prev) => [...prev, ...items]);
|
|
39
|
+
}
|
|
40
|
+
setInput("");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (key.backspace || key.delete) {
|
|
44
|
+
setInput((prev) => prev.slice(0, -1));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (ch && !key.ctrl && !key.meta) {
|
|
48
|
+
setInput((prev) => prev + ch);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Step 5: URLs & Cloud Accounts (optional)" }), _jsx(Text, { dimColor: true, children: "Enter items or press Enter to skip. Ctrl+D to finish step." }), _jsx(Box, { marginTop: 1 }), _jsx(Text, { bold: true, children: section === "urls" ? "› URLs:" : "URLs:" }), urls.map((u, i) => _jsxs(Text, { color: "green", children: [" \u2713 ", u] }, i)), section === "urls" && (_jsxs(Box, { children: [_jsx(Text, { children: " \u203A " }), _jsxs(Text, { children: [input, _jsx(Text, { dimColor: true, children: "\u2502" })] })] })), _jsx(Box, { marginTop: 1 }), _jsx(Text, { bold: true, children: section === "cloud_accounts" ? "› Cloud Accounts:" : "Cloud Accounts:" }), cloudAccounts.map((c, i) => _jsxs(Text, { color: "green", children: [" \u2713 ", c] }, i)), section === "cloud_accounts" && (_jsxs(Box, { children: [_jsx(Text, { children: " \u203A " }), _jsxs(Text, { children: [input, _jsx(Text, { dimColor: true, children: "\u2502" })] })] }))] }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=urls-and-cloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls-and-cloud.js","sourceRoot":"","sources":["../../../../src/builder/steps/urls-and-cloud.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScopeManifest } from "../../types.js";
|
|
2
|
+
export interface ApiResponse {
|
|
3
|
+
status: number;
|
|
4
|
+
body: string;
|
|
5
|
+
contentType: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleGetTemplate(template: Partial<ScopeManifest> | undefined): ApiResponse;
|
|
8
|
+
export declare function handlePostSubmit(rawBody: string, outputDir: string): ApiResponse;
|
|
9
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/builder/web/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,WAAW,CAM3F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CA2BhF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { ScopeManifestSchema } from "../../manifest-schema.js";
|
|
4
|
+
import { engagementFileStem } from "../../safe-filename.js";
|
|
5
|
+
export function handleGetTemplate(template) {
|
|
6
|
+
return {
|
|
7
|
+
status: 200,
|
|
8
|
+
body: JSON.stringify(template ?? {}),
|
|
9
|
+
contentType: "application/json",
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function handlePostSubmit(rawBody, outputDir) {
|
|
13
|
+
let data;
|
|
14
|
+
try {
|
|
15
|
+
data = JSON.parse(rawBody);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return { status: 400, body: JSON.stringify({ success: false, error: "Invalid JSON" }), contentType: "application/json" };
|
|
19
|
+
}
|
|
20
|
+
const parseResult = ScopeManifestSchema.safeParse(data);
|
|
21
|
+
if (!parseResult.success) {
|
|
22
|
+
return {
|
|
23
|
+
status: 400,
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
success: false,
|
|
26
|
+
error: "Schema validation failed",
|
|
27
|
+
details: parseResult.error.issues.map((i) => i.message),
|
|
28
|
+
}),
|
|
29
|
+
contentType: "application/json",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (!fs.existsSync(outputDir)) {
|
|
33
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
const filename = `${engagementFileStem(parseResult.data.engagement_id)}-${Date.now()}.pending.json`;
|
|
36
|
+
const filePath = path.join(outputDir, filename);
|
|
37
|
+
fs.writeFileSync(filePath, JSON.stringify(parseResult.data, null, 2) + "\n", "utf-8");
|
|
38
|
+
return { status: 200, body: JSON.stringify({ success: true, file: filename }), contentType: "application/json" };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/builder/web/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,MAAM,UAAU,iBAAiB,CAAC,QAA4C;IAC5E,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,WAAW,EAAE,kBAAkB;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,SAAiB;IACjE,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACnC,MAAM,CAAC;QACL,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC3H,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,0BAA0B;gBACjC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxD,CAAC;YACF,WAAW,EAAE,kBAAkB;SAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAEhF,MAAM,QAAQ,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;IACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAEtF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AACnH,CAAC"}
|