UNPKG

@iptv/xtream-api

Version:

Standardized access to Xtream compatible player API

2 lines (1 loc) 5.36 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("camelcase-keys").default,J=require("./index.cjs"),Q=J.defineSerializers("Standardized",{profile:e=>{const{auth:o,expDate:a,maxConnections:r,activeCons:i,createdAt:t,...s}=D(e);return{id:s.username,...s,isTrial:s.isTrial==="1",maxConnections:Number(r),activeConnections:Number(i),createdAt:new Date(Number(t)*1e3),expiresAt:new Date(Number(a)*1e3)}},serverInfo:e=>{const{timestampNow:o,...a}=D(e);return{id:e.url,...a,timeNow:new Date(Number(o)*1e3)}},channelCategories:e=>x(e),movieCategories:e=>x(e),showCategories:e=>x(e),channels:e=>D(e).map(a=>{const{added:r,num:i,streamId:t,categoryIds:s,streamIcon:m,epgChannelId:u,tvArchive:c,url:p,name:g,tvArchiveDuration:b}=a;return{id:t.toString(),name:g,number:i,tvArchive:c===1,tvArchiveDuration:b,logo:m,epgId:u,createdAt:new Date(Number(r)*1e3),categoryIds:s.map(N=>N.toString()),url:p}}),movies:e=>D(e).map(a=>{const{streamIcon:r,streamId:i,releaseDate:t,rating:s,added:m,categoryIds:u,episodeRunTime:c,genre:p,cast:g,director:b,youtubeTrailer:N,title:w,plot:S,url:y}=a;return{id:i.toString(),name:w,plot:S,genre:p?.split(",").map(n=>n.trim())??[],cast:g?.split(",").map(n=>n.trim())??[],director:b?.split(",").map(n=>n.trim())??[],poster:r,duration:Number(c)*60,voteAverage:Number(s),releaseDate:t?new Date(t):null,youtubeId:N,createdAt:new Date(Number(m)*1e3),categoryIds:u.map(n=>n.toString()),url:y}}),movie:e=>{const o=D(e,{deep:!0}),{director:a,actors:r,genre:i,cast:t,oName:s,releaseDate:m,mpaaRating:u,age:c,rating:p,duration:g,durationSecs:b,backdropPath:N,movieImage:w,kinopoiskUrl:S,youtubeTrailer:y,tmdbId:n,name:B,description:C,plot:f,country:T,subtitles:d}=o.info,{categoryIds:v,streamId:I,added:h}=o.movieData;return{id:I.toString(),name:B,description:C,plot:f,country:T,informationUrl:S,originalName:s,cover:N[0],poster:w,duration:b,durationFormatted:g,voteAverage:p,director:a?.split(",").map(l=>l.trim())??[],actors:r?.split(",").map(l=>l.trim())??[],cast:t?.split(",").map(l=>l.trim())??[],genre:i?.split(",").map(l=>l.trim())??[],categoryIds:v.map(l=>l.toString()),tmdbId:n.toString(),youtubeId:y,releaseDate:m?new Date(m):null,createdAt:new Date(Number(h)*1e3),rating:{mpaa:u,age:Number(c)},subtitles:d,url:o.url}},shows:e=>D(e).map(a=>{const{rating:r,seriesId:i,cover:t,categoryIds:s,backdropPath:m,releaseDate:u,episodeRunTime:c,lastModified:p,cast:g,director:b,genre:N,youtubeTrailer:w,title:S,plot:y}=a;return{id:i.toString(),name:S,plot:y,cast:g?.split(",").map(n=>n.trim())??[],director:b?.split(",").map(n=>n.trim())??[],genre:N?.split(",").map(n=>n.trim())??[],voteAverage:Number(r),poster:t,cover:m[0],duration:Number(c)*60,releaseDate:u?new Date(u):null,updatedAt:new Date(Number(p)*1e3),categoryIds:s.map(n=>n.toString()),youtubeId:w}}),show:e=>{const{seasons:o,info:a,episodes:r}=D(e,{deep:!0}),{rating:i,seriesId:t,cover:s,categoryIds:m,backdropPath:u,releaseDate:c,episodeRunTime:p,lastModified:g,cast:b,director:N,genre:w,youtubeTrailer:S,title:y,plot:n}=a;if(typeof t>"u")throw new Error("seriesId is required");const C=Object.values(r).flat().map(d=>{const{id:v,season:I,episodeNum:h,added:l,info:P,title:E,url:k,subtitles:z}=d,{releaseDate:A,movieImage:M,coverBig:R,rating:j,durationSecs:q,duration:O,tmdbId:F,plot:G,video:L,audio:U,bitrate:K}=P,$=o.find(H=>H.seasonNumber===I)?.id.toString()||I.toString();return{id:v,number:Number(h),plot:G,title:E,tmdbId:F?.toString(),poster:M,voteAverage:j,cover:R,duration:q,durationFormatted:O,releaseDate:A?new Date(A):null,createdAt:new Date(Number(l)*1e3),showId:t.toString(),seasonId:$,url:k,subtitles:z,video:L,audio:U,bitrate:K}});let f=o;f.length===0&&(f=Object.keys(r).map(d=>{const v=d,I=r[d][0];return{id:Number(v),name:`Season ${v}`,episodeCount:r[d].length,overview:"",airDate:I.info.releaseDate,cover:I.info.movieImage,seasonNumber:Number(v),voteAverage:Number(I.info.rating),coverBig:I.info.movieImage}}));const T=f.map(d=>{const{id:v,seasonNumber:I,coverBig:h,airDate:l,name:P,episodeCount:E,overview:k,voteAverage:z}=d;return{id:v.toString(),name:P,episodeCount:E,overview:k,voteAverage:z,releaseDate:l?new Date(l):null,number:I,cover:h,showId:t.toString(),episodes:C.filter(A=>A.seasonId===v.toString())}});return{id:t.toString(),name:y,plot:n,voteAverage:Number(i),poster:s,cover:u[0],duration:Number(p)*60,cast:b?.split(",").map(d=>d.trim())??[],director:N?.split(",").map(d=>d.trim())??[],genre:w?.split(",").map(d=>d.trim())??[],youtubeId:S,releaseDate:c?new Date(c):null,updatedAt:new Date(Number(g)*1e3),categoryIds:m.map(d=>d.toString()),seasons:T}},shortEPG:e=>{const{epgListings:o}=D(e,{deep:!0});return o.map(a=>{const{lang:r,start:i,end:t,title:s,description:m,id:u,epgId:c,channelId:p}=a;return{id:u,epgId:c,channelId:p,start:new Date(i),end:new Date(Number(t)*1e3),title:atob(s),description:atob(m),language:r}})},fullEPG:e=>{const{epgListings:o}=D(e,{deep:!0});return o.map(a=>{const{lang:r,start:i,end:t,title:s,description:m,nowPlaying:u,hasArchive:c,id:p,epgId:g,channelId:b}=a;return{id:p,epgId:g,channelId:b,start:new Date(i),end:new Date(t),title:atob(s),description:atob(m),language:r,nowPlaying:!!u,hasArchive:!!c}})}});function x(e){return D(e).map(a=>{const{categoryId:r,categoryName:i,parentId:t}=a;return{id:r.toString(),name:i,parentId:t.toString()}})}exports.standardizedSerializer=Q;