diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2026-03-05 19:24:30 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-05 19:24:30 +0900 |
| commit | 3980b2ca55cdf6a694ef8cad911e161672c0444f (patch) | |
| tree | 859c1a97202813247a0b59b43c8152e578eef8e9 | |
| parent | New Crowdin updates (#17097) (diff) | |
| download | misskey-3980b2ca55cdf6a694ef8cad911e161672c0444f.tar.gz misskey-3980b2ca55cdf6a694ef8cad911e161672c0444f.tar.bz2 misskey-3980b2ca55cdf6a694ef8cad911e161672c0444f.zip | |
fix: review fixes (#17208)
* fix: OAuthのContent-Typeを正しく判定するように
* fix(frontend): fix outdated comments
* fix: storagePersistenceのtop-level awaitを解消
* fix
* fix(frontend): add comment
Co-Authored-By: anatawa12 <anatawa12@icloud.com>
* fix
* fix: rename `users/get-following-users-by-birthday`
* fix: fix types
* Update MkForm.vue
* refactor utility/storage.ts
---------
Co-authored-by: anatawa12 <anatawa12@icloud.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
20 files changed, 48 insertions, 33 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 24271d7fa0..520b202f59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## 2026.2.0 ### Note -- `users/following` の `birthday` プロパティは非推奨になりました。代わりに `users/get-following-birthday-users` をご利用ください。 +- `users/following` の `birthday` プロパティは非推奨になりました。代わりに `users/get-following-users-by-birthday` をご利用ください。 ### General - Enhance: 「もうすぐ誕生日のユーザー」ウィジェットで、誕生日が至近のユーザーも表示できるように diff --git a/packages/backend/src/server/api/endpoint-list.ts b/packages/backend/src/server/api/endpoint-list.ts index 9311c80eaa..6679005c3c 100644 --- a/packages/backend/src/server/api/endpoint-list.ts +++ b/packages/backend/src/server/api/endpoint-list.ts @@ -391,7 +391,7 @@ export * as 'users/featured-notes' from './endpoints/users/featured-notes.js'; export * as 'users/flashs' from './endpoints/users/flashs.js'; export * as 'users/followers' from './endpoints/users/followers.js'; export * as 'users/following' from './endpoints/users/following.js'; -export * as 'users/get-following-birthday-users' from './endpoints/users/get-following-birthday-users.js'; +export * as 'users/get-following-users-by-birthday' from './endpoints/users/get-following-users-by-birthday.js'; export * as 'users/gallery/posts' from './endpoints/users/gallery/posts.js'; export * as 'users/get-frequently-replied-users' from './endpoints/users/get-frequently-replied-users.js'; export * as 'users/lists/create' from './endpoints/users/lists/create.js'; 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 7a8dfc4555..372fe3a25f 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -341,7 +341,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- if (ps.clientOptions !== undefined) { set.clientOptions = { - ...serverSettings.clientOptions, + ...this.serverSettings.clientOptions, ...ps.clientOptions, }; } diff --git a/packages/backend/src/server/api/endpoints/users/following.ts b/packages/backend/src/server/api/endpoints/users/following.ts index 3b3352858f..4defcc9dcf 100644 --- a/packages/backend/src/server/api/endpoints/users/following.ts +++ b/packages/backend/src/server/api/endpoints/users/following.ts @@ -86,7 +86,7 @@ export const paramDef = { sinceDate: { type: 'integer' }, untilDate: { type: 'integer' }, limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, - birthday: { ...birthdaySchema, nullable: true, description: '@deprecated use get-following-birthday-users instead.' }, + birthday: { ...birthdaySchema, nullable: true, description: '@deprecated use get-following-users-by-birthday instead.' }, }, }, ], @@ -146,7 +146,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- .andWhere('following.followerId = :userId', { userId: user.id }) .innerJoinAndSelect('following.followee', 'followee'); - // @deprecated use get-following-birthday-users instead. + // @deprecated use get-following-users-by-birthday instead. if (ps.birthday) { query.innerJoin(this.userProfilesRepository.metadata.targetName, 'followeeProfile', 'followeeProfile.userId = following.followeeId'); diff --git a/packages/backend/src/server/api/endpoints/users/get-following-birthday-users.ts b/packages/backend/src/server/api/endpoints/users/get-following-users-by-birthday.ts index 124114244e..947c19d81e 100644 --- a/packages/backend/src/server/api/endpoints/users/get-following-birthday-users.ts +++ b/packages/backend/src/server/api/endpoints/users/get-following-users-by-birthday.ts @@ -20,7 +20,7 @@ export const meta = { requireCredential: true, kind: 'read:account', - description: 'Find users who have a birthday on the specified range.', + description: 'Retrieve users who have a birthday on the specified range.', res: { type: 'array', diff --git a/packages/backend/src/server/oauth/OAuth2ProviderService.ts b/packages/backend/src/server/oauth/OAuth2ProviderService.ts index 47f4bf947d..840c34b806 100644 --- a/packages/backend/src/server/oauth/OAuth2ProviderService.ts +++ b/packages/backend/src/server/oauth/OAuth2ProviderService.ts @@ -142,7 +142,9 @@ async function discoverClientInformation(logger: Logger, httpRequestService: Htt redirectUris.push(...httpLinkHeader.parse(linkHeader).get('rel', 'redirect_uri').map(r => r.uri)); } - if (res.headers.get('content-type')?.includes('application/json')) { + const contentType = res.headers.get('content-type'); + const mediaType = contentType ? contentType.split(';')[0].trim() : null; + if (mediaType === 'application/json') { // Client discovery via JSON document (11 July 2024 spec) // https://indieauth.spec.indieweb.org/#client-metadata // "Clients SHOULD have a JSON [RFC7159] document at their client_id URL containing diff --git a/packages/frontend/src/components/MkDraggable.vue b/packages/frontend/src/components/MkDraggable.vue index 07fa1045b9..6e2e038f87 100644 --- a/packages/frontend/src/components/MkDraggable.vue +++ b/packages/frontend/src/components/MkDraggable.vue @@ -109,6 +109,7 @@ function onDragstart(ev: DragEvent, item: T) { // Chromeのバグで、Dragstartハンドラ内ですぐにDOMを変更する(=リアクティブなプロパティを変更する)とDragが終了してしまう // SEE: https://stackoverflow.com/questions/19639969/html5-dragend-event-firing-immediately + // SEE: https://issues.chromium.org/issues/41150279 window.setTimeout(() => { dragging.value = true; }, 10); diff --git a/packages/frontend/src/components/MkForm.vue b/packages/frontend/src/components/MkForm.vue index 1ece0ad4c3..f2360e8cdd 100644 --- a/packages/frontend/src/components/MkForm.vue +++ b/packages/frontend/src/components/MkForm.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<div v-if="Object.keys(form).filter(item => !form[item].hidden).length > 0" class="_gaps_m"> +<div v-if="Object.values(form).filter(item => typeof item.hidden !== 'boolean' || item.hidden === true).length > 0" class="_gaps_m"> <template v-for="v, k in form"> <template v-if="typeof v.hidden == 'function' ? v.hidden(values) : v.hidden"></template> <MkInput v-else-if="v.type === 'number'" v-model="values[k]" type="number" :step="v.step || 1" :manualSave="v.manualSave" @savingStateChange="(changed, invalid) => onSavingStateChange(k, changed, invalid)"> diff --git a/packages/frontend/src/pages/admin/RolesEditorFormula.vue b/packages/frontend/src/pages/admin/RolesEditorFormula.vue index 13f66662d0..384282262d 100644 --- a/packages/frontend/src/pages/admin/RolesEditorFormula.vue +++ b/packages/frontend/src/pages/admin/RolesEditorFormula.vue @@ -27,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only > <template #default="{ item, dragStart }"> <div :class="$style.item"> - <!-- divが無いとエラーになる https://github.com/SortableJS/vue.draggable.next/issues/189 --> + <!-- divが無いとエラーになる --> <RolesEditorFormula :modelValue="item" :dragStartCallback="dragStart" diff --git a/packages/frontend/src/pages/page-editor/page-editor.blocks.vue b/packages/frontend/src/pages/page-editor/page-editor.blocks.vue index 891d29e1df..18f6c40013 100644 --- a/packages/frontend/src/pages/page-editor/page-editor.blocks.vue +++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.vue @@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only > <template #default="{ item }"> <div> - <!-- divが無いとエラーになる https://github.com/SortableJS/vue.draggable.next/issues/189 --> + <!-- divが無いとエラーになる --> <component :is="getComponent(item.type) as any" :modelValue="item" @update:modelValue="updateItem" @remove="() => removeItem(item)"/> </div> </template> diff --git a/packages/frontend/src/pages/settings/index.vue b/packages/frontend/src/pages/settings/index.vue index f9529fa352..abfac37275 100644 --- a/packages/frontend/src/pages/settings/index.vue +++ b/packages/frontend/src/pages/settings/index.vue @@ -51,10 +51,12 @@ import { enableAutoBackup, getPreferencesProfileMenu } from '@/preferences/utili import { store } from '@/store.js'; import { signout } from '@/signout.js'; import { genSearchIndexes } from '@/utility/inapp-search.js'; -import { enableStoragePersistence, storagePersisted, storagePersistenceSupported, skipStoragePersistence } from '@/utility/storage.js'; +import { enableStoragePersistence, getStoragePersistenceStatusRef, storagePersistenceSupported, skipStoragePersistence } from '@/utility/storage.js'; const searchIndex = await import('search-index:settings').then(({ searchIndexes }) => genSearchIndexes(searchIndexes)); +const storagePersisted = await getStoragePersistenceStatusRef(); + const indexInfo = { title: i18n.ts.settings, icon: 'ti ti-settings', diff --git a/packages/frontend/src/pages/settings/other.vue b/packages/frontend/src/pages/settings/other.vue index 660647fff7..4facc696a4 100644 --- a/packages/frontend/src/pages/settings/other.vue +++ b/packages/frontend/src/pages/settings/other.vue @@ -165,7 +165,7 @@ import MkKeyValue from '@/components/MkKeyValue.vue'; import MkButton from '@/components/MkButton.vue'; import FormSlot from '@/components/form/slot.vue'; import * as os from '@/os.js'; -import { enableStoragePersistence, storagePersisted, storagePersistenceSupported } from '@/utility/storage.js'; +import { enableStoragePersistence, getStoragePersistenceStatusRef, storagePersistenceSupported } from '@/utility/storage.js'; import { ensureSignin } from '@/i.js'; import { i18n } from '@/i18n.js'; import { definePage } from '@/page.js'; @@ -180,6 +180,8 @@ import { cloudBackup } from '@/preferences/utility.js'; const $i = ensureSignin(); +const storagePersisted = await getStoragePersistenceStatusRef(); + const reportError = prefer.model('reportError'); const enableCondensedLine = prefer.model('enableCondensedLine'); const skipNoteRender = prefer.model('skipNoteRender'); diff --git a/packages/frontend/src/utility/storage.ts b/packages/frontend/src/utility/storage.ts index 86f4b8b3c3..42743f78ea 100644 --- a/packages/frontend/src/utility/storage.ts +++ b/packages/frontend/src/utility/storage.ts @@ -3,13 +3,21 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { ref } from 'vue'; +import { readonly, ref } from 'vue'; import * as os from '@/os.js'; import { store } from '@/store.js'; import { i18n } from '@/i18n.js'; export const storagePersistenceSupported = window.isSecureContext && 'storage' in navigator; -export const storagePersisted = ref(storagePersistenceSupported ? await navigator.storage.persisted() : false); +const storagePersisted = ref(false); + +export async function getStoragePersistenceStatusRef() { + if (storagePersistenceSupported) { + storagePersisted.value = await navigator.storage.persisted().catch(() => false); + } + + return readonly(storagePersisted); +} export async function enableStoragePersistence() { if (!storagePersistenceSupported) return; diff --git a/packages/frontend/src/widgets/WidgetBirthdayFollowings.user.vue b/packages/frontend/src/widgets/WidgetBirthdayFollowings.user.vue index dc8ffcc818..2b714c2f6c 100644 --- a/packages/frontend/src/widgets/WidgetBirthdayFollowings.user.vue +++ b/packages/frontend/src/widgets/WidgetBirthdayFollowings.user.vue @@ -30,7 +30,7 @@ import { useLowresTime } from '@/composables/use-lowres-time.js'; import { userPage, acct } from '@/filters/user.js'; const props = defineProps<{ - item: Misskey.entities.UsersGetFollowingBirthdayUsersResponse[number]; + item: Misskey.entities.UsersGetFollowingUsersByBirthdayResponse[number]; }>(); const now = useLowresTime(); diff --git a/packages/frontend/src/widgets/WidgetBirthdayFollowings.vue b/packages/frontend/src/widgets/WidgetBirthdayFollowings.vue index ea577f3219..cf9c5a3d35 100644 --- a/packages/frontend/src/widgets/WidgetBirthdayFollowings.vue +++ b/packages/frontend/src/widgets/WidgetBirthdayFollowings.vue @@ -106,7 +106,7 @@ const end = computed(() => { } }); -const birthdayUsersPaginator = markRaw(new Paginator('users/get-following-birthday-users', { +const birthdayUsersPaginator = markRaw(new Paginator('users/get-following-users-by-birthday', { limit: 18, offsetMode: true, computedParams: computed(() => { diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index b84fdc7e31..760d5c319b 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2128,8 +2128,8 @@ declare namespace entities { UsersFollowingResponse, UsersGalleryPostsRequest, UsersGalleryPostsResponse, - UsersGetFollowingBirthdayUsersRequest, - UsersGetFollowingBirthdayUsersResponse, + UsersGetFollowingUsersByBirthdayRequest, + UsersGetFollowingUsersByBirthdayResponse, UsersGetFrequentlyRepliedUsersRequest, UsersGetFrequentlyRepliedUsersResponse, UsersListsCreateRequest, @@ -3741,10 +3741,10 @@ type UsersGalleryPostsRequest = operations['users___gallery___posts']['requestBo type UsersGalleryPostsResponse = operations['users___gallery___posts']['responses']['200']['content']['application/json']; // @public (undocumented) -type UsersGetFollowingBirthdayUsersRequest = operations['users___get-following-birthday-users']['requestBody']['content']['application/json']; +type UsersGetFollowingUsersByBirthdayRequest = operations['users___get-following-users-by-birthday']['requestBody']['content']['application/json']; // @public (undocumented) -type UsersGetFollowingBirthdayUsersResponse = operations['users___get-following-birthday-users']['responses']['200']['content']['application/json']; +type UsersGetFollowingUsersByBirthdayResponse = operations['users___get-following-users-by-birthday']['responses']['200']['content']['application/json']; // @public (undocumented) type UsersGetFrequentlyRepliedUsersRequest = operations['users___get-frequently-replied-users']['requestBody']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index 91f7bb5b07..c9cb9147f1 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -4533,11 +4533,11 @@ declare module '../api.js' { ): Promise<SwitchCaseResponseType<E, P>>; /** - * Find users who have a birthday on the specified range. + * Retrieve users who have a birthday on the specified range. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request<E extends 'users/get-following-birthday-users', P extends Endpoints[E]['req']>( + request<E extends 'users/get-following-users-by-birthday', P extends Endpoints[E]['req']>( endpoint: E, params: P, credential?: string | null, diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index 8dc3b26bd7..2d4e0fe35e 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -616,8 +616,8 @@ import type { UsersFollowingResponse, UsersGalleryPostsRequest, UsersGalleryPostsResponse, - UsersGetFollowingBirthdayUsersRequest, - UsersGetFollowingBirthdayUsersResponse, + UsersGetFollowingUsersByBirthdayRequest, + UsersGetFollowingUsersByBirthdayResponse, UsersGetFrequentlyRepliedUsersRequest, UsersGetFrequentlyRepliedUsersResponse, UsersListsCreateRequest, @@ -1069,7 +1069,7 @@ export type Endpoints = { 'users/followers': { req: UsersFollowersRequest; res: UsersFollowersResponse }; 'users/following': { req: UsersFollowingRequest; res: UsersFollowingResponse }; 'users/gallery/posts': { req: UsersGalleryPostsRequest; res: UsersGalleryPostsResponse }; - 'users/get-following-birthday-users': { req: UsersGetFollowingBirthdayUsersRequest; res: UsersGetFollowingBirthdayUsersResponse }; + 'users/get-following-users-by-birthday': { req: UsersGetFollowingUsersByBirthdayRequest; res: UsersGetFollowingUsersByBirthdayResponse }; 'users/get-frequently-replied-users': { req: UsersGetFrequentlyRepliedUsersRequest; res: UsersGetFrequentlyRepliedUsersResponse }; 'users/lists/create': { req: UsersListsCreateRequest; res: UsersListsCreateResponse }; 'users/lists/create-from-public': { req: UsersListsCreateFromPublicRequest; res: UsersListsCreateFromPublicResponse }; diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index e9bb080636..a49dd729e6 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -619,8 +619,8 @@ export type UsersFollowingRequest = operations['users___following']['requestBody export type UsersFollowingResponse = operations['users___following']['responses']['200']['content']['application/json']; export type UsersGalleryPostsRequest = operations['users___gallery___posts']['requestBody']['content']['application/json']; export type UsersGalleryPostsResponse = operations['users___gallery___posts']['responses']['200']['content']['application/json']; -export type UsersGetFollowingBirthdayUsersRequest = operations['users___get-following-birthday-users']['requestBody']['content']['application/json']; -export type UsersGetFollowingBirthdayUsersResponse = operations['users___get-following-birthday-users']['responses']['200']['content']['application/json']; +export type UsersGetFollowingUsersByBirthdayRequest = operations['users___get-following-users-by-birthday']['requestBody']['content']['application/json']; +export type UsersGetFollowingUsersByBirthdayResponse = operations['users___get-following-users-by-birthday']['responses']['200']['content']['application/json']; export type UsersGetFrequentlyRepliedUsersRequest = operations['users___get-frequently-replied-users']['requestBody']['content']['application/json']; export type UsersGetFrequentlyRepliedUsersResponse = operations['users___get-frequently-replied-users']['responses']['200']['content']['application/json']; export type UsersListsCreateRequest = operations['users___lists___create']['requestBody']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 5b6da957f7..46d04ac2dc 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -3717,14 +3717,14 @@ export type paths = { */ post: operations['users___gallery___posts']; }; - '/users/get-following-birthday-users': { + '/users/get-following-users-by-birthday': { /** - * users/get-following-birthday-users - * @description Find users who have a birthday on the specified range. + * users/get-following-users-by-birthday + * @description Retrieve users who have a birthday on the specified range. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - post: operations['users___get-following-birthday-users']; + post: operations['users___get-following-users-by-birthday']; }; '/users/get-frequently-replied-users': { /** @@ -34882,7 +34882,7 @@ export interface operations { untilDate?: number; /** @default 10 */ limit?: number; - /** @description @deprecated use get-following-birthday-users instead. */ + /** @description @deprecated use get-following-users-by-birthday instead. */ birthday?: string | null; }; }; @@ -35018,7 +35018,7 @@ export interface operations { }; }; }; - 'users___get-following-birthday-users': { + 'users___get-following-users-by-birthday': { requestBody: { content: { 'application/json': { |