mcp4openapi 0.3.1 → 0.3.4
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/README.md +7 -0
- package/dist/src/auth/oauth-provider.d.ts +1 -0
- package/dist/src/auth/oauth-provider.d.ts.map +1 -1
- package/dist/src/auth/oauth-provider.js +17 -0
- package/dist/src/auth/oauth-provider.js.map +1 -1
- package/dist/src/core/cli-config.d.ts.map +1 -1
- package/dist/src/core/cli-config.js +2 -0
- package/dist/src/core/cli-config.js.map +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +18 -3
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/index.js +0 -0
- package/dist/src/profile/profile-allowlist.d.ts +18 -0
- package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
- package/dist/src/profile/profile-allowlist.js +68 -0
- package/dist/src/profile/profile-allowlist.js.map +1 -0
- package/dist/src/profile/profile-registry.d.ts +5 -0
- package/dist/src/profile/profile-registry.d.ts.map +1 -1
- package/dist/src/profile/profile-registry.js +38 -14
- package/dist/src/profile/profile-registry.js.map +1 -1
- package/dist/src/security/ssrf-validator.d.ts +31 -0
- package/dist/src/security/ssrf-validator.d.ts.map +1 -0
- package/dist/src/security/ssrf-validator.js +190 -0
- package/dist/src/security/ssrf-validator.js.map +1 -0
- package/package.json +2 -2
- package/profiles/gitlab/developer-profile-oauth.json +445 -81
- package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
- package/profiles/gitlab/openapi.yaml +1420 -165
- package/profiles/gitlab/profile-optimized-oauth.json +928 -0
- package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
- package/profiles/grafana/openapi.json +28078 -0
- package/profiles/grafana/profile.json +1083 -0
- package/profiles/grafana/profile.test.json +235 -0
- package/profiles/mattermost/openapi.yaml +27434 -0
- package/profiles/mattermost/profile.json +463 -0
- package/profiles/mattermost/profile.test.json +607 -0
- package/profiles/n8n/profile-optimized.json +1002 -364
- package/profiles/n8n/profile-optimized.test.json +43 -43
- package/dist/src/argument-normalizer.d.ts +0 -5
- package/dist/src/argument-normalizer.d.ts.map +0 -1
- package/dist/src/argument-normalizer.js +0 -61
- package/dist/src/argument-normalizer.js.map +0 -1
- package/dist/src/cli-config.d.ts +0 -9
- package/dist/src/cli-config.d.ts.map +0 -1
- package/dist/src/cli-config.js +0 -111
- package/dist/src/cli-config.js.map +0 -1
- package/dist/src/composite-executor.d.ts +0 -77
- package/dist/src/composite-executor.d.ts.map +0 -1
- package/dist/src/composite-executor.js +0 -193
- package/dist/src/composite-executor.js.map +0 -1
- package/dist/src/constants.d.ts +0 -85
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -85
- package/dist/src/constants.js.map +0 -1
- package/dist/src/dag-executor.d.ts +0 -49
- package/dist/src/dag-executor.d.ts.map +0 -1
- package/dist/src/dag-executor.js +0 -138
- package/dist/src/dag-executor.js.map +0 -1
- package/dist/src/errors.d.ts +0 -59
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js +0 -119
- package/dist/src/errors.js.map +0 -1
- package/dist/src/filtering.d.ts +0 -19
- package/dist/src/filtering.d.ts.map +0 -1
- package/dist/src/filtering.js +0 -292
- package/dist/src/filtering.js.map +0 -1
- package/dist/src/http-client-factory.d.ts +0 -62
- package/dist/src/http-client-factory.d.ts.map +0 -1
- package/dist/src/http-client-factory.js +0 -133
- package/dist/src/http-client-factory.js.map +0 -1
- package/dist/src/http-transport-config.d.ts +0 -6
- package/dist/src/http-transport-config.d.ts.map +0 -1
- package/dist/src/http-transport-config.js +0 -47
- package/dist/src/http-transport-config.js.map +0 -1
- package/dist/src/http-transport.d.ts +0 -316
- package/dist/src/http-transport.d.ts.map +0 -1
- package/dist/src/http-transport.js +0 -2412
- package/dist/src/http-transport.js.map +0 -1
- package/dist/src/interceptors.d.ts +0 -116
- package/dist/src/interceptors.d.ts.map +0 -1
- package/dist/src/interceptors.js +0 -392
- package/dist/src/interceptors.js.map +0 -1
- package/dist/src/jsonrpc-validator.d.ts +0 -27
- package/dist/src/jsonrpc-validator.d.ts.map +0 -1
- package/dist/src/jsonrpc-validator.js +0 -58
- package/dist/src/jsonrpc-validator.js.map +0 -1
- package/dist/src/logger.d.ts +0 -59
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -177
- package/dist/src/logger.js.map +0 -1
- package/dist/src/mcp-server-manager.d.ts +0 -20
- package/dist/src/mcp-server-manager.d.ts.map +0 -1
- package/dist/src/mcp-server-manager.js +0 -38
- package/dist/src/mcp-server-manager.js.map +0 -1
- package/dist/src/mcp-server.d.ts +0 -203
- package/dist/src/mcp-server.d.ts.map +0 -1
- package/dist/src/mcp-server.js +0 -1369
- package/dist/src/mcp-server.js.map +0 -1
- package/dist/src/metrics.d.ts +0 -97
- package/dist/src/metrics.d.ts.map +0 -1
- package/dist/src/metrics.js +0 -273
- package/dist/src/metrics.js.map +0 -1
- package/dist/src/naming-warnings.d.ts +0 -23
- package/dist/src/naming-warnings.d.ts.map +0 -1
- package/dist/src/naming-warnings.js +0 -83
- package/dist/src/naming-warnings.js.map +0 -1
- package/dist/src/naming.d.ts +0 -58
- package/dist/src/naming.d.ts.map +0 -1
- package/dist/src/naming.js +0 -510
- package/dist/src/naming.js.map +0 -1
- package/dist/src/oauth-provider.d.ts +0 -131
- package/dist/src/oauth-provider.d.ts.map +0 -1
- package/dist/src/oauth-provider.js +0 -836
- package/dist/src/oauth-provider.js.map +0 -1
- package/dist/src/openapi-parser.d.ts +0 -70
- package/dist/src/openapi-parser.d.ts.map +0 -1
- package/dist/src/openapi-parser.js +0 -436
- package/dist/src/openapi-parser.js.map +0 -1
- package/dist/src/profile-loader.d.ts +0 -78
- package/dist/src/profile-loader.d.ts.map +0 -1
- package/dist/src/profile-loader.js +0 -483
- package/dist/src/profile-loader.js.map +0 -1
- package/dist/src/profile-registry.d.ts +0 -18
- package/dist/src/profile-registry.d.ts.map +0 -1
- package/dist/src/profile-registry.js +0 -26
- package/dist/src/profile-registry.js.map +0 -1
- package/dist/src/profile-resolver.d.ts +0 -19
- package/dist/src/profile-resolver.d.ts.map +0 -1
- package/dist/src/profile-resolver.js +0 -167
- package/dist/src/profile-resolver.js.map +0 -1
- package/dist/src/proxy-executor.d.ts +0 -86
- package/dist/src/proxy-executor.d.ts.map +0 -1
- package/dist/src/proxy-executor.js +0 -497
- package/dist/src/proxy-executor.js.map +0 -1
- package/dist/src/schema-validator.d.ts +0 -30
- package/dist/src/schema-validator.d.ts.map +0 -1
- package/dist/src/schema-validator.js +0 -128
- package/dist/src/schema-validator.js.map +0 -1
- package/dist/src/startup-profile.d.ts +0 -17
- package/dist/src/startup-profile.d.ts.map +0 -1
- package/dist/src/startup-profile.js +0 -30
- package/dist/src/startup-profile.js.map +0 -1
- package/dist/src/startup-validation.d.ts +0 -11
- package/dist/src/startup-validation.d.ts.map +0 -1
- package/dist/src/startup-validation.js +0 -21
- package/dist/src/startup-validation.js.map +0 -1
- package/dist/src/tool-filter.d.ts +0 -65
- package/dist/src/tool-filter.d.ts.map +0 -1
- package/dist/src/tool-filter.js +0 -471
- package/dist/src/tool-filter.js.map +0 -1
- package/dist/src/tool-generator.d.ts +0 -67
- package/dist/src/tool-generator.d.ts.map +0 -1
- package/dist/src/tool-generator.js +0 -182
- package/dist/src/tool-generator.js.map +0 -1
- package/dist/src/validation-utils.d.ts +0 -49
- package/dist/src/validation-utils.d.ts.map +0 -1
- package/dist/src/validation-utils.js +0 -138
- package/dist/src/validation-utils.js.map +0 -1
- package/profiles/gitlab/developer-profile.json +0 -1508
- package/profiles/gitlab/developer-profile.test.json +0 -3432
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Logger } from '../core/logger.js';
|
|
2
|
+
export interface SSRFOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Allow connections to private/loopback/link-local IP addresses.
|
|
5
|
+
* Default: false
|
|
6
|
+
*/
|
|
7
|
+
allowPrivateNetwork?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Whitelist of allowed hostnames (supports *.example.com wildcards).
|
|
10
|
+
* If provided, only hosts matching the whitelist are allowed.
|
|
11
|
+
*/
|
|
12
|
+
allowedHosts?: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validates URLs to prevent Server-Side Request Forgery (SSRF) attacks.
|
|
16
|
+
* Checks against private IP ranges and DNS resolution.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SSRFValidator {
|
|
19
|
+
private logger;
|
|
20
|
+
constructor(logger: Logger);
|
|
21
|
+
/**
|
|
22
|
+
* Validate a URL against SSRF rules.
|
|
23
|
+
* Throws ValidationError if the URL is not allowed.
|
|
24
|
+
*/
|
|
25
|
+
validate(url: string, options?: SSRFOptions): Promise<void>;
|
|
26
|
+
private lookupAllIpAddresses;
|
|
27
|
+
private isAllowedHost;
|
|
28
|
+
private isDisallowedIPv4;
|
|
29
|
+
private isDisallowedIPv6;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ssrf-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssrf-validator.d.ts","sourceRoot":"","sources":["../../../src/security/ssrf-validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;OAGG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmEvD,oBAAoB;IA6BlC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,gBAAgB;CAqDzB"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { isIP } from 'node:net';
|
|
2
|
+
import { lookup } from 'node:dns/promises';
|
|
3
|
+
import { ValidationError } from '../core/errors.js';
|
|
4
|
+
/**
|
|
5
|
+
* Validates URLs to prevent Server-Side Request Forgery (SSRF) attacks.
|
|
6
|
+
* Checks against private IP ranges and DNS resolution.
|
|
7
|
+
*/
|
|
8
|
+
export class SSRFValidator {
|
|
9
|
+
constructor(logger) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Validate a URL against SSRF rules.
|
|
14
|
+
* Throws ValidationError if the URL is not allowed.
|
|
15
|
+
*/
|
|
16
|
+
async validate(url, options = {}) {
|
|
17
|
+
const parsedUrl = new URL(url);
|
|
18
|
+
const hostnameRaw = parsedUrl.hostname.toLowerCase();
|
|
19
|
+
// Remove brackets from IPv6 literals for checking
|
|
20
|
+
const hostname = hostnameRaw.startsWith('[') && hostnameRaw.endsWith(']')
|
|
21
|
+
? hostnameRaw.slice(1, -1)
|
|
22
|
+
: hostnameRaw;
|
|
23
|
+
// 1. Check allowed hosts whitelist if configured
|
|
24
|
+
if (options.allowedHosts && options.allowedHosts.length > 0) {
|
|
25
|
+
if (!this.isAllowedHost(hostname, options.allowedHosts)) {
|
|
26
|
+
this.logger.warn('SSRF blocked: host not in allowlist', {
|
|
27
|
+
hostname,
|
|
28
|
+
allowed_hosts: options.allowedHosts,
|
|
29
|
+
});
|
|
30
|
+
throw new ValidationError(`Host not in allowlist: '${hostname}'`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// If private networks are allowed, we can stop checks here unless specific logic is needed.
|
|
34
|
+
// However, usually we still want to block metadata services if not explicitly allowed,
|
|
35
|
+
// but the current requirement is mainly about private network access.
|
|
36
|
+
if (options.allowPrivateNetwork) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// 2. Check localhost/loopback/private IPs explicitly
|
|
40
|
+
if (hostname === 'localhost') {
|
|
41
|
+
this.logger.warn('SSRF blocked: localhost target', { hostname });
|
|
42
|
+
throw new ValidationError('Hostname not allowed (localhost)');
|
|
43
|
+
}
|
|
44
|
+
const ipVersion = isIP(hostname);
|
|
45
|
+
if (ipVersion === 4) {
|
|
46
|
+
if (this.isDisallowedIPv4(hostname)) {
|
|
47
|
+
this.logger.warn('SSRF blocked: private/loopback/link-local IPv4 target', { hostname });
|
|
48
|
+
throw new ValidationError('IP address not allowed');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (ipVersion === 6) {
|
|
52
|
+
if (this.isDisallowedIPv6(hostname)) {
|
|
53
|
+
this.logger.warn('SSRF blocked: private/loopback/link-local IPv6 target', { hostname });
|
|
54
|
+
throw new ValidationError('IP address not allowed');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// 3. DNS resolution check
|
|
59
|
+
// Hostname: resolve to all IPs and block if any are private/loopback/link-local
|
|
60
|
+
const addresses = await this.lookupAllIpAddresses(hostname);
|
|
61
|
+
const disallowed = addresses.find(address => {
|
|
62
|
+
const family = isIP(address);
|
|
63
|
+
if (family === 4)
|
|
64
|
+
return this.isDisallowedIPv4(address);
|
|
65
|
+
if (family === 6)
|
|
66
|
+
return this.isDisallowedIPv6(address);
|
|
67
|
+
return false;
|
|
68
|
+
});
|
|
69
|
+
if (disallowed) {
|
|
70
|
+
this.logger.warn('SSRF blocked: hostname resolves to private/loopback/link-local IP', {
|
|
71
|
+
hostname,
|
|
72
|
+
resolved_addresses: addresses,
|
|
73
|
+
});
|
|
74
|
+
throw new ValidationError('Hostname resolves to disallowed IP');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async lookupAllIpAddresses(hostname) {
|
|
79
|
+
const timeoutMs = 2000; // Increased to 2s to be safe
|
|
80
|
+
let results = [];
|
|
81
|
+
try {
|
|
82
|
+
results = (await Promise.race([
|
|
83
|
+
lookup(hostname, { all: true, verbatim: true }),
|
|
84
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`DNS lookup timeout after ${timeoutMs}ms`)), timeoutMs)),
|
|
85
|
+
]));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.logger.warn('SSRF blocked: DNS lookup failed', {
|
|
89
|
+
hostname,
|
|
90
|
+
error: error instanceof Error ? error.message : String(error),
|
|
91
|
+
});
|
|
92
|
+
// Fail secure: if we can't resolve it, we can't verify it's safe.
|
|
93
|
+
throw new ValidationError(`DNS lookup failed for hostname '${hostname}'`);
|
|
94
|
+
}
|
|
95
|
+
const addresses = results.map(r => r.address).filter(Boolean);
|
|
96
|
+
if (addresses.length === 0) {
|
|
97
|
+
this.logger.warn('SSRF blocked: DNS lookup returned no addresses', { hostname });
|
|
98
|
+
throw new ValidationError(`DNS lookup returned no addresses for hostname '${hostname}'`);
|
|
99
|
+
}
|
|
100
|
+
return addresses;
|
|
101
|
+
}
|
|
102
|
+
isAllowedHost(hostname, allowedHosts) {
|
|
103
|
+
const lower = hostname.toLowerCase();
|
|
104
|
+
return allowedHosts.some(patternRaw => {
|
|
105
|
+
const pattern = patternRaw.toLowerCase().trim();
|
|
106
|
+
if (!pattern)
|
|
107
|
+
return false;
|
|
108
|
+
if (pattern.startsWith('*.')) {
|
|
109
|
+
const suffix = pattern.slice(2);
|
|
110
|
+
if (!suffix)
|
|
111
|
+
return false;
|
|
112
|
+
return lower.endsWith(`.${suffix}`);
|
|
113
|
+
}
|
|
114
|
+
return lower === pattern;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
isDisallowedIPv4(ip) {
|
|
118
|
+
const parts = ip.split('.').map(p => Number(p));
|
|
119
|
+
if (parts.length !== 4 || parts.some(p => !Number.isInteger(p) || p < 0 || p > 255))
|
|
120
|
+
return true;
|
|
121
|
+
const [a, b] = parts;
|
|
122
|
+
if (a === 127)
|
|
123
|
+
return true; // loopback
|
|
124
|
+
if (a === 10)
|
|
125
|
+
return true; // private
|
|
126
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
127
|
+
return true; // private
|
|
128
|
+
if (a === 192 && b === 168)
|
|
129
|
+
return true; // private
|
|
130
|
+
if (a === 169 && b === 254)
|
|
131
|
+
return true; // link-local
|
|
132
|
+
if (a === 0)
|
|
133
|
+
return true; // "this network"
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
isDisallowedIPv6(ip) {
|
|
137
|
+
const normalized = ip.toLowerCase();
|
|
138
|
+
// Check for IPv4-mapped IPv6 address (::ffff:127.0.0.1)
|
|
139
|
+
// Note: URL constructor normalizes '::ffff:127.0.0.1' to '::ffff:7f00:1' (hex)
|
|
140
|
+
if (normalized.startsWith('::ffff:') || normalized.startsWith('0:0:0:0:0:ffff:')) {
|
|
141
|
+
const remainder = normalized.split('ffff:')[1];
|
|
142
|
+
if (remainder) {
|
|
143
|
+
if (remainder.includes('.')) {
|
|
144
|
+
return this.isDisallowedIPv4(remainder);
|
|
145
|
+
}
|
|
146
|
+
// Handle hex encoded IPv4 (e.g., 7f00:1)
|
|
147
|
+
const parts = remainder.split(':');
|
|
148
|
+
let high = 0;
|
|
149
|
+
let low = 0;
|
|
150
|
+
if (parts.length === 2) {
|
|
151
|
+
high = parseInt(parts[0] || '0', 16);
|
|
152
|
+
low = parseInt(parts[1] || '0', 16);
|
|
153
|
+
}
|
|
154
|
+
else if (parts.length === 1) {
|
|
155
|
+
low = parseInt(parts[0] || '0', 16);
|
|
156
|
+
}
|
|
157
|
+
// 127.0.0.0/8 (Loopback) -> 0x7f000000 - 0x7fffffff
|
|
158
|
+
if ((high >>> 8) === 127)
|
|
159
|
+
return true;
|
|
160
|
+
// 10.0.0.0/8 (Private) -> 0x0a000000 - 0x0affffff
|
|
161
|
+
if ((high >>> 8) === 10)
|
|
162
|
+
return true;
|
|
163
|
+
// 0.0.0.0/8 (Current network) -> 0x00000000 - 0x00ffffff
|
|
164
|
+
if ((high >>> 8) === 0)
|
|
165
|
+
return true;
|
|
166
|
+
// 169.254.0.0/16 (Link-local) -> 0xa9fe0000 - 0xa9feffff
|
|
167
|
+
if (high === 0xa9fe)
|
|
168
|
+
return true;
|
|
169
|
+
// 192.168.0.0/16 (Private) -> 0xc0a80000 - 0xc0a8ffff
|
|
170
|
+
if (high === 0xc0a8)
|
|
171
|
+
return true;
|
|
172
|
+
// 172.16.0.0/12 (Private) -> 0xac100000 - 0xac1fffff
|
|
173
|
+
// 172 = 0xac, 16 = 0x10, 31 = 0x1f
|
|
174
|
+
if ((high >>> 8) === 172 && (high & 0xff) >= 16 && (high & 0xff) <= 31)
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (normalized === '::1' || normalized === '0:0:0:0:0:0:0:1')
|
|
179
|
+
return true; // loopback
|
|
180
|
+
if (normalized === '::' || normalized === '0:0:0:0:0:0:0:0')
|
|
181
|
+
return true; // unspecified
|
|
182
|
+
if (normalized.startsWith('fe8') || normalized.startsWith('fe9') || normalized.startsWith('fea') || normalized.startsWith('feb')) {
|
|
183
|
+
return true; // link-local fe80::/10 (approx by prefix)
|
|
184
|
+
}
|
|
185
|
+
if (normalized.startsWith('fc') || normalized.startsWith('fd'))
|
|
186
|
+
return true; // unique local fc00::/7 (approx by prefix)
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=ssrf-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssrf-validator.js","sourceRoot":"","sources":["../../../src/security/ssrf-validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp4openapi",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Universal MCP server that generates tools from any OpenAPI specification",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"supertest": "^7.1.4",
|
|
88
88
|
"ts-to-zod": "^5.0.1",
|
|
89
89
|
"typescript": "^5.9.3",
|
|
90
|
-
"typescript-json-schema": "^0.
|
|
90
|
+
"typescript-json-schema": "^0.67.1",
|
|
91
91
|
"vite": "^6.0.5",
|
|
92
92
|
"vitest": "^3.2.4"
|
|
93
93
|
},
|