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