From feface11c1e64e09b4436be43d91df56e2751f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sat, 17 Jan 2026 23:27:50 +0100 Subject: [PATCH 01/17] pl-fe: fix missing aspect ratio case when height and width is provided MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/components/media-gallery.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/pl-fe/src/components/media-gallery.tsx b/packages/pl-fe/src/components/media-gallery.tsx index ce00867ca..d4d6c4bee 100644 --- a/packages/pl-fe/src/components/media-gallery.tsx +++ b/packages/pl-fe/src/components/media-gallery.tsx @@ -40,8 +40,15 @@ interface SizeData { itemsDimensions: Dimensions[]; } -const getAspectRatio = (attachment: MediaAttachment) => - (attachment.type === 'gifv' || attachment.type === 'image' || attachment.type === 'video') && attachment.meta.original?.aspect || null; +const getAspectRatio = (attachment: MediaAttachment) => { + if ((attachment.type === 'gifv' || attachment.type === 'image' || attachment.type === 'video') && attachment.meta.original) { + if (attachment.meta.original.aspect) { + return attachment.meta.original.aspect; + } + return attachment.meta.original.width / attachment.meta.original.height; + } + return null; +}; const withinLimits = (aspectRatio: number) => aspectRatio >= minimumAspectRatio && aspectRatio <= maximumAspectRatio; From 5d5210f7e0ad21f554e5c7b36a35212a870b0cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Tue, 13 Jan 2026 10:44:28 +0100 Subject: [PATCH 02/17] Translated using Weblate (Polish) Currently translated at 91.7% (1727 of 1882 strings) Translation: pl-fe/pl-fe Translate-URL: https://hosted.weblate.org/projects/pl-fe/pl-fe/pl/ --- packages/pl-fe/src/locales/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pl-fe/src/locales/pl.json b/packages/pl-fe/src/locales/pl.json index 35f8c30ad..96b857612 100644 --- a/packages/pl-fe/src/locales/pl.json +++ b/packages/pl-fe/src/locales/pl.json @@ -1717,7 +1717,7 @@ "status.sensitive_warning": "Wrażliwa zawartość", "status.sensitive_warning.subtitle": "Ta treść może nie być odpowiednia dla niektórych odbiorców.", "status.share": "Udostępnij", - "status.show_filter_reason": "Pokaż mimo wszystko", + "status.show_filter_reason": "Pokaż mimo tego", "status.show_less_all": "Zwiń wszystkie", "status.show_more_all": "Rozwiń wszystkie", "status.show_original": "Pokaż oryginalny wpis", From e676f87cd5b815db2295693303763ae225d702ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 18 Jan 2026 19:39:06 +0100 Subject: [PATCH 03/17] pl-fe: maybe fix editing profile idk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/pages/settings/edit-profile.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pl-fe/src/pages/settings/edit-profile.tsx b/packages/pl-fe/src/pages/settings/edit-profile.tsx index b28e879a8..f106c31d7 100644 --- a/packages/pl-fe/src/pages/settings/edit-profile.tsx +++ b/packages/pl-fe/src/pages/settings/edit-profile.tsx @@ -250,7 +250,7 @@ const EditProfilePage: React.FC = () => { if (fields_attributes?.length === 0) params.fields_attributes = { '0': { name: '', value: '' } }; else if (fields_attributes) params.fields_attributes = Object.fromEntries( - fields_attributes.map((field, i) => [i.toString(), field]), + fields_attributes.map(({ name, value }, i) => [i.toString(), { name, value }]), ); if (header.file !== undefined) params.header = header.file || ''; if (avatar.file !== undefined) params.avatar = avatar.file || ''; From 706a7dc06faa6cd4d9c87b1bea156a5380bcead2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 18 Jan 2026 20:40:53 +0100 Subject: [PATCH 04/17] pl-api: workaround for an iceshrimp.net bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-api/lib/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pl-api/lib/client.ts b/packages/pl-api/lib/client.ts index 0055257c5..4f4982490 100644 --- a/packages/pl-api/lib/client.ts +++ b/packages/pl-api/lib/client.ts @@ -1371,7 +1371,7 @@ class PlApiClient { const response = await this.request('/api/v1/accounts/update_credentials', { method: 'PATCH', - contentType: (this.features.version.software === GOTOSOCIAL || params.avatar || params.header) ? '' : undefined, + contentType: '', body: params, }); From 9e25fed130a24fd34b79107f62e714b414872656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Mon, 19 Jan 2026 04:47:37 +0100 Subject: [PATCH 05/17] pl-api: mitra fixes and updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-api/lib/client.ts | 2 +- packages/pl-api/lib/entities/instance.ts | 11 ++++++++++ .../lib/entities/subscription-invoice.ts | 6 ++--- .../lib/entities/subscription-option.ts | 22 ++++++++++--------- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/packages/pl-api/lib/client.ts b/packages/pl-api/lib/client.ts index 4f4982490..23be2b895 100644 --- a/packages/pl-api/lib/client.ts +++ b/packages/pl-api/lib/client.ts @@ -5849,7 +5849,7 @@ class PlApiClient { * @param recipientId - Recipient ID. */ findSubscription: async(senderId: string, recipientId: string) => { - const response = await this.request('/api/v1/subscriptions/find', { method: 'POST', body: { sender_id: senderId, recipient_id: recipientId } }); + const response = await this.request('/api/v1/subscriptions/find', { params: { sender_id: senderId, recipient_id: recipientId } }); return v.parse(subscriptionDetailsSchema, response.json); }, diff --git a/packages/pl-api/lib/entities/instance.ts b/packages/pl-api/lib/entities/instance.ts index 4945ba9c0..cf03caf22 100644 --- a/packages/pl-api/lib/entities/instance.ts +++ b/packages/pl-api/lib/entities/instance.ts @@ -423,6 +423,17 @@ const instanceSchema = v.pipe( title: v.fallback(v.string(), ''), usage: usageSchema, version: v.pipe(v.fallback(v.string(), '0.0.0'), v.transform(fixVersion)), + blockchains: v.fallback(v.optional(filteredArray(v.object({ + chain_id: v.fallback(v.nullable(v.string()), null), + chain_metadata: coerceObject({ + is_forwarding_required: v.fallback(v.boolean(), false), + description: v.fallback(v.string(), ''), + payment_amount_min: v.number(), + }), + features: coerceObject({ + subscriptions: v.fallback(v.boolean(), false), + }), + }))), undefined), }), ); diff --git a/packages/pl-api/lib/entities/subscription-invoice.ts b/packages/pl-api/lib/entities/subscription-invoice.ts index 6646de27e..47aa4e283 100644 --- a/packages/pl-api/lib/entities/subscription-invoice.ts +++ b/packages/pl-api/lib/entities/subscription-invoice.ts @@ -7,7 +7,7 @@ import { datetimeSchema } from './utils'; */ const subscriptionInvoiceSchema = v.object({ /** Invoice ID. */ - invoice_id: v.string(), + id: v.string(), /** The ID of the sender. */ sender_id: v.string(), /** The ID of the recipient. */ @@ -21,9 +21,9 @@ const subscriptionInvoiceSchema = v.object({ /** Invoice status. */ status: v.picklist(['open', 'paid', 'forwarded', 'timeout', 'cancelled', 'underpaid', 'completed', 'failed']), /** The date when invoice was created. */ - created_at: v.fallback(datetimeSchema, new Date().toISOString()), + created_at: datetimeSchema, /** The date when invoice times out. */ - invoice_expires_at: v.fallback(datetimeSchema, new Date().toISOString()), + invoice_expires_at: datetimeSchema, }); /** diff --git a/packages/pl-api/lib/entities/subscription-option.ts b/packages/pl-api/lib/entities/subscription-option.ts index 156a994fc..9b1ba02a4 100644 --- a/packages/pl-api/lib/entities/subscription-option.ts +++ b/packages/pl-api/lib/entities/subscription-option.ts @@ -3,16 +3,18 @@ import * as v from 'valibot'; /** * @category Schemas */ -const subscriptionOptionSchema = v.object({ - /** Subscription type */ - type: v.picklist(['monero']), - /** CAIP-2 chain ID. */ - chain_id: v.fallback(v.string(), ''), - /** Subscription price (only for Monero) */ - price: v.fallback(v.nullable(v.number()), null), - /** Payout address (only for Monero) */ - payout_address: v.fallback(v.string(), ''), -}); +const subscriptionOptionSchema = v.variant('type', [ + v.object({ + /** Subscription type */ + type: v.literal('monero'), + /** CAIP-2 chain ID. */ + chain_id: v.string(), + /** Subscription price */ + price: v.nullable(v.number()), + /** Payout address */ + payout_address: v.string(), + }), +]); /** * @category Entity types From c2942200cee959a17650f4471e0ba99ab4ff99c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Mon, 19 Jan 2026 13:12:33 +0100 Subject: [PATCH 06/17] pl-api: mitra updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-api/lib/entities/account.ts | 40 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/packages/pl-api/lib/entities/account.ts b/packages/pl-api/lib/entities/account.ts index 3be5bc522..28c2e58e2 100644 --- a/packages/pl-api/lib/entities/account.ts +++ b/packages/pl-api/lib/entities/account.ts @@ -14,6 +14,31 @@ const filterBadges = (tags?: string[]) => const MKLJCZK_ACCOUNTS = ['https://pl.fediverse.pl/users/mkljczk', 'https://gts.mkljczk.pl/users/mkljczk', 'https://gts.mkljczk.pl/@mkljczk']; +const paymentOptionSchema = v.variant('type', [ + v.object({ + /** Payment type */ + type: v.literal('link'), + /** Link name (only for link type) */ + name: v.fallback(v.nullable(v.string()), null), + /** Link URL (only for link type) */ + href: v.fallback(v.nullable(v.string()), null), + /** Unique identifier of a proposal object */ + object_id: v.fallback(v.nullable(v.string()), null), + }), + v.object({ + /** Payment type */ + type: v.literal('monero-subscription'), + /** CAIP-2 chain ID (only for monero-subscription type) */ + chain_id: v.fallback(v.nullable(v.string()), null), + /** Subscription price (only for monero-subscription type) */ + price: v.fallback(v.nullable(v.number()), null), + /** Minimum payment amount (only for monero-subscription type) */ + amount_min: v.fallback(v.nullable(v.number()), null), + /** Unique identifier of a proposal object */ + object_id: v.fallback(v.nullable(v.string()), null), + }), +]); + const preprocessAccount = v.transform((account: any) => { if (!account?.acct) return null; @@ -166,20 +191,7 @@ const baseAccountSchema = v.object({ verified_at: v.fallback(datetimeSchema, new Date().toISOString()), })), /** Payment options */ - payment_options: filteredArray(v.object({ - /** Payment type */ - type: v.picklist(['link', 'monero-subscription']), - /** Link name (only for link type) */ - name: v.fallback(v.nullable(v.string()), null), - /** Link URL (only for link type) */ - href: v.fallback(v.nullable(v.string()), null), - /** CAIP-2 chain ID (only for monero-subscription type) */ - chain_id: v.fallback(v.nullable(v.string()), null), - /** Subscription price (only for monero-subscription type) */ - price: v.fallback(v.nullable(v.string()), null), - /** Unique identifier of a proposal object */ - object_id: v.fallback(v.nullable(v.string()), null), - })), + payment_options: filteredArray(paymentOptionSchema), /** Whether the user is a cat */ is_cat: v.fallback(v.boolean(), false), From dc8c4a28e6d9edbbf40ad752bc13a7b323fce891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Mon, 19 Jan 2026 13:12:49 +0100 Subject: [PATCH 07/17] pl-fe: remove unused defined messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/layouts/profile-layout.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/pl-fe/src/layouts/profile-layout.tsx b/packages/pl-fe/src/layouts/profile-layout.tsx index 1694b1d2b..d8b71172c 100644 --- a/packages/pl-fe/src/layouts/profile-layout.tsx +++ b/packages/pl-fe/src/layouts/profile-layout.tsx @@ -92,6 +92,8 @@ const ProfileLayout: React.FC = () => { const showTabs = !['/following', '/followers', '/pins'].some(path => pathname.endsWith(path)); + console.log(account); + return ( <> {account?.local === false && ( From 2b01d21416b17caf3eadbb4f507a75a4959d8175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Mon, 19 Jan 2026 13:37:46 +0100 Subject: [PATCH 08/17] pl-fe: use consistent wording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../pl-fe/src/components/statuses/sensitive-content-overlay.tsx | 2 +- packages/pl-fe/src/components/ui/button/useButtonStyles.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pl-fe/src/components/statuses/sensitive-content-overlay.tsx b/packages/pl-fe/src/components/statuses/sensitive-content-overlay.tsx index e566d42b6..898a7cd40 100644 --- a/packages/pl-fe/src/components/statuses/sensitive-content-overlay.tsx +++ b/packages/pl-fe/src/components/statuses/sensitive-content-overlay.tsx @@ -105,7 +105,7 @@ const SensitiveContentOverlay = React.forwardRef