@greensecurity/javascript-sdk 0.16.0 → 0.18.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/REACT_QUERY.md +68 -30
- package/README.md +43 -0
- package/bin/mcp-server.js +731 -52
- package/bin/mcp-server.js.map +29 -19
- package/funcs/organizationsListOrSearchFacilities.d.ts +4 -1
- package/funcs/organizationsListOrSearchFacilities.d.ts.map +1 -1
- package/funcs/organizationsListOrSearchFacilities.js +46 -9
- package/funcs/organizationsListOrSearchFacilities.js.map +1 -1
- package/funcs/supportArticlesGetSupportArticle.js +1 -1
- package/funcs/supportArticlesGetSupportArticle.js.map +1 -1
- package/funcs/supportArticlesListOrSearchSupportArticles.d.ts +4 -1
- package/funcs/supportArticlesListOrSearchSupportArticles.d.ts.map +1 -1
- package/funcs/supportArticlesListOrSearchSupportArticles.js +42 -7
- package/funcs/supportArticlesListOrSearchSupportArticles.js.map +1 -1
- package/funcs/vendorsExpediteTimeRemaining.d.ts +17 -0
- package/funcs/vendorsExpediteTimeRemaining.d.ts.map +1 -0
- package/funcs/vendorsExpediteTimeRemaining.js +120 -0
- package/funcs/vendorsExpediteTimeRemaining.js.map +1 -0
- package/funcs/vendorsListVendorInvoices.d.ts +24 -0
- package/funcs/vendorsListVendorInvoices.d.ts.map +1 -0
- package/funcs/vendorsListVendorInvoices.js +166 -0
- package/funcs/vendorsListVendorInvoices.js.map +1 -0
- package/funcs/vendorsListVendorJobTitles.d.ts +4 -1
- package/funcs/vendorsListVendorJobTitles.d.ts.map +1 -1
- package/funcs/vendorsListVendorJobTitles.js +39 -6
- package/funcs/vendorsListVendorJobTitles.js.map +1 -1
- package/jsr.json +1 -1
- package/lib/config.d.ts +3 -3
- package/lib/config.js +3 -3
- package/mcp-server/extensions.d.ts +9 -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.js +1 -1
- package/mcp-server/resources.d.ts +9 -4
- package/mcp-server/resources.d.ts.map +1 -1
- package/mcp-server/resources.js +36 -9
- package/mcp-server/resources.js.map +1 -1
- package/mcp-server/server.d.ts.map +1 -1
- package/mcp-server/server.js +10 -1
- package/mcp-server/server.js.map +1 -1
- package/mcp-server/tools/organizationsListOrSearchFacilities.js +1 -1
- package/mcp-server/tools/organizationsListOrSearchFacilities.js.map +1 -1
- package/mcp-server/tools/supportArticlesListOrSearchSupportArticles.js +1 -1
- package/mcp-server/tools/supportArticlesListOrSearchSupportArticles.js.map +1 -1
- package/mcp-server/tools/vendorsExpediteTimeRemaining.d.ts +8 -0
- package/mcp-server/tools/vendorsExpediteTimeRemaining.d.ts.map +1 -0
- package/mcp-server/tools/vendorsExpediteTimeRemaining.js +64 -0
- package/mcp-server/tools/vendorsExpediteTimeRemaining.js.map +1 -0
- package/mcp-server/tools/vendorsListVendorInvoices.d.ts +8 -0
- package/mcp-server/tools/vendorsListVendorInvoices.d.ts.map +1 -0
- package/mcp-server/tools/vendorsListVendorInvoices.js +68 -0
- package/mcp-server/tools/vendorsListVendorInvoices.js.map +1 -0
- package/mcp-server/tools/vendorsListVendorJobTitles.js +1 -1
- package/mcp-server/tools/vendorsListVendorJobTitles.js.map +1 -1
- package/models/components/expand.d.ts +3 -0
- package/models/components/expand.d.ts.map +1 -1
- package/models/components/expand.js +1 -0
- package/models/components/expand.js.map +1 -1
- package/models/components/index.d.ts +2 -0
- package/models/components/index.d.ts.map +1 -1
- package/models/components/index.js +2 -0
- package/models/components/index.js.map +1 -1
- package/models/components/invoice.d.ts +43 -0
- package/models/components/invoice.d.ts.map +1 -0
- package/models/components/invoice.js +91 -0
- package/models/components/invoice.js.map +1 -0
- package/models/components/invoiceitem.d.ts +40 -0
- package/models/components/invoiceitem.d.ts.map +1 -0
- package/models/components/invoiceitem.js +94 -0
- package/models/components/invoiceitem.js.map +1 -0
- package/models/operations/expeditetimeremaining.d.ts +60 -0
- package/models/operations/expeditetimeremaining.d.ts.map +1 -0
- package/models/operations/expeditetimeremaining.js +113 -0
- package/models/operations/expeditetimeremaining.js.map +1 -0
- package/models/operations/index.d.ts +2 -0
- package/models/operations/index.d.ts.map +1 -1
- package/models/operations/index.js +2 -0
- package/models/operations/index.js.map +1 -1
- package/models/operations/listorsearchfacilities.d.ts +25 -0
- package/models/operations/listorsearchfacilities.d.ts.map +1 -1
- package/models/operations/listorsearchfacilities.js +36 -1
- package/models/operations/listorsearchfacilities.js.map +1 -1
- package/models/operations/listorsearchsupportarticles.d.ts +25 -0
- package/models/operations/listorsearchsupportarticles.d.ts.map +1 -1
- package/models/operations/listorsearchsupportarticles.js +36 -1
- package/models/operations/listorsearchsupportarticles.js.map +1 -1
- package/models/operations/listvendorinvoices.d.ts +116 -0
- package/models/operations/listvendorinvoices.d.ts.map +1 -0
- package/models/operations/listvendorinvoices.js +155 -0
- package/models/operations/listvendorinvoices.js.map +1 -0
- package/models/operations/listvendorjobtitles.d.ts +25 -0
- package/models/operations/listvendorjobtitles.d.ts.map +1 -1
- package/models/operations/listvendorjobtitles.js +36 -1
- package/models/operations/listvendorjobtitles.js.map +1 -1
- package/package.json +1 -1
- package/react-query/index.d.ts +2 -0
- package/react-query/index.d.ts.map +1 -1
- package/react-query/index.js +2 -0
- package/react-query/index.js.map +1 -1
- package/react-query/organizationsListOrSearchFacilities.d.ts +54 -3
- package/react-query/organizationsListOrSearchFacilities.d.ts.map +1 -1
- package/react-query/organizationsListOrSearchFacilities.js +89 -0
- package/react-query/organizationsListOrSearchFacilities.js.map +1 -1
- package/react-query/supportArticlesListOrSearchSupportArticles.d.ts +28 -3
- package/react-query/supportArticlesListOrSearchSupportArticles.d.ts.map +1 -1
- package/react-query/supportArticlesListOrSearchSupportArticles.js +58 -0
- package/react-query/supportArticlesListOrSearchSupportArticles.js.map +1 -1
- package/react-query/vendorsExpediteTimeRemaining.d.ts +30 -0
- package/react-query/vendorsExpediteTimeRemaining.d.ts.map +1 -0
- package/react-query/vendorsExpediteTimeRemaining.js +96 -0
- package/react-query/vendorsExpediteTimeRemaining.js.map +1 -0
- package/react-query/vendorsListVendorInvoices.d.ts +96 -0
- package/react-query/vendorsListVendorInvoices.d.ts.map +1 -0
- package/react-query/vendorsListVendorInvoices.js +178 -0
- package/react-query/vendorsListVendorInvoices.js.map +1 -0
- package/react-query/vendorsListVendorJobTitles.d.ts +28 -3
- package/react-query/vendorsListVendorJobTitles.d.ts.map +1 -1
- package/react-query/vendorsListVendorJobTitles.js +59 -0
- package/react-query/vendorsListVendorJobTitles.js.map +1 -1
- package/sdk/organizations.d.ts +4 -1
- package/sdk/organizations.d.ts.map +1 -1
- package/sdk/organizations.js +2 -1
- package/sdk/organizations.js.map +1 -1
- package/sdk/supportarticles.d.ts +4 -1
- package/sdk/supportarticles.d.ts.map +1 -1
- package/sdk/supportarticles.js +2 -1
- package/sdk/supportarticles.js.map +1 -1
- package/sdk/vendors.d.ts +24 -1
- package/sdk/vendors.d.ts.map +1 -1
- package/sdk/vendors.js +26 -1
- package/sdk/vendors.js.map +1 -1
- package/src/__tests__/supportarticles.test.ts +2 -1
- package/src/__tests__/vendors.test.ts +58 -1
- package/src/funcs/organizationsListOrSearchFacilities.ts +116 -42
- package/src/funcs/supportArticlesGetSupportArticle.ts +1 -1
- package/src/funcs/supportArticlesListOrSearchSupportArticles.ts +100 -31
- package/src/funcs/vendorsExpediteTimeRemaining.ts +171 -0
- package/src/funcs/vendorsListVendorInvoices.ts +255 -0
- package/src/funcs/vendorsListVendorJobTitles.ts +101 -33
- package/src/lib/config.ts +3 -3
- package/src/mcp-server/extensions.ts +13 -0
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/resources.ts +75 -14
- package/src/mcp-server/server.ts +20 -1
- package/src/mcp-server/tools/organizationsListOrSearchFacilities.ts +1 -1
- package/src/mcp-server/tools/supportArticlesListOrSearchSupportArticles.ts +1 -1
- package/src/mcp-server/tools/vendorsExpediteTimeRemaining.ts +37 -0
- package/src/mcp-server/tools/vendorsListVendorInvoices.ts +41 -0
- package/src/mcp-server/tools/vendorsListVendorJobTitles.ts +1 -1
- package/src/models/components/expand.ts +1 -0
- package/src/models/components/index.ts +2 -0
- package/src/models/components/invoice.ts +99 -0
- package/src/models/components/invoiceitem.ts +98 -0
- package/src/models/operations/expeditetimeremaining.ts +152 -0
- package/src/models/operations/index.ts +2 -0
- package/src/models/operations/listorsearchfacilities.ts +72 -0
- package/src/models/operations/listorsearchsupportarticles.ts +75 -0
- package/src/models/operations/listvendorinvoices.ts +252 -0
- package/src/models/operations/listvendorjobtitles.ts +68 -0
- package/src/react-query/index.ts +2 -0
- package/src/react-query/organizationsListOrSearchFacilities.ts +179 -1
- package/src/react-query/supportArticlesListOrSearchSupportArticles.ts +149 -1
- package/src/react-query/vendorsExpediteTimeRemaining.ts +165 -0
- package/src/react-query/vendorsListVendorInvoices.ts +364 -0
- package/src/react-query/vendorsListVendorJobTitles.ts +149 -1
- package/src/sdk/organizations.ts +5 -2
- package/src/sdk/supportarticles.ts +8 -2
- package/src/sdk/vendors.ts +47 -2
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { GreenSecurityCore } from "../core.js";
|
|
6
|
+
import { dlv } from "../lib/dlv.js";
|
|
6
7
|
import { encodeFormQuery } from "../lib/encodings.js";
|
|
7
8
|
import * as M from "../lib/matchers.js";
|
|
8
9
|
import { compactMap } from "../lib/primitives.js";
|
|
@@ -22,6 +23,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
|
|
|
22
23
|
import * as operations from "../models/operations/index.js";
|
|
23
24
|
import { APICall, APIPromise } from "../types/async.js";
|
|
24
25
|
import { Result } from "../types/fp.js";
|
|
26
|
+
import {
|
|
27
|
+
createPageIterator,
|
|
28
|
+
haltIterator,
|
|
29
|
+
PageIterator,
|
|
30
|
+
Paginator,
|
|
31
|
+
} from "../types/operations.js";
|
|
25
32
|
|
|
26
33
|
/**
|
|
27
34
|
* List vendor job titles
|
|
@@ -34,17 +41,20 @@ export function vendorsListVendorJobTitles(
|
|
|
34
41
|
request: operations.ListVendorJobTitlesRequest,
|
|
35
42
|
options?: RequestOptions,
|
|
36
43
|
): APIPromise<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
PageIterator<
|
|
45
|
+
Result<
|
|
46
|
+
operations.ListVendorJobTitlesResponse,
|
|
47
|
+
| errors.ApiErrorResponse
|
|
48
|
+
| errors.ApiErrorResponse
|
|
49
|
+
| APIError
|
|
50
|
+
| SDKValidationError
|
|
51
|
+
| UnexpectedClientError
|
|
52
|
+
| InvalidRequestError
|
|
53
|
+
| RequestAbortedError
|
|
54
|
+
| RequestTimeoutError
|
|
55
|
+
| ConnectionError
|
|
56
|
+
>,
|
|
57
|
+
{ page: number }
|
|
48
58
|
>
|
|
49
59
|
> {
|
|
50
60
|
return new APIPromise($do(
|
|
@@ -60,17 +70,20 @@ async function $do(
|
|
|
60
70
|
options?: RequestOptions,
|
|
61
71
|
): Promise<
|
|
62
72
|
[
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
PageIterator<
|
|
74
|
+
Result<
|
|
75
|
+
operations.ListVendorJobTitlesResponse,
|
|
76
|
+
| errors.ApiErrorResponse
|
|
77
|
+
| errors.ApiErrorResponse
|
|
78
|
+
| APIError
|
|
79
|
+
| SDKValidationError
|
|
80
|
+
| UnexpectedClientError
|
|
81
|
+
| InvalidRequestError
|
|
82
|
+
| RequestAbortedError
|
|
83
|
+
| RequestTimeoutError
|
|
84
|
+
| ConnectionError
|
|
85
|
+
>,
|
|
86
|
+
{ page: number }
|
|
74
87
|
>,
|
|
75
88
|
APICall,
|
|
76
89
|
]
|
|
@@ -82,7 +95,7 @@ async function $do(
|
|
|
82
95
|
"Input validation failed",
|
|
83
96
|
);
|
|
84
97
|
if (!parsed.ok) {
|
|
85
|
-
return [parsed, { status: "invalid" }];
|
|
98
|
+
return [haltIterator(parsed), { status: "invalid" }];
|
|
86
99
|
}
|
|
87
100
|
const payload = parsed.value;
|
|
88
101
|
const body = null;
|
|
@@ -125,7 +138,7 @@ async function $do(
|
|
|
125
138
|
timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
|
|
126
139
|
}, options);
|
|
127
140
|
if (!requestRes.ok) {
|
|
128
|
-
return [requestRes, { status: "invalid" }];
|
|
141
|
+
return [haltIterator(requestRes), { status: "invalid" }];
|
|
129
142
|
}
|
|
130
143
|
const req = requestRes.value;
|
|
131
144
|
|
|
@@ -136,7 +149,7 @@ async function $do(
|
|
|
136
149
|
retryCodes: context.retryCodes,
|
|
137
150
|
});
|
|
138
151
|
if (!doResult.ok) {
|
|
139
|
-
return [doResult, { status: "request-error", request: req }];
|
|
152
|
+
return [haltIterator(doResult), { status: "request-error", request: req }];
|
|
140
153
|
}
|
|
141
154
|
const response = doResult.value;
|
|
142
155
|
|
|
@@ -144,8 +157,8 @@ async function $do(
|
|
|
144
157
|
HttpMeta: { Response: response, Request: req },
|
|
145
158
|
};
|
|
146
159
|
|
|
147
|
-
const [result] = await M.match<
|
|
148
|
-
operations.
|
|
160
|
+
const [result, raw] = await M.match<
|
|
161
|
+
operations.ListVendorJobTitlesResponse,
|
|
149
162
|
| errors.ApiErrorResponse
|
|
150
163
|
| errors.ApiErrorResponse
|
|
151
164
|
| APIError
|
|
@@ -156,18 +169,73 @@ async function $do(
|
|
|
156
169
|
| RequestTimeoutError
|
|
157
170
|
| ConnectionError
|
|
158
171
|
>(
|
|
159
|
-
M.json(
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
),
|
|
172
|
+
M.json(200, operations.ListVendorJobTitlesResponse$inboundSchema, {
|
|
173
|
+
key: "Result",
|
|
174
|
+
}),
|
|
163
175
|
M.jsonErr(403, errors.ApiErrorResponse$inboundSchema),
|
|
164
176
|
M.jsonErr(500, errors.ApiErrorResponse$inboundSchema),
|
|
165
177
|
M.fail("4XX"),
|
|
166
178
|
M.fail("5XX"),
|
|
167
179
|
)(response, { extraFields: responseFields });
|
|
168
180
|
if (!result.ok) {
|
|
169
|
-
return [result, {
|
|
181
|
+
return [haltIterator(result), {
|
|
182
|
+
status: "complete",
|
|
183
|
+
request: req,
|
|
184
|
+
response,
|
|
185
|
+
}];
|
|
170
186
|
}
|
|
171
187
|
|
|
172
|
-
|
|
188
|
+
const nextFunc = (
|
|
189
|
+
responseData: unknown,
|
|
190
|
+
): {
|
|
191
|
+
next: Paginator<
|
|
192
|
+
Result<
|
|
193
|
+
operations.ListVendorJobTitlesResponse,
|
|
194
|
+
| errors.ApiErrorResponse
|
|
195
|
+
| errors.ApiErrorResponse
|
|
196
|
+
| APIError
|
|
197
|
+
| SDKValidationError
|
|
198
|
+
| UnexpectedClientError
|
|
199
|
+
| InvalidRequestError
|
|
200
|
+
| RequestAbortedError
|
|
201
|
+
| RequestTimeoutError
|
|
202
|
+
| ConnectionError
|
|
203
|
+
>
|
|
204
|
+
>;
|
|
205
|
+
"~next"?: { page: number };
|
|
206
|
+
} => {
|
|
207
|
+
const page = request?.page ?? 1;
|
|
208
|
+
const nextPage = page + 1;
|
|
209
|
+
|
|
210
|
+
if (!responseData) {
|
|
211
|
+
return { next: () => null };
|
|
212
|
+
}
|
|
213
|
+
const results = dlv(responseData, "items");
|
|
214
|
+
if (!Array.isArray(results) || !results.length) {
|
|
215
|
+
return { next: () => null };
|
|
216
|
+
}
|
|
217
|
+
const limit = request?.itemsPerPage ?? 0;
|
|
218
|
+
if (results.length < limit) {
|
|
219
|
+
return { next: () => null };
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const nextVal = () =>
|
|
223
|
+
vendorsListVendorJobTitles(
|
|
224
|
+
client,
|
|
225
|
+
{
|
|
226
|
+
...request,
|
|
227
|
+
page: nextPage,
|
|
228
|
+
},
|
|
229
|
+
options,
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
return { next: nextVal, "~next": { page: nextPage } };
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const page = { ...result, ...nextFunc(raw) };
|
|
236
|
+
return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, {
|
|
237
|
+
status: "complete",
|
|
238
|
+
request: req,
|
|
239
|
+
response,
|
|
240
|
+
}];
|
|
173
241
|
}
|
package/src/lib/config.ts
CHANGED
|
@@ -72,8 +72,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
|
|
|
72
72
|
export const SDK_METADATA = {
|
|
73
73
|
language: "typescript",
|
|
74
74
|
openapiDocVersion: "0.0.3",
|
|
75
|
-
sdkVersion: "0.
|
|
76
|
-
genVersion: "2.
|
|
75
|
+
sdkVersion: "0.18.0",
|
|
76
|
+
genVersion: "2.545.4",
|
|
77
77
|
userAgent:
|
|
78
|
-
"speakeasy-sdk/typescript 0.
|
|
78
|
+
"speakeasy-sdk/typescript 0.18.0 2.545.4 0.0.3 @greensecurity/javascript-sdk",
|
|
79
79
|
} as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { ZodRawShape } from "zod";
|
|
6
|
+
import { ResourceDefinition, ResourceTemplateDefinition } from "./resources.js";
|
|
7
|
+
import { ToolDefinition } from "./tools.js";
|
|
8
|
+
|
|
9
|
+
export type Register = {
|
|
10
|
+
tool: <A extends ZodRawShape | undefined>(def: ToolDefinition<A>) => void;
|
|
11
|
+
resource: (def: ResourceDefinition) => void;
|
|
12
|
+
resourceTemplate: (def: ResourceTemplateDefinition) => void;
|
|
13
|
+
};
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
McpServer,
|
|
7
|
+
ResourceMetadata,
|
|
8
|
+
ResourceTemplate,
|
|
9
|
+
} from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
10
|
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
7
11
|
import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
|
|
8
12
|
import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
|
|
9
13
|
import { GreenSecurityCore } from "../core.js";
|
|
10
|
-
import {
|
|
14
|
+
import { ConsoleLogger } from "./console-logger.js";
|
|
11
15
|
import { MCPScope } from "./scopes.js";
|
|
12
16
|
import { isAsyncIterable, isBinaryData, valueToBase64 } from "./shared.js";
|
|
13
17
|
|
|
@@ -19,7 +23,8 @@ export type ReadResourceCallback = (
|
|
|
19
23
|
|
|
20
24
|
export type ResourceDefinition = {
|
|
21
25
|
name: string;
|
|
22
|
-
description
|
|
26
|
+
description?: string;
|
|
27
|
+
metadata?: ResourceMetadata;
|
|
23
28
|
scopes?: MCPScope[];
|
|
24
29
|
resource: string;
|
|
25
30
|
read: ReadResourceCallback;
|
|
@@ -35,30 +40,27 @@ export type ReadResourceTemplateCallback = (
|
|
|
35
40
|
export type ResourceTemplateDefinition = {
|
|
36
41
|
name: string;
|
|
37
42
|
description: string;
|
|
43
|
+
metadata?: ResourceMetadata;
|
|
38
44
|
scopes?: MCPScope[];
|
|
39
45
|
resource: ResourceTemplate;
|
|
40
46
|
read: ReadResourceTemplateCallback;
|
|
41
47
|
};
|
|
42
48
|
|
|
43
49
|
export async function formatResult(
|
|
44
|
-
|
|
50
|
+
value: unknown,
|
|
45
51
|
uri: URL,
|
|
46
|
-
init: { response?: Response | undefined },
|
|
52
|
+
init: { mimeType?: string | undefined; response?: Response | undefined },
|
|
47
53
|
): Promise<ReadResourceResult> {
|
|
48
|
-
if (!result.ok) {
|
|
49
|
-
throw result.error;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const { value } = result;
|
|
53
54
|
if (typeof value === "undefined") {
|
|
54
55
|
return { contents: [] };
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
const { response } = init;
|
|
58
|
-
const mimeType = response?.headers.get("content-type") ?? "";
|
|
59
58
|
let contents: ReadResourceResult["contents"] = [];
|
|
60
59
|
|
|
61
|
-
|
|
60
|
+
const mimeType = init.mimeType ?? init.response?.headers.get("content-type")
|
|
61
|
+
?? "";
|
|
62
|
+
|
|
63
|
+
if (mimeType.search(/\bjson\b/g) !== -1) {
|
|
62
64
|
contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }];
|
|
63
65
|
} else if (
|
|
64
66
|
mimeType.startsWith("text/event-stream")
|
|
@@ -71,7 +73,10 @@ export async function formatResult(
|
|
|
71
73
|
text: await stringifySSEToJSON(value),
|
|
72
74
|
},
|
|
73
75
|
];
|
|
74
|
-
} else if (
|
|
76
|
+
} else if (
|
|
77
|
+
(mimeType.startsWith("text/") || mimeType.startsWith("application/"))
|
|
78
|
+
&& typeof value === "string"
|
|
79
|
+
) {
|
|
75
80
|
contents = [{ uri: uri.toString(), mimeType, text: value }];
|
|
76
81
|
} else if (isBinaryData(value)) {
|
|
77
82
|
const blob = await valueToBase64(value);
|
|
@@ -94,3 +99,59 @@ async function stringifySSEToJSON(
|
|
|
94
99
|
|
|
95
100
|
return JSON.stringify(payloads);
|
|
96
101
|
}
|
|
102
|
+
|
|
103
|
+
export function createRegisterResource(
|
|
104
|
+
logger: ConsoleLogger,
|
|
105
|
+
server: McpServer,
|
|
106
|
+
sdk: GreenSecurityCore,
|
|
107
|
+
allowedScopes: Set<MCPScope>,
|
|
108
|
+
): (resource: ResourceDefinition) => void {
|
|
109
|
+
return (resource: ResourceDefinition): void => {
|
|
110
|
+
const scopes = resource.scopes ?? [];
|
|
111
|
+
if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const metadata: ResourceMetadata = {
|
|
116
|
+
...resource.metadata,
|
|
117
|
+
description: resource.description,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
server.resource(
|
|
121
|
+
resource.name,
|
|
122
|
+
resource.resource,
|
|
123
|
+
metadata,
|
|
124
|
+
async (uri, ctx) => resource.read(sdk, uri, ctx),
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
logger.debug("Registered resource", { name: resource.name });
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function createRegisterResourceTemplate(
|
|
132
|
+
logger: ConsoleLogger,
|
|
133
|
+
server: McpServer,
|
|
134
|
+
sdk: GreenSecurityCore,
|
|
135
|
+
allowedScopes: Set<MCPScope>,
|
|
136
|
+
): (resource: ResourceTemplateDefinition) => void {
|
|
137
|
+
return (resource: ResourceTemplateDefinition): void => {
|
|
138
|
+
const scopes = resource.scopes ?? [];
|
|
139
|
+
if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const metadata: ResourceMetadata = {
|
|
144
|
+
...resource.metadata,
|
|
145
|
+
description: resource.description,
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
server.resource(
|
|
149
|
+
resource.name,
|
|
150
|
+
resource.resource,
|
|
151
|
+
metadata,
|
|
152
|
+
async (uri, vars, ctx) => resource.read(sdk, uri, vars, ctx),
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
logger.debug("Registered resource template", { name: resource.name });
|
|
156
|
+
};
|
|
157
|
+
}
|
package/src/mcp-server/server.ts
CHANGED
|
@@ -6,6 +6,10 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
6
6
|
import { GreenSecurityCore } from "../core.js";
|
|
7
7
|
import { SDKOptions } from "../lib/config.js";
|
|
8
8
|
import type { ConsoleLogger } from "./console-logger.js";
|
|
9
|
+
import {
|
|
10
|
+
createRegisterResource,
|
|
11
|
+
createRegisterResourceTemplate,
|
|
12
|
+
} from "./resources.js";
|
|
9
13
|
import { MCPScope, mcpScopes } from "./scopes.js";
|
|
10
14
|
import { createRegisterTool } from "./tools.js";
|
|
11
15
|
import { tool$organizationsGetFacility } from "./tools/organizationsGetFacility.js";
|
|
@@ -19,7 +23,9 @@ import { tool$usersMagiclink } from "./tools/usersMagiclink.js";
|
|
|
19
23
|
import { tool$usersPassword } from "./tools/usersPassword.js";
|
|
20
24
|
import { tool$usersPasswordResetRequest } from "./tools/usersPasswordResetRequest.js";
|
|
21
25
|
import { tool$vendorsCreateVendorRegistration } from "./tools/vendorsCreateVendorRegistration.js";
|
|
26
|
+
import { tool$vendorsExpediteTimeRemaining } from "./tools/vendorsExpediteTimeRemaining.js";
|
|
22
27
|
import { tool$vendorsListVendorCredentials } from "./tools/vendorsListVendorCredentials.js";
|
|
28
|
+
import { tool$vendorsListVendorInvoices } from "./tools/vendorsListVendorInvoices.js";
|
|
23
29
|
import { tool$vendorsListVendorJobTitles } from "./tools/vendorsListVendorJobTitles.js";
|
|
24
30
|
|
|
25
31
|
export function createMCPServer(deps: {
|
|
@@ -32,7 +38,7 @@ export function createMCPServer(deps: {
|
|
|
32
38
|
}) {
|
|
33
39
|
const server = new McpServer({
|
|
34
40
|
name: "GreenSecurity",
|
|
35
|
-
version: "0.
|
|
41
|
+
version: "0.18.0",
|
|
36
42
|
});
|
|
37
43
|
|
|
38
44
|
const client = new GreenSecurityCore({
|
|
@@ -40,7 +46,9 @@ export function createMCPServer(deps: {
|
|
|
40
46
|
serverURL: deps.serverURL,
|
|
41
47
|
serverIdx: deps.serverIdx,
|
|
42
48
|
});
|
|
49
|
+
|
|
43
50
|
const scopes = new Set(deps.scopes ?? mcpScopes);
|
|
51
|
+
|
|
44
52
|
const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
|
|
45
53
|
const tool = createRegisterTool(
|
|
46
54
|
deps.logger,
|
|
@@ -49,10 +57,21 @@ export function createMCPServer(deps: {
|
|
|
49
57
|
scopes,
|
|
50
58
|
allowedTools,
|
|
51
59
|
);
|
|
60
|
+
const resource = createRegisterResource(deps.logger, server, client, scopes);
|
|
61
|
+
const resourceTemplate = createRegisterResourceTemplate(
|
|
62
|
+
deps.logger,
|
|
63
|
+
server,
|
|
64
|
+
client,
|
|
65
|
+
scopes,
|
|
66
|
+
);
|
|
67
|
+
const register = { tool, resource, resourceTemplate };
|
|
68
|
+
void register; // suppress unused warnings
|
|
52
69
|
|
|
53
70
|
tool(tool$vendorsCreateVendorRegistration);
|
|
54
71
|
tool(tool$vendorsListVendorJobTitles);
|
|
55
72
|
tool(tool$vendorsListVendorCredentials);
|
|
73
|
+
tool(tool$vendorsExpediteTimeRemaining);
|
|
74
|
+
tool(tool$vendorsListVendorInvoices);
|
|
56
75
|
tool(tool$usersGetCurrentUser);
|
|
57
76
|
tool(tool$usersGetUserById);
|
|
58
77
|
tool(tool$usersLogsUserIntoTheSystem);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { vendorsExpediteTimeRemaining } from "../../funcs/vendorsExpediteTimeRemaining.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.ExpediteTimeRemainingRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$vendorsExpediteTimeRemaining: ToolDefinition<typeof args> = {
|
|
14
|
+
name: "vendors_expedite-time-remaining",
|
|
15
|
+
description: `Expedite time remaining
|
|
16
|
+
|
|
17
|
+
For vendors who have a paid 24-hour expedite credentials invoice, get the remaining time (in seconds) for which submitted credentials will be expedited.`,
|
|
18
|
+
args,
|
|
19
|
+
tool: async (client, args, ctx) => {
|
|
20
|
+
const [result, apiCall] = await vendorsExpediteTimeRemaining(
|
|
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,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { vendorsListVendorInvoices } from "../../funcs/vendorsListVendorInvoices.js";
|
|
6
|
+
import * as operations from "../../models/operations/index.js";
|
|
7
|
+
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
|
+
|
|
9
|
+
const args = {
|
|
10
|
+
request: operations.ListVendorInvoicesRequest$inboundSchema,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const tool$vendorsListVendorInvoices: ToolDefinition<typeof args> = {
|
|
14
|
+
name: "vendors_list-vendor-invoices",
|
|
15
|
+
description: `List vendor invoices
|
|
16
|
+
|
|
17
|
+
List invoices for Vendors
|
|
18
|
+
|
|
19
|
+
Available \`expand\` scopes are:
|
|
20
|
+
|
|
21
|
+
invoice.line_items`,
|
|
22
|
+
args,
|
|
23
|
+
tool: async (client, args, ctx) => {
|
|
24
|
+
const [result, apiCall] = await vendorsListVendorInvoices(
|
|
25
|
+
client,
|
|
26
|
+
args.request,
|
|
27
|
+
{ fetchOptions: { signal: ctx.signal } },
|
|
28
|
+
).$inspect();
|
|
29
|
+
|
|
30
|
+
if (!result.ok) {
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: result.error.message }],
|
|
33
|
+
isError: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const value = result.value.result;
|
|
38
|
+
|
|
39
|
+
return formatResult(value, apiCall);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
@@ -30,6 +30,7 @@ export const Expand = {
|
|
|
30
30
|
SupportArticlePublished: "support_article.published",
|
|
31
31
|
SupportArticleNotes: "support_article.notes",
|
|
32
32
|
SupportArticleSupportCategory: "support_article.support_category",
|
|
33
|
+
InvoiceLineItems: "invoice.line_items",
|
|
33
34
|
} as const;
|
|
34
35
|
/**
|
|
35
36
|
* An expansion scope that is valid for the object being requested.
|
|
@@ -12,6 +12,8 @@ export * from "./expand.js";
|
|
|
12
12
|
export * from "./facility.js";
|
|
13
13
|
export * from "./facilitysummary.js";
|
|
14
14
|
export * from "./imageset.js";
|
|
15
|
+
export * from "./invoice.js";
|
|
16
|
+
export * from "./invoiceitem.js";
|
|
15
17
|
export * from "./loginemailandpassword.js";
|
|
16
18
|
export * from "./loginrequirementsfromemail.js";
|
|
17
19
|
export * from "./mfarequiredresponse.js";
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as z from "zod";
|
|
6
|
+
import { remap as remap$ } from "../../lib/primitives.js";
|
|
7
|
+
import { safeParse } from "../../lib/schemas.js";
|
|
8
|
+
import { Result as SafeParseResult } from "../../types/fp.js";
|
|
9
|
+
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
|
|
10
|
+
import {
|
|
11
|
+
InvoiceItem,
|
|
12
|
+
InvoiceItem$inboundSchema,
|
|
13
|
+
InvoiceItem$Outbound,
|
|
14
|
+
InvoiceItem$outboundSchema,
|
|
15
|
+
} from "./invoiceitem.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A simplified representation of an Invoice
|
|
19
|
+
*/
|
|
20
|
+
export type Invoice = {
|
|
21
|
+
id: number;
|
|
22
|
+
invoiceNumber?: string | null | undefined;
|
|
23
|
+
amount?: number | null | undefined;
|
|
24
|
+
status?: string | null | undefined;
|
|
25
|
+
financialStatus?: string | null | undefined;
|
|
26
|
+
items?: Array<InvoiceItem> | undefined;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** @internal */
|
|
30
|
+
export const Invoice$inboundSchema: z.ZodType<Invoice, z.ZodTypeDef, unknown> =
|
|
31
|
+
z.object({
|
|
32
|
+
id: z.number().int(),
|
|
33
|
+
invoice_number: z.nullable(z.string()).optional(),
|
|
34
|
+
amount: z.nullable(z.number().int()).optional(),
|
|
35
|
+
status: z.nullable(z.string()).optional(),
|
|
36
|
+
financial_status: z.nullable(z.string()).optional(),
|
|
37
|
+
items: z.array(InvoiceItem$inboundSchema).optional(),
|
|
38
|
+
}).transform((v) => {
|
|
39
|
+
return remap$(v, {
|
|
40
|
+
"invoice_number": "invoiceNumber",
|
|
41
|
+
"financial_status": "financialStatus",
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
/** @internal */
|
|
46
|
+
export type Invoice$Outbound = {
|
|
47
|
+
id: number;
|
|
48
|
+
invoice_number?: string | null | undefined;
|
|
49
|
+
amount?: number | null | undefined;
|
|
50
|
+
status?: string | null | undefined;
|
|
51
|
+
financial_status?: string | null | undefined;
|
|
52
|
+
items?: Array<InvoiceItem$Outbound> | undefined;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** @internal */
|
|
56
|
+
export const Invoice$outboundSchema: z.ZodType<
|
|
57
|
+
Invoice$Outbound,
|
|
58
|
+
z.ZodTypeDef,
|
|
59
|
+
Invoice
|
|
60
|
+
> = z.object({
|
|
61
|
+
id: z.number().int(),
|
|
62
|
+
invoiceNumber: z.nullable(z.string()).optional(),
|
|
63
|
+
amount: z.nullable(z.number().int()).optional(),
|
|
64
|
+
status: z.nullable(z.string()).optional(),
|
|
65
|
+
financialStatus: z.nullable(z.string()).optional(),
|
|
66
|
+
items: z.array(InvoiceItem$outboundSchema).optional(),
|
|
67
|
+
}).transform((v) => {
|
|
68
|
+
return remap$(v, {
|
|
69
|
+
invoiceNumber: "invoice_number",
|
|
70
|
+
financialStatus: "financial_status",
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @internal
|
|
76
|
+
* @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module.
|
|
77
|
+
*/
|
|
78
|
+
export namespace Invoice$ {
|
|
79
|
+
/** @deprecated use `Invoice$inboundSchema` instead. */
|
|
80
|
+
export const inboundSchema = Invoice$inboundSchema;
|
|
81
|
+
/** @deprecated use `Invoice$outboundSchema` instead. */
|
|
82
|
+
export const outboundSchema = Invoice$outboundSchema;
|
|
83
|
+
/** @deprecated use `Invoice$Outbound` instead. */
|
|
84
|
+
export type Outbound = Invoice$Outbound;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function invoiceToJSON(invoice: Invoice): string {
|
|
88
|
+
return JSON.stringify(Invoice$outboundSchema.parse(invoice));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function invoiceFromJSON(
|
|
92
|
+
jsonString: string,
|
|
93
|
+
): SafeParseResult<Invoice, SDKValidationError> {
|
|
94
|
+
return safeParse(
|
|
95
|
+
jsonString,
|
|
96
|
+
(x) => Invoice$inboundSchema.parse(JSON.parse(x)),
|
|
97
|
+
`Failed to parse 'Invoice' from JSON`,
|
|
98
|
+
);
|
|
99
|
+
}
|