From 1dd7e3bcdcb5547b157506d77a6ce7a85b1dd184 Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Thu, 30 Oct 2025 16:05:23 -0700 Subject: [PATCH 01/64] add changelog --- packages/utils/changelog.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/utils/changelog.ts b/packages/utils/changelog.ts index 41b3f3ce..1b01dbe1 100644 --- a/packages/utils/changelog.ts +++ b/packages/utils/changelog.ts @@ -10,6 +10,19 @@ export type VersionEntry = { } const VERSIONS: VersionEntry[] = [ + { + date: `2025-10-30T16:30:00-07:00`, + product: 'app', + version: '0.10.16', + body: `## Security fixes +- Fixed a security vulnerability with .mrpack import zip parsing. + +## Improvements +- Fixed stacking multiple instance wrapper commands. +- Fixed instance-provided filters still showing as locked in the filters bar even when the filter is unlocked. +- Fixed "Friends" title showing up in the sidebar twice when you have no friends. +- Fixed the "Add friends" button not working properly.`, + }, { date: `2025-10-26T18:30:00-07:00`, product: 'app', From 00f9cf0e2c3dd7977c7aade66ee447ababff576b Mon Sep 17 00:00:00 2001 From: thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> Date: Thu, 30 Oct 2025 16:28:18 -0700 Subject: [PATCH 02/64] Fix inconsistent PAT display order (#4662) * Fix inconsistent PAT display order Closes #4661 * Fix side effect in computed property * Fix lint --------- Co-authored-by: Calum H. --- apps/frontend/src/pages/settings/pats.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/frontend/src/pages/settings/pats.vue b/apps/frontend/src/pages/settings/pats.vue index 00e62ca9..bf55bb70 100644 --- a/apps/frontend/src/pages/settings/pats.vue +++ b/apps/frontend/src/pages/settings/pats.vue @@ -100,7 +100,7 @@

-
+
{{ pat.name }} @@ -332,6 +332,9 @@ const deletePatIndex = ref(null) const loading = ref(false) const { data: pats, refresh } = await useAsyncData('pat', () => useBaseFetch('pat')) +const displayPats = computed(() => { + return pats.value.toSorted((a, b) => new Date(b.created) - new Date(a.created)) +}) async function createPat() { startLoading() From 4c1020d2bacd299267647142a37b5eeaacfceff9 Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Fri, 31 Oct 2025 02:36:52 -0700 Subject: [PATCH 03/64] Revert "fix: firefox backup download issues (#4679)" (#4683) This reverts commit c74460fffa80eb30c14716044cc917f5c579046e. --- .../src/components/ui/servers/BackupItem.vue | 89 ++++--------------- .../composables/servers/modules/backups.ts | 83 ----------------- apps/frontend/src/locales/en-US/index.json | 6 -- .../src/pages/servers/manage/[id]/backups.vue | 1 - 4 files changed, 15 insertions(+), 164 deletions(-) diff --git a/apps/frontend/src/components/ui/servers/BackupItem.vue b/apps/frontend/src/components/ui/servers/BackupItem.vue index b8e170ca..6e910066 100644 --- a/apps/frontend/src/components/ui/servers/BackupItem.vue +++ b/apps/frontend/src/components/ui/servers/BackupItem.vue @@ -13,23 +13,14 @@ import { TrashIcon, XIcon, } from '@modrinth/assets' -import { - ButtonStyled, - commonMessages, - injectNotificationManager, - OverflowMenu, - ProgressBar, -} from '@modrinth/ui' +import { ButtonStyled, commonMessages, OverflowMenu, ProgressBar } from '@modrinth/ui' import type { Backup } from '@modrinth/utils' import { defineMessages, useVIntl } from '@vintl/vintl' import dayjs from 'dayjs' -import { computed, ref } from 'vue' - -import type { ModrinthServer } from '~/composables/servers/modrinth-servers.ts' +import { computed } from 'vue' const flags = useFeatureFlags() const { formatMessage } = useVIntl() -const { addNotification } = injectNotificationManager() const emit = defineEmits<{ (e: 'download' | 'rename' | 'restore' | 'lock' | 'retry'): void @@ -42,13 +33,11 @@ const props = withDefaults( preview?: boolean kyrosUrl?: string jwt?: string - server?: ModrinthServer }>(), { preview: false, kyrosUrl: undefined, jwt: undefined, - server: undefined, }, ) @@ -135,48 +124,7 @@ const messages = defineMessages({ id: 'servers.backups.item.retry', defaultMessage: 'Retry', }, - downloadingBackup: { - id: 'servers.backups.item.downloading-backup', - defaultMessage: 'Downloading backup...', - }, - downloading: { - id: 'servers.backups.item.downloading', - defaultMessage: 'Downloading', - }, }) - -const downloadingState = ref<{ progress: number; state: string } | undefined>(undefined) - -const downloading = computed(() => downloadingState.value) - -const handleDownload = async () => { - if (!props.server?.backups || downloading.value) { - return - } - - downloadingState.value = { progress: 0, state: 'ongoing' } - - try { - const download = props.server.backups.downloadBackup(props.backup.id, props.backup.name) - - download.onProgress((p) => { - downloadingState.value = { progress: p.progress, state: 'ongoing' } - }) - - await download.promise - - emit('download') - } catch (error) { - console.error('Failed to download backup:', error) - addNotification({ - type: 'error', - title: 'Download failed', - text: error instanceof Error ? error.message : 'Failed to download backup', - }) - } finally { - downloadingState.value = undefined - } -}