This commit is contained in:
vineyardbovines
2026-04-15 12:33:51 -04:00
parent 3d09ee8bb2
commit b7f2c359f6
4 changed files with 43 additions and 19 deletions
+24 -7
View File
@@ -8,7 +8,7 @@ import {
parseStarterPackUri, parseStarterPackUri,
} from '#/lib/strings/starter-pack' } from '#/lib/strings/starter-pack'
import {messages} from '#/locale/locales/en/messages' import {messages} from '#/locale/locales/en/messages'
import {klipyStaticUrl} from '#/state/queries/klipy' import {klipyUrlToBskyGifUrl} from '#/state/queries/klipy'
import {tenorUrlToBskyGifUrl} from '#/state/queries/tenor' import {tenorUrlToBskyGifUrl} from '#/state/queries/tenor'
import {cleanError} from '../../src/lib/strings/errors' import {cleanError} from '../../src/lib/strings/errors'
import {createFullHandle, makeValidHandle} from '../../src/lib/strings/handles' import {createFullHandle, makeValidHandle} from '../../src/lib/strings/handles'
@@ -858,7 +858,7 @@ describe('parseEmbedPlayerFromUrl', () => {
source: 'klipy', source: 'klipy',
isGif: true, isGif: true,
hideDetails: true, hideDetails: true,
playerUri: 'https://static.klipy.com/ii/abc123/73/ac/someFile.gif', playerUri: 'https://t.gifs.bsky.app/ii/abc123/73/ac/someFile.gif',
dimensions: { dimensions: {
width: 300, width: 300,
height: 200, height: 200,
@@ -1073,13 +1073,30 @@ describe('tenorUrlToBskyGifUrl', () => {
) )
}) })
describe('klipyStaticUrl', () => { describe('klipyUrlToBskyGifUrl', () => {
it('returns the URL as-is for valid KLIPY static URLs', () => { const inputs = [
const input = 'https://static.klipy.com/ii/abc123/73/ac/someFile.gif' 'https://static.klipy.com/ii/abc123/73/ac/someFile.gif',
expect(klipyStaticUrl(input)).toEqual(input) 'https://static.klipy.com/ii/abc123/73/ac/someFile.gif?hh=200&ww=300',
]
it.each(inputs)(
'returns url with t.gifs.bsky.app as hostname for input url',
input => {
const out = klipyUrlToBskyGifUrl(input)
expect(out.startsWith('https://t.gifs.bsky.app/')).toEqual(true)
},
)
it('preserves the path and query params when rewriting', () => {
const out = klipyUrlToBskyGifUrl(
'https://static.klipy.com/ii/abc123/73/ac/someFile.gif?hh=200&ww=300',
)
expect(out).toEqual(
'https://t.gifs.bsky.app/ii/abc123/73/ac/someFile.gif?hh=200&ww=300',
)
}) })
it('returns empty string for invalid URLs', () => { it('returns empty string for invalid URLs', () => {
expect(klipyStaticUrl('not-a-url')).toEqual('') expect(klipyUrlToBskyGifUrl('not-a-url')).toEqual('')
}) })
}) })
+3 -1
View File
@@ -683,8 +683,10 @@ export function parseKlipyGif(urlp: URL):
return {success: false} return {success: false}
} }
// Use the base URL without dimension params as the player URI // Use the base URL without dimension params as the player URI,
// routed through the bsky proxy (t.gifs.bsky.app) — matching Tenor.
const playerUrl = new URL(urlp.href) const playerUrl = new URL(urlp.href)
playerUrl.hostname = 't.gifs.bsky.app'
playerUrl.searchParams.delete('hh') playerUrl.searchParams.delete('hh')
playerUrl.searchParams.delete('ww') playerUrl.searchParams.delete('ww')
+8 -7
View File
@@ -90,16 +90,17 @@ function createKlipyApi<Input extends object>(
} }
/** /**
* Returns the static URL for a KLIPY GIF preview image. * Rewrites a KLIPY static CDN URL through the bsky proxy
* KLIPY images are served directly from their CDN (static.klipy.com), * (t.gifs.bsky.app), matching the behavior of `tenorUrlToBskyGifUrl`.
* unlike Tenor which routes through t.gifs.bsky.app.
*/ */
export function klipyStaticUrl(gifUrl: string) { export function klipyUrlToBskyGifUrl(klipyUrl: string) {
let url
try { try {
new URL(gifUrl) url = new URL(klipyUrl)
return gifUrl
} catch (e) { } catch (e) {
logger.debug('invalid url passed to klipyStaticUrl()') logger.debug('invalid url passed to klipyUrlToBskyGifUrl()')
return '' return ''
} }
url.hostname = 't.gifs.bsky.app'
return url.href
} }
+8 -4
View File
@@ -105,14 +105,18 @@ export function tenorUrlToBskyGifUrl(tenorUrl: string) {
/** /**
* Returns the appropriate URL for a GIF preview image. * Returns the appropriate URL for a GIF preview image.
* Rewrites Tenor URLs through the bsky proxy (t.gifs.bsky.app); * Both Tenor (media.tenor.com) and KLIPY (static.klipy.com) URLs are
* KLIPY URLs pass through directly to their CDN. * rewritten through the bsky proxy at t.gifs.bsky.app.
*/ */
export function gifPreviewUrl(gifUrl: string) { export function gifPreviewUrl(gifUrl: string) {
try { try {
const url = new URL(gifUrl) const url = new URL(gifUrl)
if (url.hostname === 'media.tenor.com') { if (
return tenorUrlToBskyGifUrl(gifUrl) url.hostname === 'media.tenor.com' ||
url.hostname === 'static.klipy.com'
) {
url.hostname = 't.gifs.bsky.app'
return url.href
} }
return gifUrl return gifUrl
} catch (e) { } catch (e) {