mcp4openapi 0.2.1 → 0.2.3

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.
Files changed (37) hide show
  1. package/README.md +3 -1
  2. package/dist/src/composite-executor.d.ts.map +1 -1
  3. package/dist/src/composite-executor.js +10 -1
  4. package/dist/src/composite-executor.js.map +1 -1
  5. package/dist/src/generated-schemas.d.ts +40 -0
  6. package/dist/src/generated-schemas.d.ts.map +1 -1
  7. package/dist/src/generated-schemas.js +2 -1
  8. package/dist/src/generated-schemas.js.map +1 -1
  9. package/dist/src/http-transport.d.ts.map +1 -1
  10. package/dist/src/http-transport.js +14 -1
  11. package/dist/src/http-transport.js.map +1 -1
  12. package/dist/src/interceptors.d.ts.map +1 -1
  13. package/dist/src/interceptors.js +2 -24
  14. package/dist/src/interceptors.js.map +1 -1
  15. package/dist/src/logger.d.ts +0 -15
  16. package/dist/src/logger.d.ts.map +1 -1
  17. package/dist/src/logger.js +9 -92
  18. package/dist/src/logger.js.map +1 -1
  19. package/dist/src/mcp-server.d.ts +5 -0
  20. package/dist/src/mcp-server.d.ts.map +1 -1
  21. package/dist/src/mcp-server.js +40 -1
  22. package/dist/src/mcp-server.js.map +1 -1
  23. package/dist/src/oauth-provider.d.ts +5 -0
  24. package/dist/src/oauth-provider.d.ts.map +1 -1
  25. package/dist/src/oauth-provider.js +38 -0
  26. package/dist/src/oauth-provider.js.map +1 -1
  27. package/dist/src/openapi-parser.d.ts +5 -0
  28. package/dist/src/openapi-parser.d.ts.map +1 -1
  29. package/dist/src/openapi-parser.js +87 -3
  30. package/dist/src/openapi-parser.js.map +1 -1
  31. package/dist/src/types/profile.d.ts +10 -0
  32. package/dist/src/types/profile.d.ts.map +1 -1
  33. package/dist/src/validation-utils.d.ts +22 -0
  34. package/dist/src/validation-utils.d.ts.map +1 -1
  35. package/dist/src/validation-utils.js +74 -0
  36. package/dist/src/validation-utils.js.map +1 -1
  37. package/package.json +1 -1
@@ -5,6 +5,80 @@
5
5
  * Centralizes validation logic and ensures consistency across the application
6
6
  */
7
7
  import escapeHtml from 'escape-html';
8
+ /** Property names that must never be used as dynamic object keys */
9
+ const FORBIDDEN_PROPERTY_NAMES = new Set([
10
+ '__proto__',
11
+ 'constructor',
12
+ 'prototype',
13
+ '__defineGetter__',
14
+ '__defineSetter__',
15
+ '__lookupGetter__',
16
+ '__lookupSetter__',
17
+ 'hasOwnProperty',
18
+ 'isPrototypeOf',
19
+ 'propertyIsEnumerable',
20
+ 'toLocaleString',
21
+ 'toString',
22
+ 'valueOf',
23
+ ]);
24
+ /**
25
+ * Validates that a property name is safe to use as dynamic object key.
26
+ * Prevents prototype pollution attacks.
27
+ */
28
+ export function isSafePropertyName(name) {
29
+ return !FORBIDDEN_PROPERTY_NAMES.has(name);
30
+ }
31
+ /**
32
+ * Escape special regex characters in a string.
33
+ * Prevents ReDoS attacks when using dynamic strings in RegExp.
34
+ */
35
+ export function escapeRegExp(str) {
36
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
37
+ }
38
+ /**
39
+ * Redact specific header from headers object (case-insensitive)
40
+ */
41
+ export function redactHeader(headers, headerName) {
42
+ if (!headers || typeof headers !== 'object')
43
+ return {};
44
+ const redacted = { ...headers };
45
+ for (const key of Object.keys(redacted)) {
46
+ if (key.toLowerCase() === headerName.toLowerCase()) {
47
+ redacted[key] = '[REDACTED]';
48
+ }
49
+ }
50
+ return redacted;
51
+ }
52
+ /**
53
+ * Redact query parameter from URL string
54
+ */
55
+ export function redactQueryParam(url, paramName) {
56
+ if (!url)
57
+ return '';
58
+ try {
59
+ const urlObj = new URL(url);
60
+ if (urlObj.searchParams.has(paramName)) {
61
+ urlObj.searchParams.set(paramName, '[REDACTED]');
62
+ }
63
+ return urlObj.toString();
64
+ }
65
+ catch {
66
+ const regex = new RegExp(`([?&]${escapeRegExp(paramName)}=)[^&]+`, 'gi');
67
+ return url.replace(regex, `$1[REDACTED]`);
68
+ }
69
+ }
70
+ /**
71
+ * Redact parameter from params object
72
+ */
73
+ export function redactParam(params, paramName) {
74
+ if (!params || typeof params !== 'object')
75
+ return {};
76
+ const redacted = { ...params };
77
+ if (paramName in redacted) {
78
+ redacted[paramName] = '[REDACTED]';
79
+ }
80
+ return redacted;
81
+ }
8
82
  /**
9
83
  * Validates if a string is a valid email address
10
84
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validation-utils.js","sourceRoot":"","sources":["../../src/validation-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,GAA8B;IAC3D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"validation-utils.js","sourceRoot":"","sources":["../../src/validation-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp4openapi",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Universal MCP server that generates tools from any OpenAPI specification",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",