diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 80f0dc5747..218ab42ffd 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -400,6 +400,10 @@ export const meta = { type: 'string', optional: false, nullable: true, }, + shortName: { + type: 'string', + optional: false, nullable: true, + }, objectStorageS3ForcePathStyle: { type: 'boolean', optional: false, nullable: false, diff --git a/packages/backend/src/server/api/endpoints/federation/stats.ts b/packages/backend/src/server/api/endpoints/federation/stats.ts index 6548142d41..262aa68776 100644 --- a/packages/backend/src/server/api/endpoints/federation/stats.ts +++ b/packages/backend/src/server/api/endpoints/federation/stats.ts @@ -29,37 +29,10 @@ export const meta = { optional: false, nullable: false, items: { - properties: { - id: { type: 'string' }, - firstRetrievedAt: { type: 'string' }, - host: { type: 'string' }, - usersCount: { type: 'number' }, - notesCount: { type: 'number' }, - followingCount: { type: 'number' }, - followersCount: { type: 'number' }, - isNotResponding: { type: 'boolean' }, - isSuspended: { type: 'boolean' }, - isBlocked: { type: 'boolean' }, - softwareName: { type: 'string' }, - softwareVersion: { type: 'string' }, - openRegistrations: { type: 'boolean' }, - name: { type: 'string' }, - description: { type: 'string' }, - maintainerName: { type: 'string' }, - maintainerEmail: { type: 'string' }, - isSilenced: { type: 'boolean' }, - iconUrl: { type: 'string' }, - faviconUrl: { type: 'string' }, - themeColor: { type: 'string' }, - infoUpdatedAt: { - type: 'string', - nullable: true, - }, - latestRequestReceivedAt: { - type: 'string', - nullable: true, - }, - } + type: 'object', + optional: false, + nullable: false, + ref: 'FederationInstance', }, }, otherFollowersCount: { type: 'number' }, @@ -68,42 +41,15 @@ export const meta = { optional: false, nullable: false, items: { - properties: { - id: { type: 'string' }, - firstRetrievedAt: { type: 'string' }, - host: { type: 'string' }, - usersCount: { type: 'number' }, - notesCount: { type: 'number' }, - followingCount: { type: 'number' }, - followersCount: { type: 'number' }, - isNotResponding: { type: 'boolean' }, - isSuspended: { type: 'boolean' }, - isBlocked: { type: 'boolean' }, - softwareName: { type: 'string' }, - softwareVersion: { type: 'string' }, - openRegistrations: { type: 'boolean' }, - name: { type: 'string' }, - description: { type: 'string' }, - maintainerName: { type: 'string' }, - maintainerEmail: { type: 'string' }, - isSilenced: { type: 'boolean' }, - iconUrl: { type: 'string' }, - faviconUrl: { type: 'string' }, - themeColor: { type: 'string' }, - infoUpdatedAt: { - type: 'string', - nullable: true, - }, - latestRequestReceivedAt: { - type: 'string', - nullable: true, - }, - } + type: 'object', + optional: false, + nullable: false, + ref: 'FederationInstance', }, }, otherFollowingCount: { type: 'number' }, }, - } + }, } as const; export const paramDef = { diff --git a/packages/backend/src/server/api/endpoints/meta.ts b/packages/backend/src/server/api/endpoints/meta.ts index 8048ed3ada..9ba22f89b9 100644 --- a/packages/backend/src/server/api/endpoints/meta.ts +++ b/packages/backend/src/server/api/endpoints/meta.ts @@ -172,20 +172,34 @@ export const meta = { type: 'object', optional: false, nullable: false, properties: { - place: { + id: { type: 'string', optional: false, nullable: false, + format: 'id', + example: 'xxxxxxxxxx', }, url: { type: 'string', optional: false, nullable: false, format: 'url', }, + place: { + type: 'string', + optional: false, nullable: false, + }, + ratio: { + type: 'number', + optional: false, nullable: false, + }, imageUrl: { type: 'string', optional: false, nullable: false, format: 'url', }, + dayOfWeek: { + type: 'integer', + optional: false, nullable: false, + }, }, }, }, diff --git a/packages/backend/src/server/api/endpoints/notes/translate.ts b/packages/backend/src/server/api/endpoints/notes/translate.ts index a1561c944c..d46bd69795 100644 --- a/packages/backend/src/server/api/endpoints/notes/translate.ts +++ b/packages/backend/src/server/api/endpoints/notes/translate.ts @@ -21,6 +21,10 @@ export const meta = { res: { type: 'object', optional: false, nullable: false, + properties: { + sourceLang: { type: 'string' }, + text: { type: 'string' }, + }, }, errors: { diff --git a/packages/frontend/src/components/MkAchievements.vue b/packages/frontend/src/components/MkAchievements.vue index 40f9ad4057..cdd9cb87b1 100644 --- a/packages/frontend/src/components/MkAchievements.vue +++ b/packages/frontend/src/components/MkAchievements.vue @@ -67,7 +67,7 @@ const props = withDefaults(defineProps<{ withDescription: true, }); -const achievements = ref(); +const achievements = ref<Misskey.entities.UsersAchievementsResponse | null>(null); const lockedAchievements = computed(() => ACHIEVEMENT_TYPES.filter(x => !(achievements.value ?? []).some(a => a.name === x))); function fetch() { diff --git a/packages/frontend/src/components/MkCaptcha.vue b/packages/frontend/src/components/MkCaptcha.vue index 14e59acad2..40bca11e64 100644 --- a/packages/frontend/src/components/MkCaptcha.vue +++ b/packages/frontend/src/components/MkCaptcha.vue @@ -26,7 +26,7 @@ export type Captcha = { getResponse(id: string): string; }; -type CaptchaProvider = 'hcaptcha' | 'recaptcha' | 'turnstile'; +export type CaptchaProvider = 'hcaptcha' | 'recaptcha' | 'turnstile'; type CaptchaContainer = { readonly [_ in CaptchaProvider]?: Captcha; diff --git a/packages/frontend/src/components/MkLink.vue b/packages/frontend/src/components/MkLink.vue index e16307c762..bda683002d 100644 --- a/packages/frontend/src/components/MkLink.vue +++ b/packages/frontend/src/components/MkLink.vue @@ -29,7 +29,7 @@ const self = props.url.startsWith(local); const attr = self ? 'to' : 'href'; const target = self ? null : '_blank'; -const el = ref(); +const el = ref<HTMLElement>(); useTooltip(el, (showing) => { os.popup(defineAsyncComponent(() => import('@/components/MkUrlPreviewPopup.vue')), { diff --git a/packages/frontend/src/components/MkMarquee.vue b/packages/frontend/src/components/MkMarquee.vue index f9d0573227..145b60c8e7 100644 --- a/packages/frontend/src/components/MkMarquee.vue +++ b/packages/frontend/src/components/MkMarquee.vue @@ -27,7 +27,7 @@ export default { }, }, setup(props) { - const contentEl = ref(); + const contentEl = ref<HTMLElement>(); function calc() { const eachLength = contentEl.value.offsetWidth / props.repeat; diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index cdd2cccb2e..8a3b4cef48 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -289,7 +289,7 @@ const isDeleted = ref(false); const renoted = ref(false); const muted = ref(checkMute(appearNote.value, $i?.mutedWords)); const hardMuted = ref(props.withHardMute && checkMute(appearNote.value, $i?.hardMutedWords)); -const translation = ref<any>(null); +const translation = ref<Misskey.entities.NotesTranslateResponse | null>(null); const translating = ref(false); const showTicker = (defaultStore.state.instanceTicker === 'always') || (defaultStore.state.instanceTicker === 'remote' && appearNote.value.user.instance); const canRenote = computed(() => ['public', 'home'].includes(appearNote.value.visibility) || (appearNote.value.visibility === 'followers' && appearNote.value.userId === $i.id)); diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index a793a85ff9..e287890e2c 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -309,7 +309,7 @@ const showContent = ref(defaultStore.state.uncollapseCW); const isDeleted = ref(false); const renoted = ref(false); const muted = ref($i ? checkWordMute(appearNote.value, $i, $i.mutedWords) : false); -const translation = ref(null); +const translation = ref<Misskey.entities.NotesTranslateResponse | null>(null); const translating = ref(false); const parsed = appearNote.value.text ? mfm.parse(appearNote.value.text) : null; const urls = parsed ? extractUrlFromMfm(parsed).filter(u => u !== renoteUrl && u !== renoteUri) : null; @@ -353,7 +353,7 @@ provide('react', (reaction: string) => { }); const tab = ref('replies'); -const reactionTabType = ref(null); +const reactionTabType = ref<string | null>(null); const renotesPagination = computed(() => ({ endpoint: 'notes/renotes', diff --git a/packages/frontend/src/components/MkPasswordDialog.vue b/packages/frontend/src/components/MkPasswordDialog.vue index 711c54c7f1..85dd402730 100644 --- a/packages/frontend/src/components/MkPasswordDialog.vue +++ b/packages/frontend/src/components/MkPasswordDialog.vue @@ -52,7 +52,7 @@ const emit = defineEmits<{ const dialog = shallowRef<InstanceType<typeof MkModalWindow>>(); const passwordInput = shallowRef<InstanceType<typeof MkInput>>(); const password = ref(''); -const token = ref(null); +const token = ref<string | null>(null); function onClose() { emit('cancelled'); diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index b26ce2932a..8838da15a9 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -187,14 +187,14 @@ watch(showPreview, () => defaultStore.set('showPreview', showPreview.value)); const cw = ref<string | null>(props.initialCw ?? null); const localOnly = ref<boolean>(props.initialLocalOnly ?? defaultStore.state.rememberNoteVisibility ? defaultStore.state.localOnly : defaultStore.state.defaultNoteLocalOnly); const visibility = ref(props.initialVisibility ?? (defaultStore.state.rememberNoteVisibility ? defaultStore.state.visibility : defaultStore.state.defaultNoteVisibility) as typeof Misskey.noteVisibilities[number]); -const visibleUsers = ref([]); +const visibleUsers = ref<Misskey.entities.UserDetailed[]>([]); if (props.initialVisibleUsers) { props.initialVisibleUsers.forEach(pushVisibleUser); } const reactionAcceptance = ref(defaultStore.state.reactionAcceptance); const autocomplete = ref(null); const draghover = ref(false); -const quoteId = ref(null); +const quoteId = ref<string | null>(null); const hasNotSpecifiedMentions = ref(false); const recentHashtags = ref(JSON.parse(miLocalStorage.getItem('hashtags') ?? '[]')); const imeText = ref(''); diff --git a/packages/frontend/src/components/MkRolePreview.vue b/packages/frontend/src/components/MkRolePreview.vue index 0e8ce35609..bd1767155b 100644 --- a/packages/frontend/src/components/MkRolePreview.vue +++ b/packages/frontend/src/components/MkRolePreview.vue @@ -28,10 +28,11 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { } from 'vue'; +import * as Misskey from 'misskey-js'; import { i18n } from '@/i18n.js'; const props = withDefaults(defineProps<{ - role: any; + role: Misskey.entities.Role; forModeration: boolean; detailed: boolean; }>(), { diff --git a/packages/frontend/src/components/MkSelect.vue b/packages/frontend/src/components/MkSelect.vue index d8c8c4998b..665ae2b813 100644 --- a/packages/frontend/src/components/MkSelect.vue +++ b/packages/frontend/src/components/MkSelect.vue @@ -65,10 +65,10 @@ const opening = ref(false); const changed = ref(false); const invalid = ref(false); const filled = computed(() => v.value !== '' && v.value != null); -const inputEl = ref(null); -const prefixEl = ref(null); -const suffixEl = ref(null); -const container = ref(null); +const inputEl = ref<HTMLObjectElement | null>(null); +const prefixEl = ref<HTMLElement | null>(null); +const suffixEl = ref<HTMLElement | null>(null); +const container = ref<HTMLElement | null>(null); const height = props.small ? 33 : props.large ? 39 : diff --git a/packages/frontend/src/components/MkSignin.vue b/packages/frontend/src/components/MkSignin.vue index 08830fca7a..c884ce53ea 100644 --- a/packages/frontend/src/components/MkSignin.vue +++ b/packages/frontend/src/components/MkSignin.vue @@ -71,8 +71,6 @@ const host = ref(toUnicode(configHost)); const totpLogin = ref(false); const queryingKey = ref(false); const credentialRequest = ref<CredentialRequestOptions | null>(null); -const hCaptchaResponse = ref(null); -const reCaptchaResponse = ref(null); const emit = defineEmits<{ (ev: 'login', v: any): void; @@ -126,8 +124,6 @@ async function queryKey(): Promise<void> { username: username.value, password: password.value, credential: credential.toJSON(), - 'hcaptcha-response': hCaptchaResponse.value, - 'g-recaptcha-response': reCaptchaResponse.value, }); }).then(res => { emit('login', res); @@ -149,8 +145,6 @@ function onSubmit(): void { os.api('signin', { username: username.value, password: password.value, - 'hcaptcha-response': hCaptchaResponse.value, - 'g-recaptcha-response': reCaptchaResponse.value, }).then(res => { totpLogin.value = true; signing.value = false; @@ -168,8 +162,6 @@ function onSubmit(): void { os.api('signin', { username: username.value, password: password.value, - 'hcaptcha-response': hCaptchaResponse.value, - 'g-recaptcha-response': reCaptchaResponse.value, token: user.value?.twoFactorEnabled ? token.value : undefined, }).then(res => { emit('login', res); diff --git a/packages/frontend/src/components/MkSignupDialog.form.vue b/packages/frontend/src/components/MkSignupDialog.form.vue index 3c5dd0ce29..9984b09c1a 100644 --- a/packages/frontend/src/components/MkSignupDialog.form.vue +++ b/packages/frontend/src/components/MkSignupDialog.form.vue @@ -121,9 +121,9 @@ const emailState = ref<null | 'wait' | 'ok' | 'unavailable:used' | 'unavailable: const passwordStrength = ref<'' | 'low' | 'medium' | 'high'>(''); const passwordRetypeState = ref<null | 'match' | 'not-match'>(null); const submitting = ref<boolean>(false); -const hCaptchaResponse = ref(null); -const reCaptchaResponse = ref(null); -const turnstileResponse = ref(null); +const hCaptchaResponse = ref<string | null>(null); +const reCaptchaResponse = ref<string | null>(null); +const turnstileResponse = ref<string | null>(null); const usernameAbortController = ref<null | AbortController>(null); const emailAbortController = ref<null | AbortController>(null); diff --git a/packages/frontend/src/components/MkSparkle.vue b/packages/frontend/src/components/MkSparkle.vue index a7cd1692bf..269825e25e 100644 --- a/packages/frontend/src/components/MkSparkle.vue +++ b/packages/frontend/src/components/MkSparkle.vue @@ -72,7 +72,14 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, onUnmounted, ref, shallowRef } from 'vue'; -const particles = ref([]); +const particles = ref<{ + id: string, + x: number, + y: number, + size: number, + dur: number, + color: string +}[]>([]); const el = shallowRef<HTMLElement>(); const width = ref(0); const height = ref(0); diff --git a/packages/frontend/src/components/MkUserAnnouncementEditDialog.vue b/packages/frontend/src/components/MkUserAnnouncementEditDialog.vue index e1237659c2..3fbadbe34f 100644 --- a/packages/frontend/src/components/MkUserAnnouncementEditDialog.vue +++ b/packages/frontend/src/components/MkUserAnnouncementEditDialog.vue @@ -66,7 +66,7 @@ const props = defineProps<{ announcement?: any, }>(); -const dialog = ref(null); +const dialog = ref<InstanceType<typeof MkModalWindow> | null>(null); const title = ref<string>(props.announcement ? props.announcement.title : ''); const text = ref<string>(props.announcement ? props.announcement.text : ''); const icon = ref<string>(props.announcement ? props.announcement.icon : 'info'); diff --git a/packages/frontend/src/components/MkWidgets.vue b/packages/frontend/src/components/MkWidgets.vue index a5d5ff733f..bc1f33c43e 100644 --- a/packages/frontend/src/components/MkWidgets.vue +++ b/packages/frontend/src/components/MkWidgets.vue @@ -84,7 +84,7 @@ const widgetRefs = {}; const configWidget = (id: string) => { widgetRefs[id].configure(); }; -const widgetAdderSelected = ref(null); +const widgetAdderSelected = ref<string | null>(null); const addWidget = () => { if (widgetAdderSelected.value == null) return; diff --git a/packages/frontend/src/components/form/suspense.vue b/packages/frontend/src/components/form/suspense.vue index af5daa10ff..933f00b081 100644 --- a/packages/frontend/src/components/form/suspense.vue +++ b/packages/frontend/src/components/form/suspense.vue @@ -30,7 +30,7 @@ const props = defineProps<{ const pending = ref(true); const resolved = ref(false); const rejected = ref(false); -const result = ref(null); +const result = ref<any>(null); const process = () => { if (props.p == null) { diff --git a/packages/frontend/src/components/page/page.note.vue b/packages/frontend/src/components/page/page.note.vue index 5ca707dbc2..d885ebb1d6 100644 --- a/packages/frontend/src/components/page/page.note.vue +++ b/packages/frontend/src/components/page/page.note.vue @@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { onMounted, Ref, ref } from 'vue'; +import { onMounted, ref } from 'vue'; import * as Misskey from 'misskey-js'; import { NoteBlock } from './block.type.js'; import MkNote from '@/components/MkNote.vue'; @@ -23,7 +23,7 @@ const props = defineProps<{ page: Misskey.entities.Page, }>(); -const note: Ref<Misskey.entities.Note | null> = ref(null); +const note = ref<Misskey.entities.Note | null>(null); onMounted(() => { os.api('notes/show', { noteId: props.block.note }) diff --git a/packages/frontend/src/pages/about.vue b/packages/frontend/src/pages/about.vue index ff6ed2a624..b532314745 100644 --- a/packages/frontend/src/pages/about.vue +++ b/packages/frontend/src/pages/about.vue @@ -103,6 +103,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XEmojis from './about.emojis.vue'; import XFederation from './about.federation.vue'; import { version, host } from '@/config.js'; @@ -126,7 +127,7 @@ const props = withDefaults(defineProps<{ initialTab: 'overview', }); -const stats = ref(null); +const stats = ref<Misskey.entities.StatsResponse | null>(null); const tab = ref(props.initialTab); watch(tab, () => { diff --git a/packages/frontend/src/pages/admin-file.vue b/packages/frontend/src/pages/admin-file.vue index 8479b0ddea..845beebbaf 100644 --- a/packages/frontend/src/pages/admin-file.vue +++ b/packages/frontend/src/pages/admin-file.vue @@ -68,6 +68,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import MkButton from '@/components/MkButton.vue'; import MkSwitch from '@/components/MkSwitch.vue'; import MkObjectView from '@/components/MkObjectView.vue'; @@ -83,8 +84,8 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; import { iAmAdmin, iAmModerator } from '@/account.js'; const tab = ref('overview'); -const file = ref<any>(null); -const info = ref<any>(null); +const file = ref<Misskey.entities.DriveFile | null>(null); +const info = ref<Misskey.entities.AdminDriveShowFileResponse | null>(null); const isSensitive = ref<boolean>(false); const props = defineProps<{ diff --git a/packages/frontend/src/pages/admin-user.vue b/packages/frontend/src/pages/admin-user.vue index 5225b4a831..c87ec22ef6 100644 --- a/packages/frontend/src/pages/admin-user.vue +++ b/packages/frontend/src/pages/admin-user.vue @@ -225,9 +225,9 @@ const tab = ref(props.initialTab); const chartSrc = ref('per-user-notes'); const user = ref<null | Misskey.entities.UserDetailed>(); const init = ref<ReturnType<typeof createFetcher>>(); -const info = ref(); -const ips = ref(null); -const ap = ref(null); +const info = ref<any>(); +const ips = ref<Misskey.entities.AdminGetUserIpsResponse | null>(null); +const ap = ref<any>(null); const moderator = ref(false); const silenced = ref(false); const approved = ref(false); diff --git a/packages/frontend/src/pages/admin/_header_.vue b/packages/frontend/src/pages/admin/_header_.vue index bac3aa154a..6f1a31616a 100644 --- a/packages/frontend/src/pages/admin/_header_.vue +++ b/packages/frontend/src/pages/admin/_header_.vue @@ -70,7 +70,7 @@ const metadata = injectPageMetadata(); const el = shallowRef<HTMLElement>(null); const tabRefs = {}; const tabHighlightEl = shallowRef<HTMLElement | null>(null); -const bg = ref(null); +const bg = ref<string | null>(null); const height = ref(0); const hasTabs = computed(() => { return props.tabs && props.tabs.length > 0; diff --git a/packages/frontend/src/pages/admin/ads.vue b/packages/frontend/src/pages/admin/ads.vue index 9de9da7d98..8a1e03c30d 100644 --- a/packages/frontend/src/pages/admin/ads.vue +++ b/packages/frontend/src/pages/admin/ads.vue @@ -86,6 +86,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import XHeader from './_header_.vue'; import MkButton from '@/components/MkButton.vue'; import MkInput from '@/components/MkInput.vue'; @@ -98,7 +99,7 @@ import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; -const ads = ref<any[]>([]); +const ads = ref<Misskey.entities.Ad[]>([]); // ISO形式はTZがUTCになってしまうので、TZ分ずらして時間を初期化 const localTime = new Date(); diff --git a/packages/frontend/src/pages/admin/bot-protection.vue b/packages/frontend/src/pages/admin/bot-protection.vue index 034a6fdcc5..eebea51bf1 100644 --- a/packages/frontend/src/pages/admin/bot-protection.vue +++ b/packages/frontend/src/pages/admin/bot-protection.vue @@ -65,6 +65,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { defineAsyncComponent, ref } from 'vue'; +import type { CaptchaProvider } from '@/components/MkCaptcha.vue'; import MkRadios from '@/components/MkRadios.vue'; import MkInput from '@/components/MkInput.vue'; import MkButton from '@/components/MkButton.vue'; @@ -76,7 +77,7 @@ import { i18n } from '@/i18n.js'; const MkCaptcha = defineAsyncComponent(() => import('@/components/MkCaptcha.vue')); -const provider = ref(null); +const provider = ref<CaptchaProvider | null>(null); const hcaptchaSiteKey = ref<string | null>(null); const hcaptchaSecretKey = ref<string | null>(null); const recaptchaSiteKey = ref<string | null>(null); diff --git a/packages/frontend/src/pages/admin/branding.vue b/packages/frontend/src/pages/admin/branding.vue index 3750a84aac..fc6a9e0d67 100644 --- a/packages/frontend/src/pages/admin/branding.vue +++ b/packages/frontend/src/pages/admin/branding.vue @@ -121,9 +121,9 @@ const app192IconUrl = ref<string | null>(null); const app512IconUrl = ref<string | null>(null); const bannerUrl = ref<string | null>(null); const backgroundImageUrl = ref<string | null>(null); -const themeColor = ref<any>(null); -const defaultLightTheme = ref<any>(null); -const defaultDarkTheme = ref<any>(null); +const themeColor = ref<string | null>(null); +const defaultLightTheme = ref<string | null>(null); +const defaultDarkTheme = ref<string | null>(null); const defaultLike = ref<string>(''); const serverErrorImageUrl = ref<string | null>(null); const infoImageUrl = ref<string | null>(null); diff --git a/packages/frontend/src/pages/admin/email-settings.vue b/packages/frontend/src/pages/admin/email-settings.vue index 3fee3d553a..819619df90 100644 --- a/packages/frontend/src/pages/admin/email-settings.vue +++ b/packages/frontend/src/pages/admin/email-settings.vue @@ -79,7 +79,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; import MkButton from '@/components/MkButton.vue'; const enableEmail = ref<boolean>(false); -const email = ref<any>(null); +const email = ref<string | null>(null); const smtpSecure = ref<boolean>(false); const smtpHost = ref<string>(''); const smtpPort = ref<number>(0); diff --git a/packages/frontend/src/pages/admin/files.vue b/packages/frontend/src/pages/admin/files.vue index 9a355865a4..6808da6088 100644 --- a/packages/frontend/src/pages/admin/files.vue +++ b/packages/frontend/src/pages/admin/files.vue @@ -46,7 +46,7 @@ import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; const origin = ref('local'); -const type = ref(null); +const type = ref<string | null>(null); const searchHost = ref(''); const userId = ref(''); const viewMode = ref('grid'); diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue index 3aa74b1b91..1b41a48cb4 100644 --- a/packages/frontend/src/pages/admin/index.vue +++ b/packages/frontend/src/pages/admin/index.vue @@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { onActivated, onMounted, onUnmounted, provide, watch, ref, computed } from 'vue'; +import { ComputedRef, Ref, onActivated, onMounted, onUnmounted, provide, watch, ref, computed } from 'vue'; import { i18n } from '@/i18n.js'; import MkSuperMenu from '@/components/MkSuperMenu.vue'; import MkInfo from '@/components/MkInfo.vue'; @@ -37,7 +37,7 @@ import { instance } from '@/instance.js'; import * as os from '@/os.js'; import { lookupUser, lookupUserByEmail } from '@/scripts/lookup-user.js'; import { useRouter } from '@/router.js'; -import { definePageMetadata, provideMetadataReceiver } from '@/scripts/page-metadata.js'; +import { PageMetadata, definePageMetadata, provideMetadataReceiver } from '@/scripts/page-metadata.js'; const isEmpty = (x: string | null) => x == null || x === ''; @@ -52,10 +52,10 @@ const indexInfo = { provide('shouldOmitHeaderTitle', false); const INFO = ref(indexInfo); -const childInfo = ref(null); +const childInfo: Ref<ComputedRef<PageMetadata> | null> = ref(null); const narrow = ref(false); const view = ref(null); -const el = ref(null); +const el = ref<HTMLDivElement | null>(null); const pageProps = ref({}); let noMaintainerInformation = isEmpty(instance.maintainerName) || isEmpty(instance.maintainerEmail); let noBotProtection = !instance.disableRegistration && !instance.enableHcaptcha && !instance.enableRecaptcha && !instance.enableTurnstile; diff --git a/packages/frontend/src/pages/admin/modlog.vue b/packages/frontend/src/pages/admin/modlog.vue index a50d401ba2..acb0336491 100644 --- a/packages/frontend/src/pages/admin/modlog.vue +++ b/packages/frontend/src/pages/admin/modlog.vue @@ -42,7 +42,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; const logs = shallowRef<InstanceType<typeof MkPagination>>(); -const type = ref(null); +const type = ref<string | null>(null); const moderatorId = ref(''); const pagination = { diff --git a/packages/frontend/src/pages/admin/overview.federation.vue b/packages/frontend/src/pages/admin/overview.federation.vue index 03e33e57c4..2fad222bda 100644 --- a/packages/frontend/src/pages/admin/overview.federation.vue +++ b/packages/frontend/src/pages/admin/overview.federation.vue @@ -47,15 +47,15 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, ref } from 'vue'; -import XPie from './overview.pie.vue'; +import XPie, { type InstanceForPie } from './overview.pie.vue'; import * as os from '@/os.js'; import number from '@/filters/number.js'; import MkNumberDiff from '@/components/MkNumberDiff.vue'; import { i18n } from '@/i18n.js'; import { useChartTooltip } from '@/scripts/use-chart-tooltip.js'; -const topSubInstancesForPie = ref<any>(null); -const topPubInstancesForPie = ref<any>(null); +const topSubInstancesForPie = ref<InstanceForPie[] | null>(null); +const topPubInstancesForPie = ref<InstanceForPie[] | null>(null); const federationPubActive = ref<number | null>(null); const federationPubActiveDiff = ref<number | null>(null); const federationSubActive = ref<number | null>(null); @@ -72,22 +72,28 @@ onMounted(async () => { federationSubActiveDiff.value = chart.subActive[0] - chart.subActive[1]; os.apiGet('federation/stats', { limit: 10 }).then(res => { - topSubInstancesForPie.value = res.topSubInstances.map(x => ({ - name: x.host, - color: x.themeColor, - value: x.followersCount, - onClick: () => { - os.pageWindow(`/instance-info/${x.host}`); - }, - })).concat([{ name: '(other)', color: '#80808080', value: res.otherFollowersCount }]); - topPubInstancesForPie.value = res.topPubInstances.map(x => ({ - name: x.host, - color: x.themeColor, - value: x.followingCount, - onClick: () => { - os.pageWindow(`/instance-info/${x.host}`); - }, - })).concat([{ name: '(other)', color: '#80808080', value: res.otherFollowingCount }]); + topSubInstancesForPie.value = [ + ...res.topSubInstances.map(x => ({ + name: x.host, + color: x.themeColor, + value: x.followersCount, + onClick: () => { + os.pageWindow(`/instance-info/${x.host}`); + }, + })), + { name: '(other)', color: '#80808080', value: res.otherFollowersCount }, + ]; + topPubInstancesForPie.value = [ + ...res.topPubInstances.map(x => ({ + name: x.host, + color: x.themeColor, + value: x.followingCount, + onClick: () => { + os.pageWindow(`/instance-info/${x.host}`); + }, + })), + { name: '(other)', color: '#80808080', value: res.otherFollowingCount }, + ]; }); fetching.value = false; diff --git a/packages/frontend/src/pages/admin/overview.instances.vue b/packages/frontend/src/pages/admin/overview.instances.vue index da9decaab0..de34f0c09b 100644 --- a/packages/frontend/src/pages/admin/overview.instances.vue +++ b/packages/frontend/src/pages/admin/overview.instances.vue @@ -18,12 +18,13 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import * as os from '@/os.js'; import { useInterval } from '@/scripts/use-interval.js'; import MkInstanceCardMini from '@/components/MkInstanceCardMini.vue'; import { defaultStore } from '@/store.js'; -const instances = ref([]); +const instances = ref<Misskey.entities.FederationInstance[]>([]); const fetching = ref(true); const fetch = async () => { diff --git a/packages/frontend/src/pages/admin/overview.moderators.vue b/packages/frontend/src/pages/admin/overview.moderators.vue index c6e81b4a18..3034bdd57e 100644 --- a/packages/frontend/src/pages/admin/overview.moderators.vue +++ b/packages/frontend/src/pages/admin/overview.moderators.vue @@ -18,10 +18,11 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import * as os from '@/os.js'; import { defaultStore } from '@/store.js'; -const moderators = ref<any>(null); +const moderators = ref<Misskey.entities.UserDetailed[] | null>(null); const fetching = ref(true); onMounted(async () => { diff --git a/packages/frontend/src/pages/admin/overview.pie.vue b/packages/frontend/src/pages/admin/overview.pie.vue index a67b67402d..95c1f57b29 100644 --- a/packages/frontend/src/pages/admin/overview.pie.vue +++ b/packages/frontend/src/pages/admin/overview.pie.vue @@ -13,10 +13,17 @@ import { Chart } from 'chart.js'; import { useChartTooltip } from '@/scripts/use-chart-tooltip.js'; import { initChart } from '@/scripts/init-chart.js'; +export type InstanceForPie = { + name: string, + color: string | null, + value: number, + onClick?: () => void +}; + initChart(); const props = defineProps<{ - data: { name: string; value: number; color: string; onClick?: () => void }[]; + data: InstanceForPie[]; }>(); const chartEl = shallowRef<HTMLCanvasElement>(null); diff --git a/packages/frontend/src/pages/admin/overview.stats.vue b/packages/frontend/src/pages/admin/overview.stats.vue index b853aee55d..adbfe3f9e2 100644 --- a/packages/frontend/src/pages/admin/overview.stats.vue +++ b/packages/frontend/src/pages/admin/overview.stats.vue @@ -62,6 +62,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import * as os from '@/os.js'; import MkNumberDiff from '@/components/MkNumberDiff.vue'; import MkNumber from '@/components/MkNumber.vue'; @@ -69,7 +70,7 @@ import { i18n } from '@/i18n.js'; import { customEmojis } from '@/custom-emojis.js'; import { defaultStore } from '@/store.js'; -const stats = ref<any>(null); +const stats = ref<Misskey.entities.StatsResponse | null>(null); const usersComparedToThePrevDay = ref<number>(); const notesComparedToThePrevDay = ref<number>(); const onlineUsersCount = ref(0); diff --git a/packages/frontend/src/pages/admin/overview.users.vue b/packages/frontend/src/pages/admin/overview.users.vue index 6b8dd90747..79579367c1 100644 --- a/packages/frontend/src/pages/admin/overview.users.vue +++ b/packages/frontend/src/pages/admin/overview.users.vue @@ -18,12 +18,13 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import * as os from '@/os.js'; import { useInterval } from '@/scripts/use-interval.js'; import MkUserCardMini from '@/components/MkUserCardMini.vue'; import { defaultStore } from '@/store.js'; -const newUsers = ref(null); +const newUsers = ref<Misskey.entities.UserDetailed[] | null>(null); const fetching = ref(true); const fetch = async () => { diff --git a/packages/frontend/src/pages/admin/overview.vue b/packages/frontend/src/pages/admin/overview.vue index edeab30cbb..9f2920ee0c 100644 --- a/packages/frontend/src/pages/admin/overview.vue +++ b/packages/frontend/src/pages/admin/overview.vue @@ -66,6 +66,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { markRaw, onMounted, onBeforeUnmount, nextTick, shallowRef, ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import XFederation from './overview.federation.vue'; import XInstances from './overview.instances.vue'; import XQueue from './overview.queue.vue'; @@ -76,6 +77,7 @@ import XStats from './overview.stats.vue'; import XRetention from './overview.retention.vue'; import XModerators from './overview.moderators.vue'; import XHeatmap from './overview.heatmap.vue'; +import type { InstanceForPie } from './overview.pie.vue'; import * as os from '@/os.js'; import { useStream } from '@/stream.js'; import { i18n } from '@/i18n.js'; @@ -83,15 +85,15 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; import MkFoldableSection from '@/components/MkFoldableSection.vue'; const rootEl = shallowRef<HTMLElement>(); -const serverInfo = ref<any>(null); -const topSubInstancesForPie = ref<any>(null); -const topPubInstancesForPie = ref<any>(null); +const serverInfo = ref<Misskey.entities.ServerInfoResponse | null>(null); +const topSubInstancesForPie = ref<InstanceForPie[] | null>(null); +const topPubInstancesForPie = ref<InstanceForPie[] | null>(null); const federationPubActive = ref<number | null>(null); const federationPubActiveDiff = ref<number | null>(null); const federationSubActive = ref<number | null>(null); const federationSubActiveDiff = ref<number | null>(null); -const newUsers = ref(null); -const activeInstances = shallowRef(null); +const newUsers = ref<Misskey.entities.UserDetailed[] | null>(null); +const activeInstances = shallowRef<Misskey.entities.FederationInstance | null>(null); const queueStatsConnection = markRaw(useStream().useChannel('queueStats')); const now = new Date(); const filesPagination = { @@ -123,22 +125,28 @@ onMounted(async () => { }); os.apiGet('federation/stats', { limit: 10 }).then(res => { - topSubInstancesForPie.value = res.topSubInstances.map(x => ({ - name: x.host, - color: x.themeColor, - value: x.followersCount, - onClick: () => { - os.pageWindow(`/instance-info/${x.host}`); - }, - })).concat([{ name: '(other)', color: '#80808080', value: res.otherFollowersCount }]); - topPubInstancesForPie.value = res.topPubInstances.map(x => ({ - name: x.host, - color: x.themeColor, - value: x.followingCount, - onClick: () => { - os.pageWindow(`/instance-info/${x.host}`); - }, - })).concat([{ name: '(other)', color: '#80808080', value: res.otherFollowingCount }]); + topSubInstancesForPie.value = [ + ...res.topSubInstances.map(x => ({ + name: x.host, + color: x.themeColor, + value: x.followersCount, + onClick: () => { + os.pageWindow(`/instance-info/${x.host}`); + }, + })), + { name: '(other)', color: '#80808080', value: res.otherFollowersCount }, + ]; + topPubInstancesForPie.value = [ + ...res.topPubInstances.map(x => ({ + name: x.host, + color: x.themeColor, + value: x.followingCount, + onClick: () => { + os.pageWindow(`/instance-info/${x.host}`); + }, + })), + { name: '(other)', color: '#80808080', value: res.otherFollowingCount }, + ]; }); os.api('admin/server-info').then(serverInfoResponse => { diff --git a/packages/frontend/src/pages/admin/proxy-account.vue b/packages/frontend/src/pages/admin/proxy-account.vue index d65e78afa5..1425749bd4 100644 --- a/packages/frontend/src/pages/admin/proxy-account.vue +++ b/packages/frontend/src/pages/admin/proxy-account.vue @@ -22,6 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import MkKeyValue from '@/components/MkKeyValue.vue'; import MkButton from '@/components/MkButton.vue'; import MkInfo from '@/components/MkInfo.vue'; @@ -31,8 +32,8 @@ import { fetchInstance } from '@/instance.js'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; -const proxyAccount = ref<any>(null); -const proxyAccountId = ref<any>(null); +const proxyAccount = ref<Misskey.entities.UserDetailed | null>(null); +const proxyAccountId = ref<string | null>(null); async function init() { const meta = await os.api('admin/meta'); diff --git a/packages/frontend/src/pages/admin/queue.chart.vue b/packages/frontend/src/pages/admin/queue.chart.vue index 9612f78624..b829dd5738 100644 --- a/packages/frontend/src/pages/admin/queue.chart.vue +++ b/packages/frontend/src/pages/admin/queue.chart.vue @@ -62,7 +62,7 @@ const activeSincePrevTick = ref(0); const active = ref(0); const delayed = ref(0); const waiting = ref(0); -const jobs = ref([]); +const jobs = ref<(string | number)[][]>([]); const chartProcess = shallowRef<InstanceType<typeof XChart>>(); const chartActive = shallowRef<InstanceType<typeof XChart>>(); const chartDelayed = shallowRef<InstanceType<typeof XChart>>(); @@ -104,9 +104,11 @@ const onStatsLog = (statsLog) => { }; onMounted(() => { - os.api(props.domain === 'inbox' ? 'admin/queue/inbox-delayed' : props.domain === 'deliver' ? 'admin/queue/deliver-delayed' : null, {}).then(result => { - jobs.value = result; - }); + if (props.domain === 'inbox' || props.domain === 'deliver') { + os.api(`admin/queue/${props.domain}-delayed`).then(result => { + jobs.value = result; + }); + } connection.on('stats', onStats); connection.on('statsLog', onStatsLog); diff --git a/packages/frontend/src/pages/admin/relays.vue b/packages/frontend/src/pages/admin/relays.vue index b4d6490e09..578c29ee6c 100644 --- a/packages/frontend/src/pages/admin/relays.vue +++ b/packages/frontend/src/pages/admin/relays.vue @@ -25,13 +25,14 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import XHeader from './_header_.vue'; import MkButton from '@/components/MkButton.vue'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; -const relays = ref<any[]>([]); +const relays = ref<Misskey.entities.AdminRelaysListResponse>([]); async function addRelay() { const { canceled, result: inbox } = await os.inputText({ @@ -66,7 +67,7 @@ function remove(inbox: string) { } function refresh() { - os.api('admin/relays/list').then((relayList: any) => { + os.api('admin/relays/list').then(relayList => { relays.value = relayList; }); } diff --git a/packages/frontend/src/pages/admin/roles.edit.vue b/packages/frontend/src/pages/admin/roles.edit.vue index 548e56d37e..980c311156 100644 --- a/packages/frontend/src/pages/admin/roles.edit.vue +++ b/packages/frontend/src/pages/admin/roles.edit.vue @@ -23,6 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { v4 as uuid } from 'uuid'; import XHeader from './_header_.vue'; import XEditor from './roles.editor.vue'; @@ -39,8 +40,8 @@ const props = defineProps<{ id?: string; }>(); -const role = ref(null); -const data = ref(null); +const role = ref<Misskey.entities.Role | null>(null); +const data = ref<any>(null); if (props.id) { role.value = await os.api('admin/roles/show', { diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue index 07d7acf11c..649f22e644 100644 --- a/packages/frontend/src/pages/admin/settings.vue +++ b/packages/frontend/src/pages/admin/settings.vue @@ -173,8 +173,8 @@ const pinnedUsers = ref<string>(''); const cacheRemoteFiles = ref<boolean>(false); const cacheRemoteSensitiveFiles = ref<boolean>(false); const enableServiceWorker = ref<boolean>(false); -const swPublicKey = ref<any>(null); -const swPrivateKey = ref<any>(null); +const swPublicKey = ref<string | null>(null); +const swPrivateKey = ref<string | null>(null); const enableFanoutTimeline = ref<boolean>(false); const enableFanoutTimelineDbFallback = ref<boolean>(false); const perLocalUserUserTimelineCacheMax = ref<number>(0); diff --git a/packages/frontend/src/pages/antenna-timeline.vue b/packages/frontend/src/pages/antenna-timeline.vue index c8a4c3f8dc..9abf0b9776 100644 --- a/packages/frontend/src/pages/antenna-timeline.vue +++ b/packages/frontend/src/pages/antenna-timeline.vue @@ -25,6 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref, shallowRef } from 'vue'; +import * as Misskey from 'misskey-js'; import MkTimeline from '@/components/MkTimeline.vue'; import { scroll } from '@/scripts/scroll.js'; import * as os from '@/os.js'; @@ -38,7 +39,7 @@ const props = defineProps<{ antennaId: string; }>(); -const antenna = ref(null); +const antenna = ref<Misskey.entities.Antenna | null>(null); const queue = ref(0); const rootEl = shallowRef<HTMLElement>(); const tlEl = shallowRef<InstanceType<typeof MkTimeline>>(); diff --git a/packages/frontend/src/pages/api-console.vue b/packages/frontend/src/pages/api-console.vue index 946ff3b7ba..dcdb5b8fe3 100644 --- a/packages/frontend/src/pages/api-console.vue +++ b/packages/frontend/src/pages/api-console.vue @@ -46,7 +46,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; const body = ref('{}'); const endpoint = ref(''); -const endpoints = ref<any[]>([]); +const endpoints = ref<string[]>([]); const sending = ref(false); const res = ref(''); const withCredential = ref(true); diff --git a/packages/frontend/src/pages/avatar-decorations.vue b/packages/frontend/src/pages/avatar-decorations.vue index 8e2eb2df25..30b100a7fb 100644 --- a/packages/frontend/src/pages/avatar-decorations.vue +++ b/packages/frontend/src/pages/avatar-decorations.vue @@ -35,6 +35,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import MkButton from '@/components/MkButton.vue'; import MkInput from '@/components/MkInput.vue'; import MkTextarea from '@/components/MkTextarea.vue'; @@ -43,7 +44,7 @@ import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; import MkFolder from '@/components/MkFolder.vue'; -const avatarDecorations = ref<any[]>([]); +const avatarDecorations = ref<Misskey.entities.AdminAvatarDecorationsListResponse>([]); function add() { avatarDecorations.value.unshift({ diff --git a/packages/frontend/src/pages/channel-editor.vue b/packages/frontend/src/pages/channel-editor.vue index 5408536bb9..bd38da7b63 100644 --- a/packages/frontend/src/pages/channel-editor.vue +++ b/packages/frontend/src/pages/channel-editor.vue @@ -70,6 +70,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref, watch, defineAsyncComponent } from 'vue'; +import * as Misskey from 'misskey-js'; import MkButton from '@/components/MkButton.vue'; import MkInput from '@/components/MkInput.vue'; import MkColorInput from '@/components/MkColorInput.vue'; @@ -90,15 +91,15 @@ const props = defineProps<{ channelId?: string; }>(); -const channel = ref(null); -const name = ref(null); -const description = ref(null); +const channel = ref<Misskey.entities.Channel | null>(null); +const name = ref<string | null>(null); +const description = ref<string | null>(null); const bannerUrl = ref<string | null>(null); const bannerId = ref<string | null>(null); const color = ref('#000'); const isSensitive = ref(false); const allowRenoteToExternal = ref(true); -const pinnedNotes = ref([]); +const pinnedNotes = ref<Partial<Misskey.entities.Note>[]>([]); watch(() => bannerId.value, async () => { if (bannerId.value == null) { diff --git a/packages/frontend/src/pages/custom-emojis-manager.vue b/packages/frontend/src/pages/custom-emojis-manager.vue index 9f68b6b485..bc2a268f34 100644 --- a/packages/frontend/src/pages/custom-emojis-manager.vue +++ b/packages/frontend/src/pages/custom-emojis-manager.vue @@ -88,9 +88,9 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; const emojisPaginationComponent = shallowRef<InstanceType<typeof MkPagination>>(); const tab = ref('local'); -const query = ref(null); -const queryRemote = ref(null); -const host = ref(null); +const query = ref<string | null>(null); +const queryRemote = ref<string | null>(null); +const host = ref<string | null>(null); const selectMode = ref(false); const selectedEmojis = ref<string[]>([]); diff --git a/packages/frontend/src/pages/drive.vue b/packages/frontend/src/pages/drive.vue index 7c88abc167..f3a3af677f 100644 --- a/packages/frontend/src/pages/drive.vue +++ b/packages/frontend/src/pages/drive.vue @@ -11,11 +11,12 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XDrive from '@/components/MkDrive.vue'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; -const folder = ref(null); +const folder = ref<Misskey.entities.DriveFolder | null>(null); const headerActions = computed(() => []); diff --git a/packages/frontend/src/pages/emoji-edit-dialog.vue b/packages/frontend/src/pages/emoji-edit-dialog.vue index ce6b5ae5f0..82cfa92f6a 100644 --- a/packages/frontend/src/pages/emoji-edit-dialog.vue +++ b/packages/frontend/src/pages/emoji-edit-dialog.vue @@ -92,7 +92,7 @@ const props = defineProps<{ emoji?: any, }>(); -const dialog = ref(null); +const dialog = ref<InstanceType<typeof MkModalWindow> | null>(null); const name = ref<string>(props.emoji ? props.emoji.name : ''); const category = ref<string>(props.emoji ? props.emoji.category : ''); const aliases = ref<string>(props.emoji ? props.emoji.aliases.join(' ') : ''); @@ -100,7 +100,7 @@ const license = ref<string>(props.emoji ? (props.emoji.license ?? '') : ''); const isSensitive = ref(props.emoji ? props.emoji.isSensitive : false); const localOnly = ref(props.emoji ? props.emoji.localOnly : false); const roleIdsThatCanBeUsedThisEmojiAsReaction = ref(props.emoji ? props.emoji.roleIdsThatCanBeUsedThisEmojiAsReaction : []); -const rolesThatCanBeUsedThisEmojiAsReaction = ref([]); +const rolesThatCanBeUsedThisEmojiAsReaction = ref<Misskey.entities.Role[]>([]); const file = ref<Misskey.entities.DriveFile>(); watch(roleIdsThatCanBeUsedThisEmojiAsReaction, async () => { diff --git a/packages/frontend/src/pages/explore.roles.vue b/packages/frontend/src/pages/explore.roles.vue index 929da19426..d30e107e97 100644 --- a/packages/frontend/src/pages/explore.roles.vue +++ b/packages/frontend/src/pages/explore.roles.vue @@ -13,10 +13,11 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import MkRolePreview from '@/components/MkRolePreview.vue'; import * as os from '@/os.js'; -const roles = ref(); +const roles = ref<Misskey.entities.Role[] | null>(null); os.api('roles/list').then(res => { roles.value = res.filter(x => x.target === 'manual').sort((a, b) => b.displayOrder - a.displayOrder); diff --git a/packages/frontend/src/pages/explore.users.vue b/packages/frontend/src/pages/explore.users.vue index 741a3bc219..fbca2b8ede 100644 --- a/packages/frontend/src/pages/explore.users.vue +++ b/packages/frontend/src/pages/explore.users.vue @@ -64,6 +64,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { watch, ref, shallowRef, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import MkUserList from '@/components/MkUserList.vue'; import MkFoldableSection from '@/components/MkFoldableSection.vue'; import MkTab from '@/components/MkTab.vue'; @@ -76,8 +77,8 @@ const props = defineProps<{ const origin = ref('local'); const tagsEl = shallowRef<InstanceType<typeof MkFoldableSection>>(); -const tagsLocal = ref([]); -const tagsRemote = ref([]); +const tagsLocal = ref<Misskey.entities.Hashtag[]>([]); +const tagsRemote = ref<Misskey.entities.Hashtag[]>([]); watch(() => props.tag, () => { if (tagsEl.value) tagsEl.value.toggleContent(props.tag == null); diff --git a/packages/frontend/src/pages/flash/flash-edit.vue b/packages/frontend/src/pages/flash/flash-edit.vue index a4c2c0bc37..21e6d00613 100644 --- a/packages/frontend/src/pages/flash/flash-edit.vue +++ b/packages/frontend/src/pages/flash/flash-edit.vue @@ -35,6 +35,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import MkButton from '@/components/MkButton.vue'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; @@ -364,8 +365,8 @@ const props = defineProps<{ id?: string; }>(); -const flash = ref(null); -const visibility = ref('public'); +const flash = ref<Misskey.entities.Flash | null>(null); +const visibility = ref<Misskey.entities.FlashUpdateRequest['visibility']>('public'); if (props.id) { flash.value = await os.api('flash/show', { diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index c7ffd5c966..5fae1248e9 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -58,6 +58,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, onDeactivated, onUnmounted, Ref, ref, watch, shallowRef } from 'vue'; +import * as Misskey from 'misskey-js'; import { Interpreter, Parser, values } from '@syuilo/aiscript'; import MkButton from '@/components/MkButton.vue'; import * as os from '@/os.js'; @@ -78,8 +79,8 @@ const props = defineProps<{ id: string; }>(); -const flash = ref(null); -const error = ref(null); +const flash = ref<Misskey.entities.Flash | null>(null); +const error = ref<any>(null); function fetchFlash() { flash.value = null; diff --git a/packages/frontend/src/pages/gallery/edit.vue b/packages/frontend/src/pages/gallery/edit.vue index ef6286f27f..857317c48f 100644 --- a/packages/frontend/src/pages/gallery/edit.vue +++ b/packages/frontend/src/pages/gallery/edit.vue @@ -39,6 +39,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import MkButton from '@/components/MkButton.vue'; import MkInput from '@/components/MkInput.vue'; import MkTextarea from '@/components/MkTextarea.vue'; @@ -56,10 +57,10 @@ const props = defineProps<{ postId?: string; }>(); -const init = ref(null); -const files = ref([]); -const description = ref(null); -const title = ref(null); +const init = ref<(() => Promise<any>) | null>(null); +const files = ref<Misskey.entities.DriveFile[]>([]); +const description = ref<string | null>(null); +const title = ref<string | null>(null); const isSensitive = ref(false); function selectFile(evt) { @@ -109,7 +110,7 @@ watch(() => props.postId, () => { init.value = () => props.postId ? os.api('gallery/posts/show', { postId: props.postId, }).then(post => { - files.value = post.files; + files.value = post.files ?? []; title.value = post.title; description.value = post.description; isSensitive.value = post.isSensitive; diff --git a/packages/frontend/src/pages/gallery/post.vue b/packages/frontend/src/pages/gallery/post.vue index f9fa691580..54a8790ef9 100644 --- a/packages/frontend/src/pages/gallery/post.vue +++ b/packages/frontend/src/pages/gallery/post.vue @@ -63,6 +63,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import MkButton from '@/components/MkButton.vue'; import * as os from '@/os.js'; import MkContainer from '@/components/MkContainer.vue'; @@ -84,8 +85,8 @@ const props = defineProps<{ postId: string; }>(); -const post = ref(null); -const error = ref(null); +const post = ref<Misskey.entities.GalleryPost | null>(null); +const error = ref<any>(null); const otherPostsPagination = { endpoint: 'users/gallery/posts' as const, limit: 6, diff --git a/packages/frontend/src/pages/list.vue b/packages/frontend/src/pages/list.vue index 731ad9f2ae..d6c6685a79 100644 --- a/packages/frontend/src/pages/list.vue +++ b/packages/frontend/src/pages/list.vue @@ -35,6 +35,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { watch, computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import * as os from '@/os.js'; import { userPage } from '@/filters/user.js'; import { i18n } from '@/i18n.js'; @@ -47,9 +48,9 @@ const props = defineProps<{ listId: string; }>(); -const list = ref(null); +const list = ref<Misskey.entities.UserList | null>(null); const error = ref(); -const users = ref([]); +const users = ref<Misskey.entities.UserDetailed[]>([]); function fetchList(): void { os.api('users/lists/show', { diff --git a/packages/frontend/src/pages/my-antennas/edit.vue b/packages/frontend/src/pages/my-antennas/edit.vue index 6cb368ca9d..851b32527c 100644 --- a/packages/frontend/src/pages/my-antennas/edit.vue +++ b/packages/frontend/src/pages/my-antennas/edit.vue @@ -11,6 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XAntenna from './editor.vue'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; @@ -20,7 +21,7 @@ import { antennasCache } from '@/cache.js'; const router = useRouter(); -const antenna = ref<any>(null); +const antenna = ref<Misskey.entities.Antenna | null>(null); const props = defineProps<{ antennaId: string diff --git a/packages/frontend/src/pages/my-antennas/editor.vue b/packages/frontend/src/pages/my-antennas/editor.vue index 5eacf15efb..0fc7f862a3 100644 --- a/packages/frontend/src/pages/my-antennas/editor.vue +++ b/packages/frontend/src/pages/my-antennas/editor.vue @@ -60,7 +60,7 @@ import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; const props = defineProps<{ - antenna: any + antenna: Misskey.entities.Antenna }>(); const emit = defineEmits<{ @@ -70,8 +70,8 @@ const emit = defineEmits<{ }>(); const name = ref<string>(props.antenna.name); -const src = ref<string>(props.antenna.src); -const userListId = ref<any>(props.antenna.userListId); +const src = ref<Misskey.entities.AntennasCreateRequest['src']>(props.antenna.src); +const userListId = ref<string | null>(props.antenna.userListId); const users = ref<string>(props.antenna.users.join('\n')); const keywords = ref<string>(props.antenna.keywords.map(x => x.join(' ')).join('\n')); const excludeKeywords = ref<string>(props.antenna.excludeKeywords.map(x => x.join(' ')).join('\n')); @@ -80,7 +80,7 @@ const localOnly = ref<boolean>(props.antenna.localOnly); const withReplies = ref<boolean>(props.antenna.withReplies); const withFile = ref<boolean>(props.antenna.withFile); const notify = ref<boolean>(props.antenna.notify); -const userLists = ref<any>(null); +const userLists = ref<Misskey.entities.UserList[] | null>(null); watch(() => src.value, async () => { if (src.value === 'list' && userLists.value === null) { @@ -107,8 +107,7 @@ async function saveAntenna() { await os.apiWithDialog('antennas/create', antennaData); emit('created'); } else { - antennaData['antennaId'] = props.antenna.id; - await os.apiWithDialog('antennas/update', antennaData); + await os.apiWithDialog('antennas/update', { ...antennaData, antennaId: props.antenna.id }); emit('updated'); } } diff --git a/packages/frontend/src/pages/my-clips/index.vue b/packages/frontend/src/pages/my-clips/index.vue index 05a3ec4d2e..d787e53bb0 100644 --- a/packages/frontend/src/pages/my-clips/index.vue +++ b/packages/frontend/src/pages/my-clips/index.vue @@ -27,6 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { watch, ref, shallowRef, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import MkPagination from '@/components/MkPagination.vue'; import MkButton from '@/components/MkButton.vue'; import MkClipPreview from '@/components/MkClipPreview.vue'; @@ -42,7 +43,7 @@ const pagination = { }; const tab = ref('my'); -const favorites = ref(); +const favorites = ref<Misskey.entities.Clip[] | null>(null); const pagingComponent = shallowRef<InstanceType<typeof MkPagination>>(); diff --git a/packages/frontend/src/pages/note.vue b/packages/frontend/src/pages/note.vue index 1e62ca9f61..a98a7bde2c 100644 --- a/packages/frontend/src/pages/note.vue +++ b/packages/frontend/src/pages/note.vue @@ -67,7 +67,7 @@ const props = defineProps<{ }>(); const note = ref<null | Misskey.entities.Note>(); -const clips = ref(); +const clips = ref<Misskey.entities.Clip[]>(); const showPrev = ref(false); const showNext = ref(false); const expandAllCws = ref(false); diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue index f97c5ea1a7..459454a9be 100644 --- a/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue +++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.image.vue @@ -22,6 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> /* eslint-disable vue/no-mutating-props */ import { onMounted, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XContainer from '../page-editor.container.vue'; import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue'; import * as os from '@/os.js'; @@ -35,7 +36,7 @@ const emit = defineEmits<{ (ev: 'update:modelValue', value: any): void; }>(); -const file = ref<any>(null); +const file = ref<Misskey.entities.DriveFile | null>(null); async function choose() { os.selectDriveFile(false).then((fileResponse) => { diff --git a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.vue b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.vue index fc11ca8543..442558cc2a 100644 --- a/packages/frontend/src/pages/page-editor/els/page-editor.el.note.vue +++ b/packages/frontend/src/pages/page-editor/els/page-editor.el.note.vue @@ -24,6 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> /* eslint-disable vue/no-mutating-props */ import { watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XContainer from '../page-editor.container.vue'; import MkInput from '@/components/MkInput.vue'; import MkSwitch from '@/components/MkSwitch.vue'; @@ -41,7 +42,7 @@ const emit = defineEmits<{ }>(); const id = ref<any>(props.modelValue.note); -const note = ref<any>(null); +const note = ref<Misskey.entities.Note | null>(null); watch(id, async () => { if (id.value && (id.value.startsWith('http://') || id.value.startsWith('https://'))) { 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 2a52d7611e..52220d36bb 100644 --- a/packages/frontend/src/pages/page-editor/page-editor.blocks.vue +++ b/packages/frontend/src/pages/page-editor/page-editor.blocks.vue @@ -16,6 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { defineAsyncComponent } from 'vue'; +import * as Misskey from 'misskey-js'; import XSection from './els/page-editor.el.section.vue'; import XText from './els/page-editor.el.text.vue'; import XImage from './els/page-editor.el.image.vue'; @@ -34,11 +35,11 @@ function getComponent(type: string) { const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default)); const props = defineProps<{ - modelValue: any[]; + modelValue: Misskey.entities.Page['content']; }>(); const emit = defineEmits<{ - (ev: 'update:modelValue', value: any[]): void; + (ev: 'update:modelValue', value: Misskey.entities.Page['content']): void; }>(); function updateItem(v) { diff --git a/packages/frontend/src/pages/page-editor/page-editor.vue b/packages/frontend/src/pages/page-editor/page-editor.vue index a6e68686df..8c4696b04b 100644 --- a/packages/frontend/src/pages/page-editor/page-editor.vue +++ b/packages/frontend/src/pages/page-editor/page-editor.vue @@ -62,6 +62,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, provide, watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { v4 as uuid } from 'uuid'; import XBlocks from './page-editor.blocks.vue'; import MkButton from '@/components/MkButton.vue'; @@ -84,16 +85,16 @@ const props = defineProps<{ const tab = ref('settings'); const author = ref($i); const readonly = ref(false); -const page = ref(null); -const pageId = ref(null); -const currentName = ref(null); +const page = ref<Misskey.entities.Page | null>(null); +const pageId = ref<string | null>(null); +const currentName = ref<string | null>(null); const title = ref(''); -const summary = ref(null); +const summary = ref<string | null>(null); const name = ref(Date.now().toString()); -const eyeCatchingImage = ref(null); -const eyeCatchingImageId = ref(null); +const eyeCatchingImage = ref<Misskey.entities.DriveFile | null>(null); +const eyeCatchingImageId = ref<string | null>(null); const font = ref('sans-serif'); -const content = ref([]); +const content = ref<Misskey.entities.Page['content']>([]); const alignCenter = ref(false); const hideTitleWhenPinned = ref(false); diff --git a/packages/frontend/src/pages/page.vue b/packages/frontend/src/pages/page.vue index 2cfb37ffa7..6b06da9a24 100644 --- a/packages/frontend/src/pages/page.vue +++ b/packages/frontend/src/pages/page.vue @@ -77,6 +77,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XPage from '@/components/page/page.vue'; import MkButton from '@/components/MkButton.vue'; import * as os from '@/os.js'; @@ -99,8 +100,8 @@ const props = defineProps<{ username: string; }>(); -const page = ref(null); -const error = ref(null); +const page = ref<Misskey.entities.Page | null>(null); +const error = ref<any>(null); const otherPostsPagination = { endpoint: 'users/pages' as const, limit: 6, diff --git a/packages/frontend/src/pages/registry.keys.vue b/packages/frontend/src/pages/registry.keys.vue index 7e4a0b508d..95aa64f8d3 100644 --- a/packages/frontend/src/pages/registry.keys.vue +++ b/packages/frontend/src/pages/registry.keys.vue @@ -51,7 +51,7 @@ const props = defineProps<{ const scope = computed(() => props.path ? props.path.split('/') : []); -const keys = ref(null); +const keys = ref<any>(null); function fetchKeys() { os.api('i/registry/keys-with-type', { diff --git a/packages/frontend/src/pages/registry.value.vue b/packages/frontend/src/pages/registry.value.vue index baa88ec008..fb3cc4a556 100644 --- a/packages/frontend/src/pages/registry.value.vue +++ b/packages/frontend/src/pages/registry.value.vue @@ -64,8 +64,8 @@ const props = defineProps<{ const scope = computed(() => props.path.split('/').slice(0, -1)); const key = computed(() => props.path.split('/').at(-1)); -const value = ref(null); -const valueForEditor = ref(null); +const value = ref<any>(null); +const valueForEditor = ref<string | null>(null); function fetchValue() { os.api('i/registry/get-detail', { diff --git a/packages/frontend/src/pages/registry.vue b/packages/frontend/src/pages/registry.vue index 0572102849..7d1dd751ab 100644 --- a/packages/frontend/src/pages/registry.vue +++ b/packages/frontend/src/pages/registry.vue @@ -23,6 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import JSON5 from 'json5'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; @@ -31,7 +32,7 @@ import FormLink from '@/components/form/link.vue'; import FormSection from '@/components/form/section.vue'; import MkButton from '@/components/MkButton.vue'; -const scopesWithDomain = ref(null); +const scopesWithDomain = ref<Misskey.entities.IRegistryScopesWithDomainResponse | null>(null); function fetchScopes() { os.api('i/registry/scopes-with-domain').then(res => { diff --git a/packages/frontend/src/pages/role.vue b/packages/frontend/src/pages/role.vue index c99f66f012..6dce4f187d 100644 --- a/packages/frontend/src/pages/role.vue +++ b/packages/frontend/src/pages/role.vue @@ -37,6 +37,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import * as os from '@/os.js'; import MkUserList from '@/components/MkUserList.vue'; import { definePageMetadata } from '@/scripts/page-metadata.js'; @@ -53,7 +54,7 @@ const props = withDefaults(defineProps<{ }); const tab = ref(props.initialTab); -const role = ref(); +const role = ref<Misskey.entities.Role>(); const error = ref(); const visible = ref(false); @@ -62,7 +63,7 @@ watch(() => props.role, () => { roleId: props.role, }).then(res => { role.value = res; - document.title = `${role.value?.name} | ${instanceName}`; + document.title = `${role.value.name} | ${instanceName}`; visible.value = res.isExplorable && res.isPublic; }).catch((err) => { if (err.code === 'NO_SUCH_ROLE') { diff --git a/packages/frontend/src/pages/search.note.vue b/packages/frontend/src/pages/search.note.vue index acfa5b9fdf..f824d9e0a0 100644 --- a/packages/frontend/src/pages/search.note.vue +++ b/packages/frontend/src/pages/search.note.vue @@ -68,7 +68,7 @@ const key = ref(0); const searchQuery = ref(''); const searchOrigin = ref('combined'); const notePagination = ref(); -const user = ref(null); +const user = ref<any>(null); const isLocalOnly = ref(false); const order = ref(false); const filetype = ref(null); diff --git a/packages/frontend/src/pages/settings/accounts.vue b/packages/frontend/src/pages/settings/accounts.vue index 642100342e..697ce27f2f 100644 --- a/packages/frontend/src/pages/settings/accounts.vue +++ b/packages/frontend/src/pages/settings/accounts.vue @@ -29,7 +29,7 @@ import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; import MkUserCardMini from '@/components/MkUserCardMini.vue'; -const storedAccounts = ref<any>(null); +const storedAccounts = ref<{ id: string, token: string }[] | null>(null); const accounts = ref<Misskey.entities.UserDetailed[]>([]); const init = async () => { diff --git a/packages/frontend/src/pages/settings/apps.vue b/packages/frontend/src/pages/settings/apps.vue index 424d9fd4c9..f492dc6d31 100644 --- a/packages/frontend/src/pages/settings/apps.vue +++ b/packages/frontend/src/pages/settings/apps.vue @@ -54,7 +54,7 @@ import MkKeyValue from '@/components/MkKeyValue.vue'; import MkButton from '@/components/MkButton.vue'; import { infoImageUrl } from '@/instance.js'; -const list = ref<any>(null); +const list = ref<InstanceType<typeof FormPagination>>(); const pagination = { endpoint: 'i/apps' as const, diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue index fc2ce45bf0..166e49ac54 100644 --- a/packages/frontend/src/pages/settings/drive.vue +++ b/packages/frontend/src/pages/settings/drive.vue @@ -54,6 +54,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import tinycolor from 'tinycolor2'; import FormLink from '@/components/form/link.vue'; import MkSwitch from '@/components/MkSwitch.vue'; @@ -69,9 +70,9 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; import { $i } from '@/account.js'; const fetching = ref(true); -const usage = ref<any>(null); -const capacity = ref<any>(null); -const uploadFolder = ref<any>(null); +const usage = ref<number | null>(null); +const capacity = ref<number | null>(null); +const uploadFolder = ref<Misskey.entities.DriveFolder | null>(null); const alwaysMarkNsfw = ref($i.alwaysMarkNsfw); const meterStyle = computed(() => { diff --git a/packages/frontend/src/pages/settings/index.vue b/packages/frontend/src/pages/settings/index.vue index 558aed67a5..96575e097b 100644 --- a/packages/frontend/src/pages/settings/index.vue +++ b/packages/frontend/src/pages/settings/index.vue @@ -27,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script setup lang="ts"> -import { computed, onActivated, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'; +import { ComputedRef, Ref, computed, onActivated, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'; import { i18n } from '@/i18n.js'; import MkInfo from '@/components/MkInfo.vue'; import MkSuperMenu from '@/components/MkSuperMenu.vue'; @@ -35,7 +35,7 @@ import { signout, $i } from '@/account.js'; import { clearCache } from '@/scripts/clear-cache.js'; import { instance } from '@/instance.js'; import { useRouter } from '@/router.js'; -import { definePageMetadata, provideMetadataReceiver } from '@/scripts/page-metadata.js'; +import { PageMetadata, definePageMetadata, provideMetadataReceiver } from '@/scripts/page-metadata.js'; import * as os from '@/os.js'; const indexInfo = { @@ -45,7 +45,7 @@ const indexInfo = { }; const INFO = ref(indexInfo); const el = shallowRef<HTMLElement | null>(null); -const childInfo = ref(null); +const childInfo: Ref<ComputedRef<PageMetadata> | null> = ref(null); const router = useRouter(); diff --git a/packages/frontend/src/pages/settings/statusbar.statusbar.vue b/packages/frontend/src/pages/settings/statusbar.statusbar.vue index f1b7dcc0a8..de5f1a3db9 100644 --- a/packages/frontend/src/pages/settings/statusbar.statusbar.vue +++ b/packages/frontend/src/pages/settings/statusbar.statusbar.vue @@ -87,6 +87,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { reactive, watch } from 'vue'; +import * as Misskey from 'misskey-js'; import MkSelect from '@/components/MkSelect.vue'; import MkInput from '@/components/MkInput.vue'; import MkSwitch from '@/components/MkSwitch.vue'; @@ -99,7 +100,7 @@ import { deepClone } from '@/scripts/clone.js'; const props = defineProps<{ _id: string; - userLists: any[] | null; + userLists: Misskey.entities.UserList[] | null; }>(); const statusbar = reactive(deepClone(defaultStore.state.statusbars.find(x => x.id === props._id))); diff --git a/packages/frontend/src/pages/settings/statusbar.vue b/packages/frontend/src/pages/settings/statusbar.vue index ae6a2deaf9..c45e386ac5 100644 --- a/packages/frontend/src/pages/settings/statusbar.vue +++ b/packages/frontend/src/pages/settings/statusbar.vue @@ -16,6 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import { v4 as uuid } from 'uuid'; import XStatusbar from './statusbar.statusbar.vue'; import MkFolder from '@/components/MkFolder.vue'; @@ -27,7 +28,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; const statusbars = defaultStore.reactiveState.statusbars; -const userLists = ref(); +const userLists = ref<Misskey.entities.UserList[] | null>(null); onMounted(() => { os.api('users/lists/list').then(res => { diff --git a/packages/frontend/src/pages/settings/theme.install.vue b/packages/frontend/src/pages/settings/theme.install.vue index d3ba9bc0aa..d377590b9d 100644 --- a/packages/frontend/src/pages/settings/theme.install.vue +++ b/packages/frontend/src/pages/settings/theme.install.vue @@ -25,7 +25,7 @@ import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; -const installThemeCode = ref(null); +const installThemeCode = ref<string | null>(null); async function install(code: string): Promise<void> { try { diff --git a/packages/frontend/src/pages/settings/theme.manage.vue b/packages/frontend/src/pages/settings/theme.manage.vue index 366c39c010..f7856d122f 100644 --- a/packages/frontend/src/pages/settings/theme.manage.vue +++ b/packages/frontend/src/pages/settings/theme.manage.vue @@ -46,7 +46,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js'; const installedThemes = ref(getThemes()); const builtinThemes = getBuiltinThemesRef(); -const selectedThemeId = ref(null); +const selectedThemeId = ref<string | null>(null); const themes = computed(() => [...installedThemes.value, ...builtinThemes.value]); diff --git a/packages/frontend/src/pages/user-list-timeline.vue b/packages/frontend/src/pages/user-list-timeline.vue index 6d203a2882..3ec23df7b8 100644 --- a/packages/frontend/src/pages/user-list-timeline.vue +++ b/packages/frontend/src/pages/user-list-timeline.vue @@ -25,6 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, watch, ref, shallowRef } from 'vue'; +import * as Misskey from 'misskey-js'; import MkTimeline from '@/components/MkTimeline.vue'; import { scroll } from '@/scripts/scroll.js'; import * as os from '@/os.js'; @@ -38,7 +39,7 @@ const props = defineProps<{ listId: string; }>(); -const list = ref(null); +const list = ref<Misskey.entities.UserList | null>(null); const queue = ref(0); const tlEl = shallowRef<InstanceType<typeof MkTimeline>>(); const rootEl = shallowRef<HTMLElement>(); diff --git a/packages/frontend/src/pages/user/followers.vue b/packages/frontend/src/pages/user/followers.vue index 5da950e853..36f1b4543e 100644 --- a/packages/frontend/src/pages/user/followers.vue +++ b/packages/frontend/src/pages/user/followers.vue @@ -32,7 +32,7 @@ const props = withDefaults(defineProps<{ }); const user = ref<null | Misskey.entities.UserDetailed>(null); -const error = ref(null); +const error = ref<any>(null); function fetchUser(): void { if (props.acct == null) return; diff --git a/packages/frontend/src/pages/user/following.vue b/packages/frontend/src/pages/user/following.vue index 6ba134cd78..43876b77c0 100644 --- a/packages/frontend/src/pages/user/following.vue +++ b/packages/frontend/src/pages/user/following.vue @@ -32,7 +32,7 @@ const props = withDefaults(defineProps<{ }); const user = ref<null | Misskey.entities.UserDetailed>(null); -const error = ref(null); +const error = ref<any>(null); function fetchUser(): void { if (props.acct == null) return; diff --git a/packages/frontend/src/pages/user/index.vue b/packages/frontend/src/pages/user/index.vue index c0064d2503..44b4f84ca3 100644 --- a/packages/frontend/src/pages/user/index.vue +++ b/packages/frontend/src/pages/user/index.vue @@ -58,7 +58,7 @@ const props = withDefaults(defineProps<{ const tab = ref(props.page); const user = ref<null | Misskey.entities.UserDetailed>(null); -const error = ref(null); +const error = ref<any>(null); function fetchUser(): void { if (props.acct == null) return; diff --git a/packages/frontend/src/pages/welcome.vue b/packages/frontend/src/pages/welcome.vue index f7d262cc8a..7f0af1b83e 100644 --- a/packages/frontend/src/pages/welcome.vue +++ b/packages/frontend/src/pages/welcome.vue @@ -12,13 +12,14 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XSetup from './welcome.setup.vue'; import XEntrance from './welcome.entrance.a.vue'; import { instanceName } from '@/config.js'; import * as os from '@/os.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; -const meta = ref(null); +const meta = ref<Misskey.entities.MetaResponse | null>(null); os.api('meta', { detail: true }).then(res => { meta.value = res; diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts index e23986ea4a..a409f1b775 100644 --- a/packages/frontend/src/scripts/get-note-menu.ts +++ b/packages/frontend/src/scripts/get-note-menu.ts @@ -133,7 +133,7 @@ export function getCopyNoteOriginLinkMenu(note: misskey.entities.Note, text: str export function getNoteMenu(props: { note: Misskey.entities.Note; menuButton: Ref<HTMLElement>; - translation: Ref<any>; + translation: Ref<Misskey.entities.NotesTranslateResponse | null>; translating: Ref<boolean>; isDeleted: Ref<boolean>; currentClip?: Misskey.entities.Clip; diff --git a/packages/frontend/src/scripts/use-chart-tooltip.ts b/packages/frontend/src/scripts/use-chart-tooltip.ts index daf915c7e3..3d6489c3b8 100644 --- a/packages/frontend/src/scripts/use-chart-tooltip.ts +++ b/packages/frontend/src/scripts/use-chart-tooltip.ts @@ -11,8 +11,12 @@ export function useChartTooltip(opts: { position: 'top' | 'middle' } = { positio const tooltipShowing = ref(false); const tooltipX = ref(0); const tooltipY = ref(0); - const tooltipTitle = ref(null); - const tooltipSeries = ref(null); + const tooltipTitle = ref<string | null>(null); + const tooltipSeries = ref<{ + backgroundColor: string; + borderColor: string; + text: string; + }[] | null>(null); let disposeTooltipComponent; os.popup(MkChartTooltip, { diff --git a/packages/frontend/src/ui/classic.vue b/packages/frontend/src/ui/classic.vue index aadeaea46f..3bb9097985 100644 --- a/packages/frontend/src/ui/classic.vue +++ b/packages/frontend/src/ui/classic.vue @@ -71,8 +71,8 @@ const globalHeaderHeight = ref(0); const wallpaper = miLocalStorage.getItem('wallpaper') != null; const showMenuOnTop = computed(() => defaultStore.state.menuDisplay === 'top'); const live2d = shallowRef<HTMLIFrameElement>(); -const widgetsLeft = ref(); -const widgetsRight = ref(); +const widgetsLeft = ref<HTMLElement>(); +const widgetsRight = ref<HTMLElement>(); provide('router', mainRouter); provideMetadataReceiver((info) => { @@ -84,7 +84,7 @@ provideMetadataReceiver((info) => { provide('shouldHeaderThin', showMenuOnTop.value); provide('forceSpacerMin', true); -function attachSticky(el) { +function attachSticky(el: HTMLElement) { const sticky = new StickySidebar(el, 0, defaultStore.state.menuDisplay === 'top' ? 60 : 0); // TODO: ヘッダーの高さを60pxと決め打ちしているのを直す window.addEventListener('scroll', () => { sticky.calc(window.scrollY); diff --git a/packages/frontend/src/ui/visitor.vue b/packages/frontend/src/ui/visitor.vue index 459ba946b6..78d7e23689 100644 --- a/packages/frontend/src/ui/visitor.vue +++ b/packages/frontend/src/ui/visitor.vue @@ -68,6 +68,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ComputedRef, onMounted, provide, ref, computed } from 'vue'; +import * as Misskey from 'misskey-js'; import XCommon from './_common_/common.vue'; import { instanceName } from '@/config.js'; import * as os from '@/os.js'; @@ -102,7 +103,7 @@ const isTimelineAvailable = ref(instance.policies?.ltlAvailable || instance.poli const showMenu = ref(false); const isDesktop = ref(window.innerWidth >= DESKTOP_THRESHOLD); const narrow = ref(window.innerWidth < 1280); -const meta = ref(); +const meta = ref<Misskey.entities.MetaResponse>(); const keymap = computed(() => { return { diff --git a/packages/frontend/src/widgets/WidgetActivity.calendar.vue b/packages/frontend/src/widgets/WidgetActivity.calendar.vue index aa9fb0a106..bb5a2676dd 100644 --- a/packages/frontend/src/widgets/WidgetActivity.calendar.vue +++ b/packages/frontend/src/widgets/WidgetActivity.calendar.vue @@ -36,7 +36,12 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> const props = defineProps<{ - activity: any[] + activity: { + total: number; + notes: number; + replies: number; + renotes: number; + }[] }>(); for (const d of props.activity) { diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.vue b/packages/frontend/src/widgets/WidgetActivity.chart.vue index a207071324..0e87ec3ec3 100644 --- a/packages/frontend/src/widgets/WidgetActivity.chart.vue +++ b/packages/frontend/src/widgets/WidgetActivity.chart.vue @@ -36,17 +36,22 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; const props = defineProps<{ - activity: any[] + activity: { + total: number; + notes: number; + replies: number; + renotes: number; + }[] }>(); const viewBoxX = ref(147); const viewBoxY = ref(60); const zoom = ref(1); const pos = ref(0); -const pointsNote = ref<any>(null); -const pointsReply = ref<any>(null); -const pointsRenote = ref<any>(null); -const pointsTotal = ref<any>(null); +const pointsNote = ref<string>(); +const pointsReply = ref<string>(); +const pointsRenote = ref<string>(); +const pointsTotal = ref<string>(); function dragListen(fn) { window.addEventListener('mousemove', fn); diff --git a/packages/frontend/src/widgets/WidgetActivity.vue b/packages/frontend/src/widgets/WidgetActivity.vue index b107a47d8c..d2842143b1 100644 --- a/packages/frontend/src/widgets/WidgetActivity.vue +++ b/packages/frontend/src/widgets/WidgetActivity.vue @@ -12,8 +12,8 @@ SPDX-License-Identifier: AGPL-3.0-only <div> <MkLoading v-if="fetching"/> <template v-else> - <XCalendar v-show="widgetProps.view === 0" :activity="[].concat(activity)"/> - <XChart v-show="widgetProps.view === 1" :activity="[].concat(activity)"/> + <XCalendar v-show="widgetProps.view === 0" :activity="activity ?? []"/> + <XChart v-show="widgetProps.view === 1" :activity="activity ?? []"/> </template> </div> </MkContainer> @@ -59,7 +59,12 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name, emit, ); -const activity = ref(null); +const activity = ref<{ + total: number; + notes: number; + replies: number; + renotes: number; +}[] | null>(null); const fetching = ref(true); const toggleView = () => { diff --git a/packages/frontend/src/widgets/WidgetFederation.vue b/packages/frontend/src/widgets/WidgetFederation.vue index 605c24aaa3..9be7d084e9 100644 --- a/packages/frontend/src/widgets/WidgetFederation.vue +++ b/packages/frontend/src/widgets/WidgetFederation.vue @@ -26,6 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import { GetFormResultType } from '@/scripts/form.js'; import MkContainer from '@/components/MkContainer.vue'; @@ -56,8 +57,8 @@ const { widgetProps, configure } = useWidgetPropsManager(name, emit, ); -const instances = ref([]); -const charts = ref([]); +const instances = ref<Misskey.entities.FederationInstance[]>([]); +const charts = ref<Misskey.entities.ChartsInstanceResponse[]>([]); const fetching = ref(true); const fetch = async () => { diff --git a/packages/frontend/src/widgets/WidgetInstanceCloud.vue b/packages/frontend/src/widgets/WidgetInstanceCloud.vue index 0fc96c0d35..38323ed040 100644 --- a/packages/frontend/src/widgets/WidgetInstanceCloud.vue +++ b/packages/frontend/src/widgets/WidgetInstanceCloud.vue @@ -19,6 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { shallowRef } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import { GetFormResultType } from '@/scripts/form.js'; import MkContainer from '@/components/MkContainer.vue'; @@ -48,7 +49,7 @@ const { widgetProps, configure } = useWidgetPropsManager(name, ); const cloud = shallowRef<InstanceType<typeof MkTagCloud> | null>(); -const activeInstances = shallowRef(null); +const activeInstances = shallowRef<Misskey.entities.FederationInstance[] | null>(null); function onInstanceClick(i) { os.pageWindow(`/instance-info/${i.host}`); diff --git a/packages/frontend/src/widgets/WidgetPhotos.vue b/packages/frontend/src/widgets/WidgetPhotos.vue index 808f023174..ff9b6e19f5 100644 --- a/packages/frontend/src/widgets/WidgetPhotos.vue +++ b/packages/frontend/src/widgets/WidgetPhotos.vue @@ -23,6 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onUnmounted, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import { GetFormResultType } from '@/scripts/form.js'; import { useStream } from '@/stream.js'; @@ -57,7 +58,7 @@ const { widgetProps, configure } = useWidgetPropsManager(name, ); const connection = useStream().useChannel('main'); -const images = ref([]); +const images = ref<Misskey.entities.DriveFile[]>([]); const fetching = ref(true); const onDriveFileCreated = (file) => { diff --git a/packages/frontend/src/widgets/WidgetSlideshow.vue b/packages/frontend/src/widgets/WidgetSlideshow.vue index eccb9a00bf..7e39a05881 100644 --- a/packages/frontend/src/widgets/WidgetSlideshow.vue +++ b/packages/frontend/src/widgets/WidgetSlideshow.vue @@ -18,6 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, ref, shallowRef } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import { GetFormResultType } from '@/scripts/form.js'; import * as os from '@/os.js'; @@ -49,7 +50,7 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name, emit, ); -const images = ref([]); +const images = ref<Misskey.entities.DriveFile[]>([]); const fetching = ref(true); const slideA = shallowRef<HTMLElement>(); const slideB = shallowRef<HTMLElement>(); diff --git a/packages/frontend/src/widgets/WidgetTrends.vue b/packages/frontend/src/widgets/WidgetTrends.vue index 738cd70b03..3416a1c0a7 100644 --- a/packages/frontend/src/widgets/WidgetTrends.vue +++ b/packages/frontend/src/widgets/WidgetTrends.vue @@ -25,6 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import { GetFormResultType } from '@/scripts/form.js'; import MkContainer from '@/components/MkContainer.vue'; @@ -54,7 +55,7 @@ const { widgetProps, configure } = useWidgetPropsManager(name, emit, ); -const stats = ref([]); +const stats = ref<Misskey.entities.HashtagsTrendResponse>([]); const fetching = ref(true); const fetch = () => { diff --git a/packages/frontend/src/widgets/WidgetUserList.vue b/packages/frontend/src/widgets/WidgetUserList.vue index f5c1d2d3a3..c40328d2fa 100644 --- a/packages/frontend/src/widgets/WidgetUserList.vue +++ b/packages/frontend/src/widgets/WidgetUserList.vue @@ -25,6 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import { GetFormResultType } from '@/scripts/form.js'; import MkContainer from '@/components/MkContainer.vue'; @@ -58,8 +59,8 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name, emit, ); -const list = ref(); -const users = ref([]); +const list = ref<Misskey.entities.UserList>(); +const users = ref<Misskey.entities.UserDetailed[]>([]); const fetching = ref(true); async function chooseList() { diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.vue b/packages/frontend/src/widgets/server-metric/cpu-mem.vue index 9196ae209f..f13b6a370d 100644 --- a/packages/frontend/src/widgets/server-metric/cpu-mem.vue +++ b/packages/frontend/src/widgets/server-metric/cpu-mem.vue @@ -76,11 +76,12 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, onBeforeUnmount, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { v4 as uuid } from 'uuid'; const props = defineProps<{ connection: any, - meta: any + meta: Misskey.entities.ServerInfoResponse }>(); const viewBoxX = ref<number>(50); @@ -94,10 +95,10 @@ const cpuPolylinePoints = ref<string>(''); const memPolylinePoints = ref<string>(''); const cpuPolygonPoints = ref<string>(''); const memPolygonPoints = ref<string>(''); -const cpuHeadX = ref<any>(null); -const cpuHeadY = ref<any>(null); -const memHeadX = ref<any>(null); -const memHeadY = ref<any>(null); +const cpuHeadX = ref<number>(); +const cpuHeadY = ref<number>(); +const memHeadX = ref<number>(); +const memHeadY = ref<number>(); const cpuP = ref<string>(''); const memP = ref<string>(''); diff --git a/packages/frontend/src/widgets/server-metric/cpu.vue b/packages/frontend/src/widgets/server-metric/cpu.vue index cffbdb27ce..35c20c8935 100644 --- a/packages/frontend/src/widgets/server-metric/cpu.vue +++ b/packages/frontend/src/widgets/server-metric/cpu.vue @@ -16,11 +16,12 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, onBeforeUnmount, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XPie from './pie.vue'; const props = defineProps<{ connection: any, - meta: any + meta: Misskey.entities.ServerInfoResponse }>(); const usage = ref<number>(0); diff --git a/packages/frontend/src/widgets/server-metric/disk.vue b/packages/frontend/src/widgets/server-metric/disk.vue index 18f8560265..0704854878 100644 --- a/packages/frontend/src/widgets/server-metric/disk.vue +++ b/packages/frontend/src/widgets/server-metric/disk.vue @@ -17,11 +17,12 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { computed } from 'vue'; +import * as Misskey from 'misskey-js'; import XPie from './pie.vue'; import bytes from '@/filters/bytes.js'; const props = defineProps<{ - meta: any; // TODO + meta: Misskey.entities.ServerInfoResponse; }>(); const usage = computed(() => props.meta.fs.used / props.meta.fs.total); diff --git a/packages/frontend/src/widgets/server-metric/index.vue b/packages/frontend/src/widgets/server-metric/index.vue index ddfc6e68fa..9a785d9112 100644 --- a/packages/frontend/src/widgets/server-metric/index.vue +++ b/packages/frontend/src/widgets/server-metric/index.vue @@ -21,6 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onUnmounted, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import { useWidgetPropsManager, Widget, WidgetComponentExpose } from '../widget.js'; import XCpuMemory from './cpu-mem.vue'; import XNet from './net.vue'; @@ -65,7 +66,7 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name, emit, ); -const meta = ref(null); +const meta = ref<Misskey.entities.ServerInfoResponse | null>(null); os.apiGet('server-info', {}).then(res => { meta.value = res; diff --git a/packages/frontend/src/widgets/server-metric/mem.vue b/packages/frontend/src/widgets/server-metric/mem.vue index 118fd68fe8..34a1f1ae3d 100644 --- a/packages/frontend/src/widgets/server-metric/mem.vue +++ b/packages/frontend/src/widgets/server-metric/mem.vue @@ -17,12 +17,13 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, onBeforeUnmount, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import XPie from './pie.vue'; import bytes from '@/filters/bytes.js'; const props = defineProps<{ connection: any, - meta: any + meta: Misskey.entities.ServerInfoResponse }>(); const usage = ref<number>(0); diff --git a/packages/frontend/src/widgets/server-metric/net.vue b/packages/frontend/src/widgets/server-metric/net.vue index e6a8bfc22a..7af88a94eb 100644 --- a/packages/frontend/src/widgets/server-metric/net.vue +++ b/packages/frontend/src/widgets/server-metric/net.vue @@ -50,11 +50,12 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, onBeforeUnmount, ref } from 'vue'; +import * as Misskey from 'misskey-js'; import bytes from '@/filters/bytes.js'; const props = defineProps<{ connection: any, - meta: any + meta: Misskey.entities.ServerInfoResponse }>(); const viewBoxX = ref<number>(50); @@ -64,10 +65,10 @@ const inPolylinePoints = ref<string>(''); const outPolylinePoints = ref<string>(''); const inPolygonPoints = ref<string>(''); const outPolygonPoints = ref<string>(''); -const inHeadX = ref<any>(null); -const inHeadY = ref<any>(null); -const outHeadX = ref<any>(null); -const outHeadY = ref<any>(null); +const inHeadX = ref<number>(); +const inHeadY = ref<number>(); +const outHeadX = ref<number>(); +const outHeadY = ref<number>(); const inRecent = ref<number>(0); const outRecent = ref<number>(0); diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index 436f76dbd6..7f4094845a 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.0 - * generatedAt: 2023-12-24T08:46:11.020Z + * generatedAt: 2023-12-25T03:48:32.008Z */ import type { SwitchCaseResponseType } from '../api.js'; diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index 00f2595e2c..5e05759047 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.0 - * generatedAt: 2023-12-24T08:46:11.016Z + * generatedAt: 2023-12-25T03:48:32.001Z */ import type { diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index 0f03fd3446..ceb2f242ac 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.0 - * generatedAt: 2023-12-24T08:46:11.014Z + * generatedAt: 2023-12-25T03:48:31.996Z */ import { operations } from './types.js'; diff --git a/packages/misskey-js/src/autogen/models.ts b/packages/misskey-js/src/autogen/models.ts index 5ae7723630..a7fde6c1a3 100644 --- a/packages/misskey-js/src/autogen/models.ts +++ b/packages/misskey-js/src/autogen/models.ts @@ -1,6 +1,6 @@ /* * version: 2023.12.0 - * generatedAt: 2023-12-24T08:46:11.013Z + * generatedAt: 2023-12-25T03:48:31.993Z */ import { components } from './types.js'; diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 6ff98f5013..28fe5654e6 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -3,7 +3,7 @@ /* * version: 2023.12.0 - * generatedAt: 2023-12-24T08:46:10.930Z + * generatedAt: 2023-12-25T03:48:31.850Z */ /** @@ -4474,6 +4474,7 @@ export type operations = { maintainerEmail: string | null; maintainerName: string | null; name: string | null; + shortName: string | null; objectStorageS3ForcePathStyle: boolean; privacyPolicyUrl: string | null; repositoryUrl: string; @@ -13741,57 +13742,9 @@ export type operations = { 200: { content: { 'application/json': { - topSubInstances: ({ - id?: string; - firstRetrievedAt?: string; - host?: string; - usersCount?: number; - notesCount?: number; - followingCount?: number; - followersCount?: number; - isNotResponding?: boolean; - isSuspended?: boolean; - isBlocked?: boolean; - softwareName?: string; - softwareVersion?: string; - openRegistrations?: boolean; - name?: string; - description?: string; - maintainerName?: string; - maintainerEmail?: string; - isSilenced?: boolean; - iconUrl?: string; - faviconUrl?: string; - themeColor?: string; - infoUpdatedAt?: string | null; - latestRequestReceivedAt?: string | null; - })[]; + topSubInstances: components['schemas']['FederationInstance'][]; otherFollowersCount: number; - topPubInstances: ({ - id?: string; - firstRetrievedAt?: string; - host?: string; - usersCount?: number; - notesCount?: number; - followingCount?: number; - followersCount?: number; - isNotResponding?: boolean; - isSuspended?: boolean; - isBlocked?: boolean; - softwareName?: string; - softwareVersion?: string; - openRegistrations?: boolean; - name?: string; - description?: string; - maintainerName?: string; - maintainerEmail?: string; - isSilenced?: boolean; - iconUrl?: string; - faviconUrl?: string; - themeColor?: string; - infoUpdatedAt?: string | null; - latestRequestReceivedAt?: string | null; - })[]; + topPubInstances: components['schemas']['FederationInstance'][]; otherFollowingCount: number; }; }; @@ -18752,11 +18705,18 @@ export type operations = { iconUrl: string | null; maxNoteTextLength: number; ads: { - place: string; + /** + * Format: id + * @example xxxxxxxxxx + */ + id: string; /** Format: url */ url: string; + place: string; + ratio: number; /** Format: url */ imageUrl: string; + dayOfWeek: number; }[]; /** @default 0 */ notesPerOneAd: number; @@ -21057,7 +21017,10 @@ export type operations = { /** @description OK (with results) */ 200: { content: { - 'application/json': Record<string, never>; + 'application/json': { + sourceLang: string; + text: string; + }; }; }; /** @description Client error */