kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
pull/715/head
rodzic
9de0192922
commit
4ebfcd35d5
|
@ -246,6 +246,10 @@ et est aut quod aut provident voluptas autem voluptas",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`OpenAPI kitchen echo tool with empty body > 9.0: POST @dev/test-everything-openapi/echo 1`] = `{}`;
|
||||||
|
|
||||||
|
exports[`OpenAPI kitchen echo tool with empty body > 9.1: POST @dev/test-everything-openapi/echo 1`] = `{}`;
|
||||||
|
|
||||||
exports[`OpenAPI kitchen sink pure tool > 7.0: POST @dev/test-everything-openapi/pure 1`] = `
|
exports[`OpenAPI kitchen sink pure tool > 7.0: POST @dev/test-everything-openapi/pure 1`] = `
|
||||||
{
|
{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
|
@ -259,3 +263,17 @@ exports[`OpenAPI kitchen sink pure tool > 7.1: POST @dev/test-everything-openapi
|
||||||
"nala": "kitten",
|
"nala": "kitten",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`OpenAPI kitchen sink unpure_marked_pure tool > 10.0: POST @dev/test-everything-openapi/unpure_marked_pure 1`] = `
|
||||||
|
{
|
||||||
|
"nala": "cat",
|
||||||
|
"now": 1749631781793,
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`OpenAPI kitchen sink unpure_marked_pure tool > 10.1: POST @dev/test-everything-openapi/unpure_marked_pure 1`] = `
|
||||||
|
{
|
||||||
|
"nala": "cat",
|
||||||
|
"now": 1749631781793,
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { expect } from 'vitest'
|
||||||
|
|
||||||
export type E2ETestFixture = {
|
export type E2ETestFixture = {
|
||||||
path: string
|
path: string
|
||||||
|
|
||||||
|
@ -554,5 +556,83 @@ export const fixtureSuites: E2ETestFixtureSuite[] = [
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'OpenAPI kitchen sink disabled tool',
|
||||||
|
fixtures: [
|
||||||
|
{
|
||||||
|
path: '@dev/test-everything-openapi/disabled_tool',
|
||||||
|
request: {
|
||||||
|
method: 'POST'
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
status: 404
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'OpenAPI kitchen echo tool with empty body',
|
||||||
|
compareResponseBodies: true,
|
||||||
|
fixtures: [
|
||||||
|
{
|
||||||
|
path: '@dev/test-everything-openapi/echo',
|
||||||
|
request: {
|
||||||
|
method: 'POST'
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
body: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '@dev/test-everything-openapi/echo',
|
||||||
|
request: {
|
||||||
|
method: 'POST',
|
||||||
|
json: {}
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
body: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'OpenAPI kitchen sink unpure_marked_pure tool',
|
||||||
|
compareResponseBodies: true,
|
||||||
|
fixtures: [
|
||||||
|
{
|
||||||
|
path: '@dev/test-everything-openapi/unpure_marked_pure',
|
||||||
|
request: {
|
||||||
|
method: 'POST',
|
||||||
|
json: {
|
||||||
|
nala: 'cat'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
validate: (body) => {
|
||||||
|
expect(body?.nala).toEqual('cat')
|
||||||
|
expect(typeof body.now).toBe('number')
|
||||||
|
expect(body.now).toBeGreaterThan(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '@dev/test-everything-openapi/unpure_marked_pure',
|
||||||
|
request: {
|
||||||
|
method: 'POST',
|
||||||
|
json: {
|
||||||
|
nala: 'cat'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
headers: {
|
||||||
|
'cf-cache-status': 'HIT'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// compareResponseBodies should result in the same cached response body,
|
||||||
|
// even though the origin would return a different `now` value if it
|
||||||
|
// weren't marked `pure`.
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -49,7 +49,6 @@ export const fixtureSuites: MCPE2ETestFixtureSuite[] = [
|
||||||
{
|
{
|
||||||
title: 'Basic MCP => OpenAPI get_post success',
|
title: 'Basic MCP => OpenAPI get_post success',
|
||||||
path: '@dev/test-basic-openapi/mcp',
|
path: '@dev/test-basic-openapi/mcp',
|
||||||
// debug: true,
|
|
||||||
fixtures: [
|
fixtures: [
|
||||||
{
|
{
|
||||||
request: {
|
request: {
|
||||||
|
|
|
@ -43,10 +43,16 @@ export async function getToolArgsFromRequest(
|
||||||
|
|
||||||
return incomingRequestArgs
|
return incomingRequestArgs
|
||||||
} else if (request.method === 'POST') {
|
} else if (request.method === 'POST') {
|
||||||
const incomingRequestArgsRaw = (await request.clone().json()) as Record<
|
let incomingRequestArgsRaw: unknown = {}
|
||||||
string,
|
|
||||||
any
|
// TODO: verify content-type of request is application/json
|
||||||
>
|
|
||||||
|
try {
|
||||||
|
incomingRequestArgsRaw = (await request.json()) as Record<string, any>
|
||||||
|
} catch {
|
||||||
|
// If the request body is not JSON or malformed, ignore it for now.
|
||||||
|
// TODO: need to improve on this logic.
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Proper support for empty params with POST requests
|
// TODO: Proper support for empty params with POST requests
|
||||||
assert(incomingRequestArgsRaw, 400, 'Invalid empty request body')
|
assert(incomingRequestArgsRaw, 400, 'Invalid empty request body')
|
||||||
|
|
|
@ -126,11 +126,11 @@ export async function resolveOriginToolCall({
|
||||||
if (pricingPlanToolOverride.enabled !== undefined) {
|
if (pricingPlanToolOverride.enabled !== undefined) {
|
||||||
assert(
|
assert(
|
||||||
pricingPlanToolOverride.enabled,
|
pricingPlanToolOverride.enabled,
|
||||||
403,
|
toolConfig.enabled ? 403 : 404,
|
||||||
`Tool "${tool.name}" is disabled for pricing plan "${pricingPlan.slug}"`
|
`Tool "${tool.name}" is disabled for pricing plan "${pricingPlan.slug}"`
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
assert(toolConfig.enabled, 403, `Tool "${tool.name}" is disabled`)
|
assert(toolConfig.enabled, 404, `Tool "${tool.name}" is disabled`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pricingPlanToolOverride.reportUsage !== undefined) {
|
if (pricingPlanToolOverride.reportUsage !== undefined) {
|
||||||
|
@ -142,7 +142,7 @@ export async function resolveOriginToolCall({
|
||||||
rateLimit = pricingPlanToolOverride.rateLimit as RateLimit
|
rateLimit = pricingPlanToolOverride.rateLimit as RateLimit
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
assert(toolConfig.enabled, 403, `Tool "${tool.name}" is disabled`)
|
assert(toolConfig.enabled, 404, `Tool "${tool.name}" is disabled`)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Default to not caching any responses.
|
// Default to not caching any responses.
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
- oauth flow
|
- oauth flow
|
||||||
- https://docs.scalekit.com/guides/mcp/oauth
|
- https://docs.scalekit.com/guides/mcp/oauth
|
||||||
- openapi-kitchen-sink
|
- openapi-kitchen-sink
|
||||||
|
- add more test cases to e2e tests
|
||||||
- mcp-kitchen-sink
|
- mcp-kitchen-sink
|
||||||
- how to handle binary bodies and responses?
|
- how to handle binary bodies and responses?
|
||||||
- improve logger vs console for non-hono path and util methods
|
- improve logger vs console for non-hono path and util methods
|
||||||
|
|
Ładowanie…
Reference in New Issue