import { DriveFiles } from "../../../../../models/index.js"; import define from "../../../define.js"; import { ApiError } from "../../../error.js"; export const meta = { tags: [ "admin" ], requireCredential: true, requireModerator: true, errors: { noSuchFile: { message: "No such file.", code: "NO_SUCH_FILE", id: "caf3ca38-c6e5-472e-a30c-b05377dcc240" } }, res: { type: "object", optional: false, nullable: false, properties: { id: { type: "string", optional: false, nullable: false, format: "id", example: "xxxxxxxxxx" }, createdAt: { type: "string", optional: false, nullable: false, format: "date-time" }, userId: { type: "string", optional: false, nullable: true, format: "id", example: "xxxxxxxxxx" }, userHost: { type: "string", optional: false, nullable: true, description: "The local host is represented with `null`." }, md5: { type: "string", optional: false, nullable: false, format: "md5", example: "15eca7fba0480996e2245f5185bf39f2" }, name: { type: "string", optional: false, nullable: false, example: "lenna.jpg" }, type: { type: "string", optional: false, nullable: false, example: "image/jpeg" }, size: { type: "number", optional: false, nullable: false, example: 51469 }, comment: { type: "string", optional: false, nullable: true }, blurhash: { type: "string", optional: false, nullable: true }, properties: { type: "object", optional: false, nullable: false, properties: { width: { type: "number", optional: false, nullable: false, example: 1280 }, height: { type: "number", optional: false, nullable: false, example: 720 }, avgColor: { type: "string", optional: true, nullable: false, example: "rgb(40,65,87)" } } }, storedInternal: { type: "boolean", optional: false, nullable: true, example: true }, url: { type: "string", optional: false, nullable: true, format: "url" }, thumbnailUrl: { type: "string", optional: false, nullable: true, format: "url" }, webpublicUrl: { type: "string", optional: false, nullable: true, format: "url" }, accessKey: { type: "string", optional: false, nullable: false }, thumbnailAccessKey: { type: "string", optional: false, nullable: false }, webpublicAccessKey: { type: "string", optional: false, nullable: false }, uri: { type: "string", optional: false, nullable: true }, src: { type: "string", optional: false, nullable: true }, folderId: { type: "string", optional: false, nullable: true, format: "id", example: "xxxxxxxxxx" }, isSensitive: { type: "boolean", optional: false, nullable: false }, isLink: { type: "boolean", optional: false, nullable: false } } } }; export const paramDef = { type: "object", anyOf: [ { properties: { fileId: { type: "string", format: "misskey:id" } }, required: [ "fileId" ] }, { properties: { url: { type: "string" } }, required: [ "url" ] } ] }; export default define(meta, paramDef, async (ps, me)=>{ const file = ps.fileId ? await DriveFiles.findOneBy({ id: ps.fileId }) : await DriveFiles.findOne({ where: [ { url: ps.url }, { thumbnailUrl: ps.url }, { webpublicUrl: ps.url } ] }); if (file == null) { throw new ApiError(meta.errors.noSuchFile); } if (!me.isAdmin) { file.requestIp = undefined; file.requestHeaders = undefined; } return file; });