diff --git a/.github/workflows/get-api-diff.yml b/.github/workflows/get-api-diff.yml index 75a458424e..9dc812061b 100644 --- a/.github/workflows/get-api-diff.yml +++ b/.github/workflows/get-api-diff.yml @@ -54,7 +54,7 @@ jobs: - name: Copy API.json run: cp packages/backend/built/api.json ${{ matrix.api-json-name }} - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: api-artifact path: ${{ matrix.api-json-name }} @@ -67,7 +67,7 @@ jobs: PR_NUMBER: ${{ github.event.number }} run: | echo "$PR_NUMBER" > ./pr_number - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: api-artifact path: pr_number diff --git a/.github/workflows/report-api-diff.yml b/.github/workflows/report-api-diff.yml index 2868d6cc09..309516772f 100644 --- a/.github/workflows/report-api-diff.yml +++ b/.github/workflows/report-api-diff.yml @@ -56,7 +56,7 @@ jobs: - name: Echo full diff run: cat ./api-full.json.diff - name: Upload full diff to Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: api-artifact path: | diff --git a/.github/workflows/test-frontend.yml b/.github/workflows/test-frontend.yml index 50c225189d..e5c461e6d1 100644 --- a/.github/workflows/test-frontend.yml +++ b/.github/workflows/test-frontend.yml @@ -108,12 +108,12 @@ jobs: wait-on: 'http://localhost:61812' headed: true browser: ${{ matrix.browser }} - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: failure() with: name: ${{ matrix.browser }}-cypress-screenshots path: cypress/screenshots - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: always() with: name: ${{ matrix.browser }}-cypress-videos diff --git a/CHANGELOG.md b/CHANGELOG.md index 599bd463fd..67898c604e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ ## 2023.x.x (unreleased) ### Note +- Node.js 20.10.0が最小要件になりました - 絵文字ピッカーにピン留め表示する絵文字設定が「リアクション用」と「絵文字入力用」に分かれました。以前の設定は「リアクション用」として使用されます。 **影響:** @@ -36,8 +37,10 @@ ### Client - Feat: 今日誕生日のフォロー中のユーザーを一覧表示できるウィジェットを追加 -- Feat: データセーバーでコードハイライトの読み込みを削減できるように -- Feat: MFMのアニメーション要素(`tada`, `jelly`, `twitch`, `shake`, `spin`, `jump`, `bounce`, `rainbow`)に `delay` オプションを追加 +- Feat: 画面に雪を降らせられるように +- Enhance: MFMのアニメーション要素(`tada`, `jelly`, `twitch`, `shake`, `spin`, `jump`, `bounce`, `rainbow`)に `delay` オプションを追加 +- Enhance: センシティブと判断されたウェブサイトのサムネイルを非表示に + - ウェブサイトをセンシティブと判断する仕組みが動いていないため、summalyProxyを使用しないと機能しません。 - Enhance: 投稿フォームの絵文字ピッカーをリアクション時に使用するものと同じのを使用するように #12336 #12560 - Enhance: リアクション用ピン留め絵文字と投稿時の絵文字入力用ピン留め絵文字を分けて設定できるように #12560 - Enhance: 絵文字のオートコンプリート機能強化 #12364 @@ -48,16 +51,19 @@ - Enhance: Shareページで投稿を完了すると、親ウィンドウ(親フレーム)にpostMessageするように - Enhance: チャンネル、クリップ、ページ、Play、ギャラリーにURLのコピーボタンを設置 #11305 - Enhance: ノートプレビューに「内容を隠す」が反映されるように +- Enhance: データセーバーでコードハイライトの読み込みを削減できるように - Enhance: データセーバーの適用範囲を個別で設定できるように - 従来のデータセーバーの設定はリセットされます - Enhance: タイムライン上のタブからリスト、アンテナ、チャンネルの管理ページにジャンプできるように - Enhance: ユーザー名、プロフィール、お知らせ、ページの編集画面でMFMや絵文字のオートコンプリートが使用できるように - Enhance: プロフィール、お知らせの編集画面でMFMのプレビューを表示できるように -- Feat: センシティブと判断されたウェブサイトのサムネイルをぼかすように - - ウェブサイトをセンシティブと判断する仕組みが動いていないため、summalyProxyを使用しないと機能しません。 -- fix: 「設定のバックアップ」で一部の項目がバックアップに含まれていなかった問題を修正 -- Fix: ウィジェットのジョブキューにて音声の発音方法変更に追従できていなかったのを修正 #12367 - Enhance: 絵文字の詳細ページに記載される情報を追加 +- Enhance: コードブロックのハイライト機能を利用するには言語を明示的に指定させるように + - MFMでコードブロックを利用する際に意図しないハイライトが起こらないようになりました + - 逆に、MFMでコードハイライトを利用したい際は言語を明示的に指定する必要があります + (例: ` ```js ` → Javascript, ` ```ais ` → AiScript) +- Fix: 「設定のバックアップ」で一部の項目がバックアップに含まれていなかった問題を修正 +- Fix: ウィジェットのジョブキューにて音声の発音方法変更に追従できていなかったのを修正 #12367 - Fix: コードエディタが正しく表示されない問題を修正 - Fix: プロフィールの「ファイル」にセンシティブな画像がある際のデザインを修正 - Fix: 一度に大量の通知が入った際に通知音が音割れする問題を修正 @@ -67,6 +73,7 @@ - Fix: セキュリティ向上のためAiScriptの`Mk:apiExternal`を無効化 - Fix: ノート中の絵文字をタップして「リアクションする」からリアクションした際にリアクションサウンドが鳴らない不具合を修正 - Fix: ノート中のリアクションの表示を微調整 #12650 +- Fix: AiScriptの`readline`が不正な値を返すことがある問題を修正 ### Server - Enhance: MFM `$[ruby ]` が他ソフトウェアと連合されるように @@ -85,6 +92,7 @@ - Fix: 「みつける」が年越し時に壊れる問題を修正 - Fix: アカウントをブロックした際に、自身のユーザーのページでノートが相手に表示される問題を修正 - Fix: モデレーションログがモデレーターは閲覧できないように修正 +- Fix: HTTP Digestヘッダのアルゴリズム部分に大文字の"SHA-256"しか使えない ## 2023.11.1 diff --git a/locales/index.d.ts b/locales/index.d.ts index 48c3daf05a..cd15bd968f 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -128,8 +128,8 @@ export interface Locale { "pinnedEmojisForReactionSettingDescription": string; "pinnedEmojisSettingDescription": string; "emojiPickerDisplay": string; - "copyFromPinnedEmojisForReaction": string; - "copyFromPinnedEmojis": string; + "overwriteFromPinnedEmojisForReaction": string; + "overwriteFromPinnedEmojis": string; "reactionSettingDescription2": string; "rememberNoteVisibility": string; "attachCancel": string; @@ -1182,6 +1182,8 @@ export interface Locale { "reloadRequiredToApplySettings": string; "remainingN": string; "overwriteContentConfirm": string; + "seasonalScreenEffect": string; + "decorate": string; "_announcement": { "forExistingUsers": string; "forExistingUsersDescription": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index daa6a32032..5537db9d56 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -125,8 +125,8 @@ emojiPicker: "絵文字ピッカー" pinnedEmojisForReactionSettingDescription: "リアクション時にピン留め表示する絵文字を設定できます" pinnedEmojisSettingDescription: "絵文字入力時にピン留め表示する絵文字を設定できます" emojiPickerDisplay: "ピッカーの表示" -copyFromPinnedEmojisForReaction: "リアクション設定からコピーする" -copyFromPinnedEmojis: "絵文字設定からコピーする" +overwriteFromPinnedEmojisForReaction: "リアクション設定から上書きする" +overwriteFromPinnedEmojis: "全般設定から上書きする" reactionSettingDescription2: "ドラッグして並び替え、クリックして削除、+を押して追加します。" rememberNoteVisibility: "公開範囲を記憶する" attachCancel: "添付取り消し" @@ -1179,6 +1179,8 @@ code: "コード" reloadRequiredToApplySettings: "設定の反映にはリロードが必要です。" remainingN: "残り: {n}" overwriteContentConfirm: "現在の内容に上書きされますがよろしいですか?" +seasonalScreenEffect: "季節に応じた画面の演出" +decorate: "デコる" _announcement: forExistingUsers: "既存ユーザーのみ" diff --git a/package.json b/package.json index 3057c5d804..6120c07094 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "misskey", - "version": "2023.12.0-beta.4", + "version": "2023.12.0-beta.5", "codename": "nasubi", "repository": { "type": "git", "url": "https://github.com/misskey-dev/misskey.git" }, - "packageManager": "pnpm@8.10.5", + "packageManager": "pnpm@8.12.1", "workspaces": [ "packages/frontend", "packages/backend", @@ -46,10 +46,10 @@ }, "dependencies": { "execa": "8.0.1", - "cssnano": "6.0.1", + "cssnano": "6.0.2", "js-yaml": "4.1.0", "postcss": "8.4.32", - "terser": "5.24.0", + "terser": "5.26.0", "typescript": "5.3.3" }, "devDependencies": { @@ -57,7 +57,7 @@ "@typescript-eslint/parser": "6.14.0", "cross-env": "7.0.3", "cypress": "13.6.1", - "eslint": "8.55.0", + "eslint": "8.56.0", "start-server-and-test": "2.0.3", "ncp": "2.0.0" }, diff --git a/packages/backend/package.json b/packages/backend/package.json index 504cc882ff..8a9871b78c 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "engines": { - "node": ">=18.16.0" + "node": ">=20.10.0" }, "scripts": { "start": "node ./built/boot/entry.js", @@ -90,7 +90,7 @@ "bcryptjs": "2.4.3", "blurhash": "2.0.5", "body-parser": "1.20.2", - "bullmq": "4.15.3", + "bullmq": "4.15.4", "cacheable-lookup": "7.0.0", "cbor": "9.0.1", "chalk": "5.3.0", @@ -107,7 +107,7 @@ "file-type": "18.7.0", "fluent-ffmpeg": "2.1.2", "form-data": "4.0.0", - "got": "13.0.0", + "got": "14.0.0", "happy-dom": "10.0.3", "hpagent": "1.2.0", "http-link-header": "1.1.1", @@ -222,8 +222,8 @@ "@typescript-eslint/parser": "6.14.0", "aws-sdk-client-mock": "3.0.0", "cross-env": "7.0.3", - "eslint": "8.55.0", - "eslint-plugin-import": "2.29.0", + "eslint": "8.56.0", + "eslint-plugin-import": "2.29.1", "execa": "8.0.1", "jest": "29.7.0", "jest-mock": "29.7.0", diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index c6b96b85f0..7a3ca58269 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -74,6 +74,14 @@ export const packedUserLiteSchema = { format: 'url', nullable: false, optional: false, }, + offsetX: { + type: 'number', + nullable: false, optional: true, + }, + offsetY: { + type: 'number', + nullable: false, optional: true, + }, }, }, }, diff --git a/packages/backend/src/server/ActivityPubServerService.ts b/packages/backend/src/server/ActivityPubServerService.ts index 380cdfc34c..2bc7e1136a 100644 --- a/packages/backend/src/server/ActivityPubServerService.ts +++ b/packages/backend/src/server/ActivityPubServerService.ts @@ -138,7 +138,7 @@ export class ActivityPubServerService { return; } - const algo = match[1]; + const algo = match[1].toUpperCase(); const digestValue = match[2]; if (algo !== 'SHA-256') { diff --git a/packages/backend/src/server/FileServerService.ts b/packages/backend/src/server/FileServerService.ts index 11721263d3..0c7fc8cefe 100644 --- a/packages/backend/src/server/FileServerService.ts +++ b/packages/backend/src/server/FileServerService.ts @@ -61,6 +61,9 @@ export class FileServerService { public createServer(fastify: FastifyInstance, options: FastifyPluginOptions, done: (err?: Error) => void) { fastify.addHook('onRequest', (request, reply, done) => { reply.header('Content-Security-Policy', 'default-src \'none\'; img-src \'self\'; media-src \'self\'; style-src \'unsafe-inline\''); + if (process.env.NODE_ENV === 'development') { + reply.header('Access-Control-Allow-Origin', '*'); + } done(); }); diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 4cf4779563..b2ab1eb9ce 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -26,8 +26,8 @@ "@tabler/icons-webfont": "2.44.0", "@vitejs/plugin-vue": "4.5.2", "@vue/compiler-sfc": "3.3.11", - "astring": "1.8.6", "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.0.6", + "astring": "1.8.6", "broadcast-channel": "6.0.0", "browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3", "buraha": "0.0.1", @@ -44,7 +44,7 @@ "escape-regexp": "0.0.1", "estree-walker": "3.0.3", "eventemitter3": "5.0.1", - "gsap": "3.12.3", + "gsap": "3.12.4", "idb-keyval": "6.2.1", "insert-text-at-cursor": "0.3.0", "is-file-animated": "1.0.2", @@ -56,8 +56,8 @@ "punycode": "2.3.1", "rollup": "4.9.0", "sanitize-html": "2.11.0", - "shiki": "0.14.6", "sass": "1.69.5", + "shiki": "0.14.7", "strict-event-emitter-types": "2.0.0", "textarea-caret": "3.1.0", "three": "0.159.0", @@ -69,29 +69,29 @@ "typescript": "5.3.3", "uuid": "9.0.1", "v-code-diff": "1.7.2", - "vite": "5.0.8", + "vite": "5.0.10", "vue": "3.3.11", "vuedraggable": "next" }, "devDependencies": { - "@storybook/addon-actions": "7.6.4", - "@storybook/addon-essentials": "7.6.4", - "@storybook/addon-interactions": "7.6.4", - "@storybook/addon-links": "7.6.4", - "@storybook/addon-storysource": "7.6.4", - "@storybook/addons": "7.6.4", - "@storybook/blocks": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/addon-actions": "7.6.5", + "@storybook/addon-essentials": "7.6.5", + "@storybook/addon-interactions": "7.6.5", + "@storybook/addon-links": "7.6.5", + "@storybook/addon-storysource": "7.6.5", + "@storybook/addons": "7.6.5", + "@storybook/blocks": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/jest": "0.2.3", - "@storybook/manager-api": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/react": "7.6.4", - "@storybook/react-vite": "7.6.4", + "@storybook/manager-api": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/react": "7.6.5", + "@storybook/react-vite": "7.6.5", "@storybook/testing-library": "0.2.2", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", - "@storybook/vue3": "7.6.4", - "@storybook/vue3-vite": "7.6.4", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", + "@storybook/vue3": "7.6.5", + "@storybook/vue3-vite": "7.6.5", "@testing-library/vue": "8.0.1", "@types/escape-regexp": "0.0.3", "@types/estree": "1.0.5", @@ -111,11 +111,12 @@ "acorn": "8.11.2", "cross-env": "7.0.3", "cypress": "13.6.1", - "eslint": "8.55.0", - "eslint-plugin-import": "2.29.0", + "eslint": "8.56.0", + "eslint-plugin-import": "2.29.1", "eslint-plugin-vue": "9.19.2", "fast-glob": "3.3.2", "happy-dom": "10.0.3", + "intersection-observer": "0.12.2", "micromatch": "4.0.5", "msw": "1.3.2", "msw-storybook-addon": "1.10.0", @@ -124,7 +125,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "start-server-and-test": "2.0.3", - "storybook": "7.6.4", + "storybook": "7.6.5", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "summaly": "github:misskey-dev/summaly", "vite-plugin-turbosnap": "1.0.3", diff --git a/packages/frontend/src/boot/common.ts b/packages/frontend/src/boot/common.ts index 728f39962b..b0825ef11c 100644 --- a/packages/frontend/src/boot/common.ts +++ b/packages/frontend/src/boot/common.ts @@ -12,19 +12,16 @@ import { version, ui, lang, updateLocale, locale } from '@/config.js'; import { applyTheme } from '@/scripts/theme.js'; import { isDeviceDarkmode } from '@/scripts/is-device-darkmode.js'; import { i18n, updateI18n } from '@/i18n.js'; -import { confirm, alert, post, popup, toast } from '@/os.js'; import { $i, refreshAccount, login, updateAccount, signout } from '@/account.js'; import { defaultStore, ColdDeviceStorage } from '@/store.js'; import { fetchInstance, instance } from '@/instance.js'; import { deviceKind } from '@/scripts/device-kind.js'; import { reloadChannel } from '@/scripts/unison-reload.js'; -import { reactionPicker } from '@/scripts/reaction-picker.js'; import { getUrlWithoutLoginId } from '@/scripts/login-id.js'; import { getAccountFromId } from '@/scripts/get-account-from-id.js'; import { deckStore } from '@/ui/deck/deck-store.js'; import { miLocalStorage } from '@/local-storage.js'; import { fetchCustomEmojis } from '@/custom-emojis.js'; -import { mainRouter } from '@/router.js'; export async function common(createVue: () => App) { console.info(`Misskey v${version}`); diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts index 88e2f83895..e3fd6d5fca 100644 --- a/packages/frontend/src/boot/main-boot.ts +++ b/packages/frontend/src/boot/main-boot.ts @@ -20,6 +20,7 @@ import { mainRouter } from '@/router.js'; import { initializeSw } from '@/scripts/initialize-sw.js'; import { deckStore } from '@/ui/deck/deck-store.js'; import { emojiPicker } from '@/scripts/emoji-picker.js'; +import { SnowfallEffect } from '@/scripts/snowfall-effect.js'; export async function mainBoot() { const { isClientUpdated } = await common(() => createApp( @@ -75,6 +76,13 @@ export async function mainBoot() { }, }; + if (defaultStore.state.enableSeasonalScreenEffect) { + const month = new Date().getMonth() + 1; + if (month === 12 || month === 1) { + new SnowfallEffect().render(); + } + } + if ($i) { // only add post shortcuts if logged in hotkeys['p|n'] = post; diff --git a/packages/frontend/src/components/MkCode.vue b/packages/frontend/src/components/MkCode.vue index cb0eef0549..2c016e4d7c 100644 --- a/packages/frontend/src/components/MkCode.vue +++ b/packages/frontend/src/components/MkCode.vue @@ -9,7 +9,8 @@ SPDX-License-Identifier: AGPL-3.0-only {{ code }} - + +
{{ code }}