cf-solver / module /openapi.js
Samuel
update
15f7aec
const openApiSpec = {
openapi: "3.0.3",
info: {
title: "CF Bypass Solver API",
description: "API for solving Cloudflare challenges including Turnstile captchas, WAF sessions, and proxy requests.",
version: "1.0.0"
},
servers: [
{
url: "/",
description: "Current server"
}
],
paths: {
"/solver": {
get: {
summary: "Solver endpoint (GET)",
description: "Handle solver requests via GET method. The mode parameter determines which solver to use.",
parameters: [
{ $ref: "#/components/parameters/mode" },
{ $ref: "#/components/parameters/url" },
{ $ref: "#/components/parameters/authToken" },
{ $ref: "#/components/parameters/siteKey" }
],
responses: {
200: { $ref: "#/components/responses/SuccessResponse" },
400: { $ref: "#/components/responses/BadRequest" },
401: { $ref: "#/components/responses/Unauthorized" },
429: { $ref: "#/components/responses/TooManyRequests" },
500: { $ref: "#/components/responses/ServerError" }
}
},
post: {
summary: "Solver endpoint (POST)",
description: "Handle solver requests via POST method. The mode parameter determines which solver to use.",
requestBody: {
required: true,
content: {
"application/json": {
schema: { $ref: "#/components/schemas/SolverRequest" }
}
}
},
responses: {
200: { $ref: "#/components/responses/SuccessResponse" },
400: { $ref: "#/components/responses/BadRequest" },
401: { $ref: "#/components/responses/Unauthorized" },
429: { $ref: "#/components/responses/TooManyRequests" },
500: { $ref: "#/components/responses/ServerError" }
}
}
},
"/api-docs": {
get: {
summary: "OpenAPI Documentation UI",
description: "Interactive Swagger UI documentation for the API.",
responses: {
200: {
description: "HTML page with Swagger UI"
}
}
}
},
"/api-docs.json": {
get: {
summary: "OpenAPI JSON Specification",
description: "Returns the raw OpenAPI specification in JSON format.",
responses: {
200: {
description: "OpenAPI specification",
content: {
"application/json": {
schema: {
type: "object"
}
}
}
}
}
}
}
},
components: {
parameters: {
mode: {
name: "mode",
in: "query",
required: true,
description: "The solver mode to use",
schema: {
type: "string",
enum: ["source", "turnstile-min", "turnstile-max", "waf-session", "proxy-request"]
}
},
url: {
name: "url",
in: "query",
required: true,
description: "Target URL to process",
schema: {
type: "string",
format: "uri"
}
},
authToken: {
name: "authToken",
in: "query",
required: false,
description: "Authentication token (required if server has authToken configured)",
schema: {
type: "string"
}
},
siteKey: {
name: "siteKey",
in: "query",
required: false,
description: "Turnstile site key (required for turnstile modes)",
schema: {
type: "string"
}
}
},
schemas: {
SolverRequest: {
type: "object",
required: ["mode", "url"],
properties: {
mode: {
type: "string",
enum: ["source", "turnstile-min", "turnstile-max", "waf-session", "proxy-request"],
description: "The solver mode to use"
},
url: {
type: "string",
format: "uri",
description: "Target URL to process"
},
authToken: {
type: "string",
description: "Authentication token (required if server has authToken configured)"
},
siteKey: {
type: "string",
description: "Turnstile site key (required for turnstile modes)"
},
proxy: {
type: "object",
description: "Proxy configuration",
properties: {
host: { type: "string", description: "Proxy host" },
port: { type: "integer", description: "Proxy port" },
username: { type: "string", description: "Proxy username" },
password: { type: "string", description: "Proxy password" }
}
},
method: {
type: "string",
enum: ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"],
description: "HTTP method for proxy-request mode"
},
body: {
oneOf: [
{ type: "string" },
{ type: "object" }
],
description: "Request body for proxy-request mode"
},
headers: {
type: "object",
description: "Custom headers for the request"
},
cookies: {
type: "array",
description: "Cookies to set for the request",
items: {
type: "object",
required: ["name", "value"],
properties: {
name: { type: "string" },
value: { type: "string" },
domain: { type: "string" },
path: { type: "string" },
secure: { type: "boolean" },
httpOnly: { type: "boolean" },
sameSite: { type: "string" }
}
}
},
sessionHeaders: {
type: "object",
description: "Session headers for waf-session mode"
}
}
},
SourceResponse: {
type: "object",
properties: {
code: { type: "integer", example: 200 },
source: { type: "string", description: "Page source HTML" }
}
},
TurnstileResponse: {
type: "object",
properties: {
code: { type: "integer", example: 200 },
token: { type: "string", description: "Solved Turnstile token" }
}
},
WafSessionResponse: {
type: "object",
properties: {
code: { type: "integer", example: 200 },
cookies: { type: "array", items: { type: "object" } },
headers: { type: "object" }
}
},
ProxyRequestResponse: {
type: "object",
properties: {
code: { type: "integer", example: 200 },
status: { type: "integer" },
headers: { type: "object" },
body: { type: "string" }
}
},
ErrorResponse: {
type: "object",
properties: {
code: { type: "integer" },
message: { type: "string" }
}
}
},
responses: {
SuccessResponse: {
description: "Successful response. Content varies based on mode used.",
content: {
"application/json": {
schema: {
oneOf: [
{ $ref: "#/components/schemas/SourceResponse" },
{ $ref: "#/components/schemas/TurnstileResponse" },
{ $ref: "#/components/schemas/WafSessionResponse" },
{ $ref: "#/components/schemas/ProxyRequestResponse" }
]
}
}
}
},
BadRequest: {
description: "Invalid request parameters",
content: {
"application/json": {
schema: {
type: "object",
properties: {
code: { type: "integer", example: 400 },
message: { type: "string", example: "Bad Request" },
schema: { type: "array", items: { type: "object" } }
}
}
}
}
},
Unauthorized: {
description: "Invalid or missing authentication token",
content: {
"application/json": {
schema: { $ref: "#/components/schemas/ErrorResponse" },
example: { code: 401, message: "Unauthorized" }
}
}
},
TooManyRequests: {
description: "Browser limit reached",
content: {
"application/json": {
schema: { $ref: "#/components/schemas/ErrorResponse" },
example: { code: 429, message: "Too Many Requests" }
}
}
},
ServerError: {
description: "Internal server error",
content: {
"application/json": {
schema: { $ref: "#/components/schemas/ErrorResponse" },
example: { code: 500, message: "Error message" }
}
}
}
}
}
};
module.exports = openApiSpec;