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

64 lines
1.8 KiB
JavaScript

import { publishMainStream } from "../../../../../services/stream.js";
import define from "../../../define.js";
import { RegistryItems } from "../../../../../models/index.js";
import { genId } from "../../../../../misc/gen-id.js";
export const meta = {
requireCredential: true,
secure: true
};
export const paramDef = {
type: "object",
properties: {
key: {
type: "string",
minLength: 1
},
value: {},
scope: {
type: "array",
default: [],
items: {
type: "string",
pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1)
}
}
},
required: [
"key",
"value"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const query = RegistryItems.createQueryBuilder("item").where("item.domain IS NULL").andWhere("item.userId = :userId", {
userId: user.id
}).andWhere("item.key = :key", {
key: ps.key
}).andWhere("item.scope = :scope", {
scope: ps.scope
});
const existingItem = await query.getOne();
if (existingItem) {
await RegistryItems.update(existingItem.id, {
updatedAt: new Date(),
value: ps.value
});
} else {
await RegistryItems.insert({
id: genId(),
createdAt: new Date(),
updatedAt: new Date(),
userId: user.id,
domain: null,
scope: ps.scope,
key: ps.key,
value: ps.value
});
}
// TODO: サードパーティアプリが傍受出来てしまうのでどうにかする
publishMainStream(user.id, "registryUpdated", {
scope: ps.scope,
key: ps.key,
value: ps.value
});
});