diff --git a/src/rpc/server.ts b/src/rpc/server.ts index 1a74363..d0d6b16 100644 --- a/src/rpc/server.ts +++ b/src/rpc/server.ts @@ -15,8 +15,8 @@ import stringify from "json-stable-stringify"; import Ajv from "ajv"; import RPCConnection from "./connection.js"; -const ajv = new Ajv(); -ajv.addSchema(RPC_REQUEST_SCHEMA, "rpc_request"); +const ajv = new Ajv({ allowUnionTypes: true }); +const validateRpcRequest = ajv.compile(RPC_REQUEST_SCHEMA); let server: RPCServer; @@ -193,9 +193,10 @@ export class RPCServer { } private verifyRequest(request: RPCRequest) { - let valid: any = ajv.getSchema("rpc_request")?.(request); + let valid: boolean | Error | RPCMethod = validateRpcRequest(request); + if (!valid) { - return new Error("Invalid request"); + return new Error(ajv.errorsText(validateRpcRequest.errors)); } valid = this.getMethodByRequest(request); diff --git a/src/types.ts b/src/types.ts index 9e8fee9..00e7a53 100644 --- a/src/types.ts +++ b/src/types.ts @@ -34,14 +34,7 @@ export const RPC_REQUEST_SCHEMA: JSONSchemaType = { type: "string", }, data: { - type: "string", - anyOf: [ - { type: "string" }, - { type: "number" }, - { type: "integer" }, - { type: "object" }, - { type: "array" }, - ], + type: ["number", "string", "boolean", "object", "array"], }, bypassCache: { type: "boolean",