spectatr-player-sdk
Version:
A custom video player built with Stencil with Shaka Player integration
94 lines (91 loc) • 4.28 kB
JavaScript
;
async function fetchVideoSrc(component, isSetSrc = false) {
try {
if (!component.clientId)
return;
const response = await fetch(`${component.baseUrl}/sp-onboarding/video-streaming/${component.clientId}?userId=${component.userId}&${component.videoId && `videoId=${component.videoId}`}`, {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'x-api-key': 'bak8zb8uwimo4pjdmyu3-basluiwthvn3u7qznfgy-2thtwws1764g3706xsoo',
},
});
const data = await response.json();
if (data.success) {
component.quizzes = data.payload.quiz ?? { quizQuestions: [] };
component.polls = data.payload.polls ?? [];
component.statistics = data.payload.statistics;
component.totalLikes = data.payload.likeCount;
component.isLiked = data.payload.userLiked;
component.isDisliked = data.payload.userReacted ? !data.payload.userLiked : false;
component.totalViews = data.payload.views;
component.tempVideoId = data.payload.videoId;
component.timelineEvents = data.payload.videoEventMarkers ?? [];
if (isSetSrc) {
component.src = data.payload.outputLink;
component.scheduleTime = data.payload.scheduledStart;
// component.src = 'https://live-hls-web-aje.getaj.net/AJE/index.m3u8';
component.videoTitle = data.payload.title;
component.videoDescription = data.payload.description;
component.token = data.payload.token ?? '';
component.poster = data.payload.thumbnailPath;
component.createdAt = data.payload.createdAt;
component.showFullDescription = (component.videoDescription ?? '').length <= 200;
}
}
}
catch (error) {
console.error('Error loading video:', error);
}
}
async function addReaction(component, reaction) {
const response = await fetch(`${component.baseUrl}/sp-onboarding/reactions`, {
body: JSON.stringify({
userId: component.userId,
videoId: component.videoId,
reaction: reaction,
}),
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'x-api-key': 'bak8zb8uwimo4pjdmyu3-basluiwthvn3u7qznfgy-2thtwws1764g3706xsoo',
},
});
if (!response.ok) {
const errorData = await response.json().catch(() => ({}));
throw new Error(`Request failed with status ${response.status}: ${JSON.stringify(errorData)}`);
}
return response.json();
}
async function fetchSuggestions(component, page = 0, limit = 10) {
try {
const response = await fetch(`${component.baseUrl}/sp-onboarding/video-onboard/suggestions/${component.clientId}?limit=${limit}&page=${page}`, {
headers: { 'x-api-key': 'bak8zb8uwimo4pjdmyu3-basluiwthvn3u7qznfgy-2thtwws1764g3706xsoo' },
});
const data = await response.json();
if (!!data) {
return { suggestions: data.payload.suggestions, totalCount: data.payload.totalCount };
}
}
catch (error) {
return { suggestions: [], totalCount: 0 };
}
}
async function fetchAllVideos(clientId, baseUrl = 'https://media-ingestion.antino.ca') {
const response = await fetch(`${baseUrl}/sp-onboarding/video-onboard/suggestions/${clientId}/no-pagination`, {
headers: { 'x-api-key': 'bak8zb8uwimo4pjdmyu3-basluiwthvn3u7qznfgy-2thtwws1764g3706xsoo' },
});
if (!response.ok) {
const errorData = await response.json().catch(() => ({}));
throw new Error(`Request failed with status ${response.status}: ${JSON.stringify(errorData)}`);
}
const data = await response.json();
return { suggestions: data.payload.suggestions, totalCount: data.payload.totalCount };
}
exports.addReaction = addReaction;
exports.fetchAllVideos = fetchAllVideos;
exports.fetchSuggestions = fetchSuggestions;
exports.fetchVideoSrc = fetchVideoSrc;
//# sourceMappingURL=videoService-CFdDgSc0.js.map
//# sourceMappingURL=videoService-CFdDgSc0.js.map