import UrlPattern from "url-pattern"; export const audioIgnore = ["vk", "ok", "loom"]; export const hlsExceptions = ["dailymotion", "vimeo", "rutube", "bsky", "youtube"]; export const services = { bilibili: { patterns: [ "video/:comId", "_shortLink/:comShortLink", "_tv/:lang/video/:tvId", "_tv/video/:tvId" ], subdomains: ["m"], }, bsky: { patterns: [ "profile/:user/post/:post" ], tld: "app", }, dailymotion: { patterns: ["video/:id"], }, facebook: { patterns: [ "_shortLink/:shortLink", ":username/videos/:caption/:id", ":username/videos/:id", "reel/:id", "share/:shareType/:id" ], subdomains: ["web", "m"], altDomains: ["fb.watch"], }, instagram: { patterns: [ "reels/:postId", ":username/reel/:postId", "reel/:postId", "p/:postId", ":username/p/:postId", "tv/:postId", "stories/:username/:storyId" ], altDomains: ["ddinstagram.com"], }, loom: { patterns: ["share/:id", "embed/:id"], }, ok: { patterns: [ "video/:id", "videoembed/:id" ], tld: "ru", }, pinterest: { patterns: [ "pin/:id", "pin/:id/:garbage", "url_shortener/:shortLink" ], }, reddit: { patterns: [ "r/:sub/comments/:id/:title", "user/:user/comments/:id/:title" ], subdomains: "*", }, rutube: { patterns: [ "video/:id", "play/embed/:id", "shorts/:id", "yappy/:yappyId", "video/private/:id?p=:key", "video/private/:id" ], tld: "ru", }, snapchat: { patterns: [ ":shortLink", "spotlight/:spotlightId", "add/:username/:storyId", "u/:username/:storyId", "add/:username", "u/:username", "t/:shortLink", ], subdomains: ["t", "story"], }, soundcloud: { patterns: [ ":author/:song/s-:accessKey", ":author/:song", ":shortLink" ], subdomains: ["on", "m"], }, streamable: { patterns: [ ":id", "o/:id", "e/:id", "s/:id" ], }, tiktok: { patterns: [ ":user/video/:postId", ":shortLink", "t/:shortLink", ":user/photo/:postId", "v/:postId.html" ], subdomains: ["vt", "vm", "m"], }, tumblr: { patterns: [ "post/:id", "blog/view/:user/:id", ":user/:id", ":user/:id/:trackingId" ], subdomains: "*", }, twitch: { patterns: [":channel/clip/:clip"], tld: "tv", }, twitter: { patterns: [ ":user/status/:id", ":user/status/:id/video/:index", ":user/status/:id/photo/:index", ":user/status/:id/mediaviewer", ":user/status/:id/mediaViewer", "i/bookmarks?post_id=:id" ], subdomains: ["mobile"], altDomains: ["x.com", "vxtwitter.com", "fixvx.com"], }, vimeo: { patterns: [ ":id", "video/:id", ":id/:password", "/channels/:user/:id" ], subdomains: ["player"], }, vk: { patterns: [ "video:ownerId_:videoId", "clip:ownerId_:videoId", "clips:duplicate?z=clip:ownerId_:videoId", "videos:duplicate?z=video:ownerId_:videoId", "video:ownerId_:videoId_:accessKey", "clip:ownerId_:videoId_:accessKey", "clips:duplicate?z=clip:ownerId_:videoId_:accessKey", "videos:duplicate?z=video:ownerId_:videoId_:accessKey" ], subdomains: ["m"], altDomains: ["vkvideo.ru", "vk.ru"], }, youtube: { patterns: [ "watch?v=:id", "embed/:id", "watch/:id" ], subdomains: ["music", "m"], } } Object.values(services).forEach(service => { service.patterns = service.patterns.map( pattern => new UrlPattern(pattern, { segmentValueCharset: UrlPattern.defaultOptions.segmentValueCharset + '@\\.:' }) ) })