Skip to content

Commit 02de861

Browse files
committed
Merge remote-tracking branch 'refs/remotes/misskey-dev/develop' into develop
# Conflicts: # CHANGELOG.md # package.json # packages/frontend/package.json
2 parents 3683ac8 + e1b580c commit 02de861

52 files changed

Lines changed: 4853 additions & 4713 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/skills/add-i18n-key/SKILL.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ _settings:
2626
general: "全般"
2727
appearance: "外観"
2828

29-
# パラメータ付き (ICU MessageFormat 互換)
29+
# パラメータ付き (単純なプレースホルダ置換)
30+
# ICU MessageFormat の plural / select / number / date などは非対応
31+
# 使えるのは `{name}` のような単純な置換のみ
3032
greeting: "こんにちは、{name}さん"
3133
```
3234

.npmrc

Lines changed: 0 additions & 3 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,28 @@
11
## Unreleased
22

33
### General
4+
-
45

56
### Client
6-
- Enhance: デッキでハッシュタグタイムラインを登録できるように
7-
- Fix: チャンネルの共同管理者情報が不正な形式の場合にチャンネルページが開けない問題を修正
7+
-
88

99
### Server
10+
- Enhance: リモートノートクリーニングジョブのスキップ処理のパフォーマンス改善
11+
12+
13+
## 2026.5.4
14+
15+
### General
16+
- セキュリティに関する修正
17+
18+
### Client
19+
- Fix: ビルドに失敗することがある問題を修正
20+
21+
22+
## 2026.5.3
23+
24+
### General
25+
- Fix: Dockerで起動に失敗する問題を修正
1026

1127

1228
## 2026.5.2
@@ -19,7 +35,8 @@
1935
### General
2036
- Enhance: Unicode 17.0 に収録されている絵文字の処理・表示に対応
2137
- Fluent Emojiや端末ネイティブの絵文字を利用している場合は、最新の絵文字に対応しておらず正しく表示できない可能性があります。絵文字が表示できない場合は、表示に使用する絵文字をTwemojiに切り替えてご利用ください。
22-
- 投稿通知設定したユーザーをリストで見ることができるように
38+
- Enhance: 投稿通知設定したユーザーをリストで見ることができるように
39+
- 依存関係の更新
2340

2441
### Client
2542
- Enhance: テーマのプレビュー時、リロードせずにもとのテーマに戻せるように
@@ -30,6 +47,8 @@
3047
- Fix: リスト編集画面におけるユーザー追加時のユーザー選択ダイアログにおいて、自身のアカウントが検索結果の一覧に表示されない問題を修正
3148
- Fix: デッキのカラムから開いたアンテナ・リストの編集ウィンドウを、"ポップアウト"、"新しいタブで表示"、"リンクをコピー"した場合に誤ったリンクが与えられる問題を修正
3249
- Fix: チャンネルの作成ロールポリシーにて、ヘッダーにロールポリシーの値が表示されない問題を修正
50+
- Enhance: デッキでハッシュタグタイムラインを登録できるように
51+
- Fix: チャンネルの共同管理者情報が不正な形式の場合にチャンネルページが開けない問題を修正
3352

3453
### Server
3554
- Enhance: RSA 署名処理のオフロード

CONTRIBUTING.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,14 @@ pnpm migrate
189189

190190
After finishing the migration, you can proceed.
191191

192+
#### Cloudflare tunnel
193+
Cloudflare tunnelを使うとローカルのMisskeyサーバーをインターネットに公開できます。
194+
HTTPSでしか動作しない機能を検証したい時や、スマホなど別のデバイスからローカルのMisskeyサーバーを検証したい時に便利です。
195+
196+
##### Cloudflare warpと併用する際のtips
197+
198+
> cloudflared (Cloudflare Tunnel) は region1.v2.argotunnel.com / region2.v2.argotunnel.com に QUIC/HTTP2 でアウトバウンド接続するのですが、WARP を有効化するとこのトラフィックが WARP 経由になってループ/切断します。これら 2 ホストを WARP のトンネル除外(split tunnel)に追加することで、cloudflared だけは WARP をバイパスして直接 Cloudflare エッジへ接続できるようになります。
199+
192200
### Start developing
193201
During development, it is useful to use the
194202
```

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner
7474
ARG UID="991"
7575
ARG GID="991"
7676

