diff --git a/CHANGELOG.md b/CHANGELOG.md index 63a77218c..37e3d52a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,20 @@ You should also include the user name that made the change. --> +## 12.112.3 (2022/07/09) + +### Improvements +- Make active email validation configurable + +### Bugfixes +- Server: Fix Attempts to update all notifications @mei23 + +## 12.112.2 (2022/07/08) + +### Bugfixes +- Fix Docker doesn't work @mei23 + Still not working on arm64 environment. (See 12.112.0) + ## 12.112.1 (2022/07/07) same as 12.112.0 @@ -21,6 +35,10 @@ same as 12.112.0 - ハイライトがみつけるに統合されました - カスタム絵文字ページはインスタンス情報ページに統合されました - 連合ページはインスタンス情報ページに統合されました +- メンション一覧ページは通知一覧ページに統合されました +- ダイレクト投稿一覧ページは通知一覧ページに統合されました +- メニューからアンテナタイムラインを表示する方法は廃止され、タイムライン上部のアイコンからアクセスするようになりました +- メニューからリストタイムラインを表示する方法は廃止され、タイムライン上部のアイコンからアクセスするようになりました ### Improvements - Server: Allow GET method for some endpoints @syuilo @@ -28,6 +46,7 @@ same as 12.112.0 - Server: Add rate limit to i/notifications @tamaina - Client: Improve control panel @syuilo - Client: Show warning in control panel when there is an unresolved abuse report @syuilo +- Client: Statusbars @syuilo - Client: Add instance-cloud widget @syuilo - Client: Add rss-ticker widget @syuilo - Client: Removing entries from a clip @futchitwo diff --git a/Dockerfile b/Dockerfile index 33d5faad1..81dc72637 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,24 @@ -FROM node:18.0.0-alpine3.15 AS base +FROM node:16.15.1-bullseye AS builder ARG NODE_ENV=production WORKDIR /misskey -ENV BUILD_DEPS autoconf automake file g++ gcc libc-dev libtool make nasm pkgconfig python3 zlib-dev git - -FROM base AS builder - COPY . ./ -RUN apk add --no-cache $BUILD_DEPS && \ - git submodule update --init && \ - yarn install && \ - yarn build && \ - rm -rf .git +RUN apt-get update +RUN apt-get install -y build-essential +RUN git submodule update --init +RUN yarn install +RUN yarn build +RUN rm -rf .git -FROM base AS runner +FROM node:16.15.1-bullseye-slim AS runner -RUN apk add --no-cache \ - ffmpeg \ - tini +WORKDIR /misskey -ENTRYPOINT ["/sbin/tini", "--"] +RUN apt-get update +RUN apt-get install -y ffmpeg tini COPY --from=builder /misskey/node_modules ./node_modules COPY --from=builder /misskey/built ./built @@ -32,5 +28,5 @@ COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node COPY . ./ ENV NODE_ENV=production +ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["npm", "run", "migrateandstart"] - diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 3eecc3b57..0e278bead 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -886,6 +886,7 @@ cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いためア beta: "ベータ" enableAutoSensitive: "自動NSFW判定" enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、インスタンスによっては自動で設定されることがあります。" +activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。" _sensitiveMediaDetection: description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てることができます。サーバーの負荷が少し増えます。" diff --git a/package.json b/package.json index 549308a89..236240f06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "12.112.1", + "version": "12.113.0-beta.2", "codename": "indigo", "repository": { "type": "git", diff --git a/packages/backend/migration/1657346559800-active-email-validation.js b/packages/backend/migration/1657346559800-active-email-validation.js new file mode 100644 index 000000000..f8e03eeb0 --- /dev/null +++ b/packages/backend/migration/1657346559800-active-email-validation.js @@ -0,0 +1,11 @@ +export class activeEmailValidation1657346559800 { + name = 'activeEmailValidation1657346559800' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "enableActiveEmailValidation" boolean NOT NULL DEFAULT true`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableActiveEmailValidation"`); + } +} diff --git a/packages/backend/package.json b/packages/backend/package.json index 8f7cd34a8..c5a73dc5f 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -67,7 +67,7 @@ "koa-send": "5.0.1", "koa-slow": "2.1.0", "koa-views": "7.0.2", - "mfm-js": "0.22.1", + "mfm-js": "0.23.0-canary.1", "mime-types": "2.1.35", "misskey-js": "0.0.14", "mocha": "10.0.0", @@ -104,7 +104,7 @@ "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", "style-loader": "3.3.1", - "summaly": "2.6.0", + "summaly": "2.7.0", "syslog-pro": "1.0.0", "systeminformation": "5.11.22", "tinycolor2": "1.4.2", diff --git a/packages/backend/src/misc/gen-identicon.ts b/packages/backend/src/misc/gen-identicon.ts index 9b30e5dbd..322ffee22 100644 --- a/packages/backend/src/misc/gen-identicon.ts +++ b/packages/backend/src/misc/gen-identicon.ts @@ -7,28 +7,31 @@ import { WriteStream } from 'node:fs'; import * as p from 'pureimage'; import gen from 'random-seed'; -const size = 256; // px +const size = 128; // px const n = 5; // resolution -const margin = (size / n); +const margin = (size / 4); const colors = [ - '#e57373', - '#F06292', - '#BA68C8', - '#9575CD', - '#7986CB', - '#64B5F6', - '#4FC3F7', - '#4DD0E1', - '#4DB6AC', - '#81C784', - '#8BC34A', - '#AFB42B', - '#F57F17', - '#FF5722', - '#795548', - '#455A64', + ['#FF512F', '#DD2476'], + ['#FF61D2', '#FE9090'], + ['#72FFB6', '#10D164'], + ['#FD8451', '#FFBD6F'], + ['#305170', '#6DFC6B'], + ['#00C0FF', '#4218B8'], + ['#009245', '#FCEE21'], + ['#0100EC', '#FB36F4'], + ['#FDABDD', '#374A5A'], + ['#38A2D7', '#561139'], + ['#121C84', '#8278DA'], + ['#5761B2', '#1FC5A8'], + ['#FFDB01', '#0E197D'], + ['#FF3E9D', '#0E1F40'], + ['#766eff', '#00d4ff'], + ['#9bff6e', '#00d4ff'], + ['#ff6e94', '#00d4ff'], + ['#ffa96e', '#00d4ff'], + ['#ffa96e', '#ff009d'], + ['#ffdd6e', '#ff009d'], ]; -const bg = '#e9e9e9'; const actualSize = size - (margin * 2); const cellSize = actualSize / n; @@ -42,11 +45,17 @@ export function genIdenticon(seed: string, stream: WriteStream): Promise { const canvas = p.make(size, size, undefined); const ctx = canvas.getContext('2d'); + const bgColors = colors[rand(colors.length)]; + + const bg = ctx.createLinearGradient(0, 0, size, size); + bg.addColorStop(0, bgColors[0]); + bg.addColorStop(1, bgColors[1]); + ctx.fillStyle = bg; ctx.beginPath(); ctx.fillRect(0, 0, size, size); - ctx.fillStyle = colors[rand(colors.length)]; + ctx.fillStyle = '#ffffff'; // side bitmap (filled by false) const side: boolean[][] = new Array(sideN); diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts index ebc082dfb..d33ff2519 100644 --- a/packages/backend/src/models/entities/meta.ts +++ b/packages/backend/src/models/entities/meta.ts @@ -454,4 +454,9 @@ export class Meta { default: false, }) public enableIpLogging: boolean; + + @Column('boolean', { + default: true, + }) + public enableActiveEmailValidation: boolean; } diff --git a/packages/backend/src/queue/processors/db/export-custom-emojis.ts b/packages/backend/src/queue/processors/db/export-custom-emojis.ts index 8ce1d0527..3da887cda 100644 --- a/packages/backend/src/queue/processors/db/export-custom-emojis.ts +++ b/packages/backend/src/queue/processors/db/export-custom-emojis.ts @@ -8,7 +8,7 @@ import { queueLogger } from '../../logger.js'; import { addFile } from '@/services/drive/add-file.js'; import { format as dateFormat } from 'date-fns'; import { Users, Emojis } from '@/models/index.js'; -import { } from '@/queue/types.js'; +import { } from '@/queue/types.js'; import { createTemp, createTempDir } from '@/misc/create-temp.js'; import { downloadUrl } from '@/misc/download-url.js'; import config from '@/config/index.js'; diff --git a/packages/backend/src/remote/activitypub/models/question.ts b/packages/backend/src/remote/activitypub/models/question.ts index 034501572..f0321fdf2 100644 --- a/packages/backend/src/remote/activitypub/models/question.ts +++ b/packages/backend/src/remote/activitypub/models/question.ts @@ -1,6 +1,6 @@ import config from '@/config/index.js'; import Resolver from '../resolver.js'; -import { IObject, IQuestion, isQuestion } from '../type.js'; +import { IObject, IQuestion, isQuestion } from '../type.js'; import { apLogger } from '../logger.js'; import { Notes, Polls } from '@/models/index.js'; import { IPoll } from '@/models/entities/poll.js'; diff --git a/packages/backend/src/remote/activitypub/renderer/like.ts b/packages/backend/src/remote/activitypub/renderer/like.ts index da1bfe6e8..00fb72e8a 100644 --- a/packages/backend/src/remote/activitypub/renderer/like.ts +++ b/packages/backend/src/remote/activitypub/renderer/like.ts @@ -8,7 +8,7 @@ import renderEmoji from './emoji.js'; export const renderLike = async (noteReaction: NoteReaction, note: Note) => { const reaction = noteReaction.reaction; - const object = { + const object = { type: 'Like', id: `${config.url}/likes/${noteReaction.id}`, actor: `${config.url}/users/${noteReaction.userId}`, diff --git a/packages/backend/src/server/api/api-handler.ts b/packages/backend/src/server/api/api-handler.ts index 34ff970b4..ec71ddd2c 100644 --- a/packages/backend/src/server/api/api-handler.ts +++ b/packages/backend/src/server/api/api-handler.ts @@ -68,11 +68,11 @@ export default (endpoint: IEndpoint, ctx: Koa.Context) => new Promise((res } try { - UserIps.insert({ + UserIps.createQueryBuilder().insert().values({ createdAt: new Date(), userId: user.id, ip: ip, - }); + }).orIgnore(true).execute(); } catch { } } diff --git a/packages/backend/src/server/api/common/read-notification.ts b/packages/backend/src/server/api/common/read-notification.ts index 8c4ba41a3..17dd8e6f0 100644 --- a/packages/backend/src/server/api/common/read-notification.ts +++ b/packages/backend/src/server/api/common/read-notification.ts @@ -27,7 +27,7 @@ export async function readNotificationByQuery( userId: User['id'], query: Record ) { - const notificationIds = await Notifications.find({ + const notificationIds = await Notifications.findBy({ ...query, notifieeId: userId, isRead: false, diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index cb50e128a..874611968 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -324,6 +324,10 @@ export const meta = { type: 'boolean', optional: true, nullable: false, }, + enableActiveEmailValidation: { + type: 'boolean', + optional: true, nullable: false, + }, }, }, } as const; @@ -421,5 +425,6 @@ export default define(meta, paramDef, async (ps, me) => { deeplAuthKey: instance.deeplAuthKey, deeplIsPro: instance.deeplIsPro, enableIpLogging: instance.enableIpLogging, + enableActiveEmailValidation: instance.enableActiveEmailValidation, }; }); diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index cc32e73c5..f14aa4105 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -101,6 +101,7 @@ export const paramDef = { objectStorageSetPublicRead: { type: 'boolean' }, objectStorageS3ForcePathStyle: { type: 'boolean' }, enableIpLogging: { type: 'boolean' }, + enableActiveEmailValidation: { type: 'boolean' }, }, required: [], } as const; @@ -421,6 +422,10 @@ export default define(meta, paramDef, async (ps, me) => { set.enableIpLogging = ps.enableIpLogging; } + if (ps.enableActiveEmailValidation !== undefined) { + set.enableActiveEmailValidation = ps.enableActiveEmailValidation; + } + await db.transaction(async transactionalEntityManager => { const metas = await transactionalEntityManager.find(Meta, { order: { diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index 122120f27..3c2f1cea0 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -214,7 +214,7 @@ export default define(meta, paramDef, async (ps, _user, token) => { const newDescription = profileUpdates.description === undefined ? profile.description : profileUpdates.description; if (newName != null) { - const tokens = mfm.parsePlain(newName); + const tokens = mfm.parseSimple(newName); emojis = emojis.concat(extractCustomEmojisFromMfm(tokens!)); } diff --git a/packages/backend/src/services/push-notification.ts b/packages/backend/src/services/push-notification.ts index 5c3bafbb3..393a23d05 100644 --- a/packages/backend/src/services/push-notification.ts +++ b/packages/backend/src/services/push-notification.ts @@ -64,6 +64,7 @@ export async function pushNotification(u type, body: type === 'notification' ? truncateNotification(body as Packed<'Notification'>) : body, userId, + dateTime: (new Date()).getTime(), }), { proxy: config.proxy, }).catch((err: any) => { diff --git a/packages/backend/src/services/validate-email-for-account.ts b/packages/backend/src/services/validate-email-for-account.ts index 132168fb3..b5fa99b93 100644 --- a/packages/backend/src/services/validate-email-for-account.ts +++ b/packages/backend/src/services/validate-email-for-account.ts @@ -1,34 +1,37 @@ import { validate as validateEmail } from 'deep-email-validator'; import { UserProfiles } from '@/models/index.js'; +import { fetchMeta } from '@/misc/fetch-meta.js'; export async function validateEmailForAccount(emailAddress: string): Promise<{ available: boolean; reason: null | 'used' | 'format' | 'disposable' | 'mx' | 'smtp'; }> { + const meta = await fetchMeta(); + const exist = await UserProfiles.countBy({ emailVerified: true, email: emailAddress, }); - const validated = await validateEmail({ + const validated = meta.enableActiveEmailValidation ? await validateEmail({ email: emailAddress, validateRegex: true, validateMx: true, validateTypo: false, // TLDを見ているみたいだけどclubとか弾かれるので validateDisposable: true, // 捨てアドかどうかチェック validateSMTP: false, // 日本だと25ポートが殆どのプロバイダーで塞がれていてタイムアウトになるので - }); + }) : { valid: true }; const available = exist === 0 && validated.valid; return { available, reason: available ? null : - exist !== 0 ? 'used' : - validated.reason === 'regex' ? 'format' : - validated.reason === 'disposable' ? 'disposable' : - validated.reason === 'mx' ? 'mx' : - validated.reason === 'smtp' ? 'smtp' : - null, + exist !== 0 ? 'used' : + validated.reason === 'regex' ? 'format' : + validated.reason === 'disposable' ? 'disposable' : + validated.reason === 'mx' ? 'mx' : + validated.reason === 'smtp' ? 'smtp' : + null, }; } diff --git a/packages/backend/test/get-file-info.ts b/packages/backend/test/get-file-info.ts index 6ceeb352a..09378fec8 100644 --- a/packages/backend/test/get-file-info.ts +++ b/packages/backend/test/get-file-info.ts @@ -14,6 +14,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 0, md5: 'd41d8cd98f00b204e9800998ecf8427e', @@ -33,6 +34,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 25360, md5: '091b3f259662aa31e2ffef4519951168', @@ -52,6 +54,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 1868, md5: '08189c607bea3b952704676bb3c979e0', @@ -71,6 +74,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 2248, md5: '32c47a11555675d9267aee1a86571e7e', @@ -90,6 +94,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 3772, md5: 'f73535c3e1e27508885b69b10cf6e991', @@ -109,6 +114,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 505, md5: 'b6f52b4b021e7b92cdd04509c7267965', @@ -129,6 +135,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 544, md5: '4b7a346cde9ccbeb267e812567e33397', @@ -148,6 +155,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 75933, md5: '268c5dde99e17cf8fe09f1ab3f97df56', @@ -167,6 +175,7 @@ describe('Get file info', () => { delete info.warnings; delete info.blurhash; delete info.sensitive; + delete info.porn; assert.deepStrictEqual(info, { size: 12624, md5: '68d5b2d8d1d1acbbce99203e3ec3857e', diff --git a/packages/backend/yarn.lock b/packages/backend/yarn.lock index 4fdbc8335..554677c4b 100644 --- a/packages/backend/yarn.lock +++ b/packages/backend/yarn.lock @@ -303,12 +303,7 @@ pluralize "^8.0.0" yaml-ast-parser "0.0.43" -"@sindresorhus/is@^3.0.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-3.1.2.tgz#548650de521b344e3781fbdb0ece4aa6f729afb8" - integrity sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ== - -"@sindresorhus/is@^4.6.0": +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== @@ -1736,19 +1731,6 @@ cacheable-lookup@^5.0.3: resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz#049fdc59dffdd4fc285e8f4f82936591bd59fec3" integrity sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w== -cacheable-request@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" - integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^2.0.0" - cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" @@ -3520,19 +3502,19 @@ google-protobuf@^3.9.2: resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.20.1.tgz#1b255c2b59bcda7c399df46c65206aa3c7a0ce8b" integrity sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw== -got@11.5.1: - version "11.5.1" - resolved "https://registry.yarnpkg.com/got/-/got-11.5.1.tgz#bf098a270fe80b3fb88ffd5a043a59ebb0a391db" - integrity sha512-reQEZcEBMTGnujmQ+Wm97mJs/OK6INtO6HmLI+xt3+9CvnRwWjXutUvb2mqr+Ao4Lu05Rx6+udx9sOQAmExMxA== +got@11.8.5: + version "11.8.5" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== dependencies: - "@sindresorhus/is" "^3.0.0" + "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" "@types/responselike" "^1.0.0" cacheable-lookup "^5.0.3" - cacheable-request "^7.0.1" + cacheable-request "^7.0.2" decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.0" + http2-wrapper "^1.0.0-beta.5.2" lowercase-keys "^2.0.0" p-cancelable "^2.0.0" responselike "^2.0.0" @@ -3734,7 +3716,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -http2-wrapper@^1.0.0-beta.5.0: +http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== @@ -4874,12 +4856,12 @@ methods@^1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -mfm-js@0.22.1: - version "0.22.1" - resolved "https://registry.yarnpkg.com/mfm-js/-/mfm-js-0.22.1.tgz#ad5f0b95cc903ca5a5e414e2edf64ac4648dc8c2" - integrity sha512-UV5zvDKlWPpBFeABhyCzuOTJ3RwrNrmVpJ+zz/dFX6D/ntEywljgxkfsLamcy0ZSwUAr0O+WQxGHvAwyxUgsAQ== +mfm-js@0.23.0-canary.1: + version "0.23.0-canary.1" + resolved "https://registry.yarnpkg.com/mfm-js/-/mfm-js-0.23.0-canary.1.tgz#1b7b7635f18bed9776054406b72e6bd613c8d0eb" + integrity sha512-SkMrW1rQAv+mFGtLKN9DSv6vxSREDu8ChmkBl1Ch5sQfp47BhuvcRg5EKGmt3WAQRAOylXYMg8wVYR7C5BHKeA== dependencies: - twemoji-parser "14.0.x" + twemoji-parser "14.0.0" micromatch@^4.0.0, micromatch@^4.0.2: version "4.0.2" @@ -5380,11 +5362,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" @@ -6974,15 +6951,15 @@ style-loader@3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -summaly@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/summaly/-/summaly-2.6.0.tgz#aaac80eb8ae88b130318f44d9b98da9c2ccb328c" - integrity sha512-wIv6fL3aeFfXcQoZISzeUfNUgD3u8Hwx8Rg0awZliQhans62w23K3nDezwfvmYAQCgXs6e0EF7jtGmJv/qeVTA== +summaly@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/summaly/-/summaly-2.7.0.tgz#ccccec0477938edea13cb34412a33e705398c0c4" + integrity sha512-pEz9LL8Gp0oPIQfn6TrnBCcv/HkFE14hxhH3W6LPGdopXlPXjRcMlDMJaO+VupUNMOGaMjCsjq7+0rWnu8sp7w== dependencies: cheerio "0.22.0" debug "4.3.3" escape-regexp "0.0.1" - got "11.5.1" + got "11.8.5" html-entities "2.3.2" iconv-lite "0.6.3" jschardet "3.0.0" @@ -7310,7 +7287,7 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -twemoji-parser@14.0.0, twemoji-parser@14.0.x: +twemoji-parser@14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-14.0.0.tgz#13dabcb6d3a261d9efbf58a1666b182033bf2b62" integrity sha512-9DUOTGLOWs0pFWnh1p6NF+C3CkQ96PWmEFwhOVmT3WbecRC+68AIqpsnJXygfkFcp4aXbOp8Dwbhh/HQgvoRxA== diff --git a/packages/client/package.json b/packages/client/package.json index f65e70870..7743e9e9b 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -40,7 +40,7 @@ "json5": "2.2.1", "katex": "0.15.6", "matter-js": "0.18.0", - "mfm-js": "0.22.1", + "mfm-js": "0.23.0-canary.1", "misskey-js": "0.0.14", "mocha": "10.0.0", "ms": "2.1.3", diff --git a/packages/client/src/components/drive-window.vue b/packages/client/src/components/drive-window.vue index 5bbfca83c..51ea2b501 100644 --- a/packages/client/src/components/drive-window.vue +++ b/packages/client/src/components/drive-window.vue @@ -13,7 +13,7 @@ - diff --git a/packages/client/src/components/mfm.ts b/packages/client/src/components/mfm.ts index f7dbca0d3..14ec5ffc8 100644 --- a/packages/client/src/components/mfm.ts +++ b/packages/client/src/components/mfm.ts @@ -47,7 +47,7 @@ export default defineComponent({ render() { if (this.text == null || this.text === '') return; - const ast = (this.plain ? mfm.parsePlain : mfm.parse)(this.text, { fnNameList: MFM_TAGS }); + const ast = (this.plain ? mfm.parseSimple : mfm.parse)(this.text, { fnNameList: MFM_TAGS }); const validTime = (t: string | null | undefined) => { if (t == null) return null; diff --git a/packages/client/src/components/visibility-picker.vue b/packages/client/src/components/visibility-picker.vue index c717c3a46..7fe55858c 100644 --- a/packages/client/src/components/visibility-picker.vue +++ b/packages/client/src/components/visibility-picker.vue @@ -105,7 +105,7 @@ function choose(visibility: typeof misskey.noteVisibilities[number]): void { } &.active { - color: #fff; + color: var(--fgOnAccent); background: var(--accent); } diff --git a/packages/client/src/components/widgets.vue b/packages/client/src/components/widgets.vue index 85b8ae0ed..0a9769e19 100644 --- a/packages/client/src/components/widgets.vue +++ b/packages/client/src/components/widgets.vue @@ -4,7 +4,7 @@
- + {{ $ts.add }} {{ $ts.close }} @@ -26,79 +26,91 @@ - + -