import * as fs from "node:fs"; import Ajv from "ajv"; import { ApiError } from "./error.js"; const ajv = new Ajv({ useDefaults: true }); ajv.addFormat("misskey:id", /^[a-zA-Z0-9]+$/); export default function(meta, paramDef, cb) { const validate = ajv.compile(paramDef); return (params, user, token, file, ip, headers)=>{ let cleanup = undefined; if (meta.requireFile) { cleanup = ()=>{ fs.unlink(file.path, ()=>{}); }; if (file == null) return Promise.reject(new ApiError({ message: "File required.", code: "FILE_REQUIRED", id: "4267801e-70d1-416a-b011-4ee502885d8b" })); } const valid = validate(params); if (!valid) { if (file) cleanup(); const errors = validate.errors; const err = new ApiError({ message: "Invalid param.", code: "INVALID_PARAM", id: "3d81ceae-475f-4600-b2a8-2bc116157532" }, { param: errors[0].schemaPath, reason: errors[0].message }); return Promise.reject(err); } return cb(params, user, token, file, cleanup, ip, headers); }; }