spiceflow 1.12.1 → 1.13.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.
Files changed (98) hide show
  1. package/README.md +107 -4
  2. package/dist/_node-server-unsupported.js +1 -0
  3. package/dist/_node-server-unsupported.js.map +1 -0
  4. package/dist/_node-server.d.ts.map +1 -1
  5. package/dist/_node-server.js +2 -2
  6. package/dist/_node-server.js.map +1 -0
  7. package/dist/client/errors.js +1 -0
  8. package/dist/client/errors.js.map +1 -0
  9. package/dist/client/index.d.ts +2 -2
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +7 -4
  12. package/dist/client/index.js.map +1 -0
  13. package/dist/client/types.js +1 -0
  14. package/dist/client/types.js.map +1 -0
  15. package/dist/client/utils.js +1 -0
  16. package/dist/client/utils.js.map +1 -0
  17. package/dist/client.test.js +1 -0
  18. package/dist/client.test.js.map +1 -0
  19. package/dist/context.d.ts +6 -3
  20. package/dist/context.d.ts.map +1 -1
  21. package/dist/context.js +1 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/cors.js +1 -0
  24. package/dist/cors.js.map +1 -0
  25. package/dist/cors.test.js +1 -0
  26. package/dist/cors.test.js.map +1 -0
  27. package/dist/error.js +1 -0
  28. package/dist/error.js.map +1 -0
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/mcp-client-transport.d.ts +35 -0
  34. package/dist/mcp-client-transport.d.ts.map +1 -0
  35. package/dist/mcp-client-transport.js +147 -0
  36. package/dist/mcp-client-transport.js.map +1 -0
  37. package/dist/mcp-transport.js +1 -0
  38. package/dist/mcp-transport.js.map +1 -0
  39. package/dist/mcp.d.ts +18 -1
  40. package/dist/mcp.d.ts.map +1 -1
  41. package/dist/mcp.js +43 -224
  42. package/dist/mcp.js.map +1 -0
  43. package/dist/middleware.test.js +1 -0
  44. package/dist/middleware.test.js.map +1 -0
  45. package/dist/openapi-to-mcp.d.ts +38 -0
  46. package/dist/openapi-to-mcp.d.ts.map +1 -0
  47. package/dist/openapi-to-mcp.js +367 -0
  48. package/dist/openapi-to-mcp.js.map +1 -0
  49. package/dist/openapi.d.ts.map +1 -1
  50. package/dist/openapi.js +7 -2
  51. package/dist/openapi.js.map +1 -0
  52. package/dist/openapi.test.js +32 -31
  53. package/dist/openapi.test.js.map +1 -0
  54. package/dist/simple.benchmark.js +1 -0
  55. package/dist/simple.benchmark.js.map +1 -0
  56. package/dist/spiceflow.d.ts +5 -2
  57. package/dist/spiceflow.d.ts.map +1 -1
  58. package/dist/spiceflow.js +26 -6
  59. package/dist/spiceflow.js.map +1 -0
  60. package/dist/spiceflow.test.js +15 -3
  61. package/dist/spiceflow.test.js.map +1 -0
  62. package/dist/static-node.js +1 -0
  63. package/dist/static-node.js.map +1 -0
  64. package/dist/static.benchmark.js +1 -0
  65. package/dist/static.benchmark.js.map +1 -0
  66. package/dist/static.js +1 -0
  67. package/dist/static.js.map +1 -0
  68. package/dist/stream.test.js +1 -0
  69. package/dist/stream.test.js.map +1 -0
  70. package/dist/types.js +1 -0
  71. package/dist/types.js.map +1 -0
  72. package/dist/types.test.js +1 -0
  73. package/dist/types.test.js.map +1 -0
  74. package/dist/utils.js +1 -0
  75. package/dist/utils.js.map +1 -0
  76. package/dist/waitUntil.test.d.ts +2 -0
  77. package/dist/waitUntil.test.d.ts.map +1 -0
  78. package/dist/waitUntil.test.js +142 -0
  79. package/dist/waitUntil.test.js.map +1 -0
  80. package/dist/zod.test.js +1 -0
  81. package/dist/zod.test.js.map +1 -0
  82. package/package.json +4 -3
  83. package/src/_node-server.ts +1 -2
  84. package/src/client/index.ts +9 -7
  85. package/src/context.ts +6 -3
  86. package/src/index.ts +1 -1
  87. package/src/mcp-client-transport.ts +184 -0
  88. package/src/mcp.ts +49 -307
  89. package/src/openapi-to-mcp.ts +510 -0
  90. package/src/openapi.test.ts +31 -31
  91. package/src/openapi.ts +9 -3
  92. package/src/spiceflow.test.ts +18 -4
  93. package/src/spiceflow.ts +42 -15
  94. package/src/waitUntil.test.ts +168 -0
  95. package/dist/serialize.d.ts +0 -2
  96. package/dist/serialize.d.ts.map +0 -1
  97. package/dist/serialize.js +0 -9
  98. package/src/serialize.ts +0 -10
