From 16e8eab836f0a019ce859e78731fefa5bd82e336 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sun, 28 Aug 2022 02:48:53 -0400 Subject: [PATCH] *Remove use of anyOf and set Avj allowUnionTypes *Compile schema to validateRpcRequest *Use errorsText to generate errors for validation --- src/rpc/server.ts | 9 +++++---- src/types.ts | 9 +-------- 2 files changed, 6 insertions(+), 12 deletions(-) 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",