@mintlify/validation 0.1.492 → 0.1.493

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.
@@ -0,0 +1,8 @@
1
+ import { ExampleOrRefObject, RefUuidMap, UUIDObjectHashMap, HashedNodeMap, UUID } from './types/index.js';
2
+ export declare const mapExample: ({ example, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }: {
3
+ example: ExampleOrRefObject;
4
+ refUuidMap: RefUuidMap;
5
+ uuidObjectHashMap: UUIDObjectHashMap;
6
+ hashedNodeMap: HashedNodeMap;
7
+ uuid: UUID;
8
+ }) => void;
@@ -0,0 +1,20 @@
1
+ import hash from 'object-hash';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ export const mapExample = ({ example, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }) => {
4
+ const objectHash = hash(example);
5
+ uuidObjectHashMap[uuid] = objectHash;
6
+ // if we've seen this exact object before, skip processing
7
+ if (objectHash in hashedNodeMap) {
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ example = objectHash;
10
+ return;
11
+ }
12
+ // if ref, replace with uuid
13
+ if ('$ref' in example) {
14
+ const refId = example.$ref;
15
+ const refUuid = refUuidMap[refId] || uuidv4();
16
+ example.$ref = refUuid;
17
+ }
18
+ // add to hashedNodeMap
19
+ hashedNodeMap[objectHash] = example;
20
+ };
@@ -0,0 +1,8 @@
1
+ import { HashedNodeMap, HeaderOrRefObject, RefUuidMap, UUIDObjectHashMap, UUID } from './types/index.js';
2
+ export declare const mapHeader: ({ header, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }: {
3
+ header: HeaderOrRefObject;
4
+ refUuidMap: RefUuidMap;
5
+ uuidObjectHashMap: UUIDObjectHashMap;
6
+ hashedNodeMap: HashedNodeMap;
7
+ uuid: UUID;
8
+ }) => void;
@@ -0,0 +1,57 @@
1
+ import hash from 'object-hash';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { mapExample } from './mapExample.js';
4
+ import { mapMedia } from './mapMedia.js';
5
+ import { mapSchema } from './mapSchema.js';
6
+ export const mapHeader = ({ header, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }) => {
7
+ // hash the raw object
8
+ const objectHash = hash(header);
9
+ // map uuid and hash to uuidObjectHashMap
10
+ uuidObjectHashMap[uuid] = objectHash;
11
+ // if ref, replace with uuid
12
+ if ('$ref' in header) {
13
+ const refId = header.$ref;
14
+ const refUuid = refUuidMap[refId] || uuidv4();
15
+ header.$ref = refUuid;
16
+ }
17
+ // if not ref
18
+ // if schema in header, create SchemaOrRef node
19
+ if ('schema' in header && header.schema && typeof header.schema === 'object') {
20
+ const uuid = uuidv4();
21
+ mapSchema({
22
+ schema: header.schema,
23
+ refUuidMap,
24
+ uuidObjectHashMap,
25
+ hashedNodeMap,
26
+ uuid,
27
+ });
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ header.schema = uuid;
30
+ }
31
+ // if examples in header, create ExampleOrRef node
32
+ if ('examples' in header && header.examples && typeof header.examples === 'object') {
33
+ Object.entries(header.examples).forEach(([exampleName, example]) => {
34
+ const uuid = uuidv4();
35
+ mapExample({ example, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid });
36
+ if (header.examples) {
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ header.examples[exampleName] = uuid;
39
+ }
40
+ });
41
+ }
42
+ // if content in header, create Media node
43
+ if ('content' in header && header.content && typeof header.content === 'object') {
44
+ Object.entries(header.content).forEach(([contentType, content]) => {
45
+ const uuid = uuidv4();
46
+ mapMedia({ content, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid });
47
+ if (header.content) {
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ header.content[contentType] = uuid;
50
+ }
51
+ });
52
+ }
53
+ // if encoding in header, create Encoding node
54
+ // TODO: add support for encoding
55
+ // add to hashedNodeMap
56
+ hashedNodeMap[objectHash] = header;
57
+ };
@@ -0,0 +1,8 @@
1
+ import { HashedNodeMap, MediaObject, RefUuidMap, UUIDObjectHashMap, UUID } from './types/index.js';
2
+ export declare const mapMedia: ({ content, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }: {
3
+ content: MediaObject;
4
+ refUuidMap: RefUuidMap;
5
+ uuidObjectHashMap: UUIDObjectHashMap;
6
+ hashedNodeMap: HashedNodeMap;
7
+ uuid: UUID;
8
+ }) => void;
@@ -0,0 +1,36 @@
1
+ import hash from 'object-hash';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { mapExample } from './mapExample.js';
4
+ import { mapSchema } from './mapSchema.js';
5
+ export const mapMedia = ({ content, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }) => {
6
+ const objectHash = hash(content);
7
+ uuidObjectHashMap[uuid] = objectHash;
8
+ // if we've seen this exact object before, skip processing
9
+ if (objectHash in hashedNodeMap) {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ content = objectHash;
12
+ return;
13
+ }
14
+ // if schema in media, create SchemaOrRef node
15
+ if ('schema' in content && content.schema && typeof content.schema === 'object') {
16
+ const uuid = uuidv4();
17
+ mapSchema({ schema: content.schema, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid });
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ content.schema = uuid;
20
+ }
21
+ // if examples in media, create ExampleOrRef node
22
+ if ('examples' in content && content.examples && typeof content.examples === 'object') {
23
+ Object.entries(content.examples).forEach(([exampleName, example]) => {
24
+ const uuid = uuidv4();
25
+ mapExample({ example, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid });
26
+ if (content.examples) {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ content.examples[exampleName] = uuid;
29
+ }
30
+ });
31
+ }
32
+ // if encoding in media, create Encoding node
33
+ // TODO: add support for encoding
34
+ // add to hashedNodeMap
35
+ hashedNodeMap[objectHash] = content;
36
+ };
@@ -0,0 +1,8 @@
1
+ import { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
2
+ import { RefUuidMap, UUIDObjectHashMap, HashedNodeMap } from './types/index.js';
3
+ export declare const mapResponseComponents: ({ spec, refUuidMap, uuidObjectHashMap, hashedNodeMap, }: {
4
+ spec: OpenAPIV3.Document | OpenAPIV3_1.Document;
5
+ refUuidMap: RefUuidMap;
6
+ uuidObjectHashMap: UUIDObjectHashMap;
7
+ hashedNodeMap: HashedNodeMap;
8
+ }) => void;
@@ -0,0 +1,51 @@
1
+ import hash from 'object-hash';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { mapHeader } from './mapHeader.js';
4
+ import { mapMedia } from './mapMedia.js';
5
+ export const mapResponseComponents = ({ spec, refUuidMap, uuidObjectHashMap, hashedNodeMap, }) => {
6
+ var _a;
7
+ const responseComponents = (_a = spec.components) === null || _a === void 0 ? void 0 : _a.responses;
8
+ if (!responseComponents)
9
+ return;
10
+ // for each response component
11
+ Object.entries(responseComponents).forEach(([responseName, response]) => {
12
+ // match the refId to uuid
13
+ const refId = `#/components/responses/${responseName}`;
14
+ const uuid = refUuidMap[refId] || uuidv4();
15
+ // hash the raw object
16
+ const objectHash = hash(response);
17
+ // map uuid and hash to uuidObjectHashMap
18
+ uuidObjectHashMap[uuid] = objectHash;
19
+ // if ref, replace with uuid
20
+ if ('$ref' in response) {
21
+ const refId = response.$ref;
22
+ const uuid = refUuidMap[refId] || uuidv4();
23
+ response.$ref = uuid;
24
+ }
25
+ // if not ref
26
+ // if headers, convert headers to HeaderOrRef nodes
27
+ if ('headers' in response && response.headers && typeof response.headers === 'object') {
28
+ Object.entries(response.headers).forEach(([headerName, header]) => {
29
+ const uuid = uuidv4();
30
+ mapHeader({ header, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid });
31
+ if (response.headers) {
32
+ response.headers[headerName] = uuid;
33
+ }
34
+ });
35
+ }
36
+ // if content, convert content to Media nodes
37
+ if ('content' in response && response.content && typeof response.content === 'object') {
38
+ Object.entries(response.content).forEach(([contentType, content]) => {
39
+ const uuid = uuidv4();
40
+ mapMedia({ content, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid });
41
+ if (response.content) {
42
+ response.content[contentType] = uuid;
43
+ }
44
+ });
45
+ }
46
+ // if links, convert links to Link nodes
47
+ // TODO: add support for links
48
+ // add to hashedNodeMap
49
+ hashedNodeMap[objectHash] = response;
50
+ });
51
+ };
@@ -0,0 +1,8 @@
1
+ import { SchemaOrRefObject, RefUuidMap, UUIDObjectHashMap, HashedNodeMap, UUID } from './types/index.js';
2
+ export declare const mapSchema: ({ schema, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }: {
3
+ schema: SchemaOrRefObject;
4
+ refUuidMap: RefUuidMap;
5
+ uuidObjectHashMap: UUIDObjectHashMap;
6
+ hashedNodeMap: HashedNodeMap;
7
+ uuid: UUID;
8
+ }) => void;
@@ -0,0 +1,15 @@
1
+ import hash from 'object-hash';
2
+ import { replaceSchemaRefs } from './replaceSchemaRefs.js';
3
+ export const mapSchema = ({ schema, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }) => {
4
+ const objectHash = hash(schema);
5
+ uuidObjectHashMap[uuid] = objectHash;
6
+ // if objectHash already exists, replace with hash ref
7
+ if (objectHash in hashedNodeMap) {
8
+ // if we found a duplicate hash we can assume the schema has already been processed to remove refs, so we can quit here and don't need to process it again or add a new entry
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ schema = objectHash;
11
+ return;
12
+ }
13
+ replaceSchemaRefs({ schema, refUuidMap });
14
+ hashedNodeMap[objectHash] = schema;
15
+ };
@@ -0,0 +1,8 @@
1
+ import { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
2
+ import { RefUuidMap, UUIDObjectHashMap, HashedNodeMap } from './types/index.js';
3
+ export declare const mapSchemaComponents: ({ spec, refUuidMap, uuidObjectHashMap, hashedNodeMap, }: {
4
+ spec: OpenAPIV3.Document | OpenAPIV3_1.Document;
5
+ refUuidMap: RefUuidMap;
6
+ uuidObjectHashMap: UUIDObjectHashMap;
7
+ hashedNodeMap: HashedNodeMap;
8
+ }) => void;
@@ -0,0 +1,22 @@
1
+ import hash from 'object-hash';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { replaceSchemaRefs } from './replaceSchemaRefs.js';
4
+ export const mapSchemaComponents = ({ spec, refUuidMap, uuidObjectHashMap, hashedNodeMap, }) => {
5
+ var _a;
6
+ const schemaComponents = (_a = spec.components) === null || _a === void 0 ? void 0 : _a.schemas;
7
+ if (!schemaComponents)
8
+ return;
9
+ Object.entries(schemaComponents).forEach(([schemaName, schema]) => {
10
+ // match the refId to uuid
11
+ const refId = `#/components/schemas/${schemaName}`;
12
+ const uuid = refUuidMap[refId] || uuidv4();
13
+ // hash the raw object
14
+ const objectHash = hash(schema);
15
+ // map uuid and hash to uuidObjectHashMap
16
+ uuidObjectHashMap[uuid] = objectHash;
17
+ // replace refs in schema nodes with uuids
18
+ replaceSchemaRefs({ schema, refUuidMap });
19
+ // add to hashedNodeMap
20
+ hashedNodeMap[objectHash] = schema;
21
+ });
22
+ };
@@ -1,4 +1,6 @@
1
1
  import { buildRefUuidMap } from './buildRefUuidMap.js';
2
+ import { mapResponseComponents } from './mapResponseComponents.js';
3
+ import { mapSchemaComponents } from './mapSchemaComponents.js';
2
4
  export const openApiToSchemaGraph = ({ spec, filename, originalFileLocation, }) => {
3
5
  // build map of component refs -> uuids
4
6
  // eslint-disable-next-line unused-imports/no-unused-vars
@@ -16,11 +18,13 @@ export const openApiToSchemaGraph = ({ spec, filename, originalFileLocation, })
16
18
  // add to uuid and object hash maps
17
19
  // (starting with the components section, which already have uuids in refUuidMap)
18
20
  // document.components.schemas -> Schema
19
- // document.components.responses -> Response, possibly Parameter, Schema, Example, Media, Encoding
21
+ mapSchemaComponents({ spec, refUuidMap, uuidObjectHashMap, hashedNodeMap });
22
+ // document.components.responses -> Response, possibly Header, Schema, Example, Media, Encoding
23
+ mapResponseComponents({ spec, refUuidMap, uuidObjectHashMap, hashedNodeMap });
20
24
  // document.components.parameters -> Parameter, possibly Schema, Example, Media, Encoding
21
25
  // document.components.examples -> Example
22
26
  // document.components.requestBodies -> RequestBody, possibly Media, Schema, Example, Encoding
23
- // document.components.headers -> Parameter, possibly Schema, Example, Media, Encoding
27
+ // document.components.headers -> Header, possibly Schema, Example, Media, Encoding
24
28
  // document.components.securitySchemes -> SecurityScheme
25
29
  // document.components.links -> TODO (unsupported)
26
30
  // document.components.callbacks -> TODO (unsupported)
@@ -0,0 +1,5 @@
1
+ import { RefUuidMap, SchemaOrRefObject } from './types/index.js';
2
+ export declare const replaceSchemaRefs: ({ schema, refUuidMap, }: {
3
+ schema: SchemaOrRefObject;
4
+ refUuidMap: RefUuidMap;
5
+ }) => void;
@@ -0,0 +1,34 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ export const replaceSchemaRefs = ({ schema, refUuidMap, }) => {
3
+ if ('$ref' in schema) {
4
+ const refId = schema.$ref;
5
+ const uuid = refUuidMap[refId] || uuidv4();
6
+ schema.$ref = uuid;
7
+ }
8
+ if ('properties' in schema && schema.properties && typeof schema.properties === 'object') {
9
+ Object.values(schema.properties).forEach((subschema) => {
10
+ replaceSchemaRefs({ schema: subschema, refUuidMap });
11
+ });
12
+ }
13
+ if ('items' in schema && schema.items && typeof schema.items === 'object') {
14
+ replaceSchemaRefs({ schema: schema.items, refUuidMap });
15
+ }
16
+ if ('oneOf' in schema && schema.oneOf && Array.isArray(schema.oneOf)) {
17
+ schema.oneOf.forEach((subschema) => {
18
+ replaceSchemaRefs({ schema: subschema, refUuidMap });
19
+ });
20
+ }
21
+ if ('anyOf' in schema && schema.anyOf && Array.isArray(schema.anyOf)) {
22
+ schema.anyOf.forEach((subschema) => {
23
+ replaceSchemaRefs({ schema: subschema, refUuidMap });
24
+ });
25
+ }
26
+ if ('allOf' in schema && schema.allOf && Array.isArray(schema.allOf)) {
27
+ schema.allOf.forEach((subschema) => {
28
+ replaceSchemaRefs({ schema: subschema, refUuidMap });
29
+ });
30
+ }
31
+ if ('not' in schema && schema.not && typeof schema.not === 'object') {
32
+ replaceSchemaRefs({ schema: schema.not, refUuidMap });
33
+ }
34
+ };
@@ -1,14 +1,15 @@
1
1
  import { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
2
2
  import { XMcp, XMint } from '../../types/endpoint.js';
3
3
  export type UUID = string;
4
- export type objectHash = string;
4
+ export type HashId = string;
5
5
  export type RefUuidMap = Record<string, UUID>;
6
- export type UUIDObjectHashMap = Record<UUID, objectHash>;
7
- export type HashedNodeMap = Record<objectHash, GraphNode>;
8
- export type GraphNode = Schema | Response | Parameter | Example | RequestBody | SecurityScheme | Media | Encoding;
6
+ export type UUIDObjectHashMap = Record<UUID, HashId>;
7
+ export type HashedNodeMap = Record<HashId, GraphNode>;
8
+ export type GraphNode = SchemaOrRef | ResponseOrRef | HeaderOrRef | ParameterOrRef | Media | ExampleOrRef | RequestBodyOrRef | SecurityScheme | Server | Path | Operation | SecurityRequirement | Document;
9
9
  export type SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject;
10
- export type Schema = SchemaObject & {
11
- type: 'schema';
10
+ export type RefObject = OpenAPIV3.ReferenceObject | OpenAPIV3_1.ReferenceObject;
11
+ export type SchemaOrRefObject = SchemaObject | RefObject;
12
+ export type SchemaOrRef = (SchemaOrRefObject & {
12
13
  items?: UUID;
13
14
  properties?: {
14
15
  [name: string]: UUID;
@@ -18,68 +19,79 @@ export type Schema = SchemaObject & {
18
19
  anyOf?: UUID[];
19
20
  oneOf?: UUID[];
20
21
  not?: UUID;
21
- };
22
+ }) | (RefObject & {
23
+ $ref: UUID;
24
+ }) | HashId;
22
25
  export type ResponseObject = OpenAPIV3.ResponseObject | OpenAPIV3_1.ResponseObject;
23
- export type Response = ResponseObject & {
24
- type: 'response';
26
+ export type ResponseOrRef = (ResponseObject & {
25
27
  headers?: {
26
28
  [header: string]: UUID;
27
29
  };
28
30
  content?: {
29
- [mediaType: string]: UUID;
31
+ [contentType: string]: UUID;
30
32
  };
31
- };
33
+ links?: {
34
+ [link: string]: UUID;
35
+ };
36
+ }) | (RefObject & {
37
+ $ref: UUID;
38
+ });
39
+ export type HeaderObject = OpenAPIV3.HeaderObject | OpenAPIV3_1.HeaderObject;
40
+ export type HeaderOrRefObject = HeaderObject | RefObject;
41
+ export type HeaderOrRef = (HeaderObject & {
42
+ schema?: UUID;
43
+ examples?: {
44
+ [name: string]: UUID;
45
+ };
46
+ content?: {
47
+ [contentType: string]: UUID;
48
+ };
49
+ }) | (RefObject & {
50
+ $ref: UUID;
51
+ });
32
52
  export type ParameterObject = OpenAPIV3.ParameterObject | OpenAPIV3_1.ParameterObject;
33
- export type Parameter = ParameterObject & {
34
- type: 'parameter';
53
+ export type ParameterOrRefObject = ParameterObject | RefObject;
54
+ export type ParameterOrRef = (ParameterObject & {
35
55
  schema?: UUID;
36
56
  examples?: {
37
- [media: string]: UUID;
57
+ [name: string]: UUID;
38
58
  };
39
59
  content?: {
40
- [media: string]: UUID;
60
+ [contentType: string]: UUID;
41
61
  };
42
- };
62
+ }) | (RefObject & {
63
+ $ref: UUID;
64
+ });
43
65
  export type MediaObject = OpenAPIV3.MediaTypeObject | OpenAPIV3_1.MediaTypeObject;
44
66
  export type Media = MediaObject & {
45
- type: 'media';
46
67
  schema?: UUID;
47
68
  examples?: {
48
- [media: string]: UUID;
69
+ [name: string]: UUID;
49
70
  };
50
71
  encoding?: {
51
72
  [encoding: string]: UUID;
52
73
  };
53
74
  };
54
- export type EncodingObject = OpenAPIV3.EncodingObject | OpenAPIV3_1.EncodingObject;
55
- export type Encoding = EncodingObject & {
56
- type: 'encoding';
57
- headers?: {
58
- [header: string]: UUID;
59
- };
60
- };
61
75
  export type ExampleObject = OpenAPIV3.ExampleObject | OpenAPIV3_1.ExampleObject;
62
- export type Example = ExampleObject & {
63
- type: 'example';
64
- };
76
+ export type ExampleOrRefObject = ExampleObject | RefObject;
77
+ export type ExampleOrRef = ExampleObject | (RefObject & {
78
+ $ref: UUID;
79
+ });
65
80
  export type RequestBodyObject = OpenAPIV3.RequestBodyObject | OpenAPIV3_1.RequestBodyObject;
66
- export type RequestBody = RequestBodyObject & {
67
- type: 'requestBody';
81
+ export type RequestBodyOrRefObject = RequestBodyObject | RefObject;
82
+ export type RequestBodyOrRef = (RequestBodyObject & {
68
83
  content?: {
69
- [media: string]: UUID;
84
+ [contentType: string]: UUID;
70
85
  };
71
- };
86
+ }) | (RefObject & {
87
+ $ref: UUID;
88
+ });
72
89
  export type SecuritySchemeObject = OpenAPIV3.SecuritySchemeObject | OpenAPIV3_1.SecuritySchemeObject;
73
- export type SecurityScheme = SecuritySchemeObject & {
74
- type: 'securityScheme';
75
- };
90
+ export type SecurityScheme = SecuritySchemeObject;
76
91
  export type ServerObject = OpenAPIV3.ServerObject | OpenAPIV3_1.ServerObject;
77
- export type Server = ServerObject & {
78
- type: 'server';
79
- };
92
+ export type Server = ServerObject;
80
93
  export type PathObject = OpenAPIV3.PathItemObject | OpenAPIV3_1.PathItemObject;
81
94
  export type Path = PathObject & {
82
- type: 'path';
83
95
  pattern: string;
84
96
  parameters?: UUID[];
85
97
  } & {
@@ -95,7 +107,6 @@ export type OperationExtensions = {
95
107
  'x-code-samples'?: string[];
96
108
  };
97
109
  export type Operation = OperationObject & {
98
- type: 'operation';
99
110
  parameters?: UUID[];
100
111
  requestBody?: UUID;
101
112
  responses?: {
@@ -108,12 +119,9 @@ export type Operation = OperationObject & {
108
119
  servers?: UUID[];
109
120
  } & OperationExtensions;
110
121
  export type SecurityRequirementObject = OpenAPIV3.SecurityRequirementObject | OpenAPIV3_1.SecurityRequirementObject;
111
- export type SecurityRequirement = SecurityRequirementObject & {
112
- type: 'securityRequirement';
113
- };
122
+ export type SecurityRequirement = SecurityRequirementObject;
114
123
  export type DocumentObject = OpenAPIV3.Document | OpenAPIV3_1.Document;
115
124
  export type Document = DocumentObject & {
116
- type: 'document';
117
125
  servers?: UUID[];
118
126
  paths?: UUID[];
119
127
  webhooks?: UUID[];