@@ -0,0 +1,367 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ // import deref from 'dereference-json-schema'
3
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ function getOperationRequestBody(operation) {
5
+ if (!operation.requestBody)
6
+ return undefined;
7
+ const requestBody = operation.requestBody;
8
+ const content = requestBody.content['application/json'];
9
+ return content?.schema;
10
+ }
11
+ function getOperationParameters(operation) {
12
+ if (!operation.parameters)
13
+ return {};
14
+ const queryProperties = {};
15
+ const pathProperties = {};
16
+ const headerProperties = {};
17
+ const cookieProperties = {};
18
+ const queryRequired = [];
19
+ const pathRequired = [];
20
+ const headerRequired = [];
21
+ const cookieRequired = [];
22
+ operation.parameters.forEach((param) => {
23
+ const paramObj = param;
24
+ if (paramObj.in === 'query') {
25
+ queryProperties[paramObj.name] = paramObj.schema;
26
+ if (paramObj.required)
27
+ queryRequired.push(paramObj.name);
28
+ }
29
+ else if (paramObj.in === 'path') {
30
+ pathProperties[paramObj.name] = paramObj.schema;
31
+ if (paramObj.required)
32
+ pathRequired.push(paramObj.name);
33
+ }
34
+ else if (paramObj.in === 'header') {
35
+ headerProperties[paramObj.name] =
36
+ paramObj.schema;
37
+ if (paramObj.required)
38
+ headerRequired.push(paramObj.name);
39
+ }
40
+ else if (paramObj.in === 'cookie') {
41
+ cookieProperties[paramObj.name] =
42
+ paramObj.schema;
43
+ if (paramObj.required)
44
+ cookieRequired.push(paramObj.name);
45
+ }
46
+ });
47
+ const result = {};
48
+ if (Object.keys(queryProperties).length > 0) {
49
+ result.queryParams = {
50
+ type: 'object',
51
+ properties: queryProperties,
52
+ required: queryRequired.length > 0 ? queryRequired : undefined,
53
+ };
54
+ }
55
+ if (Object.keys(pathProperties).length > 0) {
56
+ result.pathParams = {
57
+ type: 'object',
58
+ properties: pathProperties,
59
+ required: pathRequired.length > 0 ? pathRequired : undefined,
60
+ };
61
+ }
62
+ if (Object.keys(headerProperties).length > 0) {
63
+ result.headerParams = {
64
+ type: 'object',
65
+ properties: headerProperties,
66
+ required: headerRequired.length > 0 ? headerRequired : undefined,
67
+ };
68
+ }
69
+ if (Object.keys(cookieProperties).length > 0) {
70
+ result.cookieParams = {
71
+ type: 'object',
72
+ properties: cookieProperties,
73
+ required: cookieRequired.length > 0 ? cookieRequired : undefined,
74
+ };
75
+ }
76
+ return result;
77
+ }
78
+ function extractApiFromBaseUrl(openapi) {
79
+ if (openapi.servers && openapi.servers.length > 0) {
80
+ return openapi.servers[0].url;
81
+ }
82
+ return '';
83
+ }
84
+ function getAuthHeaders(openapi, operation) {
85
+ const headers = {};
86
+ const token = process.env.API_TOKEN;
87
+ if (!token || !openapi.components?.securitySchemes) {
88
+ return headers;
89
+ }
90
+ const securitySchemes = openapi.components.securitySchemes;
91
+ let selectedScheme = null;
92
+ // Check for operation-specific security requirements first
93
+ if (operation?.security && operation.security.length > 0) {
94
+ const firstSecurityReq = operation.security[0];
95
+ const operationSchemeNames = Object.keys(firstSecurityReq);
96
+ for (const schemeName of operationSchemeNames) {
97
+ const scheme = securitySchemes[schemeName];
98
+ if (scheme) {
99
+ selectedScheme = scheme;
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ // If no operation-specific scheme found, use the first available scheme
105
+ if (!selectedScheme) {
106
+ const schemes = Object.values(securitySchemes);
107
+ if (schemes.length > 0) {
108
+ selectedScheme = schemes[0];
109
+ }
110
+ }
111
+ if (!selectedScheme) {
112
+ return headers;
113
+ }
114
+ // Set headers based on scheme type
115
+ switch (selectedScheme.type) {
116
+ case 'http':
117
+ if (selectedScheme.scheme === 'bearer') {
118
+ headers['Authorization'] = `Bearer ${token}`;
119
+ }
120
+ else if (selectedScheme.scheme === 'basic') {
121
+ headers['Authorization'] = `Basic ${token}`;
122
+ }
123
+ break;
124
+ case 'apiKey':
125
+ if (selectedScheme.in === 'header') {
126
+ headers[selectedScheme.name] = token;
127
+ }
128
+ break;
129
+ case 'oauth2':
130
+ headers['Authorization'] = `Bearer ${token}`;
131
+ break;
132
+ }
133
+ return headers;
134
+ }
135
+ const defaultFetch = fetch;
136
+ export function createMCPServer({ name = 'spiceflow', version = '1.0.0', openapi, fetch = defaultFetch, paths, ignorePaths, baseUrl = '', }) {
137
+ const server = new Server({ name, version }, {
138
+ capabilities: {
139
+ tools: {},
140
+ resources: {},
141
+ },
142
+ });
143
+ // openapi = deref.dereferenceSync(openapi)
144
+ if (!baseUrl) {
145
+ baseUrl = extractApiFromBaseUrl(openapi);
146
+ }
147
+ if (baseUrl.endsWith('/')) {
148
+ baseUrl = baseUrl.slice(0, -1);
149
+ }
150
+ async function fetchWithBaseServerAndAuth(u, options, operation, userHeaders, userCookies) {
151
+ const authHeaders = getAuthHeaders(openapi, operation);
152
+ // Build cookie string from userCookies
153
+ let cookieHeader = '';
154
+ if (userCookies && Object.keys(userCookies).length > 0) {
155
+ cookieHeader = Object.entries(userCookies)
156
+ .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
157
+ .join('; ');
158
+ }
159
+ const commonHeaders = {};
160
+ const finalHeaders = {
161
+ ...commonHeaders,
162
+ ...(userHeaders || {}),
163
+ ...authHeaders,
164
+ ...(options?.headers || {}),
165
+ };
166
+ if (cookieHeader) {
167
+ // Merge with existing Cookie header if present
168
+ const existingCookie = finalHeaders['Cookie'] || finalHeaders['cookie'];
169
+ finalHeaders['Cookie'] = existingCookie
170
+ ? `${existingCookie}; ${cookieHeader}`
171
+ : cookieHeader;
172
+ }
173
+ console.error(`using headers ${JSON.stringify(finalHeaders, null, 2)}`);
174
+ return await fetch(new URL(u, baseUrl), {
175
+ ...options,
176
+ headers: finalHeaders,
177
+ });
178
+ }
179
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
180
+ const filteredPaths = Object.entries(openapi.paths).filter(([path]) => {
181
+ if (ignorePaths?.includes(path))
182
+ return false;
183
+ if (paths && paths.length > 0) {
184
+ return paths.some((filterPath) => path.startsWith(filterPath));
185
+ }
186
+ return true;
187
+ });
188
+ const tools = filteredPaths.flatMap(([path, pathObj]) => Object.entries(pathObj || {})
189
+ .filter(([method]) => method !== 'parameters')
190
+ .map(([method, operation]) => {
191
+ const properties = {};
192
+ const required = [];
193
+ const requestBody = getOperationRequestBody(operation);
194
+ if (requestBody) {
195
+ properties.body = requestBody;
196
+ required.push('body');
197
+ }
198
+ const { queryParams, pathParams, headerParams, cookieParams } = getOperationParameters(operation);
199
+ if (queryParams) {
200
+ properties.query = queryParams;
201
+ }
202
+ if (pathParams) {
203
+ properties.params = pathParams;
204
+ }
205
+ if (headerParams) {
206
+ properties.headers = headerParams;
207
+ }
208
+ if (cookieParams) {
209
+ properties.cookies = cookieParams;
210
+ }
211
+ let description = `${method.toUpperCase()} route for ${baseUrl}${path}`;
212
+ let moreDescription = operation.description ||
213
+ operation.summary;
214
+ if (moreDescription) {
215
+ description += '. ';
216
+ description += moreDescription;
217
+ }
218
+ return {
219
+ name: getRouteName({ method, path }),
220
+ description,
221
+ inputSchema: {
222
+ type: 'object',
223
+ properties,
224
+ required: required.length > 0 ? required : undefined,
225
+ },
226
+ };
227
+ }));
228
+ return { tools };
229
+ });
230
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
231
+ const toolName = request.params.name;
232
+ let { path, method } = getPathFromToolName(toolName);
233
+ const pathObj = openapi.paths[path];
234
+ if (!pathObj || !pathObj[method.toLowerCase()]) {
235
+ return {
236
+ content: [{ type: 'text', text: `Tool ${toolName} not found` }],
237
+ isError: true,
238
+ };
239
+ }
240
+ try {
241
+ const args = request.params.arguments || {};
242
+ const { body, query, params } = args;
243
+ const userHeaders = args.headers;
244
+ const userCookies = args.cookies;
245
+ const operation = pathObj[method.toLowerCase()];
246
+ if (params) {
247
+ Object.entries(params).forEach(([key, value]) => {
248
+ path = path.replace(`{${key}}`, encodeURIComponent(String(value)));
249
+ });
250
+ }
251
+ if (query) {
252
+ const searchParams = new URLSearchParams();
253
+ Object.entries(query).forEach(([key, value]) => {
254
+ searchParams.set(key, String(value));
255
+ });
256
+ path += `?${searchParams.toString()}`;
257
+ }
258
+ const response = await fetchWithBaseServerAndAuth(path, {
259
+ method,
260
+ headers: {
261
+ 'content-type': 'application/json',
262
+ },
263
+ body: body
264
+ ? typeof body === 'string'
265
+ ? body
266
+ : JSON.stringify(body)
267
+ : undefined,
268
+ }, operation, userHeaders, userCookies);
269
+ const isError = !response.ok;
270
+ const contentType = response.headers.get('content-type');
271
+ if (contentType?.includes('application/json')) {
272
+ const json = await response.json();
273
+ return {
274
+ isError,
275
+ content: [{ type: 'text', text: JSON.stringify(json, null, 2) }],
276
+ };
277
+ }
278
+ const text = await response.text();
279
+ return {
280
+ isError,
281
+ content: [{ type: 'text', text }],
282
+ };
283
+ }
284
+ catch (error) {
285
+ return {
286
+ content: [{ type: 'text', text: error.message || 'Unknown error' }],
287
+ isError: true,
288
+ };
289
+ }
290
+ });
291
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
292
+ const resources = [];
293
+ for (const [path, pathObj] of Object.entries(openapi.paths)) {
294
+ if (path.startsWith('/mcp')) {
295
+ continue;
296
+ }
297
+ const getOperation = pathObj?.get;
298
+ if (getOperation && !path.includes('{')) {
299
+ const { queryParams, headerParams, cookieParams } = getOperationParameters(getOperation);
300
+ const hasRequiredQuery = queryParams?.required && queryParams.required.length > 0;
301
+ const hasRequiredHeaders = headerParams?.required && headerParams.required.length > 0;
302
+ const hasRequiredCookies = cookieParams?.required && cookieParams.required.length > 0;
303
+ if (!hasRequiredQuery && !hasRequiredHeaders && !hasRequiredCookies) {
304
+ resources.push({
305
+ uri: path,
306
+ mimeType: 'application/json',
307
+ name: `GET ${path}`,
308
+ });
309
+ }
310
+ }
311
+ }
312
+ return { resources: [] };
313
+ });
314
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
315
+ throw new Error('Resources are not supported - use tools instead');
316
+ });
317
+ return { server };
318
+ }
319
+ function getRouteName({ method, path, }) {
320
+ return formatToolName(`${method.toUpperCase()} ${path}`, method, path);
321
+ }
322
+ const toolNameToPath = new Map();
323
+ function getPathFromToolName(toolName) {
324
+ const cached = toolNameToPath.get(toolName);
325
+ if (cached) {
326
+ return cached;
327
+ }
328
+ throw new Error(`Tool name '${toolName}' not found. It might not have been registered or was invalid.`);
329
+ }
330
+ function formatToolName(nameToFormat, method, pathForMap) {
331
+ if (!nameToFormat || nameToFormat.trim() === '') {
332
+ throw new Error('Original tool name for formatting cannot be empty');
333
+ }
334
+ // Replace spaces and other invalid characters with underscores
335
+ let formatted = nameToFormat
336
+ .replace(/[^a-zA-Z0-9_-]/g, '_')
337
+ .replace(/_+/g, '_') // Replace multiple underscores with single underscore
338
+ .replace(/^_+|_+$/g, ''); // Remove leading/trailing underscores
339
+ // Truncate to 64 characters if necessary
340
+ if (formatted.length > 64) {
341
+ formatted = formatted.substring(0, 64);
342
+ }
343
+ // Remove trailing underscores again in case truncation created them or they persisted
344
+ formatted = formatted.replace(/_+$/, '');
345
+ if (formatted === '') {
346
+ throw new Error(`Tool name results in empty string after formatting (from original: '${nameToFormat}')`);
347
+ }
348
+ // Validate against regex
349
+ const regex = /^[a-zA-Z0-9_-]{1,64}$/;
350
+ if (!regex.test(formatted)) {
351
+ throw new Error(`Formatted tool name "${formatted}" (from original: '${nameToFormat}') does not match required pattern: ^[a-zA-Z0-9_-]{1,64}$`);
352
+ }
353
+ // Check for duplicates: if this formatted name already exists and belongs to a DIFFERENT tool (method/path), it's a collision.
354
+ const existingEntry = toolNameToPath.get(formatted);
355
+ if (existingEntry &&
356
+ (existingEntry.method !== method || existingEntry.path !== pathForMap)) {
357
+ console.error(new Error(`Duplicate tool name generated: '${formatted}'. ` +
358
+ `This name was generated for original: '${nameToFormat}' (method: '${method}', path: '${pathForMap}'). ` +
359
+ `It conflicts with an existing tool that also maps to '${formatted}', originally from (method: '${existingEntry.method}', path: '${existingEntry.path}'). ` +
360
+ `Ensure operationIds or path/method combinations in your OpenAPI spec are sufficiently unique to avoid naming collisions after formatting.`));
361
+ }
362
+ // Register the name with its method and path.
363
+ // If the same tool (method/path) is formatted again to the same name, this just overwrites with identical values.
364
+ toolNameToPath.set(formatted, { method, path: pathForMap });
365
+ return formatted;
366
+ }
367
+ //# sourceMappingURL=openapi-to-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-to-mcp.js","sourceRoot":"","sources":["../src/openapi-to-mcp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AA4V9C,eAAO,MAAM,OAAO,GAAI,IAAI,SAAS,MAAM,GAAG,UAAU,EAAE,0BAGvD;IACD,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,GAAG,IAAI,CACN,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EACzB,yCAAyC,GACzC,qCAAqC,CACxC,GAAG;IACA,uBAAuB,CAAC,EAAE,KAAK,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;IACF,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAA;YACd,OAAO,EAAE,MAAM,CAAA;YACf,MAAM,EAAE,MAAM,EAAE,CAAA;SACjB,CAAA;KACF,CAAA;CACG;;;;;;;;;;;;;;;;;;;6GAkFP,CAAA"}
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AA8V9C,eAAO,MAAM,OAAO,GAAI,IAAI,SAAS,MAAM,GAAG,UAAU,EAAE,0BAGvD;IACD,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,GAAG,IAAI,CACN,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EACzB,yCAAyC,GACzC,qCAAqC,CACxC,GAAG;IACA,uBAAuB,CAAC,EAAE,KAAK,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;IACF,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAA;YACd,OAAO,EAAE,MAAM,CAAA;YACf,MAAM,EAAE,MAAM,EAAE,CAAA;SACjB,CAAA;KACF,CAAA;CACG;;;;;;;;;;;;;;;;;;;6GAsFP,CAAA"}
package/dist/openapi.js CHANGED
@@ -77,7 +77,7 @@ const generateOperationId = (method, paths) => {
77
77
  }
