import querystring from 'querystring'; import type com from '../../proto/index.js'; import { ConverterSet, ConverterType } from '../domain.js'; import { alignIfLegacy, URL_HASH_PREFIX, WIX_PROTOCOL, } from './converters-utils.js'; const WIX_VIDEO = 'video'; export const video: ConverterSet = { types: ['wix.common.Video'], [ConverterType.FROM_JSON]: { transform: (val: com.wix.common.Video) => { if (!val) { return; } let posterData = ''; if (val.thumbnail?.id) { posterData = `${URL_HASH_PREFIX}posterUri=${val.thumbnail.id}&posterWidth=${val.thumbnail.width}&posterHeight=${val.thumbnail.height}`; } return val.id ? `wix:video://v1/${val.id}${posterData}` : val.url; }, }, [ConverterType.TO_JSON]: { transform: (val: string): com.wix.common.Video | undefined => { if (!val) { return; } const alignedVideo = alignIfLegacy(val, WIX_VIDEO); const { protocol, hash, pathname } = new URL(alignedVideo); const { posterHeight: height, posterWidth: width, posterUri, } = querystring.parse(hash.replace(URL_HASH_PREFIX, '')); const [id] = pathname.replace(`${WIX_VIDEO}://v1/`, '').split('/'); if (protocol === WIX_PROTOCOL) { if (!posterUri) { return { id }; } return { id, thumbnail: { height: Number(height), width: Number(width), id: posterUri.toString(), }, }; } return { url: val }; }, }, };