Files
FrozenFriendsYume/packages/backend/built/server/api/define.js
T
2026-07-26 18:25:37 +09:00

39 lines
1.3 KiB
JavaScript

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);
};
}