@kryptosai/mcp-observatory 0.27.0 → 1.28.1
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/COMMERCIAL.md +28 -2
- package/CONTRIBUTORS.md +39 -0
- package/README.md +114 -22
- package/dist/src/action-receipt.d.ts +20 -0
- package/dist/src/action-receipt.js +85 -0
- package/dist/src/action-receipt.js.map +1 -0
- package/dist/src/adapters/http.js +1 -5
- package/dist/src/adapters/http.js.map +1 -1
- package/dist/src/audit.d.ts +64 -0
- package/dist/src/audit.js +359 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/cassette.js +3 -2
- package/dist/src/cassette.js.map +1 -1
- package/dist/src/checks/attack-sim.d.ts +20 -0
- package/dist/src/checks/attack-sim.js +316 -0
- package/dist/src/checks/attack-sim.js.map +1 -0
- package/dist/src/ci-issue.js +4 -3
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +25 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/attack-sim.d.ts +2 -0
- package/dist/src/commands/attack-sim.js +220 -0
- package/dist/src/commands/attack-sim.js.map +1 -0
- package/dist/src/commands/audit.d.ts +2 -0
- package/dist/src/commands/audit.js +132 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/init-ci.d.ts +3 -0
- package/dist/src/commands/init-ci.js +78 -13
- package/dist/src/commands/init-ci.js.map +1 -1
- package/dist/src/commands/legacy.js +8 -1
- package/dist/src/commands/legacy.js.map +1 -1
- package/dist/src/commands/receipt.d.ts +2 -0
- package/dist/src/commands/receipt.js +113 -0
- package/dist/src/commands/receipt.js.map +1 -0
- package/dist/src/commands/scan.js +30 -6
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js +63 -0
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/serve.js +9 -1
- package/dist/src/commands/serve.js.map +1 -1
- package/dist/src/commands/setup-ci-conversion.d.ts +3 -1
- package/dist/src/commands/setup-ci-conversion.js +23 -8
- package/dist/src/commands/setup-ci-conversion.js.map +1 -1
- package/dist/src/commands/telemetry.js +20 -14
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +31 -2
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/findings.d.ts +1 -0
- package/dist/src/findings.js +42 -1
- package/dist/src/findings.js.map +1 -1
- package/dist/src/history.js +3 -2
- package/dist/src/history.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/smithery.js +5 -1
- package/dist/src/integrations/smithery.js.map +1 -1
- package/dist/src/receipt.d.ts +100 -0
- package/dist/src/receipt.js +375 -0
- package/dist/src/receipt.js.map +1 -0
- package/dist/src/reporters/attack-sim.d.ts +2 -0
- package/dist/src/reporters/attack-sim.js +89 -0
- package/dist/src/reporters/attack-sim.js.map +1 -0
- package/dist/src/reporters/pr-comment.js +20 -6
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/sarif.js +11 -1
- package/dist/src/reporters/sarif.js.map +1 -1
- package/dist/src/runner.d.ts +3 -0
- package/dist/src/runner.js +5 -0
- package/dist/src/runner.js.map +1 -1
- package/dist/src/score.js +1 -1
- package/dist/src/score.js.map +1 -1
- package/dist/src/security-profiles.d.ts +13 -0
- package/dist/src/security-profiles.js +59 -0
- package/dist/src/security-profiles.js.map +1 -0
- package/dist/src/storage.js +3 -2
- package/dist/src/storage.js.map +1 -1
- package/dist/src/telemetry.d.ts +10 -0
- package/dist/src/telemetry.js +17 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.js +21 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/ids.js +18 -5
- package/dist/src/utils/ids.js.map +1 -1
- package/dist/src/utils/url.d.ts +2 -0
- package/dist/src/utils/url.js +15 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/src/validate.js +1 -1
- package/dist/src/validate.js.map +1 -1
- package/docs/10x-agentic-growth-sprint.md +47 -0
- package/docs/agent-ecosystem-promotion-plan.md +244 -0
- package/docs/agent-tasks.md +95 -0
- package/docs/agentic-contributor-outreach.md +52 -0
- package/docs/automatic-ci-integration.md +33 -0
- package/docs/campaign-attribution.md +58 -0
- package/docs/code-scanning-demo.md +57 -0
- package/docs/commercial-boundary.md +83 -0
- package/docs/contributor-proof-cards/README.md +33 -0
- package/docs/contributor-recognition.md +92 -0
- package/docs/examples/nsa-mcp-audit-report.md +372 -0
- package/docs/examples/nsa-mcp-results.sarif +930 -0
- package/docs/examples/nsa-mcp-score.json +13 -0
- package/docs/feishu-lark-mcp.md +1 -1
- package/docs/github-code-scanning-for-mcp.md +1 -1
- package/docs/government-enterprise-pilot.md +93 -0
- package/docs/launch.md +64 -0
- package/docs/mcp-attack-simulator.md +57 -0
- package/docs/mcp-receipts.md +109 -0
- package/docs/mcp-server-safety-index.md +29 -22
- package/docs/nsa-mcp-audit-ci.md +88 -0
- package/docs/procurement-one-pager.md +74 -0
- package/docs/proof.md +5 -2
- package/docs/public-guidance-crosswalk.md +48 -0
- package/docs/receipt-graph.md +54 -0
- package/docs/safety-index/artifacts/antv-chart-server.json +40 -22
- package/docs/safety-index/artifacts/antv-chart-server.md +22 -9
- package/docs/safety-index/artifacts/browsermcp-server.json +36 -18
- package/docs/safety-index/artifacts/browsermcp-server.md +22 -9
- package/docs/safety-index/artifacts/context7-server.json +83 -26
- package/docs/safety-index/artifacts/context7-server.md +33 -20
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2438 -0
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +176 -0
- package/docs/safety-index/artifacts/everything-server.json +150 -57
- package/docs/safety-index/artifacts/everything-server.md +36 -23
- package/docs/safety-index/artifacts/executeautomation-playwright-server.json +162 -19
- package/docs/safety-index/artifacts/executeautomation-playwright-server.md +25 -12
- package/docs/safety-index/artifacts/filesystem-server.json +221 -19
- package/docs/safety-index/artifacts/filesystem-server.md +24 -11
- package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
- package/docs/safety-index/artifacts/kubernetes-server.json +1573 -0
- package/docs/safety-index/artifacts/kubernetes-server.md +176 -0
- package/docs/safety-index/artifacts/memory-server.json +93 -32
- package/docs/safety-index/artifacts/memory-server.md +45 -25
- package/docs/safety-index/artifacts/opentofu-server.json +44 -18
- package/docs/safety-index/artifacts/opentofu-server.md +23 -10
- package/docs/safety-index/artifacts/playwright-mcp-server.json +177 -21
- package/docs/safety-index/artifacts/playwright-mcp-server.md +27 -14
- package/docs/safety-index/artifacts/promptopia-server.json +45 -19
- package/docs/safety-index/artifacts/promptopia-server.md +21 -8
- package/docs/safety-index/artifacts/puppeteer-server.json +77 -22
- package/docs/safety-index/artifacts/puppeteer-server.md +28 -15
- package/docs/safety-index/artifacts/ref-tools-server.json +36 -18
- package/docs/safety-index/artifacts/ref-tools-server.md +21 -8
- package/docs/safety-index/artifacts/sequential-thinking-server.json +38 -21
- package/docs/safety-index/artifacts/sequential-thinking-server.md +22 -9
- package/docs/safety-index/targets.json +90 -14
- package/docs/security-due-diligence.md +87 -0
- package/docs/setup-ci-doctor.md +13 -1
- package/docs/target-gallery.md +49 -0
- package/docs/target-registry.md +5 -1
- package/docs/tool-call-receipts.md +115 -0
- package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
- package/examples/insecure-mcp-server/server.mjs +62 -0
- package/package.json +31 -2
- package/schemas/run-artifact.schema.json +1 -0
- package/scripts/postinstall.mjs +138 -0
|
@@ -5,7 +5,9 @@ export interface SetupCiConversionFlags {
|
|
|
5
5
|
setupCi?: boolean;
|
|
6
6
|
yes?: boolean;
|
|
7
7
|
noSetupCi?: boolean;
|
|
8
|
+
ciSarif?: boolean;
|
|
8
9
|
force?: boolean;
|
|
10
|
+
campaign?: string;
|
|
9
11
|
}
|
|
10
12
|
export interface SetupCiConversionOptions extends SetupCiConversionFlags {
|
|
11
13
|
artifact: RunArtifact;
|
|
@@ -21,5 +23,5 @@ export interface SetupCiConversionResult {
|
|
|
21
23
|
command?: string;
|
|
22
24
|
initResult?: InitCiResult;
|
|
23
25
|
}
|
|
24
|
-
export declare function initCiOptionsFromRunArtifact(artifact: RunArtifact, options?: Pick<SetupCiConversionOptions, "force" | "target" | "targetPath">): InitCiOptions | undefined;
|
|
26
|
+
export declare function initCiOptionsFromRunArtifact(artifact: RunArtifact, options?: Pick<SetupCiConversionOptions, "ciSarif" | "force" | "target" | "targetPath">): InitCiOptions | undefined;
|
|
25
27
|
export declare function maybeConvertPassingCheckToCi(options: SetupCiConversionOptions): Promise<SetupCiConversionResult>;
|
|
@@ -14,21 +14,23 @@ function targetCommand(target) {
|
|
|
14
14
|
}
|
|
15
15
|
function conversionCommand(options) {
|
|
16
16
|
const bin = options.bin ?? "npx @kryptosai/mcp-observatory";
|
|
17
|
+
const sarif = options.ciSarif === false ? "" : " --sarif";
|
|
18
|
+
const schedule = " --schedule weekly";
|
|
17
19
|
if (options.targetPath)
|
|
18
|
-
return setupCiHint(undefined, options.targetPath, bin)
|
|
20
|
+
return `${setupCiHint(undefined, options.targetPath, bin)}${sarif}${schedule}`;
|
|
19
21
|
const command = targetCommand(options.target) ?? artifactTargetCommand(options.artifact);
|
|
20
22
|
if (command)
|
|
21
|
-
return `${bin} setup-ci --all --command ${quoteShell(command)}`;
|
|
23
|
+
return `${bin} setup-ci --all --command ${quoteShell(command)}${sarif}${schedule}`;
|
|
22
24
|
return undefined;
|
|
23
25
|
}
|
|
24
26
|
export function initCiOptionsFromRunArtifact(artifact, options = {}) {
|
|
25
27
|
if (options.targetPath) {
|
|
26
|
-
return { all: true, target: options.targetPath, force: options.force };
|
|
28
|
+
return { all: true, target: options.targetPath, force: options.force, sarif: options.ciSarif !== false, schedule: "weekly" };
|
|
27
29
|
}
|
|
28
30
|
const command = targetCommand(options.target) ?? artifactTargetCommand(artifact);
|
|
29
31
|
if (!command)
|
|
30
32
|
return undefined;
|
|
31
|
-
return { all: true, command, force: options.force };
|
|
33
|
+
return { all: true, command, force: options.force, sarif: options.ciSarif !== false, schedule: "weekly" };
|
|
32
34
|
}
|
|
33
35
|
function shouldPrompt(options) {
|
|
34
36
|
if (options.isInteractive !== undefined)
|
|
@@ -40,14 +42,14 @@ async function promptForConversion(options) {
|
|
|
40
42
|
const output = options.output ?? process.stdout;
|
|
41
43
|
const rl = readline.createInterface({ input, output });
|
|
42
44
|
try {
|
|
43
|
-
const answer = (await rl.question("Convert this passing MCP check into CI? [Y/n] ")).trim().toLowerCase();
|
|
45
|
+
const answer = (await rl.question("Convert this passing MCP check into CI + Code Scanning? [Y/n] ")).trim().toLowerCase();
|
|
44
46
|
return answer === "" || answer === "y" || answer === "yes";
|
|
45
47
|
}
|
|
46
48
|
finally {
|
|
47
49
|
rl.close();
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
|
-
function printInitCiResult(result, output) {
|
|
52
|
+
function printInitCiResult(result, output, sarifRequested) {
|
|
51
53
|
output.write(`${result.workflowStatus}: ${result.workflowPath}\n`);
|
|
52
54
|
if (result.badgePath && result.badgeStatus)
|
|
53
55
|
output.write(`${result.badgeStatus}: ${result.badgePath}\n`);
|
|
@@ -62,6 +64,17 @@ function printInitCiResult(result, output) {
|
|
|
62
64
|
if (result.workflowStatus === "skipped")
|
|
63
65
|
output.write("Use --force to overwrite existing files.\n");
|
|
64
66
|
output.write("Next: commit the workflow, open a PR, and paste the generated PR body if present.\n");
|
|
67
|
+
if (sarifRequested) {
|
|
68
|
+
output.write(result.workflowStatus === "skipped"
|
|
69
|
+
? "Code Scanning: SARIF upload was requested, but the existing workflow was unchanged.\n"
|
|
70
|
+
: "Code Scanning: SARIF upload is enabled in the generated workflow.\n");
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
output.write("Code Scanning: SARIF upload is not enabled; rerun without --no-ci-sarif to include it.\n");
|
|
74
|
+
}
|
|
75
|
+
output.write(result.workflowStatus === "skipped"
|
|
76
|
+
? "Automation: weekly scheduled checks were requested, but the existing workflow was unchanged.\n"
|
|
77
|
+
: "Automation: weekly scheduled checks are enabled in the generated workflow.\n");
|
|
65
78
|
output.write("Verify: npx @kryptosai/mcp-observatory setup-ci --doctor\n");
|
|
66
79
|
}
|
|
67
80
|
function recordConversion(status, options) {
|
|
@@ -73,6 +86,8 @@ function recordConversion(status, options) {
|
|
|
73
86
|
setupCiConversionStatus: status,
|
|
74
87
|
setupCiPromptShown: shouldPrompt(options),
|
|
75
88
|
setupCiAutoRequested: options.setupCi === true && options.yes === true,
|
|
89
|
+
setupCiSarif: options.ciSarif !== false,
|
|
90
|
+
campaign: options.campaign,
|
|
76
91
|
targetIds: [options.target?.targetId ?? options.artifact.target.targetId],
|
|
77
92
|
}));
|
|
78
93
|
}
|
|
@@ -92,7 +107,7 @@ export async function maybeConvertPassingCheckToCi(options) {
|
|
|
92
107
|
if (options.setupCi === true && options.yes === true) {
|
|
93
108
|
const initResult = await initCi(initOptions);
|
|
94
109
|
output.write("\n");
|
|
95
|
-
printInitCiResult(initResult, output);
|
|
110
|
+
printInitCiResult(initResult, output, initOptions.sarif === true);
|
|
96
111
|
recordConversion("written", options);
|
|
97
112
|
return { status: "written", command, initResult };
|
|
98
113
|
}
|
|
@@ -101,7 +116,7 @@ export async function maybeConvertPassingCheckToCi(options) {
|
|
|
101
116
|
const accepted = await promptForConversion(options);
|
|
102
117
|
if (accepted) {
|
|
103
118
|
const initResult = await initCi(initOptions);
|
|
104
|
-
printInitCiResult(initResult, output);
|
|
119
|
+
printInitCiResult(initResult, output, initOptions.sarif === true);
|
|
105
120
|
recordConversion("written", options);
|
|
106
121
|
return { status: "written", command, initResult };
|
|
107
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-ci-conversion.js","sourceRoot":"","sources":["../../../src/commands/setup-ci-conversion.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAI9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAyC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-ci-conversion.js","sourceRoot":"","sources":["../../../src/commands/setup-ci-conversion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadTelemetryConfig, saveTelemetryConfig, isTelemetryEnabled } from "../telemetry.js";
|
|
2
|
+
import { appendQuery, requireHttpUrl } from "../utils/url.js";
|
|
2
3
|
const TELEMETRY_FIELDS = [
|
|
3
4
|
"sessionId",
|
|
4
5
|
"timestamp",
|
|
@@ -57,33 +58,38 @@ export function registerTelemetryCommands(program) {
|
|
|
57
58
|
process.stdout.write(" Telemetry disabled.\n\n");
|
|
58
59
|
}
|
|
59
60
|
else if (action === "stats") {
|
|
60
|
-
const endpoint = process.env["MCP_OBSERVATORY_TELEMETRY_URL"] ?? "https://mcp-observatory-telemetry.kryptosai.workers.dev";
|
|
61
|
-
const token = process.env["MCP_OBSERVATORY_STATS_TOKEN"]
|
|
61
|
+
const endpoint = requireHttpUrl(process.env["MCP_OBSERVATORY_TELEMETRY_URL"] ?? "https://mcp-observatory-telemetry.kryptosai.workers.dev", "Telemetry stats endpoint");
|
|
62
|
+
const token = process.env["MCP_OBSERVATORY_STATS_TOKEN"];
|
|
62
63
|
if (!token) {
|
|
63
64
|
process.stderr.write(" No stats token configured.\n");
|
|
64
|
-
process.stderr.write(" Set MCP_OBSERVATORY_STATS_TOKEN
|
|
65
|
+
process.stderr.write(" Set MCP_OBSERVATORY_STATS_TOKEN in the environment.\n\n");
|
|
65
66
|
return;
|
|
66
67
|
}
|
|
67
68
|
const authHeaders = { Authorization: `Bearer ${token}` };
|
|
68
69
|
try {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
const excludeSession = process.env["MCP_OBSERVATORY_STATS_EXCLUDE_SESSION"];
|
|
71
|
+
const all = await fetch(new URL("/v1/stats", endpoint), { headers: authHeaders }).then(r => r.json());
|
|
72
|
+
const others = excludeSession
|
|
73
|
+
? await fetch(appendQuery(new URL("/v1/stats", endpoint).toString(), { exclude: excludeSession }), { headers: authHeaders }).then(r => r.json())
|
|
74
|
+
: undefined;
|
|
73
75
|
if (all.error) {
|
|
74
76
|
process.stderr.write(` Error: ${all.error}\n\n`);
|
|
75
77
|
return;
|
|
76
78
|
}
|
|
77
79
|
const totalAll = all.total ?? 0;
|
|
78
|
-
const totalOthers = others
|
|
79
|
-
const you = totalAll - totalOthers;
|
|
80
|
+
const totalOthers = others?.total ?? 0;
|
|
81
|
+
const you = excludeSession ? totalAll - totalOthers : undefined;
|
|
80
82
|
const sessionsAll = all.uniqueSessions ?? 0;
|
|
81
|
-
const sessionsOthers = others
|
|
83
|
+
const sessionsOthers = others?.uniqueSessions ?? 0;
|
|
84
|
+
const last24hAll = all.last24h ?? 0;
|
|
85
|
+
const last24hOthers = others?.last24h ?? 0;
|
|
82
86
|
process.stdout.write(` Total events: ${totalAll}\n`);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
if (you !== undefined) {
|
|
88
|
+
process.stdout.write(` Excluded events: ${you}\n`);
|
|
89
|
+
process.stdout.write(` Other events: ${totalOthers}\n`);
|
|
90
|
+
}
|
|
91
|
+
process.stdout.write(` Unique sessions: ${sessionsAll}${excludeSession ? ` (${sessionsOthers} excluding provided session)` : ""}\n`);
|
|
92
|
+
process.stdout.write(` Last 24h: ${last24hAll}${excludeSession ? ` (${last24hOthers} excluding provided session)` : ""}\n\n`);
|
|
87
93
|
}
|
|
88
94
|
catch {
|
|
89
95
|
process.stderr.write(" Failed to fetch telemetry stats.\n\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/commands/telemetry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/commands/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import { runTarget, writeRunArtifact, } from "../index.js";
|
|
|
2
2
|
import { defaultRunsDirectory } from "../storage.js";
|
|
3
3
|
import { appendHistory, buildHistoryEntry, getTrend, readHistory } from "../history.js";
|
|
4
4
|
import { renderSarif } from "../reporters/sarif.js";
|
|
5
|
-
import { buildEvent, recordEvent } from "../telemetry.js";
|
|
5
|
+
import { buildEvent, normalizeCampaign, recordEvent } from "../telemetry.js";
|
|
6
6
|
import { maybePrintCloudCta } from "../commercial.js";
|
|
7
|
+
import { renderActionReceipt } from "../action-receipt.js";
|
|
7
8
|
import { ANSI, c, resolveTarget, targetFromCommand, writeOutput } from "./helpers.js";
|
|
8
9
|
import { maybeConvertPassingCheckToCi } from "./setup-ci-conversion.js";
|
|
9
10
|
function extractTrailingConversionFlags(commandArgs, options) {
|
|
@@ -20,6 +21,12 @@ function extractTrailingConversionFlags(commandArgs, options) {
|
|
|
20
21
|
else if (arg === "--no-setup-ci") {
|
|
21
22
|
flags.noSetupCi = true;
|
|
22
23
|
}
|
|
24
|
+
else if (arg === "--no-ci-sarif") {
|
|
25
|
+
flags.ciSarif = false;
|
|
26
|
+
}
|
|
27
|
+
else if (arg === "--no-attack-sim") {
|
|
28
|
+
flags.attackSim = false;
|
|
29
|
+
}
|
|
23
30
|
else if (arg === "--force") {
|
|
24
31
|
flags.force = true;
|
|
25
32
|
}
|
|
@@ -30,10 +37,19 @@ function extractTrailingConversionFlags(commandArgs, options) {
|
|
|
30
37
|
flags.sarif = next;
|
|
31
38
|
i += 1;
|
|
32
39
|
}
|
|
40
|
+
else if (arg === "--campaign") {
|
|
41
|
+
const next = commandArgs[i + 1];
|
|
42
|
+
if (!next)
|
|
43
|
+
throw new Error("--campaign requires a campaign slug.");
|
|
44
|
+
flags.campaign = normalizeCampaign(next);
|
|
45
|
+
i += 1;
|
|
46
|
+
}
|
|
33
47
|
else {
|
|
34
48
|
targetArgs.push(arg);
|
|
35
49
|
}
|
|
36
50
|
}
|
|
51
|
+
if (flags.campaign)
|
|
52
|
+
flags.campaign = normalizeCampaign(flags.campaign);
|
|
37
53
|
return { commandArgs: targetArgs, flags };
|
|
38
54
|
}
|
|
39
55
|
export function registerTestCommands(program) {
|
|
@@ -46,10 +62,13 @@ export function registerTestCommands(program) {
|
|
|
46
62
|
.option("--deep", "Also invoke safe tools to verify they execute.")
|
|
47
63
|
.option("--invoke-tools", "Alias for --deep.")
|
|
48
64
|
.option("--security", "Run deep security scan (credential patterns, response analysis). Lightweight security is always included.")
|
|
65
|
+
.option("--no-attack-sim", "Skip the default safe attack-readiness simulation.")
|
|
49
66
|
.option("--sarif <file>", "Write a GitHub Code Scanning SARIF report after the run.")
|
|
67
|
+
.option("--campaign <slug>", "Attach a safe campaign/source slug to telemetry for attribution.")
|
|
50
68
|
.option("--setup-ci", "Offer CI conversion after a successful check; use with --yes in non-interactive runs to write files.", false)
|
|
51
69
|
.option("--yes", "Confirm CI conversion without prompting. Only writes when used with --setup-ci.", false)
|
|
52
70
|
.option("--no-setup-ci", "Suppress the post-success CI conversion prompt and hint.")
|
|
71
|
+
.option("--no-ci-sarif", "Generate post-check CI without GitHub Code Scanning SARIF upload.")
|
|
53
72
|
.option("--force", "Overwrite existing generated CI adoption files.", false)
|
|
54
73
|
.option("--no-color", "Disable colored output.")
|
|
55
74
|
.action(async (commandArgs, options) => {
|
|
@@ -59,7 +78,12 @@ export function registerTestCommands(program) {
|
|
|
59
78
|
const t0 = Date.now();
|
|
60
79
|
const target = options.target ? await resolveTarget({ target: options.target }) : targetFromCommand(commandArgs);
|
|
61
80
|
process.stdout.write(` ${c(ANSI.dim, "⟳")} Checking ${c(ANSI.bold, target.targetId)}...`);
|
|
62
|
-
const
|
|
81
|
+
const attackSim = conversionFlags.attackSim !== false && options.attackSim !== false;
|
|
82
|
+
const artifact = await runTarget(target, {
|
|
83
|
+
invokeTools: options.deep || options.invokeTools,
|
|
84
|
+
securityCheck: options.security,
|
|
85
|
+
attackSimulation: attackSim ? {} : undefined,
|
|
86
|
+
});
|
|
63
87
|
const outPath = await writeRunArtifact(artifact, defaultRunsDirectory(process.cwd()));
|
|
64
88
|
if (conversionFlags.sarif) {
|
|
65
89
|
await writeOutput(renderSarif(artifact, { artifactUri: outPath }), "sarif", conversionFlags.sarif);
|
|
@@ -78,6 +102,7 @@ export function registerTestCommands(program) {
|
|
|
78
102
|
process.stdout.write(` ${c(ANSI.dim, "→")} ${check.id}: ${check.message}\n`);
|
|
79
103
|
}
|
|
80
104
|
}
|
|
105
|
+
process.stdout.write(` ${c(ANSI.dim, "→")} ${renderActionReceipt(artifact).split("\n")[0]}\n`);
|
|
81
106
|
process.stdout.write(`\n ${c(ANSI.dim, `Artifact: ${outPath}`)}\n\n`);
|
|
82
107
|
// Track history
|
|
83
108
|
const historyEntry = buildHistoryEntry(artifact);
|
|
@@ -106,6 +131,8 @@ export function registerTestCommands(program) {
|
|
|
106
131
|
connectMs: artifact.performanceMetrics?.connectMs,
|
|
107
132
|
checkStatuses: testCheckStatuses,
|
|
108
133
|
fatalError: artifact.fatalError?.split("\n")[0],
|
|
134
|
+
campaign: conversionFlags.campaign,
|
|
135
|
+
securityFindingCount: artifact.checks.find((check) => check.id === "attack-sim")?.evidence[0]?.itemCount,
|
|
109
136
|
}));
|
|
110
137
|
if (artifact.gate === "fail") {
|
|
111
138
|
process.exitCode = 1;
|
|
@@ -118,7 +145,9 @@ export function registerTestCommands(program) {
|
|
|
118
145
|
setupCi: conversionFlags.setupCi,
|
|
119
146
|
yes: conversionFlags.yes,
|
|
120
147
|
noSetupCi: conversionFlags.noSetupCi,
|
|
148
|
+
ciSarif: conversionFlags.ciSarif,
|
|
121
149
|
force: conversionFlags.force,
|
|
150
|
+
campaign: conversionFlags.campaign,
|
|
122
151
|
});
|
|
123
152
|
}
|
|
124
153
|
maybePrintCloudCta(options.security ? "security" : "general");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/test.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/findings.d.ts
CHANGED
package/dist/src/findings.js
CHANGED
|
@@ -12,6 +12,12 @@ const SECURITY_RECOMMENDATIONS = {
|
|
|
12
12
|
"credential-pattern": "Redact secrets from tool responses and move credentials into environment or secret storage.",
|
|
13
13
|
"no-auth-http": "Require authentication for HTTP MCP targets before exposing them to shared networks.",
|
|
14
14
|
};
|
|
15
|
+
const ATTACK_CONTROL_REFS = {
|
|
16
|
+
"tool-poisoning": ["mcp-observatory:tool-poisoning", "mcp-observatory:prompt-injection"],
|
|
17
|
+
"exfiltration-canary": ["mcp-observatory:data-exposure", "mcp-observatory:secret-handling"],
|
|
18
|
+
"permission-boundary": ["mcp-observatory:tool-safety", "mcp-observatory:least-privilege"],
|
|
19
|
+
"contract-drift": ["mcp-observatory:schema-drift", "mcp-observatory:agent-contract"],
|
|
20
|
+
};
|
|
15
21
|
function stableHash(value) {
|
|
16
22
|
let hash = 0x811c9dc5;
|
|
17
23
|
for (let i = 0; i < value.length; i += 1) {
|
|
@@ -130,6 +136,39 @@ function qualityFindingFromRecord(artifact, check, record, index) {
|
|
|
130
136
|
evidence: record,
|
|
131
137
|
};
|
|
132
138
|
}
|
|
139
|
+
function attackFindingFromRecord(artifact, check, record, index) {
|
|
140
|
+
const ruleName = toText(record["ruleId"]) ?? "attack-sim";
|
|
141
|
+
const attackClass = toText(record["attackClass"]) ?? "attack-sim";
|
|
142
|
+
const itemType = toText(record["itemType"]);
|
|
143
|
+
const itemName = toText(record["itemName"]) ?? artifact.target.targetId;
|
|
144
|
+
const message = toText(record["message"]);
|
|
145
|
+
if (!message)
|
|
146
|
+
return undefined;
|
|
147
|
+
const subjectType = itemType === "tool" || itemType === "prompt" || itemType === "resource"
|
|
148
|
+
? itemType
|
|
149
|
+
: itemType === "target" ? "target" : "check";
|
|
150
|
+
return {
|
|
151
|
+
id: findingId({
|
|
152
|
+
targetId: artifact.target.targetId,
|
|
153
|
+
checkId: check.id,
|
|
154
|
+
ruleId: ruleName,
|
|
155
|
+
subjectName: itemName,
|
|
156
|
+
message,
|
|
157
|
+
index,
|
|
158
|
+
}),
|
|
159
|
+
ruleId: `mcp-observatory/${ruleName}`,
|
|
160
|
+
title: `Attack simulation: ${attackClass}`,
|
|
161
|
+
message,
|
|
162
|
+
severity: normalizeSecuritySeverity(record["severity"], check.status),
|
|
163
|
+
category: "attack-sim",
|
|
164
|
+
checkId: check.id,
|
|
165
|
+
subject: { type: subjectType, name: itemName },
|
|
166
|
+
recommendation: toText(record["recommendation"]) ?? "Review the simulated MCP attack-readiness finding before agents depend on this server.",
|
|
167
|
+
recommendedAction: toText(record["recommendedAction"]),
|
|
168
|
+
controlRefs: ATTACK_CONTROL_REFS[attackClass] ?? ["mcp-observatory:attack-sim"],
|
|
169
|
+
evidence: record,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
133
172
|
function diagnosticFindings(artifact, check, diagnostics) {
|
|
134
173
|
return diagnostics.map((diagnostic, index) => {
|
|
135
174
|
const parsed = stripDiagnosticSeverity(diagnostic);
|
|
@@ -189,7 +228,9 @@ export function extractObservatoryFindings(artifact) {
|
|
|
189
228
|
? securityFindingFromRecord(artifact, check, record, index)
|
|
190
229
|
: check.id === "schema-quality"
|
|
191
230
|
? qualityFindingFromRecord(artifact, check, record, index)
|
|
192
|
-
:
|
|
231
|
+
: check.id === "attack-sim"
|
|
232
|
+
? attackFindingFromRecord(artifact, check, record, index)
|
|
233
|
+
: undefined;
|
|
193
234
|
if (finding) {
|
|
194
235
|
findings.push(finding);
|
|
195
236
|
addedStructured = true;
|
package/dist/src/findings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/findings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/findings.ts"],"names":[],"mappings":"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"}
|
package/dist/src/history.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { mkdir, readFile
|
|
1
|
+
import { mkdir, readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { writeTextFileAtomic } from "./utils/files.js";
|
|
3
4
|
// ── Path helpers ─────────────────────────────────────────────────────────────
|
|
4
5
|
export function defaultHistoryPath(cwd) {
|
|
5
6
|
return path.join(cwd ?? process.cwd(), ".mcp-observatory", "history.json");
|
|
@@ -20,7 +21,7 @@ export async function appendHistory(entry, historyPath) {
|
|
|
20
21
|
const history = await readHistory(filePath);
|
|
21
22
|
history.entries.push(entry);
|
|
22
23
|
await mkdir(path.dirname(filePath), { recursive: true });
|
|
23
|
-
await
|
|
24
|
+
await writeTextFileAtomic(filePath, JSON.stringify(history, null, 2) + "\n");
|
|
24
25
|
}
|
|
25
26
|
// ── Build entry from artifact ────────────────────────────────────────────────
|
|
26
27
|
function itemCountFromCheck(checks, checkId) {
|
package/dist/src/history.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/history.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export { generateBadgeSvg, type BadgeOptions } from "./badge.js";
|
|
2
|
+
export { auditScore, buildAuditReport, renderAuditMarkdown, renderAuditSarif, resolveAuditTarget, runAudit, type AuditReport, type AuditScore, type AuditSeverity, type NormalizedSecurityFinding, type TrustStatus, } from "./audit.js";
|
|
3
|
+
export { buildMcpReceipt, mapStatusToReceiptVerdict, renderReceipt, renderReceiptMarkdown, receiptFormatFromPath, type BuildReceiptOptions, type McpReceipt, type ReceiptAction, type ReceiptCta, type ReceiptEnvironmentClass, type ReceiptEvidence, type ReceiptFinding, type ReceiptFormat, type ReceiptReproduction, type ReceiptRunContext, type ReceiptState, type ReceiptSubject, type ReceiptVerdict, } from "./receipt.js";
|
|
2
4
|
export { defaultCassettesDirectory, loadCassette, saveCassette, type Cassette, type CassetteEntry, } from "./cassette.js";
|
|
3
5
|
export { runConformanceCheck } from "./checks/conformance.js";
|
|
4
6
|
export { runSchemaQualityCheck } from "./checks/schema-quality.js";
|
|
7
|
+
export { runAttackSimulationCheck, type AttackSimulationFinding, type AttackSimulationOptions } from "./checks/attack-sim.js";
|
|
5
8
|
export { runLightweightSecurityCheck, runSecurityCheck } from "./checks/security.js";
|
|
6
9
|
export { SECURITY_RULES, type SecurityFinding, type SecurityRule, type ToolInfo } from "./checks/security-rules.js";
|
|
7
10
|
export { diffArtifacts } from "./diff.js";
|
|
@@ -10,6 +13,7 @@ export { renderHtml } from "./reporters/html.js";
|
|
|
10
13
|
export { renderJUnit } from "./reporters/junit.js";
|
|
11
14
|
export { renderMarkdown } from "./reporters/markdown.js";
|
|
12
15
|
export { renderPrComment } from "./reporters/pr-comment.js";
|
|
16
|
+
export { renderAttackSimulationMarkdown } from "./reporters/attack-sim.js";
|
|
13
17
|
export { readHistory, appendHistory, buildHistoryEntry, getTrend, renderTrendLabel } from "./history.js";
|
|
14
18
|
export { readLockFile, writeLockFile, buildServerLockEntry, verifyAgainstLock, mergeLockFile } from "./lockfile.js";
|
|
15
19
|
export { renderMatrixComment, type MatrixRow } from "./reporters/pr-comment-matrix.js";
|
package/dist/src/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export { generateBadgeSvg } from "./badge.js";
|
|
2
|
+
export { auditScore, buildAuditReport, renderAuditMarkdown, renderAuditSarif, resolveAuditTarget, runAudit, } from "./audit.js";
|
|
3
|
+
export { buildMcpReceipt, mapStatusToReceiptVerdict, renderReceipt, renderReceiptMarkdown, receiptFormatFromPath, } from "./receipt.js";
|
|
2
4
|
export { defaultCassettesDirectory, loadCassette, saveCassette, } from "./cassette.js";
|
|
3
5
|
export { runConformanceCheck } from "./checks/conformance.js";
|
|
4
6
|
export { runSchemaQualityCheck } from "./checks/schema-quality.js";
|
|
7
|
+
export { runAttackSimulationCheck } from "./checks/attack-sim.js";
|
|
5
8
|
export { runLightweightSecurityCheck, runSecurityCheck } from "./checks/security.js";
|
|
6
9
|
export { SECURITY_RULES } from "./checks/security-rules.js";
|
|
7
10
|
export { diffArtifacts } from "./diff.js";
|
|
@@ -10,6 +13,7 @@ export { renderHtml } from "./reporters/html.js";
|
|
|
10
13
|
export { renderJUnit } from "./reporters/junit.js";
|
|
11
14
|
export { renderMarkdown } from "./reporters/markdown.js";
|
|
12
15
|
export { renderPrComment } from "./reporters/pr-comment.js";
|
|
16
|
+
export { renderAttackSimulationMarkdown } from "./reporters/attack-sim.js";
|
|
13
17
|
export { readHistory, appendHistory, buildHistoryEntry, getTrend, renderTrendLabel } from "./history.js";
|
|
14
18
|
export { readLockFile, writeLockFile, buildServerLockEntry, verifyAgainstLock, mergeLockFile } from "./lockfile.js";
|
|
15
19
|
export { renderMatrixComment } from "./reporters/pr-comment-matrix.js";
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,YAAY,GAGb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,cAAc,EAA0D,MAAM,4BAA4B,CAAC;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAkB,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAA4D,MAAM,eAAe,CAAC;AACrH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAmC,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAqB,eAAe,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,kBAAkB,GAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAuB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,GAMvB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,GAMT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,GActB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,YAAY,GAGb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAA8D,MAAM,wBAAwB,CAAC;AAC9H,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,cAAc,EAA0D,MAAM,4BAA4B,CAAC;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,mBAAmB,EAAkB,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAA4D,MAAM,eAAe,CAAC;AACrH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAmC,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAqB,eAAe,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,kBAAkB,GAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAuB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,GAMvB,MAAM,yBAAyB,CAAC"}
|
|
@@ -12,7 +12,11 @@ const REQUEST_TIMEOUT_MS = 15_000;
|
|
|
12
12
|
const RATE_LIMIT_DELAY_MS = 1_500;
|
|
13
13
|
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
14
14
|
function baseUrl(config) {
|
|
15
|
-
|
|
15
|
+
let value = config?.baseUrl ?? DEFAULT_BASE_URL;
|
|
16
|
+
while (value.endsWith("/")) {
|
|
17
|
+
value = value.slice(0, -1);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
16
20
|
}
|
|
17
21
|
function buildHeaders(config) {
|
|
18
22
|
const headers = {
|