vanta-auditor-api-sdk 0.1.1 → 0.3.0
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/.devcontainer/README.md +5 -0
- package/.devcontainer/devcontainer.json +45 -0
- package/FUNCTIONS.md +5 -22
- package/README.md +157 -58
- package/bin/mcp-server.js +39200 -0
- package/bin/mcp-server.js.map +322 -0
- package/docs/sdks/auditors/README.md +7 -11
- package/docs/sdks/audits/README.md +71 -102
- package/examples/README.md +31 -0
- package/examples/auditsList.example.ts +26 -0
- package/examples/package-lock.json +626 -0
- package/examples/package.json +18 -0
- package/funcs/auditorsCreate.d.ts +4 -2
- package/funcs/auditorsCreate.d.ts.map +1 -1
- package/funcs/auditorsCreate.js +17 -9
- package/funcs/auditorsCreate.js.map +1 -1
- package/funcs/auditsCreateCommentForEvidence.d.ts +4 -2
- package/funcs/auditsCreateCommentForEvidence.d.ts.map +1 -1
- package/funcs/auditsCreateCommentForEvidence.js +17 -9
- package/funcs/auditsCreateCommentForEvidence.js.map +1 -1
- package/funcs/auditsCreateCustomControl.d.ts +4 -2
- package/funcs/auditsCreateCustomControl.d.ts.map +1 -1
- package/funcs/auditsCreateCustomControl.js +17 -9
- package/funcs/auditsCreateCustomControl.js.map +1 -1
- package/funcs/auditsCreateCustomEvidenceRequest.d.ts +4 -2
- package/funcs/auditsCreateCustomEvidenceRequest.d.ts.map +1 -1
- package/funcs/auditsCreateCustomEvidenceRequest.js +17 -9
- package/funcs/auditsCreateCustomEvidenceRequest.js.map +1 -1
- package/funcs/auditsGetEvidenceUrls.d.ts +6 -3
- package/funcs/auditsGetEvidenceUrls.d.ts.map +1 -1
- package/funcs/auditsGetEvidenceUrls.js +19 -10
- package/funcs/auditsGetEvidenceUrls.js.map +1 -1
- package/funcs/auditsList.d.ts +4 -2
- package/funcs/auditsList.d.ts.map +1 -1
- package/funcs/auditsList.js +18 -9
- package/funcs/auditsList.js.map +1 -1
- package/funcs/auditsListComments.d.ts +4 -2
- package/funcs/auditsListComments.d.ts.map +1 -1
- package/funcs/auditsListComments.js +17 -9
- package/funcs/auditsListComments.js.map +1 -1
- package/funcs/auditsListControls.d.ts +4 -2
- package/funcs/auditsListControls.d.ts.map +1 -1
- package/funcs/auditsListControls.js +17 -9
- package/funcs/auditsListControls.js.map +1 -1
- package/funcs/auditsListEvidence.d.ts +4 -2
- package/funcs/auditsListEvidence.d.ts.map +1 -1
- package/funcs/auditsListEvidence.js +17 -9
- package/funcs/auditsListEvidence.js.map +1 -1
- package/funcs/auditsUpdateEvidence.d.ts +4 -2
- package/funcs/auditsUpdateEvidence.d.ts.map +1 -1
- package/funcs/auditsUpdateEvidence.js +17 -9
- package/funcs/auditsUpdateEvidence.js.map +1 -1
- package/hooks/types.d.ts +4 -1
- package/hooks/types.d.ts.map +1 -1
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -1
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/jsr.json +27 -0
- package/lib/config.d.ts +11 -7
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +14 -3
- package/lib/config.js.map +1 -1
- package/lib/encodings.d.ts +10 -9
- package/lib/encodings.d.ts.map +1 -1
- package/lib/encodings.js +73 -47
- package/lib/encodings.js.map +1 -1
- package/lib/files.d.ts +5 -0
- package/lib/files.d.ts.map +1 -1
- package/lib/files.js +41 -0
- package/lib/files.js.map +1 -1
- package/lib/matchers.d.ts +6 -11
- package/lib/matchers.d.ts.map +1 -1
- package/lib/matchers.js +45 -31
- package/lib/matchers.js.map +1 -1
- package/lib/primitives.d.ts +4 -0
- package/lib/primitives.d.ts.map +1 -1
- package/lib/primitives.js +17 -0
- package/lib/primitives.js.map +1 -1
- package/lib/retries.js +0 -1
- package/lib/retries.js.map +1 -1
- package/lib/schemas.d.ts +1 -1
- package/lib/schemas.d.ts.map +1 -1
- package/lib/schemas.js +4 -1
- package/lib/schemas.js.map +1 -1
- package/lib/sdks.d.ts +5 -2
- package/lib/sdks.d.ts.map +1 -1
- package/lib/sdks.js +21 -24
- package/lib/sdks.js.map +1 -1
- package/lib/security.d.ts +6 -5
- package/lib/security.d.ts.map +1 -1
- package/lib/security.js +6 -1
- package/lib/security.js.map +1 -1
- package/mcp-server/build.d.mts.map +1 -0
- package/mcp-server/build.mjs +14 -0
- package/mcp-server/build.mjs.map +1 -0
- package/mcp-server/cli/start/command.d.ts +2 -0
- package/mcp-server/cli/start/command.d.ts.map +1 -0
- package/mcp-server/cli/start/command.js +126 -0
- package/mcp-server/cli/start/command.js.map +1 -0
- package/mcp-server/cli/start/impl.d.ts +16 -0
- package/mcp-server/cli/start/impl.d.ts.map +1 -0
- package/mcp-server/cli/start/impl.js +102 -0
- package/mcp-server/cli/start/impl.js.map +1 -0
- package/mcp-server/cli.d.ts +6 -0
- package/mcp-server/cli.d.ts.map +1 -0
- package/mcp-server/cli.js +10 -0
- package/mcp-server/cli.js.map +1 -0
- package/mcp-server/console-logger.d.ts +7 -0
- package/mcp-server/console-logger.d.ts.map +1 -0
- package/mcp-server/console-logger.js +59 -0
- package/mcp-server/console-logger.js.map +1 -0
- package/mcp-server/extensions.d.ts +11 -0
- package/mcp-server/extensions.d.ts.map +1 -0
- package/mcp-server/extensions.js +6 -0
- package/mcp-server/extensions.js.map +1 -0
- package/mcp-server/mcp-server.d.ts +2 -0
- package/mcp-server/mcp-server.d.ts.map +1 -0
- package/mcp-server/mcp-server.js +29 -0
- package/mcp-server/mcp-server.js.map +1 -0
- package/mcp-server/prompts.d.ts +26 -0
- package/mcp-server/prompts.d.ts.map +1 -0
- package/mcp-server/prompts.js +51 -0
- package/mcp-server/prompts.js.map +1 -0
- package/mcp-server/resources.d.ts +32 -0
- package/mcp-server/resources.d.ts.map +1 -0
- package/mcp-server/resources.js +87 -0
- package/mcp-server/resources.js.map +1 -0
- package/mcp-server/scopes.d.ts +3 -0
- package/mcp-server/scopes.d.ts.map +1 -0
- package/mcp-server/scopes.js +8 -0
- package/mcp-server/scopes.js.map +1 -0
- package/mcp-server/server.d.ts +13 -0
- package/mcp-server/server.d.ts.map +1 -0
- package/mcp-server/server.js +52 -0
- package/mcp-server/server.js.map +1 -0
- package/mcp-server/shared.d.ts +7 -0
- package/mcp-server/shared.d.ts.map +1 -0
- package/mcp-server/shared.js +98 -0
- package/mcp-server/shared.js.map +1 -0
- package/mcp-server/tools/auditorsCreate.d.ts +8 -0
- package/mcp-server/tools/auditorsCreate.d.ts.map +1 -0
- package/mcp-server/tools/auditorsCreate.js +64 -0
- package/mcp-server/tools/auditorsCreate.js.map +1 -0
- package/mcp-server/tools/auditsCreateCommentForEvidence.d.ts +8 -0
- package/mcp-server/tools/auditsCreateCommentForEvidence.d.ts.map +1 -0
- package/mcp-server/tools/auditsCreateCommentForEvidence.js +64 -0
- package/mcp-server/tools/auditsCreateCommentForEvidence.js.map +1 -0
- package/mcp-server/tools/auditsCreateCustomControl.d.ts +8 -0
- package/mcp-server/tools/auditsCreateCustomControl.d.ts.map +1 -0
- package/mcp-server/tools/auditsCreateCustomControl.js +64 -0
- package/mcp-server/tools/auditsCreateCustomControl.js.map +1 -0
- package/mcp-server/tools/auditsCreateCustomEvidenceRequest.d.ts +8 -0
- package/mcp-server/tools/auditsCreateCustomEvidenceRequest.d.ts.map +1 -0
- package/mcp-server/tools/auditsCreateCustomEvidenceRequest.js +64 -0
- package/mcp-server/tools/auditsCreateCustomEvidenceRequest.js.map +1 -0
- package/mcp-server/tools/auditsGetEvidenceUrls.d.ts +8 -0
- package/mcp-server/tools/auditsGetEvidenceUrls.d.ts.map +1 -0
- package/mcp-server/tools/auditsGetEvidenceUrls.js +65 -0
- package/mcp-server/tools/auditsGetEvidenceUrls.js.map +1 -0
- package/mcp-server/tools/auditsList.d.ts +8 -0
- package/mcp-server/tools/auditsList.d.ts.map +1 -0
- package/mcp-server/tools/auditsList.js +64 -0
- package/mcp-server/tools/auditsList.js.map +1 -0
- package/mcp-server/tools/auditsListComments.d.ts +8 -0
- package/mcp-server/tools/auditsListComments.d.ts.map +1 -0
- package/mcp-server/tools/auditsListComments.js +64 -0
- package/mcp-server/tools/auditsListComments.js.map +1 -0
- package/mcp-server/tools/auditsListControls.d.ts +8 -0
- package/mcp-server/tools/auditsListControls.d.ts.map +1 -0
- package/mcp-server/tools/auditsListControls.js +64 -0
- package/mcp-server/tools/auditsListControls.js.map +1 -0
- package/mcp-server/tools/auditsListEvidence.d.ts +8 -0
- package/mcp-server/tools/auditsListEvidence.d.ts.map +1 -0
- package/mcp-server/tools/auditsListEvidence.js +64 -0
- package/mcp-server/tools/auditsListEvidence.js.map +1 -0
- package/mcp-server/tools/auditsUpdateEvidence.d.ts +8 -0
- package/mcp-server/tools/auditsUpdateEvidence.d.ts.map +1 -0
- package/mcp-server/tools/auditsUpdateEvidence.js +64 -0
- package/mcp-server/tools/auditsUpdateEvidence.js.map +1 -0
- package/mcp-server/tools.d.ts +25 -0
- package/mcp-server/tools.d.ts.map +1 -0
- package/mcp-server/tools.js +82 -0
- package/mcp-server/tools.js.map +1 -0
- package/models/components/audit.d.ts +5 -2
- package/models/components/audit.d.ts.map +1 -1
- package/models/components/audit.js +5 -2
- package/models/components/audit.js.map +1 -1
- package/models/components/auditfocus.d.ts +28 -0
- package/models/components/auditfocus.d.ts.map +1 -0
- package/models/components/auditfocus.js +61 -0
- package/models/components/auditfocus.js.map +1 -0
- package/models/components/auditorcontrol.d.ts +14 -2
- package/models/components/auditorcontrol.d.ts.map +1 -1
- package/models/components/auditorcontrol.js +8 -2
- package/models/components/auditorcontrol.js.map +1 -1
- package/models/components/auditorenabledstatetransition.d.ts +3 -0
- package/models/components/auditorenabledstatetransition.d.ts.map +1 -1
- package/models/components/auditorenabledstatetransition.js +1 -0
- package/models/components/auditorenabledstatetransition.js.map +1 -1
- package/models/components/comment.d.ts +5 -0
- package/models/components/comment.d.ts.map +1 -1
- package/models/components/comment.js +2 -0
- package/models/components/comment.js.map +1 -1
- package/models/components/control.d.ts +8 -2
- package/models/components/control.d.ts.map +1 -1
- package/models/components/control.js +5 -2
- package/models/components/control.js.map +1 -1
- package/models/components/createcustomevidencerequestinput.d.ts +5 -0
- package/models/components/createcustomevidencerequestinput.d.ts.map +1 -1
- package/models/components/createcustomevidencerequestinput.js +2 -0
- package/models/components/createcustomevidencerequestinput.js.map +1 -1
- package/models/components/customfield.d.ts +52 -0
- package/models/components/customfield.d.ts.map +1 -0
- package/models/components/customfield.js +95 -0
- package/models/components/customfield.js.map +1 -0
- package/models/components/index.d.ts +3 -0
- package/models/components/index.d.ts.map +1 -1
- package/models/components/index.js +3 -0
- package/models/components/index.js.map +1 -1
- package/models/components/section.d.ts +37 -0
- package/models/components/section.d.ts.map +1 -0
- package/models/components/section.js +71 -0
- package/models/components/section.js.map +1 -0
- package/models/errors/apierror.d.ts +8 -6
- package/models/errors/apierror.d.ts.map +1 -1
- package/models/errors/apierror.js +23 -10
- package/models/errors/apierror.js.map +1 -1
- package/models/errors/index.d.ts +1 -0
- package/models/errors/index.d.ts.map +1 -1
- package/models/errors/index.js +1 -0
- package/models/errors/index.js.map +1 -1
- package/models/errors/responsevalidationerror.d.ts +26 -0
- package/models/errors/responsevalidationerror.d.ts.map +1 -0
- package/models/errors/responsevalidationerror.js +66 -0
- package/models/errors/responsevalidationerror.js.map +1 -0
- package/models/errors/sdkvalidationerror.d.ts +1 -0
- package/models/errors/sdkvalidationerror.d.ts.map +1 -1
- package/models/errors/sdkvalidationerror.js +14 -0
- package/models/errors/sdkvalidationerror.js.map +1 -1
- package/models/errors/vantaerror.d.ts +19 -0
- package/models/errors/vantaerror.d.ts.map +1 -0
- package/models/errors/vantaerror.js +20 -0
- package/models/errors/vantaerror.js.map +1 -0
- package/models/operations/listaudits.d.ts +5 -0
- package/models/operations/listaudits.d.ts.map +1 -1
- package/models/operations/listaudits.js +2 -0
- package/models/operations/listaudits.js.map +1 -1
- package/package.json +27 -10
- package/sdk/audits.d.ts +2 -1
- package/sdk/audits.d.ts.map +1 -1
- package/sdk/audits.js +2 -1
- package/sdk/audits.js.map +1 -1
- package/src/funcs/auditorsCreate.ts +58 -22
- package/src/funcs/auditsCreateCommentForEvidence.ts +58 -22
- package/src/funcs/auditsCreateCustomControl.ts +58 -22
- package/src/funcs/auditsCreateCustomEvidenceRequest.ts +58 -22
- package/src/funcs/auditsGetEvidenceUrls.ts +60 -23
- package/src/funcs/auditsList.ts +59 -22
- package/src/funcs/auditsListComments.ts +58 -22
- package/src/funcs/auditsListControls.ts +58 -22
- package/src/funcs/auditsListEvidence.ts +58 -22
- package/src/funcs/auditsUpdateEvidence.ts +58 -22
- package/src/hooks/types.ts +4 -1
- package/src/index.ts +2 -0
- package/src/lib/config.ts +21 -6
- package/src/lib/encodings.ts +95 -61
- package/src/lib/files.ts +43 -1
- package/src/lib/matchers.ts +64 -41
- package/src/lib/primitives.ts +28 -0
- package/src/lib/retries.ts +0 -1
- package/src/lib/schemas.ts +5 -0
- package/src/lib/sdks.ts +35 -25
- package/src/lib/security.ts +12 -5
- package/src/mcp-server/cli/start/command.ts +94 -0
- package/src/mcp-server/cli/start/impl.ts +130 -0
- package/src/mcp-server/cli.ts +13 -0
- package/src/mcp-server/console-logger.ts +71 -0
- package/src/mcp-server/extensions.ts +17 -0
- package/src/mcp-server/mcp-server.ts +26 -0
- package/src/mcp-server/prompts.ts +117 -0
- package/src/mcp-server/resources.ts +172 -0
- package/src/mcp-server/scopes.ts +7 -0
- package/src/mcp-server/server.ts +79 -0
- package/src/mcp-server/shared.ts +75 -0
- package/src/mcp-server/tools/auditorsCreate.ts +37 -0
- package/src/mcp-server/tools/auditsCreateCommentForEvidence.ts +38 -0
- package/src/mcp-server/tools/auditsCreateCustomControl.ts +37 -0
- package/src/mcp-server/tools/auditsCreateCustomEvidenceRequest.ts +39 -0
- package/src/mcp-server/tools/auditsGetEvidenceUrls.ts +38 -0
- package/src/mcp-server/tools/auditsList.ts +37 -0
- package/src/mcp-server/tools/auditsListComments.ts +37 -0
- package/src/mcp-server/tools/auditsListControls.ts +37 -0
- package/src/mcp-server/tools/auditsListEvidence.ts +37 -0
- package/src/mcp-server/tools/auditsUpdateEvidence.ts +37 -0
- package/src/mcp-server/tools.ts +129 -0
- package/src/models/components/audit.ts +13 -4
- package/src/models/components/auditfocus.ts +31 -0
- package/src/models/components/auditorcontrol.ts +30 -4
- package/src/models/components/auditorenabledstatetransition.ts +1 -0
- package/src/models/components/comment.ts +9 -0
- package/src/models/components/control.ts +17 -4
- package/src/models/components/createcustomevidencerequestinput.ts +7 -0
- package/src/models/components/customfield.ts +109 -0
- package/src/models/components/index.ts +3 -0
- package/src/models/components/section.ts +69 -0
- package/src/models/errors/apierror.ts +29 -16
- package/src/models/errors/index.ts +1 -0
- package/src/models/errors/responsevalidationerror.ts +50 -0
- package/src/models/errors/sdkvalidationerror.ts +12 -0
- package/src/models/errors/vantaerror.ts +35 -0
- package/src/models/operations/listaudits.ts +7 -0
- package/src/sdk/audits.ts +2 -1
- package/src/types/async.ts +68 -0
- package/src/types/constdatetime.ts +1 -1
- package/tsconfig.json +41 -0
- package/types/async.d.ts +23 -0
- package/types/async.d.ts.map +1 -0
- package/types/async.js +44 -0
- package/types/async.js.map +1 -0
- package/types/constdatetime.js +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
7
|
+
import { GetPromptResult } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
import {
|
|
9
|
+
objectOutputType,
|
|
10
|
+
ZodOptional,
|
|
11
|
+
ZodType,
|
|
12
|
+
ZodTypeAny,
|
|
13
|
+
ZodTypeDef,
|
|
14
|
+
} from "zod";
|
|
15
|
+
import { VantaCore } from "../core.js";
|
|
16
|
+
import { ConsoleLogger } from "./console-logger.js";
|
|
17
|
+
import { MCPScope } from "./scopes.js";
|
|
18
|
+
|
|
19
|
+
// '@modelcontextprotocol/sdk' currently does not export this type
|
|
20
|
+
export type PromptArgsRawShape = {
|
|
21
|
+
[k: string]:
|
|
22
|
+
| ZodType<string, ZodTypeDef, string>
|
|
23
|
+
| ZodOptional<ZodType<string, ZodTypeDef, string>>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type PromptDefinition<
|
|
27
|
+
Args extends undefined | PromptArgsRawShape = undefined,
|
|
28
|
+
> = Args extends PromptArgsRawShape ? {
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
scopes?: MCPScope[];
|
|
32
|
+
args: Args;
|
|
33
|
+
prompt: (
|
|
34
|
+
client: VantaCore,
|
|
35
|
+
args: objectOutputType<Args, ZodTypeAny>,
|
|
36
|
+
extra: RequestHandlerExtra,
|
|
37
|
+
) => GetPromptResult | Promise<GetPromptResult>;
|
|
38
|
+
}
|
|
39
|
+
: {
|
|
40
|
+
name: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
scopes?: MCPScope[];
|
|
43
|
+
args?: undefined;
|
|
44
|
+
prompt: (
|
|
45
|
+
client: VantaCore,
|
|
46
|
+
extra: RequestHandlerExtra,
|
|
47
|
+
) => GetPromptResult | Promise<GetPromptResult>;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// Optional function to assist with formatting prompt results
|
|
51
|
+
export async function formatResult(value: string): Promise<GetPromptResult> {
|
|
52
|
+
return {
|
|
53
|
+
messages: [
|
|
54
|
+
{
|
|
55
|
+
role: "user",
|
|
56
|
+
content: {
|
|
57
|
+
type: "text",
|
|
58
|
+
text: value,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function createRegisterPrompt(
|
|
66
|
+
logger: ConsoleLogger,
|
|
67
|
+
server: McpServer,
|
|
68
|
+
sdk: VantaCore,
|
|
69
|
+
allowedScopes: Set<MCPScope>,
|
|
70
|
+
): <A extends PromptArgsRawShape | undefined>(
|
|
71
|
+
prompt: PromptDefinition<A>,
|
|
72
|
+
) => void {
|
|
73
|
+
return <A extends PromptArgsRawShape | undefined>(
|
|
74
|
+
prompt: PromptDefinition<A>,
|
|
75
|
+
): void => {
|
|
76
|
+
const scopes = prompt.scopes ?? [];
|
|
77
|
+
if (allowedScopes.size > 0 && scopes.length === 0) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (
|
|
82
|
+
allowedScopes.size > 0
|
|
83
|
+
&& !scopes.every((s: MCPScope) => allowedScopes.has(s))
|
|
84
|
+
) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (prompt.args) {
|
|
89
|
+
if (prompt.description) {
|
|
90
|
+
server.prompt(
|
|
91
|
+
prompt.name,
|
|
92
|
+
prompt.description,
|
|
93
|
+
prompt.args,
|
|
94
|
+
async (args, ctx) => prompt.prompt(sdk, args, ctx),
|
|
95
|
+
);
|
|
96
|
+
} else {
|
|
97
|
+
server.prompt(
|
|
98
|
+
prompt.name,
|
|
99
|
+
prompt.args,
|
|
100
|
+
async (args, ctx) => prompt.prompt(sdk, args, ctx),
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
if (prompt.description) {
|
|
105
|
+
server.prompt(
|
|
106
|
+
prompt.name,
|
|
107
|
+
prompt.description,
|
|
108
|
+
async (ctx) => prompt.prompt(sdk, ctx),
|
|
109
|
+
);
|
|
110
|
+
} else {
|
|
111
|
+
server.prompt(prompt.name, async (ctx) => prompt.prompt(sdk, ctx));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
logger.debug("Registered prompt", { name: prompt.name });
|
|
116
|
+
};
|
|
117
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
McpServer,
|
|
7
|
+
ResourceMetadata,
|
|
8
|
+
ResourceTemplate,
|
|
9
|
+
} from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
10
|
+
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
11
|
+
import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
|
|
12
|
+
import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
|
|
13
|
+
import { VantaCore } from "../core.js";
|
|
14
|
+
import { ConsoleLogger } from "./console-logger.js";
|
|
15
|
+
import { MCPScope } from "./scopes.js";
|
|
16
|
+
import { isAsyncIterable, isBinaryData, valueToBase64 } from "./shared.js";
|
|
17
|
+
|
|
18
|
+
export type ReadResourceCallback = (
|
|
19
|
+
client: VantaCore,
|
|
20
|
+
uri: URL,
|
|
21
|
+
extra: RequestHandlerExtra,
|
|
22
|
+
) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
23
|
+
|
|
24
|
+
export type ResourceDefinition = {
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
metadata?: ResourceMetadata;
|
|
28
|
+
scopes?: MCPScope[];
|
|
29
|
+
resource: string;
|
|
30
|
+
read: ReadResourceCallback;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type ReadResourceTemplateCallback = (
|
|
34
|
+
client: VantaCore,
|
|
35
|
+
uri: URL,
|
|
36
|
+
vars: Variables,
|
|
37
|
+
extra: RequestHandlerExtra,
|
|
38
|
+
) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
39
|
+
|
|
40
|
+
export type ResourceTemplateDefinition = {
|
|
41
|
+
name: string;
|
|
42
|
+
description: string;
|
|
43
|
+
metadata?: ResourceMetadata;
|
|
44
|
+
scopes?: MCPScope[];
|
|
45
|
+
resource: ResourceTemplate;
|
|
46
|
+
read: ReadResourceTemplateCallback;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Optional function to assist with formatting resource results
|
|
50
|
+
export async function formatResult(
|
|
51
|
+
value: unknown,
|
|
52
|
+
uri: URL,
|
|
53
|
+
init: { mimeType?: string | undefined; response?: Response | undefined },
|
|
54
|
+
): Promise<ReadResourceResult> {
|
|
55
|
+
if (typeof value === "undefined") {
|
|
56
|
+
return { contents: [] };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let contents: ReadResourceResult["contents"] = [];
|
|
60
|
+
|
|
61
|
+
const mimeType = init.mimeType ?? init.response?.headers.get("content-type")
|
|
62
|
+
?? "";
|
|
63
|
+
|
|
64
|
+
if (mimeType.search(/\bjson\b/g) !== -1) {
|
|
65
|
+
contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }];
|
|
66
|
+
} else if (
|
|
67
|
+
mimeType.startsWith("text/event-stream")
|
|
68
|
+
&& isAsyncIterable(value)
|
|
69
|
+
) {
|
|
70
|
+
contents = [
|
|
71
|
+
{
|
|
72
|
+
uri: uri.toString(),
|
|
73
|
+
mimeType: "application/json",
|
|
74
|
+
text: await stringifySSEToJSON(value),
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
} else if (
|
|
78
|
+
(mimeType.startsWith("text/") || mimeType.startsWith("application/"))
|
|
79
|
+
&& typeof value === "string"
|
|
80
|
+
) {
|
|
81
|
+
contents = [{ uri: uri.toString(), mimeType, text: value }];
|
|
82
|
+
} else if (isBinaryData(value)) {
|
|
83
|
+
const blob = await valueToBase64(value);
|
|
84
|
+
contents = blob == null ? [] : [{ uri: uri.toString(), blob, mimeType }];
|
|
85
|
+
} else {
|
|
86
|
+
throw new Error(`Unsupported content type: "${mimeType}"`);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return { contents };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function stringifySSEToJSON(
|
|
93
|
+
value: AsyncIterable<unknown>,
|
|
94
|
+
): Promise<string> {
|
|
95
|
+
const payloads = [];
|
|
96
|
+
|
|
97
|
+
for await (const chunk of value) {
|
|
98
|
+
payloads.push(chunk);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return JSON.stringify(payloads);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function createRegisterResource(
|
|
105
|
+
logger: ConsoleLogger,
|
|
106
|
+
server: McpServer,
|
|
107
|
+
sdk: VantaCore,
|
|
108
|
+
allowedScopes: Set<MCPScope>,
|
|
109
|
+
): (resource: ResourceDefinition) => void {
|
|
110
|
+
return (resource: ResourceDefinition): void => {
|
|
111
|
+
const scopes = resource.scopes ?? [];
|
|
112
|
+
if (allowedScopes.size > 0 && scopes.length === 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (
|
|
117
|
+
allowedScopes.size > 0
|
|
118
|
+
&& !scopes.every((s: MCPScope) => allowedScopes.has(s))
|
|
119
|
+
) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const metadata: ResourceMetadata = {
|
|
124
|
+
...resource.metadata,
|
|
125
|
+
description: resource.description,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
server.resource(
|
|
129
|
+
resource.name,
|
|
130
|
+
resource.resource,
|
|
131
|
+
metadata,
|
|
132
|
+
async (uri, ctx) => resource.read(sdk, uri, ctx),
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
logger.debug("Registered resource", { name: resource.name });
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function createRegisterResourceTemplate(
|
|
140
|
+
logger: ConsoleLogger,
|
|
141
|
+
server: McpServer,
|
|
142
|
+
sdk: VantaCore,
|
|
143
|
+
allowedScopes: Set<MCPScope>,
|
|
144
|
+
): (resource: ResourceTemplateDefinition) => void {
|
|
145
|
+
return (resource: ResourceTemplateDefinition): void => {
|
|
146
|
+
const scopes = resource.scopes ?? [];
|
|
147
|
+
if (allowedScopes.size > 0 && scopes.length === 0) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (
|
|
152
|
+
allowedScopes.size > 0
|
|
153
|
+
&& !scopes.every((s: MCPScope) => allowedScopes.has(s))
|
|
154
|
+
) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const metadata: ResourceMetadata = {
|
|
159
|
+
...resource.metadata,
|
|
160
|
+
description: resource.description,
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
server.resource(
|
|
164
|
+
resource.name,
|
|
165
|
+
resource.resource,
|
|
166
|
+
metadata,
|
|
167
|
+
async (uri, vars, ctx) => resource.read(sdk, uri, vars, ctx),
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
logger.debug("Registered resource template", { name: resource.name });
|
|
171
|
+
};
|
|
172
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
import { VantaCore } from "../core.js";
|
|
7
|
+
import { SDKOptions } from "../lib/config.js";
|
|
8
|
+
import type { ConsoleLogger } from "./console-logger.js";
|
|
9
|
+
import { createRegisterPrompt } from "./prompts.js";
|
|
10
|
+
import {
|
|
11
|
+
createRegisterResource,
|
|
12
|
+
createRegisterResourceTemplate,
|
|
13
|
+
} from "./resources.js";
|
|
14
|
+
import { MCPScope } from "./scopes.js";
|
|
15
|
+
import { createRegisterTool } from "./tools.js";
|
|
16
|
+
import { tool$auditorsCreate } from "./tools/auditorsCreate.js";
|
|
17
|
+
import { tool$auditsCreateCommentForEvidence } from "./tools/auditsCreateCommentForEvidence.js";
|
|
18
|
+
import { tool$auditsCreateCustomControl } from "./tools/auditsCreateCustomControl.js";
|
|
19
|
+
import { tool$auditsCreateCustomEvidenceRequest } from "./tools/auditsCreateCustomEvidenceRequest.js";
|
|
20
|
+
import { tool$auditsGetEvidenceUrls } from "./tools/auditsGetEvidenceUrls.js";
|
|
21
|
+
import { tool$auditsList } from "./tools/auditsList.js";
|
|
22
|
+
import { tool$auditsListComments } from "./tools/auditsListComments.js";
|
|
23
|
+
import { tool$auditsListControls } from "./tools/auditsListControls.js";
|
|
24
|
+
import { tool$auditsListEvidence } from "./tools/auditsListEvidence.js";
|
|
25
|
+
import { tool$auditsUpdateEvidence } from "./tools/auditsUpdateEvidence.js";
|
|
26
|
+
|
|
27
|
+
export function createMCPServer(deps: {
|
|
28
|
+
logger: ConsoleLogger;
|
|
29
|
+
allowedTools?: string[] | undefined;
|
|
30
|
+
scopes?: MCPScope[] | undefined;
|
|
31
|
+
serverURL?: string | undefined;
|
|
32
|
+
bearerAuth?: SDKOptions["bearerAuth"] | undefined;
|
|
33
|
+
serverIdx?: SDKOptions["serverIdx"] | undefined;
|
|
34
|
+
}) {
|
|
35
|
+
const server = new McpServer({
|
|
36
|
+
name: "Vanta",
|
|
37
|
+
version: "0.3.0",
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const client = new VantaCore({
|
|
41
|
+
bearerAuth: deps.bearerAuth,
|
|
42
|
+
serverURL: deps.serverURL,
|
|
43
|
+
serverIdx: deps.serverIdx,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const scopes = new Set(deps.scopes);
|
|
47
|
+
|
|
48
|
+
const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
|
|
49
|
+
const tool = createRegisterTool(
|
|
50
|
+
deps.logger,
|
|
51
|
+
server,
|
|
52
|
+
client,
|
|
53
|
+
scopes,
|
|
54
|
+
allowedTools,
|
|
55
|
+
);
|
|
56
|
+
const resource = createRegisterResource(deps.logger, server, client, scopes);
|
|
57
|
+
const resourceTemplate = createRegisterResourceTemplate(
|
|
58
|
+
deps.logger,
|
|
59
|
+
server,
|
|
60
|
+
client,
|
|
61
|
+
scopes,
|
|
62
|
+
);
|
|
63
|
+
const prompt = createRegisterPrompt(deps.logger, server, client, scopes);
|
|
64
|
+
const register = { tool, resource, resourceTemplate, prompt };
|
|
65
|
+
void register; // suppress unused warnings
|
|
66
|
+
|
|
67
|
+
tool(tool$auditsList);
|
|
68
|
+
tool(tool$auditsGetEvidenceUrls);
|
|
69
|
+
tool(tool$auditsListEvidence);
|
|
70
|
+
tool(tool$auditsListComments);
|
|
71
|
+
tool(tool$auditsListControls);
|
|
72
|
+
tool(tool$auditsCreateCommentForEvidence);
|
|
73
|
+
tool(tool$auditsUpdateEvidence);
|
|
74
|
+
tool(tool$auditsCreateCustomEvidenceRequest);
|
|
75
|
+
tool(tool$auditsCreateCustomControl);
|
|
76
|
+
tool(tool$auditorsCreate);
|
|
77
|
+
|
|
78
|
+
return server;
|
|
79
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as z from "zod";
|
|
6
|
+
import { bytesToBase64 } from "../lib/base64.js";
|
|
7
|
+
|
|
8
|
+
type BinaryData =
|
|
9
|
+
| Uint8Array
|
|
10
|
+
| ArrayBuffer
|
|
11
|
+
| Blob
|
|
12
|
+
| ReadableStream
|
|
13
|
+
| Response
|
|
14
|
+
| string;
|
|
15
|
+
|
|
16
|
+
export async function consumeStream(
|
|
17
|
+
stream: ReadableStream<Uint8Array>,
|
|
18
|
+
): Promise<Uint8Array> {
|
|
19
|
+
const reader = stream.getReader();
|
|
20
|
+
const chunks: Uint8Array[] = [];
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
while (true) {
|
|
24
|
+
const { done, value } = await reader.read();
|
|
25
|
+
if (value != null) chunks.push(value);
|
|
26
|
+
if (done) break;
|
|
27
|
+
}
|
|
28
|
+
} finally {
|
|
29
|
+
reader.releaseLock();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return new Uint8Array(await new Blob(chunks).arrayBuffer());
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function isAsyncIterable(
|
|
36
|
+
value: unknown,
|
|
37
|
+
): value is AsyncIterable<string> {
|
|
38
|
+
return (
|
|
39
|
+
typeof value === "object" && value != null && Symbol.asyncIterator in value
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function isBinaryData(value: unknown): value is BinaryData {
|
|
44
|
+
return (
|
|
45
|
+
value instanceof Uint8Array
|
|
46
|
+
|| value instanceof ArrayBuffer
|
|
47
|
+
|| value instanceof Blob
|
|
48
|
+
|| value instanceof ReadableStream
|
|
49
|
+
|| value instanceof Response
|
|
50
|
+
|| typeof value === "string"
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const base64Schema = z.string().base64();
|
|
55
|
+
|
|
56
|
+
export async function valueToBase64(
|
|
57
|
+
value: BinaryData | null | undefined,
|
|
58
|
+
): Promise<string | null> {
|
|
59
|
+
if (value == null) {
|
|
60
|
+
return null;
|
|
61
|
+
} else if (value instanceof Uint8Array) {
|
|
62
|
+
return bytesToBase64(value);
|
|
63
|
+
} else if (value instanceof ArrayBuffer) {
|
|
64
|
+
return bytesToBase64(new Uint8Array(value));
|
|
65
|
+
} else if (value instanceof Response || value instanceof Blob) {
|
|
66
|
+
return bytesToBase64(new Uint8Array(await value.arrayBuffer()));
|
|
67
|
+
} else if (value instanceof ReadableStream) {
|
|
68
|
+
return bytesToBase64(await consumeStream(value));
|
|
69
|
+
} else if (typeof value === "string") {
|
|
70
|
+
return base64Schema.parse(value);
|
|
71
|
+
} else {
|
|
72
|
+
value satisfies never;
|
|
73
|
+
throw new Error(`Unsupported image value type: ${typeof value}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { auditorsCreate } from "../../funcs/auditorsCreate.js";
|
|
6
|
+
import * as components from "../../models/components/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: components.AddAuditorInput$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$auditorsCreate: ToolDefinition<typeof args> = {
|
|
14
|
+
name: "auditors-create",
|
|
15
|
+
description: `Create an auditor
|
|
16
|
+
|
|
17
|
+
Create an auditor in Vanta.`,
|
|
18
|
+
args,
|
|
19
|
+
tool: async (client, args, ctx) => {
|
|
20
|
+
const [result, apiCall] = await auditorsCreate(
|
|
21
|
+
client,
|
|
22
|
+
args.request,
|
|
23
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
24
|
+
).$inspect();
|
|
25
|
+
|
|
26
|
+
if (!result.ok) {
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: "text", text: result.error.message }],
|
|
29
|
+
isError: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const value = result.value;
|
|
34
|
+
|
|
35
|
+
return formatResult(value, apiCall);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { auditsCreateCommentForEvidence } from "../../funcs/auditsCreateCommentForEvidence.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.CreateCommentForAuditEvidenceRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$auditsCreateCommentForEvidence: ToolDefinition<typeof args> =
|
|
14
|
+
{
|
|
15
|
+
name: "audits-create-comment-for-evidence",
|
|
16
|
+
description: `Create a comment for audit evidence
|
|
17
|
+
|
|
18
|
+
Create a comment in Vanta for a piece of evidence.`,
|
|
19
|
+
args,
|
|
20
|
+
tool: async (client, args, ctx) => {
|
|
21
|
+
const [result, apiCall] = await auditsCreateCommentForEvidence(
|
|
22
|
+
client,
|
|
23
|
+
args.request,
|
|
24
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
25
|
+
).$inspect();
|
|
26
|
+
|
|
27
|
+
if (!result.ok) {
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text: result.error.message }],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const value = result.value;
|
|
35
|
+
|
|
36
|
+
return formatResult(value, apiCall);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { auditsCreateCustomControl } from "../../funcs/auditsCreateCustomControl.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.CreateCustomControlRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$auditsCreateCustomControl: ToolDefinition<typeof args> = {
|
|
14
|
+
name: "audits-create-custom-control",
|
|
15
|
+
description: `Create a custom control for an audit
|
|
16
|
+
|
|
17
|
+
Create a custom control for an audit.`,
|
|
18
|
+
args,
|
|
19
|
+
tool: async (client, args, ctx) => {
|
|
20
|
+
const [result, apiCall] = await auditsCreateCustomControl(
|
|
21
|
+
client,
|
|
22
|
+
args.request,
|
|
23
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
24
|
+
).$inspect();
|
|
25
|
+
|
|
26
|
+
if (!result.ok) {
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: "text", text: result.error.message }],
|
|
29
|
+
isError: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const value = result.value;
|
|
34
|
+
|
|
35
|
+
return formatResult(value, apiCall);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { auditsCreateCustomEvidenceRequest } from "../../funcs/auditsCreateCustomEvidenceRequest.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.CreateCustomEvidenceRequestRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$auditsCreateCustomEvidenceRequest: ToolDefinition<
|
|
14
|
+
typeof args
|
|
15
|
+
> = {
|
|
16
|
+
name: "audits-create-custom-evidence-request",
|
|
17
|
+
description: `Create a custom evidence request for an audit
|
|
18
|
+
|
|
19
|
+
Create a custom evidence request for an audit.`,
|
|
20
|
+
args,
|
|
21
|
+
tool: async (client, args, ctx) => {
|
|
22
|
+
const [result, apiCall] = await auditsCreateCustomEvidenceRequest(
|
|
23
|
+
client,
|
|
24
|
+
args.request,
|
|
25
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
26
|
+
).$inspect();
|
|
27
|
+
|
|
28
|
+
if (!result.ok) {
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: "text", text: result.error.message }],
|
|
31
|
+
isError: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const value = result.value;
|
|
36
|
+
|
|
37
|
+
return formatResult(value, apiCall);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { auditsGetEvidenceUrls } from "../../funcs/auditsGetEvidenceUrls.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.ListAuditEvidenceUrlsRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$auditsGetEvidenceUrls: ToolDefinition<typeof args> = {
|
|
14
|
+
name: "audits-get-evidence-urls",
|
|
15
|
+
description: `List audit evidence url
|
|
16
|
+
|
|
17
|
+
Returns a paginated list of evidence urls for an audit. This endpoint should be called whenever an
|
|
18
|
+
evidence is created or has a statusUpdatedAt field that is more recent than the most recent polling event.`,
|
|
19
|
+
args,
|
|
20
|
+
tool: async (client, args, ctx) => {
|
|
21
|
+
const [result, apiCall] = await auditsGetEvidenceUrls(
|
|
22
|
+
client,
|
|
23
|
+
args.request,
|
|
24
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
25
|
+
).$inspect();
|
|
26
|
+
|
|
27
|
+
if (!result.ok) {
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text: result.error.message }],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const value = result.value;
|
|
35
|
+
|
|
36
|
+
return formatResult(value, apiCall);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { auditsList } from "../../funcs/auditsList.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.ListAuditsRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$auditsList: ToolDefinition<typeof args> = {
|
|
14
|
+
name: "audits-list",
|
|
15
|
+
description: `List audits
|
|
16
|
+
|
|
17
|
+
Returns a paginated list of audits scoped to the audit firm.`,
|
|
18
|
+
args,
|
|
19
|
+
tool: async (client, args, ctx) => {
|
|
20
|
+
const [result, apiCall] = await auditsList(
|
|
21
|
+
client,
|
|
22
|
+
args.request,
|
|
23
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
24
|
+
).$inspect();
|
|
25
|
+
|
|
26
|
+
if (!result.ok) {
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: "text", text: result.error.message }],
|
|
29
|
+
isError: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const value = result.value;
|
|
34
|
+
|
|
35
|
+
return formatResult(value, apiCall);
|
|
36
|
+
},
|
|
37
|
+
};
|