diff --git a/.node-version b/.node-version index 9a0c3d3f45..ab155ce138 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v14.15.4 +v14.15.5 diff --git a/Dockerfile b/Dockerfile index eba3a833bc..c1745fc215 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.15.4-alpine AS base +FROM node:14.15.5-alpine3.13 AS base ENV NODE_ENV=production @@ -10,7 +10,6 @@ RUN apk add --no-cache \ autoconf \ automake \ file \ - git \ g++ \ gcc \ libc-dev \ @@ -18,8 +17,10 @@ RUN apk add --no-cache \ make \ nasm \ pkgconfig \ - python \ - zlib-dev + python3 \ + zlib-dev \ + vips-dev \ + vips COPY package.json yarn.lock ./ RUN yarn install @@ -30,8 +31,9 @@ FROM base AS runner RUN apk add --no-cache \ ffmpeg \ - tini -RUN npm i -g web-push + tini \ + vips + ENTRYPOINT ["/sbin/tini", "--"] COPY --from=builder /misskey/node_modules ./node_modules diff --git a/src/client/assets/about-icon.png b/assets/client/about-icon.png similarity index 100% rename from src/client/assets/about-icon.png rename to assets/client/about-icon.png diff --git a/src/client/assets/fedi.jpg b/assets/client/fedi.jpg similarity index 100% rename from src/client/assets/fedi.jpg rename to assets/client/fedi.jpg diff --git a/src/client/assets/label-red.svg b/assets/client/label-red.svg similarity index 100% rename from src/client/assets/label-red.svg rename to assets/client/label-red.svg diff --git a/src/client/assets/label.svg b/assets/client/label.svg similarity index 100% rename from src/client/assets/label.svg rename to assets/client/label.svg diff --git a/src/client/assets/manifest.json b/assets/client/manifest.json similarity index 82% rename from src/client/assets/manifest.json rename to assets/client/manifest.json index f5a1d47a8a..48030a2980 100644 --- a/src/client/assets/manifest.json +++ b/assets/client/manifest.json @@ -7,12 +7,12 @@ "theme_color": "#86b300", "icons": [ { - "src": "/assets/icons/192.png", + "src": "/static-assets/icons/192.png", "sizes": "192x192", "type": "image/png" }, { - "src": "/assets/icons/512.png", + "src": "/static-assets/icons/512.png", "sizes": "512x512", "type": "image/png" } diff --git a/src/client/assets/misskey.svg b/assets/client/misskey.svg similarity index 100% rename from src/client/assets/misskey.svg rename to assets/client/misskey.svg diff --git a/src/client/assets/remove.png b/assets/client/remove.png similarity index 100% rename from src/client/assets/remove.png rename to assets/client/remove.png diff --git a/src/client/assets/room/furnitures/banknote/banknote.blend b/assets/client/room/furnitures/banknote/banknote.blend similarity index 100% rename from src/client/assets/room/furnitures/banknote/banknote.blend rename to assets/client/room/furnitures/banknote/banknote.blend diff --git a/src/client/assets/room/furnitures/banknote/banknote.glb b/assets/client/room/furnitures/banknote/banknote.glb similarity index 100% rename from src/client/assets/room/furnitures/banknote/banknote.glb rename to assets/client/room/furnitures/banknote/banknote.glb diff --git a/src/client/assets/room/furnitures/banknote/tex.png b/assets/client/room/furnitures/banknote/tex.png similarity index 100% rename from src/client/assets/room/furnitures/banknote/tex.png rename to assets/client/room/furnitures/banknote/tex.png diff --git a/src/client/assets/room/furnitures/bed/bed.blend b/assets/client/room/furnitures/bed/bed.blend similarity index 100% rename from src/client/assets/room/furnitures/bed/bed.blend rename to assets/client/room/furnitures/bed/bed.blend diff --git a/src/client/assets/room/furnitures/bed/bed.glb b/assets/client/room/furnitures/bed/bed.glb similarity index 100% rename from src/client/assets/room/furnitures/bed/bed.glb rename to assets/client/room/furnitures/bed/bed.glb diff --git a/src/client/assets/room/furnitures/bin/bin.blend b/assets/client/room/furnitures/bin/bin.blend similarity index 100% rename from src/client/assets/room/furnitures/bin/bin.blend rename to assets/client/room/furnitures/bin/bin.blend diff --git a/src/client/assets/room/furnitures/bin/bin.glb b/assets/client/room/furnitures/bin/bin.glb similarity index 100% rename from src/client/assets/room/furnitures/bin/bin.glb rename to assets/client/room/furnitures/bin/bin.glb diff --git a/src/client/assets/room/furnitures/book/book.blend b/assets/client/room/furnitures/book/book.blend similarity index 100% rename from src/client/assets/room/furnitures/book/book.blend rename to assets/client/room/furnitures/book/book.blend diff --git a/src/client/assets/room/furnitures/book/book.glb b/assets/client/room/furnitures/book/book.glb similarity index 100% rename from src/client/assets/room/furnitures/book/book.glb rename to assets/client/room/furnitures/book/book.glb diff --git a/src/client/assets/room/furnitures/book2/barcode.png b/assets/client/room/furnitures/book2/barcode.png similarity index 100% rename from src/client/assets/room/furnitures/book2/barcode.png rename to assets/client/room/furnitures/book2/barcode.png diff --git a/src/client/assets/room/furnitures/book2/book2.blend b/assets/client/room/furnitures/book2/book2.blend similarity index 100% rename from src/client/assets/room/furnitures/book2/book2.blend rename to assets/client/room/furnitures/book2/book2.blend diff --git a/src/client/assets/room/furnitures/book2/book2.glb b/assets/client/room/furnitures/book2/book2.glb similarity index 100% rename from src/client/assets/room/furnitures/book2/book2.glb rename to assets/client/room/furnitures/book2/book2.glb diff --git a/src/client/assets/room/furnitures/book2/texture.afdesign b/assets/client/room/furnitures/book2/texture.afdesign similarity index 100% rename from src/client/assets/room/furnitures/book2/texture.afdesign rename to assets/client/room/furnitures/book2/texture.afdesign diff --git a/src/client/assets/room/furnitures/book2/texture.png b/assets/client/room/furnitures/book2/texture.png similarity index 100% rename from src/client/assets/room/furnitures/book2/texture.png rename to assets/client/room/furnitures/book2/texture.png diff --git a/src/client/assets/room/furnitures/book2/uv.png b/assets/client/room/furnitures/book2/uv.png similarity index 100% rename from src/client/assets/room/furnitures/book2/uv.png rename to assets/client/room/furnitures/book2/uv.png diff --git a/src/client/assets/room/furnitures/cardboard-box/cardboard-box.blend b/assets/client/room/furnitures/cardboard-box/cardboard-box.blend similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box/cardboard-box.blend rename to assets/client/room/furnitures/cardboard-box/cardboard-box.blend diff --git a/src/client/assets/room/furnitures/cardboard-box/cardboard-box.glb b/assets/client/room/furnitures/cardboard-box/cardboard-box.glb similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box/cardboard-box.glb rename to assets/client/room/furnitures/cardboard-box/cardboard-box.glb diff --git a/src/client/assets/room/furnitures/cardboard-box2/cardboard-box2.blend b/assets/client/room/furnitures/cardboard-box2/cardboard-box2.blend similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box2/cardboard-box2.blend rename to assets/client/room/furnitures/cardboard-box2/cardboard-box2.blend diff --git a/src/client/assets/room/furnitures/cardboard-box2/cardboard-box2.glb b/assets/client/room/furnitures/cardboard-box2/cardboard-box2.glb similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box2/cardboard-box2.glb rename to assets/client/room/furnitures/cardboard-box2/cardboard-box2.glb diff --git a/src/client/assets/room/furnitures/cardboard-box2/texture.png b/assets/client/room/furnitures/cardboard-box2/texture.png similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box2/texture.png rename to assets/client/room/furnitures/cardboard-box2/texture.png diff --git a/src/client/assets/room/furnitures/cardboard-box2/uv.png b/assets/client/room/furnitures/cardboard-box2/uv.png similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box2/uv.png rename to assets/client/room/furnitures/cardboard-box2/uv.png diff --git a/src/client/assets/room/furnitures/cardboard-box3/cardboard-box3.blend b/assets/client/room/furnitures/cardboard-box3/cardboard-box3.blend similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box3/cardboard-box3.blend rename to assets/client/room/furnitures/cardboard-box3/cardboard-box3.blend diff --git a/src/client/assets/room/furnitures/cardboard-box3/cardboard-box3.glb b/assets/client/room/furnitures/cardboard-box3/cardboard-box3.glb similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box3/cardboard-box3.glb rename to assets/client/room/furnitures/cardboard-box3/cardboard-box3.glb diff --git a/src/client/assets/room/furnitures/cardboard-box3/texture.png b/assets/client/room/furnitures/cardboard-box3/texture.png similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box3/texture.png rename to assets/client/room/furnitures/cardboard-box3/texture.png diff --git a/src/client/assets/room/furnitures/cardboard-box3/texture.xcf b/assets/client/room/furnitures/cardboard-box3/texture.xcf similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box3/texture.xcf rename to assets/client/room/furnitures/cardboard-box3/texture.xcf diff --git a/src/client/assets/room/furnitures/cardboard-box3/uv.png b/assets/client/room/furnitures/cardboard-box3/uv.png similarity index 100% rename from src/client/assets/room/furnitures/cardboard-box3/uv.png rename to assets/client/room/furnitures/cardboard-box3/uv.png diff --git a/src/client/assets/room/furnitures/carpet-stripe/carpet-stripe.blend b/assets/client/room/furnitures/carpet-stripe/carpet-stripe.blend similarity index 100% rename from src/client/assets/room/furnitures/carpet-stripe/carpet-stripe.blend rename to assets/client/room/furnitures/carpet-stripe/carpet-stripe.blend diff --git a/src/client/assets/room/furnitures/carpet-stripe/carpet-stripe.glb b/assets/client/room/furnitures/carpet-stripe/carpet-stripe.glb similarity index 100% rename from src/client/assets/room/furnitures/carpet-stripe/carpet-stripe.glb rename to assets/client/room/furnitures/carpet-stripe/carpet-stripe.glb diff --git a/src/client/assets/room/furnitures/chair/chair.blend b/assets/client/room/furnitures/chair/chair.blend similarity index 100% rename from src/client/assets/room/furnitures/chair/chair.blend rename to assets/client/room/furnitures/chair/chair.blend diff --git a/src/client/assets/room/furnitures/chair/chair.glb b/assets/client/room/furnitures/chair/chair.glb similarity index 100% rename from src/client/assets/room/furnitures/chair/chair.glb rename to assets/client/room/furnitures/chair/chair.glb diff --git a/src/client/assets/room/furnitures/chair2/chair2.blend b/assets/client/room/furnitures/chair2/chair2.blend similarity index 100% rename from src/client/assets/room/furnitures/chair2/chair2.blend rename to assets/client/room/furnitures/chair2/chair2.blend diff --git a/src/client/assets/room/furnitures/chair2/chair2.glb b/assets/client/room/furnitures/chair2/chair2.glb similarity index 100% rename from src/client/assets/room/furnitures/chair2/chair2.glb rename to assets/client/room/furnitures/chair2/chair2.glb diff --git a/src/client/assets/room/furnitures/color-box/color-box.blend b/assets/client/room/furnitures/color-box/color-box.blend similarity index 100% rename from src/client/assets/room/furnitures/color-box/color-box.blend rename to assets/client/room/furnitures/color-box/color-box.blend diff --git a/src/client/assets/room/furnitures/color-box/color-box.glb b/assets/client/room/furnitures/color-box/color-box.glb similarity index 100% rename from src/client/assets/room/furnitures/color-box/color-box.glb rename to assets/client/room/furnitures/color-box/color-box.glb diff --git a/src/client/assets/room/furnitures/corkboard/corkboard.blend b/assets/client/room/furnitures/corkboard/corkboard.blend similarity index 100% rename from src/client/assets/room/furnitures/corkboard/corkboard.blend rename to assets/client/room/furnitures/corkboard/corkboard.blend diff --git a/src/client/assets/room/furnitures/corkboard/corkboard.glb b/assets/client/room/furnitures/corkboard/corkboard.glb similarity index 100% rename from src/client/assets/room/furnitures/corkboard/corkboard.glb rename to assets/client/room/furnitures/corkboard/corkboard.glb diff --git a/src/client/assets/room/furnitures/cube/cube.blend b/assets/client/room/furnitures/cube/cube.blend similarity index 100% rename from src/client/assets/room/furnitures/cube/cube.blend rename to assets/client/room/furnitures/cube/cube.blend diff --git a/src/client/assets/room/furnitures/cube/cube.glb b/assets/client/room/furnitures/cube/cube.glb similarity index 100% rename from src/client/assets/room/furnitures/cube/cube.glb rename to assets/client/room/furnitures/cube/cube.glb diff --git a/src/client/assets/room/furnitures/cup-noodle/cup-noodle.blend b/assets/client/room/furnitures/cup-noodle/cup-noodle.blend similarity index 100% rename from src/client/assets/room/furnitures/cup-noodle/cup-noodle.blend rename to assets/client/room/furnitures/cup-noodle/cup-noodle.blend diff --git a/src/client/assets/room/furnitures/cup-noodle/cup-noodle.glb b/assets/client/room/furnitures/cup-noodle/cup-noodle.glb similarity index 100% rename from src/client/assets/room/furnitures/cup-noodle/cup-noodle.glb rename to assets/client/room/furnitures/cup-noodle/cup-noodle.glb diff --git a/src/client/assets/room/furnitures/cup-noodle/noodle.png b/assets/client/room/furnitures/cup-noodle/noodle.png similarity index 100% rename from src/client/assets/room/furnitures/cup-noodle/noodle.png rename to assets/client/room/furnitures/cup-noodle/noodle.png diff --git a/src/client/assets/room/furnitures/desk/desk.blend b/assets/client/room/furnitures/desk/desk.blend similarity index 100% rename from src/client/assets/room/furnitures/desk/desk.blend rename to assets/client/room/furnitures/desk/desk.blend diff --git a/src/client/assets/room/furnitures/desk/desk.glb b/assets/client/room/furnitures/desk/desk.glb similarity index 100% rename from src/client/assets/room/furnitures/desk/desk.glb rename to assets/client/room/furnitures/desk/desk.glb diff --git a/src/client/assets/room/furnitures/doll-ai/doll-ai.blend b/assets/client/room/furnitures/doll-ai/doll-ai.blend similarity index 100% rename from src/client/assets/room/furnitures/doll-ai/doll-ai.blend rename to assets/client/room/furnitures/doll-ai/doll-ai.blend diff --git a/src/client/assets/room/furnitures/doll-ai/doll-ai.glb b/assets/client/room/furnitures/doll-ai/doll-ai.glb similarity index 100% rename from src/client/assets/room/furnitures/doll-ai/doll-ai.glb rename to assets/client/room/furnitures/doll-ai/doll-ai.glb diff --git a/src/client/assets/room/furnitures/doll-ai/doll_ai_tex.png b/assets/client/room/furnitures/doll-ai/doll_ai_tex.png similarity index 100% rename from src/client/assets/room/furnitures/doll-ai/doll_ai_tex.png rename to assets/client/room/furnitures/doll-ai/doll_ai_tex.png diff --git a/src/client/assets/room/furnitures/energy-drink/energy-drink.blend b/assets/client/room/furnitures/energy-drink/energy-drink.blend similarity index 100% rename from src/client/assets/room/furnitures/energy-drink/energy-drink.blend rename to assets/client/room/furnitures/energy-drink/energy-drink.blend diff --git a/src/client/assets/room/furnitures/energy-drink/energy-drink.glb b/assets/client/room/furnitures/energy-drink/energy-drink.glb similarity index 100% rename from src/client/assets/room/furnitures/energy-drink/energy-drink.glb rename to assets/client/room/furnitures/energy-drink/energy-drink.glb diff --git a/src/client/assets/room/furnitures/energy-drink/texture.afdesign b/assets/client/room/furnitures/energy-drink/texture.afdesign similarity index 100% rename from src/client/assets/room/furnitures/energy-drink/texture.afdesign rename to assets/client/room/furnitures/energy-drink/texture.afdesign diff --git a/src/client/assets/room/furnitures/energy-drink/texture.png b/assets/client/room/furnitures/energy-drink/texture.png similarity index 100% rename from src/client/assets/room/furnitures/energy-drink/texture.png rename to assets/client/room/furnitures/energy-drink/texture.png diff --git a/src/client/assets/room/furnitures/energy-drink/uv.png b/assets/client/room/furnitures/energy-drink/uv.png similarity index 100% rename from src/client/assets/room/furnitures/energy-drink/uv.png rename to assets/client/room/furnitures/energy-drink/uv.png diff --git a/src/client/assets/room/furnitures/eraser/cover.png b/assets/client/room/furnitures/eraser/cover.png similarity index 100% rename from src/client/assets/room/furnitures/eraser/cover.png rename to assets/client/room/furnitures/eraser/cover.png diff --git a/src/client/assets/room/furnitures/eraser/cover.psd b/assets/client/room/furnitures/eraser/cover.psd similarity index 100% rename from src/client/assets/room/furnitures/eraser/cover.psd rename to assets/client/room/furnitures/eraser/cover.psd diff --git a/src/client/assets/room/furnitures/eraser/eraser-uv.png b/assets/client/room/furnitures/eraser/eraser-uv.png similarity index 100% rename from src/client/assets/room/furnitures/eraser/eraser-uv.png rename to assets/client/room/furnitures/eraser/eraser-uv.png diff --git a/src/client/assets/room/furnitures/eraser/eraser.blend b/assets/client/room/furnitures/eraser/eraser.blend similarity index 100% rename from src/client/assets/room/furnitures/eraser/eraser.blend rename to assets/client/room/furnitures/eraser/eraser.blend diff --git a/src/client/assets/room/furnitures/eraser/eraser.glb b/assets/client/room/furnitures/eraser/eraser.glb similarity index 100% rename from src/client/assets/room/furnitures/eraser/eraser.glb rename to assets/client/room/furnitures/eraser/eraser.glb diff --git a/src/client/assets/room/furnitures/facial-tissue/facial-tissue-uv.png b/assets/client/room/furnitures/facial-tissue/facial-tissue-uv.png similarity index 100% rename from src/client/assets/room/furnitures/facial-tissue/facial-tissue-uv.png rename to assets/client/room/furnitures/facial-tissue/facial-tissue-uv.png diff --git a/src/client/assets/room/furnitures/facial-tissue/facial-tissue.blend b/assets/client/room/furnitures/facial-tissue/facial-tissue.blend similarity index 100% rename from src/client/assets/room/furnitures/facial-tissue/facial-tissue.blend rename to assets/client/room/furnitures/facial-tissue/facial-tissue.blend diff --git a/src/client/assets/room/furnitures/facial-tissue/facial-tissue.glb b/assets/client/room/furnitures/facial-tissue/facial-tissue.glb similarity index 100% rename from src/client/assets/room/furnitures/facial-tissue/facial-tissue.glb rename to assets/client/room/furnitures/facial-tissue/facial-tissue.glb diff --git a/src/client/assets/room/furnitures/facial-tissue/facial-tissue.png b/assets/client/room/furnitures/facial-tissue/facial-tissue.png similarity index 100% rename from src/client/assets/room/furnitures/facial-tissue/facial-tissue.png rename to assets/client/room/furnitures/facial-tissue/facial-tissue.png diff --git a/src/client/assets/room/furnitures/facial-tissue/facial-tissue.psd b/assets/client/room/furnitures/facial-tissue/facial-tissue.psd similarity index 100% rename from src/client/assets/room/furnitures/facial-tissue/facial-tissue.psd rename to assets/client/room/furnitures/facial-tissue/facial-tissue.psd diff --git a/src/client/assets/room/furnitures/fan/fan.blend b/assets/client/room/furnitures/fan/fan.blend similarity index 100% rename from src/client/assets/room/furnitures/fan/fan.blend rename to assets/client/room/furnitures/fan/fan.blend diff --git a/src/client/assets/room/furnitures/fan/fan.glb b/assets/client/room/furnitures/fan/fan.glb similarity index 100% rename from src/client/assets/room/furnitures/fan/fan.glb rename to assets/client/room/furnitures/fan/fan.glb diff --git a/src/client/assets/room/furnitures/holo-display/holo-display.blend b/assets/client/room/furnitures/holo-display/holo-display.blend similarity index 100% rename from src/client/assets/room/furnitures/holo-display/holo-display.blend rename to assets/client/room/furnitures/holo-display/holo-display.blend diff --git a/src/client/assets/room/furnitures/holo-display/holo-display.glb b/assets/client/room/furnitures/holo-display/holo-display.glb similarity index 100% rename from src/client/assets/room/furnitures/holo-display/holo-display.glb rename to assets/client/room/furnitures/holo-display/holo-display.glb diff --git a/src/client/assets/room/furnitures/holo-display/ray-uv.png b/assets/client/room/furnitures/holo-display/ray-uv.png similarity index 100% rename from src/client/assets/room/furnitures/holo-display/ray-uv.png rename to assets/client/room/furnitures/holo-display/ray-uv.png diff --git a/src/client/assets/room/furnitures/holo-display/ray.png b/assets/client/room/furnitures/holo-display/ray.png similarity index 100% rename from src/client/assets/room/furnitures/holo-display/ray.png rename to assets/client/room/furnitures/holo-display/ray.png diff --git a/src/client/assets/room/furnitures/keyboard/keyboard.blend b/assets/client/room/furnitures/keyboard/keyboard.blend similarity index 100% rename from src/client/assets/room/furnitures/keyboard/keyboard.blend rename to assets/client/room/furnitures/keyboard/keyboard.blend diff --git a/src/client/assets/room/furnitures/keyboard/keyboard.glb b/assets/client/room/furnitures/keyboard/keyboard.glb similarity index 100% rename from src/client/assets/room/furnitures/keyboard/keyboard.glb rename to assets/client/room/furnitures/keyboard/keyboard.glb diff --git a/src/client/assets/room/furnitures/low-table/low-table.blend b/assets/client/room/furnitures/low-table/low-table.blend similarity index 100% rename from src/client/assets/room/furnitures/low-table/low-table.blend rename to assets/client/room/furnitures/low-table/low-table.blend diff --git a/src/client/assets/room/furnitures/low-table/low-table.glb b/assets/client/room/furnitures/low-table/low-table.glb similarity index 100% rename from src/client/assets/room/furnitures/low-table/low-table.glb rename to assets/client/room/furnitures/low-table/low-table.glb diff --git a/src/client/assets/room/furnitures/mat/mat.blend b/assets/client/room/furnitures/mat/mat.blend similarity index 100% rename from src/client/assets/room/furnitures/mat/mat.blend rename to assets/client/room/furnitures/mat/mat.blend diff --git a/src/client/assets/room/furnitures/mat/mat.glb b/assets/client/room/furnitures/mat/mat.glb similarity index 100% rename from src/client/assets/room/furnitures/mat/mat.glb rename to assets/client/room/furnitures/mat/mat.glb diff --git a/src/client/assets/room/furnitures/milk/milk-uv.png b/assets/client/room/furnitures/milk/milk-uv.png similarity index 100% rename from src/client/assets/room/furnitures/milk/milk-uv.png rename to assets/client/room/furnitures/milk/milk-uv.png diff --git a/src/client/assets/room/furnitures/milk/milk.blend b/assets/client/room/furnitures/milk/milk.blend similarity index 100% rename from src/client/assets/room/furnitures/milk/milk.blend rename to assets/client/room/furnitures/milk/milk.blend diff --git a/src/client/assets/room/furnitures/milk/milk.glb b/assets/client/room/furnitures/milk/milk.glb similarity index 100% rename from src/client/assets/room/furnitures/milk/milk.glb rename to assets/client/room/furnitures/milk/milk.glb diff --git a/src/client/assets/room/furnitures/milk/milk.png b/assets/client/room/furnitures/milk/milk.png similarity index 100% rename from src/client/assets/room/furnitures/milk/milk.png rename to assets/client/room/furnitures/milk/milk.png diff --git a/src/client/assets/room/furnitures/milk/milk.psd b/assets/client/room/furnitures/milk/milk.psd similarity index 100% rename from src/client/assets/room/furnitures/milk/milk.psd rename to assets/client/room/furnitures/milk/milk.psd diff --git a/src/client/assets/room/furnitures/monitor/monitor.blend b/assets/client/room/furnitures/monitor/monitor.blend similarity index 100% rename from src/client/assets/room/furnitures/monitor/monitor.blend rename to assets/client/room/furnitures/monitor/monitor.blend diff --git a/src/client/assets/room/furnitures/monitor/monitor.glb b/assets/client/room/furnitures/monitor/monitor.glb similarity index 100% rename from src/client/assets/room/furnitures/monitor/monitor.glb rename to assets/client/room/furnitures/monitor/monitor.glb diff --git a/src/client/assets/room/furnitures/monitor/monitor.psd b/assets/client/room/furnitures/monitor/monitor.psd similarity index 100% rename from src/client/assets/room/furnitures/monitor/monitor.psd rename to assets/client/room/furnitures/monitor/monitor.psd diff --git a/src/client/assets/room/furnitures/monitor/screen-uv.png b/assets/client/room/furnitures/monitor/screen-uv.png similarity index 100% rename from src/client/assets/room/furnitures/monitor/screen-uv.png rename to assets/client/room/furnitures/monitor/screen-uv.png diff --git a/src/client/assets/room/furnitures/monitor/screen.jpg b/assets/client/room/furnitures/monitor/screen.jpg similarity index 100% rename from src/client/assets/room/furnitures/monitor/screen.jpg rename to assets/client/room/furnitures/monitor/screen.jpg diff --git a/src/client/assets/room/furnitures/moon/moon.blend b/assets/client/room/furnitures/moon/moon.blend similarity index 100% rename from src/client/assets/room/furnitures/moon/moon.blend rename to assets/client/room/furnitures/moon/moon.blend diff --git a/src/client/assets/room/furnitures/moon/moon.glb b/assets/client/room/furnitures/moon/moon.glb similarity index 100% rename from src/client/assets/room/furnitures/moon/moon.glb rename to assets/client/room/furnitures/moon/moon.glb diff --git a/src/client/assets/room/furnitures/moon/moon.jpg b/assets/client/room/furnitures/moon/moon.jpg similarity index 100% rename from src/client/assets/room/furnitures/moon/moon.jpg rename to assets/client/room/furnitures/moon/moon.jpg diff --git a/src/client/assets/room/furnitures/mousepad/mousepad.blend b/assets/client/room/furnitures/mousepad/mousepad.blend similarity index 100% rename from src/client/assets/room/furnitures/mousepad/mousepad.blend rename to assets/client/room/furnitures/mousepad/mousepad.blend diff --git a/src/client/assets/room/furnitures/mousepad/mousepad.glb b/assets/client/room/furnitures/mousepad/mousepad.glb similarity index 100% rename from src/client/assets/room/furnitures/mousepad/mousepad.glb rename to assets/client/room/furnitures/mousepad/mousepad.glb diff --git a/src/client/assets/room/furnitures/pc/motherboard-uv.png b/assets/client/room/furnitures/pc/motherboard-uv.png similarity index 100% rename from src/client/assets/room/furnitures/pc/motherboard-uv.png rename to assets/client/room/furnitures/pc/motherboard-uv.png diff --git a/src/client/assets/room/furnitures/pc/motherboard-uv.psd b/assets/client/room/furnitures/pc/motherboard-uv.psd similarity index 100% rename from src/client/assets/room/furnitures/pc/motherboard-uv.psd rename to assets/client/room/furnitures/pc/motherboard-uv.psd diff --git a/src/client/assets/room/furnitures/pc/motherboard.jpg b/assets/client/room/furnitures/pc/motherboard.jpg similarity index 100% rename from src/client/assets/room/furnitures/pc/motherboard.jpg rename to assets/client/room/furnitures/pc/motherboard.jpg diff --git a/src/client/assets/room/furnitures/pc/pc.blend b/assets/client/room/furnitures/pc/pc.blend similarity index 100% rename from src/client/assets/room/furnitures/pc/pc.blend rename to assets/client/room/furnitures/pc/pc.blend diff --git a/src/client/assets/room/furnitures/pc/pc.glb b/assets/client/room/furnitures/pc/pc.glb similarity index 100% rename from src/client/assets/room/furnitures/pc/pc.glb rename to assets/client/room/furnitures/pc/pc.glb diff --git a/src/client/assets/room/furnitures/pencil/pencil.blend b/assets/client/room/furnitures/pencil/pencil.blend similarity index 100% rename from src/client/assets/room/furnitures/pencil/pencil.blend rename to assets/client/room/furnitures/pencil/pencil.blend diff --git a/src/client/assets/room/furnitures/pencil/pencil.glb b/assets/client/room/furnitures/pencil/pencil.glb similarity index 100% rename from src/client/assets/room/furnitures/pencil/pencil.glb rename to assets/client/room/furnitures/pencil/pencil.glb diff --git a/src/client/assets/room/furnitures/photoframe/photo-uv.png b/assets/client/room/furnitures/photoframe/photo-uv.png similarity index 100% rename from src/client/assets/room/furnitures/photoframe/photo-uv.png rename to assets/client/room/furnitures/photoframe/photo-uv.png diff --git a/src/client/assets/room/furnitures/photoframe/photo.jpg b/assets/client/room/furnitures/photoframe/photo.jpg similarity index 100% rename from src/client/assets/room/furnitures/photoframe/photo.jpg rename to assets/client/room/furnitures/photoframe/photo.jpg diff --git a/src/client/assets/room/furnitures/photoframe/photoframe.blend b/assets/client/room/furnitures/photoframe/photoframe.blend similarity index 100% rename from src/client/assets/room/furnitures/photoframe/photoframe.blend rename to assets/client/room/furnitures/photoframe/photoframe.blend diff --git a/src/client/assets/room/furnitures/photoframe/photoframe.glb b/assets/client/room/furnitures/photoframe/photoframe.glb similarity index 100% rename from src/client/assets/room/furnitures/photoframe/photoframe.glb rename to assets/client/room/furnitures/photoframe/photoframe.glb diff --git a/src/client/assets/room/furnitures/piano/piano.blend b/assets/client/room/furnitures/piano/piano.blend similarity index 100% rename from src/client/assets/room/furnitures/piano/piano.blend rename to assets/client/room/furnitures/piano/piano.blend diff --git a/src/client/assets/room/furnitures/piano/piano.glb b/assets/client/room/furnitures/piano/piano.glb similarity index 100% rename from src/client/assets/room/furnitures/piano/piano.glb rename to assets/client/room/furnitures/piano/piano.glb diff --git a/src/client/assets/room/furnitures/pinguin/pinguin.blend b/assets/client/room/furnitures/pinguin/pinguin.blend similarity index 100% rename from src/client/assets/room/furnitures/pinguin/pinguin.blend rename to assets/client/room/furnitures/pinguin/pinguin.blend diff --git a/src/client/assets/room/furnitures/pinguin/pinguin.glb b/assets/client/room/furnitures/pinguin/pinguin.glb similarity index 100% rename from src/client/assets/room/furnitures/pinguin/pinguin.glb rename to assets/client/room/furnitures/pinguin/pinguin.glb diff --git a/src/client/assets/room/furnitures/plant/plant-soil-uv.png b/assets/client/room/furnitures/plant/plant-soil-uv.png similarity index 100% rename from src/client/assets/room/furnitures/plant/plant-soil-uv.png rename to assets/client/room/furnitures/plant/plant-soil-uv.png diff --git a/src/client/assets/room/furnitures/plant/plant-soil.png b/assets/client/room/furnitures/plant/plant-soil.png similarity index 100% rename from src/client/assets/room/furnitures/plant/plant-soil.png rename to assets/client/room/furnitures/plant/plant-soil.png diff --git a/src/client/assets/room/furnitures/plant/plant-soil.psd b/assets/client/room/furnitures/plant/plant-soil.psd similarity index 100% rename from src/client/assets/room/furnitures/plant/plant-soil.psd rename to assets/client/room/furnitures/plant/plant-soil.psd diff --git a/src/client/assets/room/furnitures/plant/plant.blend b/assets/client/room/furnitures/plant/plant.blend similarity index 100% rename from src/client/assets/room/furnitures/plant/plant.blend rename to assets/client/room/furnitures/plant/plant.blend diff --git a/src/client/assets/room/furnitures/plant/plant.glb b/assets/client/room/furnitures/plant/plant.glb similarity index 100% rename from src/client/assets/room/furnitures/plant/plant.glb rename to assets/client/room/furnitures/plant/plant.glb diff --git a/src/client/assets/room/furnitures/plant2/plant2.blend b/assets/client/room/furnitures/plant2/plant2.blend similarity index 100% rename from src/client/assets/room/furnitures/plant2/plant2.blend rename to assets/client/room/furnitures/plant2/plant2.blend diff --git a/src/client/assets/room/furnitures/plant2/plant2.glb b/assets/client/room/furnitures/plant2/plant2.glb similarity index 100% rename from src/client/assets/room/furnitures/plant2/plant2.glb rename to assets/client/room/furnitures/plant2/plant2.glb diff --git a/src/client/assets/room/furnitures/plant2/soil.png b/assets/client/room/furnitures/plant2/soil.png similarity index 100% rename from src/client/assets/room/furnitures/plant2/soil.png rename to assets/client/room/furnitures/plant2/soil.png diff --git a/src/client/assets/room/furnitures/poster-h/poster-h.blend b/assets/client/room/furnitures/poster-h/poster-h.blend similarity index 100% rename from src/client/assets/room/furnitures/poster-h/poster-h.blend rename to assets/client/room/furnitures/poster-h/poster-h.blend diff --git a/src/client/assets/room/furnitures/poster-h/poster-h.glb b/assets/client/room/furnitures/poster-h/poster-h.glb similarity index 100% rename from src/client/assets/room/furnitures/poster-h/poster-h.glb rename to assets/client/room/furnitures/poster-h/poster-h.glb diff --git a/src/client/assets/room/furnitures/poster-h/uv.png b/assets/client/room/furnitures/poster-h/uv.png similarity index 100% rename from src/client/assets/room/furnitures/poster-h/uv.png rename to assets/client/room/furnitures/poster-h/uv.png diff --git a/src/client/assets/room/furnitures/poster-v/poster-v.blend b/assets/client/room/furnitures/poster-v/poster-v.blend similarity index 100% rename from src/client/assets/room/furnitures/poster-v/poster-v.blend rename to assets/client/room/furnitures/poster-v/poster-v.blend diff --git a/src/client/assets/room/furnitures/poster-v/poster-v.glb b/assets/client/room/furnitures/poster-v/poster-v.glb similarity index 100% rename from src/client/assets/room/furnitures/poster-v/poster-v.glb rename to assets/client/room/furnitures/poster-v/poster-v.glb diff --git a/src/client/assets/room/furnitures/poster-v/uv.png b/assets/client/room/furnitures/poster-v/uv.png similarity index 100% rename from src/client/assets/room/furnitures/poster-v/uv.png rename to assets/client/room/furnitures/poster-v/uv.png diff --git a/src/client/assets/room/furnitures/pudding/pudding.blend b/assets/client/room/furnitures/pudding/pudding.blend similarity index 100% rename from src/client/assets/room/furnitures/pudding/pudding.blend rename to assets/client/room/furnitures/pudding/pudding.blend diff --git a/src/client/assets/room/furnitures/pudding/pudding.glb b/assets/client/room/furnitures/pudding/pudding.glb similarity index 100% rename from src/client/assets/room/furnitures/pudding/pudding.glb rename to assets/client/room/furnitures/pudding/pudding.glb diff --git a/src/client/assets/room/furnitures/rubik-cube/rubik-cube.blend b/assets/client/room/furnitures/rubik-cube/rubik-cube.blend similarity index 100% rename from src/client/assets/room/furnitures/rubik-cube/rubik-cube.blend rename to assets/client/room/furnitures/rubik-cube/rubik-cube.blend diff --git a/src/client/assets/room/furnitures/rubik-cube/rubik-cube.glb b/assets/client/room/furnitures/rubik-cube/rubik-cube.glb similarity index 100% rename from src/client/assets/room/furnitures/rubik-cube/rubik-cube.glb rename to assets/client/room/furnitures/rubik-cube/rubik-cube.glb diff --git a/src/client/assets/room/furnitures/server/rack-uv.png b/assets/client/room/furnitures/server/rack-uv.png similarity index 100% rename from src/client/assets/room/furnitures/server/rack-uv.png rename to assets/client/room/furnitures/server/rack-uv.png diff --git a/src/client/assets/room/furnitures/server/rack.png b/assets/client/room/furnitures/server/rack.png similarity index 100% rename from src/client/assets/room/furnitures/server/rack.png rename to assets/client/room/furnitures/server/rack.png diff --git a/src/client/assets/room/furnitures/server/server.blend b/assets/client/room/furnitures/server/server.blend similarity index 100% rename from src/client/assets/room/furnitures/server/server.blend rename to assets/client/room/furnitures/server/server.blend diff --git a/src/client/assets/room/furnitures/server/server.glb b/assets/client/room/furnitures/server/server.glb similarity index 100% rename from src/client/assets/room/furnitures/server/server.glb rename to assets/client/room/furnitures/server/server.glb diff --git a/src/client/assets/room/furnitures/server/server.png b/assets/client/room/furnitures/server/server.png similarity index 100% rename from src/client/assets/room/furnitures/server/server.png rename to assets/client/room/furnitures/server/server.png diff --git a/src/client/assets/room/furnitures/server/uv.png b/assets/client/room/furnitures/server/uv.png similarity index 100% rename from src/client/assets/room/furnitures/server/uv.png rename to assets/client/room/furnitures/server/uv.png diff --git a/src/client/assets/room/furnitures/sofa/sofa.blend b/assets/client/room/furnitures/sofa/sofa.blend similarity index 100% rename from src/client/assets/room/furnitures/sofa/sofa.blend rename to assets/client/room/furnitures/sofa/sofa.blend diff --git a/src/client/assets/room/furnitures/sofa/sofa.glb b/assets/client/room/furnitures/sofa/sofa.glb similarity index 100% rename from src/client/assets/room/furnitures/sofa/sofa.glb rename to assets/client/room/furnitures/sofa/sofa.glb diff --git a/src/client/assets/room/furnitures/spiral/spiral.blend b/assets/client/room/furnitures/spiral/spiral.blend similarity index 100% rename from src/client/assets/room/furnitures/spiral/spiral.blend rename to assets/client/room/furnitures/spiral/spiral.blend diff --git a/src/client/assets/room/furnitures/spiral/spiral.glb b/assets/client/room/furnitures/spiral/spiral.glb similarity index 100% rename from src/client/assets/room/furnitures/spiral/spiral.glb rename to assets/client/room/furnitures/spiral/spiral.glb diff --git a/src/client/assets/room/furnitures/tv/screen-uv.png b/assets/client/room/furnitures/tv/screen-uv.png similarity index 100% rename from src/client/assets/room/furnitures/tv/screen-uv.png rename to assets/client/room/furnitures/tv/screen-uv.png diff --git a/src/client/assets/room/furnitures/tv/tv.blend b/assets/client/room/furnitures/tv/tv.blend similarity index 100% rename from src/client/assets/room/furnitures/tv/tv.blend rename to assets/client/room/furnitures/tv/tv.blend diff --git a/src/client/assets/room/furnitures/tv/tv.glb b/assets/client/room/furnitures/tv/tv.glb similarity index 100% rename from src/client/assets/room/furnitures/tv/tv.glb rename to assets/client/room/furnitures/tv/tv.glb diff --git a/src/client/assets/room/furnitures/wall-clock/wall-clock.blend b/assets/client/room/furnitures/wall-clock/wall-clock.blend similarity index 100% rename from src/client/assets/room/furnitures/wall-clock/wall-clock.blend rename to assets/client/room/furnitures/wall-clock/wall-clock.blend diff --git a/src/client/assets/room/furnitures/wall-clock/wall-clock.glb b/assets/client/room/furnitures/wall-clock/wall-clock.glb similarity index 100% rename from src/client/assets/room/furnitures/wall-clock/wall-clock.glb rename to assets/client/room/furnitures/wall-clock/wall-clock.glb diff --git a/src/client/assets/room/rooms/default/default.blend b/assets/client/room/rooms/default/default.blend similarity index 100% rename from src/client/assets/room/rooms/default/default.blend rename to assets/client/room/rooms/default/default.blend diff --git a/src/client/assets/room/rooms/default/default.glb b/assets/client/room/rooms/default/default.glb similarity index 100% rename from src/client/assets/room/rooms/default/default.glb rename to assets/client/room/rooms/default/default.glb diff --git a/src/client/assets/room/rooms/washitsu/husuma-uv.png b/assets/client/room/rooms/washitsu/husuma-uv.png similarity index 100% rename from src/client/assets/room/rooms/washitsu/husuma-uv.png rename to assets/client/room/rooms/washitsu/husuma-uv.png diff --git a/src/client/assets/room/rooms/washitsu/husuma.png b/assets/client/room/rooms/washitsu/husuma.png similarity index 100% rename from src/client/assets/room/rooms/washitsu/husuma.png rename to assets/client/room/rooms/washitsu/husuma.png diff --git a/src/client/assets/room/rooms/washitsu/tatami-single1600.png b/assets/client/room/rooms/washitsu/tatami-single1600.png similarity index 100% rename from src/client/assets/room/rooms/washitsu/tatami-single1600.png rename to assets/client/room/rooms/washitsu/tatami-single1600.png diff --git a/src/client/assets/room/rooms/washitsu/tatami-uv.png b/assets/client/room/rooms/washitsu/tatami-uv.png similarity index 100% rename from src/client/assets/room/rooms/washitsu/tatami-uv.png rename to assets/client/room/rooms/washitsu/tatami-uv.png diff --git a/src/client/assets/room/rooms/washitsu/tatami.afdesign b/assets/client/room/rooms/washitsu/tatami.afdesign similarity index 100% rename from src/client/assets/room/rooms/washitsu/tatami.afdesign rename to assets/client/room/rooms/washitsu/tatami.afdesign diff --git a/src/client/assets/room/rooms/washitsu/tatami.png b/assets/client/room/rooms/washitsu/tatami.png similarity index 100% rename from src/client/assets/room/rooms/washitsu/tatami.png rename to assets/client/room/rooms/washitsu/tatami.png diff --git a/src/client/assets/room/rooms/washitsu/washitsu.blend b/assets/client/room/rooms/washitsu/washitsu.blend similarity index 100% rename from src/client/assets/room/rooms/washitsu/washitsu.blend rename to assets/client/room/rooms/washitsu/washitsu.blend diff --git a/src/client/assets/room/rooms/washitsu/washitsu.glb b/assets/client/room/rooms/washitsu/washitsu.glb similarity index 100% rename from src/client/assets/room/rooms/washitsu/washitsu.glb rename to assets/client/room/rooms/washitsu/washitsu.glb diff --git a/src/client/assets/sounds/aisha/1.mp3 b/assets/client/sounds/aisha/1.mp3 similarity index 100% rename from src/client/assets/sounds/aisha/1.mp3 rename to assets/client/sounds/aisha/1.mp3 diff --git a/src/client/assets/sounds/aisha/2.mp3 b/assets/client/sounds/aisha/2.mp3 similarity index 100% rename from src/client/assets/sounds/aisha/2.mp3 rename to assets/client/sounds/aisha/2.mp3 diff --git a/src/client/assets/sounds/aisha/3.mp3 b/assets/client/sounds/aisha/3.mp3 similarity index 100% rename from src/client/assets/sounds/aisha/3.mp3 rename to assets/client/sounds/aisha/3.mp3 diff --git a/src/client/assets/sounds/noizenecio/kick_gaba.mp3 b/assets/client/sounds/noizenecio/kick_gaba.mp3 similarity index 100% rename from src/client/assets/sounds/noizenecio/kick_gaba.mp3 rename to assets/client/sounds/noizenecio/kick_gaba.mp3 diff --git a/src/client/assets/sounds/noizenecio/kick_gaba2.mp3 b/assets/client/sounds/noizenecio/kick_gaba2.mp3 similarity index 100% rename from src/client/assets/sounds/noizenecio/kick_gaba2.mp3 rename to assets/client/sounds/noizenecio/kick_gaba2.mp3 diff --git a/src/client/assets/sounds/syuilo/down.mp3 b/assets/client/sounds/syuilo/down.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/down.mp3 rename to assets/client/sounds/syuilo/down.mp3 diff --git a/src/client/assets/sounds/syuilo/kick.mp3 b/assets/client/sounds/syuilo/kick.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/kick.mp3 rename to assets/client/sounds/syuilo/kick.mp3 diff --git a/src/client/assets/sounds/syuilo/pirori-square-wet.mp3 b/assets/client/sounds/syuilo/pirori-square-wet.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/pirori-square-wet.mp3 rename to assets/client/sounds/syuilo/pirori-square-wet.mp3 diff --git a/src/client/assets/sounds/syuilo/pirori-wet.mp3 b/assets/client/sounds/syuilo/pirori-wet.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/pirori-wet.mp3 rename to assets/client/sounds/syuilo/pirori-wet.mp3 diff --git a/src/client/assets/sounds/syuilo/pirori.mp3 b/assets/client/sounds/syuilo/pirori.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/pirori.mp3 rename to assets/client/sounds/syuilo/pirori.mp3 diff --git a/src/client/assets/sounds/syuilo/poi1.mp3 b/assets/client/sounds/syuilo/poi1.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/poi1.mp3 rename to assets/client/sounds/syuilo/poi1.mp3 diff --git a/src/client/assets/sounds/syuilo/poi2.mp3 b/assets/client/sounds/syuilo/poi2.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/poi2.mp3 rename to assets/client/sounds/syuilo/poi2.mp3 diff --git a/src/client/assets/sounds/syuilo/pope1.mp3 b/assets/client/sounds/syuilo/pope1.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/pope1.mp3 rename to assets/client/sounds/syuilo/pope1.mp3 diff --git a/src/client/assets/sounds/syuilo/pope2.mp3 b/assets/client/sounds/syuilo/pope2.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/pope2.mp3 rename to assets/client/sounds/syuilo/pope2.mp3 diff --git a/src/client/assets/sounds/syuilo/popo.mp3 b/assets/client/sounds/syuilo/popo.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/popo.mp3 rename to assets/client/sounds/syuilo/popo.mp3 diff --git a/src/client/assets/sounds/syuilo/reverved.mp3 b/assets/client/sounds/syuilo/reverved.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/reverved.mp3 rename to assets/client/sounds/syuilo/reverved.mp3 diff --git a/src/client/assets/sounds/syuilo/ryukyu.mp3 b/assets/client/sounds/syuilo/ryukyu.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/ryukyu.mp3 rename to assets/client/sounds/syuilo/ryukyu.mp3 diff --git a/src/client/assets/sounds/syuilo/snare.mp3 b/assets/client/sounds/syuilo/snare.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/snare.mp3 rename to assets/client/sounds/syuilo/snare.mp3 diff --git a/src/client/assets/sounds/syuilo/square-pico.mp3 b/assets/client/sounds/syuilo/square-pico.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/square-pico.mp3 rename to assets/client/sounds/syuilo/square-pico.mp3 diff --git a/src/client/assets/sounds/syuilo/triple.mp3 b/assets/client/sounds/syuilo/triple.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/triple.mp3 rename to assets/client/sounds/syuilo/triple.mp3 diff --git a/src/client/assets/sounds/syuilo/up.mp3 b/assets/client/sounds/syuilo/up.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/up.mp3 rename to assets/client/sounds/syuilo/up.mp3 diff --git a/src/client/assets/sounds/syuilo/waon.mp3 b/assets/client/sounds/syuilo/waon.mp3 similarity index 100% rename from src/client/assets/sounds/syuilo/waon.mp3 rename to assets/client/sounds/syuilo/waon.mp3 diff --git a/src/client/assets/unread.svg b/assets/client/unread.svg similarity index 100% rename from src/client/assets/unread.svg rename to assets/client/unread.svg diff --git a/src/client/assets/redoc.html b/assets/redoc.html similarity index 100% rename from src/client/assets/redoc.html rename to assets/redoc.html diff --git a/gulpfile.ts b/gulpfile.ts index b394e4f44c..95b2394887 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -6,7 +6,6 @@ import * as fs from 'fs'; import * as gulp from 'gulp'; import * as ts from 'gulp-typescript'; import * as rimraf from 'rimraf'; -import * as rename from 'gulp-rename'; import * as replace from 'gulp-replace'; const terser = require('gulp-terser'); const cssnano = require('gulp-cssnano'); @@ -29,16 +28,16 @@ gulp.task('build:copy:views', () => ); gulp.task('build:copy:fonts', () => - gulp.src('./node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/client/assets/fonts/')) + gulp.src('./node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/assets/fonts/')) ); gulp.task('build:copy:locales', cb => { - fs.mkdirSync('./built/client/assets/locales', { recursive: true }); + fs.mkdirSync('./built/assets/locales', { recursive: true }); const v = { '_version_': meta.version }; for (const [lang, locale] of Object.entries(locales)) { - fs.writeFileSync(`./built/client/assets/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8'); + fs.writeFileSync(`./built/assets/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8'); } cb(); @@ -56,7 +55,9 @@ gulp.task('build:client:script', () => { gulp.task('build:client:style', () => { return gulp.src(['./src/server/web/style.css', './src/server/web/bios.css', './src/server/web/cli.css']) - .pipe(cssnano()) + .pipe(cssnano({ + zindex: false + })) .pipe(gulp.dest('./built/server/web/')); }); @@ -77,33 +78,17 @@ gulp.task('cleanall', gulp.parallel('clean', cb => rimraf('./node_modules', cb) )); -gulp.task('copy:client', () => - gulp.src([ - './assets/**/*', - './src/client/assets/**/*', - ]) - .pipe(rename(path => { - path.dirname = path.dirname!.replace('assets', '.'); - })) - .pipe(gulp.dest('./built/client/assets/')) -); - gulp.task('copy:docs', () => gulp.src([ './src/docs/**/*', ]) - .pipe(gulp.dest('./built/client/assets/docs/')) + .pipe(gulp.dest('./built/assets/docs/')) ); -gulp.task('build:client', gulp.parallel( - 'copy:client', - 'copy:docs' -)); - gulp.task('build', gulp.parallel( 'build:ts', 'build:copy', - 'build:client', + 'copy:docs', )); gulp.task('default', gulp.task('build')); diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index a3cd8a4fa3..16815ab25d 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -83,7 +83,7 @@ pageLoadErrorDescription: "Cela est généralement causé par le cache du naviga enterListName: "Nom de la liste" privacy: "Confidentialité" makeFollowManuallyApprove: "Accepter manuellement les demandes d’abonnement" -defaultNoteVisibility: "Visibilité par défaut" +defaultNoteVisibility: "Visibilité des notes par défaut" follow: "S’abonner" followRequest: "Demande d’abonnement" followRequests: "Demandes d’abonnement" @@ -105,7 +105,7 @@ add: "Ajouter" reaction: "Réactions" reactionSettingDescription: "Choisissez vos réactions préférées que vous souhaitez épingler dans le sélecteur de réactions." reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser « + » pour ajouter." -rememberNoteVisibility: "Se souvenir de la visibilité des notes" +rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication de votre note précédente." attachCancel: "Supprimer le fichier attaché" markAsSensitive: "Marquer comme sensible" unmarkAsSensitive: "Supprimer le marquage comme sensible" @@ -136,7 +136,7 @@ cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichier flagAsBot: "Ce compte est un robot" flagAsBotDescription: "Si ce compte est géré de manière automatisée , définissez cette option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster les systèmes internes de Misskey pour traiter ce compte comme un robot." flagAsCat: "Ce compte est un chat" -flagAsCatDescription: "Vous pouvez activer l'option \"Je suis un chat \" pour ce compte." +flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte." autoAcceptFollowed: "Accepter automatiquement les demandes d’abonnement venant d’utilisateur·rice·s que vous suivez" addAcount: "Ajouter un compte" loginFailed: "Échec de la connexion" @@ -150,7 +150,7 @@ youHaveNoLists: "Vous n’avez aucune liste" followConfirm: "Êtes-vous sûr·e de vouloir suivre {name} ?" proxyAccount: "Compte proxy" proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions, comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple, quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste, ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice. Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient acheminées." -host: "Hôte" +host: "Serveur distant" selectUser: "Sélectionner un·e utilisateur·rice" recipient: "Destinataire" annotation: "Commentaires" @@ -239,7 +239,7 @@ uploadFromUrlRequested: "Téléversement demandé" uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain temps." explore: "Découvrir" games: "Jeux de Misskey" -messageRead: "Lus" +messageRead: "Lu" noMoreHistory: "Il n’y a plus d’historique" startMessaging: "Commencer à discuter" nUsersRead: "Lu par {n} personnes" @@ -313,7 +313,7 @@ connectSerice: "Connecter" disconnectSerice: "Déconnecter" enableLocalTimeline: "Activer le fil local" enableGlobalTimeline: "Activer le fil global" -disablingTimelinesInfo: "Si vous désactivez ces fils, les administrateurs et les modérateurs pourront toujours y accéder." +disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s et les modérateur·rice·s pourront toujours y accéder." registration: "S’inscrire" enableRegistration: "Autoriser les nouvelles inscriptions" invite: "Inviter" @@ -347,7 +347,7 @@ antennaSource: "Source de l’antenne" antennaKeywords: "Mots clés à recevoir" antennaExcludeKeywords: "Mots clés à exclure" antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec un saut de ligne pour une condition OR." -notifyAntenna: "Me notifier pour les nouvelles notes" +notifyAntenna: "Je souhaite recevoir les notifications des nouvelles notes" withFileAntenna: "Notes ayant des attachements uniquement" serviceworker: "ServiceWorker" enableServiceworker: "Activer ServiceWorker" @@ -364,7 +364,7 @@ unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de popularUsers: "Utilisateur·rice·s populaires" recentlyUpdatedUsers: "Utilisateur·rice·s actif·ve·s récemment" recentlyRegisteredUsers: "Utilisateur·rice·s récemment inscrit·e·s" -recentlyDiscoveredUsers: "Utilisateur·rice·s récemment découverts" +recentlyDiscoveredUsers: "Utilisateur·rice·s récemment découvert·e·s" exploreUsersCount: "Il y a {count} utilisateur·rice·s" exploreFediverse: "Explorer le Fediverse" popularTags: "Mots-clés populaires" @@ -378,11 +378,11 @@ moderator: "Modérateurs" nUsersMentioned: "{n} utilisateur·rice·s mentionné·e·s" securityKey: "Clé de sécurité" securityKeyName: "Nom de la clé" -registerSecurityKey: "S’inscrire la clé de sécurité" +registerSecurityKey: "Enregistrer une clé de sécurité" lastUsed: "Dernier utilisé" unregister: "Se désinscrire" -passwordLessLogin: "Connectez-vous sans mot de passe" -resetPassword: "Réinitialiser mot de passe" +passwordLessLogin: "Se connecter sans mot de passe" +resetPassword: "Réinitialiser le mot de passe" newPasswordIs: "Votre nouveau mot de passe est \"{password}\"" reduceUiAnimation: "Réduire les animations dans l’interface" share: "Partager" @@ -394,47 +394,47 @@ markAsReadAllNotifications: "Marquer toutes les notifications comme lues" markAsReadAllUnreadNotes: "Marquer toutes les notes comme lues" markAsReadAllTalkMessages: "Marquer toutes les discussions comme lues" help: "Aide" -inputMessageHere: "Tapez ici votre message" +inputMessageHere: "Écrivez votre message ici" close: "Fermer" group: "Groupe" groups: "Groupes" createGroup: "Créer un groupe" -ownedGroups: "Groupe propriétaire" -joinedGroups: "Membre dans les groupes" -invites: "Inviter" +ownedGroups: "Mes groupes" +joinedGroups: "Groupes rejoints" +invites: "Invitations" groupName: "Nom du groupe" members: "Membres" transfer: "Transférer" -messagingWithUser: "Discutez avec les utilisateurs" -messagingWithGroup: "Discuter en groupe" +messagingWithUser: "Discuter avec un·e autre utilisateur·rice" +messagingWithGroup: "Discuter avec un groupe" title: "Titre" text: "Texte" enable: "Activer" next: "Suivant" -retype: "Retapez" -noteOf: "{user} notes" -inviteToGroup: "Inviter au groupe" -maxNoteTextLength: "Limite de note caractères" +retype: "Confirmation" +noteOf: "Notes de {user}" +inviteToGroup: "Inviter dans un groupe" +maxNoteTextLength: "Limite du nombre de caractères pour les notes" quoteAttached: "Avec citation" -quoteQuestion: "Souhaitez-vous ajoutez une citation ?" -noMessagesYet: "Pas encore discuté" +quoteQuestion: "Souhaitez-vous ajouter une citation ?" +noMessagesYet: "Pas encore de discussion" newMessageExists: "Vous avez un nouveau message" onlyOneFileCanBeAttached: "Vous ne pouvez joindre qu’un seul fichier au message" signinRequired: "Veuillez vous connecter" -invitations: "Inviter" +invitations: "Invitations" invitationCode: "Code d’invitation" -checking: "Vérification" +checking: "Vérification en cours..." available: "Disponible" unavailable: "Non disponible" -usernameInvalidFormat: "Vous pouvez utiliser des lettres, des nombres et _" -tooShort: "Est trop court" -tooLong: "Est trop long" -weakPassword: "Faible mot de passe" -normalPassword: "Bon mot de passe" -strongPassword: "Fort mot de passe" -passwordMatched: "Combinaison correcte !" -passwordNotMatched: "Ne correspond pas" -signinWith: "Connectez-vous avec {x}" +usernameInvalidFormat: "Le nom d'utilisateur peut contenir uniquement des lettres, des chiffres et des _" +tooShort: "Trop court" +tooLong: "Trop long" +weakPassword: "Mot de passe faible" +normalPassword: "Mot de passe acceptable" +strongPassword: "Mot de passe fort" +passwordMatched: "Les mots de passe correspondent" +passwordNotMatched: "Les mots de passe ne correspondent pas" +signinWith: "Se connecter avec {x}" signinFailed: "Échec d’authentification. Veuillez vérifier que votre nom d’utilisateur et mot de passe sont corrects." tapSecurityKey: "Appuyez sur votre clé de sécurité" or: "OU" @@ -444,17 +444,17 @@ groupInvited: "Invité au groupe" aboutX: "À propos de {x}" useOsNativeEmojis: "Utiliser les émojis natifs du système" youHaveNoGroups: "Vous n’avez aucun groupe" -joinOrCreateGroup: "Soyez invité à rejoindre les groupes ou vous pouvez créer votre propre groupe." +joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou créer votre propre nouveau groupe." noHistory: "Pas d'historique" signinHistory: "Historique de connexion" disableAnimatedMfm: "Désactiver MFM ayant des animations" -doing: "Attends une seconde" -category: "Catégories" +doing: "En cours..." +category: "Catégorie" tags: "Étiquettes" docSource: "Source de ce document" -createAccount: "Créer compte" +createAccount: "Créer un compte" existingAcount: "Comptes existants" -regenerate: "Régénérer" +regenerate: "Générer à nouveau" fontSize: "Taille de la police" noFollowRequests: "Vous n’avez aucune demande d’abonnement en attente" openImageInNewTab: "Ouvrir les images dans un nouvel onglet" @@ -462,16 +462,16 @@ dashboard: "Tableau de bord" local: "Local" remote: "Distant" total: "Total" -weekOverWeekChanges: "Diff hebdo" -dayOverDayChanges: "Diff quotidien" -appearance: "Aspect" +weekOverWeekChanges: "Hebdomadaire" +dayOverDayChanges: "Journalier" +appearance: "Apparence" clientSettings: "Paramètres du client" accountSettings: "Paramètres du compte" promotion: "Promu" promote: "Promouvoir" numberOfDays: "Nombre de jours" hideThisNote: "Masquer cette note" -showFeaturedNotesInTimeline: "Afficher les notes en vedette dans fil d'actualité" +showFeaturedNotesInTimeline: "Afficher les notes des Tendances dans le fil d'actualité" objectStorage: "Stockage d'objets" useObjectStorage: "Utiliser le stockage d'objets" objectStorageBaseUrl: "Base URL" @@ -482,53 +482,53 @@ objectStoragePrefix: "Prefix" objectStoragePrefixDesc: "Les fichiers seront stockés sous le répertoire de ce préfixe." objectStorageEndpoint: "Endpoint" objectStorageEndpointDesc: "Laissez ce champ vide si vous utilisez AWS S3, sinon spécifiez le point de terminaison comme '<host>' ou '<host>: <port>' selon le guide de service que vous allez utiliser." -objectStorageRegion: "Region" +objectStorageRegion: "Région" objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre service ne fait pas de distinction entre les régions, laissez-le vide ou remplissez 'us-east-1'." objectStorageUseSSL: "Utiliser SSL" -objectStorageUseSSLDesc: "Désactivez-le si vous n'utilisez pas HTTPS pour la connexion API" +objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour la connexion API" objectStorageUseProxy: "Se connecter via proxy" -objectStorageUseProxyDesc: "Désactivez-le si vous n'utilisez pas Proxy pour la connexion de stockage d'objets" +objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas Proxy pour la connexion API" objectStorageSetPublicRead: "Régler sur « public » lors de l'envoi" -serverLogs: "Journaux serveur" +serverLogs: "Journal du serveur" deleteAll: "Supprimer tout" showFixedPostForm: "Afficher le formulaire en haut du fil d'actualité" -newNoteRecived: "Vous avez une nouvelle note" +newNoteRecived: "Vous avez reçu une nouvelle note" sounds: "Sons" listen: "Écouter" none: "Rien" showInPage: "Afficher dans la page" popout: "Fenêtre contextuelle" volume: "Volume" -masterVolume: "Volume" +masterVolume: "Volume principal" details: "Détails" chooseEmoji: "Choisissez un émoji" unableToProcess: "L’opération n’a pas pu être complétée." -recentUsed: "Récemment utilisé" +recentUsed: "Utilisé récemment" install: "Installation" uninstall: "Désinstaller" -installedApps: "Applications Autorisées" +installedApps: "Applications installées" nothing: "Il n'y a rien à voir ici" -installedDate: "Autorisé" +installedDate: "Date d'installation" lastUsedDate: "Dernière utilisation" state: "État" sort: "Trier" ascendingOrder: "Ascendant" descendingOrder: "Descendant" -scratchpad: "Scratch pad" -scratchpadDescription: "Scratchpad fournit un environnement expérimental pour AiScript. Vous pouvez écrire, exécuter et vérifier les résultats qui interagissent avec Misskey." +scratchpad: "ScratchPad" +scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat de son interaction avec Misskey." output: "Sortie" script: "Script" disablePagesScript: "Désactiver AiScript sur les Pages" updateRemoteUser: "Mettre à jour les informations de l’utilisateur·rice distant·e" deleteAllFiles: "Supprimer tous les fichiers" -deleteAllFilesConfirm: "Êtes vous surs de vouloir supprimer tous les fichiers ?" +deleteAllFilesConfirm: "Êtes-vous sûr·e de vouloir supprimer tous les fichiers ?" removeAllFollowing: "Retenir tous les abonnements" removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez lancer cette action uniquement si l’instance n’existe plus." -userSuspended: "Cette utilisateur·trice a été suspendue." +userSuspended: "Cet·te utilisateur·rice a été suspendu·e." userSilenced: "Cette utilisateur·trice a été mis·e en sourdine." sidebar: "Barre latérale" divider: "Séparateur" -addItem: "Ajouter élément" +addItem: "Ajouter un élément" rooms: "Chambre" relays: "Relais" addRelay: "Ajouter un relais" @@ -574,7 +574,7 @@ emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réini email: "E-mail " emailAddress: "Adresses e-mail" smtpConfig: "Paramètres du serveur SMTP" -smtpHost: "Hôte" +smtpHost: "Serveur distant" smtpPort: "Port" smtpUser: "Nom d’utilisateur·rice" smtpPass: "Mot de passe" @@ -645,7 +645,7 @@ driveFilesCount: "Nombre de fichiers dans le Drive" driveUsage: "Utilisation du Drive" noCrawle: "Refuser l'indexation par les robots" noCrawleDescription: "Demandez aux moteurs de recherche de ne pas indexer votre page de profil, vos notes, vos pages, etc." -lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre note sur \"Abonné-e-s\", vos notes sont visibles par tous, même si vous exigez que les followers soient approuvés manuellement." +lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre note sur \"Abonné-e-s\", vos notes sont visibles par tous, même si vous exigez que les demandes d'abonnement soient approuvées manuellement." alwaysMarkSensitive: "Marquer les médias comme contenu sensible par défaut" loadRawImages: "Affichage complet des images jointes au lieu des vignettes" disableShowingAnimatedImages: "Désactiver l'animation des images" @@ -658,12 +658,13 @@ pageLikedCount: "Nombre de vos pages aimées" reversiCount: "Nombre de parties de Reversi" contact: "Contact" useSystemFont: "Utiliser la police par défaut du système" -clips: "Clip" +clips: "Clips" experimentalFeatures: "Fonctionnalités expérimentales" developer: "Développeur" makeExplorable: "Rendre le compte visible sur la page \"Découvrir\"." makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra pas sur la page \"Découvrir\"." showGapBetweenNotesInTimeline: "Afficher un écart entre les notes sur la Timeline" +duplicate: "Duliquer" left: "Gauche" center: "Centrer" wide: "Large" @@ -753,11 +754,14 @@ _mfm: centerDescription: "Le contenu peut être centré" inlineCode: "Code (inline)" blockCode: "Bloc de code" + inlineMath: "Formule mathématique (inline)" + blockMath: "Formule mathématique (bloc)" quote: "Citer" quoteDescription: "Affiche le contenu sous forme de citation." emoji: "Émojis personnalisés" search: "Rechercher" flip: "Inverser" + flipDescription: "Rotation verticale ou horizontale du contenu" x2: "Grand" x2Description: "Afficher le contenu en grand." x3: "Très grand" @@ -802,8 +806,10 @@ _reversi: canPutEverywhere: "Les pions peuvent être placés partout " _instanceTicker: none: "Cacher " + always: "Toujours afficher" _serverDisconnectedBehavior: reload: "Rechargement automatique" + dialog: "Ouvrir une boîte de dialogue pour l'avertissement" quiet: "Afficher un avertissement discret" _channel: create: "Créer un canal" @@ -811,8 +817,9 @@ _channel: setBanner: "Sélectionner la bannière" removeBanner: "Supprimer la bannière" featured: "Tendances" + owned: "Mes canaux" following: "Abonné·e" - usersCount: "{n} Participants" + usersCount: "{n} Participant·e·s" notesCount: "{n} Notes" _sidebar: full: "Complet" @@ -821,6 +828,10 @@ _sidebar: _wordMute: muteWords: "Mots à filtrer" muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec un saut de ligne pour une condition OR." + softDescription: "Masquez les notes de votre fil selon les paramètres que vous définissez." + hardDescription: "Empêchez votre fil de charger les notes selon les paramètres que vous définissez. Cette action est irréversible : si vous modifiez ces paramètres plus tard, les notes précédemment filtrées ne seront pas récupérées." + soft: "Doux" + hard: "Strict" mutedNotes: "Notes filtrées" _theme: explore: "Explorer les thèmes" @@ -838,12 +849,16 @@ _theme: constant: "Constante" defaultValue: "Valeur par défaut" color: "Couleur" + refConst: "Référencez une constante" key: "Clé " func: "Fonction" + funcKind: "Type de fonction" argument: "Argument" alpha: "Transparence" darken: "Assombrir" + inputConstantName: "Insérez un nom de constante" importInfo: "Vous pouvez importer un thème vers l’éditeur de thèmes en saisissant son code ici." + deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const} ?" keys: bg: "Arrière-plan" fg: "Texte" @@ -865,11 +880,17 @@ _theme: divider: "Séparateur" scrollbarHandle: "Poignée de la barre de navigation" scrollbarHandleHover: "Poignée de la barre de navigation (survolée)" + infoFg: "Texte d'information" + infoWarnBg: "Arrière-plan des avertissements" infoWarnFg: "Texte d’avertissement" cwBg: "Arrière-plan du CW" + cwFg: "Texte du bouton CW" + cwHoverBg: "Arrière-plan du bouton CW (survolé)" buttonBg: "Arrière-plan du bouton" buttonHoverBg: "Arrière-plan du bouton (survolé)" inputBorder: "Cadre de la zone de texte" + listItemHoverBg: "Arrière-plan d'item de liste (survolé)" + driveFolderBg: "Arrière-plan du dossier de disque" badge: "Badge" messageBg: "Arrière plan de la discussion" fgHighlighted: "Texte mis en évidence" @@ -880,6 +901,7 @@ _sfx: chat: "Discuter" chatBg: "Discuter (De fond)" antenna: "Réception de l’antenne" + channel: "Notifications de canal" _ago: unknown: "Inconnu" future: "Futur" @@ -956,7 +978,7 @@ _permissions: "read:user-groups": "Voir les groupes d'utilisateur·rice·s" "write:user-groups": "Éditer les groupes des utilisateur·rice·s" "read:channels": "Lire les canaux" - "write:channels": "Modifier les canaux" + "write:channels": "Gérer les canaux" _auth: shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?" shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre compte?" @@ -1103,7 +1125,7 @@ _rooms: exit: "Retour" remove: "Enlever" clear: "Tout enlever" - clearConfirm: "Désirez-vous enlever tout les meubles de votre chambre ?" + clearConfirm: "Souhaitez-vous enlever tous les meubles de votre chambre ?" leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous vraiment quitter ?" chooseImage: "Sélectionnez une image" roomType: "Type de chambre" diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 146169d7e7..4e2e4a5353 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -1,36 +1,43 @@ --- _lang_: "Italiano" +headlineMisskey: "Rete collegata tramite note" monthAndDay: "{day}/{month}" search: "Cerca" notifications: "Notifiche" username: "Nome utente" password: "Password" +fetchingAsApObject: "Recuperando dal Fediverso..." ok: "OK" +gotIt: "Capito!" cancel: "Annulla" enterUsername: "Inserisci un nome utente" -renotedBy: "Rinotta da {user}" -noNotes: "Nessuna note" +renotedBy: "Condiviso da {user}" +noNotes: "Nessuna nota!" noNotifications: "Nessuna notifica" instance: "Istanza" settings: "Impostazioni" basicSettings: "Impostazioni generali" otherSettings: "Altre impostazioni" +openInWindow: "Apri in una finestra" profile: "Profilo" timeline: "Timeline" login: "Accedi" -logout: "Logout" +loggingIn: "Accesso in corso..." +logout: "Esci" signup: "Iscriviti" uploading: "Caricamento..." save: "Salva" users: "Utente" -favorite: "Segnalibri" -favorites: "Segnalibri" -unfavorite: "Rimuovi Nota dai segnalibri" -favorited: "Nota salvato nei segnalibri." -alreadyFavorited: "Tweet salvato nei segnalibri." +addUser: "Aggiungi utente" +favorite: "Preferiti" +favorites: "Preferiti" +unfavorite: "Rimuovi nota dai preferiti" +favorited: "Aggiunta ai preferiti." +alreadyFavorited: "Già tra i preferiti." +cantFavorite: "Impossibile aggiungere ai Preferiti." pin: "Fissa sul profilo" -unpin: "Non fissare più sul profilo" -copyContent: "Copia il contenuto del Nota" +unpin: "Non fissare sul profilo" +copyContent: "Copia il contenuto" copyLink: "Copia link" delete: "Elimina" deleteAndEdit: "Elimina & Modifica" @@ -39,13 +46,13 @@ sendMessage: "Invia messaggio" copyUsername: "Copia nome utente" searchUser: "Cerca Utente" reply: "Rispondi" -loadMore: "Mostra altre" -showMore: "Mostra altre" -youGotNewFollower: "Nuovo seguace" +loadMore: "Mostra di più" +showMore: "Mostra di più" +youGotNewFollower: "Ha iniziato a seguirti" receiveFollowRequest: "Nuova richiesta di essere seguito" mention: "Menzioni" mentions: "Menzioni" -directNotes: "Note diretti" +directNotes: "Note dirette" importAndExport: "Importa ed Esporta" import: "Importa" export: "Esporta" @@ -54,7 +61,7 @@ download: "Scarica" lists: "Liste" noLists: "Qui non c'è ancora niente" note: "Nota" -notes: "Nota" +notes: "Note" following: "Seiguiti" followers: "Seguaci" followsYou: "Ti segue" @@ -70,9 +77,12 @@ followRequest: "Richiesta di seguire" followRequests: "Richiesta di seguire" unfollow: "Smetti di seguire" followRequestPending: "In sospeso" -renote: "Rinotta" -unrenote: "Annulla rinotta" -quote: "Cita Nota" +enterEmoji: "Inserisci emoji" +renote: "Rinota" +unrenote: "Annulla rinota" +renoted: "Condiviso!" +cantReRenote: "È impossibile rinota una condivisione." +quote: "Cita" pinned: "Fissa sul profilo" you: "Tu" clickToShow: "Clicca per visualizzare" @@ -96,6 +106,7 @@ addAcount: "Aggiungi un account esistente" general: "Generali" wallpaper: "Sfondo" setWallpaper: "Imposta sfondo" +removeWallpaper: "Elimina lo sfondo" searchWith: "Cerca: {q}" annotation: "Descrizione" federation: "Federazione" @@ -107,9 +118,13 @@ perDay: "al giorno" software: "Software" version: "Versione" metadata: "Metadato" +cpuAndMemory: "CPU e Memoria" network: "Rete" disk: "Disco" +instanceInfo: "Informazioni di istanza" statistics: "Statistiche" +clearQueue: "Cancella coda" +clearQueueConfirmTitle: "Cancella coda?" blockedInstances: "Istanza bloccati" muteAndBlock: "Silenziamento e blocco" mutedUsers: "Account silenziati" @@ -193,6 +208,7 @@ recaptcha: "reCAPTCHA" enableRecaptcha: "Abilita reCAPTCHA" name: "Nome" serviceworker: "ServiceWorker" +notesAndReplies: "Note e risposte" exploreFediverse: "Esplora Fediverse" popularTags: "Tag di tendenza" userList: "Liste" @@ -205,7 +221,7 @@ moderator: "Moderatore" lastUsed: "Ultima attività" unregister: "Disattiva account" resetPassword: "Reimposta password" -share: "Condividi" +share: "Renota" cacheClear: "Svuota cache" help: "Guida" close: "Chiudi" @@ -216,6 +232,7 @@ invites: "Invita" transfer: "Trasferisci" title: "Titolo" next: "Avanti" +noteOf: "Note di {user}" invitations: "Invita" invitationCode: "Codice di invito" available: "Consigliati" @@ -232,16 +249,22 @@ local: "Locale" remote: "Remoto" accountSettings: "Impostazioni Account" promote: "Pubblicizza" +objectStorageBaseUrl: "Base URL" objectStorageBucket: "Bucket" objectStorageEndpoint: "Endpoint" objectStorageRegion: "Region" +objectStorageUseSSL: "Usare SSL" serverLogs: "Log del server" deleteAll: "Cancella cronologia" +sounds: "Effetti sonori" +listen: "Ascolta" +none: "Niente" volume: "Volume" details: "Dettagli" install: "Installa" uninstall: "Disinstalla" installedDate: "Data installazione" +state: "Stato" sort: "Ordina per" visibility: "Privacy dei post" poll: "Sondaggio" @@ -283,7 +306,7 @@ duplicate: "Duplica" left: "Sinistra" center: "Centro" wide: "Largo" -nNotes: "{n}Nota" +nNotes: "{n}Note" backgroundColor: "Sfondo" value: "Valore" saveConfirm: "Vuoi salvare le modifiche?" @@ -296,7 +319,7 @@ editCode: "Modifica codice" apply: "Applica" _email: _follow: - title: "Nuovo seguace" + title: "Ha iniziato a seguirti" _registry: key: "Dati" keys: "Dati" @@ -334,7 +357,7 @@ _theme: bg: "Sfondo" shadow: "Ombra" mention: "Menzioni" - renote: "Rinotta" + renote: "Rinota" divider: "Interruzione di linea" _sfx: note: "Nota" @@ -362,8 +385,8 @@ _tutorial: _permissions: "read:blocks": "Visualizza gli account che hai bloccato." "write:blocks": "Gestisci gli account che hai bloccato." - "read:favorites": "Visualizza Segnalibri" - "write:favorites": "Gestisci Segnalibri" + "read:favorites": "Visualizza Preferiti" + "write:favorites": "Gestisci Preferiti" "write:following": "Seguiti/ Smetti di seguire" "read:notifications": "Visualizza notifiche" _weekday: @@ -388,7 +411,7 @@ _widgets: federation: "Federazione" _cw: hide: "Nascondere" - show: "Mostra altre" + show: "Mostra di più" _poll: noMore: "Hai aggiunto il numero massimo di opzioni." canMultipleVote: "Risposte multiple" @@ -515,7 +538,7 @@ _pages: _eq: arg1: "A" arg2: "B" - notEq: "A non è uguale a B" + notEq: "A e B sono differenti" _notEq: arg1: "A" arg2: "B" @@ -558,16 +581,16 @@ _pages: array: "Liste" _notification: youGotQuote: "{name} ha citato il tuo Nota e ha detto" - youRenoted: "{name} ha rinotta" + youRenoted: "{name} ha rinota" youGotPoll: "{name} ha volluto." - youWereFollowed: "Nuovo seguace" + youWereFollowed: "Ha iniziato a seguirti" _types: all: "Tutto" follow: "Seiguiti" mention: "Menzioni" reply: "Rispondi" - renote: "Rinotta" - quote: "Cita il nota" + renote: "Rinota" + quote: "Cita" reaction: "Reazione" _deck: _columns: diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 0e6fd71c38..d1a69ea481 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -690,6 +690,9 @@ deleteConfirm: "삭제하시겠습니까?" invalidValue: "올바른 값이 아닙니다." registry: "레지스트리" closeAccount: "계정 폐쇄" +currentVersion: "현재 버전" +latestVersion: "최신 버전" +newVersionOfClientAvailable: "새로운 버전의 클라이언트를 이용할 수 있습니다." usageAmount: "사용량" capacity: "용량" inUse: "사용중" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 8e6b17e440..eb392a27bb 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -623,7 +623,7 @@ random: "Случайные" system: "Система" switchUi: "Выбор вида" desktop: "Стол" -clip: "Памятки" +clip: "В памятку" createNew: "Новый документ" optional: "Необязательно" createNewClip: "Новая памятка" @@ -709,6 +709,7 @@ useReactionPickerForContextMenu: "Открывать палитру реакци typingUsers: "Стук клавиш. Это {users}…" jumpToSpecifiedDate: "Перейти к заданной дате" showingPastTimeline: "Отображается старая лента" +clear: "Очистить" _email: _follow: title: "Новый подписчик" diff --git a/package.json b/package.json index dd1154a246..8fc4af571c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo <syuilotan@yahoo.co.jp>", - "version": "12.73.0", + "version": "12.74.1", "codename": "indigo", "repository": { "type": "git", @@ -35,7 +35,7 @@ "lodash": "^4.17.20" }, "dependencies": { - "@babel/plugin-transform-runtime": "7.13.6", + "@babel/plugin-transform-runtime": "7.13.9", "@elastic/elasticsearch": "7.11.0", "@fortawesome/fontawesome-svg-core": "1.2.34", "@fortawesome/free-brands-svg-icons": "5.15.2", @@ -64,7 +64,7 @@ "@types/jsdom": "16.2.6", "@types/jsonld": "1.5.4", "@types/katex": "0.11.0", - "@types/koa": "2.13.0", + "@types/koa": "2.13.1", "@types/koa-bodyparser": "4.3.0", "@types/koa-cors": "0.0.0", "@types/koa-favicon": "2.0.19", @@ -107,7 +107,7 @@ "@types/webpack-stream": "3.2.11", "@types/websocket": "1.0.1", "@types/ws": "7.4.0", - "@typescript-eslint/parser": "4.14.2", + "@typescript-eslint/parser": "4.16.1", "@vue/compiler-sfc": "3.0.5", "abort-controller": "3.0.0", "apexcharts": "3.25.0", @@ -194,7 +194,7 @@ "parsimmon": "1.16.0", "pg": "8.5.1", "portscanner": "2.2.0", - "postcss": "8.2.6", + "postcss": "8.2.7", "postcss-loader": "5.0.0", "prismjs": "1.23.0", "probe-image-size": "6.0.0", @@ -227,7 +227,7 @@ "style-loader": "2.0.0", "summaly": "2.4.0", "syslog-pro": "1.0.0", - "systeminformation": "4.34.6", + "systeminformation": "5.6.1", "syuilo-password-strength": "0.0.1", "textarea-caret": "3.1.0", "three": "0.117.1", @@ -251,7 +251,7 @@ "vue-loader": "16.1.2", "vue-prism-editor": "2.0.0-alpha.2", "vue-router": "4.0.4", - "vue-style-loader": "4.1.2", + "vue-style-loader": "4.1.3", "vuedraggable": "4.0.1", "web-push": "3.4.4", "webpack": "5.24.2", diff --git a/src/client/components/drive.file.vue b/src/client/components/drive.file.vue index d2b8b95f73..5075b574c4 100644 --- a/src/client/components/drive.file.vue +++ b/src/client/components/drive.file.vue @@ -9,15 +9,15 @@ :title="title" > <div class="label" v-if="$i.avatarId == file.id"> - <img src="/assets/label.svg"/> + <img src="/static-assets/client/label.svg"/> <p>{{ $ts.avatar }}</p> </div> <div class="label" v-if="$i.bannerId == file.id"> - <img src="/assets/label.svg"/> + <img src="/static-assets/client/label.svg"/> <p>{{ $ts.banner }}</p> </div> <div class="label red" v-if="file.isSensitive"> - <img src="/assets/label-red.svg"/> + <img src="/static-assets/client/label-red.svg"/> <p>{{ $ts.nsfw }}</p> </div> diff --git a/src/client/components/emoji-picker-dialog.vue b/src/client/components/emoji-picker-dialog.vue index affc1ccf39..4b165d9f91 100644 --- a/src/client/components/emoji-picker-dialog.vue +++ b/src/client/components/emoji-picker-dialog.vue @@ -1,6 +1,6 @@ <template> -<MkModal ref="modal" :manual-showing="manualShowing" :src="src" @click="$refs.modal.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')" v-slot="{ showing }"> - <MkEmojiPicker v-show="showing !== false" :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/> +<MkModal ref="modal" :manual-showing="manualShowing" :src="src" @click="$refs.modal.close()" @opening="opening" @close="$emit('close')" @closed="$emit('closed')"> + <MkEmojiPicker :show-pinned="showPinned" :as-reaction-picker="asReactionPicker" @chosen="chosen" ref="picker"/> </MkModal> </template> diff --git a/src/client/components/emoji-picker.vue b/src/client/components/emoji-picker.vue index f7eaeb2bfe..99d6c8a330 100644 --- a/src/client/components/emoji-picker.vue +++ b/src/client/components/emoji-picker.vue @@ -279,6 +279,7 @@ export default defineComponent({ reset() { this.$refs.emojis.scrollTop = 0; + this.q = ''; }, getKey(emoji: any) { diff --git a/src/client/components/media-video.vue b/src/client/components/media-video.vue index 3788947206..bdd3983e1e 100644 --- a/src/client/components/media-video.vue +++ b/src/client/components/media-video.vue @@ -6,22 +6,24 @@ </div> </div> <div class="kkjnbbplepmiyuadieoenjgutgcmtsvu" v-else> - <i><Fa :icon="faEyeSlash" @click="hide = true"/></i> - <a - :href="video.url" - rel="nofollow noopener" - target="_blank" - :style="imageStyle" + <video + :poster="video.thumbnailUrl" :title="video.name" + crossorigin="anonymous" + preload="none" + controls > - <Fa :icon="faPlayCircle"/> - </a> + <source + :src="video.url" + :type="video.type" + > + </video> + <i><Fa :icon="faEyeSlash" @click="hide = true"/></i> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faPlayCircle } from '@fortawesome/free-regular-svg-icons'; import { faExclamationTriangle, faEyeSlash } from '@fortawesome/free-solid-svg-icons'; import * as os from '@/os'; @@ -35,18 +37,10 @@ export default defineComponent({ data() { return { hide: true, - faPlayCircle, faExclamationTriangle, faEyeSlash }; }, - computed: { - imageStyle(): any { - return { - 'background-image': `url(${this.video.thumbnailUrl})` - }; - } - }, created() { this.hide = (this.$store.state.nsfw === 'force') ? true : this.video.isSensitive && (this.$store.state.nsfw !== 'ignore'); }, @@ -72,7 +66,7 @@ export default defineComponent({ right: 12px; } - > a { + > video { display: flex; justify-content: center; align-items: center; diff --git a/src/client/components/note-detailed.vue b/src/client/components/note-detailed.vue index b5bc054e5e..1ef3f43389 100644 --- a/src/client/components/note-detailed.vue +++ b/src/client/components/note-detailed.vue @@ -140,6 +140,7 @@ import { checkWordMute } from '@/scripts/check-word-mute'; import { userPage } from '@/filters/user'; import * as os from '@/os'; import { noteActions, noteViewInterruptors } from '@/store'; +import { reactionPicker } from '@/scripts/reaction-picker'; function markRawAll(...xs) { for (const x of xs) { @@ -523,7 +524,7 @@ export default defineComponent({ react(viaKeyboard = false) { pleaseLogin(); this.blur(); - os.pickReaction(this.$refs.reactButton, reaction => { + reactionPicker.show(this.$refs.reactButton, reaction => { os.api('notes/reactions/create', { noteId: this.appearNote.id, reaction: reaction diff --git a/src/client/components/note.vue b/src/client/components/note.vue index bc2f87fe85..65e09b7802 100644 --- a/src/client/components/note.vue +++ b/src/client/components/note.vue @@ -122,6 +122,7 @@ import { checkWordMute } from '@/scripts/check-word-mute'; import { userPage } from '@/filters/user'; import * as os from '@/os'; import { noteActions, noteViewInterruptors } from '@/store'; +import { reactionPicker } from '@/scripts/reaction-picker'; function markRawAll(...xs) { for (const x of xs) { @@ -498,7 +499,7 @@ export default defineComponent({ react(viaKeyboard = false) { pleaseLogin(); this.blur(); - os.pickReaction(this.$refs.reactButton, reaction => { + reactionPicker.show(this.$refs.reactButton, reaction => { os.api('notes/reactions/create', { noteId: this.appearNote.id, reaction: reaction diff --git a/src/client/components/ui/modal.vue b/src/client/components/ui/modal.vue index 23c153e5f7..ff5b98d39f 100644 --- a/src/client/components/ui/modal.vue +++ b/src/client/components/ui/modal.vue @@ -1,14 +1,12 @@ <template> -<div class="mk-modal" v-hotkey.global="keymap" :style="{ pointerEvents: (manualShowing != null ? manualShowing : showing) ? 'auto' : 'none', '--transformOrigin': transformOrigin }"> - <transition :name="$store.state.animation ? 'modal-bg' : ''" appear> - <div class="bg _modalBg" v-if="manualShowing != null ? manualShowing : showing" @click="onBgClick"></div> - </transition> - <div class="content" :class="{ popup, fixed, top: position === 'top' }" @click.self="onBgClick" ref="content"> - <transition :name="$store.state.animation ? popup ? 'modal-popup-content' : 'modal-content' : ''" appear @after-leave="$emit('closed')" @enter="$emit('opening')" @after-enter="childRendered"> - <slot v-if="manualShowing != null ? true : showing" v-bind:showing="manualShowing"></slot> - </transition> +<transition :name="$store.state.animation ? popup ? 'modal-popup' : 'modal' : ''" appear @after-leave="onClosed" @enter="$emit('opening')" @after-enter="childRendered"> + <div v-show="manualShowing != null ? manualShowing : showing" class="mk-modal" v-hotkey.global="keymap" :style="{ pointerEvents: (manualShowing != null ? manualShowing : showing) ? 'auto' : 'none', '--transformOrigin': transformOrigin }"> + <div class="bg _modalBg" @click="onBgClick"></div> + <div class="content" :class="{ popup, fixed, top: position === 'top' }" @click.self="onBgClick" ref="content"> + <slot></slot> + </div> </div> -</div> +</transition> </template> <script lang="ts"> @@ -85,6 +83,8 @@ export default defineComponent({ const popover = this.$refs.content as any; + if (popover == null) return; + const rect = this.src.getBoundingClientRect(); const width = popover.offsetWidth; @@ -163,42 +163,71 @@ export default defineComponent({ onBgClick() { if (this.contentClicking) return; this.$emit('click'); + }, + + onClosed() { + this.$emit('closed'); } } }); </script> -<style> -.modal-popup-content-enter-active, .modal-popup-content-leave-active, -.modal-content-enter-from, .modal-content-leave-to { - transform-origin: var(--transformOrigin); +<style lang="scss"> +.modal-popup-enter-active, .modal-popup-leave-active, +.modal-enter-from, .modal-leave-to { + > .content { + transform-origin: var(--transformOrigin); + } } </style> <style lang="scss" scoped> -.modal-bg-enter-active, .modal-bg-leave-active { - transition: opacity 0.3s !important; -} -.modal-bg-enter-from, .modal-bg-leave-to { - opacity: 0; -} - -.modal-content-enter-active, .modal-content-leave-active { +.modal-enter-active, .modal-leave-active { + // CSS的には無意味だけどこれが無いとVueが認識しない transition: opacity 0.3s, transform 0.3s !important; + + > .bg { + transition: opacity 0.3s !important; + } + + > .content { + transition: opacity 0.3s, transform 0.3s !important; + } } -.modal-content-enter-from, .modal-content-leave-to { - pointer-events: none; - opacity: 0; - transform: scale(0.9); +.modal-enter-from, .modal-leave-to { + > .bg { + opacity: 0; + } + + > .content { + pointer-events: none; + opacity: 0; + transform: scale(0.9); + } } -.modal-popup-content-enter-active, .modal-popup-content-leave-active { +.modal-popup-enter-active, .modal-popup-leave-active { + // CSS的には無意味だけどこれが無いとVueが認識しない transition: opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1), transform 0.5s cubic-bezier(0.16, 1, 0.3, 1) !important; + + > .bg { + transition: opacity 0.3s !important; + } + + > .content { + transition: opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1), transform 0.5s cubic-bezier(0.16, 1, 0.3, 1) !important; + } } -.modal-popup-content-enter-from, .modal-popup-content-leave-to { - pointer-events: none; - opacity: 0; - transform: scale(0.9); +.modal-popup-enter-from, .modal-popup-leave-to { + > .bg { + opacity: 0; + } + + > .content { + pointer-events: none; + opacity: 0; + transform: scale(0.9); + } } .mk-modal { @@ -227,12 +256,12 @@ export default defineComponent({ mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 16px, rgba(0,0,0,1) calc(100% - 16px), rgba(0,0,0,0) 100%); } - > * { + > ::v-deep(*) { margin: auto; } &.top { - > * { + > ::v-deep(*) { margin-top: 0; } } diff --git a/src/client/init.ts b/src/client/init.ts index e89dc83380..21bdbee5a8 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -69,6 +69,7 @@ import { isMobile } from '@/scripts/is-mobile'; import { getThemes } from '@/theme-store'; import { initializeSw } from '@/scripts/initialize-sw'; import { reload, reloadChannel } from '@/scripts/unison-reload'; +import { reactionPicker } from '@/scripts/reaction-picker'; import { deleteLoginId } from '@/scripts/login-id'; import { getAccountFromId } from '@/scripts/get-account-from-id'; @@ -246,9 +247,22 @@ components(app); await router.isReady(); -//document.body.innerHTML = '<div id="app"></div>'; +const splash = document.getElementById('splash'); +// 念のためnullチェック(HTMLが古い場合があるため(そのうち消す)) +if (splash) splash.addEventListener('transitionend', () => { + splash.remove(); +}); -app.mount('body'); +const rootEl = document.createElement('div'); +document.body.appendChild(rootEl); +app.mount(rootEl); + +reactionPicker.init(); + +if (splash) { + splash.style.opacity = '0'; + splash.style.pointerEvents = 'none'; +} watch(defaultStore.reactiveState.darkMode, (darkMode) => { import('@/scripts/theme').then(({ builtinThemes }) => { diff --git a/src/client/os.ts b/src/client/os.ts index 2b72391bf5..9be45e6c6d 100644 --- a/src/client/os.ts +++ b/src/client/os.ts @@ -357,38 +357,6 @@ export async function openEmojiPicker(src?: HTMLElement, opts, initialTextarea: }); } -let reactionPicker = null; -export async function pickReaction(src: HTMLElement, chosen, closed) { - if (reactionPicker) { - reactionPicker.src.value = src; - reactionPicker.manualShowing.value = true; - reactionPicker.chosen = chosen; - reactionPicker.closed = closed; - } else { - reactionPicker = { - src: ref(src), - manualShowing: ref(true), - chosen, closed - }; - popup(import('@/components/emoji-picker-dialog.vue'), { - src: reactionPicker.src, - asReactionPicker: true, - manualShowing: reactionPicker.manualShowing - }, { - done: reaction => { - reactionPicker.chosen(reaction); - }, - close: () => { - reactionPicker.manualShowing.value = false; - }, - closed: () => { - reactionPicker.src.value = null; - reactionPicker.closed(); - } - }); - } -} - export function modalMenu(items: any[], src?: HTMLElement, options?: { align?: string; viaKeyboard?: boolean }) { return new Promise((resolve, reject) => { let dispose; diff --git a/src/client/pages/about-misskey.vue b/src/client/pages/about-misskey.vue index 7022a924b0..a52678e3cd 100644 --- a/src/client/pages/about-misskey.vue +++ b/src/client/pages/about-misskey.vue @@ -4,7 +4,7 @@ <div id="debug"></div> <section class="_formItem about"> <div class="_formPanel panel" :class="{ playing: easterEggEngine != null }" ref="about"> - <img src="/assets/about-icon.png" alt="" class="icon" ref="icon" @load="iconLoaded" draggable="false"/> + <img src="/static-assets/client/about-icon.png" alt="" class="icon" ref="icon" @load="iconLoaded" draggable="false"/> <div class="misskey">Misskey</div> <div class="version">v{{ version }}</div> <span class="emoji" v-for="emoji in easterEggEmojis" :key="emoji.id" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :custom-emojis="$instance.emojis" :is-reaction="false" :normal="true" :no-style="true"/></span> diff --git a/src/client/pages/explore.vue b/src/client/pages/explore.vue index 3ab7dda242..b78a3707ef 100644 --- a/src/client/pages/explore.vue +++ b/src/client/pages/explore.vue @@ -30,7 +30,7 @@ </template> </div> <div class="_section"> - <div class="localfedi7 _panel _vMargin" v-if="tag == null" :style="{ backgroundImage: `url(/assets/fedi.jpg)` }"> + <div class="localfedi7 _panel _vMargin" v-if="tag == null" :style="{ backgroundImage: `url(/static-assets/client/fedi.jpg)` }"> <header><span>{{ $ts.exploreFediverse }}</span></header> </div> diff --git a/src/client/pages/messaging/index.vue b/src/client/pages/messaging/index.vue index aefc31f3bc..afb240c051 100644 --- a/src/client/pages/messaging/index.vue +++ b/src/client/pages/messaging/index.vue @@ -200,7 +200,7 @@ export default defineComponent({ &:not(.isMe):not(.isRead) { > div { - background-image: url("/assets/unread.svg"); + background-image: url("/static-assets/client/unread.svg"); background-repeat: no-repeat; background-position: 0 center; } diff --git a/src/client/pages/messaging/messaging-room.message.vue b/src/client/pages/messaging/messaging-room.message.vue index d379c0c3c0..6d4ed96044 100644 --- a/src/client/pages/messaging/messaging-room.message.vue +++ b/src/client/pages/messaging/messaging-room.message.vue @@ -4,7 +4,7 @@ <div class="content"> <div class="balloon" :class="{ noText: message.text == null }" > <button class="delete-button" v-if="isMe" :title="$ts.delete" @click="del"> - <img src="/assets/remove.png" alt="Delete"/> + <img src="/static-assets/client/remove.png" alt="Delete"/> </button> <div class="content" v-if="!message.isDeleted"> <Mfm class="text" v-if="message.text" ref="text" :text="message.text" :i="$i"/> diff --git a/src/client/pages/settings/theme.manage.vue b/src/client/pages/settings/theme.manage.vue index 5b9e075305..f08c354718 100644 --- a/src/client/pages/settings/theme.manage.vue +++ b/src/client/pages/settings/theme.manage.vue @@ -93,6 +93,8 @@ export default defineComponent({ uninstall() { removeTheme(this.selectedTheme); + this.selectedThemeId = null; + os.success(); }, } }); diff --git a/src/client/pages/v.vue b/src/client/pages/v.vue index 021f8908fb..f456a29993 100644 --- a/src/client/pages/v.vue +++ b/src/client/pages/v.vue @@ -2,7 +2,7 @@ <div> <section class="_section"> <div class="_content" style="text-align: center;"> - <img src="/assets/icons/512.png" alt="" style="display: block; width: 100px; margin: 0 auto; border-radius: 16px;"/> + <img src="/static-assets/icons/512.png" alt="" style="display: block; width: 100px; margin: 0 auto; border-radius: 16px;"/> <div style="margin-top: 0.75em;">Misskey</div> <div style="opacity: 0.5;">v{{ version }}</div> </div> diff --git a/src/client/pages/welcome.entrance.a.vue b/src/client/pages/welcome.entrance.a.vue index 4d356774eb..fa69c1a124 100644 --- a/src/client/pages/welcome.entrance.a.vue +++ b/src/client/pages/welcome.entrance.a.vue @@ -3,8 +3,9 @@ <div class="top"> <MkFeaturedPhotos class="bg"/> <XTimeline class="tl"/> - <div class="shape"></div> - <img src="/assets/misskey.svg" class="misskey"/> + <div class="shape1"></div> + <div class="shape2"></div> + <img src="/static-assets/client/misskey.svg" class="misskey"/> <div class="emojis"> <MkEmoji :normal="true" :no-style="true" emoji="👍"/> <MkEmoji :normal="true" :no-style="true" emoji="❤"/> @@ -18,7 +19,9 @@ </div> <div class="fg"> <h1> - <img class="logo" v-if="meta.logoImageUrl" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span> + <!-- 背景色によってはロゴが見えなくなるのでとりあえず無効に --> + <!-- <img class="logo" v-if="meta.logoImageUrl" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span> --> + <span class="text">{{ instanceName }}</span> </h1> <div class="about"> <div class="desc" v-html="meta.description || $ts.headlineMisskey"></div> @@ -154,8 +157,8 @@ export default defineComponent({ > .bg { position: absolute; top: 0; - left: 0; - width: 100%; + right: 0; + width: 80%; // 100%からshapeの幅を引いている height: 100%; } @@ -176,14 +179,24 @@ export default defineComponent({ } } - > .shape { + > .shape1 { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--accent); - clip-path: polygon(0% 0%, 50% 0%, 15% 100%, 0% 100%); + clip-path: polygon(0% 0%, 45% 0%, 20% 100%, 0% 100%); + } + > .shape2 { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: var(--accent); + clip-path: polygon(0% 0%, 25% 0%, 35% 100%, 0% 100%); + opacity: 0.5; } > .misskey { diff --git a/src/client/pages/welcome.entrance.b.vue b/src/client/pages/welcome.entrance.b.vue index 8a6f60e726..203618f17e 100644 --- a/src/client/pages/welcome.entrance.b.vue +++ b/src/client/pages/welcome.entrance.b.vue @@ -29,7 +29,7 @@ </I18n> </div> </div> - <img src="/assets/misskey.svg" class="misskey"/> + <img src="/static-assets/client/misskey.svg" class="misskey"/> </div> </div> </template> diff --git a/src/client/pages/welcome.entrance.c.vue b/src/client/pages/welcome.entrance.c.vue index e9df492cb6..4c98baf8ea 100644 --- a/src/client/pages/welcome.entrance.c.vue +++ b/src/client/pages/welcome.entrance.c.vue @@ -11,7 +11,7 @@ <MkEmoji :normal="true" :no-style="true" emoji="🍮"/> </div> <div class="main"> - <img src="/assets/misskey.svg" class="misskey"/> + <img src="/static-assets/client/misskey.svg" class="misskey"/> <div class="form _panel"> <div class="bg"> <div class="fade"></div> diff --git a/src/client/scripts/reaction-picker.ts b/src/client/scripts/reaction-picker.ts new file mode 100644 index 0000000000..e923326ece --- /dev/null +++ b/src/client/scripts/reaction-picker.ts @@ -0,0 +1,41 @@ +import { Ref, ref } from 'vue'; +import { popup } from '@/os'; + +class ReactionPicker { + private src: Ref<HTMLElement | null> = ref(null); + private manualShowing = ref(false); + private onChosen?: Function; + private onClosed?: Function; + + constructor() { + // nop + } + + public async init() { + await popup(import('@/components/emoji-picker-dialog.vue'), { + src: this.src, + asReactionPicker: true, + manualShowing: this.manualShowing + }, { + done: reaction => { + this.onChosen!(reaction); + }, + close: () => { + this.manualShowing.value = false; + }, + closed: () => { + this.src.value = null; + this.onClosed!(); + } + }); + } + + public show(src: HTMLElement, onChosen: Function, onClosed: Function) { + this.src.value = src; + this.manualShowing.value = true; + this.onChosen = onChosen; + this.onClosed = onClosed; + } +} + +export const reactionPicker = new ReactionPicker(); diff --git a/src/client/scripts/room/room.ts b/src/client/scripts/room/room.ts index 45ccd59b70..4450210c6c 100644 --- a/src/client/scripts/room/room.ts +++ b/src/client/scripts/room/room.ts @@ -340,7 +340,7 @@ export class Room { @autobind private loadRoom() { const type = this.roomInfo.roomType; - new GLTFLoader().load(`/assets/room/rooms/${type}/${type}.glb`, gltf => { + new GLTFLoader().load(`/static-assets/client/room/rooms/${type}/${type}.glb`, gltf => { gltf.scene.traverse(child => { if (!(child instanceof THREE.Mesh)) return; @@ -375,7 +375,7 @@ export class Room { const def = furnitureDefs.find(d => d.id === furniture.type); return new Promise<GLTF>((res, rej) => { const loader = new GLTFLoader(); - loader.load(`/assets/room/furnitures/${furniture.type}/${furniture.type}.glb`, gltf => { + loader.load(`/static-assets/client/room/furnitures/${furniture.type}/${furniture.type}.glb`, gltf => { const model = gltf.scene; // Load animation diff --git a/src/client/scripts/sound.ts b/src/client/scripts/sound.ts index 176d2b68bf..9b7061d5fc 100644 --- a/src/client/scripts/sound.ts +++ b/src/client/scripts/sound.ts @@ -16,7 +16,7 @@ export function playFile(file: string, volume: number) { if (cache.has(file)) { audio = cache.get(file); } else { - audio = new Audio(`/assets/sounds/${file}.mp3`); + audio = new Audio(`/static-assets/client/sounds/${file}.mp3`); cache.set(file, audio); } audio.volume = masterVolume - ((1 - volume) * masterVolume); diff --git a/src/client/store.ts b/src/client/store.ts index 528e563fdd..14924dadd0 100644 --- a/src/client/store.ts +++ b/src/client/store.ts @@ -213,6 +213,8 @@ type Plugin = { export class ColdDeviceStorage { public static default = { themes: [] as Theme[], // TODO: そのうち消す + // TODO: テーマをアカウントに保存するようになったのにもかかわらず、以下のどのテーマを使うかという情報だけがブラウザ保存になっていて、アカウント切り替えたりログアウトしたときに不具合が発生するのでなんとかする + // テーマIDを保存するのではなく、テーマ自体を保存するようにすれば解決するかも darkTheme: '8050783a-7f63-445a-b270-36d0f6ba1677', lightTheme: '4eea646f-7afa-4645-83e9-83af0333cd37', syncDeviceDarkMode: true, diff --git a/src/client/ui/chat/note.vue b/src/client/ui/chat/note.vue index bd7bbc5a4f..5a4a13d889 100644 --- a/src/client/ui/chat/note.vue +++ b/src/client/ui/chat/note.vue @@ -121,6 +121,7 @@ import { checkWordMute } from '@/scripts/check-word-mute'; import { userPage } from '@/filters/user'; import * as os from '@/os'; import { noteActions, noteViewInterruptors } from '@/store'; +import { reactionPicker } from '@/scripts/reaction-picker'; function markRawAll(...xs) { for (const x of xs) { @@ -504,7 +505,7 @@ export default defineComponent({ pleaseLogin(); this.operating = true; this.blur(); - os.pickReaction(this.$refs.reactButton, reaction => { + reactionPicker.show(this.$refs.reactButton, reaction => { os.api('notes/reactions/create', { noteId: this.appearNote.id, reaction: reaction diff --git a/src/docs/fr-FR/aiscript.md b/src/docs/fr-FR/aiscript.md index 8e3843ce88..8ca752e254 100644 --- a/src/docs/fr-FR/aiscript.md +++ b/src/docs/fr-FR/aiscript.md @@ -1,4 +1,4 @@ # AiScript ## Fonction -Réglé sur « passage par copie » par défaut +Réglé sur « passage par valeur » par défaut. diff --git a/src/docs/fr-FR/custom-emoji.md b/src/docs/fr-FR/custom-emoji.md index 01840868eb..649da5d3a7 100644 --- a/src/docs/fr-FR/custom-emoji.md +++ b/src/docs/fr-FR/custom-emoji.md @@ -1,2 +1,2 @@ # Émojis personnalisés -カスタム絵文字は、インスタンスで用意された画像を絵文字のように使える機能です。 ノート、リアクション、チャット、自己紹介、名前などの場所で使うことができます。 カスタム絵文字をそれらの場所で使うには、絵文字ピッカーボタン(ある場合)を押すか、`:`を入力して絵文字サジェストを表示します。 テキスト内に`:foo:`のような形式の文字列が見つかると、`foo`の部分がカスタム絵文字名と解釈され、表示時には対応したカスタム絵文字に置き換わります。 +Les émojis personnalisés sont une fonctionnalité qui vous permet d'utiliser une sélection d'images disponibles sur votre instance comme des émojis. Vous pouvez les utiliser dans différents contextes : vos notes, vos réactions, vos discussions directes, votre présentation de profil, votre nom, etc. Lorsque vous voulez utiliser des émojis personnalisés, vous pouvez utiliser le sélecteur d'émojis (s'il est disponible), ou bien faire apparaître des suggestions d'émojis en tapant `:`. Ainsi, quand cette suite de caractères (au format `:foo:`) est détectée dans un texte, elle est interprétée comme un nom d'émoji personnalisé : les lettres contenues au centre de la suite `foo` provoquent alors l'affichage de la suggestion d'émoji personnalisé approprié. diff --git a/src/docs/fr-FR/deck.md b/src/docs/fr-FR/deck.md index 310463e00e..610cf967a3 100644 --- a/src/docs/fr-FR/deck.md +++ b/src/docs/fr-FR/deck.md @@ -1,15 +1,15 @@ # Deck -Le deck est une des interfaces utilisateurs disponibles.Sa particularité est de former une interface riche en contenus et hautement personnalisable grâce à l'affichage de plusieurs colonnes. +Le deck est l'une des interfaces utilisateur disponibles.Sa particularité est de former une interface riche en contenus et hautement personnalisable grâce à l'affichage de plusieurs colonnes. ## Ajouter une colonne -Vous pouvez ajouter une colonne en cliquant avec le clic-droit sur « ajouter une colonne » dans l'arrière-plan du deck. +Vous pouvez ajouter une colonne en cliquant avec le clic-droit dans l'arrière-plan du deck puis sur « Ajouter une colonne » . ## Déplacer une colonne Vous pouvez déplacer une colonne à la place d'une autre en la faisant glisser. Il est en outre possible de réorganiser les colonnes depuis le menu des colonnes — en faisant un clic-droit dans l'en-tête de colonne. ## Division horizontale des colonnes -Il est possible d'agencer les colonnes horizontalement. Depuis le menu de colonne, cliquez sur « empiler à gauche » pour la déplacer sous la colonne de gauche. Cliquez sur « déplacer à droite » pour annuler. +Il est possible d'agencer les colonnes horizontalement. Depuis le menu de la colonne que vous voulez déplacer, cliquez sur « Empiler à gauche » pour la déplacer sous la colonne de gauche. Cliquez sur « Déplacer à droite » pour annuler. ## Configuration de la colonne Vous pouvez éditer la configuration de la colonne en cliquant sur « édition » dans le menu de colonne. Vous pourrez y changer le nom ou la largeur de la colonne. diff --git a/src/docs/fr-FR/follow.md b/src/docs/fr-FR/follow.md index 0b0766e1be..5ef74c0903 100644 --- a/src/docs/fr-FR/follow.md +++ b/src/docs/fr-FR/follow.md @@ -1,2 +1,2 @@ # Abonnements -Lorsque vous suivez un utilisateur, les publication de celui-ci apparaissent dans votre fil. Cela n'inclut toutefois pas ses réponses aux autres utilisateurs. Cliquez une nouvelle fois pour vous désabonner. +Lorsque vous suivez un·e utilisateur·rice, ses publications apparaissent dans votre fil.Cela n'inclut toutefois pas ses réponses aux autres utilisateur·ice·s. Vous pouvez vous désabonner du compte en cliquant une seconde fois. diff --git a/src/docs/fr-FR/mute.md b/src/docs/fr-FR/mute.md index 1374abb08e..7760caa430 100644 --- a/src/docs/fr-FR/mute.md +++ b/src/docs/fr-FR/mute.md @@ -1,13 +1,13 @@ -# Ignorer +# Masquer -Le contenu afférent à un utilisateur ne vous sera plus présenté dès lors que vous l'ignorez : +Le contenu afférent à un utilisateur ne vous sera plus présenté dès lors que vous le masquez : -* les publications de cet utilisateur dans le fil ou les résultats de recherche, de même que ses réponses et Renotes ; -* les notifications touchant à cet utilisateur ; -* l'historique des messages avec cet utilisateur. +* les publications de cet·te utilisateur·ice dans le fil ou les résultats de recherche, de même que ses réponses et Renotes ; +* les notifications touchant à cet·te utilisateur·ice ; +* l'historique des messages avec cet·te utilisateur·ice. -Pour ignorer un utilisateur, utilisez le bouton « ignorer » de sa page de profil. +Pour masquer un·e utilisateur·ice, utilisez le bouton « Masquer » de sa page de profil. -L'utilisateur que vous ignorez ne sera pas prévenu. De même, vous ne serez pas prévenu lorsque vous serez ignoré par un autre utilisateur. +L'utilisateur·rice que vous ignorez ne sera pas prévenu·e. De même, vous ne serez pas prévenu·e lorsque vous serez ignoré·e par un·e autre utilisateur·rice. -Vous pouvez vérifier la liste des utilisateurs ignorés depuis l'onglet « ignorés » de vos paramètres. +Vous pouvez vérifier la liste des utilisateur·rice·s masqué·e·s depuis l'onglet « Masqués » de vos paramètres. diff --git a/src/docs/fr-FR/pages.md b/src/docs/fr-FR/pages.md index 7fc6ee29c3..9021d41b1c 100644 --- a/src/docs/fr-FR/pages.md +++ b/src/docs/fr-FR/pages.md @@ -1,10 +1,10 @@ # Pages ## Variables -変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。 +Vous pouvez créer des pages dynamiques en utilisant des variables.Vous pouvez incorporer la valeur d'une variable en insérant le <b>{ variablename }</b> dans votre texte.Par exemple, si la valeur de la variable "thing" dans le texte <b>Hello { thing } world!</b> est <b>ai</b>, votre trexte devient alors : <b>Hello ai world!</b>. -変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。 +Les variables sont évaluées du haut vers le bas, il n'est donc pas possible de référencer une variable située plus bas que celle en cours.Par exemple, si vous définissez, dans l'ordre, 3 variables telles que <b>A、B、C</b>, vous pourrez référencer en <b>C</b> aussi bien <b>A</b> que <b>B</b> ; par contre, vous ne pourrez référencer en <b>A</b> ni <b>B</b> ni <b>C</b>. -ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。 +Pour recevoir une entrée utilisateur, ajoutez un bloc "Entrée" sur la page et définissez le nom des variables que vous souhaitez stocker dans le champ "Nom de la variable" (les variables seront créées automatiquement).Vous pourrez alors exécuter les actions en fonction de l'entrée utilisateur de ces variables. -関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。 +Utiliser des fonctions vous permettra de mettre en place une façon de calculer des valeurs que vous pourrez réutiliser.Pour créer des fonctions, il faut d'abord définir une variable du type "fonction".Ensuite, vous pouvez configurer des arguments dont la valeur sera utilisable comme une variable à l'intérieur de la fonction. Par ailleurs, il existe ce que l'on appelle des "fonctions d'ordre supérieur" dont les arguments sont aussi des fonctions. En plus de paramétrer des fonctions à l'avance, vous avez également la possibilité de définir des fonctions à l'improviste directement dans les arguments de ces "fonctions d'ordre supérieur". diff --git a/src/docs/fr-FR/reaction.md b/src/docs/fr-FR/reaction.md index ee98405607..164a257d45 100644 --- a/src/docs/fr-FR/reaction.md +++ b/src/docs/fr-FR/reaction.md @@ -1,11 +1,11 @@ # Réactions -Les réactions vous permettent d'interagir facilement avec les notes des autres utilisateurs en y attribuant des émoticônes. Pour réagir, cliquez sur le « + » de la note afin d'afficher le panneau de sélection puis choisissez une émoticône. Il est également possible d'utiliser des [émoticônes personnalisées](./custom-emoji). +Les réactions vous permettent d'interagir facilement avec les notes des autres utilisateur·rice·s en y attribuant des émojis. Pour réagir, cliquez sur le « + » de la note afin d'afficher le panneau de sélection puis choisissez un émoji. Il est également possible d'utiliser des [émojis personnalisés](./custom-emoji). ## Personnalisation du panneau de réactions -Il est possible de choisir les émoticônes affichés dans le panneau de réactions dans l'onglet « réactions » des paramètres. +Il est possible de choisir les émojis affichés dans le panneau de réactions en allant dans l'onglet « réactions » des paramètres. -## リモート投稿へのリアクションについて -リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。 また、相手がMisskeyであったとしても、カスタム絵文字リアクションは伝わらず、自動的に「👍」等にフォールバックされます。 +## Envoi de réactions à des serveurs distants +Les réactions étant une fonctionnalité originale de Misskey, la plupart des autres instances du Fediverse recevront votre réaction comme un simple "J'aime" - à moins qu'il s'agisse d'une autre instance Misskey.Généralement dans le Fediverse, les " J'aime " sont appelés " Favoris ". En outre, si vous réagissez avec un émoji personnalisé, même si l'instance destinataire est une instance Misskey, il sera automatiquement transmis comme un " 👍 " ou assimilé. -## リモートからのリアクションについて -リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。 +## Réception de réactions de la part de serveurs distants +Les " J'aime " que vous recevez de la part d'utilisateur·ice·s d'autres instances apparaissent sur Misskey sous la forme de " 👍 ". diff --git a/src/docs/fr-FR/theme.md b/src/docs/fr-FR/theme.md index 4fd1c211c7..72c60f1c6b 100644 --- a/src/docs/fr-FR/theme.md +++ b/src/docs/fr-FR/theme.md @@ -6,7 +6,7 @@ Vous pouvez modifier l'apparence de votre client Misskey à l'aide de thèmes. Paramètres > Thèmes ## Créer un thème -テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。 +Les codes des thèmes sont écrits sous forme d'objets JSON5. Les thèmes comprennent les objets suivants : ``` js { id: '17587283-dd92-4a2c-a22c-be0637c9e22a', @@ -40,29 +40,29 @@ Paramètres > Thèmes * `base` ... Thème clair ou sombre : * Sélectionnez `light` pour définir le thème comme thème clair et `dark` pour le définir comme sombre, * Le thème héritera des valeurs par défaut du thème spécifié ici ; -* `props` ... テーマのスタイル定義。これから説明します。 +* `props` ... Définir un style de thème.Voir les explications ci-après. -### テーマのスタイル定義 -`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。 +### Définir un style de thème +C'est dans `props` que vous définirez le style de thème. Les propriétés deviendront des variables CSS et les valeurs spécifieront le contenu. Par ailleurs, les objets présents par défaut dans `props` sont hérités du thème de base. Ainsi, si le thème de `base` est clair `light` ce sera l'objet [_light.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_light.json5) ; et s'il est sombre `dark` ce sera l'objet [_dark.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_dark.json5). Cela signifie, par exemple, que s'il n'y pas de propriété `panel` définie dans les `props` du thème, alors ce sera la valeur `panel` du thème de base qui sera prise en compte. -#### バリューで使える構文 -* 16進数で表された色 - * 例: `#00ff00` -* `rgb(r, g, b)`形式で表された色 - * 例: `rgb(0, 255, 0)` -* `rgb(r, g, b, a)`形式で表された透明度を含む色 - * 例: `rgba(0, 255, 0, 0.5)` -* 他のキーの値の参照 - * `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。 - * 例: `@panel` -* 定数(後述)の参照 - * `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。 - * 例: `$main` -* 関数(後述) - * `:{関数名}<{引数}<{色}` +#### Syntaxe des valeurs +* Codes de couleur Hex + * Ex. : `#00ff00` +* Couleurs avec les valeurs RVB : `rgb(r, g, b)` + * Ex. : `rgb(0, 255, 0)` +* Couleurs avec les valeurs RVBA : `rgba(r, g, b, a)` + * Ex. : `rgba(0, 255, 0, 0.5)` +* Faire référence aux valeurs d'autres propriétés + * Entrer `@{keyname}` pour utiliser la valeur de la propriété citée. Remplacer alors `{keyname}` par le nom de la propriété que vous souhaitez citer. + * Ex. : `@panel` +* Constantes (voir ci-dessous) + * Entrer `${constantname}` pour utiliser la valeur de la constante citée.Remplacer alors `{constantname}` par la nom de la constante que vous souhaitez citer. + * Ex. : `$main` +* Fonctions (voir ci-dessous) + * `:{functionname}<{argument}<{color}` -#### Constante -「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。 +#### Constantes +Dans le cas où vous ne souhaiteriez pas qu'une valeur génère une variable CSS mais que vous voudriez l'utiliser comme valeur pour une autre variable CSS, vous avez la possibilité d'utiliser une constante. Il suffit de faire précéder le nom de la propriété de : `$` pour que celle-ci ne génère pas de variable CSS. -#### Fonction +#### Fonctions wip diff --git a/src/docs/ko-KR/keyboard-shortcut.md b/src/docs/ko-KR/keyboard-shortcut.md index 074431e1e1..7aaab0660b 100644 --- a/src/docs/ko-KR/keyboard-shortcut.md +++ b/src/docs/ko-KR/keyboard-shortcut.md @@ -4,14 +4,14 @@ これらのショートカットは基本的にどこでも使えます。 <table> <thead> - <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr> + <tr><th>단축키</th><th>効果</th><th>由来</th></tr> </thead> <tbody> <tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr> <tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr> <tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr> <tr><td><kbd class="key">S</kbd></td><td>검색</td><td><b>S</b>earch</td></tr> - <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr> + <tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>도움말 표시</td><td><b>H</b>elp</td></tr> </tbody> </table> @@ -19,7 +19,7 @@ <table> <thead> - <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr> + <tr><th>단축키</th><th>効果</th><th>由来</th></tr> </thead> <tbody> <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr> @@ -41,7 +41,7 @@ <table> <thead> - <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr> + <tr><th>단축키</th><th>効果</th><th>由来</th></tr> </thead> <tbody> <tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr> @@ -54,7 +54,7 @@ デフォルトで「👍」にフォーカスが当たっている状態です。 <table> <thead> - <tr><th>ショートカット</th><th>効果</th><th>由来</th></tr> + <tr><th>단축키</th><th>効果</th><th>由来</th></tr> </thead> <tbody> <tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr> diff --git a/src/docs/ko-KR/mfm.md b/src/docs/ko-KR/mfm.md index e237287acc..854de1ba90 100644 --- a/src/docs/ko-KR/mfm.md +++ b/src/docs/ko-KR/mfm.md @@ -1,2 +1,2 @@ # MFM -MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。 +MFM은 Misskey Flavored Markdown의 약자로, Misskey의 다양한 장소에서 사용할 수 있는 전용 마크업 언어입니다. MFM로 사용 가능한 구문은 [MFM 치트 시트 ](/mfm-cheat-sheet)에서 확인할 수 있습니다. diff --git a/src/models/repositories/antenna.ts b/src/models/repositories/antenna.ts index b20da26c5d..0f0a5c0171 100644 --- a/src/models/repositories/antenna.ts +++ b/src/models/repositories/antenna.ts @@ -41,20 +41,78 @@ export const packedAntennaSchema = { id: { type: 'string' as const, optional: false as const, nullable: false as const, - format: 'id', - description: 'The unique identifier for this Antenna.', - example: 'xxxxxxxxxx', + format: 'id' }, createdAt: { type: 'string' as const, optional: false as const, nullable: false as const, - format: 'date-time', - description: 'The date that the Antenna was created.' + format: 'date-time' }, name: { type: 'string' as const, - optional: false as const, nullable: false as const, - description: 'The name of the Antenna.' + optional: false as const, nullable: false as const }, + keywords: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + execludeKeywords: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + src: { + type: 'string' as const, + optional: false as const, nullable: false as const, + enum: ['home', 'all', 'users', 'list', 'group'] + }, + userListId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id' + }, + userGroupId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id' + }, + users: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + caseSensitive: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + }, + notify: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + withReplies: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + }, + withFile: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hasUnreadNote: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + } }, }; diff --git a/src/models/repositories/app.ts b/src/models/repositories/app.ts index f5cc10787a..33e0f41156 100644 --- a/src/models/repositories/app.ts +++ b/src/models/repositories/app.ts @@ -46,33 +46,35 @@ export const packedAppSchema = { properties: { id: { type: 'string' as const, - optional: false as const, nullable: false as const, - format: 'id', - description: 'The unique identifier for this Note.', - example: 'xxxxxxxxxx', + optional: false as const, nullable: false as const }, name: { type: 'string' as const, - optional: false as const, nullable: false as const, - description: 'アプリケーションの名前' + optional: false as const, nullable: false as const }, - callbackUrl: { + createdAt: { type: 'string' as const, - optional: false as const, nullable: true as const, - description: 'コールバックするURL' + optional: false as const, nullable: false as const + }, + lastUsedAt: { + type: 'string' as const, + optional: false as const, nullable: false as const }, permission: { type: 'array' as const, - optional: true as const, nullable: false as const, + optional: false as const, nullable: false as const, items: { type: 'string' as const, - optional: false as const, nullable: false as const, + optional: false as const, nullable: false as const } }, secret: { type: 'string' as const, - optional: true as const, nullable: false as const, - description: 'アプリケーションのシークレットキー' + optional: true as const, nullable: false as const + }, + isAuthorized: { + type: 'boolean' as const, + optional: true as const, nullable: false as const } - }, + } }; diff --git a/src/models/repositories/drive-file.ts b/src/models/repositories/drive-file.ts index 3d013b8bb2..5085c76e92 100644 --- a/src/models/repositories/drive-file.ts +++ b/src/models/repositories/drive-file.ts @@ -182,12 +182,52 @@ export const packedDriveFileSchema = { description: 'The size of this Drive file. (bytes)', example: 51469 }, + isSensitive: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + description: 'Whether this Drive file is sensitive.', + }, + blurhash: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + properties: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + width: { + type: 'number' as const, + optional: false as const, nullable: false as const, + example: 1280 + }, + height: { + type: 'number' as const, + optional: false as const, nullable: false as const, + example: 720 + }, + avgColor: { + type: 'string' as const, + optional: true as const, nullable: false as const, + example: 'rgb(40,65,87)' + } + } + }, url: { type: 'string' as const, optional: false as const, nullable: true as const, format: 'url', description: 'The URL of this Drive file.', }, + thumbnailUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'url', + description: 'The thumbnail URL of this Drive file.', + }, + comment: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, folderId: { type: 'string' as const, optional: false as const, nullable: true as const, @@ -195,10 +235,24 @@ export const packedDriveFileSchema = { description: 'The parent folder ID of this Drive file.', example: 'xxxxxxxxxx', }, - isSensitive: { - type: 'boolean' as const, - optional: false as const, nullable: false as const, - description: 'Whether this Drive file is sensitive.', + folder: { + type: 'object' as const, + optional: true as const, nullable: true as const, + description: 'The parent folder of this Drive file.', + ref: 'DriveFolder' }, + userId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id', + description: 'Owner ID of this Drive file.', + example: 'xxxxxxxxxx', + }, + user: { + type: 'object' as const, + optional: true as const, nullable: true as const, + description: 'Owner of this Drive file.', + ref: 'User' + } }, }; diff --git a/src/models/repositories/federation-instance.ts b/src/models/repositories/federation-instance.ts new file mode 100644 index 0000000000..c6b08dc101 --- /dev/null +++ b/src/models/repositories/federation-instance.ts @@ -0,0 +1,106 @@ +import config from '../../config'; + +export const packedFederationInstanceSchema = { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + caughtAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + host: { + type: 'string' as const, + optional: false as const, nullable: false as const, + example: 'misskey.example.com' + }, + usersCount: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + notesCount: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + followingCount: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + followersCount: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + driveUsage: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + driveFiles: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + latestRequestSentAt: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'date-time' + }, + lastCommunicatedAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + isNotResponding: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isSuspended: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + softwareName: { + type: 'string' as const, + optional: false as const, nullable: true as const, + example: 'misskey' + }, + softwareVersion: { + type: 'string' as const, + optional: false as const, nullable: true as const, + example: config.version + }, + openRegistrations: { + type: 'boolean' as const, + optional: false as const, nullable: true as const, + example: true + }, + name: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + description: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + maintainerName: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + maintainerEmail: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + iconUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'url' + }, + infoUpdatedAt: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'date-time' + } + } +}; diff --git a/src/models/repositories/queue.ts b/src/models/repositories/queue.ts new file mode 100644 index 0000000000..161751ddc8 --- /dev/null +++ b/src/models/repositories/queue.ts @@ -0,0 +1,30 @@ +export const packedQueueCountSchema = { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + waiting: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + active: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + completed: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + failed: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + delayed: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + paused: { + type: 'number' as const, + optional: false as const, nullable: false as const + } + } +}; diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index 7502e7a08e..3a6ab48c5f 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -330,22 +330,22 @@ export const packedUserSchema = { description: 'The unique identifier for this User.', example: 'xxxxxxxxxx', }, - username: { - type: 'string' as const, - nullable: false as const, optional: false as const, - description: 'The screen name, handle, or alias that this user identifies themselves with.', - example: 'ai' - }, name: { type: 'string' as const, nullable: true as const, optional: false as const, description: 'The name of the user, as they’ve defined it.', example: '藍' }, - url: { + username: { type: 'string' as const, - format: 'url', - nullable: true as const, optional: true as const, + nullable: false as const, optional: false as const, + description: 'The screen name, handle, or alias that this user identifies themselves with.', + example: 'ai' + }, + host: { + type: 'string' as const, + nullable: true as const, optional: false as const, + example: 'misskey.example.com' }, avatarUrl: { type: 'string' as const, @@ -356,35 +356,69 @@ export const packedUserSchema = { type: 'any' as const, nullable: true as const, optional: false as const, }, - bannerUrl: { + avatarColor: { + type: 'any' as const, + nullable: true as const, optional: false as const, + default: null + }, + isAdmin: { + type: 'boolean' as const, + nullable: false as const, optional: false as const, + description: 'Whether this account is the admin.', + default: false + }, + isModerator: { + type: 'boolean' as const, + nullable: false as const, optional: false as const, + description: 'Whether this account is a moderator.', + default: false + }, + isBot: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + description: 'Whether this account is a bot.' + }, + isCat: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + description: 'Whether this account is a cat.' + }, + emojis: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'object' as const, + nullable: false as const, optional: false as const, + properties: { + name: { + type: 'string' as const, + nullable: false as const, optional: false as const + }, + host: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + url: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'url' + }, + aliases: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'string' as const, + nullable: false as const, optional: false as const + } + } + } + } + }, + url: { type: 'string' as const, format: 'url', nullable: true as const, optional: true as const, }, - bannerBlurhash: { - type: 'any' as const, - nullable: true as const, optional: true as const, - }, - emojis: { - type: 'any' as const, - nullable: true as const, optional: false as const, - }, - host: { - type: 'string' as const, - nullable: true as const, optional: false as const, - example: 'misskey.example.com' - }, - description: { - type: 'string' as const, - nullable: true as const, optional: true as const, - description: 'The user-defined UTF-8 string describing their account.', - example: 'Hi masters, I am Ai!' - }, - birthday: { - type: 'string' as const, - nullable: true as const, optional: true as const, - example: '2018-03-12' - }, createdAt: { type: 'string' as const, nullable: false as const, optional: true as const, @@ -396,10 +430,63 @@ export const packedUserSchema = { nullable: true as const, optional: true as const, format: 'date-time', }, + bannerUrl: { + type: 'string' as const, + format: 'url', + nullable: true as const, optional: true as const, + }, + bannerBlurhash: { + type: 'any' as const, + nullable: true as const, optional: true as const, + }, + bannerColor: { + type: 'any' as const, + nullable: true as const, optional: true as const, + default: null + }, + isLocked: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + isSuspended: { + type: 'boolean' as const, + nullable: false as const, optional: false as const, + example: false + }, + description: { + type: 'string' as const, + nullable: true as const, optional: true as const, + description: 'The user-defined UTF-8 string describing their account.', + example: 'Hi masters, I am Ai!' + }, location: { type: 'string' as const, nullable: true as const, optional: true as const, }, + birthday: { + type: 'string' as const, + nullable: true as const, optional: true as const, + example: '2018-03-12' + }, + fields: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'object' as const, + nullable: false as const, optional: false as const, + properties: { + name: { + type: 'string' as const, + nullable: false as const, optional: false as const + }, + value: { + type: 'string' as const, + nullable: false as const, optional: false as const + } + }, + maxLength: 4 + } + }, followersCount: { type: 'number' as const, nullable: false as const, optional: true as const, @@ -415,11 +502,6 @@ export const packedUserSchema = { nullable: false as const, optional: true as const, description: 'The number of Notes (including renotes) issued by the user.' }, - isBot: { - type: 'boolean' as const, - nullable: false as const, optional: true as const, - description: 'Whether this account is a bot.' - }, pinnedNoteIds: { type: 'array' as const, nullable: false as const, optional: true as const, @@ -438,24 +520,59 @@ export const packedUserSchema = { ref: 'Note' } }, - isCat: { - type: 'boolean' as const, - nullable: false as const, optional: true as const, - description: 'Whether this account is a cat.' + pinnedPageId: { + type: 'string' as const, + nullable: true as const, optional: false as const }, - isAdmin: { - type: 'boolean' as const, - nullable: false as const, optional: true as const, - description: 'Whether this account is the admin.' + pinnedPage: { + type: 'object' as const, + nullable: true as const, optional: false as const, + ref: 'Page' }, - isModerator: { + twoFactorEnabled: { type: 'boolean' as const, - nullable: false as const, optional: true as const, - description: 'Whether this account is a moderator.' + nullable: false as const, optional: false as const, + default: false }, - isLocked: { + usePasswordLessLogin: { type: 'boolean' as const, - nullable: false as const, optional: true as const, + nullable: false as const, optional: false as const, + default: false + }, + securityKeys: { + type: 'boolean' as const, + nullable: false as const, optional: false as const, + default: false + }, + avatarId: { + type: 'string' as const, + nullable: true as const, optional: true as const, + format: 'id' + }, + bannerId: { + type: 'string' as const, + nullable: true as const, optional: true as const, + format: 'id' + }, + autoWatch: { + type: 'boolean' as const, + nullable: false as const, optional: true as const + }, + injectFeaturedNote: { + type: 'boolean' as const, + nullable: false as const, optional: true as const + }, + alwaysMarkNsfw: { + type: 'boolean' as const, + nullable: false as const, optional: true as const + }, + carefulBot: { + type: 'boolean' as const, + nullable: false as const, optional: true as const + }, + autoAcceptFollowed: { + type: 'boolean' as const, + nullable: false as const, optional: true as const }, hasUnreadSpecifiedNotes: { type: 'boolean' as const, @@ -465,5 +582,69 @@ export const packedUserSchema = { type: 'boolean' as const, nullable: false as const, optional: true as const, }, + hasUnreadAnnouncement: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + hasUnreadAntenna: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + hasUnreadChannel: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + hasUnreadMessagingMessage: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + hasUnreadNotification: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + hasPendingReceivedFollowRequest: { + type: 'boolean' as const, + nullable: false as const, optional: true as const, + }, + integrations: { + type: 'object' as const, + nullable: false as const, optional: true as const + }, + mutedWords: { + type: 'array' as const, + nullable: false as const, optional: true as const + }, + mutingNotificationTypes: { + type: 'array' as const, + nullable: false as const, optional: true as const + }, + isFollowing: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + hasPendingFollowRequestFromYou: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + hasPendingFollowRequestToYou: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + isFollowed: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + isBlocking: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + isBlocked: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + isMuted: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + } }, }; diff --git a/src/server/api/endpoints/admin/abuse-user-reports.ts b/src/server/api/endpoints/admin/abuse-user-reports.ts index 6a7f380e16..d63997d203 100644 --- a/src/server/api/endpoints/admin/abuse-user-reports.ts +++ b/src/server/api/endpoints/admin/abuse-user-reports.ts @@ -5,6 +5,11 @@ import { AbuseUserReports } from '../../../../models'; import { makePaginationQuery } from '../../common/make-pagination-query'; export const meta = { + desc: { + 'ja-JP': '通報一覧を表示します。', + 'en-US': 'Show list of abuse user reports.' + }, + tags: ['admin'], requireCredential: true as const, @@ -46,6 +51,74 @@ export const meta = { ]), default: 'combined' }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'id', + description: 'The unique identifier for this User.', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'date-time', + description: 'The date that the abuse user report was created on Misskey.' + }, + comment: { + type: 'string' as const, + nullable: false as const, optional: false as const, + description: 'The content of the report.', + }, + resolved: { + type: 'boolean' as const, + nullable: false as const, optional: false as const, + description: 'Returns whether this report has been resolved', + example: false + }, + reporterId: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'id', + description: 'Reporter\'s user ID.' + }, + targetUserId: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'id', + description: 'User ID of the person to be reported.' + }, + assigneeId: { + type: 'string' as const, + nullable: true as const, optional: false as const, + format: 'id', + description: 'User ID of the person who responded to the report.' + }, + reporter: { + type: 'object' as const, + nullable: false as const, optional: false as const, + ref: 'User' + }, + targetUser: { + type: 'object' as const, + nullable: false as const, optional: false as const, + ref: 'User' + }, + assignee: { + type: 'object' as const, + nullable: true as const, optional: true as const, + ref: 'User' + } + } + } } }; diff --git a/src/server/api/endpoints/admin/accounts/create.ts b/src/server/api/endpoints/admin/accounts/create.ts index 98e5642bed..27ceca158b 100644 --- a/src/server/api/endpoints/admin/accounts/create.ts +++ b/src/server/api/endpoints/admin/accounts/create.ts @@ -3,6 +3,11 @@ import { Users } from '../../../../../models'; import { signup } from '../../../common/signup'; export const meta = { + desc: { + 'ja-JP': 'アカウントを作成します。', + 'en-US': 'Create a account.' + }, + tags: ['admin'], params: { @@ -13,6 +18,19 @@ export const meta = { password: { validator: Users.validatePassword, } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User', + properties: { + token: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Token to access this user.' + } + } } }; diff --git a/src/server/api/endpoints/admin/announcements/create.ts b/src/server/api/endpoints/admin/announcements/create.ts index f9fb30f49f..dc01621c75 100644 --- a/src/server/api/endpoints/admin/announcements/create.ts +++ b/src/server/api/endpoints/admin/announcements/create.ts @@ -4,6 +4,11 @@ import { Announcements } from '../../../../../models'; import { genId } from '../../../../../misc/gen-id'; export const meta = { + desc: { + 'ja-JP': 'アナウンスを作成します。', + 'en-US': 'Create a announcement.' + }, + tags: ['admin'], requireCredential: true as const, @@ -19,6 +24,47 @@ export const meta = { imageUrl: { validator: $.nullable.str.min(1) } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this Announcement.', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time', + description: 'The date that the Announcement was created.' + }, + updatedAt: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'date-time', + description: 'The date that the Announcement was updated.' + }, + title: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Announcement title.' + }, + text: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Announcement text.' + }, + imageUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'Announcement image.' + } + } } }; diff --git a/src/server/api/endpoints/admin/announcements/delete.ts b/src/server/api/endpoints/admin/announcements/delete.ts index 1b7a0bf921..6c9c065757 100644 --- a/src/server/api/endpoints/admin/announcements/delete.ts +++ b/src/server/api/endpoints/admin/announcements/delete.ts @@ -10,6 +10,11 @@ export const meta = { requireCredential: true as const, requireModerator: true, + desc: { + 'ja-JP': 'アナウンスを削除します。', + 'en-US': 'Delete a announcement.' + }, + params: { id: { validator: $.type(ID) diff --git a/src/server/api/endpoints/admin/announcements/list.ts b/src/server/api/endpoints/admin/announcements/list.ts index 4c3af5a318..5489b0d2c7 100644 --- a/src/server/api/endpoints/admin/announcements/list.ts +++ b/src/server/api/endpoints/admin/announcements/list.ts @@ -5,6 +5,11 @@ import { Announcements, AnnouncementReads } from '../../../../../models'; import { makePaginationQuery } from '../../../common/make-pagination-query'; export const meta = { + desc: { + 'ja-JP': 'アナウンスのリストを表示します。', + 'en-US': 'List announcements.' + }, + tags: ['admin'], requireCredential: true as const, @@ -23,6 +28,56 @@ export const meta = { untilId: { validator: $.optional.type(ID), }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this Announcement.', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time', + description: 'The date that the Announcement was created.' + }, + updatedAt: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'date-time', + description: 'The date that the Announcement was updated.' + }, + text: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Announcement text.' + }, + title: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Announcement title.' + }, + imageUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'Announcement image.' + }, + reads: { + type: 'number' as const, + optional: false as const, nullable: false as const, + description: 'Number of people who read this announcement.' + } + } + } } }; diff --git a/src/server/api/endpoints/admin/announcements/update.ts b/src/server/api/endpoints/admin/announcements/update.ts index fd24f8cc8e..9c4165eae0 100644 --- a/src/server/api/endpoints/admin/announcements/update.ts +++ b/src/server/api/endpoints/admin/announcements/update.ts @@ -5,6 +5,11 @@ import { Announcements } from '../../../../../models'; import { ApiError } from '../../../error'; export const meta = { + desc: { + 'ja-JP': 'アナウンスの内容を変更します。', + 'en-US': 'Update a annoucement.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts b/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts index 83397f1079..9da3b632ac 100644 --- a/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts +++ b/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts @@ -5,6 +5,11 @@ import { DriveFiles } from '../../../../models'; import { ID } from '../../../../misc/cafy-id'; export const meta = { + desc: { + 'ja-JP': '対象のユーザーのファイルを全て削除します。', + 'en-US': 'Delete all files to specified user.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/delete-logs.ts b/src/server/api/endpoints/admin/delete-logs.ts index 9cb9f809d7..3719387312 100644 --- a/src/server/api/endpoints/admin/delete-logs.ts +++ b/src/server/api/endpoints/admin/delete-logs.ts @@ -2,6 +2,11 @@ import define from '../../define'; import { Logs } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': 'ログを全て削除します。', + 'en-US': 'Delete all logs.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/drive/clean-remote-files.ts b/src/server/api/endpoints/admin/drive/clean-remote-files.ts index 5a5adb8a8b..20856da1cf 100644 --- a/src/server/api/endpoints/admin/drive/clean-remote-files.ts +++ b/src/server/api/endpoints/admin/drive/clean-remote-files.ts @@ -2,6 +2,11 @@ import define from '../../../define'; import { createCleanRemoteFilesJob } from '../../../../../queue'; export const meta = { + desc: { + 'ja-JP': 'キャッシュされたリモートファイルをすべて削除します。', + 'en-US': 'Deletes all cached remote files.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/drive/cleanup.ts b/src/server/api/endpoints/admin/drive/cleanup.ts index b76236a7f0..f4867597f3 100644 --- a/src/server/api/endpoints/admin/drive/cleanup.ts +++ b/src/server/api/endpoints/admin/drive/cleanup.ts @@ -4,6 +4,11 @@ import { deleteFile } from '../../../../../services/drive/delete-file'; import { DriveFiles } from '../../../../../models'; export const meta = { + desc: { + 'ja-JP': '使用されていないユーザーのファイルを削除します。', + 'en-US': 'Delete the unused user\'s files.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/drive/files.ts b/src/server/api/endpoints/admin/drive/files.ts index f6296b8947..496050d2df 100644 --- a/src/server/api/endpoints/admin/drive/files.ts +++ b/src/server/api/endpoints/admin/drive/files.ts @@ -5,6 +5,11 @@ import { makePaginationQuery } from '../../../common/make-pagination-query'; import { ID } from '../../../../../misc/cafy-id'; export const meta = { + desc: { + 'ja-JP': '管理用のドライブの一覧を表示します。', + 'en-US': 'Displays a list of management drives.' + }, + tags: ['admin'], requireCredential: false as const, @@ -41,6 +46,16 @@ export const meta = { validator: $.optional.nullable.str, default: null }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'DriveFile' + } } }; diff --git a/src/server/api/endpoints/admin/drive/show-file.ts b/src/server/api/endpoints/admin/drive/show-file.ts index 36403bb1c3..96478a1c7d 100644 --- a/src/server/api/endpoints/admin/drive/show-file.ts +++ b/src/server/api/endpoints/admin/drive/show-file.ts @@ -26,6 +26,154 @@ export const meta = { code: 'NO_SUCH_FILE', id: 'caf3ca38-c6e5-472e-a30c-b05377dcc240' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this Drive file.', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time', + description: 'The date that the Drive file was created on Misskey.' + }, + userId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id', + description: 'Owner ID of this Drive file.', + example: 'xxxxxxxxxx', + }, + userHost: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + md5: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'md5', + description: 'The MD5 hash of this Drive file.', + example: '15eca7fba0480996e2245f5185bf39f2' + }, + name: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'The file name with extension.', + example: 'lenna.jpg' + }, + type: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'The MIME type of this Drive file.', + example: 'image/jpeg' + }, + size: { + type: 'number' as const, + optional: false as const, nullable: false as const, + description: 'The size of this Drive file. (bytes)', + example: 51469 + }, + comment: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + blurhash: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + properties: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + width: { + type: 'number' as const, + optional: false as const, nullable: false as const, + example: 1280 + }, + height: { + type: 'number' as const, + optional: false as const, nullable: false as const, + example: 720 + }, + avgColor: { + type: 'string' as const, + optional: true as const, nullable: false as const, + example: 'rgb(40,65,87)' + } + } + }, + storedInternal: { + type: 'boolean' as const, + optional: false as const, nullable: true as const, + description: 'Indicates whether this file is stored in the same location as Misskey itself', + example: true + }, + url: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'url', + description: 'The URL of this Drive file.', + }, + thumbnailUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'url', + description: 'The thumbnail URL of this Drive file.', + }, + webpublicUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'url', + description: 'The public URL of this Drive file.', + }, + accessKey: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Access key to access this file' + }, + thumbnailAccessKey: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Access key to access this file for thumbnail' + }, + webpublicAccessKey: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Access key to access this file for webpublic' + }, + uri: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + src: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + folderId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id', + description: 'The parent folder ID of this Drive file.', + example: 'xxxxxxxxxx', + }, + isSensitive: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + description: 'Whether this Drive file is sensitive.', + }, + isLink: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + } + } } }; diff --git a/src/server/api/endpoints/admin/emoji/copy.ts b/src/server/api/endpoints/admin/emoji/copy.ts index 5d4e57a28f..5c3c4f6fc5 100644 --- a/src/server/api/endpoints/admin/emoji/copy.ts +++ b/src/server/api/endpoints/admin/emoji/copy.ts @@ -9,6 +9,11 @@ import { ID } from '../../../../../misc/cafy-id'; import uploadFromUrl from '../../../../../services/drive/upload-from-url'; export const meta = { + desc: { + 'ja-JP': '選択したカスタム絵文字をコピーします。', + 'en-US': 'Copies the selected custom emoji.' + }, + tags: ['admin'], requireCredential: true as const, @@ -26,6 +31,19 @@ export const meta = { code: 'NO_SUCH_EMOJI', id: 'e2785b66-dca3-4087-9cac-b93c541cc425' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'New copied emoji ID' + } + } } }; diff --git a/src/server/api/endpoints/admin/emoji/list-remote.ts b/src/server/api/endpoints/admin/emoji/list-remote.ts index cbdcaa681c..81029fbbba 100644 --- a/src/server/api/endpoints/admin/emoji/list-remote.ts +++ b/src/server/api/endpoints/admin/emoji/list-remote.ts @@ -7,7 +7,8 @@ import { ID } from '../../../../../misc/cafy-id'; export const meta = { desc: { - 'ja-JP': 'カスタム絵文字を取得します。' + 'ja-JP': 'リモートのカスタム絵文字一覧を取得します。', + 'en-US': 'Gets a list of remote custom emojis.' }, tags: ['admin'], @@ -38,6 +39,52 @@ export const meta = { untilId: { validator: $.optional.type(ID), } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this Emoji.' + }, + aliases: { + type: 'array' as const, + optional: false as const, nullable: false as const, + description: 'List to make it easier to be displayed as a candidate when entering emoji.', + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + name: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Official name of custom emoji.' + }, + category: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'Names categorized in the emoji list.' + }, + host: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'If it is another server, the FQDN will be returned here.' + }, + url: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Image URL of emoji.' + } + } + } } }; diff --git a/src/server/api/endpoints/admin/emoji/list.ts b/src/server/api/endpoints/admin/emoji/list.ts index bd3e294851..6d042b0afd 100644 --- a/src/server/api/endpoints/admin/emoji/list.ts +++ b/src/server/api/endpoints/admin/emoji/list.ts @@ -7,7 +7,8 @@ import { Emoji } from '../../../../../models/entities/emoji'; export const meta = { desc: { - 'ja-JP': 'カスタム絵文字を取得します。' + 'ja-JP': 'カスタム絵文字一覧を取得します。', + 'en-US': 'List custom emojis.' }, tags: ['admin'], @@ -33,6 +34,52 @@ export const meta = { untilId: { validator: $.optional.type(ID), } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this Emoji.' + }, + aliases: { + type: 'array' as const, + optional: false as const, nullable: false as const, + description: 'List to make it easier to be displayed as a candidate when entering emoji.', + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + name: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Official name of custom emoji.' + }, + category: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'Names categorized in the emoji list.' + }, + host: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'If it is another server, the FQDN will be returned here.' + }, + url: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Image URL of emoji.' + } + } + } } }; diff --git a/src/server/api/endpoints/admin/federation/delete-all-files.ts b/src/server/api/endpoints/admin/federation/delete-all-files.ts index eef53cd92c..c0a8c94f4c 100644 --- a/src/server/api/endpoints/admin/federation/delete-all-files.ts +++ b/src/server/api/endpoints/admin/federation/delete-all-files.ts @@ -4,6 +4,11 @@ import { deleteFile } from '../../../../../services/drive/delete-file'; import { DriveFiles } from '../../../../../models'; export const meta = { + desc: { + 'ja-JP': '指定したドメインのファイルを全て削除します。', + 'en-US': 'Deletes all files in the specified domain.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/federation/remove-all-following.ts b/src/server/api/endpoints/admin/federation/remove-all-following.ts index e593193552..4a6f6e6261 100644 --- a/src/server/api/endpoints/admin/federation/remove-all-following.ts +++ b/src/server/api/endpoints/admin/federation/remove-all-following.ts @@ -4,6 +4,11 @@ import deleteFollowing from '../../../../../services/following/delete'; import { Followings, Users } from '../../../../../models'; export const meta = { + desc: { + 'ja-JP': '指定したドメインの全ユーザーのフォローを全て解除します。', + 'en-US': 'Unfollow all users in the specified domain.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/federation/update-instance.ts b/src/server/api/endpoints/admin/federation/update-instance.ts index 8f8b3334b3..7206e4fb2e 100644 --- a/src/server/api/endpoints/admin/federation/update-instance.ts +++ b/src/server/api/endpoints/admin/federation/update-instance.ts @@ -4,6 +4,11 @@ import { Instances } from '../../../../../models'; import { toPuny } from '../../../../../misc/convert-host'; export const meta = { + desc: { + 'ja-JP': '指定したドメインのアクティビティの配信を停止するかを選択します。', + 'en-US': 'Select whether to undeliver the activity for the specified domain.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/get-table-stats.ts b/src/server/api/endpoints/admin/get-table-stats.ts index eb9f26fc05..351c230033 100644 --- a/src/server/api/endpoints/admin/get-table-stats.ts +++ b/src/server/api/endpoints/admin/get-table-stats.ts @@ -6,6 +6,7 @@ export const meta = { requireModerator: true, desc: { + 'ja-JP': 'テーブル情報を取得します。', 'en-US': 'Get table stats' }, @@ -13,6 +14,17 @@ export const meta = { params: { }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + example: { + migrations: { + count: 66, + size: 32768 + }, + } + } }; export default define(meta, async () => { diff --git a/src/server/api/endpoints/admin/invite.ts b/src/server/api/endpoints/admin/invite.ts index 52e3da8f84..4529d16adf 100644 --- a/src/server/api/endpoints/admin/invite.ts +++ b/src/server/api/endpoints/admin/invite.ts @@ -5,7 +5,8 @@ import { genId } from '../../../../misc/gen-id'; export const meta = { desc: { - 'ja-JP': '招待コードを発行します。' + 'ja-JP': '招待コードを発行します。', + 'en-US': 'Issue an invitation code.' }, tags: ['admin'], @@ -13,7 +14,22 @@ export const meta = { requireCredential: true as const, requireModerator: true, - params: {} + params: {}, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + code: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Give this code to the applicant for registration.', + example: '2ERUA5VR', + maxLength: 8, + minLength: 8 + } + } + } }; export default define(meta, async () => { diff --git a/src/server/api/endpoints/admin/logs.ts b/src/server/api/endpoints/admin/logs.ts index fef2eab80b..5e19b1a6f4 100644 --- a/src/server/api/endpoints/admin/logs.ts +++ b/src/server/api/endpoints/admin/logs.ts @@ -4,6 +4,11 @@ import { Logs } from '../../../../models'; import { Brackets } from 'typeorm'; export const meta = { + desc: { + 'ja-JP': 'ログを表示します。', + 'en-US': 'Show logs.' + }, + tags: ['admin'], requireCredential: true as const, @@ -24,6 +29,60 @@ export const meta = { validator: $.optional.nullable.str, default: null as any } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this log.', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time', + description: 'The date that the Drive file was created on Misskey.' + }, + domain: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: true as const, nullable: false as const + } + }, + level: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + worker: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + machine: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'The name of the running machine.' + }, + message: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Log body.' + }, + data: { + type: 'object' as const, + optional: false as const, nullable: false as const + } + } + } } }; diff --git a/src/server/api/endpoints/admin/promo/create.ts b/src/server/api/endpoints/admin/promo/create.ts index e3c03d2f4b..8b96d563c2 100644 --- a/src/server/api/endpoints/admin/promo/create.ts +++ b/src/server/api/endpoints/admin/promo/create.ts @@ -6,6 +6,11 @@ import { getNote } from '../../../common/getters'; import { PromoNotes } from '../../../../../models'; export const meta = { + desc: { + 'ja-JP': 'プロモーションを作成します。', + 'en-US': 'Create a promotion.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/queue/clear.ts b/src/server/api/endpoints/admin/queue/clear.ts index 0375f55f01..bc55a02ec1 100644 --- a/src/server/api/endpoints/admin/queue/clear.ts +++ b/src/server/api/endpoints/admin/queue/clear.ts @@ -3,6 +3,11 @@ import { destroy } from '../../../../../queue'; import { insertModerationLog } from '../../../../../services/insert-moderation-log'; export const meta = { + desc: { + 'ja-JP': 'ジョブキューを全て削除します。', + 'en-US': 'Delete all job queues.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/queue/deliver-delayed.ts b/src/server/api/endpoints/admin/queue/deliver-delayed.ts index 6bfb5b50fe..221aa35e48 100644 --- a/src/server/api/endpoints/admin/queue/deliver-delayed.ts +++ b/src/server/api/endpoints/admin/queue/deliver-delayed.ts @@ -2,12 +2,42 @@ import define from '../../../define'; import { deliverQueue } from '../../../../../queue'; export const meta = { + desc: { + 'ja-JP': '他サーバーへ送るキューの遅延一覧を返します。', + 'en-US': 'Returns a list of delays in queues sent to other servers.' + }, + tags: ['admin'], requireCredential: true as const, requireModerator: true, params: { + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + anyOf: [ + { + type: 'string' as const, + description: 'FQDN to fediverse server' + }, + { + type: 'number' as const, + description: 'Delayed queue counts' + } + ] + } + }, + example: [[ + 'example.com', + 12 + ]] } }; diff --git a/src/server/api/endpoints/admin/queue/inbox-delayed.ts b/src/server/api/endpoints/admin/queue/inbox-delayed.ts index 4627cefdd8..52f67cb514 100644 --- a/src/server/api/endpoints/admin/queue/inbox-delayed.ts +++ b/src/server/api/endpoints/admin/queue/inbox-delayed.ts @@ -2,12 +2,42 @@ import define from '../../../define'; import { inboxQueue } from '../../../../../queue'; export const meta = { + desc: { + 'ja-JP': 'このサーバーへのキューの遅延一覧を返します。', + 'en-US': 'Returns a list of queue delays to this server.' + }, + tags: ['admin'], requireCredential: true as const, requireModerator: true, params: { + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + anyOf: [ + { + type: 'string' as const, + description: 'FQDN to fediverse server' + }, + { + type: 'number' as const, + description: 'Delayed queue counts' + } + ] + } + }, + example: [[ + 'example.com', + 12 + ]] } }; diff --git a/src/server/api/endpoints/admin/queue/jobs.ts b/src/server/api/endpoints/admin/queue/jobs.ts index 0cd3f40d4e..5ab78e3c48 100644 --- a/src/server/api/endpoints/admin/queue/jobs.ts +++ b/src/server/api/endpoints/admin/queue/jobs.ts @@ -3,6 +3,11 @@ import define from '../../../define'; import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '../../../../../queue'; export const meta = { + desc: { + 'ja-JP': 'ジョブ一覧を表示します。', + 'en-US': 'Display the job list.' + }, + tags: ['admin'], requireCredential: true as const, @@ -21,6 +26,38 @@ export const meta = { validator: $.optional.num, default: 50 }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + data: { + type: 'object' as const, + optional: false as const, nullable: false as const + }, + attempts: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + maxAttempts: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + timestamp: { + type: 'number' as const, + optional: false as const, nullable: false as const + } + } + } } }; diff --git a/src/server/api/endpoints/admin/queue/stats.ts b/src/server/api/endpoints/admin/queue/stats.ts index da29c5285e..bd64d2ac06 100644 --- a/src/server/api/endpoints/admin/queue/stats.ts +++ b/src/server/api/endpoints/admin/queue/stats.ts @@ -2,12 +2,36 @@ import define from '../../../define'; import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '../../../../../queue'; export const meta = { + desc: { + 'ja-JP': 'キューの状態を返します。', + 'en-US': 'Returns the status of the queue.' + }, + tags: ['admin'], requireCredential: true as const, requireModerator: true, - params: {} + params: {}, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + deliver: { + ref: 'QueueCount' + }, + inbox: { + ref: 'QueueCount' + }, + db: { + ref: 'QueueCount' + }, + objectStorage: { + ref: 'QueueCount' + } + } + } }; export default define(meta, async (ps) => { diff --git a/src/server/api/endpoints/admin/relays/add.ts b/src/server/api/endpoints/admin/relays/add.ts index bcda1050e8..831e05c835 100644 --- a/src/server/api/endpoints/admin/relays/add.ts +++ b/src/server/api/endpoints/admin/relays/add.ts @@ -5,7 +5,8 @@ import { ApiError } from '../../../error'; export const meta = { desc: { - 'ja-JP': 'Add relay' + 'ja-JP': 'リレーを追加します。', + 'en-US': 'Add relay' }, tags: ['admin'], @@ -25,6 +26,33 @@ export const meta = { code: 'INVALID_URL', id: 'fb8c92d3-d4e5-44e7-b3d4-800d5cef8b2c' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + inbox: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'url' + }, + status: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'requesting', + enum: [ + 'requesting', + 'accepted', + 'rejected' + ] + } + } } }; diff --git a/src/server/api/endpoints/admin/relays/list.ts b/src/server/api/endpoints/admin/relays/list.ts index 3b132f73b3..da05ac0a24 100644 --- a/src/server/api/endpoints/admin/relays/list.ts +++ b/src/server/api/endpoints/admin/relays/list.ts @@ -3,7 +3,8 @@ import { listRelay } from '../../../../../services/relay'; export const meta = { desc: { - 'ja-JP': 'List relay' + 'ja-JP': 'リレー一覧を表示します。', + 'en-US': 'List relay' }, tags: ['admin'], @@ -13,6 +14,37 @@ export const meta = { params: { }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + inbox: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'url' + }, + status: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'requesting', + enum: [ + 'requesting', + 'accepted', + 'rejected' + ] + } + } + } + } }; export default define(meta, async (ps, user) => { diff --git a/src/server/api/endpoints/admin/relays/remove.ts b/src/server/api/endpoints/admin/relays/remove.ts index df95e0329a..572d51cfca 100644 --- a/src/server/api/endpoints/admin/relays/remove.ts +++ b/src/server/api/endpoints/admin/relays/remove.ts @@ -4,7 +4,8 @@ import { removeRelay } from '../../../../../services/relay'; export const meta = { desc: { - 'ja-JP': 'Remove relay' + 'ja-JP': 'リレーを削除します。', + 'en-US': 'Remove relay' }, tags: ['admin'], diff --git a/src/server/api/endpoints/admin/reset-password.ts b/src/server/api/endpoints/admin/reset-password.ts index 1b8a5ee651..2f55cf23a1 100644 --- a/src/server/api/endpoints/admin/reset-password.ts +++ b/src/server/api/endpoints/admin/reset-password.ts @@ -8,6 +8,7 @@ import { Users, UserProfiles } from '../../../../models'; export const meta = { desc: { 'ja-JP': '指定したユーザーのパスワードをリセットします。', + 'en-US': 'Reset password to specified user.' }, tags: ['admin'], @@ -23,6 +24,19 @@ export const meta = { 'en-US': 'The user ID which you want to suspend' } }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + password: { + type: 'string' as const, + optional: false as const, nullable: false as const, + minLength: 8, + maxLength: 8 + } + } } }; diff --git a/src/server/api/endpoints/admin/resolve-abuse-user-report.ts b/src/server/api/endpoints/admin/resolve-abuse-user-report.ts index 0a62b5f365..f8cd8def57 100644 --- a/src/server/api/endpoints/admin/resolve-abuse-user-report.ts +++ b/src/server/api/endpoints/admin/resolve-abuse-user-report.ts @@ -4,6 +4,11 @@ import define from '../../define'; import { AbuseUserReports } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': '指定した通報を解決済みにします。', + 'en-US': 'Marks the specified report as resolved.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/resync-chart.ts b/src/server/api/endpoints/admin/resync-chart.ts index 84e19d37e6..13254a3ca3 100644 --- a/src/server/api/endpoints/admin/resync-chart.ts +++ b/src/server/api/endpoints/admin/resync-chart.ts @@ -3,6 +3,11 @@ import { driveChart, notesChart, usersChart, instanceChart } from '../../../../s import { insertModerationLog } from '../../../../services/insert-moderation-log'; export const meta = { + desc: { + 'ja-JP': 'チャートを再同期します。', + 'en-US': 'Resync the chart.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/send-email.ts b/src/server/api/endpoints/admin/send-email.ts index c0e77e1621..51f92230a2 100644 --- a/src/server/api/endpoints/admin/send-email.ts +++ b/src/server/api/endpoints/admin/send-email.ts @@ -3,6 +3,11 @@ import define from '../../define'; import { sendEmail } from '../../../../services/send-email'; export const meta = { + desc: { + 'ja-JP': 'メールを送信します。', + 'en-US': 'Send a mail.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/admin/server-info.ts b/src/server/api/endpoints/admin/server-info.ts index de4e933471..3b48a811e5 100644 --- a/src/server/api/endpoints/admin/server-info.ts +++ b/src/server/api/endpoints/admin/server-info.ts @@ -9,12 +9,100 @@ export const meta = { requireModerator: true, desc: { + 'ja-JP': 'サーバー情報を表示します。', + 'en-US': 'Show server information.' }, tags: ['admin', 'meta'], params: { }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + machine: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'The name of the running server' + }, + os: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'OS used by the server', + example: 'linux' + }, + node: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Version of Node.js' + }, + psql: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Version of Postgresql' + }, + cpu: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + model: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'The name of the CPU you are using' + }, + cores: { + type: 'number' as const, + optional: false as const, nullable: false as const, + description: 'Number of CPU cores used (number of logical processors)' + } + } + }, + mem: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + total: { + type: 'number' as const, + optional: false as const, nullable: false as const, + format: 'bytes', + description: 'RAM capacity.' + } + } + }, + fs: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + total: { + type: 'number' as const, + optional: false as const, nullable: false as const, + format: 'bytes', + description: 'Total storage capacity.' + }, + used: { + type: 'number' as const, + optional: false as const, nullable: false as const, + format: 'bytes', + description: 'Amount of storage used' + } + } + }, + net: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + interface: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'The interface name of your network.', + example: 'eth0' + } + } + } + } + } }; export default define(meta, async () => { diff --git a/src/server/api/endpoints/admin/show-moderation-logs.ts b/src/server/api/endpoints/admin/show-moderation-logs.ts index acdfda51ab..f41d91647a 100644 --- a/src/server/api/endpoints/admin/show-moderation-logs.ts +++ b/src/server/api/endpoints/admin/show-moderation-logs.ts @@ -5,6 +5,11 @@ import { ModerationLogs } from '../../../../models'; import { makePaginationQuery } from '../../common/make-pagination-query'; export const meta = { + desc: { + 'ja-JP': 'モデレーションログ一覧を表示します。', + 'en-US': 'Display the moderation log list.' + }, + tags: ['admin'], requireCredential: true as const, @@ -23,6 +28,45 @@ export const meta = { untilId: { validator: $.optional.type(ID), }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + type: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + info: { + type: 'object' as const, + optional: false as const, nullable: false as const + }, + userId: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + user: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + } + } + } } }; diff --git a/src/server/api/endpoints/admin/show-user.ts b/src/server/api/endpoints/admin/show-user.ts index ea4df141f3..63889a9e6b 100644 --- a/src/server/api/endpoints/admin/show-user.ts +++ b/src/server/api/endpoints/admin/show-user.ts @@ -5,7 +5,8 @@ import { Users } from '../../../../models'; export const meta = { desc: { - 'ja-JP': '指定したユーザーの情報を取得します。', + 'ja-JP': '指定したユーザーの情報を取得します(管理者向け)。', + 'en-US': 'Gets the information of the specified user (for administrators).' }, tags: ['admin'], @@ -21,6 +22,149 @@ export const meta = { 'en-US': 'The user ID which you want to suspend' } }, + }, + + res: { + type: 'object' as const, + nullable: false as const, optional: false as const, + properties: { + id: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'id' + }, + createdAt: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'date-time' + }, + updatedAt: { + type: 'string' as const, + nullable: true as const, optional: false as const, + format: 'date-time' + }, + lastFetchedAt: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + username: { + type: 'string' as const, + nullable: false as const, optional: false as const + }, + name: { + type: 'string' as const, + nullable: false as const, optional: false as const + }, + folowersCount: { + type: 'number' as const, + nullable: false as const, optional: false as const + }, + followingCount: { + type: 'number' as const, + nullable: false as const, optional: false as const + }, + notesCount: { + type: 'number' as const, + nullable: false as const, optional: false as const + }, + avatarId: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + bannerId: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + tags: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'string' as const, + nullable: false as const, optional: false as const + } + }, + avatarUrl: { + type: 'string' as const, + nullable: true as const, optional: false as const, + format: 'url' + }, + bannerUrl: { + type: 'string' as const, + nullable: true as const, optional: false as const, + format: 'url' + }, + avatarBlurhash: { + type: 'any' as const, + nullable: true as const, optional: false as const, + default: null + }, + bannerBlurhash: { + type: 'any' as const, + nullable: true as const, optional: false as const, + default: null + }, + isSuspended: { + type: 'boolean' as const, + nullable: false as const, optional: false as const + }, + isSilenced: { + type: 'boolean' as const, + nullable: false as const, optional: false as const + }, + isLocked: { + type: 'boolean' as const, + nullable: false as const, optional: false as const, + }, + isBot: { + type: 'boolean' as const, + nullable: false as const, optional: false as const + }, + isCat: { + type: 'boolean' as const, + nullable: false as const, optional: false as const + }, + isAdmin: { + type: 'boolean' as const, + nullable: false as const, optional: false as const + }, + isModerator: { + type: 'boolean' as const, + nullable: false as const, optional: false as const + }, + emojis: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'string' as const, + nullable: false as const, optional: false as const + } + }, + host: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + inbox: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + sharedInbox: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + featured: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + uri: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + token: { + type: 'string' as const, + nullable: false as const, optional: false as const, + default: '<MASKED>' + } + } } }; diff --git a/src/server/api/endpoints/admin/show-users.ts b/src/server/api/endpoints/admin/show-users.ts index 03abe7a57b..6ee4aa877b 100644 --- a/src/server/api/endpoints/admin/show-users.ts +++ b/src/server/api/endpoints/admin/show-users.ts @@ -3,6 +3,11 @@ import define from '../../define'; import { Users } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': '管理者用のユーザー一覧を表示します。', + 'en-US': 'Displays a list of users for administrators.' + }, + tags: ['admin'], requireCredential: true as const, @@ -61,6 +66,16 @@ export const meta = { validator: $.optional.str, default: null } + }, + + res: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'object' as const, + nullable: false as const, optional: false as const, + ref: 'User' + } } }; @@ -71,7 +86,7 @@ export default define(meta, async (ps, me) => { case 'available': query.where('user.isSuspended = FALSE'); break; case 'admin': query.where('user.isAdmin = TRUE'); break; case 'moderator': query.where('user.isModerator = TRUE'); break; - case 'adminOrModerator': query.where('user.isAdmin = TRUE OR isModerator = TRUE'); break; + case 'adminOrModerator': query.where('user.isAdmin = TRUE OR user.isModerator = TRUE'); break; case 'alive': query.where('user.updatedAt > :date', { date: new Date(Date.now() - 1000 * 60 * 60 * 24 * 5) }); break; case 'silenced': query.where('user.isSilenced = TRUE'); break; case 'suspended': query.where('user.isSuspended = TRUE'); break; diff --git a/src/server/api/endpoints/admin/vacuum.ts b/src/server/api/endpoints/admin/vacuum.ts index e041e65431..14136c751c 100644 --- a/src/server/api/endpoints/admin/vacuum.ts +++ b/src/server/api/endpoints/admin/vacuum.ts @@ -4,6 +4,11 @@ import { getConnection } from 'typeorm'; import { insertModerationLog } from '../../../../services/insert-moderation-log'; export const meta = { + desc: { + 'ja-JP': 'データベースのメンテナンスを行います。', + 'en-US': 'Perform database maintenance.' + }, + tags: ['admin'], requireCredential: true as const, diff --git a/src/server/api/endpoints/announcements.ts b/src/server/api/endpoints/announcements.ts index ca46192de2..5d0fd9bdfa 100644 --- a/src/server/api/endpoints/announcements.ts +++ b/src/server/api/endpoints/announcements.ts @@ -5,6 +5,11 @@ import { Announcements, AnnouncementReads } from '../../../models'; import { makePaginationQuery } from '../common/make-pagination-query'; export const meta = { + desc: { + 'ja-JP': 'アナウンスを表示します。', + 'en-US': 'Show announcements.' + }, + tags: ['meta'], requireCredential: false as const, @@ -27,6 +32,56 @@ export const meta = { untilId: { validator: $.optional.type(ID), }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this Announcement.', + example: 'xxxxxxxxxx', + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time', + description: 'The date that the Announcement was created.' + }, + updatedAt: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'date-time', + description: 'The date that the Announcement was updated.' + }, + text: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Announcement text.' + }, + title: { + type: 'string' as const, + optional: false as const, nullable: false as const, + description: 'Announcement title.' + }, + imageUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const, + description: 'Announcement image.' + }, + isRead: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + description: 'Indicates that you have read this announcement' + } + } + } } }; diff --git a/src/server/api/endpoints/antennas/create.ts b/src/server/api/endpoints/antennas/create.ts index bc79385260..b5f0eead2a 100644 --- a/src/server/api/endpoints/antennas/create.ts +++ b/src/server/api/endpoints/antennas/create.ts @@ -6,6 +6,11 @@ import { ID } from '../../../../misc/cafy-id'; import { ApiError } from '../../error'; export const meta = { + desc: { + 'ja-JP': 'アンテナを作成します。', + 'en-US': 'Create a antenna.' + }, + tags: ['antennas'], requireCredential: true as const, @@ -70,6 +75,12 @@ export const meta = { code: 'NO_SUCH_USER_GROUP', id: 'aa3c0b9a-8cae-47c0-92ac-202ce5906682' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Antenna' } }; diff --git a/src/server/api/endpoints/antennas/delete.ts b/src/server/api/endpoints/antennas/delete.ts index 087834a7bd..9008c37c8e 100644 --- a/src/server/api/endpoints/antennas/delete.ts +++ b/src/server/api/endpoints/antennas/delete.ts @@ -5,6 +5,11 @@ import { ApiError } from '../../error'; import { Antennas } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': 'アンテナを削除します。', + 'en-US': 'Delete a antenna.' + }, + tags: ['antennas'], requireCredential: true as const, diff --git a/src/server/api/endpoints/antennas/list.ts b/src/server/api/endpoints/antennas/list.ts index cbc4e827b9..bc9685887f 100644 --- a/src/server/api/endpoints/antennas/list.ts +++ b/src/server/api/endpoints/antennas/list.ts @@ -2,11 +2,26 @@ import define from '../../define'; import { Antennas } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': 'アンテナの一覧を取得します。', + 'en-US': 'Get a list of antennas.' + }, + tags: ['antennas', 'account'], requireCredential: true as const, kind: 'read:account', + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Antenna' + } + } }; export default define(meta, async (ps, me) => { diff --git a/src/server/api/endpoints/antennas/notes.ts b/src/server/api/endpoints/antennas/notes.ts index 402a2758bb..750fc080cf 100644 --- a/src/server/api/endpoints/antennas/notes.ts +++ b/src/server/api/endpoints/antennas/notes.ts @@ -8,6 +8,11 @@ import { generateMutedUserQuery } from '../../common/generate-muted-user-query'; import { ApiError } from '../../error'; export const meta = { + desc: { + 'ja-JP': '指定したアンテナのノート一覧を表示します。', + 'en-US': 'Displays a list of notes for the specified antenna.' + }, + tags: ['antennas', 'account', 'notes'], requireCredential: true as const, @@ -39,6 +44,16 @@ export const meta = { code: 'NO_SUCH_ANTENNA', id: '850926e0-fd3b-49b6-b69a-b28a5dbd82fe' } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Note' + } } }; diff --git a/src/server/api/endpoints/antennas/show.ts b/src/server/api/endpoints/antennas/show.ts index bc2093ba61..ed400f830c 100644 --- a/src/server/api/endpoints/antennas/show.ts +++ b/src/server/api/endpoints/antennas/show.ts @@ -5,6 +5,11 @@ import { ApiError } from '../../error'; import { Antennas } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': '指定したアンテナの情報を取得します。', + 'en-US': 'Acquires the information of the specified antenna.' + }, + tags: ['antennas', 'account'], requireCredential: true as const, @@ -23,6 +28,12 @@ export const meta = { code: 'NO_SUCH_ANTENNA', id: 'c06569fb-b025-4f23-b22d-1fcd20d2816b' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Antenna' } }; diff --git a/src/server/api/endpoints/antennas/update.ts b/src/server/api/endpoints/antennas/update.ts index b329e86ade..58f4e68c89 100644 --- a/src/server/api/endpoints/antennas/update.ts +++ b/src/server/api/endpoints/antennas/update.ts @@ -5,6 +5,11 @@ import { ApiError } from '../../error'; import { Antennas, UserLists, UserGroupJoinings } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': 'アンテナの情報を更新します。', + 'en-US': 'Updates the information of the specified antenna.' + }, + tags: ['antennas'], requireCredential: true as const, @@ -79,6 +84,12 @@ export const meta = { code: 'NO_SUCH_USER_GROUP', id: '109ed789-b6eb-456e-b8a9-6059d567d385' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Antenna' } }; diff --git a/src/server/api/endpoints/ap/show.ts b/src/server/api/endpoints/ap/show.ts index 214116c8c3..e8297db472 100644 --- a/src/server/api/endpoints/ap/show.ts +++ b/src/server/api/endpoints/ap/show.ts @@ -16,7 +16,8 @@ export const meta = { tags: ['federation'], desc: { - 'ja-JP': 'URIを指定してActivityPubオブジェクトを参照します。' + 'ja-JP': 'URIを指定してActivityPubオブジェクトを参照します。', + 'en-US': 'Browse to the ActivityPub object by specifying the URI.' }, requireCredential: false as const, @@ -36,6 +37,22 @@ export const meta = { code: 'NO_SUCH_OBJECT', id: 'dc94d745-1262-4e63-a17d-fecaa57efc82' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + type: { + type: 'string' as const, + optional: false as const, nullable: false as const, + enum: ['User', 'Note'] + }, + object: { + type: 'object' as const, + optional: false as const, nullable: false as const + } + } } }; diff --git a/src/server/api/endpoints/app/show.ts b/src/server/api/endpoints/app/show.ts index ca4f3549f5..254ae30884 100644 --- a/src/server/api/endpoints/app/show.ts +++ b/src/server/api/endpoints/app/show.ts @@ -25,6 +25,12 @@ export const meta = { code: 'NO_SUCH_APP', id: 'dce83913-2dc6-4093-8a7b-71dbb11718a3' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'App' } }; diff --git a/src/server/api/endpoints/auth/session/show.ts b/src/server/api/endpoints/auth/session/show.ts index fe92ff3624..9e0d6d90a4 100644 --- a/src/server/api/endpoints/auth/session/show.ts +++ b/src/server/api/endpoints/auth/session/show.ts @@ -24,6 +24,27 @@ export const meta = { code: 'NO_SUCH_SESSION', id: 'bd72c97d-eba7-4adb-a467-f171b8847250' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + app: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'App' + }, + token: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + } } }; diff --git a/src/server/api/endpoints/blocking/create.ts b/src/server/api/endpoints/blocking/create.ts index bdaccc79ed..dfab338a8b 100644 --- a/src/server/api/endpoints/blocking/create.ts +++ b/src/server/api/endpoints/blocking/create.ts @@ -52,6 +52,12 @@ export const meta = { code: 'ALREADY_BLOCKING', id: '787fed64-acb9-464a-82eb-afbd745b9614' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/blocking/delete.ts b/src/server/api/endpoints/blocking/delete.ts index 451da1c915..22d2df5970 100644 --- a/src/server/api/endpoints/blocking/delete.ts +++ b/src/server/api/endpoints/blocking/delete.ts @@ -52,6 +52,76 @@ export const meta = { code: 'NOT_BLOCKING', id: '291b2efa-60c6-45c0-9f6a-045c8f9b02cd' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id', + description: 'The unique identifier for this blocking.', + example: 'xxxxxxxxxx', + }, + name: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + username: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + host: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + avatarUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'url' + }, + avatarBlurhash: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + avatarColor: { + type: 'any' as const, + optional: false as const, nullable: true as const + }, + emojis: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + nullable: false as const, optional: false as const, + properties: { + name: { + type: 'string' as const, + nullable: false as const, optional: false as const + }, + host: { + type: 'string' as const, + nullable: true as const, optional: false as const + }, + url: { + type: 'string' as const, + nullable: false as const, optional: false as const, + format: 'url' + }, + aliases: { + type: 'array' as const, + nullable: false as const, optional: false as const, + items: { + type: 'string' as const, + nullable: false as const, optional: false as const + } + } + } + } + } + } } }; diff --git a/src/server/api/endpoints/clips/create.ts b/src/server/api/endpoints/clips/create.ts index 0d122dbb9b..b26c42c56c 100644 --- a/src/server/api/endpoints/clips/create.ts +++ b/src/server/api/endpoints/clips/create.ts @@ -23,6 +23,12 @@ export const meta = { validator: $.optional.nullable.str.range(1, 2048) } }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Clip' + } }; export default define(meta, async (ps, user) => { diff --git a/src/server/api/endpoints/clips/list.ts b/src/server/api/endpoints/clips/list.ts index 6ede8ea0fc..6b90b114df 100644 --- a/src/server/api/endpoints/clips/list.ts +++ b/src/server/api/endpoints/clips/list.ts @@ -7,6 +7,16 @@ export const meta = { requireCredential: true as const, kind: 'read:account', + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Clip' + } + } }; export default define(meta, async (ps, me) => { diff --git a/src/server/api/endpoints/clips/notes.ts b/src/server/api/endpoints/clips/notes.ts index 13983d99f7..6a507e2036 100644 --- a/src/server/api/endpoints/clips/notes.ts +++ b/src/server/api/endpoints/clips/notes.ts @@ -39,6 +39,16 @@ export const meta = { code: 'NO_SUCH_CLIP', id: '1d7645e6-2b6d-4635-b0fe-fe22b0e72e00' } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Note' + } } }; diff --git a/src/server/api/endpoints/clips/show.ts b/src/server/api/endpoints/clips/show.ts index dc730d64a3..8c285d88b5 100644 --- a/src/server/api/endpoints/clips/show.ts +++ b/src/server/api/endpoints/clips/show.ts @@ -23,6 +23,12 @@ export const meta = { code: 'NO_SUCH_CLIP', id: 'c3c5fe33-d62c-44d2-9ea5-d997703f5c20' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Clip' } }; diff --git a/src/server/api/endpoints/clips/update.ts b/src/server/api/endpoints/clips/update.ts index 4a1a31eb95..041691da2a 100644 --- a/src/server/api/endpoints/clips/update.ts +++ b/src/server/api/endpoints/clips/update.ts @@ -35,6 +35,12 @@ export const meta = { code: 'NO_SUCH_CLIP', id: 'b4d92d70-b216-46fa-9a3f-a8c811699257' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Clip' } }; diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts index f57166a2f6..7e43765c06 100644 --- a/src/server/api/endpoints/drive/files/update.ts +++ b/src/server/api/endpoints/drive/files/update.ts @@ -70,6 +70,12 @@ export const meta = { code: 'NO_SUCH_FOLDER', id: 'ea8fb7a5-af77-4a08-b608-c0218176cd73' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'DriveFile' } }; diff --git a/src/server/api/endpoints/drive/folders/create.ts b/src/server/api/endpoints/drive/folders/create.ts index d88bfcc3d4..edaa74532d 100644 --- a/src/server/api/endpoints/drive/folders/create.ts +++ b/src/server/api/endpoints/drive/folders/create.ts @@ -43,6 +43,12 @@ export const meta = { code: 'NO_SUCH_FOLDER', id: '53326628-a00d-40a6-a3cd-8975105c0f95' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'DriveFolder' } }; diff --git a/src/server/api/endpoints/drive/folders/update.ts b/src/server/api/endpoints/drive/folders/update.ts index e23a824d16..c2a272c247 100644 --- a/src/server/api/endpoints/drive/folders/update.ts +++ b/src/server/api/endpoints/drive/folders/update.ts @@ -61,6 +61,12 @@ export const meta = { code: 'NO_SUCH_PARENT_FOLDER', id: 'ce104e3a-faaf-49d5-b459-10ff0cbbcaa1' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'DriveFolder' } }; diff --git a/src/server/api/endpoints/endpoints.ts b/src/server/api/endpoints/endpoints.ts index 3ab14389a9..84ab107c6a 100644 --- a/src/server/api/endpoints/endpoints.ts +++ b/src/server/api/endpoints/endpoints.ts @@ -2,12 +2,32 @@ import define from '../define'; import endpoints from '../endpoints'; export const meta = { + desc: { + 'ja-JP': '使用できるAPI一覧を返します。', + 'en-US': 'Returns a list of available APIs.' + }, + requireCredential: false as const, tags: ['meta'], params: { }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + example: [ + 'admin/abuse-user-reports', + 'admin/accounts/create', + 'admin/announcements/create', + '...' + ] + } }; export default define(meta, async () => { diff --git a/src/server/api/endpoints/federation/instances.ts b/src/server/api/endpoints/federation/instances.ts index 6b6fe42a40..239756af53 100644 --- a/src/server/api/endpoints/federation/instances.ts +++ b/src/server/api/endpoints/federation/instances.ts @@ -1,4 +1,5 @@ import $ from 'cafy'; +import config from '../../../../config'; import define from '../../define'; import { Instances } from '../../../../models'; import { fetchMeta } from '../../../../misc/fetch-meta'; @@ -50,6 +51,16 @@ export const meta = { sort: { validator: $.optional.str, } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'FederationInstance' + } } }; diff --git a/src/server/api/endpoints/federation/show-instance.ts b/src/server/api/endpoints/federation/show-instance.ts index 8c3b469972..1a0bcdb23e 100644 --- a/src/server/api/endpoints/federation/show-instance.ts +++ b/src/server/api/endpoints/federation/show-instance.ts @@ -2,6 +2,7 @@ import $ from 'cafy'; import define from '../../define'; import { Instances } from '../../../../models'; import { toPuny } from '../../../../misc/convert-host'; +import config from '../../../../config'; export const meta = { tags: ['federation'], @@ -12,6 +13,12 @@ export const meta = { host: { validator: $.str } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'FederationInstance' } }; diff --git a/src/server/api/endpoints/following/create.ts b/src/server/api/endpoints/following/create.ts index d5ade3073a..ca46d59c78 100644 --- a/src/server/api/endpoints/following/create.ts +++ b/src/server/api/endpoints/following/create.ts @@ -64,6 +64,12 @@ export const meta = { code: 'BLOCKED', id: 'c4ab57cc-4e41-45e9-bfd9-584f61e35ce0' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/following/delete.ts b/src/server/api/endpoints/following/delete.ts index 692ac92144..d3abda9265 100644 --- a/src/server/api/endpoints/following/delete.ts +++ b/src/server/api/endpoints/following/delete.ts @@ -52,6 +52,12 @@ export const meta = { code: 'NOT_FOLLOWING', id: '5dbf82f5-c92b-40b1-87d1-6c8c0741fd09' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/following/requests/cancel.ts b/src/server/api/endpoints/following/requests/cancel.ts index a12e1f76b6..ef21ee4f27 100644 --- a/src/server/api/endpoints/following/requests/cancel.ts +++ b/src/server/api/endpoints/following/requests/cancel.ts @@ -40,6 +40,12 @@ export const meta = { code: 'FOLLOW_REQUEST_NOT_FOUND', id: '089b125b-d338-482a-9a09-e2622ac9f8d4' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/following/requests/list.ts b/src/server/api/endpoints/following/requests/list.ts index 78f937bb0b..4afd448516 100644 --- a/src/server/api/endpoints/following/requests/list.ts +++ b/src/server/api/endpoints/following/requests/list.ts @@ -11,7 +11,33 @@ export const meta = { requireCredential: true as const, - kind: 'read:following' + kind: 'read:following', + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + follower: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + }, + followee: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + } + } + } + } }; export default define(meta, async (ps, user) => { diff --git a/src/server/api/endpoints/games/reversi/games.ts b/src/server/api/endpoints/games/reversi/games.ts index 7267157e0e..fa8bf20353 100644 --- a/src/server/api/endpoints/games/reversi/games.ts +++ b/src/server/api/endpoints/games/reversi/games.ts @@ -26,6 +26,113 @@ export const meta = { validator: $.optional.bool, default: false } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + startedAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + isStarted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isEnded: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + form1: { + type: 'any' as const, + optional: false as const, nullable: true as const + }, + form2: { + type: 'any' as const, + optional: false as const, nullable: true as const + }, + user1Accepted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + }, + user2Accepted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + }, + user1Id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + user2Id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + user1: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + }, + user2: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + }, + winnerId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id' + }, + winner: { + type: 'object' as const, + optional: false as const, nullable: true as const, + ref: 'User' + }, + surrendered: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id' + }, + black: { + type: 'number' as const, + optional: false as const, nullable: true as const + }, + bw: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + isLlotheo: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + }, + canPutEverywhere: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + loopedBoard: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + } + } + } } }; diff --git a/src/server/api/endpoints/games/reversi/games/show.ts b/src/server/api/endpoints/games/reversi/games/show.ts index ea2776b16f..75599885c9 100644 --- a/src/server/api/endpoints/games/reversi/games/show.ts +++ b/src/server/api/endpoints/games/reversi/games/show.ts @@ -20,6 +20,125 @@ export const meta = { code: 'NO_SUCH_GAME', id: 'f13a03db-fae1-46c9-87f3-43c8165419e1' }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + startedAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + isStarted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isEnded: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + form1: { + type: 'any' as const, + optional: false as const, nullable: true as const + }, + form2: { + type: 'any' as const, + optional: false as const, nullable: true as const + }, + user1Accepted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + }, + user2Accepted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false + }, + user1Id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + user2Id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + user1: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + }, + user2: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + }, + winnerId: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id' + }, + winner: { + type: 'object' as const, + optional: false as const, nullable: true as const, + ref: 'User' + }, + surrendered: { + type: 'string' as const, + optional: false as const, nullable: true as const, + format: 'id' + }, + black: { + type: 'number' as const, + optional: false as const, nullable: true as const + }, + bw: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + isLlotheo: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + }, + canPutEverywhere: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + loopedBoard: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + board: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'any' as const, + optional: false as const, nullable: false as const + } + }, + turn: { + type: 'any' as const, + optional: false as const, nullable: false as const + } + } + } } }; diff --git a/src/server/api/endpoints/games/reversi/invitations.ts b/src/server/api/endpoints/games/reversi/invitations.ts index 93ea1bd58e..6a73bdf0c4 100644 --- a/src/server/api/endpoints/games/reversi/invitations.ts +++ b/src/server/api/endpoints/games/reversi/invitations.ts @@ -4,7 +4,48 @@ import { ReversiMatchings } from '../../../../../models'; export const meta = { tags: ['games'], - requireCredential: true as const + requireCredential: true as const, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + createdAt: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'date-time' + }, + parentId: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + parent: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + }, + childId: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + child: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' + } + } + } + } }; export default define(meta, async (ps, user) => { diff --git a/src/server/api/endpoints/i/get-word-muted-notes-count.ts b/src/server/api/endpoints/i/get-word-muted-notes-count.ts index e88d697bfd..a69ebc286a 100644 --- a/src/server/api/endpoints/i/get-word-muted-notes-count.ts +++ b/src/server/api/endpoints/i/get-word-muted-notes-count.ts @@ -9,6 +9,17 @@ export const meta = { kind: 'read:account', params: { + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + count: { + type: 'number' as const, + optional: false as const, nullable: false as const + } + } } }; diff --git a/src/server/api/endpoints/i/page-likes.ts b/src/server/api/endpoints/i/page-likes.ts index 7f44df85db..9a83cc1d43 100644 --- a/src/server/api/endpoints/i/page-likes.ts +++ b/src/server/api/endpoints/i/page-likes.ts @@ -29,6 +29,23 @@ export const meta = { untilId: { validator: $.optional.type(ID), }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + page: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Page' + } + } } }; diff --git a/src/server/api/endpoints/i/pages.ts b/src/server/api/endpoints/i/pages.ts index f55f228d80..3fc00e370a 100644 --- a/src/server/api/endpoints/i/pages.ts +++ b/src/server/api/endpoints/i/pages.ts @@ -29,6 +29,16 @@ export const meta = { untilId: { validator: $.optional.type(ID), }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Page' + } } }; diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts index 59b2f23e3d..e13873f601 100644 --- a/src/server/api/endpoints/i/pin.ts +++ b/src/server/api/endpoints/i/pin.ts @@ -44,6 +44,12 @@ export const meta = { code: 'ALREADY_PINNED', id: '8b18c2b7-68fe-4edb-9892-c0cbaeb6c913' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/i/read-announcement.ts b/src/server/api/endpoints/i/read-announcement.ts index 070e49eed0..4a4a021af9 100644 --- a/src/server/api/endpoints/i/read-announcement.ts +++ b/src/server/api/endpoints/i/read-announcement.ts @@ -7,6 +7,11 @@ import { AnnouncementReads, Announcements, Users } from '../../../../models'; import { publishMainStream } from '../../../../services/stream'; export const meta = { + desc: { + 'ja-JP': '指定したアナウンスを既読にします。', + 'en-US': 'Marks the specified announcement as read.' + }, + tags: ['account'], requireCredential: true as const, diff --git a/src/server/api/endpoints/i/unpin.ts b/src/server/api/endpoints/i/unpin.ts index e1ea3a6295..6f06e38598 100644 --- a/src/server/api/endpoints/i/unpin.ts +++ b/src/server/api/endpoints/i/unpin.ts @@ -32,6 +32,12 @@ export const meta = { code: 'NO_SUCH_NOTE', id: '454170ce-9d63-4a43-9da1-ea10afe81e21' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts index 3d7f1fa76f..a1faf8f1c2 100644 --- a/src/server/api/endpoints/i/update.ts +++ b/src/server/api/endpoints/i/update.ts @@ -196,6 +196,12 @@ export const meta = { code: 'NO_SUCH_PAGE', id: '8e01b590-7eb9-431b-a239-860e086c408e' }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'User' } }; diff --git a/src/server/api/endpoints/i/user-group-invites.ts b/src/server/api/endpoints/i/user-group-invites.ts index 9885082a49..4c5105fa7b 100644 --- a/src/server/api/endpoints/i/user-group-invites.ts +++ b/src/server/api/endpoints/i/user-group-invites.ts @@ -29,6 +29,27 @@ export const meta = { untilId: { validator: $.optional.type(ID), }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + group: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'UserGroup' + } + } + } } }; diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index 3b647e21cd..c2f4190e1c 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -26,6 +26,14 @@ export const meta = { type: 'object' as const, optional: false as const, nullable: false as const, properties: { + maintainerName: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + maintainerEmail: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, version: { type: 'string' as const, optional: false as const, nullable: false as const, @@ -37,31 +45,43 @@ export const meta = { optional: false as const, nullable: false as const, description: 'The name of this instance.', }, - description: { + uri: { type: 'string' as const, optional: false as const, nullable: false as const, + format: 'url', + example: 'https://misskey.example.com' + }, + description: { + type: 'string' as const, + optional: false as const, nullable: true as const, description: 'The description of this instance.', }, - announcements: { + langs: { type: 'array' as const, optional: false as const, nullable: false as const, items: { - type: 'object' as const, - optional: false as const, nullable: false as const, - properties: { - title: { - type: 'string' as const, - optional: false as const, nullable: false as const, - description: 'The title of the announcement.', - }, - text: { - type: 'string' as const, - optional: false as const, nullable: false as const, - description: 'The text of the announcement. (can be HTML)', - }, - } - }, - description: 'The announcements of this instance.', + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + tosUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + repositoryUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'https://github.com/syuilo/misskey' + }, + feedbackUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'https://github.com/syuilo/misskey/issues/new' + }, + secure: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + default: false }, disableRegistration: { type: 'boolean' as const, @@ -78,6 +98,330 @@ export const meta = { optional: false as const, nullable: false as const, description: 'Whether disabled GTL.', }, + driveCapacityPerLocalUserMb: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + driveCapacityPerRemoteUserMb: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + cacheRemoteFiles: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + proxyRemoteFiles: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + enableHcaptcha: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hcaptchaSiteKey: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + enableRecaptcha: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + recaptchaSiteKey: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + swPublickey: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + mascotImageUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: '/assets/ai.png' + }, + bannerUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + errorImageUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'https://xn--931a.moe/aiart/yubitun.png' + }, + iconUrl: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + maxNoteTextLength: { + type: 'number' as const, + optional: false as const, nullable: false as const, + default: 500 + }, + emojis: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + aliases: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + category: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + host: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + url: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'url' + } + } + } + }, + requireSetup: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + example: false + }, + enableEmail: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + enableTwitterIntegration: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + enableGithubIntegration: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + enableDiscordIntegration: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + enableServiceWorker: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + proxyAccountName: { + type: 'string' as const, + optional: false as const, nullable: true as const + }, + features: { + type: 'object' as const, + optional: true as const, nullable: false as const, + properties: { + registration: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + localTimeLine: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + globalTimeLine: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + elasticsearch: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hcaptcha: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + recaptcha: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + objectStorage: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + twitter: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + github: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + discord: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + serviceWorker: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + miauth: { + type: 'boolean' as const, + optional: true as const, nullable: false as const, + default: true + }, + } + }, + userStarForReactionFallback: { + type: 'boolean' as const, + optional: true as const, nullable: false as const, + }, + pinnedUsers: { + type: 'array' as const, + optional: true as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + hiddenTags: { + type: 'array' as const, + optional: true as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + blockedHosts: { + type: 'array' as const, + optional: true as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + hcaptchaSecretKey: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + recaptchaSecretKey: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + proxyAccountId: { + type: 'string' as const, + optional: true as const, nullable: true as const, + format: 'id' + }, + twitterConsumerKey: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + twitterConsumerSecret: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + githubClientId: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + githubClientSecret: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + discordClientId: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + discordClientSecret: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + summaryProxy: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + email: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + smtpSecure: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + smtpHost: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + smtpPort: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + smtpUser: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + smtpPass: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + swPrivateKey: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + useObjectStorage: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + objectStorageBaseUrl: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStorageBucket: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStoragePrefix: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStorageEndpoint: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStorageRegion: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStoragePort: { + type: 'number' as const, + optional: true as const, nullable: true as const + }, + objectStorageAccessKey: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStorageSecretKey: { + type: 'string' as const, + optional: true as const, nullable: true as const + }, + objectStorageUseSSL: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + objectStorageUseProxy: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + }, + objectStorageSetPublicRead: { + type: 'boolean' as const, + optional: true as const, nullable: false as const + } } } }; diff --git a/src/server/api/endpoints/miauth/gen-token.ts b/src/server/api/endpoints/miauth/gen-token.ts index a5fa194008..0634debb1e 100644 --- a/src/server/api/endpoints/miauth/gen-token.ts +++ b/src/server/api/endpoints/miauth/gen-token.ts @@ -32,6 +32,17 @@ export const meta = { validator: $.arr($.str).unique(), }, }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + token: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + } + } }; export default define(meta, async (ps, user) => { diff --git a/src/server/api/endpoints/my/apps.ts b/src/server/api/endpoints/my/apps.ts index 348cbfc9f8..2ca882fd6d 100644 --- a/src/server/api/endpoints/my/apps.ts +++ b/src/server/api/endpoints/my/apps.ts @@ -22,6 +22,55 @@ export const meta = { validator: $.optional.num.min(0), default: 0 } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + name: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + callbackUrl: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + permission: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + }, + secret: { + type: 'string' as const, + optional: true as const, nullable: false as const + }, + isAuthorized: { + type: 'object' as const, + optional: true as const, nullable: false as const, + properties: { + appId: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + userId: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + } + } + } + } } }; diff --git a/src/server/api/endpoints/notes/polls/recommendation.ts b/src/server/api/endpoints/notes/polls/recommendation.ts index a915c95a3f..93c9ff08ca 100644 --- a/src/server/api/endpoints/notes/polls/recommendation.ts +++ b/src/server/api/endpoints/notes/polls/recommendation.ts @@ -23,6 +23,16 @@ export const meta = { validator: $.optional.num.min(0), default: 0 } + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'Note' + } } }; diff --git a/src/server/api/endpoints/notes/state.ts b/src/server/api/endpoints/notes/state.ts index b41b56162c..b8b17820ee 100644 --- a/src/server/api/endpoints/notes/state.ts +++ b/src/server/api/endpoints/notes/state.ts @@ -21,6 +21,21 @@ export const meta = { 'en-US': 'Target note ID.' } } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + isFavorited: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isWatching: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + } + } } }; diff --git a/src/server/api/endpoints/notifications/create.ts b/src/server/api/endpoints/notifications/create.ts index 6267699e90..e447a32e0b 100644 --- a/src/server/api/endpoints/notifications/create.ts +++ b/src/server/api/endpoints/notifications/create.ts @@ -3,6 +3,10 @@ import define from '../../define'; import { createNotification } from '../../../../services/create-notification'; export const meta = { + desc: { + 'ja-JP': '通知を作成します。' + }, + tags: ['notifications'], requireCredential: true as const, diff --git a/src/server/api/endpoints/promo/read.ts b/src/server/api/endpoints/promo/read.ts index 9ce253374b..57eb0681e5 100644 --- a/src/server/api/endpoints/promo/read.ts +++ b/src/server/api/endpoints/promo/read.ts @@ -7,6 +7,11 @@ import { PromoReads } from '../../../../models'; import { genId } from '../../../../misc/gen-id'; export const meta = { + desc: { + 'ja-JP': '指定したノートのプロモーションを既読にします。', + 'en-US': 'Marks the promotion for the specified note as read.' + }, + tags: ['notes'], requireCredential: true as const, diff --git a/src/server/api/endpoints/room/show.ts b/src/server/api/endpoints/room/show.ts index e8af68956d..a12d9b8f26 100644 --- a/src/server/api/endpoints/room/show.ts +++ b/src/server/api/endpoints/room/show.ts @@ -7,7 +7,7 @@ import { toPunyNullable } from '../../../../misc/convert-host'; export const meta = { desc: { - 'ja-JP': '指定した部屋の情報を取得します。', + 'ja-JP': '指定したユーザーの部屋の情報を取得します。', }, tags: ['room'], @@ -38,6 +38,83 @@ export const meta = { code: 'NO_SUCH_USER', id: '7ad3fa3e-5e12-42f0-b23a-f3d13f10ee4b' } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + roomType: { + type: 'string' as const, + optional: false as const, nullable: false as const, + enum: ['default', 'washitsu'] + }, + furnitures: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + type: { + type: 'string' as const, + optional: false as const, nullable: false as const + }, + props: { + type: 'object' as const, + optional: true as const, nullable: false as const, + description: 'Properties vary depending on the furniture' + }, + position: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + x: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + y: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + z: { + type: 'number' as const, + optional: false as const, nullable: false as const + } + } + }, + rotation: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + x: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + y: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + z: { + type: 'number' as const, + optional: false as const, nullable: false as const + } + } + } + } + } + }, + carpetColor: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'hex', + example: '#85CAF0' + } + } } }; diff --git a/src/server/api/endpoints/room/update.ts b/src/server/api/endpoints/room/update.ts index 3022b96b1d..af8b80be9a 100644 --- a/src/server/api/endpoints/room/update.ts +++ b/src/server/api/endpoints/room/update.ts @@ -46,5 +46,6 @@ export default define(meta, async (ps, user) => { // Publish meUpdated event publishMainStream(user.id, 'meUpdated', iObj); + // TODO: レスポンスがおかしいと思う by YuzuRyo61 return iObj; }); diff --git a/src/server/api/endpoints/stats.ts b/src/server/api/endpoints/stats.ts index 955a791948..33d6af515b 100644 --- a/src/server/api/endpoints/stats.ts +++ b/src/server/api/endpoints/stats.ts @@ -6,6 +6,7 @@ export const meta = { requireCredential: false as const, desc: { + 'ja-JP': 'インスタンスの統計を取得します。', 'en-US': 'Get the instance\'s statistics' }, @@ -43,6 +44,14 @@ export const meta = { optional: false as const, nullable: false as const, description: 'The count of federated instances.', }, + driveUsageLocal: { + type: 'number' as const, + optional: false as const, nullable: false as const + }, + driveUsageRemote: { + type: 'number' as const, + optional: false as const, nullable: false as const + } } } }; diff --git a/src/server/api/endpoints/sw/register.ts b/src/server/api/endpoints/sw/register.ts index 4253c9557e..ceb70a9274 100644 --- a/src/server/api/endpoints/sw/register.ts +++ b/src/server/api/endpoints/sw/register.ts @@ -21,6 +21,22 @@ export const meta = { publickey: { validator: $.str } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + state: { + type: 'string' as const, + optional: false as const, nullable: false as const, + enum: ['already-subscribed', 'subscribed'] + }, + key: { + type: 'string' as const, + optional: false as const, nullable: false as const + } + } } }; diff --git a/src/server/api/endpoints/username/available.ts b/src/server/api/endpoints/username/available.ts index 89f14d3dc2..6a5146e432 100644 --- a/src/server/api/endpoints/username/available.ts +++ b/src/server/api/endpoints/username/available.ts @@ -3,6 +3,11 @@ import define from '../../define'; import { Users, UsedUsernames } from '../../../../models'; export const meta = { + desc: { + 'ja-JP': 'ユーザーネームが使用されていないかをチェックします。', + 'en-US': 'Check if the username is being used.' + }, + tags: ['users'], requireCredential: false as const, @@ -11,6 +16,18 @@ export const meta = { username: { validator: $.use(Users.validateLocalUsername) } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + available: { + type: 'boolean' as const, + optional: false as const, nullable: false as const, + description: 'Returns true if the username is not used.' + } + } } }; diff --git a/src/server/api/endpoints/users.ts b/src/server/api/endpoints/users.ts index 1c16472578..354d7dc70b 100644 --- a/src/server/api/endpoints/users.ts +++ b/src/server/api/endpoints/users.ts @@ -4,6 +4,11 @@ import { Users } from '../../../models'; import { generateMutedUserQueryForUsers } from '../common/generate-muted-user-query'; export const meta = { + desc: { + 'ja-JP': 'ユーザー一覧を表示します。', + 'en-US': 'Display the user list.' + }, + tags: ['users'], requireCredential: false as const, @@ -69,7 +74,7 @@ export default define(meta, async (ps, me) => { switch (ps.state) { case 'admin': query.andWhere('user.isAdmin = TRUE'); break; case 'moderator': query.andWhere('user.isModerator = TRUE'); break; - case 'adminOrModerator': query.andWhere('user.isAdmin = TRUE OR isModerator = TRUE'); break; + case 'adminOrModerator': query.andWhere('user.isAdmin = TRUE OR user.isModerator = TRUE'); break; case 'alive': query.andWhere('user.updatedAt > :date', { date: new Date(Date.now() - 1000 * 60 * 60 * 24 * 5) }); break; } diff --git a/src/server/api/endpoints/users/lists/update.ts b/src/server/api/endpoints/users/lists/update.ts index 600d834f9e..3ced871ae8 100644 --- a/src/server/api/endpoints/users/lists/update.ts +++ b/src/server/api/endpoints/users/lists/update.ts @@ -34,6 +34,12 @@ export const meta = { } }, + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'UserList', + }, + errors: { noSuchList: { message: 'No such list.', diff --git a/src/server/api/endpoints/users/relation.ts b/src/server/api/endpoints/users/relation.ts index 086e9bd1ea..1beb925398 100644 --- a/src/server/api/endpoints/users/relation.ts +++ b/src/server/api/endpoints/users/relation.ts @@ -19,6 +19,93 @@ export const meta = { 'ja-JP': 'ユーザーID (配列でも可)' } } + }, + + res: { + oneOf: [ + { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + isFollowing: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hasPendingFollowRequestFromYou: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hasPendingFollowRequestToYou: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isFollowed: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isBlocking: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isBlocked: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isMuted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + } + } + }, + { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + isFollowing: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hasPendingFollowRequestFromYou: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + hasPendingFollowRequestToYou: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isFollowed: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isBlocking: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isBlocked: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + }, + isMuted: { + type: 'boolean' as const, + optional: false as const, nullable: false as const + } + } + } + } + ] } }; diff --git a/src/server/api/openapi/gen-spec.ts b/src/server/api/openapi/gen-spec.ts index 78e4810376..5185696675 100644 --- a/src/server/api/openapi/gen-spec.ts +++ b/src/server/api/openapi/gen-spec.ts @@ -13,7 +13,7 @@ export function genOpenapiSpec(lang = 'ja-JP') { version: 'v1', title: 'Misskey API', description: getDescription(lang), - 'x-logo': { url: '/assets/api-doc.png' } + 'x-logo': { url: '/static-assets/api-doc.png' } }, externalDocs: { @@ -180,7 +180,7 @@ export function genOpenapiSpec(lang = 'ja-JP') { } }, '403': { - description: 'Forbiddon error', + description: 'Forbidden error', content: { 'application/json': { schema: { diff --git a/src/server/api/openapi/schemas.ts b/src/server/api/openapi/schemas.ts index b96d1f457f..99107c986e 100644 --- a/src/server/api/openapi/schemas.ts +++ b/src/server/api/openapi/schemas.ts @@ -16,6 +16,10 @@ import { packedPageSchema } from '../../../models/repositories/page'; import { packedUserGroupSchema } from '../../../models/repositories/user-group'; import { packedNoteFavoriteSchema } from '../../../models/repositories/note-favorite'; import { packedChannelSchema } from '../../../models/repositories/channel'; +import { packedAntennaSchema } from '../../../models/repositories/antenna'; +import { packedClipSchema } from '../../../models/repositories/clip'; +import { packedFederationInstanceSchema } from '../../../models/repositories/federation-instance'; +import { packedQueueCountSchema } from '../../../models/repositories/queue'; export function convertSchemaToOpenApiSchema(schema: Schema) { const res: any = schema; @@ -84,4 +88,8 @@ export const schemas = { Hashtag: convertSchemaToOpenApiSchema(packedHashtagSchema), Page: convertSchemaToOpenApiSchema(packedPageSchema), Channel: convertSchemaToOpenApiSchema(packedChannelSchema), + QueueCount: convertSchemaToOpenApiSchema(packedQueueCountSchema), + Antenna: convertSchemaToOpenApiSchema(packedAntennaSchema), + Clip: convertSchemaToOpenApiSchema(packedClipSchema), + FederationInstance: convertSchemaToOpenApiSchema(packedFederationInstanceSchema), }; diff --git a/src/server/web/index.ts b/src/server/web/index.ts index a1d79100a6..7b0b82eedf 100644 --- a/src/server/web/index.ts +++ b/src/server/web/index.ts @@ -28,7 +28,8 @@ const markdown = MarkdownIt({ html: true }); -const client = `${__dirname}/../../client/`; +const staticAssets = `${__dirname}/../../../assets/`; +const assets = `${__dirname}/../../assets/`; // Init app const app = new Koa(); @@ -57,24 +58,31 @@ const router = new Router(); //#region static assets +router.get('/static-assets/(.*)', async ctx => { + await send(ctx as any, ctx.path.replace('/static-assets/', ''), { + root: staticAssets, + maxage: ms('7 days'), + }); +}); + router.get('/assets/(.*)', async ctx => { - await send(ctx as any, ctx.path, { - root: client, + await send(ctx as any, ctx.path.replace('/assets/', ''), { + root: assets, maxage: ms('7 days'), }); }); // Apple touch icon router.get('/apple-touch-icon.png', async ctx => { - await send(ctx as any, '/assets/apple-touch-icon.png', { - root: client + await send(ctx as any, '/apple-touch-icon.png', { + root: assets }); }); // ServiceWorker router.get('/sw.js', async ctx => { - await send(ctx as any, `/assets/sw.${config.version}.js`, { - root: client + await send(ctx as any, `/sw.${config.version}.js`, { + root: assets }); }); @@ -82,8 +90,8 @@ router.get('/sw.js', async ctx => { router.get('/manifest.json', require('./manifest')); router.get('/robots.txt', async ctx => { - await send(ctx as any, '/assets/robots.txt', { - root: client + await send(ctx as any, '/robots.txt', { + root: assets }); }); @@ -91,8 +99,8 @@ router.get('/robots.txt', async ctx => { // Docs router.get('/api-doc', async ctx => { - await send(ctx as any, '/assets/redoc.html', { - root: client + await send(ctx as any, '/redoc.html', { + root: staticAssets }); }); diff --git a/src/server/web/manifest.ts b/src/server/web/manifest.ts index 36c901d267..2f3eb89030 100644 --- a/src/server/web/manifest.ts +++ b/src/server/web/manifest.ts @@ -1,5 +1,5 @@ import * as Koa from 'koa'; -import * as manifest from '../../client/assets/manifest.json'; +import * as manifest from '../../../assets/client/manifest.json'; import { fetchMeta } from '../../misc/fetch-meta'; module.exports = async (ctx: Koa.Context) => { diff --git a/src/server/web/style.css b/src/server/web/style.css index 6ab2c2154a..43fbe1ab06 100644 --- a/src/server/web/style.css +++ b/src/server/web/style.css @@ -3,17 +3,20 @@ html { color: var(--fg); } -#ini { +#splash { position: fixed; - z-index: 1; + z-index: 10000; top: 0; left: 0; - width: 100%; - height: 100%; + width: 100vw; + height: 100vh; cursor: wait; + background-color: var(--bg); + opacity: 1; + transition: opacity 0.5s ease; } -#ini > svg { +#splash > img { position: absolute; top: 0; right: 0; @@ -22,16 +25,5 @@ html { margin: auto; width: 64px; height: 64px; - animation: ini 0.6s infinite linear; - color: var(--accent); - fill: currentColor; -} - -@keyframes ini { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } + pointer-events: none; } diff --git a/src/server/web/views/base.pug b/src/server/web/views/base.pug index 1b053438dc..9a5c674242 100644 --- a/src/server/web/views/base.pug +++ b/src/server/web/views/base.pug @@ -44,8 +44,6 @@ html | JavaScriptを有効にしてください br | Please turn on your JavaScript - div#ini. - <svg viewBox="0 0 50 50"> - <path d="M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z" /> - </svg> + div#splash + img(src='/favicon.ico') block content diff --git a/src/server/web/views/info.pug b/src/server/web/views/info.pug index eed69fc99e..323dce974f 100644 --- a/src/server/web/views/info.pug +++ b/src/server/web/views/info.pug @@ -66,7 +66,7 @@ html main header h1 Misskey Version #{version} - img(src='/assets/misskey-php-like-logo.png' alt='') + img(src='/static-assets/misskey-php-like-logo.png' alt='') table tr th Instance diff --git a/src/services/send-email.ts b/src/services/send-email.ts index c716b36715..4814808392 100644 --- a/src/services/send-email.ts +++ b/src/services/send-email.ts @@ -8,7 +8,7 @@ export const logger = new Logger('email'); export async function sendEmail(to: string, subject: string, html: string, text: string) { const meta = await fetchMeta(true); - const iconUrl = `${config.url}/assets/mi-white.png`; + const iconUrl = `${config.url}/static-assets/mi-white.png`; const emailSettingUrl = `${config.url}/settings/email`; const enableAuth = meta.smtpUser != null && meta.smtpUser !== ''; diff --git a/webpack.config.ts b/webpack.config.ts index cc5264ceb1..c530cf335c 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -147,7 +147,7 @@ module.exports = { }), ], output: { - path: __dirname + '/built/client/assets', + path: __dirname + '/built/assets', filename: `[name].${meta.version}.js`, publicPath: `/assets/`, pathinfo: false, diff --git a/yarn.lock b/yarn.lock index e4893b61e7..d5fece07ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -123,17 +123,17 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.4.tgz#340211b0da94a351a6f10e63671fa727333d13ab" integrity sha512-uvoOulWHhI+0+1f9L4BoozY7U5cIkZ9PgJqvb041d6vypgUmtVPG4vmGm4pSggjl8BELzvHyUeJSUyEMY6b+qA== -"@babel/plugin-transform-runtime@7.13.6": - version "7.13.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.6.tgz#c11c806f023d2065bbcc9b751702f4008245951c" - integrity sha512-QsTomUTIeOdYrNsOMJRSp2QzGvB1KYD4ePCC8Mei2SuoHScncYS3h1E9PR5gDL7buJmcqIHrWyH6B5GZMgDrRg== +"@babel/plugin-transform-runtime@7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.9.tgz#744d3103338a0d6c90dee0497558150b490cee07" + integrity sha512-XCxkY/wBI6M6Jj2mlWxkmqbKPweRanszWbF3Tyut+hKh+PHcuIH/rSr/7lmmE7C3WW+HSIm2GT+d5jwmheuB0g== dependencies: "@babel/helper-module-imports" "^7.12.13" "@babel/helper-plugin-utils" "^7.13.0" babel-plugin-polyfill-corejs2 "^0.1.4" babel-plugin-polyfill-corejs3 "^0.1.3" babel-plugin-polyfill-regenerator "^0.1.2" - semver "7.0.0" + semver "^6.3.0" "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2": version "7.12.13" @@ -778,24 +778,10 @@ dependencies: "@types/koa" "*" -"@types/koa@*": - version "2.11.6" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.6.tgz#b7030caa6b44af801c2aea13ba77d74aff7484d5" - integrity sha512-BhyrMj06eQkk04C97fovEDQMpLpd2IxCB4ecitaXwOKGq78Wi2tooaDOWOFGajPk8IkQOAtMppApgSVkYe1F/A== - dependencies: - "@types/accepts" "*" - "@types/content-disposition" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/http-errors" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - -"@types/koa@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.0.tgz#6356c48521c0941103b6fcfb97bb01426a99d56d" - integrity sha512-hNs1Z2lX+R5sZroIy/WIGbPlH/719s/Nd5uIjSIAdHn9q+g7z6mxOnhwMjK1urE4/NUP0SOoYUOD4MnvD9FRNw== +"@types/koa@*", "@types/koa@2.13.1": + version "2.13.1" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.1.tgz#e29877a6b5ad3744ab1024f6ec75b8cbf6ec45db" + integrity sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q== dependencies: "@types/accepts" "*" "@types/content-disposition" "*" @@ -874,12 +860,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*": - version "14.14.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.13.tgz#9e425079799322113ae8477297ae6ef51b8e0cdf" - integrity sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ== - -"@types/node@14.14.31": +"@types/node@*", "@types/node@14.14.31": version "14.14.31" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== @@ -1172,49 +1153,48 @@ dependencies: "@types/node" "*" -"@typescript-eslint/parser@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.14.2.tgz#31e216e4baab678a56e539f9db9862e2542c98d0" - integrity sha512-ipqSP6EuUsMu3E10EZIApOJgWSpcNXeKZaFeNKQyzqxnQl8eQCbV+TSNsl+s2GViX2d18m1rq3CWgnpOxDPgHg== +"@typescript-eslint/parser@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.16.1.tgz#3bbd3234dd3c5b882b2bcd9899bc30e1e1586d2a" + integrity sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg== dependencies: - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.16.1" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/typescript-estree" "4.16.1" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.14.2.tgz#64cbc9ca64b60069aae0c060b2bf81163243b266" - integrity sha512-cuV9wMrzKm6yIuV48aTPfIeqErt5xceTheAgk70N1V4/2Ecj+fhl34iro/vIssJlb7XtzcaD07hWk7Jk0nKghg== +"@typescript-eslint/scope-manager@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz#244e2006bc60cfe46987e9987f4ff49c9e3f00d5" + integrity sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw== dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/visitor-keys" "4.16.1" -"@typescript-eslint/types@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.14.2.tgz#d96da62be22dc9dc6a06647f3633815350fb3174" - integrity sha512-LltxawRW6wXy4Gck6ZKlBD05tCHQUj4KLn4iR69IyRiDHX3d3NCAhO+ix5OR2Q+q9bjCrHE/HKt+riZkd1At8Q== +"@typescript-eslint/types@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.16.1.tgz#5ba2d3e38b1a67420d2487519e193163054d9c15" + integrity sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA== -"@typescript-eslint/typescript-estree@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.2.tgz#9c5ebd8cae4d7b014f890acd81e8e17f309c9df9" - integrity sha512-ESiFl8afXxt1dNj8ENEZT12p+jl9PqRur+Y19m0Z/SPikGL6rqq4e7Me60SU9a2M28uz48/8yct97VQYaGl0Vg== +"@typescript-eslint/typescript-estree@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz#c2fc46b05a48fbf8bbe8b66a63f0a9ba04b356f1" + integrity sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg== dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/visitor-keys" "4.16.1" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" - lodash "^4.17.15" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.2.tgz#997cbe2cb0690e1f384a833f64794e98727c70c6" - integrity sha512-KBB+xLBxnBdTENs/rUgeUKO0UkPBRs2vD09oMRRIkj5BEN8PX1ToXV532desXfpQnZsYTyLLviS7JrPhdL154w== +"@typescript-eslint/visitor-keys@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz#d7571fb580749fae621520deeb134370bbfc7293" + integrity sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w== dependencies: - "@typescript-eslint/types" "4.14.2" + "@typescript-eslint/types" "4.16.1" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -2831,10 +2811,10 @@ color@^3.1.3: color-convert "^1.9.1" color-string "^1.5.4" -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== colormin@^1.0.5: version "1.1.2" @@ -8316,12 +8296,12 @@ postcss-zindex@^2.0.1: postcss "^5.0.4" uniqs "^2.0.0" -postcss@8.2.6: - version "8.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" - integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== +postcss@8.2.7, postcss@^8.2.4: + version "8.2.7" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.7.tgz#48ed8d88b4de10afa0dfd1c3f840aa57b55c4d47" + integrity sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw== dependencies: - colorette "^1.2.1" + colorette "^1.2.2" nanoid "^3.1.20" source-map "^0.6.1" @@ -8344,15 +8324,6 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3 source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.4: - version "8.2.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.5.tgz#3c75149ada4e93db9521913654c0144517f77c9a" - integrity sha512-wMcb7BpDcm3gxQOQx46NDNT36Kk0Ao6PJLLI2ed5vehbbbxCEuslSQzbQ2sfSKy+gkYxhWcGWSeaK+gwm4KIZg== - dependencies: - colorette "^1.2.1" - nanoid "^3.1.20" - source-map "^0.6.1" - postgres-array@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" @@ -10108,10 +10079,10 @@ syslog-pro@1.0.0: dependencies: moment "^2.22.2" -systeminformation@4.34.6: - version "4.34.6" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-4.34.6.tgz#d5d592fdba9dd77224551d3ae3a35ae49aff9a0d" - integrity sha512-JWcrnfBqkws9R12jTYF7+zl59bdhL/+sw6efHZllIdtztrRfyykL4Bbr0aTRHQqDP0tjFhZOlRHifPSSmdqmFg== +systeminformation@5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.6.1.tgz#3726ee88b0ba50ec2268f64242fbd9a93df6546c" + integrity sha512-5wJlHB4fzcrNENaqDVzy51+NlL0QRrLQ6pSRQOKl4k8v4jvYTlJUxChZYwpphk3McUw9iWPRcjdpKbTEj2Ucuw== syuilo-password-strength@0.0.1: version "0.0.1" @@ -10973,10 +10944,10 @@ vue-router@4.0.4: resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.4.tgz#ad9b4b7bbdad622407b4ff189b1646f48c1e9053" integrity sha512-uN6PDEaYdU9aRO7mU+Dkr1uaY49hV3fucEDG/Vre/Qj8ct3RoJS16vcPrvKVzn69zDDjBV5b9Xw7fZA9r6b/Iw== -vue-style-loader@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" - integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== +vue-style-loader@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" + integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== dependencies: hash-sum "^1.0.2" loader-utils "^1.0.2"