/************************************************************************ Copyright (C) Ayushya Amitabh - All Rights Reserved Unauthorized copying of this file, via any medium is strictly prohibited Proprietary and confidential Written by Ayushya Amitabh , 2020 https://www.chromewatchparty.com/copyright ========================================================================= ALL CONTENT ON WATCH PARTY'S WEBSITE OR IN WATCH PARTY'S CHROME EXTENSION APP, UNLESS OTHERWISE CITED ARE THE SOLE INTELECTUAL PROPERTY OF AYUSHYA AMITABH, AND MAY NOT BE COPIED, EDITED, OR REPRODUCED WITHOUT PERMISSION. ************************************************************************/ /*global chrome*/ const API_HOST = 'https://api.chromewatchparty.com'; export const PLAYER_STATUS = { PLAYING: 'PLAYING', PAUSED: 'PAUSED', NOT_PLAYING: 'NOT_PLAYING', }; export const PLAYER_SOURCE = { NETFLIX: 'netflix.', AMAZON: 'amazon.', PRIMEVIDEO: 'primevideo.', HULU: 'hulu.', DISNEY: 'disneyplus.', YOUTUBE: 'youtube.', HBONOW: 'hbonow.', HBOMAX: 'hbomax.', PEACOCK: 'peacocktv.', GOOGLEPLAY: 'play.google.', CRUNCHYROLL: 'crunchyroll.', APPLE: 'tv.apple.', VIKI: 'viki.', FUNIMATION: 'funimation.', ROOSTERTEETH: 'roosterteeth.', LOCAL: 'localhost', }; export const getPlayerSource = () => { const HREF = window.location.href; if (HREF.includes(PLAYER_SOURCE.NETFLIX)) return PLAYER_SOURCE.NETFLIX; if (HREF.includes(PLAYER_SOURCE.HULU)) return PLAYER_SOURCE.HULU; if (HREF.includes(PLAYER_SOURCE.AMAZON)) return PLAYER_SOURCE.AMAZON; if (HREF.includes(PLAYER_SOURCE.PRIMEVIDEO)) return PLAYER_SOURCE.AMAZON; if (HREF.includes(PLAYER_SOURCE.DISNEY)) return PLAYER_SOURCE.DISNEY; if (HREF.includes(PLAYER_SOURCE.YOUTUBE)) return PLAYER_SOURCE.YOUTUBE; if (HREF.includes(PLAYER_SOURCE.HBONOW)) return PLAYER_SOURCE.HBONOW; if (HREF.includes(PLAYER_SOURCE.HBOMAX)) return PLAYER_SOURCE.HBOMAX; if (HREF.includes(PLAYER_SOURCE.PEACOCK)) return PLAYER_SOURCE.PEACOCK; if (HREF.includes(PLAYER_SOURCE.GOOGLEPLAY)) return PLAYER_SOURCE.GOOGLEPLAY; if (HREF.includes(PLAYER_SOURCE.CRUNCHYROLL)) return PLAYER_SOURCE.CRUNCHYROLL; if (HREF.includes(PLAYER_SOURCE.APPLE)) return PLAYER_SOURCE.APPLE; if (HREF.includes(PLAYER_SOURCE.VIKI)) return PLAYER_SOURCE.VIKI; if (HREF.includes(PLAYER_SOURCE.FUNIMATION)) return PLAYER_SOURCE.FUNIMATION; if (HREF.includes(PLAYER_SOURCE.ROOSTERTEETH)) return PLAYER_SOURCE.ROOSTERTEETH; if (HREF.includes(PLAYER_SOURCE.LOCAL)) return PLAYER_SOURCE.LOCAL; }; export const getShowWPButton = () => new Promise((resolve, reject) => { chrome.runtime.sendMessage( { type: 'IS_HIDDEN', }, (response) => { resolve(response); } ); }); export const getTutorialStatus = () => new Promise((resolve, reject) => { chrome.runtime.sendMessage( { type: 'GET_TUTORIAL', }, (response) => { resolve(response); } ); }); export const setTutorialStatus = (status) => new Promise((resolve, reject) => { chrome.runtime.sendMessage( { type: 'SET_TUTORIAL', status, }, (response) => { resolve(response); } ); }); export const LocalData = () => { return window.localStorage.getItem('WatchParty') ? JSON.parse(window.localStorage.getItem('WatchParty')) : {}; }; export const updateLocalData = (data) => { window.localStorage.setItem('WatchParty', JSON.stringify(Object.assign({}, LocalData(), data))); }; export const removeLocalData = (key) => { var data = LocalData(); delete data[key]; window.localStorage.setItem('WatchParty', JSON.stringify(data)); }; export const emptyLocalData = () => { window.localStorage.removeItem('WatchParty'); }; export const scrollThread = () => { setTimeout(function () { const pcc = document.querySelector('.thread-wrapper'); if (pcc) pcc.scrollTop = pcc.scrollHeight; }, 250); }; export const getUserUid = async () => new Promise((resolve, reject) => { chrome.runtime.sendMessage( { type: 'GET_AUTH', }, (response) => { const { uid } = response; updateLocalData({ userUid: uid }); resolve(uid); } ); }); export const fetcher = async ({ endpoint, method, ...args }) => { const url = `${API_HOST}/${endpoint}`; return new Promise((resolve, reject) => chrome.runtime.sendMessage( { type: 'API_CALL', url, method, ...args, }, (response) => { if (response.status > 299) reject(response); else resolve({ json: () => response }); } ) ); }; export const webhookFetcher = async ({ endpoint, ...args }) => { return new Promise((resolve, reject) => chrome.runtime.sendMessage( { type: 'API_CALL', url: endpoint, method: 'POST', ...args, }, (response) => { if (response.status > 299) reject(response); else resolve({ json: () => response }); } ) ); }; export const CreateRoomApi = async (data) => { return fetcher({ endpoint: 'create', method: 'POST', body: JSON.stringify(data), }); }; export const JoinRoomApi = async (data) => { return fetcher({ endpoint: 'join', method: 'POST', body: JSON.stringify(data), }); }; export const SendMessageApi = async (data) => { return fetcher({ endpoint: 'message', method: 'POST', body: JSON.stringify(data), }); }; export const LeaveRoomApi = async (data) => { return fetcher({ endpoint: `leave/${data.partyName}/users/${data.userUid}`, method: 'DELETE', }); }; export const DeleteRoomApi = async (data) => { return fetcher({ endpoint: `delete/${data.partyName}`, method: 'DELETE', }); }; export const UpdatePlayerApi = async (data) => { return fetcher({ endpoint: 'updatePlayer', method: 'POST', body: JSON.stringify(data), }); }; export const GetVoxeetTokenApi = async (data) => { return fetcher({ endpoint: `validator/${data.partyName}`, method: 'GET', }); }; export const GetRefreshedVoxeetTokenApi = async (data) => { return fetcher({ endpoint: `refresher/${data.token}`, method: 'GET', }); }; export const UpdateVoxeetApi = async (data) => { return fetcher({ endpoint: 'updateVoxeet', method: 'POST', body: JSON.stringify(data), }); }; export const UpdateAdminOnly = async (data) => { return fetcher({ endpoint: `updateAdminOnly/${data.partyName}/${data.adminOnly}`, method: 'PUT', }); };