77+
ENV PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false
78+
7779
RUN apt-get update \
7880
&& apt-get install -y --no-install-recommends \
7981
ffmpeg tini curl libjemalloc-dev libjemalloc2 \

package.json

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"name": "misskey",
3-
"version": "2026.5.2-alpha.0-tp.0",
3+
"version": "2026.5.4-tp.0",
44
"codename": "nasubi",
55
"repository": {
66
"type": "git",
77
"url": "https://github.com/type4ny-project/misskey.git"
88
},
9-
"packageManager": "pnpm@10.33.2",
9+
"packageManager": "pnpm@11.1.2",
1010
"workspaces": [
1111
"packages/misskey-js",
1212
"packages/i18n",
@@ -58,45 +58,34 @@
5858
"cleanall": "pnpm clean-all"
5959
},
6060
"dependencies": {
61-
"cssnano": "7.1.7",
61+
"cssnano": "8.0.1",
6262
"esbuild": "0.28.0",
6363
"execa": "9.6.1",
6464
"ignore-walk": "8.0.0",
6565
"js-yaml": "4.1.1",
6666
"portless": "0.12.0",
67-
"postcss": "8.5.10",
68-
"tar": "7.5.13",
69-
"terser": "5.46.2"
67+
"postcss": "8.5.14",
68+
"tar": "7.5.15",
69+
"terser": "5.47.1"
7070
},
7171
"devDependencies": {
7272
"@eslint/js": "9.39.4",
7373
"@misskey-dev/eslint-plugin": "2.1.0",
7474
"@types/js-yaml": "4.0.9",
75-
"@types/node": "24.12.2",
76-
"@typescript-eslint/eslint-plugin": "8.59.0",
77-
"@typescript-eslint/parser": "8.59.0",
75+
"@types/node": "24.12.4",
76+
"@typescript-eslint/eslint-plugin": "8.59.3",
77+
"@typescript-eslint/parser": "8.59.3",
7878
"@typescript/native-preview": "7.0.0-dev.20260426.1",
7979
"cross-env": "10.1.0",
80-
"cypress": "15.14.1",
80+
"cypress": "15.15.0",
8181
"eslint": "9.39.4",
82-
"globals": "17.5.0",
82+
"globals": "17.6.0",
8383
"ncp": "2.0.0",
84-
"pnpm": "10.33.2",
85-
"start-server-and-test": "3.0.2",
84+
"pnpm": "11.1.2",
85+
"start-server-and-test": "3.0.5",
8686
"typescript": "5.9.3"
8787
},
8888
"optionalDependencies": {
8989
"@tensorflow/tfjs-core": "4.22.0"
90-
},
91-
"pnpm": {
92-
"overrides": {
93-
"@aiscript-dev/aiscript-languageserver": "-",
94-
"chokidar": "5.0.0",
95-
"lodash": "4.18.1"
96-
},
97-
"ignoredBuiltDependencies": [
98-
"@sentry-internal/node-cpu-profiler",
99-
"exifreader"
100-
]
10190
}
10291
}

