From d5f4bea4812cf3eeffb999e570430c55788921fc Mon Sep 17 00:00:00 2001 From: Jordan Koehn Date: Wed, 3 Jun 2020 23:09:19 -0400 Subject: [PATCH] change from node-fetch to axios. Seems to be less strict. Confirmed working for remote servers whereas node-fetch would throw error 'Only absolute URLs are supported' if server was remote." --- package-lock.json | 26 ++++++++++++++++++++++++++ package.json | 4 ++-- src/plexTranscoder.js | 20 ++++++++++---------- web/services/plex.js | 29 +++++++++++++++++------------ 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 305eb14..01cdf62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1362,6 +1362,14 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -3189,6 +3197,24 @@ "unpipe": "~1.0.0" } }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", diff --git a/package.json b/package.json index 478520d..510a669 100644 --- a/package.json +++ b/package.json @@ -18,13 +18,13 @@ "dependencies": { "angular": "^1.7.9", "angular-router-browserify": "0.0.2", + "axios": "^0.19.2", "body-parser": "^1.19.0", "diskdb": "^0.1.17", "express": "^4.17.1", - "uuid": "^8.0.0", - "node-fetch": "^2.6.0", "node-ssdp": "^4.0.0", "request": "^2.88.2", + "uuid": "^8.0.0", "xml-writer": "^1.7.0" }, "bin": "dist/index.js", diff --git a/src/plexTranscoder.js b/src/plexTranscoder.js index 21b00f1..af9d676 100644 --- a/src/plexTranscoder.js +++ b/src/plexTranscoder.js @@ -1,5 +1,5 @@ const { v4: uuidv4 } = require('uuid'); -const fetch = require('node-fetch'); +const axios = require('axios'); class PlexTranscoder { constructor(settings, lineupItem) { @@ -146,12 +146,15 @@ lang=en` } async getDecision() { - const response = await fetch(`${this.server.uri}/video/:/transcode/universal/decision?${this.transcodingArgs}`, { - method: 'GET', headers: { - Accept: 'application/json' - } + await axios.get(`${this.server.uri}/video/:/transcode/universal/decision?${this.transcodingArgs}`, { + headers: { Accept: 'application/json' } + }) + .then((res) => { + this.decisionJson = res.data; + }) + .catch((err) => { + console.log(err); }); - this.decisionJson = await response.json(); } getStatusUrl() { @@ -196,10 +199,7 @@ X-Plex-Token=${this.server.accessToken}`; } updatePlex() { - let postUrl = this.getStatusUrl(); - fetch(postUrl, { - method: 'POST' - }); + axios.post(this.getStatusUrl()); this.currTimeMs += this.updateInterval; if (this.currTimeMs > this.duration) { this.currTimeMs = this.duration; diff --git a/web/services/plex.js b/web/services/plex.js index 9168acc..1070800 100644 --- a/web/services/plex.js +++ b/web/services/plex.js @@ -1,5 +1,4 @@ const Plex = require('../../src/plex'); -const fetch = require('node-fetch'); module.exports = function ($http, $window, $interval) { return { @@ -34,14 +33,19 @@ module.exports = function ($http, $window, $interval) { } if (r2.data.authToken !== null) { $interval.cancel(interval) - try { - headers['X-Plex-Token'] = r2.data.authToken - let res_servers = [] - const getServers = await fetch(`https://plex.tv/api/v2/resources?includeHttps=1`, { - method: 'GET', headers: headers - }); - const servers = await getServers.json(); + headers['X-Plex-Token'] = r2.data.authToken + + $http({ + method: 'GET', + url: 'https://plex.tv/api/v2/resources?includeHttps=1', + headers: headers + }) + .then((r3) => { + let res_servers = [] + + const servers = r3.data; + servers.forEach((server) => { // not pms, skip if (server.provides != `server`) @@ -53,15 +57,16 @@ module.exports = function ($http, $window, $interval) { server.protocol = server.connections[i].protocol server.address = server.connections[i].address server.port = server.connections[i].port - + res_servers.push(server); }); res.servers = res_servers resolve(res) - } catch (err) { - reject(err) - } + }) + .catch((err) => { + reject(err); + }); } }, (err) => { $interval.cancel(interval)