import { ISLAND, LogicError } from '../utils/error'; import { logger } from '../utils/logger'; import { RpcRequest } from '../utils/rpc-request'; import translateSchemaType from './schema-types'; import inspector = require('schema-inspector'); export function sanitize(subschema, target) { if (!subschema) return target; translateSchemaType(subschema); const result = inspector.sanitize(subschema, target); logger.debug(`sanitized: ${result.data}`); return result.data; } export function validate(subschema, target, name: string = '', type: string = ''): boolean { if (!subschema) return true; translateSchemaType(subschema); const result = inspector.validate(subschema, target); if (!result.valid) { let logFunc = logger.debug; if (type === 'query') { logFunc = logger.notice; } logFunc(`${type}(${name}) validation failed. ${result.valid} / ${result.format()}`); } return result.valid; } export default function paramSchemaInspector(req: RpcRequest) { if (!req.options.schema) return; if (!req.options.schema.query) return; const schema = req.options.schema.query.validation; if (schema) { const valid = validate(schema, req.msg); if (!valid) throw new LogicError(ISLAND.ERROR.E0031_WRONG_PARAMETER_SCHEMA, `Wrong parameter schema`); } logger.debug(`RPC schema verified, RPC: ${req.name}`); }