| const Ajv = require("ajv") |
| const addFormats = require("ajv-formats") |
|
|
| const ajv = new Ajv() |
| addFormats(ajv) |
|
|
| const schema = { |
| "type": "object", |
| "properties": { |
| "mode": { |
| "type": "string", |
| "enum": ["source", "turnstile-min", "turnstile-max", "waf-session", "proxy-request"], |
| }, |
| "proxy": { |
| "type": "object", |
| "properties": { |
| "host": { "type": "string" }, |
| "port": { "type": "integer" }, |
| "username": { "type": "string" }, |
| "password": { "type": "string" } |
| }, |
| "additionalProperties": false |
| }, |
| "url": { |
| "type": "string", |
| "format": "uri", |
| }, |
| "authToken": { |
| "type": "string" |
| }, |
| "siteKey": { |
| "type": "string" |
| }, |
| "method": { |
| "type": "string", |
| "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"] |
| }, |
| "body": { |
| "type": ["string", "object"] |
| }, |
| "headers": { |
| "type": "object" |
| }, |
| "cookies": { |
| "type": "array", |
| "items": { |
| "type": "object", |
| "properties": { |
| "name": { "type": "string" }, |
| "value": { "type": "string" }, |
| "domain": { "type": "string" }, |
| "path": { "type": "string" }, |
| "secure": { "type": "boolean" }, |
| "httpOnly": { "type": "boolean" }, |
| "sameSite": { "type": "string" } |
| }, |
| "required": ["name", "value"] |
| } |
| }, |
| "sessionHeaders": { |
| "type": "object" |
| } |
| }, |
| "required": ["mode", "url"], |
| "additionalProperties": false |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| function validate(data) { |
| const valid = ajv.validate(schema, data) |
| if (!valid) return ajv.errors |
| else return true |
| } |
|
|
| module.exports = validate |