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

78 lines
2.3 KiB
JavaScript

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