From 9eaca966a480fc2b0a3da503d413994c5bf0cbe0 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 2 Jun 2023 09:13:41 +0900 Subject: [PATCH 1/5] perf(backend): terminate stalled websocket connections Resolve #10885 --- .../server/api/StreamingApiServerService.ts | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts index fdda581ad..893dfe956 100644 --- a/packages/backend/src/server/api/StreamingApiServerService.ts +++ b/packages/backend/src/server/api/StreamingApiServerService.ts @@ -19,6 +19,8 @@ import type * as http from 'node:http'; @Injectable() export class StreamingApiServerService { #wss: WebSocket.WebSocketServer; + #connections = new Map(); + #cleanConnectionsIntervalId: NodeJS.Timeout | null = null; constructor( @Inject(DI.config) @@ -109,7 +111,9 @@ export class StreamingApiServerService { await stream.listen(ev, connection); - const intervalId = user ? setInterval(() => { + this.#connections.set(connection, Date.now()); + + const userUpdateIntervalId = user ? setInterval(() => { this.usersRepository.update(user.id, { lastActiveDate: new Date(), }); @@ -124,19 +128,34 @@ export class StreamingApiServerService { ev.removeAllListeners(); stream.dispose(); this.redisForSub.off('message', onRedisMessage); - if (intervalId) clearInterval(intervalId); + if (userUpdateIntervalId) clearInterval(userUpdateIntervalId); }); connection.on('message', async (data) => { + this.#connections.set(connection, Date.now()); if (data.toString() === 'ping') { connection.send('pong'); } }); }); + + this.#cleanConnectionsIntervalId = setInterval(() => { + const now = Date.now(); + for (const [connection, lastActive] of this.#connections.entries()) { + if (now - lastActive > 1000 * 60 * 5) { + connection.terminate(); + this.#connections.delete(connection); + } + } + }, 1000 * 60 * 5); } @bindThis public detach(): Promise { + if (this.#cleanConnectionsIntervalId) { + clearInterval(this.#cleanConnectionsIntervalId); + this.#cleanConnectionsIntervalId = null; + } return new Promise((resolve) => { this.#wss.close(() => resolve()); }); From 3857cd589f3a73b4dd796dba08f507ac4d8095fa Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 2 Jun 2023 09:13:51 +0900 Subject: [PATCH 2/5] New Crowdin updates (#10935) * New translations ja-JP.yml (Korean) * New translations ja-JP.yml (German) * New translations ja-JP.yml (English) * New translations ja-JP.yml (Korean) * New translations ja-JP.yml (Norwegian) * New translations ja-JP.yml (Norwegian) * New translations ja-JP.yml (Chinese Simplified) --- locales/de-DE.yml | 2 ++ locales/en-US.yml | 2 ++ locales/ko-KR.yml | 6 +++-- locales/no-NO.yml | 58 +++++++++++++++++++++++++++++++++++++++++------ locales/zh-CN.yml | 1 + 5 files changed, 60 insertions(+), 9 deletions(-) diff --git a/locales/de-DE.yml b/locales/de-DE.yml index 8001a5576..c4c12cb1a 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -1060,6 +1060,8 @@ cancelReactionConfirm: "Möchtest du deine Reaktion wirklich löschen?" changeReactionConfirm: "Möchtest du deine Reaktion wirklich ändern?" later: "Später" goToMisskey: "Zu Misskey" +additionalEmojiDictionary: "Zusätzliche Emoji-Wörterbücher" +installed: "Installiert" _initialAccountSetting: accountCreated: "Dein Konto wurde erfolgreich erstellt!" letsStartAccountSetup: "Lass uns nun dein Konto einrichten." diff --git a/locales/en-US.yml b/locales/en-US.yml index 1af33cb5a..0f1c7c89f 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1060,6 +1060,8 @@ cancelReactionConfirm: "Really delete your reaction?" changeReactionConfirm: "Really change your reaction?" later: "Later" goToMisskey: "To Misskey" +additionalEmojiDictionary: "Additional emoji dictionaries" +installed: "Installed" _initialAccountSetting: accountCreated: "Your account was successfully created!" letsStartAccountSetup: "For starters, let's set up your profile." diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index b4a9507b0..c36305137 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1060,6 +1060,8 @@ cancelReactionConfirm: "리액션을 취소하시겠습니까?" changeReactionConfirm: "리액션을 변경하시겠습니까?" later: "나중에" goToMisskey: "Misskey로" +additionalEmojiDictionary: "이모지 추가 사전" +installed: "설치됨" _initialAccountSetting: accountCreated: "계정 생성이 완료되었습니다!" letsStartAccountSetup: "계정의 초기 설정을 진행합니다." @@ -1080,12 +1082,12 @@ _serverRules: _accountMigration: moveFrom: "다른 계정에서 이 계정으로 이사" moveFromSub: "다른 계정에 대한 별칭을 생성" - moveFromLabel: "기존 계정 #{n}" + moveFromLabel: "기존 계정 #{n}" moveFromDescription: "다른 계정에서 이 계정으로 팔로워를 가져오려면, 우선 여기에서 별칭을 지정해야 합니다. 반드시 이사하기 전에 지정해야 합니다! 기존 계정을 다음과 같은 형식으로 입력해 주십시오: @person@instance.com" moveTo: "이 계정에서 다른 계정으로 이사" moveToLabel: "이사할 계정:" moveCannotBeUndone: "한 번 이사하면, 두 번 다시 되돌릴 수 없습니다." - moveAccountDescription: "새 계정으로 이전합니다.\n ・팔로워가 새 계정을 자동으로 팔로우 합니다\n ・이 계정에서 팔로우는 모두 해제됩니다\n ・이 계정으로는 노트 작성 등을 할 수 없게 됩니다\n\n팔로워의 이전은 자동이지만, 팔로우는 수동으로 진행해야 합니다. 이전하기 전에 이 계정에서 팔로우를 내보내고, 이전 후에는 즉시 이전한 계정에서 가져오기를 진행하십시오.\n리스트・뮤트・차단에 대해서도 마찬가지이므로 수동으로 이전해야 합니다.\n\n(이 설명은 이 서버(Misskey v13.12.0 이후)의 사양입니다. Mastodon 등의 다른 ActivityPub 소프트웨어에서는 작동이 다를 수 있습니다.)" + moveAccountDescription: "새 계정으로 이전합니다.\n ・팔로워가 새 계정을 자동으로 팔로우 합니다\n ・이 계정에서 팔로우는 모두 해제됩니다\n ・이 계정으로는 노트 작성 등을 할 수 없게 됩니다\n\n팔로워는 자동으로 이전되지만, 팔로우는 수동으로 진행해야 합니다. 이전하기 전에 이 계정에서 팔로우를 내보내고, 이전 후에는 즉시 이전한 계정에서 가져오기를 진행하십시오.\n리스트・뮤트・차단에 대해서도 마찬가지이므로 수동으로 이전해야 합니다.\n\n(이 설명은 이 서버(Misskey v13.12.0 이후)의 사양입니다. Mastodon 등의 다른 ActivityPub 소프트웨어에서는 작동이 다를 수 있습니다.)" moveAccountHowTo: "계정을 이사하려면 우선 이사갈 계정에서 이 계정에 대한 별칭을 지정해야 합니다.\n별칭을 작성한 다음, 이사갈 계정을 다음과 같이 입력하십시오:\n@username@server.example.com" startMigration: "이사하기" migrationConfirm: "정말로 이 계정을 {account} 으로 이전하시겠습니까? 한 번 이전한 다음에는 취소할 수 없으며, 두 번 다시 원래 상태로 복구할 수 없습니다.\n이사할 계정에서 계정 별칭을 지정하였는지 다시 한 번 확인하십시오." diff --git a/locales/no-NO.yml b/locales/no-NO.yml index 9d6c5fc50..ec2900527 100644 --- a/locales/no-NO.yml +++ b/locales/no-NO.yml @@ -25,7 +25,7 @@ otherSettings: "Andre innstillinger" openInWindow: "Åpne i vindu" profile: "Profil" timeline: "Tidslinje" -noAccountDescription: "Denne brukeren har ikke skrevet sin bio ennå." +noAccountDescription: "Denne brukeren har ikke skrevet sin biografi ennå." login: "Logg inn" loggingIn: "Logget inn" logout: "Logg ut" @@ -81,6 +81,7 @@ pageLoadError: "Kunne ikke hente side." serverIsDead: "Denne serveren svarer ikke. Vennligst vent en stund og prøv igjen." enterListName: "Skriv inn et navn på listen" privacy: "Personvern" +defaultNoteVisibility: "Standard synlighet" follow: "Følg" followRequest: "Følgeforespørsel" followRequests: "Følgeforespørsel" @@ -92,6 +93,8 @@ renoted: "Renotet." cantRenote: "Dette innlegget kan ikke renotes." cantReRenote: "En Renote kan ikke renotes." quote: "Sitat" +inChannelRenote: "Renote kun for kanal" +inChannelQuote: "Sitat kun for kanal" pinnedNote: "Festet Note" pinned: "Fest til profil" you: "Du" @@ -145,14 +148,18 @@ instances: "Servere" registeredAt: "Registrerte seg" latestRequestReceivedAt: "Siste forespørsel mottatt" latestStatus: "Siste status" +charts: "Diagrammer" perHour: "Per time" perDay: "Per dag" stopActivityDelivery: "Slutt å sende aktiviteter" blockThisInstance: "Blokker denne serveren" +operations: "Operasjoner" software: "Programvare" version: "Versjon" +metadata: "Metadata" withNFiles: "{n} fil(er)" network: "Nettverk" +instanceInfo: "Serverinformasjon" statistics: "Statistikk" clearQueue: "Tøm kø" clearQueueConfirmTitle: "Er du sikker på at du vil tømme køen?" @@ -167,6 +174,8 @@ noteDeleteConfirm: "Er du sikker på at du vil slette denne Noten?" pinLimitExceeded: "Du kan ikke feste flere." intro: "Installasjonen av Misskey er ferdig! Vennligst opprett en administratorkonto." done: "Ferdig" +default: "Standard" +defaultValueIs: "Standard: {value}" noCustomEmojis: "Det er ingen emoji" noJobs: "Det er ingen jobber" blocked: "Blokkert" @@ -175,10 +184,13 @@ all: "Alle" notResponding: "Svarer ikke" changePassword: "Endre passord" security: "Sikkerhet" +retypedNotMatch: "Inngangene stemmer ikke overens." +currentPassword: "Nåværende passord" newPassword: "Nytt passord" newPasswordRetype: "Nytt passord (gjenta)" attachFile: "Legg ved filer" more: "Mer!" +noSuchUser: "Bruker ikke funnet" announcements: "Kunngjøringer" remove: "Slett" removed: "Vellykket slettet" @@ -188,9 +200,15 @@ saved: "Lagret" upload: "Laste opp" keepOriginalUploading: "Behold originalbildet" fromUrl: "Fra URL" +uploadFromUrl: "Last opp fra en URL" +uploadFromUrlDescription: "URL til filen du vil laste opp" explore: "Utforsk" messageRead: "Lest" -agree: "Jeg godtar" +nUsersRead: "lest av {n}" +agreeTo: "Jeg godtar {0}" +agree: "Godta" +agreeBelow: "Jeg godtar følgende" +basicNotesBeforeCreateAccount: "Viktige merknader" termsOfService: "Vilkår for bruk" home: "Hjem" activity: "Aktivitet" @@ -198,8 +216,12 @@ images: "Bilder" image: "Bilde" birthday: "Bursdag" yearsOld: "{age} år gammel" +theme: "Temaer" light: "Lys" dark: "Mørk" +lightThemes: "Lyse temaer" +darkThemes: "Mørke temaer" +syncDeviceDarkMode: "Synkroniser mørkmodus med enhetens innstillinger" fileName: "Filnavn" selectFile: "Velg en fil" selectFiles: "Velg filer" @@ -213,6 +235,9 @@ deleteFolder: "Slett denne mappen" addFile: "Legg til en fil" emptyFolder: "Denne mappen er tom" unableToDelete: "Kan ikke slette" +inputNewFileName: "Skriv inn et nytt filnavn" +inputNewDescription: "Skriv inn ny bildetekst" +inputNewFolderName: "Skriv inn et nytt mappenavn" circularReferenceFolder: "Målmappen er en undermappe til mappen du ønsker å flytte." hasChildFilesOrFolders: "Siden denne mappen ikke er tom, kan den ikke slettes." copyUrl: "Kopier URL" @@ -251,13 +276,23 @@ turnstile: "Turnstile" enableTurnstile: "Aktiver Turnstile" antennas: "Antenner" name: "Navn" +antennaSource: "Antennekilde" +notifyAntenna: "Varsle om nye Notes" +withFileAntenna: "Bare Notes med filer" +notesAndReplies: "Notes og svar" popularUsers: "Populære brukere" exploreUsersCount: "Det finnes {count} brukere" +exploreFediverse: "Utforsk Fediverse" userList: "Lister" -about: "Infomasjon" +about: "Informasjon" aboutMisskey: "Om Misskey" +newPasswordIs: "Det nye passordet er \"{password}\"." share: "Del" +notFound: "Ikke funnet" +markAsReadAllNotifications: "Merk alle varsler som lest" +markAsReadAllUnreadNotes: "Merk alle Notes som lest" help: "Hjelp" +inputMessageHere: "Skriv inn melding her" close: "Lukk" invites: "Inviter" members: "Medlemmer" @@ -265,6 +300,10 @@ title: "Tittel" text: "Tekst" next: "Neste" retype: "Gjenta" +quoteAttached: "Sitat" +noMessagesYet: "Ingen meldinger ennå" +newMessageExists: "Det er nye meldinger" +onlyOneFileCanBeAttached: "Du kan bare legge ved én fil i en melding" invitations: "Inviter" available: "Tilgjengelig" unavailable: "Utilgjengelig" @@ -564,6 +603,7 @@ _time: day: "Dager" _timelineTutorial: title: "Hvordan bruke Misskey" + step2_2: "Hva med å skrive en selvpresentasjon, eller bare \"Hei {name}!\" hvis du ikke har lyst?" _2fa: renewTOTPCancel: "Avbryt" _weekday: @@ -576,6 +616,7 @@ _weekday: saturday: "Lørdag" _widgets: profile: "Profil" + instanceInfo: "Serverinformasjon" notifications: "Varsler" timeline: "Tidslinje" calendar: "Kalender" @@ -611,6 +652,7 @@ _postForm: _profile: name: "Navn" username: "Brukernavn" + description: "Biografi" metadataContent: "Innhold" _exportOrImport: followingList: "Følg" @@ -652,12 +694,14 @@ _pages: button: "Knapp" _notification: youWereFollowed: "fulgte deg" + unreadAntennaNote: "Antenne {name}" + achievementEarned: "Prestasjon låst opp" _types: - follow: "Følg" + follow: "Nye følgere" reply: "Svar" - renote: "Renote" - quote: "Sitat" - reaction: "Reaksjon" + renote: "Renotes" + quote: "Sitater" + reaction: "Reaksjoner" _actions: reply: "Svar" renote: "Renote" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index a9ef92e7d..9c278ea75 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1060,6 +1060,7 @@ cancelReactionConfirm: "要取消回应吗?" changeReactionConfirm: "要更改回应吗?" later: "一会再说" goToMisskey: "去往Misskey" +installed: "已安装" _initialAccountSetting: accountCreated: "账户创建完成了!" letsStartAccountSetup: "来进行帐户的初始设置吧。" From 40295ae57ddb99b673553030315762a47b76c952 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 2 Jun 2023 11:03:59 +0900 Subject: [PATCH 3/5] fix style Fix #10870 --- packages/frontend/src/components/MkUserInfo.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/components/MkUserInfo.vue b/packages/frontend/src/components/MkUserInfo.vue index fea3842a5..172b51751 100644 --- a/packages/frontend/src/components/MkUserInfo.vue +++ b/packages/frontend/src/components/MkUserInfo.vue @@ -8,7 +8,7 @@ {{ i18n.ts.followsYou }}
-
+
{{ i18n.ts.noAccountDescription }} From 91d790bbb65521eedc783aba9e863d188d30540b Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 2 Jun 2023 11:34:38 +0900 Subject: [PATCH 4/5] update deps --- package.json | 8 +- packages/backend/package.json | 40 +- .../server/api/endpoints/i/2fa/key-done.ts | 2 +- .../backend/src/server/web/views/base.pug | 2 +- .../frontend/.storybook/preview-head.html | 2 +- packages/frontend/package.json | 26 +- pnpm-lock.yaml | 990 +++++++++++------- 7 files changed, 631 insertions(+), 439 deletions(-) diff --git a/package.json b/package.json index d9e5d9f7f..81029514c 100644 --- a/package.json +++ b/package.json @@ -51,16 +51,16 @@ "gulp-replace": "1.1.4", "gulp-terser": "2.1.0", "js-yaml": "4.1.0", - "typescript": "5.0.4" + "typescript": "5.1.3" }, "devDependencies": { "@types/gulp": "4.0.10", "@types/gulp-rename": "2.0.1", - "@typescript-eslint/eslint-plugin": "5.59.5", - "@typescript-eslint/parser": "5.59.5", + "@typescript-eslint/eslint-plugin": "5.59.8", + "@typescript-eslint/parser": "5.59.8", "cross-env": "7.0.3", "cypress": "12.13.0", - "eslint": "8.40.0", + "eslint": "8.41.0", "start-server-and-test": "2.0.0" }, "optionalDependencies": { diff --git a/packages/backend/package.json b/packages/backend/package.json index 66bc7ee47..56ecbc2ea 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -60,27 +60,27 @@ "@discordapp/twemoji": "14.1.2", "@fastify/accepts": "4.1.0", "@fastify/cookie": "8.3.0", - "@fastify/cors": "8.2.1", + "@fastify/cors": "8.3.0", "@fastify/http-proxy": "9.1.0", "@fastify/multipart": "7.6.0", - "@fastify/static": "6.10.1", + "@fastify/static": "6.10.2", "@fastify/view": "7.4.1", "@nestjs/common": "9.4.2", "@nestjs/core": "9.4.2", "@nestjs/testing": "9.4.2", "@peertube/http-signature": "1.7.0", - "@sinonjs/fake-timers": "10.0.2", + "@sinonjs/fake-timers": "10.2.0", "@swc/cli": "0.1.62", - "@swc/core": "1.3.59", + "@swc/core": "1.3.61", "accepts": "1.3.8", "ajv": "8.12.0", "archiver": "5.3.1", "autwh": "0.1.0", "bcryptjs": "2.4.3", "blurhash": "2.0.5", - "bullmq": "3.14.1", + "bullmq": "3.15.0", "cacheable-lookup": "6.1.0", - "cbor": "8.1.0", + "cbor": "9.0.0", "chalk": "5.2.0", "chalk-template": "0.4.0", "chokidar": "3.5.3", @@ -96,24 +96,24 @@ "fluent-ffmpeg": "2.1.2", "form-data": "4.0.0", "got": "12.6.0", - "happy-dom": "9.19.2", + "happy-dom": "9.20.3", "hpagent": "1.2.0", "ioredis": "5.3.2", "ip-cidr": "3.1.0", "is-svg": "4.3.2", "js-yaml": "4.1.0", - "jsdom": "21.1.1", + "jsdom": "22.1.0", "json5": "2.2.3", - "jsonld": "8.1.1", + "jsonld": "8.2.0", "jsrsasign": "10.8.6", - "meilisearch": "0.32.4", + "meilisearch": "0.32.5", "mfm-js": "0.23.3", "mime-types": "2.1.35", "misskey-js": "workspace:*", "ms": "3.0.0-canary.1", "nested-property": "4.0.0", "node-fetch": "3.3.1", - "nodemailer": "6.9.2", + "nodemailer": "6.9.3", "nsfwjs": "2.4.2", "oauth": "0.10.0", "os-utils": "0.0.14", @@ -129,7 +129,7 @@ "qrcode": "1.5.3", "random-seed": "0.3.0", "ratelimiter": "3.4.1", - "re2": "1.18.0", + "re2": "1.19.0", "redis-lock": "0.1.4", "reflect-metadata": "0.1.13", "rename": "1.0.4", @@ -146,16 +146,16 @@ "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", "summaly": "github:misskey-dev/summaly", - "systeminformation": "5.17.12", + "systeminformation": "5.17.16", "tinycolor2": "1.6.0", "tmp": "0.2.1", "tsc-alias": "1.8.6", "tsconfig-paths": "4.2.0", "twemoji-parser": "14.0.0", "typeorm": "0.3.16", - "typescript": "5.0.4", + "typescript": "5.1.3", "ulid": "2.3.0", - "unzipper": "0.10.11", + "unzipper": "0.10.14", "uuid": "9.0.0", "vary": "1.1.2", "web-push": "3.6.1", @@ -173,13 +173,13 @@ "@types/content-disposition": "0.5.5", "@types/escape-regexp": "0.0.1", "@types/fluent-ffmpeg": "2.1.21", - "@types/jest": "29.5.1", + "@types/jest": "29.5.2", "@types/js-yaml": "4.0.5", "@types/jsdom": "21.1.1", "@types/jsonld": "1.5.8", "@types/jsrsasign": "10.5.8", "@types/mime-types": "2.1.1", - "@types/node": "20.2.3", + "@types/node": "20.2.5", "@types/node-fetch": "3.0.3", "@types/nodemailer": "6.4.8", "@types/oauth": "0.9.1", @@ -203,11 +203,11 @@ "@types/web-push": "3.3.2", "@types/websocket": "1.0.5", "@types/ws": "8.5.4", - "@typescript-eslint/eslint-plugin": "5.59.5", - "@typescript-eslint/parser": "5.59.5", + "@typescript-eslint/eslint-plugin": "5.59.8", + "@typescript-eslint/parser": "5.59.8", "aws-sdk-client-mock": "2.1.1", "cross-env": "7.0.3", - "eslint": "8.40.0", + "eslint": "8.41.0", "eslint-plugin-import": "2.27.5", "execa": "6.1.0", "jest": "29.5.0", diff --git a/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts b/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts index ad33398da..e8985a9cd 100644 --- a/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts +++ b/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts @@ -1,6 +1,6 @@ import { promisify } from 'node:util'; import bcrypt from 'bcryptjs'; -import * as cbor from 'cbor'; +import cbor from 'cbor'; import { Inject, Injectable } from '@nestjs/common'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug index 25513cc4c..69b3f68e0 100644 --- a/packages/backend/src/server/web/views/base.pug +++ b/packages/backend/src/server/web/views/base.pug @@ -35,7 +35,7 @@ html link(rel='prefetch' href='https://xn--931a.moe/assets/not-found.jpg') link(rel='prefetch' href='https://xn--931a.moe/assets/error.jpg') //- https://github.com/misskey-dev/misskey/issues/9842 - link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.17.0') + link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.21.0') link(rel='modulepreload' href=`/vite/${clientEntry.file}`) if !config.clientManifestExists diff --git a/packages/frontend/.storybook/preview-head.html b/packages/frontend/.storybook/preview-head.html index ab694f64f..f6a9a4875 100644 --- a/packages/frontend/.storybook/preview-head.html +++ b/packages/frontend/.storybook/preview-head.html @@ -1,6 +1,6 @@ - +