summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts/media-proxy.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/scripts/media-proxy.ts')
-rw-r--r--packages/frontend/src/scripts/media-proxy.ts51
1 files changed, 16 insertions, 35 deletions
diff --git a/packages/frontend/src/scripts/media-proxy.ts b/packages/frontend/src/scripts/media-proxy.ts
index 099a22163a..68a5a1dcf8 100644
--- a/packages/frontend/src/scripts/media-proxy.ts
+++ b/packages/frontend/src/scripts/media-proxy.ts
@@ -3,51 +3,32 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { query } from '@/scripts/url.js';
+import { MediaProxy } from '@@/js/media-proxy.js';
import { url } from '@/config.js';
import { instance } from '@/instance.js';
-export function getProxiedImageUrl(imageUrl: string, type?: 'preview' | 'emoji' | 'avatar', mustOrigin = false, noFallback = false): string {
- const localProxy = `${url}/proxy`;
+let _mediaProxy: MediaProxy | null = null;
- if (imageUrl.startsWith(instance.mediaProxy + '/') || imageUrl.startsWith('/proxy/') || imageUrl.startsWith(localProxy + '/')) {
- // もう既にproxyっぽそうだったらurlを取り出す
- imageUrl = (new URL(imageUrl)).searchParams.get('url') ?? imageUrl;
+export function getProxiedImageUrl(...args: Parameters<MediaProxy['getProxiedImageUrl']>): string {
+ if (_mediaProxy == null) {
+ _mediaProxy = new MediaProxy(instance, url);
}
- return `${mustOrigin ? localProxy : instance.mediaProxy}/${
- type === 'preview' ? 'preview.webp'
- : 'image.webp'
- }?${query({
- url: imageUrl,
- ...(!noFallback ? { 'fallback': '1' } : {}),
- ...(type ? { [type]: '1' } : {}),
- ...(mustOrigin ? { origin: '1' } : {}),
- })}`;
+ return _mediaProxy.getProxiedImageUrl(...args);
}
-export function getProxiedImageUrlNullable(imageUrl: string | null | undefined, type?: 'preview'): string | null {
- if (imageUrl == null) return null;
- return getProxiedImageUrl(imageUrl, type);
-}
-
-export function getStaticImageUrl(baseUrl: string): string {
- const u = baseUrl.startsWith('http') ? new URL(baseUrl) : new URL(baseUrl, url);
-
- if (u.href.startsWith(`${url}/emoji/`)) {
- // もう既にemojiっぽそうだったらsearchParams付けるだけ
- u.searchParams.set('static', '1');
- return u.href;
+export function getProxiedImageUrlNullable(...args: Parameters<MediaProxy['getProxiedImageUrlNullable']>): string | null {
+ if (_mediaProxy == null) {
+ _mediaProxy = new MediaProxy(instance, url);
}
- if (u.href.startsWith(instance.mediaProxy + '/')) {
- // もう既にproxyっぽそうだったらsearchParams付けるだけ
- u.searchParams.set('static', '1');
- return u.href;
+ return _mediaProxy.getProxiedImageUrlNullable(...args);
+}
+
+export function getStaticImageUrl(...args: Parameters<MediaProxy['getStaticImageUrl']>): string {
+ if (_mediaProxy == null) {
+ _mediaProxy = new MediaProxy(instance, url);
}
- return `${instance.mediaProxy}/static.webp?${query({
- url: u.href,
- static: '1',
- })}`;
+ return _mediaProxy.getStaticImageUrl(...args);
}