packages/backend/package.json

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454
"utf-8-validate": "6.0.6"
5555
},
5656
"dependencies": {
57-
"@aws-sdk/client-s3": "3.1037.0",
58-
"@aws-sdk/lib-storage": "3.1037.0",
57+
"@aws-sdk/client-s3": "3.1047.0",
58+
"@aws-sdk/lib-storage": "3.1047.0",
5959
"@fastify/accepts": "5.0.4",
6060
"@fastify/cors": "11.2.0",
6161
"@fastify/express": "4.0.5",
@@ -67,25 +67,25 @@
6767
"@misskey-dev/emoji-data": "17.0.3",
6868
"@misskey-dev/sharp-read-bmp": "1.2.0",
6969
"@misskey-dev/summaly": "5.3.0",
70-
"@napi-rs/canvas": "0.1.100",
71-
"@nestjs/common": "11.1.19",
72-
"@nestjs/core": "11.1.19",
73-
"@nestjs/testing": "11.1.19",
74-
"@oxc-project/runtime": "0.127.0",
70+
"@napi-rs/canvas": "1.0.0",
71+
"@nestjs/common": "11.1.21",
72+
"@nestjs/core": "11.1.21",
73+
"@nestjs/testing": "11.1.21",
74+
"@oxc-project/runtime": "0.130.0",
7575
"@peertube/http-signature": "1.7.0",
76-
"@sentry/node": "10.50.0",
77-
"@sentry/profiling-node": "10.50.0",
76+
"@sentry/node": "10.53.1",
77+
"@sentry/profiling-node": "10.53.1",
7878
"@simplewebauthn/server": "13.3.0",
79-
"@sinonjs/fake-timers": "15.3.2",
80-
"@smithy/node-http-handler": "4.6.1",
79+
"@sinonjs/fake-timers": "15.4.0",
80+
"@smithy/node-http-handler": "4.7.2",
8181
"accepts": "1.3.8",
8282
"ajv": "8.20.0",
8383
"archiver": "7.0.1",
8484
"async-mutex": "0.5.0",
8585
"bcryptjs": "3.0.3",
8686
"blurhash": "2.0.5",
8787
"body-parser": "2.2.2",
88-
"bullmq": "5.76.2",
88+
"bullmq": "5.76.8",
8989
"cacheable-lookup": "7.0.0",
9090
"chalk": "5.6.2",
9191
"chalk-template": "1.1.2",
@@ -100,68 +100,68 @@
100100
"file-type": "22.0.1",
101101
"fluent-ffmpeg": "2.1.3",
102102
"form-data": "4.0.5",
103-
"got": "15.0.3",
103+
"got": "15.0.5",
104104
"hpagent": "1.2.0",
105105
"http-link-header": "1.1.3",
106106
"i18n": "workspace:*",
107107
"ioredis": "5.10.1",
108108
"ip-cidr": "4.0.2",
109-
"ipaddr.js": "2.3.0",
109+
"ipaddr.js": "2.4.0",
110110
"is-svg": "6.1.0",
111111
"json5": "2.2.3",
112112
"jsonld": "9.0.0",
113113
"juice": "11.1.1",
114-
"meilisearch": "0.57.0",
114+
"meilisearch": "0.58.0",
115115
"mfm-js": "0.26.0",
116116
"mime-types": "3.0.2",
117117
"misskey-js": "workspace:*",
118118
"misskey-reversi": "workspace:*",
119119
"ms": "3.0.0-canary.202508261828",
120-
"nanoid": "5.1.9",
120+
"nanoid": "5.1.11",
121121
"nested-property": "4.0.0",
122122
"node-fetch": "3.3.2",
123123
"node-html-parser": "7.1.0",
124-
"nodemailer": "8.0.6",
124+
"nodemailer": "8.0.7",
125125
"nsfwjs": "4.3.0",
126126
"oauth2orize": "1.12.0",
127127
"oauth2orize-pkce": "0.1.2",
128128
"os-utils": "0.0.14",
129129
"otpauth": "9.5.1",
130130
"pg": "8.20.0",
131131
"pkce-challenge": "6.0.0",
132-
"probe-image-size": "7.2.3",
132+
"probe-image-size": "7.3.0",
133133
"promise-limit": "2.7.0",
134134
"qrcode": "1.5.4",
135135
"random-seed": "0.3.0",
136136
"ratelimiter": "3.4.1",
137-
"re2": "1.24.0",
137+
"re2": "1.24.1",
138138
"reflect-metadata": "0.2.2",
139139
"rename": "1.0.4",
140140
"rss-parser": "3.13.0",
141141
"rxjs": "7.8.2",
142-
"sanitize-html": "2.17.3",
142+
"sanitize-html": "2.17.4",
143143
"secure-json-parse": "4.1.0",
144-
"semver": "7.7.4",
144+
"semver": "7.8.0",
145145
"sharp": "0.33.5",
146146
"slacc": "0.1.5",
147147
"strict-event-emitter-types": "2.0.0",
148148
"stringz": "2.1.0",
149-
"systeminformation": "5.31.5",
149+
"systeminformation": "5.31.6",
150150
"tinycolor2": "1.6.0",
151151
"tmp": "0.2.5",
152-
"tsc-alias": "1.8.16",
153-
"typeorm": "0.3.28",
152+
"tsc-alias": "1.8.17",
153+
"typeorm": "0.3.30",
154154
"ulid": "3.0.2",
155155
"vary": "1.1.2",
156156
"web-push": "3.6.7",
157-
"ws": "8.20.0",
157+
"ws": "8.20.1",
158158
"xev": "3.0.2"
159159
},
160160
"devDependencies": {
161161
"@kitajs/ts-html-plugin": "4.1.4",
162-
"@nestjs/platform-express": "11.1.19",
162+
"@nestjs/platform-express": "11.1.21",
163163
"@rollup/plugin-esm-shim": "0.1.8",
164-
"@sentry/vue": "10.50.0",
164+
"@sentry/vue": "10.53.1",
165165
"@types/accepts": "1.3.7",
166166
"@types/archiver": "7.0.0",
167167
"@types/body-parser": "1.19.6",
@@ -173,7 +173,7 @@
173173
"@types/jsonld": "1.5.15",
174174
"@types/mime-types": "3.0.1",
175175
"@types/ms": "2.1.0",
176-
"@types/node": "24.12.2",
176+
"@types/node": "24.12.4",
177177
"@types/nodemailer": "8.0.0",
178178
"@types/oauth2orize": "1.11.5",
179179
"@types/oauth2orize-pkce": "0.1.2",
@@ -192,9 +192,9 @@
192192
"@types/vary": "1.1.3",
193193
"@types/web-push": "3.6.4",
194194
"@types/ws": "8.18.1",
195-
"@typescript-eslint/eslint-plugin": "8.59.0",
196-
"@typescript-eslint/parser": "8.59.0",
197-
"@vitest/coverage-v8": "4.1.5",
195+
"@typescript-eslint/eslint-plugin": "8.59.3",
196+
"@typescript-eslint/parser": "8.59.3",
197+
"@vitest/coverage-v8": "4.1.6",
198198
"aws-sdk-client-mock": "4.1.0",
199199
"cbor": "10.0.12",
200200
"cross-env": "10.1.0",
@@ -203,11 +203,11 @@
203203
"fkill": "10.0.3",
204204
"js-yaml": "4.1.1",
205205
"pid-port": "2.1.1",
206-
"rolldown": "1.0.0-rc.15",
206+
"rolldown": "1.0.1",
207207
"simple-oauth2": "5.1.0",
208208
"supertest": "7.2.2",
209-
"vite": "8.0.10",
210-
"vitest": "4.1.5",
209+
"vite": "8.0.13",
210+
"vitest": "4.1.6",
211211
"vitest-mock-extended": "4.0.0"
212212
}
213213
}

packages/backend/src/core/AnnouncementService.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,12 @@ export class AnnouncementService {
182182
@bindThis
183183
public async getAnnouncement(announcementId: MiAnnouncement['id'], me: MiUser | null): Promise<Packed<'Announcement'>> {
184184
const announcement = await this.announcementsRepository.findOneByOrFail({ id: announcementId });
185-
if (me) {
186-
if (announcement.userId && announcement.userId !== me.id) {
187-
throw new EntityNotFoundError(this.announcementsRepository.metadata.target, { id: announcementId });
188-
}
189185

186+
if (announcement.userId && (me == null || announcement.userId !== me.id)) {
187+
throw new EntityNotFoundError(this.announcementsRepository.metadata.target, { id: announcementId });
188+
}
189+
190+
if (me) {
190191
const read = await this.announcementReadsRepository.findOneBy({
191192
announcementId: announcement.id,
192193
userId: me.id,

packages/backend/src/core/ChatService.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,27 @@ export class ChatService {
572572
return created;
573573
}
574574

575+
@bindThis
576+
public async hasPermissionToViewRoomInfo(meId: MiUser['id'], room: MiChatRoom) {
577+
if (room.ownerId === meId) {
578+
return true;
579+
}
580+
581+
if (await this.isRoomMember(room, meId)) {
582+
return true;
583+
}
584+
585+
if (await this.chatRoomInvitationsRepository.findOneBy({ roomId: room.id, userId: meId })) {
586+
return true;
587+
}
588+
589+
if (await this.roleService.isModerator({ id: meId })) {
590+
return true;
591+
}
592+
593+
return false;
594+
}
595+
575596
@bindThis
576597
public async hasPermissionToDeleteRoom(meId: MiUser['id'], room: MiChatRoom) {
577598
if (room.ownerId === meId) {

0 commit comments

Comments
 (0)