import { Bites } from "../../../../models/index.js"; import define from "../../define.js"; import { createBite } from "../../../../services/create-bite.js"; import { MINUTE } from "../../../../const.js"; import { ApiError } from "../../error.js"; export const meta = { tags: [ "bites" ], requireCredential: true, limit: { duration: MINUTE, max: 30 }, res: { type: "object", optional: false, nullable: false, ref: "Bite" }, errors: { noSuchNote: { message: "No such note.", code: "NO_SUCH_NOTE", id: "7a80aef8-e4ca-43c2-a997-a6e9b0198374" }, bitesDisabled: { message: "User doesn't allow bites.", code: "BITES_DISABLED", id: "a8cfcada-42e1-4ef4-b15e-6fcd903458b7" }, bitesFollowersOnly: { message: "User only lets followers bite them.", code: "BITES_FOLLOWERS_ONLY", id: "26a2ed34-a1df-408c-9f75-d7459380fb60" }, youHaveBeenBlocked: { message: "You cannot bite because you have been blocked by this user.", code: "YOU_HAVE_BEEN_BLOCKED", id: "c15a5199-7422-4968-941a-2a462c478f7d" } } }; export const paramDef = { type: "object", properties: { targetType: { type: "string", enum: [ "user", "bite", "note" ] }, targetId: { type: "string", format: "misskey:id" } }, required: [ "targetType", "targetId" ] }; export default define(meta, paramDef, async (ps, me)=>{ let biteId; try { biteId = await createBite(me, ps.targetType, ps.targetId); } catch (err) { if (err.id === "9725d0ce-ba28-4dde-95a7-2cbb2c15de24") throw new ApiError(meta.errors.noSuchNote); if (err.id === "f82d8d34-beaf-42f3-9135-477d32288213") throw new ApiError(meta.errors.youHaveBeenBlocked); if (err.id === "35363f14-f489-45e2-81a9-558450710dfe") throw new ApiError(meta.errors.bitesFollowersOnly); if (err.id === "92ce0141-760d-4163-a7a2-73b349e3d133") throw new ApiError(meta.errors.bitesDisabled); throw err; } return await Bites.pack(biteId, me); });