diff --git a/package.json b/package.json
index e1612a0126..a29b37f216 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "sharkey",
- "version": "2025.2.2",
+ "version": "2025.2.3",
"codename": "shonk",
"repository": {
"type": "git",
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 277aed4f79..6ee762a8d4 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -80,7 +80,7 @@
"@fastify/static": "8.0.2",
"@fastify/view": "10.0.1",
"@misskey-dev/sharp-read-bmp": "1.2.0",
- "@misskey-dev/summaly": "5.1.0",
+ "@transfem-org/summaly": "5.2.1",
"@nestjs/common": "10.4.7",
"@nestjs/core": "10.4.7",
"@nestjs/testing": "10.4.7",
diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts
index cb9b74f6d7..44eb029a35 100644
--- a/packages/backend/src/core/activitypub/ApRendererService.ts
+++ b/packages/backend/src/core/activitypub/ApRendererService.ts
@@ -496,9 +496,7 @@ export class ApRendererService {
const attachment = profile.fields.map(field => ({
type: 'PropertyValue',
name: field.name,
- value: (field.value.startsWith('http://') || field.value.startsWith('https://'))
- ? `${new URL(field.value).href}`
- : field.value,
+ value: this.mfmService.toHtml(mfm.parse(field.value)),
}));
const emojis = await this.getEmojis(user.emojis);
diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts
index 19dac1dfb8..b8d7020598 100644
--- a/packages/backend/src/server/web/UrlPreviewService.ts
+++ b/packages/backend/src/server/web/UrlPreviewService.ts
@@ -4,8 +4,8 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import { summaly } from '@misskey-dev/summaly';
-import { SummalyResult } from '@misskey-dev/summaly/built/summary.js';
+import { summaly } from '@transfem-org/summaly';
+import { SummalyResult } from '@transfem-org/summaly/built/summary.js';
import * as Redis from 'ioredis';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
@@ -52,12 +52,10 @@ export class UrlPreviewService {
@bindThis
private wrap(url?: string | null): string | null {
return url != null
- ? url.match(/^https?:\/\//)
- ? `${this.config.mediaProxy}/preview.webp?${query({
- url,
- preview: '1',
- })}`
- : url
+ ? `${this.config.mediaProxy}/preview.webp?${query({
+ url,
+ preview: '1',
+ })}`
: null;
}
diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json
index 163e6096f8..2ee60eaad8 100644
--- a/packages/frontend-embed/package.json
+++ b/packages/frontend-embed/package.json
@@ -38,7 +38,7 @@
"vue": "3.5.12"
},
"devDependencies": {
- "@misskey-dev/summaly": "5.1.0",
+ "@transfem-org/summaly": "5.2.1",
"@testing-library/vue": "8.1.0",
"@types/estree": "1.0.6",
"@types/micromatch": "4.0.9",
diff --git a/packages/frontend-shared/js/math.ts b/packages/frontend-shared/js/math.ts
new file mode 100644
index 0000000000..528f3b08bf
--- /dev/null
+++ b/packages/frontend-shared/js/math.ts
@@ -0,0 +1,10 @@
+/*
+ * SPDX-FileCopyrightText: dakkar and other Sharkey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function clamp(value: number, min: number, max: number) {
+ if (value > max) return max;
+ if (value < min) return min;
+ return value;
+}
diff --git a/packages/frontend-shared/js/url.ts b/packages/frontend-shared/js/url.ts
index eb830b1eea..ed36704d92 100644
--- a/packages/frontend-shared/js/url.ts
+++ b/packages/frontend-shared/js/url.ts
@@ -26,3 +26,20 @@ export function extractDomain(url: string) {
const match = url.match(/^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?([^:\/\n]+)/im);
return match ? match[1] : null;
}
+
+export function maybeMakeRelative(urlStr: string, baseStr: string): string {
+ try {
+ const baseObj = new URL(baseStr);
+ const urlObj = new URL(urlStr);
+ /* in all places where maybeMakeRelative is used, baseStr is the
+ * instance's public URL, which can't have path components, so the
+ * relative URL will always have the whole path from the urlStr
+ */
+ if (urlObj.origin === baseObj.origin) {
+ return urlObj.pathname + urlObj.search + urlObj.hash;
+ }
+ return urlStr;
+ } catch (error) {
+ return '';
+ }
+}
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 528a1aef34..47819cef86 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -81,7 +81,7 @@
"cypress": "13.15.2"
},
"devDependencies": {
- "@misskey-dev/summaly": "5.1.0",
+ "@transfem-org/summaly": "5.2.1",
"@storybook/addon-actions": "8.4.4",
"@storybook/addon-essentials": "8.4.4",
"@storybook/addon-interactions": "8.4.4",
diff --git a/packages/frontend/src/components/MkLink.vue b/packages/frontend/src/components/MkLink.vue
index 263cd95eb1..ad54e1b00e 100644
--- a/packages/frontend/src/components/MkLink.vue
+++ b/packages/frontend/src/components/MkLink.vue
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
(), {
});
-const self = props.url.startsWith(local);
+const maybeRelativeUrl = maybeMakeRelative(props.url, local);
+const self = maybeRelativeUrl !== props.url;
const attr = self ? 'to' : 'href';
const target = self ? null : '_blank';
diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue
index 3063c77c0e..2f1933a87b 100644
--- a/packages/frontend/src/components/MkUrlPreview.vue
+++ b/packages/frontend/src/components/MkUrlPreview.vue
@@ -45,8 +45,8 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
+
+
@@ -88,7 +88,7 @@ import { defineAsyncComponent, onDeactivated, onUnmounted, ref, watch } from 'vu
import { url as local } from '@@/js/config.js';
import { versatileLang } from '@@/js/intl-const.js';
import * as Misskey from 'misskey-js';
-import type { summaly } from '@misskey-dev/summaly';
+import type { summaly } from '@transfem-org/summaly';
import type MkNoteSimple from '@/components/MkNoteSimple.vue';
import type SkNoteSimple from '@/components/SkNoteSimple.vue';
import { i18n } from '@/i18n.js';
@@ -98,6 +98,7 @@ import MkButton from '@/components/MkButton.vue';
import { transformPlayerUrl } from '@/scripts/player-url-transform.js';
import { defaultStore } from '@/store.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
+import { maybeMakeRelative } from '@@/js/url.js';
const XNoteSimple = defineAsyncComponent(() =>
defaultStore.state.noteDesign === 'misskey'
@@ -126,7 +127,8 @@ const MOBILE_THRESHOLD = 500;
const isMobile = ref(deviceKind === 'smartphone' || window.innerWidth <= MOBILE_THRESHOLD);
const hidePreview = ref(false);
-const self = props.url.startsWith(local);
+const maybeRelativeUrl = maybeMakeRelative(props.url, local);
+const self = maybeRelativeUrl !== props.url;
const attr = self ? 'to' : 'href';
const target = self ? null : '_blank';
const fetching = ref(true);
diff --git a/packages/frontend/src/components/MkUserInfo.vue b/packages/frontend/src/components/MkUserInfo.vue
index a6bbacacee..7e805dc904 100644
--- a/packages/frontend/src/components/MkUserInfo.vue
+++ b/packages/frontend/src/components/MkUserInfo.vue
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/MkUserPopup.vue b/packages/frontend/src/components/MkUserPopup.vue
index 73e38bef09..f54b559fcf 100644
--- a/packages/frontend/src/components/MkUserPopup.vue
+++ b/packages/frontend/src/components/MkUserPopup.vue
@@ -13,7 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
>
{ emit('mouseover'); }" @mouseleave="() => { emit('mouseleave'); }">
-
+
{{ i18n.ts.mutuals }}
{{ i18n.ts.followsYou }}
{{ i18n.ts.following }}
diff --git a/packages/frontend/src/components/MkUserSetupDialog.User.vue b/packages/frontend/src/components/MkUserSetupDialog.User.vue
index 4c4f4989c5..421fdcc9e3 100644
--- a/packages/frontend/src/components/MkUserSetupDialog.User.vue
+++ b/packages/frontend/src/components/MkUserSetupDialog.User.vue
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/global/MkMfm.ts b/packages/frontend/src/components/global/MkMfm.ts
index 9785bc0f07..b292f86445 100644
--- a/packages/frontend/src/components/global/MkMfm.ts
+++ b/packages/frontend/src/components/global/MkMfm.ts
@@ -20,6 +20,7 @@ import MkGoogle from '@/components/MkGoogle.vue';
import MkSparkle from '@/components/MkSparkle.vue';
import MkA, { MkABehavior } from '@/components/global/MkA.vue';
import { defaultStore } from '@/store.js';
+import { clamp } from '@@/js/math.js';
function safeParseFloat(str: unknown): number | null {
if (typeof str !== 'string' || str === '') return null;
@@ -309,10 +310,10 @@ export default function (props: MfmProps, { emit }: { emit: SetupContext
{}"
@click.prevent="self ? true : warningExternalWebsite(props.url)"
@@ -35,6 +35,7 @@ import { useTooltip } from '@/scripts/use-tooltip.js';
import { isEnabledUrlPreview } from '@/instance.js';
import { MkABehavior } from '@/components/global/MkA.vue';
import { warningExternalWebsite } from '@/scripts/warning-external-website.js';
+import { maybeMakeRelative } from '@@/js/url.js';
function safeURIDecode(str: string): string {
try {
@@ -53,7 +54,8 @@ const props = withDefaults(defineProps<{
showUrlPreview: true,
});
-const self = props.url.startsWith(local);
+const maybeRelativeUrl = maybeMakeRelative(props.url, local);
+const self = maybeRelativeUrl !== props.url;
const url = new URL(props.url);
if (!['http:', 'https:'].includes(url.protocol)) throw new Error('invalid url');
const el = ref();
diff --git a/packages/frontend/src/scripts/aiscript/api.ts b/packages/frontend/src/scripts/aiscript/api.ts
index e203c51bba..f77cc9c546 100644
--- a/packages/frontend/src/scripts/aiscript/api.ts
+++ b/packages/frontend/src/scripts/aiscript/api.ts
@@ -68,7 +68,7 @@ export function createAiScriptEnv(opts: { storageKey: string, token?: string })
}),
'Mk:api': values.FN_NATIVE(async ([ep, param, token]) => {
utils.assertString(ep);
- if (ep.value.includes('://')) {
+ if (ep.value.includes('://') || ep.value.includes('..')) {
throw new errors.AiScriptRuntimeError('invalid endpoint');
}
if (token) {
diff --git a/packages/frontend/src/widgets/WidgetPhotos.vue b/packages/frontend/src/widgets/WidgetPhotos.vue
index 60a4770e40..836cda14e5 100644
--- a/packages/frontend/src/widgets/WidgetPhotos.vue
+++ b/packages/frontend/src/widgets/WidgetPhotos.vue
@@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.vue b/packages/frontend/src/widgets/server-metric/cpu-mem.vue
index 469075e2c4..614ffe59e3 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.vue
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.vue
@@ -34,7 +34,7 @@ SPDX-License-Identifier: AGPL-3.0-only
CPU {{ cpuP }}%
@@ -67,7 +67,7 @@ SPDX-License-Identifier: AGPL-3.0-only
MEM {{ memP }}%
diff --git a/packages/frontend/test/url-preview.test.ts b/packages/frontend/test/url-preview.test.ts
index 4b79d33348..0854e24f81 100644
--- a/packages/frontend/test/url-preview.test.ts
+++ b/packages/frontend/test/url-preview.test.ts
@@ -6,7 +6,7 @@
import { describe, test, assert, afterEach } from 'vitest';
import { render, cleanup, type RenderResult } from '@testing-library/vue';
import './init';
-import type { summaly } from '@misskey-dev/summaly';
+import type { summaly } from '@transfem-org/summaly';
import { components } from '@/components/index.js';
import { directives } from '@/directives/index.js';
import MkUrlPreview from '@/components/MkUrlPreview.vue';
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index 010da73a32..91a6203c7d 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "misskey-js",
- "version": "2025.2.2",
+ "version": "2025.2.3",
"description": "Misskey SDK for JavaScript",
"license": "MIT",
"main": "./built/index.js",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1c2b563cf1..1738e2465f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -125,9 +125,6 @@ importers:
'@misskey-dev/sharp-read-bmp':
specifier: 1.2.0
version: 1.2.0
- '@misskey-dev/summaly':
- specifier: 5.1.0
- version: 5.1.0
'@nestjs/common':
specifier: 10.4.7
version: 10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1)
@@ -164,6 +161,9 @@ importers:
'@transfem-org/sfm-js':
specifier: 0.24.5
version: 0.24.5
+ '@transfem-org/summaly':
+ specifier: 5.2.1
+ version: 5.2.1
'@twemoji/parser':
specifier: 15.1.1
version: 15.1.1
@@ -894,9 +894,6 @@ importers:
specifier: 13.15.2
version: 13.15.2
devDependencies:
- '@misskey-dev/summaly':
- specifier: 5.1.0
- version: 5.1.0
'@storybook/addon-actions':
specifier: 8.4.4
version: 8.4.4(storybook@8.4.4(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@6.0.4))
@@ -954,6 +951,9 @@ importers:
'@testing-library/vue':
specifier: 8.1.0
version: 8.1.0(@vue/compiler-sfc@3.5.12)(@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))
+ '@transfem-org/summaly':
+ specifier: 5.2.1
+ version: 5.2.1
'@types/canvas-confetti':
specifier: ^1.6.4
version: 1.6.4
@@ -1159,12 +1159,12 @@ importers:
specifier: 3.5.12
version: 3.5.12(typescript@5.6.3)
devDependencies:
- '@misskey-dev/summaly':
- specifier: 5.1.0
- version: 5.1.0
'@testing-library/vue':
specifier: 8.1.0
version: 8.1.0(@vue/compiler-sfc@3.5.12)(@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))
+ '@transfem-org/summaly':
+ specifier: 5.2.1
+ version: 5.2.1
'@types/estree':
specifier: 1.0.6
version: 1.0.6
@@ -2022,6 +2022,9 @@ packages:
'@canvas/image-data@1.0.0':
resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==}
+ '@chainsafe/is-ip@2.1.0':
+ resolution: {integrity: sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==}
+
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
@@ -2966,9 +2969,6 @@ packages:
'@misskey-dev/sharp-read-bmp@1.2.0':
resolution: {integrity: sha512-er4pRakXzHYfEgOFAFfQagqDouG+wLm+kwNq1I30oSdIHDa0wM3KjFpfIGQ25Fks4GcmOl1s7Zh6xoQu5dNjTw==}
- '@misskey-dev/summaly@5.1.0':
- resolution: {integrity: sha512-WAUrgX3/z4h4aI8Y/WVwmJcJ6Fa1Zf2LJCSS651t9MHoWVGABLsQ2KCXRGmlpk4i+cMDNIwweObUroosE7j8rg==}
-
'@mole-inc/bin-wrapper@8.0.1':
resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3608,10 +3608,6 @@ packages:
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
- '@sindresorhus/is@5.3.0':
- resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==}
- engines: {node: '>=14.16'}
-
'@sindresorhus/is@7.0.1':
resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==}
engines: {node: '>=18'}
@@ -4284,6 +4280,9 @@ packages:
'@transfem-org/sfm-js@0.24.5':
resolution: {integrity: sha1-c9qJO12lIG+kovDGKjZmK2qPqcw=, tarball: https://activitypub.software/api/v4/projects/2/packages/npm/@transfem-org/sfm-js/-/@transfem-org/sfm-js-0.24.5.tgz}
+ '@transfem-org/summaly@5.2.1':
+ resolution: {integrity: sha1-bSQjLRWt0g/UkhYnGjT5/UPig20=, tarball: https://activitypub.software/api/v4/projects/217/packages/npm/@transfem-org/summaly/-/@transfem-org/summaly-5.2.1.tgz}
+
'@trysound/sax@0.2.0':
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
@@ -5446,10 +5445,6 @@ packages:
resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
engines: {node: '>=14.16'}
- cacheable-request@10.2.14:
- resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
- engines: {node: '>=14.16'}
-
cacheable-request@12.0.1:
resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==}
engines: {node: '>=18'}
@@ -5604,10 +5599,6 @@ packages:
resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==}
engines: {node: '>=18.17'}
- cheerio@1.0.0-rc.12:
- resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
- engines: {node: '>= 6'}
-
chokidar@3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
@@ -6790,10 +6781,6 @@ packages:
forever-agent@0.6.1:
resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
- form-data-encoder@2.1.4:
- resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
- engines: {node: '>= 14.17'}
-
form-data-encoder@4.0.2:
resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==}
engines: {node: '>= 18'}
@@ -6994,14 +6981,14 @@ packages:
resolution: {integrity: sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==}
engines: {node: '>=10.19.0'}
- got@12.6.1:
- resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==}
- engines: {node: '>=14.16'}
-
got@14.4.4:
resolution: {integrity: sha512-tqiF7eSgTBwQkxb1LxsEpva8TaMYVisbhplrFVmw9GQE3855Z+MH/mnsXLLOkDxR6hZJRFMj5VTAZ8lmTF8ZOA==}
engines: {node: '>=20'}
+ got@14.4.7:
+ resolution: {integrity: sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==}
+ engines: {node: '>=20'}
+
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -7117,8 +7104,8 @@ packages:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'}
- html-entities@2.3.2:
- resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==}
+ html-entities@2.5.2:
+ resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==}
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
@@ -7293,9 +7280,9 @@ packages:
resolution: {integrity: sha512-KifhLKBjdS/hB3TD4UUOalVp1BpzPFvRpgJvXcP0Ya98tuSQTUQ71iI7EW7CKddkBJTYB3GfTWl5eJwpLOXj2A==}
engines: {node: '>=16.14.0'}
- ip-regex@4.3.0:
- resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
- engines: {node: '>=8'}
+ ip-regex@5.0.0:
+ resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
ip@2.0.1:
resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==}
@@ -7394,10 +7381,6 @@ packages:
resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
engines: {node: '>=10'}
- is-ip@3.1.0:
- resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==}
- engines: {node: '>=8'}
-
is-lambda@1.0.1:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
@@ -7751,8 +7734,8 @@ packages:
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
- jschardet@3.0.0:
- resolution: {integrity: sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==}
+ jschardet@3.1.4:
+ resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==}
engines: {node: '>=0.1.90'}
jsdoc-type-pratt-parser@4.1.0:
@@ -8739,10 +8722,6 @@ packages:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
engines: {node: '>=8'}
- p-cancelable@3.0.0:
- resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
- engines: {node: '>=12.20'}
-
p-cancelable@4.0.1:
resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==}
engines: {node: '>=14.16'}
@@ -9269,8 +9248,9 @@ packages:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- private-ip@2.3.3:
- resolution: {integrity: sha512-5zyFfekIVUOTVbL92hc8LJOtE/gyGHeREHkJ2yTyByP8Q2YZVoBqLg3EfYLeF0oVvGqtaEX2t2Qovja0/gStXw==}
+ private-ip@3.0.2:
+ resolution: {integrity: sha512-2pkOVPGYD/4QyAg95c6E/4bLYXPthT5Xw4ocXYzIIsMBhskOMn6IwkWXmg6ZiA6K58+O6VD/n02r1hDhk7vDPw==}
+ engines: {node: '>=14.16'}
probe-image-size@7.2.3:
resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==}
@@ -10437,9 +10417,6 @@ packages:
resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
engines: {node: '>=18'}
- trace-redirect@1.0.6:
- resolution: {integrity: sha512-UUfa1DjjU5flcjMdaFIiIEGDTyu2y/IiMjOX4uGXa7meKBS4vD4f2Uy/tken9Qkd4Jsm4sRsfZcIIPqrRVF3Mg==}
-
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
@@ -10969,8 +10946,8 @@ packages:
vue-component-type-helpers@2.1.10:
resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==}
- vue-component-type-helpers@2.2.0:
- resolution: {integrity: sha512-cYrAnv2me7bPDcg9kIcGwjJiSB6Qyi08+jLDo9yuvoFQjzHiPTzML7RnkJB1+3P6KMsX/KbCD4QE3Tv/knEllw==}
+ vue-component-type-helpers@2.2.10:
+ resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==}
vue-demi@0.14.7:
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
@@ -12210,6 +12187,8 @@ snapshots:
'@canvas/image-data@1.0.0': {}
+ '@chainsafe/is-ip@2.1.0': {}
+
'@colors/colors@1.5.0':
optional: true
@@ -13154,17 +13133,6 @@ snapshots:
decode-ico: 0.4.1
sharp: 0.33.5
- '@misskey-dev/summaly@5.1.0':
- dependencies:
- cheerio: 1.0.0-rc.12
- escape-regexp: 0.0.1
- got: 12.6.1
- html-entities: 2.3.2
- iconv-lite: 0.6.3
- jschardet: 3.0.0
- private-ip: 2.3.3
- trace-redirect: 1.0.6
-
'@mole-inc/bin-wrapper@8.0.1':
dependencies:
bin-check: 4.1.0
@@ -13933,8 +13901,6 @@ snapshots:
'@sindresorhus/is@4.6.0': {}
- '@sindresorhus/is@5.3.0': {}
-
'@sindresorhus/is@7.0.1': {}
'@sinonjs/commons@2.0.0':
@@ -14607,7 +14573,7 @@ snapshots:
ts-dedent: 2.2.0
type-fest: 2.19.0
vue: 3.5.12(typescript@5.6.3)
- vue-component-type-helpers: 2.2.0
+ vue-component-type-helpers: 2.2.10
'@swc/cli@0.3.12(@swc/core@1.9.2)(chokidar@3.5.3)':
dependencies:
@@ -14793,6 +14759,16 @@ snapshots:
dependencies:
'@twemoji/parser': 15.0.0
+ '@transfem-org/summaly@5.2.1':
+ dependencies:
+ cheerio: 1.0.0
+ escape-regexp: 0.0.1
+ got: 14.4.7
+ html-entities: 2.5.2
+ iconv-lite: 0.6.3
+ jschardet: 3.1.4
+ private-ip: 3.0.2
+
'@trysound/sax@0.2.0': {}
'@tsd/typescript@5.4.5': {}
@@ -16300,16 +16276,6 @@ snapshots:
cacheable-lookup@7.0.0: {}
- cacheable-request@10.2.14:
- dependencies:
- '@types/http-cache-semantics': 4.0.4
- get-stream: 6.0.1
- http-cache-semantics: 4.1.1
- keyv: 4.5.4
- mimic-response: 4.0.0
- normalize-url: 8.0.1
- responselike: 3.0.0
-
cacheable-request@12.0.1:
dependencies:
'@types/http-cache-semantics': 4.0.4
@@ -16478,7 +16444,7 @@ snapshots:
css-what: 6.1.0
domelementtype: 2.3.0
domhandler: 5.0.3
- domutils: 3.0.1
+ domutils: 3.1.0
cheerio@1.0.0:
dependencies:
@@ -16494,16 +16460,6 @@ snapshots:
undici: 6.20.0
whatwg-mimetype: 4.0.0
- cheerio@1.0.0-rc.12:
- dependencies:
- cheerio-select: 2.1.0
- dom-serializer: 2.0.0
- domhandler: 5.0.3
- domutils: 3.0.1
- htmlparser2: 8.0.1
- parse5: 7.2.1
- parse5-htmlparser2-tree-adapter: 7.0.0
-
chokidar@3.5.3:
dependencies:
anymatch: 3.1.3
@@ -16780,7 +16736,7 @@ snapshots:
boolbase: 1.0.0
css-what: 6.1.0
domhandler: 5.0.3
- domutils: 3.0.1
+ domutils: 3.1.0
nth-check: 2.1.1
css-tree@2.2.1:
@@ -18137,8 +18093,6 @@ snapshots:
forever-agent@0.6.1:
optional: true
- form-data-encoder@2.1.4: {}
-
form-data-encoder@4.0.2: {}
form-data@4.0.0:
@@ -18373,21 +18327,21 @@ snapshots:
p-cancelable: 2.1.1
responselike: 2.0.1
- got@12.6.1:
+ got@14.4.4:
dependencies:
- '@sindresorhus/is': 5.3.0
+ '@sindresorhus/is': 7.0.1
'@szmarczak/http-timer': 5.0.1
cacheable-lookup: 7.0.0
- cacheable-request: 10.2.14
+ cacheable-request: 12.0.1
decompress-response: 6.0.0
- form-data-encoder: 2.1.4
- get-stream: 6.0.1
+ form-data-encoder: 4.0.2
http2-wrapper: 2.2.1
lowercase-keys: 3.0.0
- p-cancelable: 3.0.0
+ p-cancelable: 4.0.1
responselike: 3.0.0
+ type-fest: 4.27.0
- got@14.4.4:
+ got@14.4.7:
dependencies:
'@sindresorhus/is': 7.0.1
'@szmarczak/http-timer': 5.0.1
@@ -18508,7 +18462,7 @@ snapshots:
dependencies:
whatwg-encoding: 3.1.1
- html-entities@2.3.2: {}
+ html-entities@2.5.2: {}
html-escaper@2.0.2: {}
@@ -18698,7 +18652,7 @@ snapshots:
dependencies:
ip-address: 9.0.5
- ip-regex@4.3.0: {}
+ ip-regex@5.0.0: {}
ip@2.0.1: {}
@@ -18788,10 +18742,6 @@ snapshots:
is-path-inside: 3.0.3
optional: true
- is-ip@3.1.0:
- dependencies:
- ip-regex: 4.3.0
-
is-lambda@1.0.1: {}
is-map@2.0.2: {}
@@ -19334,7 +19284,7 @@ snapshots:
jsbn@1.1.0: {}
- jschardet@3.0.0: {}
+ jschardet@3.1.4: {}
jsdoc-type-pratt-parser@4.1.0: {}
@@ -20583,8 +20533,6 @@ snapshots:
p-cancelable@2.1.1: {}
- p-cancelable@3.0.0: {}
-
p-cancelable@4.0.1: {}
p-finally@1.0.0: {}
@@ -21073,11 +21021,11 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.2.0
- private-ip@2.3.3:
+ private-ip@3.0.2:
dependencies:
- ip-regex: 4.3.0
+ '@chainsafe/is-ip': 2.1.0
+ ip-regex: 5.0.0
ipaddr.js: 2.2.0
- is-ip: 3.1.0
netmask: 2.0.2
probe-image-size@7.2.3:
@@ -22391,8 +22339,6 @@ snapshots:
dependencies:
punycode: 2.3.1
- trace-redirect@1.0.6: {}
-
tree-kill@1.2.2:
optional: true
@@ -22976,7 +22922,7 @@ snapshots:
vue-component-type-helpers@2.1.10: {}
- vue-component-type-helpers@2.2.0: {}
+ vue-component-type-helpers@2.2.10: {}
vue-demi@0.14.7(vue@3.5.12(typescript@5.6.3)):
dependencies: