UNPKG

@moartube/moartube-client

Version:

A free, open-source, self-hosted, anonymous, decentralized video/live stream platform. Scalable via Cloudflare, works in the cloud or from home WiFi.

1,254 lines (1,036 loc) 35.5 kB
const fs = require('fs'); const axios = require('axios').default; const FormData = require('form-data'); const http = require('http'); const https = require('https'); const { getMoarTubeNodeUrl } = require('./helpers'); async function node_doSignout(req, res) { delete req.session.jwtToken; res.redirect('/account/signin'); } async function node_isAuthenticated(jwtToken) { let result; if (jwtToken == null) { result = { isError: false, isAuthenticated: false }; } else { const response = await axios.get(getMoarTubeNodeUrl() + '/account/authenticated', { headers: { Authorization: jwtToken } }); result = response.data; } return result; } async function node_doHeartBeat(moarTubeNodeHttpProtocol, moarTubeNodeIp, moarTubeNodePort) { const response = await axios.get(moarTubeNodeHttpProtocol + '://' + moarTubeNodeIp + ':' + moarTubeNodePort + '/status/heartbeat'); return response.data; } async function node_doSignin(username, password, moarTubeNodeHttpProtocol, moarTubeNodeIp, moarTubeNodePort, rememberMe) { const response = await axios.post(getMoarTubeNodeUrl() + '/account/signin', { username: username, password: password, moarTubeNodeHttpProtocol: moarTubeNodeHttpProtocol, moarTubeNodeIp: moarTubeNodeIp, moarTubeNodePort: moarTubeNodePort, rememberMe: rememberMe }); return response.data; } async function node_getSettings(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/settings', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getAvatar() { const response = await axios.get(getMoarTubeNodeUrl() + '/settings/avatar', { responseType: 'stream' }); return response.data; } async function node_setExternalNetwork(jwtToken, publicNodeProtocol, publicNodeAddress, publicNodePort) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/network/external', { publicNodeProtocol: publicNodeProtocol, publicNodeAddress: publicNodeAddress, publicNodePort: publicNodePort }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_stopVideoImporting(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/importing/stop', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_doVideosSearch(jwtToken, searchTerm, sortTerm, tagTerm, tagLimit, timestamp) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/search', { params: { searchTerm: searchTerm, sortTerm: sortTerm, tagTerm: tagTerm, tagLimit: tagLimit, timestamp: timestamp }, headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoData(videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/data'); return response.data; } async function node_getVideoDataAll(videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/data/all'); return response.data; } async function node_setThumbnail(jwtToken, videoId, thumbnailBuffer) { const formData = new FormData(); formData.append('thumbnailFile', thumbnailBuffer, 'thumbnail.jpg'); const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/images/thumbnail', formData, { headers: headers }); return response.data; } async function node_setPreview(jwtToken, videoId, previewBuffer) { const formData = new FormData(); formData.append('previewFile', previewBuffer, 'preview.jpg'); const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/images/preview', formData, { headers: headers }); return response.data; } async function node_setPoster(jwtToken, videoId, posterBuffer) { const formData = new FormData(); formData.append('posterFile', posterBuffer, 'poster.jpg'); const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/images/poster', formData, { headers: headers }); return response.data; } async function node_unpublishVideo(jwtToken, videoId, format, resolution) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/unpublish', { format: format, resolution: resolution }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_stopVideoPublishing(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/publishing/stop', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_stopVideoStreaming(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/streams/' + videoId + '/stop', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_importVideo(jwtToken, title, description, tags) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/import', { title: title, description: description, tags: tags }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoError(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/error', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setSourceFileExtension(jwtToken, videoId, sourceFileExtension) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/sourceFileExtension', { sourceFileExtension: sourceFileExtension }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoLengths(jwtToken, videoId, lengthSeconds, lengthTimestamp) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/lengths', { lengthSeconds: lengthSeconds, lengthTimestamp: lengthTimestamp }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoImported(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/imported', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoPublishing(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/publishing', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoPublished(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/published', { videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoFormatResolutionPublished(jwtToken, videoId, format, resolution) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/' + format + '/' + resolution + '/published', {}, { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoComments(jwtToken, videoId, timestamp, type, sort) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/comments', { params: { timestamp: timestamp, type: type, sort: sort }, headers: { Authorization: jwtToken } }); return response.data; } async function node_searchComments(jwtToken, videoId, searchTerm, limit, timestamp) { const response = await axios.get(getMoarTubeNodeUrl() + '/comments/search', { params: { videoId: videoId, searchTerm: searchTerm, limit: limit, timestamp: timestamp }, headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideosTags(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/tags', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoReports(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/reports/videos', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoReportsArchive(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/reports/archive/videos', { headers: { Authorization: jwtToken } }); return response.data; } async function node_streamVideo(jwtToken, title, description, tags, rtmpPort, uuid, isRecordingStreamRemotely, isRecordingStreamLocally, networkAddress, resolution, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/streams/start', { title: title, description: description, tags: tags, rtmpPort: rtmpPort, uuid: uuid, isRecordingStreamRemotely: isRecordingStreamRemotely, isRecordingStreamLocally: isRecordingStreamLocally, networkAddress: networkAddress, resolution: resolution, videoId: videoId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_getSourceFileExtension(jwtToken, videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/sourceFileExtension', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideosTagsAll(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/tags/all', { headers: { Authorization: jwtToken } }); return response.data; } async function node_doVideosSearchAll(searchTerm, sortTerm, tagTerm, tagLimit, timestamp) { const response = await axios.get(getMoarTubeNodeUrl() + '/node/search', { params: { searchTerm: searchTerm, sortTerm: sortTerm, tagTerm: tagTerm, tagLimit: tagLimit, timestamp: timestamp } }); return response.data; } async function node_getNewContentCounts(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/node/newContentCounts', { headers: { Authorization: jwtToken } }); return response.data; } async function node_setContentChecked(jwtToken, contentType) { const response = await axios.post(getMoarTubeNodeUrl() + '/node/contentChecked', { contentType: contentType }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_archiveVideoReport(jwtToken, reportId) { const response = await axios.post(getMoarTubeNodeUrl() + '/reports/videos/archive', { reportId: reportId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_removeVideoReport(jwtToken, reportId) { const response = await axios.delete(getMoarTubeNodeUrl() + '/reports/videos/' + reportId + '/delete', { headers: { Authorization: jwtToken } }); return response.data; } async function node_removeVideoReportArchive(jwtToken, archiveId) { const response = await axios.delete(getMoarTubeNodeUrl() + '/reports/archive/videos/' + archiveId + '/delete', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getCommentReports(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/reports/comments', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getCommentReportsArchive(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/reports/archive/comments', { headers: { Authorization: jwtToken } }); return response.data; } async function node_archiveCommentReport(jwtToken, reportId) { const response = await axios.post(getMoarTubeNodeUrl() + '/reports/comments/archive', { reportId: reportId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_removeCommentReport(jwtToken, reportId) { const response = await axios.delete(getMoarTubeNodeUrl() + '/reports/comments/' + reportId + '/delete', { headers: { Authorization: jwtToken } }); return response.data; } async function node_removeCommentReportArchive(jwtToken, archiveId) { const response = await axios.delete(getMoarTubeNodeUrl() + '/reports/archive/comments/' + archiveId + '/delete', { headers: { Authorization: jwtToken } }); return response.data; } async function node_removeComment(jwtToken, videoId, commentId, timestamp) { const response = await axios.delete(getMoarTubeNodeUrl() + '/videos/' + videoId + '/comments/' + commentId + '/delete', { params: { timestamp: timestamp }, headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoPublishes(jwtToken, videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/publishes', { headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoData(jwtToken, videoId, title, description, tags) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/data', { title: title, description: description, tags: tags }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_deleteVideos(jwtToken, videoIds) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/delete', { videoIds: videoIds }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_finalizeVideos(jwtToken, videoIds) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/finalize', { videoIds: videoIds }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_addVideoToIndex(jwtToken, videoId, containsAdultContent, termsOfServiceAgreed, cloudflareTurnstileToken) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/index/add', { containsAdultContent: containsAdultContent, termsOfServiceAgreed: termsOfServiceAgreed, cloudflareTurnstileToken: cloudflareTurnstileToken }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_removeVideoFromIndex(jwtToken, videoId, cloudflareTurnstileToken) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/index/remove', { cloudflareTurnstileToken: cloudflareTurnstileToken }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoAlias(jwtToken, videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/alias', { headers: { Authorization: jwtToken } }); return response.data; } async function node_setAvatar(jwtToken, iconBuffer, avatarBuffer) { const formData = new FormData(); formData.append('iconFile', iconBuffer, 'icon.png'); formData.append('avatarFile', avatarBuffer, 'avatar.png'); const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/settings/avatar', formData, { headers: headers }); return response.data; } async function node_getBanner(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/settings/banner', { headers: { Authorization: jwtToken }, responseType: 'stream' }); return response.data; } async function node_setBanner(jwtToken, bannerBuffer) { const formData = new FormData(); formData.append('bannerFile', bannerBuffer, 'banner.png'); const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/settings/banner', formData, { headers: headers }); return response.data; } async function node_setNodeName(jwtToken, nodeName) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/personalize/nodeName', { nodeName: nodeName }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setNodeAbout(jwtToken, nodeAbout) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/personalize/nodeAbout', { nodeAbout: nodeAbout }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setNodeId(jwtToken, nodeId) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/personalize/nodeId', { nodeId: nodeId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setSecureConnection(jwtToken, isSecure, keyFile, certFile, caFiles) { const formData = new FormData(); if (keyFile != null) { formData.append('keyFile', keyFile.buffer, 'private_key.pem'); } if (certFile != null) { formData.append('certFile', certFile.buffer, 'certificate.pem'); } if (caFiles != null) { for (const caFile of caFiles) { formData.append('caFiles', caFile.buffer, caFile.filename); } } const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/settings/secure?isSecure=' + isSecure, formData, { headers: headers }); return response.data; } async function node_setNetworkInternal(jwtToken, listeningNodePort) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/network/internal', { listeningNodePort: listeningNodePort }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setCloudflareConfiguration(jwtToken, cloudflareEmailAddress, cloudflareZoneId, cloudflareGlobalApiKey) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/cloudflare/configure', { cloudflareEmailAddress: cloudflareEmailAddress, cloudflareZoneId: cloudflareZoneId, cloudflareGlobalApiKey: cloudflareGlobalApiKey }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setCloudflareTurnstileConfiguration(jwtToken, cloudflareTurnstileSiteKey, cloudflareTurnstileSecretKey) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/cloudflare/turnstile/configure', { cloudflareTurnstileSiteKey: cloudflareTurnstileSiteKey, cloudflareTurnstileSecretKey: cloudflareTurnstileSecretKey }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_CloudflareTurnstileConfigurationClear(jwtToken) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/cloudflare/turnstile/clear', {}, { headers: { Authorization: jwtToken } }); return response.data; } async function node_clearCloudflareConfiguration(jwtToken) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/cloudflare/clear', {}, { headers: { Authorization: jwtToken } }); return response.data; } async function node_databaseConfigToggle(jwtToken, databaseConfig) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/databaseConfig/toggle', { databaseConfig: databaseConfig }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_databaseConfigEmpty(jwtToken) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/databaseConfig/empty', {}, { headers: { Authorization: jwtToken } }); return response.data; } async function node_storageConfigToggle(jwtToken, storageConfig) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/storageConfig/toggle', { storageConfig: storageConfig }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_storageConfigEmpty(jwtToken) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/storageConfig/empty', {}, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setAccountCredentials(jwtToken, username, password) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/account', { username: username, password: password }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_uploadVideo(jwtToken, videoId, format, resolution, directoryPaths) { const formData = new FormData(); for (const directoryPath of directoryPaths) { const fileName = directoryPath.fileName; const filePath = directoryPath.filePath; const contentType = directoryPath.contentType; const fileStream = fs.createReadStream(filePath); formData.append('video_files', fileStream, { filename: fileName, contentType: contentType }); } const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/upload', formData, { params: { format: format, resolution: resolution }, headers: { Authorization: jwtToken } }); return response.data; } async function node_setVideoChatSettings(jwtToken, videoId, isChatHistoryEnabled, chatHistoryLimit) { const response = await axios.post(getMoarTubeNodeUrl() + '/streams/' + videoId + '/chat/settings', { isChatHistoryEnabled: isChatHistoryEnabled, chatHistoryLimit: chatHistoryLimit }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoBandwidth(jwtToken, videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/streams/' + videoId + '/bandwidth', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getStreamMeta(jwtToken, videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/streams/' + videoId + '/meta/', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoSources(videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/watch'); return response.data; } const httpAgent = new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 }); const httpsAgent = new https.Agent({ keepAlive: true, keepAliveMsecs: 10000 }); async function node_uploadStream(jwtToken, videoId, format, resolution, manifestData, segmentData, manifestFileName, segmentFileName) { const formData = new FormData(); formData.append('video_files', manifestData, { filename: manifestFileName, contentType: 'application/vnd.apple.mpegurl', }); formData.append('video_files', segmentData, { filename: segmentFileName, contentType: 'video/mp2t', }); const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/stream', formData, { params: { format: format, resolution: resolution }, headers: { Authorization: jwtToken }, timeout: 15000, httpAgent: httpAgent, httpsAgent: httpsAgent }); return response.data; } async function node_removeAdaptiveStreamSegment(jwtToken, videoId, format, resolution, segmentName) { const response = await axios.post(getMoarTubeNodeUrl() + '/streams/' + videoId + '/adaptive/' + format + '/' + resolution + '/segments/remove', { segmentName: segmentName }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_MonetizationAll() { const response = await axios.get(getMoarTubeNodeUrl() + '/monetization/all'); return response.data; } async function node_MonetizationAdd(jwtToken, walletAddress, chain, currency) { const response = await axios.post(getMoarTubeNodeUrl() + '/monetization/add', { walletAddress: walletAddress, chain: chain, currency: currency }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_MonetizationDelete(jwtToken, cryptoWalletAddressId) { const response = await axios.post(getMoarTubeNodeUrl() + '/monetization/delete', { cryptoWalletAddressId: cryptoWalletAddressId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_LinksAll() { const response = await axios.get(getMoarTubeNodeUrl() + '/links/all'); return response.data; } async function node_LinksAdd(jwtToken, url, svgGraphic) { const response = await axios.post(getMoarTubeNodeUrl() + '/links/add', { url: url, svgGraphic: svgGraphic }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_LinksDelete(jwtToken, linkId) { const response = await axios.post(getMoarTubeNodeUrl() + '/links/delete', { linkId: linkId }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_commentsToggle(jwtToken, isCommentsEnabled) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/comments/toggle', { isCommentsEnabled: isCommentsEnabled, }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_likesToggle(jwtToken, isLikesEnabled) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/likes/toggle', { isLikesEnabled: isLikesEnabled, }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_dislikesToggle(jwtToken, isDislikesEnabled) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/dislikes/toggle', { isDislikesEnabled: isDislikesEnabled, }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_reportsToggle(jwtToken, isReportsEnabled) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/reports/toggle', { isReportsEnabled: isReportsEnabled, }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_liveChatToggle(jwtToken, isLiveChatEnabled) { const response = await axios.post(getMoarTubeNodeUrl() + '/settings/liveChat/toggle', { isLiveChatEnabled: isLiveChatEnabled, }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_getExternalVideosBaseUrl(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/external/videos/baseUrl', { headers: { Authorization: jwtToken } }); return response.data; } async function node_getManifestFile(videoId, format, type, manifestName) { const response = await axios.get(getMoarTubeNodeUrl() + '/external/videos/' + videoId + '/adaptive/' + format + '/' + type + '/manifests/' + manifestName); return response.data; } async function node_uploadM3u8MasterManifest(jwtToken, videoId, type, masterManifest) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/adaptive/m3u8/' + type + '/manifests/masterManifest', { masterManifest: masterManifest, }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_setIsIndexOutdated(jwtToken, videoId) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/index/outdated', {}, { headers: { Authorization: jwtToken } }); return response.data; } async function node_getVideoPermissions(jwtToken, videoId) { const response = await axios.get(getMoarTubeNodeUrl() + '/videos/' + videoId + '/permissions', { headers: { Authorization: jwtToken } }); return response.data; } async function node_postVideoPermissions(jwtToken, videoId, type, isEnabled) { const response = await axios.post(getMoarTubeNodeUrl() + '/videos/' + videoId + '/permissions', { type: type, isEnabled: isEnabled }, { headers: { Authorization: jwtToken } }); return response.data; } async function node_settingsImportDatabase(jwtToken, databaseFileBuffer) { const formData = new FormData(); formData.append('database_file', databaseFileBuffer, 'database.json'); const headers = formData.getHeaders(); headers.Authorization = jwtToken; const response = await axios.post(getMoarTubeNodeUrl() + '/settings/import/database', formData, { headers: headers }); return response.data; } async function node_settingsExportDatabase(jwtToken) { const response = await axios.get(getMoarTubeNodeUrl() + '/settings/export/database', { headers: { Authorization: jwtToken } }); return response.data; } module.exports = { node_isAuthenticated, node_doHeartBeat, node_doSignin, node_doSignout, node_getSettings, node_setExternalNetwork, node_stopVideoImporting, node_doVideosSearch, node_setThumbnail, node_setPreview, node_setPoster, node_getVideoData, node_getVideoDataAll, node_unpublishVideo, node_stopVideoPublishing, node_stopVideoStreaming, node_importVideo, node_setVideoError, node_setSourceFileExtension, node_setVideoLengths, node_setVideoImported, node_setVideoPublishing, node_setVideoPublished, node_setVideoFormatResolutionPublished, node_getVideoComments, node_getVideosTags, node_getVideoReports, node_getVideoReportsArchive, node_streamVideo, node_getSourceFileExtension, node_getVideosTagsAll, node_doVideosSearchAll, node_archiveVideoReport, node_removeVideoReport, node_removeVideoReportArchive, node_getCommentReports, node_getCommentReportsArchive, node_archiveCommentReport, node_removeCommentReport, node_removeCommentReportArchive, node_removeComment, node_getVideoPublishes, node_setVideoData, node_deleteVideos, node_finalizeVideos, node_addVideoToIndex, node_removeVideoFromIndex, node_getVideoAlias, node_getAvatar, node_setAvatar, node_getBanner, node_setBanner, node_setNodeName, node_setNodeAbout, node_setNodeId, node_setSecureConnection, node_setNetworkInternal, node_setCloudflareConfiguration, node_clearCloudflareConfiguration, node_setAccountCredentials, node_uploadVideo, node_setVideoChatSettings, node_getVideoBandwidth, node_uploadStream, node_removeAdaptiveStreamSegment, node_setCloudflareTurnstileConfiguration, node_CloudflareTurnstileConfigurationClear, node_searchComments, node_getNewContentCounts, node_setContentChecked, node_getVideoSources, node_getStreamMeta, node_MonetizationAll, node_MonetizationAdd, node_MonetizationDelete, node_LinksAll, node_LinksAdd, node_LinksDelete, node_commentsToggle, node_likesToggle, node_dislikesToggle, node_reportsToggle, node_liveChatToggle, node_databaseConfigToggle, node_databaseConfigEmpty, node_storageConfigToggle, node_storageConfigEmpty, node_getExternalVideosBaseUrl, node_getManifestFile, node_uploadM3u8MasterManifest, node_setIsIndexOutdated, node_getVideoPermissions, node_postVideoPermissions, node_settingsExportDatabase, node_settingsImportDatabase };