78
78
  return operationId;
79
79
  };
80
- const registerSchemaPath = ({ schema, route, models, }) => {
80
+ const registerSchemaPath = ({ schema, route, models, basePath, }) => {
81
81
  const hooks = route.hooks;
82
82
  let contentTypes = ['application/json'];
83
83
  if (isAsyncGenerator(route.handler) && !route.hooks?.response) {
@@ -252,6 +252,7 @@ export const openapi = ({ path = '/openapi', ...additional } = {}) => {
252
252
  let totalRoutes = 0;
253
253
  const relativePath = path.startsWith('/') ? path.slice(1) : path;
254
254
  const app = new Spiceflow({ name: 'openapi' }).get(path, ({}) => {
255
+ const basePath = app.topLevelApp.basePath; // TODO this does not work
255
256
  let routes = app.getAllRoutes();
256
257
  if (routes.length !== totalRoutes) {
257
258
  const ALLOWED_METHODS = [
@@ -266,6 +267,8 @@ export const openapi = ({ path = '/openapi', ...additional } = {}) => {
266
267
  ];
267
268
  totalRoutes = routes.length;
268
269
  routes.forEach((route) => {
270
+ if (route.path.startsWith('_mcp_'))
271
+ return;
269
272
  if (route.hooks?.detail?.hide === true)
270
273
  return;
271
274
  // TODO: route.hooks?.detail?.hide !== false add ability to hide: false to prevent excluding
@@ -277,15 +280,16 @@ export const openapi = ({ path = '/openapi', ...additional } = {}) => {
277
280
  if (route.method === 'ALL') {
278
281
  ALLOWED_METHODS.forEach((method) => {
279
282
  registerSchemaPath({
283
+ basePath,
280
284
  schema,
281
285
  route: { ...route, method },
282
- // @ts-ignore
283
286
  models: app.definitions?.type,
284
287
  });
285
288
  });
286
289
  return;
287
290
  }
288
291
  registerSchemaPath({
292
+ basePath,
289
293
  schema,
290
294
  route,
291
295
  // @ts-ignore
@@ -357,3 +361,4 @@ function isAsyncGenerator(fn) {
357
361
  typeof fn === 'function' &&
358
362
  fn.constructor?.name === 'AsyncGeneratorFunction');
359
363
  }
364
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { z as z4 } from 'zod/v4';
4
4
  import { openapi } from "./openapi.js";
5
5
  import { Spiceflow } from "./spiceflow.js";
6
6
  test('openapi response', async () => {
7
- const app = new Spiceflow()
7
+ const app = new Spiceflow({ basePath: '/base' })
8
8
  .use(openapi({
9
9
  info: {
10
10
  title: 'Spiceflow Docs',
@@ -115,73 +115,73 @@ test('openapi response', async () => {
115
115
  }),
116
116
  }));
117
117
  const openapiSchema = await app
118
- .handle(new Request('http://localhost/openapi'))
118
+ .handle(new Request('http://localhost/base/openapi'))
119
119
  .then((x) => x.json());
120
120
  expect(openapiSchema).toMatchInlineSnapshot(`
121
121
  {
122
122
  "__superjsonMeta": {
123
123
  "values": {
124
- "paths./addBody.patch.responses.200.content.application/json.schema.items": [
124
+ "paths./base/addBody.patch.responses.200.content.application/json.schema.items": [
125
125
  "undefined",
126
126
  ],
127
- "paths./addBody.patch.responses.200.content.application/json.schema.patternProperties": [
127
+ "paths./base/addBody.patch.responses.200.content.application/json.schema.patternProperties": [
128
128
  "undefined",
129
129
  ],
130
- "paths./addBody.patch.responses.200.content.application/json.schema.required": [
130
+ "paths./base/addBody.patch.responses.200.content.application/json.schema.required": [
131
131
  "undefined",
132
132
  ],
133
- "paths./formWithSchemaForm.post.responses.200.content.multipart/form-data.schema.items": [
133
+ "paths./base/formWithSchemaForm.post.responses.200.content.multipart/form-data.schema.items": [
134
134
  "undefined",
135
135
  ],
136
- "paths./formWithSchemaForm.post.responses.200.content.multipart/form-data.schema.patternProperties": [
136
+ "paths./base/formWithSchemaForm.post.responses.200.content.multipart/form-data.schema.patternProperties": [
137
137
  "undefined",
138
138
  ],
139
- "paths./one/ids/{id}.get.parameters.0.description": [
139
+ "paths./base/one/ids/{id}.get.parameters.0.description": [
140
140
  "undefined",
141
141
  ],
142
- "paths./one/ids/{id}.get.parameters.0.examples": [
142
+ "paths./base/one/ids/{id}.get.parameters.0.examples": [
143
143
  "undefined",
144
144
  ],
145
- "paths./one/ids/{id}.get.responses.404.content.application/json.schema.items": [
145
+ "paths./base/one/ids/{id}.get.responses.404.content.application/json.schema.items": [
146
146
  "undefined",
147
147
  ],
148
- "paths./one/ids/{id}.get.responses.404.content.application/json.schema.patternProperties": [
148
+ "paths./base/one/ids/{id}.get.responses.404.content.application/json.schema.patternProperties": [
149
149
  "undefined",
150
150
  ],
151
- "paths./queryParams.get.parameters.0.description": [
151
+ "paths./base/queryParams.get.parameters.0.description": [
152
152
  "undefined",
153
153
  ],
154
- "paths./queryParams.get.parameters.0.examples": [
154
+ "paths./base/queryParams.get.parameters.0.examples": [
155
155
  "undefined",
156
156
  ],
157
- "paths./queryParams.get.responses.200.content.application/json.schema.items": [
157
+ "paths./base/queryParams.get.responses.200.content.application/json.schema.items": [
158
158
  "undefined",
159
159
  ],
160
- "paths./queryParams.get.responses.200.content.application/json.schema.patternProperties": [
160
+ "paths./base/queryParams.get.responses.200.content.application/json.schema.patternProperties": [
161
161
  "undefined",
162
162
  ],
163
- "paths./queryParams.get.responses.200.content.application/json.schema.required": [
163
+ "paths./base/queryParams.get.responses.200.content.application/json.schema.required": [
164
164
  "undefined",
165
165
  ],
166
- "paths./queryParams.post.responses.200.content.application/json.schema.items": [
166
+ "paths./base/queryParams.post.responses.200.content.application/json.schema.items": [
167
167
  "undefined",
168
168
  ],
169
- "paths./queryParams.post.responses.200.content.application/json.schema.patternProperties": [
169
+ "paths./base/queryParams.post.responses.200.content.application/json.schema.patternProperties": [
170
170
  "undefined",
171
171
  ],
172
- "paths./queryParams.post.responses.200.content.application/json.schema.required": [
172
+ "paths./base/queryParams.post.responses.200.content.application/json.schema.required": [
173
173
  "undefined",
174
174
  ],
175
- "paths./streamWithSchema.get.responses.200.content.application/json.schema.items": [
175
+ "paths./base/streamWithSchema.get.responses.200.content.application/json.schema.items": [
176
176
  "undefined",
177
177
  ],
178
- "paths./streamWithSchema.get.responses.200.content.application/json.schema.patternProperties": [
178
+ "paths./base/streamWithSchema.get.responses.200.content.application/json.schema.patternProperties": [
179
179
  "undefined",
180
180
  ],
181
- "paths./two/ids/{id}.get.parameters.0.description": [
181
+ "paths./base/two/ids/{id}.get.parameters.0.description": [
182
182
  "undefined",
183
183
  ],
184
- "paths./two/ids/{id}.get.parameters.0.examples": [
184
+ "paths./base/two/ids/{id}.get.parameters.0.examples": [
185
185
  "undefined",
186
186
  ],
187
187
  },
@@ -196,7 +196,7 @@ test('openapi response', async () => {
196
196
  },
197
197
  "openapi": "3.1.3",
198
198
  "paths": {
199
- "/addBody": {
199
+ "/base/addBody": {
200
200
  "patch": {
201
201
  "parameters": [],
202
202
  "requestBody": {
@@ -247,7 +247,7 @@ test('openapi response', async () => {
247
247
  },
248
248
  },
249
249
  },
250
- "/formWithSchemaForm": {
250
+ "/base/formWithSchemaForm": {
251
251
  "post": {
252
252
  "description": "This returns form data with schema",
253
253
  "responses": {
@@ -286,7 +286,7 @@ test('openapi response', async () => {
286
286
  },
287
287
  },
288
288
  },
289
- "/one/ids/{id}": {
289
+ "/base/one/ids/{id}": {
290
290
  "get": {
291
291
  "parameters": [
292
292
  {
@@ -342,7 +342,7 @@ test('openapi response', async () => {
342
342
  },
343
343
  },
344
344
  },
345
- "/openapi": {
345
+ "/base/openapi": {
346
346
  "get": {
347
347
  "responses": {
348
348
  "200": {
@@ -364,7 +364,7 @@ test('openapi response', async () => {
364
364
  },
365
365
  },
366
366
  },
367
- "/queryParams": {
367
+ "/base/queryParams": {
368
368
  "get": {
369
369
  "parameters": [
370
370
  {
@@ -460,7 +460,7 @@ test('openapi response', async () => {
460
460
  },
461
461
  },
462
462
  },
463
- "/stream": {
463
+ "/base/stream": {
464
464
  "get": {
465
465
  "description": "This is a stream",
466
466
  "responses": {
@@ -486,7 +486,7 @@ test('openapi response', async () => {
486
486
  },
487
487
  },
488
488
  },
489
- "/streamWithSchema": {
489
+ "/base/streamWithSchema": {
490
490
  "get": {
491
491
  "description": "This is a stream with schema",
492
492
  "responses": {
@@ -524,7 +524,7 @@ test('openapi response', async () => {
524
524
  },
525
525
  },
526
526
  },
527
- "/two/ids/{id}": {
527
+ "/base/two/ids/{id}": {
528
528
  "get": {
529
529
  "parameters": [
530
530
  {
@@ -562,3 +562,4 @@ test('openapi response', async () => {
562
562
  }
563
563
  `);
564
564
  });
565
+ //# sourceMappingURL=openapi.test.js.map