diff --git a/configure.html b/configure.html
index bc2fd5d..b572048 100644
--- a/configure.html
+++ b/configure.html
@@ -222,7 +222,7 @@
/>
The Movie Database Addon
- 3.0.11
+ 3.0.10
Metadata provided by TMDB.
This addon has more :
diff --git a/index.js b/index.js
index f2b88a9..23c8bde 100644
--- a/index.js
+++ b/index.js
@@ -1,19 +1,18 @@
-import express from "express";
-import urlExist from "url-exist";
-import path, { dirname } from "path";
-import { fileURLToPath } from 'url';
-import getCatalog from "./lib/getCatalog.js"
-import getSearch from "./lib/getSearch.js";
-import { getManifest, DEFAULT_LANGUAGE } from "./lib/getManifest.js";
-import getMeta from "./lib/getMeta.js";
-import getTmdb from "./lib/getTmdb.js";
-import getTrending from "./lib/getTrending.js";
-import Utils from "./utils/parseProps.js";
+const express = require("express");
+const path = require("path")
const addon = express();
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
+const { getCatalog } = require("./lib/getCatalog");
+const { getSearch } = require("./lib/getSearch");
+const { getManifest, DEFAULT_LANGUAGE } = require("./lib/getManifest");
+const { getMeta } = require("./lib/getMeta");
+const { getTmdb } = require("./lib/getTmdb");
+const { cacheWrapMeta } = require("./lib/getCache");
+const { getTrending } = require("./lib/getTrending");
+const { parseConfig, getRpdbPoster, checkIfExists } = require("./utils/parseProps");
+
+const getCacheHeaders = function (opts) {
+ opts = opts || {};
-const getCacheHeaders = (opts = {}) => {
if (!Object.keys(opts).length) return false;
let cacheHeaders = {
@@ -26,13 +25,13 @@ const getCacheHeaders = (opts = {}) => {
.map((prop) => {
const value = opts[prop];
if (!value) return false;
- return `${cacheHeaders[prop]}=${value}`;
+ return cacheHeaders[prop] + "=" + value;
})
.filter((val) => !!val)
.join(", ");
};
-const respond = (res, data, opts) => {
+const respond = function (res, data, opts) {
const cacheControl = getCacheHeaders(opts);
if (cacheControl) res.setHeader("Cache-Control", `${cacheControl}, public`);
res.setHeader("Access-Control-Allow-Origin", "*");
@@ -41,16 +40,16 @@ const respond = (res, data, opts) => {
res.send(data);
};
-addon.get("/", async (_, res) => {
+addon.get("/", async function (_, res) {
res.redirect("/configure");
});
-addon.get("/:catalogChoices?/configure", async (req, res) => {
- res.sendFile(path.join(`${__dirname}/configure.html`));
+addon.get("/:catalogChoices?/configure", async function (req, res) {
+ res.sendFile(path.join(__dirname + "/configure.html"));
});
-addon.get("/:catalogChoices?/manifest.json", async ({ params }, res) => {
- const config = Utils.parseConfig(params.catalogChoices);
+addon.get("/:catalogChoices?/manifest.json", async function (req, res) {
+ const config = parseConfig(req.params.catalogChoices);
const language = config.language || DEFAULT_LANGUAGE;
const manifest = await getManifest(language);
const cacheOpts = {
@@ -61,15 +60,15 @@ addon.get("/:catalogChoices?/manifest.json", async ({ params }, res) => {
respond(res, manifest, cacheOpts);
});
-addon.get("/:catalogChoices?/catalog/:type/:id/:extra?.json", async ({ params, url }, res) => {
- const { catalogChoices, type, id } = params;
- const config = Utils.parseConfig(catalogChoices)
+addon.get("/:catalogChoices?/catalog/:type/:id/:extra?.json", async function (req, res) {
+ const { catalogChoices, type, id } = req.params;
+ const config = parseConfig(catalogChoices)
const language = config.language || DEFAULT_LANGUAGE;
const include_adult = config.include_adult || false
const rpdbkey = config.rpdbkey
- const { genre, skip, search } = params.extra
+ const { genre, skip, search } = req.params.extra
? Object.fromEntries(
- new URLSearchParams(url.split("/").pop().split("?")[0].slice(0, -5)).entries()
+ new URLSearchParams(req.url.split("/").pop().split("?")[0].slice(0, -5)).entries()
)
: {};
const page = Math.ceil(skip ? skip / 20 + 1 : undefined) || 1;
@@ -78,8 +77,8 @@ addon.get("/:catalogChoices?/catalog/:type/:id/:extra?.json", async ({ params, u
metas = search
? await getSearch(type, language, search, include_adult)
: id === "tmdb.trending"
- ? await getTrending(type, id, language, genre, page)
- : await getCatalog(type, id, language, genre, page);
+ ? await getTrending(type, id, language, genre, page, include_adult)
+ : await getCatalog(type, id, language, genre, page, include_adult);
} catch (e) {
res.status(404).send((e || {}).message || "Not found");
return;
@@ -97,8 +96,8 @@ addon.get("/:catalogChoices?/catalog/:type/:id/:extra?.json", async ({ params, u
try {
metas = JSON.parse(JSON.stringify(metas));
metas.metas = await Promise.all(metas.metas.map(async (el) => {
- const rpdbPoster = Utils.getRpdbPoster(type, el.id.replace('tmdb:', ''), language, rpdbkey)
- el.poster = (await urlExist(rpdbPoster)) ? rpdbPoster : el.poster;
+ const rpdbImage = getRpdbPoster(type, el.id.replace('tmdb:', ''), language, rpdbkey)
+ el.poster = await checkIfExists(rpdbImage) ? rpdbImage : el.poster;
return el;
}))
} catch (e) { }
@@ -106,15 +105,17 @@ addon.get("/:catalogChoices?/catalog/:type/:id/:extra?.json", async ({ params, u
respond(res, metas, cacheOpts);
});
-addon.get("/:catalogChoices?/meta/:type/:id.json", async ({ params }, res) => {
- const { catalogChoices, type, id } = params;
- const config = Utils.parseConfig(catalogChoices);
+addon.get("/:catalogChoices?/meta/:type/:id.json", async function (req, res) {
+ const { catalogChoices, type, id } = req.params;
+ const config = parseConfig(catalogChoices);
const tmdbId = id.split(":")[1];
const language = config.language || DEFAULT_LANGUAGE;
- const imdbId = params.id.split(":")[0];
+ const imdbId = req.params.id.split(":")[0];
- if (params.id.includes("tmdb:")) {
- const resp = await getMeta(type, language, tmdbId);
+ if (req.params.id.includes("tmdb:")) {
+ const resp = await cacheWrapMeta(`${language}:${type}:${tmdbId}`, async () => {
+ return await getMeta(type, language, tmdbId)
+ });
const cacheOpts = {
staleRevalidate: 20 * 24 * 60 * 60, // 20 days
staleError: 30 * 24 * 60 * 60, // 30 days
@@ -129,10 +130,12 @@ addon.get("/:catalogChoices?/meta/:type/:id.json", async ({ params }, res) => {
}
respond(res, resp, cacheOpts);
}
- if (params.id.includes("tt")) {
+ if (req.params.id.includes("tt")) {
const tmdbId = await getTmdb(type, imdbId);
if (tmdbId) {
- const resp = await getMeta(type, language, tmdbId);
+ const resp = await cacheWrapMeta(`${language}:${type}:${tmdbId}`, async () => {
+ return await getMeta(type, language, tmdbId)
+ });
const cacheOpts = {
staleRevalidate: 20 * 24 * 60 * 60, // 20 days
staleError: 30 * 24 * 60 * 60, // 30 days
@@ -152,4 +155,4 @@ addon.get("/:catalogChoices?/meta/:type/:id.json", async ({ params }, res) => {
}
});
-export default addon;
\ No newline at end of file
+module.exports = addon;
\ No newline at end of file
diff --git a/lib/getCache.js b/lib/getCache.js
new file mode 100644
index 0000000..b4c4a86
--- /dev/null
+++ b/lib/getCache.js
@@ -0,0 +1,53 @@
+const cacheManager = require('cache-manager');
+const mangodbStore = require('cache-manager-mongodb');
+
+const GLOBAL_KEY_PREFIX = 'tmdb-addon';
+const META_KEY_PREFIX = `${GLOBAL_KEY_PREFIX}|meta`;
+const CATALOG_KEY_PREFIX = `${GLOBAL_KEY_PREFIX}|catalog`;
+
+const META_TTL = process.env.META_TTL || 7 * 24 * 60 * 60; // 7 day
+const CATALOG_TTL = process.env.CATALOG_TTL || 15 * 24 * 60 * 60; // 15 day
+
+const MONGO_URI = process.env.MONGODB_URI;
+const NO_CACHE = process.env.NO_CACHE || false;
+
+const cache = initiateCache();
+
+function initiateCache() {
+ if (NO_CACHE) {
+ return null;
+ } else if (!NO_CACHE && MONGO_URI) {
+ return cacheManager.caching({
+ store: mangodbStore,
+ uri: MONGO_URI,
+ options: {
+ collection: 'tmdb_collection',
+ ttl: META_TTL
+ },
+ ttl: META_TTL,
+ ignoreCacheErrors: true
+ });
+ } else {
+ return cacheManager.caching({
+ store: 'memory',
+ ttl: META_TTL
+ });
+ }
+}
+
+function cacheWrap(key, method, options) {
+ if (NO_CACHE || !cache) {
+ return method();
+ }
+ return cache.wrap(key, method, options);
+}
+
+function cacheWrapCatalog(id, method) {
+ return cacheWrap(`${CATALOG_KEY_PREFIX}:${id}`, method, { ttl: CATALOG_TTL });
+}
+
+function cacheWrapMeta(id, method) {
+ return cacheWrap(`${META_KEY_PREFIX}:${id}`, method, { ttl: META_TTL });
+}
+
+module.exports = { cacheWrapCatalog, cacheWrapMeta };
\ No newline at end of file
diff --git a/lib/getCatalog.js b/lib/getCatalog.js
index f680386..17eb52c 100644
--- a/lib/getCatalog.js
+++ b/lib/getCatalog.js
@@ -1,14 +1,15 @@
-import "dotenv/config"
-import { MovieDb } from "moviedb-promise";
-const moviedb = new MovieDb(process.env.tmdb_api);
-import getGenreList from "./getGenreList.js";
-import getLanguages from "./getLanguages.js";
-import getMeta from "./getMeta.js";
+require("dotenv").config();
+const { MovieDb } = require("moviedb-promise");
+const moviedb = new MovieDb(process.env.TMDB_API);
+const { getGenreList } = require("./getGenreList");
+const { getLanguages } = require("./getLanguages");
+const { cacheWrapMeta } = require("./getCache");
+const { getMeta } = require("./getMeta")
async function getCatalog(type, id, language, genre, page, include_adult) {
- const parameters = {
- language,
- page,
+ var parameters = {
+ language: language,
+ page: page,
include_adult,
};
const genre_id = await getGenreList(language, type);
@@ -18,7 +19,7 @@ async function getCatalog(type, id, language, genre, page, include_adult) {
let gen_name = false
if (genre) {
gen_name = genre
- ? (genre_id.find(({ name }) => name === genre) || {}).id || false
+ ? (genre_id.find((x) => x.name === genre) || {}).id || false
: genre;
if (!gen_name) return Promise.reject(Error(`Could not find genre: ${genre}`))
}
@@ -27,15 +28,17 @@ async function getCatalog(type, id, language, genre, page, include_adult) {
parameters.primary_release_year = genre
} else if (id === "tmdb.language") {
parameters.with_original_language = languages
- .find(({ name }) => name === genre)
+ .find((lang) => lang.name === genre)
.iso_639_1.split("-")[0]
}
return await moviedb
.discoverMovie(parameters)
- .then(async ({ results }) => {
+ .then(async (res) => {
const metas = await Promise.all(
- results.map(async (el) => {
- const meta = await getMeta(type, language, el.id);
+ res.results.map(async (el) => {
+ const meta = await cacheWrapMeta(`${language}:${type}:${el.id}`, async () => {
+ return await getMeta(type, language, el.id);
+ });
return meta.meta;
})
);
@@ -49,7 +52,7 @@ async function getCatalog(type, id, language, genre, page, include_adult) {
let gen_name = false
if (genre) {
gen_name = genre
- ? (genre_id.find(({ name }) => name === genre) || {}).id || false
+ ? (genre_id.find((x) => x.name === genre) || {}).id || false
: genre;
if (!gen_name) return Promise.reject(Error(`Could not find genre: ${genre}`))
}
@@ -58,15 +61,17 @@ async function getCatalog(type, id, language, genre, page, include_adult) {
parameters.first_air_date_year = genre
} else if (id === "tmdb.language") {
parameters.with_original_language = languages
- .find(({ name }) => name === genre)
+ .find((lang) => lang.name === genre)
.iso_639_1.split("-")[0]
}
return await moviedb
.discoverTv(parameters)
- .then(async ({ results }) => {
+ .then(async (res) => {
const metas = await Promise.all(
- results.map(async (el) => {
- const meta = await getMeta(type, language, el.id);
+ res.results.map(async (el) => {
+ const meta = await cacheWrapMeta(`${language}:${type}:${el.id}`, async () => {
+ return await getMeta(type, language, el.id);
+ });
return meta.meta;
})
);
@@ -76,4 +81,4 @@ async function getCatalog(type, id, language, genre, page, include_adult) {
}
}
-export default getCatalog
+module.exports = { getCatalog };
diff --git a/lib/getEpisodes.js b/lib/getEpisodes.js
index 2641d13..8f701c0 100644
--- a/lib/getEpisodes.js
+++ b/lib/getEpisodes.js
@@ -1,19 +1,21 @@
-import "dotenv/config"
-import { MovieDb } from "moviedb-promise";
-const moviedb = new MovieDb(process.env.tmdb_api);
-import diferentOrder from "../static/diferentOrder.json" assert { type: "json" };
-import diferentImdbId from "../static/diferentImdbId.json" assert { type: "json" };
+require("dotenv").config();
+const { MovieDb } = require("moviedb-promise");
+const moviedb = new MovieDb(process.env.TMDB_API);
+const diferentOrder = require("../static/diferentOrder.json");
+const diferentImdbId = require("../static/diferentImdbId.json");
function genSeasonsString(seasons) {
if (seasons.length <= 20) {
return [
- seasons.map(({ season_number }) => `season/${season_number}`).join(","),
+ seasons.map((season) => `season/${season.season_number}`).join(","),
];
} else {
const result = new Array(Math.ceil(seasons.length / 20))
.fill()
.map((_) => seasons.splice(0, 20));
- return result.map(arr => arr.map(({ season_number }) => `season/${season_number}`).join(","));
+ return result.map((arr) => {
+ return arr.map((season) => `season/${season.season_number}`).join(",");
+ });
}
}
@@ -24,28 +26,30 @@ async function getEpisodes(language, tmdbId, imdb_id, seasons) {
imdb_id = !difImdbId ? imdb_id : difImdbId.imdbId;
if (difOrder != undefined) {
return await moviedb
- .episodeGroup({ language, id: difOrder.episodeGroupId })
- .then(({ groups }) => groups
- .map(({ episodes, order }) => episodes.map((episode, index) => ({
- id: difOrder.watchOrderOnly
- ? `${imdb_id}:${episode.season_number}:${episode.episode_number}`
- : `${imdb_id}:${order}:${index + 1}`,
- name: episode.name,
- season: order,
- episode: index + 1,
- thumbnail: `https://image.tmdb.org/t/p/w500${episode.still_path}`,
- overview: episode.overview,
- description: episode.overview,
- rating: episode.vote_average,
- firstAired: difOrder.watchOrderOnly
- ? new Date(Date.parse(episodes[0].air_date) + index)
- : new Date(Date.parse(episode.air_date) + index),
- released: difOrder.watchOrderOnly
- ? new Date(Date.parse(episodes[0].air_date) + index)
- : new Date(Date.parse(episode.air_date) + index),
- }))
- )
- .reduce((a, b) => a.concat(b), [])
+ .episodeGroup({ language: language, id: difOrder.episodeGroupId })
+ .then((episodeGroups) =>
+ episodeGroups.groups
+ .map((group) =>
+ group.episodes.map((episode, index) => ({
+ id: difOrder.watchOrderOnly
+ ? `${imdb_id}:${episode.season_number}:${episode.episode_number}`
+ : `${imdb_id}:${group.order}:${index + 1}`,
+ name: episode.name,
+ season: group.order,
+ episode: index + 1,
+ thumbnail: `https://image.tmdb.org/t/p/w500${episode.still_path}`,
+ overview: episode.overview,
+ description: episode.overview,
+ rating: episode.vote_average,
+ firstAired: difOrder.watchOrderOnly
+ ? new Date(Date.parse(group.episodes[0].air_date) + index)
+ : new Date(Date.parse(episode.air_date) + index),
+ released: difOrder.watchOrderOnly
+ ? new Date(Date.parse(group.episodes[0].air_date) + index)
+ : new Date(Date.parse(episode.air_date) + index),
+ }))
+ )
+ .reduce((a, b) => a.concat(b), [])
)
.catch(console.error);
} else {
@@ -89,4 +93,4 @@ async function getEpisodes(language, tmdbId, imdb_id, seasons) {
}
}
-export default getEpisodes;
+module.exports = { getEpisodes };
diff --git a/lib/getGenreList.js b/lib/getGenreList.js
index 766d507..5d7312a 100644
--- a/lib/getGenreList.js
+++ b/lib/getGenreList.js
@@ -1,21 +1,25 @@
-import 'dotenv/config';
-import { MovieDb } from 'moviedb-promise';
-const moviedb = new MovieDb(process.env.tmdb_api)
+require('dotenv').config()
+const { MovieDb } = require('moviedb-promise')
+const moviedb = new MovieDb(process.env.TMDB_API)
async function getGenreList(language, type) {
if (type === "movie") {
const genre = await moviedb
- .genreMovieList({ language })
- .then(({ genres }) => genres)
+ .genreMovieList({language})
+ .then((res) => {
+ return res.genres;
+ })
.catch(console.error);
- return genre
+ return genre
} else {
const genre = await moviedb
- .genreTvList({ language })
- .then(({ genres }) => genres)
- .catch(console.error);
+ .genreTvList({language})
+ .then((res) => {
+ return res.genres;
+ })
+ .catch(console.error);
return genre
}
}
-export default getGenreList;
+module.exports = { getGenreList };
diff --git a/lib/getLanguages.js b/lib/getLanguages.js
index c6dd9bc..a12dd40 100644
--- a/lib/getLanguages.js
+++ b/lib/getLanguages.js
@@ -1,6 +1,6 @@
-import "dotenv/config"
-import { MovieDb } from "moviedb-promise";
-const moviedb = new MovieDb(process.env.tmdb_api);
+require("dotenv").config();
+const { MovieDb } = require("moviedb-promise");
+const moviedb = new MovieDb(process.env.TMDB_API);
async function getLanguages() {
const [primaryTranslations, languages] = await Promise.all([
@@ -9,9 +9,9 @@ async function getLanguages() {
]);
return primaryTranslations.map((element) => {
const [language, country] = element.split("-");
- const findLanguage = languages.find(({ iso_639_1 }) => iso_639_1 === language);
- return { iso_639_1: element, name: findLanguage.english_name };
+ const findLanguage = languages.find((obj) => obj.iso_639_1 === language);
+ return { iso_639_1: element, name: findLanguage.english_name};
});
}
-export default getLanguages;
+module.exports = { getLanguages };
diff --git a/lib/getLogo.js b/lib/getLogo.js
index 8299863..5a9aa62 100644
--- a/lib/getLogo.js
+++ b/lib/getLogo.js
@@ -1,20 +1,20 @@
-import 'dotenv/config';
-import FanartTvApi from "fanart.tv-api";
-const apiKey = process.env.fanart_api;
+require('dotenv').config()
+const FanartTvApi = require("fanart.tv-api");
+const apiKey = process.env.FANART_API;
const baseUrl = "http://webservice.fanart.tv/v3/";
const fanart = new FanartTvApi({ apiKey, baseUrl });
function pickLogo(resp, language, original_language) {
if (
- resp.find(({ lang }) => lang === language.split("-")[0]) != undefined
+ resp.find((data) => data.lang === language.split("-")[0]) != undefined
) {
- return resp.find(({ lang }) => lang === language.split("-")[0]);
+ return resp.find((data) => data.lang === language.split("-")[0]);
} else if (
- resp.find(({ lang }) => lang === original_language) != undefined
+ resp.find((data) => data.lang === original_language) != undefined
) {
- return resp.find(({ lang }) => lang === original_language);
- } else if (resp.find(({ lang }) => lang === "en") != undefined) {
- return resp.find(({ lang }) => lang === "en");
+ return resp.find((data) => data.lang === original_language);
+ } else if (resp.find((data) => data.lang === "en") != undefined) {
+ return resp.find((data) => data.lang === "en");
} else {
return resp[0];
}
@@ -24,8 +24,8 @@ async function getLogo(tmdbId, language, original_language) {
if (!tmdbId) return Promise.reject(Error(`TMDB ID Not available for Fanart: ${tmdbId}`));
const meta = fanart
.getMovieImages(tmdbId)
- .then(({ hdmovielogo }) => {
- const resp = hdmovielogo
+ .then((res) => {
+ const resp = res.hdmovielogo
if (resp !== undefined) {
const { url } = pickLogo(resp, language, original_language);
return url
@@ -33,7 +33,9 @@ async function getLogo(tmdbId, language, original_language) {
return ''
}
})
- .catch(err => "");
+ .catch((err) => {
+ return ""
+ });
return meta;
}
@@ -41,8 +43,8 @@ async function getTvLogo(tvdb_id, language, original_language) {
if (!tvdb_id) return Promise.reject(Error(`TVDB ID Not available for Fanart: ${tvdb_id}`));
const meta = fanart
.getShowImages(tvdb_id)
- .then(({ hdtvlogo }) => {
- const resp = hdtvlogo;
+ .then((res) => {
+ const resp = res.hdtvlogo;
if (resp !== undefined) {
const { url } = pickLogo(resp, language, original_language);
return url
@@ -50,8 +52,10 @@ async function getTvLogo(tvdb_id, language, original_language) {
return ''
}
})
- .catch(err => "");
+ .catch((err) => {
+ return ""
+ });
return meta;
}
-export { getLogo, getTvLogo };
\ No newline at end of file
+module.exports = { getLogo, getTvLogo };
\ No newline at end of file
diff --git a/lib/getManifest.js b/lib/getManifest.js
index 3ef5fab..6df42ff 100644
--- a/lib/getManifest.js
+++ b/lib/getManifest.js
@@ -1,7 +1,7 @@
-import "dotenv/config"
-import getGenreList from "./getGenreList.js";
-import getLanguages from "./getLanguages.js";
-import packageFile from "../package.json" assert { type: "json" };
+require("dotenv").config();
+const { getGenreList } = require("./getGenreList");
+const { getLanguages } = require("./getLanguages");
+const package = require("../package.json");
const DEFAULT_LANGUAGE = "en-US";
@@ -34,15 +34,15 @@ async function getManifest(language = DEFAULT_LANGUAGE) {
const descriptionSuffix = language && language !== DEFAULT_LANGUAGE ? ` with ${language} language.` : ".";
return {
- id: packageFile.name,
- version: packageFile.version,
+ id: package.name,
+ version: package.version,
favicon:
"https://github.com/mrcanelas/tmdb-addon/raw/main/images/favicon.png",
logo: "https://github.com/mrcanelas/tmdb-addon/raw/main/images/logo.png",
background:
"https://github.com/mrcanelas/tmdb-addon/raw/main/images/background.png",
name: "The Movie Database Addon",
- description: packageFile.description + descriptionSuffix,
+ description: package.description + descriptionSuffix,
resources: ["catalog", "meta"],
types: ["movie", "series"],
idPrefixes: ["tmdb:"],
@@ -159,4 +159,4 @@ async function getManifest(language = DEFAULT_LANGUAGE) {
};
}
-export { getManifest, DEFAULT_LANGUAGE };
\ No newline at end of file
+module.exports = { getManifest, DEFAULT_LANGUAGE };
\ No newline at end of file
diff --git a/lib/getMeta.js b/lib/getMeta.js
index 50945ab..47f6f74 100644
--- a/lib/getMeta.js
+++ b/lib/getMeta.js
@@ -1,9 +1,9 @@
-import "dotenv/config"
-import { MovieDb } from "moviedb-promise";
-import Utils from "../utils/parseProps.js";
-const moviedb = new MovieDb(process.env.tmdb_api);
-import getEpisodes from "./getEpisodes.js";
-import { getLogo, getTvLogo } from "./getLogo.js";
+require("dotenv").config();
+const { MovieDb } = require("moviedb-promise");
+const Utils = require("../utils/parseProps");
+const moviedb = new MovieDb(process.env.TMDB_API);
+const { getEpisodes } = require("./getEpisodes");
+const { getLogo, getTvLogo } = require("./getLogo");
const blacklistLogoUrls = [
@@ -14,7 +14,7 @@ const blacklistLogoUrls = [
async function getMeta(type, language, tmdbId) {
if (type === "movie") {
const meta = await moviedb
- .movieInfo({ id: tmdbId, language, append_to_response: "videos,credits", })
+ .movieInfo({id: tmdbId, language, append_to_response: "videos,credits",})
.then(async (res) => {
const resp = {
imdb_id: res.imdb_id,
@@ -27,7 +27,7 @@ async function getMeta(type, language, tmdbId) {
name: res.title,
released: new Date(res.release_date),
slug: Utils.parseSlug(type, res.title, res.imdb_id),
- type,
+ type: type,
writer: Utils.parseWriter(res.credits),
year: res.release_date ? res.release_date.substr(0, 4) : "",
trailers: Utils.parseTrailers(res.videos),
@@ -60,7 +60,7 @@ async function getMeta(type, language, tmdbId) {
};
try {
resp.logo = await getLogo(tmdbId, language, res.original_language);
- } catch (e) {
+ } catch(e) {
console.log(`warning: logo could not be retrieved for ${tmdbId} - ${type}`);
console.log((e || {}).message || "unknown error");
}
@@ -73,7 +73,7 @@ async function getMeta(type, language, tmdbId) {
return Promise.resolve({ meta });
} else {
const meta = await moviedb
- .tvInfo({ id: tmdbId, language, append_to_response: "videos,credits,external_ids", })
+ .tvInfo({id: tmdbId, language, append_to_response: "videos,credits,external_ids",})
.then(async (res) => {
const resp = {
cast: Utils.parseCast(res.credits),
@@ -87,7 +87,7 @@ async function getMeta(type, language, tmdbId) {
released: new Date(res.first_air_date),
runtime: Utils.parseRunTime(res.episode_run_time[0]),
status: res.status,
- type,
+ type: type,
writer: Utils.parseCreatedBy(res.created_by),
year: Utils.parseYear(res.status, res.first_air_date, res.last_air_date),
background: `https://image.tmdb.org/t/p/original${res.backdrop_path}`,
@@ -111,7 +111,7 @@ async function getMeta(type, language, tmdbId) {
};
try {
resp.logo = await getTvLogo(res.external_ids.tvdb_id, language, res.original_language);
- } catch (e) {
+ } catch(e) {
console.log(`warning: logo could not be retrieved for ${tmdbId} - ${type}`);
console.log((e || {}).message || "unknown error");
}
@@ -120,7 +120,7 @@ async function getMeta(type, language, tmdbId) {
}
try {
resp.videos = await getEpisodes(language, tmdbId, res.external_ids.imdb_id, res.seasons);
- } catch (e) {
+ } catch(e) {
console.log(`warning: episodes could not be retrieved for ${tmdbId} - ${type}`);
console.log((e || {}).message || "unknown error");
}
@@ -132,4 +132,4 @@ async function getMeta(type, language, tmdbId) {
}
}
-export default getMeta;
\ No newline at end of file
+module.exports = { getMeta };
\ No newline at end of file
diff --git a/lib/getSearch.js b/lib/getSearch.js
index 9068e64..a8615f3 100644
--- a/lib/getSearch.js
+++ b/lib/getSearch.js
@@ -1,14 +1,14 @@
-import "dotenv/config"
-import { MovieDb } from "moviedb-promise";
-const moviedb = new MovieDb(process.env.tmdb_api);
+require("dotenv").config();
+const { MovieDb } = require("moviedb-promise");
+const moviedb = new MovieDb(process.env.TMDB_API);
async function getSearch(type, language, query, include_adult) {
if (type === "movie") {
- const searchMovie = []
+ const searchMovie = []
await moviedb
.searchMovie({ query, language, include_adult })
- .then(({ results }) => {
- results.map((el) => {
+ .then((res) => {
+ res.results.map((el) => {
searchMovie.push({
id: `tmdb:${el.id}`,
name: `${el.title}`,
@@ -20,13 +20,13 @@ async function getSearch(type, language, query, include_adult) {
});
})
.catch(console.error);
- await moviedb.searchPerson({ query, language }).then(async ({ results }) => {
- if (results[0]) {
+ await moviedb.searchPerson({ query, language }).then(async (res) => {
+ if (res.results[0]) {
await moviedb
- .personMovieCredits({ id: results[0].id, language })
- .then(({ cast, crew }) => {
- cast.map((el) => {
- if (!searchMovie.find(({ id }) => id === `tmdb:${el.id}`)) {
+ .personMovieCredits({ id: res.results[0].id, language })
+ .then((credits) => {
+ credits.cast.map((el) => {
+ if (!searchMovie.find((meta) => meta.id === `tmdb:${el.id}`)) {
searchMovie.push({
id: `tmdb:${el.id}`,
name: `${el.title}`,
@@ -37,9 +37,9 @@ async function getSearch(type, language, query, include_adult) {
});
}
});
- crew.map((el) => {
+ credits.crew.map((el) => {
if (el.job === "Director" || "Writer") {
- if (!searchMovie.find(({ id }) => id === `tmdb:${el.id}`)) {
+ if (!searchMovie.find((meta) => meta.id === `tmdb:${el.id}`)) {
searchMovie.push({
id: `tmdb:${el.id}`,
name: `${el.title}`,
@@ -56,13 +56,13 @@ async function getSearch(type, language, query, include_adult) {
});
const sortMetas = searchMovie.sort((a, b) => b.popularity - a.popularity);
- return Promise.resolve({ query, metas: sortMetas });
+ return Promise.resolve({query, metas: sortMetas });
} else {
- const searchTv = []
+ const searchTv = []
await moviedb
.searchTv({ query, language, include_adult })
- .then(({ results }) => {
- results.map((el) => {
+ .then((res) => {
+ res.results.map((el) => {
searchTv.push({
id: `tmdb:${el.id}`,
name: `${el.name}`,
@@ -74,14 +74,14 @@ async function getSearch(type, language, query, include_adult) {
});
})
.catch(console.error);
- await moviedb.searchPerson({ query, language }).then(async ({ results }) => {
- if (results[0]) {
+ await moviedb.searchPerson({ query, language }).then(async (res) => {
+ if (res.results[0]) {
await moviedb
- .personTvCredits({ id: results[0].id, language })
- .then(({ cast, crew }) => {
- cast.map((el) => {
+ .personTvCredits({ id: res.results[0].id, language })
+ .then((credits) => {
+ credits.cast.map((el) => {
if (el.episode_count >= 5) {
- if (!searchTv.find(({ id }) => id === `tmdb:${el.id}`)) {
+ if (!searchTv.find((meta) => meta.id === `tmdb:${el.id}`)) {
searchTv.push({
id: `tmdb:${el.id}`,
name: `${el.name}`,
@@ -93,9 +93,9 @@ async function getSearch(type, language, query, include_adult) {
}
}
});
- crew.map((el) => {
+ credits.crew.map((el) => {
if (el.job === "Director" || "Writer") {
- if (!searchTv.find(({ id }) => id === `tmdb:${el.id}`)) {
+ if (!searchTv.find((meta) => meta.id === `tmdb:${el.id}`)) {
searchTv.push({
id: `tmdb:${el.id}`,
name: `${el.name}`,
@@ -111,8 +111,8 @@ async function getSearch(type, language, query, include_adult) {
}
});
const sortMetas = searchTv.sort((a, b) => b.popularity - a.popularity);
- return Promise.resolve({ query, metas: sortMetas });
+ return Promise.resolve({query, metas: sortMetas });
}
}
-export default getSearch;
+module.exports = { getSearch };
diff --git a/lib/getTmdb.js b/lib/getTmdb.js
index 6835ec4..8a76278 100644
--- a/lib/getTmdb.js
+++ b/lib/getTmdb.js
@@ -1,21 +1,29 @@
-import 'dotenv/config';
-import { MovieDb } from 'moviedb-promise';
-const moviedb = new MovieDb(process.env.tmdb_api)
+require('dotenv').config()
+const { MovieDb } = require('moviedb-promise')
+const moviedb = new MovieDb(process.env.TMDB_API)
async function getTmdb(type, imdbId) {
if (type === "movie") {
const tmdbId = await moviedb
- .find({ id: imdbId, external_source: 'imdb_id' })
- .then(({ movie_results }) => movie_results[0] ? movie_results[0].id : null)
- .catch(err => null);
- return tmdbId;
+ .find({id: imdbId, external_source: 'imdb_id'})
+ .then((res) => {
+ return res.movie_results[0] ? res.movie_results[0].id : null;
+ })
+ .catch(err => {
+ return null
+ });
+return tmdbId;
} else {
const tmdbId = await moviedb
- .find({ id: imdbId, external_source: 'imdb_id' })
- .then(({ tv_results }) => tv_results[0] ? tv_results[0].id : null)
- .catch(err => null);
- return tmdbId;
+ .find({id: imdbId, external_source: 'imdb_id'})
+ .then((res) => {
+ return res.tv_results[0] ? res.tv_results[0].id : null;
+ })
+ .catch(err => {
+ return null
+ });
+return tmdbId;
}
}
-export default getTmdb;
+module.exports = { getTmdb };
diff --git a/lib/getTrending.js b/lib/getTrending.js
index f7bbe39..74f4b26 100644
--- a/lib/getTrending.js
+++ b/lib/getTrending.js
@@ -1,7 +1,8 @@
-import "dotenv/config"
-import { MovieDb } from "moviedb-promise";
-const moviedb = new MovieDb(process.env.tmdb_api);
-import getMeta from "./getMeta.js";
+require("dotenv").config();
+const { MovieDb } = require("moviedb-promise");
+const moviedb = new MovieDb(process.env.TMDB_API);
+const { cacheWrapMeta } = require("./getCache");
+const { getMeta } = require("./getMeta");
async function getTrending(type, id, language, genre, page, include_adult) {
const parameters = {
@@ -13,10 +14,12 @@ async function getTrending(type, id, language, genre, page, include_adult) {
};
return await moviedb
.trending(parameters)
- .then(async ({ results }) => {
+ .then(async (res) => {
const metas = await Promise.all(
- results.map(async (el) => {
- const meta = await getMeta(type, language, el.id);
+ res.results.map(async (el) => {
+ const meta = await cacheWrapMeta(`${language}:${type}:${el.id}`, async () => {
+ return await getMeta(type, language, el.id);
+ });
return meta.meta;
})
);
@@ -25,4 +28,4 @@ async function getTrending(type, id, language, genre, page, include_adult) {
.catch(console.error);
}
-export default getTrending;
+module.exports = { getTrending };
diff --git a/package-lock.json b/package-lock.json
index ad5ee10..e0baad2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,19 +1,21 @@
{
"name": "tmdb-addon",
- "version": "3.0.11",
+ "version": "3.0.10",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "tmdb-addon",
- "version": "3.0.11",
+ "version": "3.0.10",
"license": "Apache-2.0",
"dependencies": {
+ "cache-manager": "^3.6.3",
+ "cache-manager-mongodb": "^0.3.0",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"fanart.tv-api": "^2.0.1",
- "moviedb-promise": "^4.0.0",
- "url-exist": "^3.0.1"
+ "moviedb-promise": "^3.4.1",
+ "url-exists": "^1.0.3"
},
"devDependencies": {
"nodemon": "^3.0.1"
@@ -25,17 +27,6 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -48,6 +39,21 @@
"node": ">= 0.6"
}
},
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -66,19 +72,51 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w=="
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
"node_modules/axios": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
- "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
+ "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.14.8"
}
},
"node_modules/balanced-match": {
@@ -87,6 +125,14 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -96,6 +142,15 @@
"node": ">=8"
}
},
+ "node_modules/bl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -141,6 +196,14 @@
"node": ">=8"
}
},
+ "node_modules/bson": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
+ "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==",
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -149,6 +212,50 @@
"node": ">= 0.8"
}
},
+ "node_modules/cache-manager": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz",
+ "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==",
+ "dependencies": {
+ "async": "3.2.3",
+ "lodash.clonedeep": "^4.5.0",
+ "lru-cache": "6.0.0"
+ }
+ },
+ "node_modules/cache-manager-mongodb": {
+ "version": "0.3.0",
+ "resolved": "git+ssh://git@github.com/openrm/node-cache-manager-mongodb.git#7fac8e64793ca99490aaad031948a620e02f7621",
+ "license": "MIT",
+ "dependencies": {
+ "cache-manager": "^2.9.0",
+ "lodash": "^4.17.15",
+ "mongodb": "^3.6.3"
+ }
+ },
+ "node_modules/cache-manager-mongodb/node_modules/cache-manager": {
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz",
+ "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==",
+ "dependencies": {
+ "async": "1.5.2",
+ "lodash.clonedeep": "4.5.0",
+ "lru-cache": "4.0.0"
+ }
+ },
+ "node_modules/cache-manager-mongodb/node_modules/lru-cache": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz",
+ "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=",
+ "dependencies": {
+ "pseudomap": "^1.0.1",
+ "yallist": "^2.0.0"
+ }
+ },
+ "node_modules/cache-manager/node_modules/async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+ },
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -161,6 +268,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -256,12 +368,20 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
- "node_modules/data-uri-to-buffer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
- "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
"engines": {
- "node": ">= 12"
+ "node": ">=0.10"
}
},
"node_modules/debug": {
@@ -291,6 +411,14 @@
"node": ">=0.4.0"
}
},
+ "node_modules/denque": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
+ "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -324,6 +452,15 @@
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
"integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="
},
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -350,14 +487,6 @@
"node": ">= 0.6"
}
},
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -418,6 +547,19 @@
}
]
},
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
"node_modules/fanart.tv-api": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fanart.tv-api/-/fanart.tv-api-2.0.1.tgz",
@@ -443,27 +585,15 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
- "node_modules/fetch-blob": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
- "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "dependencies": {
- "node-domexception": "^1.0.0",
- "web-streams-polyfill": "^3.0.3"
- },
- "engines": {
- "node": "^12.20 || >= 14.13"
- }
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"node_modules/fill-range": {
"version": "7.0.1",
@@ -513,28 +643,25 @@
}
}
},
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dependencies": {
"asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
+ "combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/formdata-polyfill": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
- "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
- "dependencies": {
- "fetch-blob": "^3.1.2"
- },
- "engines": {
- "node": ">=12.20.0"
+ "node": ">= 0.12"
}
},
"node_modules/forwarded": {
@@ -593,6 +720,14 @@
"node": ">=4"
}
},
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -629,6 +764,27 @@
"node": ">=4"
}
},
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -694,6 +850,20 @@
"node": ">= 0.8"
}
},
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -798,16 +968,20 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-url-superb": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-6.1.0.tgz",
- "integrity": "sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
},
"node_modules/isurl": {
"version": "1.0.0",
@@ -821,39 +995,38 @@
"node": ">= 4"
}
},
- "node_modules/ky": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/ky/-/ky-0.27.0.tgz",
- "integrity": "sha512-pgaBuB6wI9DdMSOZBVh2WkcbkAdEG5AUEWuNhtThu6FLIpDbzqzC/fSMmqr/j1wwQyW3SP3KGau7EbzWNkQ/yg==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/ky?sponsor=1"
- }
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
- "node_modules/ky-universal": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.10.1.tgz",
- "integrity": "sha512-r8909k+ELKZAxhVA5c440x22hqw5XcMRwLRbgpPQk4JHy3/ddJnvzcnSo5Ww3HdKdNeS3Y8dBgcIYyVahMa46g==",
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"dependencies": {
- "abort-controller": "^3.0.0",
- "node-fetch": "^3.2.2"
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
},
"engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/ky-universal?sponsor=1"
- },
- "peerDependencies": {
- "ky": ">=0.26.0",
- "web-streams-polyfill": ">=3.0.1"
- },
- "peerDependenciesMeta": {
- "web-streams-polyfill": {
- "optional": true
- }
+ "node": ">=0.6.0"
}
},
"node_modules/lodash": {
@@ -861,6 +1034,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ },
"node_modules/lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -873,7 +1051,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -884,8 +1061,7 @@
"node_modules/lru-cache/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/media-typer": {
"version": "0.3.0",
@@ -895,6 +1071,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -958,14 +1140,51 @@
"node": "*"
}
},
- "node_modules/moviedb-promise": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/moviedb-promise/-/moviedb-promise-4.0.0.tgz",
- "integrity": "sha512-WJ5csQyV+3/ex5zxxzkLDe/D9P/lf63lB5oG/LX85hXlhZ6boawIiK0AhUNe0QxSVF/X+gsJ9OwcR9sdYocaTw==",
+ "node_modules/mongodb": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
+ "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
"dependencies": {
- "axios": "^1.4.0",
- "lodash": "^4.17.21",
- "promise-throttle": "^1.1.2"
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "optional-require": "^1.1.8",
+ "safe-buffer": "^5.1.2"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "optionalDependencies": {
+ "saslprep": "^1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws4": {
+ "optional": true
+ },
+ "bson-ext": {
+ "optional": true
+ },
+ "kerberos": {
+ "optional": true
+ },
+ "mongodb-client-encryption": {
+ "optional": true
+ },
+ "mongodb-extjson": {
+ "optional": true
+ },
+ "snappy": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/moviedb-promise": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/moviedb-promise/-/moviedb-promise-3.4.1.tgz",
+ "integrity": "sha512-TQe6ntr3Ws8w3wgEzk4Qb7/2nUNvbR7lfv9i58A19qfCad2G7esJoGpKV+xc0QCIDvPYslloM+e0KIpmJl3VCg==",
+ "dependencies": {
+ "axios": "^0.26.1",
+ "lodash": "^4.17.21"
}
},
"node_modules/ms": {
@@ -981,41 +1200,6 @@
"node": ">= 0.6"
}
},
- "node_modules/node-domexception": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "github",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "engines": {
- "node": ">=10.5.0"
- }
- },
- "node_modules/node-fetch": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
- "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
- "dependencies": {
- "data-uri-to-buffer": "^4.0.0",
- "fetch-blob": "^3.1.4",
- "formdata-polyfill": "^4.0.10"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/node-fetch"
- }
- },
"node_modules/nodemon": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
@@ -1083,6 +1267,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
@@ -1102,6 +1294,17 @@
"node": ">= 0.8"
}
},
+ "node_modules/optional-require": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
+ "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
+ "dependencies": {
+ "require-at": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
@@ -1142,6 +1345,11 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -1162,10 +1370,10 @@
"node": ">=0.10.0"
}
},
- "node_modules/promise-throttle": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/promise-throttle/-/promise-throttle-1.1.2.tgz",
- "integrity": "sha512-dij7vjyXNewuuN/gyr+TX2KRjw48mbV5FEtgyXaIoJjGYAKT0au23/voNvy9eS4UNJjx2KUdEcO5Yyfc1h7vWQ=="
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/proxy-addr": {
"version": "2.0.7",
@@ -1179,10 +1387,15 @@
"node": ">= 0.10"
}
},
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
},
"node_modules/pstree.remy": {
"version": "1.1.8",
@@ -1190,6 +1403,14 @@
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -1226,6 +1447,20 @@
"node": ">= 0.8"
}
},
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -1238,6 +1473,53 @@
"node": ">=8.10.0"
}
},
+ "node_modules/request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/request/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/require-at": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz",
+ "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -1248,6 +1530,18 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "node_modules/saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "dependencies": {
+ "sparse-bitfield": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/semver": {
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
@@ -1335,6 +1629,39 @@
"node": ">=10"
}
},
+ "node_modules/sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "optional": true,
+ "dependencies": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -1343,6 +1670,14 @@
"node": ">= 0.8"
}
},
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -1395,6 +1730,34 @@
"nodetouch": "bin/nodetouch.js"
}
},
+ "node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -1421,17 +1784,20 @@
"node": ">= 0.8"
}
},
- "node_modules/url-exist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/url-exist/-/url-exist-3.0.1.tgz",
- "integrity": "sha512-37KEE2gj60C4hTh2mGkFeqODO2KVG9TOJWpE3sOLEeLGt/p50VxemPiJ30v4m1dcw/wDEGUpYcmBV2e8jM5/FA==",
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dependencies": {
- "is-url-superb": "^6.1.0",
- "ky": "^0.27.0",
- "ky-universal": "^0.10.1"
- },
- "engines": {
- "node": ">=14.8"
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-exists": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/url-exists/-/url-exists-1.0.3.tgz",
+ "integrity": "sha512-oN3lNUMLfIR4tI9ByLtfLThGhFeYWCjWw5lfat/2PLZRA6U/v7wzKb0SbCjhZcEHGYHqi05c2JTVmeMzIAxapw==",
+ "dependencies": {
+ "request": "^2.69.0"
}
},
"node_modules/url-parse-lax": {
@@ -1453,6 +1819,11 @@
"node": ">= 4"
}
},
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -1461,6 +1832,15 @@
"node": ">= 0.4.0"
}
},
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -1469,13 +1849,23 @@
"node": ">= 0.8"
}
},
- "node_modules/web-streams-polyfill": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
- "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
- "engines": {
- "node": ">= 8"
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
}
+ },
+ "node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
}
},
"dependencies": {
@@ -1485,14 +1875,6 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -1502,6 +1884,17 @@
"negotiator": "0.6.3"
}
},
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -1517,19 +1910,45 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w=="
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
"axios": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
- "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
+ "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"requires": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.14.8"
}
},
"balanced-match": {
@@ -1538,12 +1957,29 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
+ "bl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
"body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -1582,11 +2018,63 @@
"fill-range": "^7.0.1"
}
},
+ "bson": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
+ "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg=="
+ },
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
+ "cache-manager": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-3.6.3.tgz",
+ "integrity": "sha512-dS4DnV6c6cQcVH5OxzIU1XZaACXwvVIiUPkFytnRmLOACuBGv3GQgRQ1RJGRRw4/9DF14ZK2RFlZu1TUgDniMg==",
+ "requires": {
+ "async": "3.2.3",
+ "lodash.clonedeep": "^4.5.0",
+ "lru-cache": "6.0.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+ }
+ }
+ },
+ "cache-manager-mongodb": {
+ "version": "git+ssh://git@github.com/openrm/node-cache-manager-mongodb.git#7fac8e64793ca99490aaad031948a620e02f7621",
+ "from": "cache-manager-mongodb@^0.3.0",
+ "requires": {
+ "cache-manager": "^2.9.0",
+ "lodash": "^4.17.15",
+ "mongodb": "^3.6.3"
+ },
+ "dependencies": {
+ "cache-manager": {
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.11.1.tgz",
+ "integrity": "sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow==",
+ "requires": {
+ "async": "1.5.2",
+ "lodash.clonedeep": "4.5.0",
+ "lru-cache": "4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz",
+ "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=",
+ "requires": {
+ "pseudomap": "^1.0.1",
+ "yallist": "^2.0.0"
+ }
+ }
+ }
+ },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -1596,6 +2084,11 @@
"get-intrinsic": "^1.0.2"
}
},
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -1656,10 +2149,18 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
- "data-uri-to-buffer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
- "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
},
"debug": {
"version": "2.6.9",
@@ -1682,6 +2183,11 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
+ "denque": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
+ "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ=="
+ },
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -1702,6 +2208,15 @@
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
"integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="
},
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -1722,11 +2237,6 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
},
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
"express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -1772,6 +2282,16 @@
}
}
},
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+ },
"fanart.tv-api": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fanart.tv-api/-/fanart.tv-api-2.0.1.tgz",
@@ -1796,14 +2316,15 @@
}
}
},
- "fetch-blob": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
- "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
- "requires": {
- "node-domexception": "^1.0.0",
- "web-streams-polyfill": "^3.0.3"
- }
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"fill-range": {
"version": "7.0.1",
@@ -1833,24 +2354,21 @@
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+ },
"form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
+ "combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
- "formdata-polyfill": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
- "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
- "requires": {
- "fetch-blob": "^3.1.2"
- }
- },
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -1888,6 +2406,14 @@
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ=="
},
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -1918,6 +2444,20 @@
"url-to-options": "^1.0.1"
}
},
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -1962,6 +2502,16 @@
"toidentifier": "1.0.1"
}
},
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -2036,10 +2586,20 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="
},
- "is-url-superb": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-6.1.0.tgz",
- "integrity": "sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ=="
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
},
"isurl": {
"version": "1.0.0",
@@ -2050,18 +2610,35 @@
"is-object": "^1.0.1"
}
},
- "ky": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/ky/-/ky-0.27.0.tgz",
- "integrity": "sha512-pgaBuB6wI9DdMSOZBVh2WkcbkAdEG5AUEWuNhtThu6FLIpDbzqzC/fSMmqr/j1wwQyW3SP3KGau7EbzWNkQ/yg=="
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
- "ky-universal": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.10.1.tgz",
- "integrity": "sha512-r8909k+ELKZAxhVA5c440x22hqw5XcMRwLRbgpPQk4JHy3/ddJnvzcnSo5Ww3HdKdNeS3Y8dBgcIYyVahMa46g==",
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"requires": {
- "abort-controller": "^3.0.0",
- "node-fetch": "^3.2.2"
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
}
},
"lodash": {
@@ -2069,6 +2646,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ },
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -2078,7 +2660,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
"requires": {
"yallist": "^4.0.0"
},
@@ -2086,8 +2667,7 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -2096,6 +2676,12 @@
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
+ "memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -2138,14 +2724,26 @@
"brace-expansion": "^1.1.7"
}
},
- "moviedb-promise": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/moviedb-promise/-/moviedb-promise-4.0.0.tgz",
- "integrity": "sha512-WJ5csQyV+3/ex5zxxzkLDe/D9P/lf63lB5oG/LX85hXlhZ6boawIiK0AhUNe0QxSVF/X+gsJ9OwcR9sdYocaTw==",
+ "mongodb": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
+ "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
"requires": {
- "axios": "^1.4.0",
- "lodash": "^4.17.21",
- "promise-throttle": "^1.1.2"
+ "bl": "^2.2.1",
+ "bson": "^1.1.4",
+ "denque": "^1.4.1",
+ "optional-require": "^1.1.8",
+ "safe-buffer": "^5.1.2",
+ "saslprep": "^1.0.0"
+ }
+ },
+ "moviedb-promise": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/moviedb-promise/-/moviedb-promise-3.4.1.tgz",
+ "integrity": "sha512-TQe6ntr3Ws8w3wgEzk4Qb7/2nUNvbR7lfv9i58A19qfCad2G7esJoGpKV+xc0QCIDvPYslloM+e0KIpmJl3VCg==",
+ "requires": {
+ "axios": "^0.26.1",
+ "lodash": "^4.17.21"
}
},
"ms": {
@@ -2158,21 +2756,6 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
- "node-domexception": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
- },
- "node-fetch": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
- "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
- "requires": {
- "data-uri-to-buffer": "^4.0.0",
- "fetch-blob": "^3.1.4",
- "formdata-polyfill": "^4.0.10"
- }
- },
"nodemon": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
@@ -2223,6 +2806,11 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
"object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
@@ -2236,6 +2824,14 @@
"ee-first": "1.1.1"
}
},
+ "optional-require": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
+ "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
+ "requires": {
+ "require-at": "^1.0.6"
+ }
+ },
"p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
@@ -2264,6 +2860,11 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -2275,10 +2876,10 @@
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg=="
},
- "promise-throttle": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/promise-throttle/-/promise-throttle-1.1.2.tgz",
- "integrity": "sha512-dij7vjyXNewuuN/gyr+TX2KRjw48mbV5FEtgyXaIoJjGYAKT0au23/voNvy9eS4UNJjx2KUdEcO5Yyfc1h7vWQ=="
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proxy-addr": {
"version": "2.0.7",
@@ -2289,10 +2890,15 @@
"ipaddr.js": "1.9.1"
}
},
- "proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
},
"pstree.remy": {
"version": "1.1.8",
@@ -2300,6 +2906,11 @@
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -2324,6 +2935,20 @@
"unpipe": "1.0.0"
}
},
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -2333,6 +2958,45 @@
"picomatch": "^2.2.1"
}
},
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ }
+ }
+ },
+ "require-at": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz",
+ "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g=="
+ },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -2343,6 +3007,15 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "requires": {
+ "sparse-bitfield": "^3.0.3"
+ }
+ },
"semver": {
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
@@ -2414,11 +3087,44 @@
"semver": "^7.5.3"
}
},
+ "sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
+ "optional": true,
+ "requires": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -2456,6 +3162,28 @@
"nopt": "~1.0.10"
}
},
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -2476,14 +3204,20 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
- "url-exist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/url-exist/-/url-exist-3.0.1.tgz",
- "integrity": "sha512-37KEE2gj60C4hTh2mGkFeqODO2KVG9TOJWpE3sOLEeLGt/p50VxemPiJ30v4m1dcw/wDEGUpYcmBV2e8jM5/FA==",
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"requires": {
- "is-url-superb": "^6.1.0",
- "ky": "^0.27.0",
- "ky-universal": "^0.10.1"
+ "punycode": "^2.1.0"
+ }
+ },
+ "url-exists": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/url-exists/-/url-exists-1.0.3.tgz",
+ "integrity": "sha512-oN3lNUMLfIR4tI9ByLtfLThGhFeYWCjWw5lfat/2PLZRA6U/v7wzKb0SbCjhZcEHGYHqi05c2JTVmeMzIAxapw==",
+ "requires": {
+ "request": "^2.69.0"
}
},
"url-parse-lax": {
@@ -2499,20 +3233,40 @@
"resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
"integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A=="
},
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
- "web-streams-polyfill": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
- "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q=="
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
}
}
}
diff --git a/package.json b/package.json
index 05b82cd..50f0c9d 100644
--- a/package.json
+++ b/package.json
@@ -1,15 +1,16 @@
{
"name": "tmdb-addon",
- "version": "3.0.11",
+ "version": "3.0.10",
"description": "Metadata provided by TMDB",
"main": "server.js",
- "type": "module",
"dependencies": {
+ "cache-manager": "^3.6.3",
+ "cache-manager-mongodb": "^0.3.0",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"fanart.tv-api": "^2.0.1",
- "moviedb-promise": "^4.0.0",
- "url-exist": "^3.0.1"
+ "moviedb-promise": "^3.4.1",
+ "url-exists": "^1.0.3"
},
"scripts": {
"dev": "nodemon server.js",
diff --git a/server.js b/server.js
index d3c3b55..122ac2d 100644
--- a/server.js
+++ b/server.js
@@ -1,10 +1,9 @@
// require serverless version
-import addon from './index.js';
-
+const addon = require('./index.js')
const PORT = process.env.PORT || 7000
// create local server
-addon.listen(PORT, () => {
+addon.listen(PORT, function () {
console.log(`Addon active on port ${PORT}.`);
console.log(`http://127.0.0.1:${PORT}/`);
});
\ No newline at end of file
diff --git a/utils/parseProps.js b/utils/parseProps.js
index 3df801f..3d9a6bd 100644
--- a/utils/parseProps.js
+++ b/utils/parseProps.js
@@ -1,23 +1,29 @@
-function parseCertification({results}, language) {
- return results.filter(
- ({iso_3166_1}) => iso_3166_1 == language.split("-")[1]
+function parseCertification(release_dates, language) {
+ return release_dates.results.filter(
+ (releases) => releases.iso_3166_1 == language.split("-")[1]
)[0].release_dates[0].certification;
}
-function parseCast({cast}) {
- return cast.slice(0, 4).map(({name}) => name);
+function parseCast(credits) {
+ return credits.cast.slice(0, 4).map((el) => {
+ return el.name;
+ });
}
-function parseDirector({crew}) {
- return crew
- .filter(({job}) => job === "Director")
- .map(({name}) => name);
+function parseDirector(credits) {
+ return credits.crew
+ .filter((x) => x.job === "Director")
+ .map((el) => {
+ return el.name;
+ });
}
-function parseWriter({crew}) {
- return crew
- .filter(({job}) => job === "Writer")
- .map(({name}) => name);
+function parseWriter(credits) {
+ return credits.crew
+ .filter((x) => x.job === "Writer")
+ .map((el) => {
+ return el.name;
+ });
}
function parseSlug(type, title, imdb_id) {
@@ -26,24 +32,28 @@ function parseSlug(type, title, imdb_id) {
}`;
}
-function parseTrailers({results}) {
- return results
- .filter(({site}) => site === "YouTube")
- .filter(({type}) => type === "Trailer")
- .map(({key, type}) => ({
- source: `${key}`,
- type: `${type}`
- }));
+function parseTrailers(videos) {
+ return videos.results
+ .filter((el) => el.site === "YouTube")
+ .filter((el) => el.type === "Trailer")
+ .map((el) => {
+ return {
+ source: `${el.key}`,
+ type: `${el.type}`,
+ };
+ });
}
-function parseTrailerStream({results}) {
- return results
- .filter(({site}) => site === "YouTube")
- .filter(({type}) => type === "Trailer")
- .map(({name, key}) => ({
- title: `${name}`,
- ytId: `${key}`
- }));
+function parseTrailerStream(videos) {
+ return videos.results
+ .filter((el) => el.site === "YouTube")
+ .filter((el) => el.type === "Trailer")
+ .map((el) => {
+ return {
+ title: `${el.name}`,
+ ytId: `${el.key}`,
+ };
+ });
}
function parseImdbLink(vote_average, imdb_id) {
@@ -63,43 +73,52 @@ function parseShareLink(title, imdb_id, type) {
}
function parseGenreLink(genres, type, language) {
- return genres.map(({name}) => ({
- name,
- category: "Genres",
-
- url: `stremio:///discover/${encodeURIComponent(
- process.env.HOST_NAME
- )}%2F${language}%2Fmanifest.json/${type}/tmdb.top?genre=${encodeURIComponent(
- name
- )}`
- }));
+ return genres.map((genre) => {
+ return {
+ name: genre.name,
+ category: "Genres",
+ url: `stremio:///discover/${encodeURIComponent(
+ process.env.HOST_NAME
+ )}%2F${language}%2Fmanifest.json/${type}/tmdb.top?genre=${encodeURIComponent(
+ genre.name
+ )}`,
+ };
+ });
}
function parseCreditsLink(credits) {
- const Cast = parseCast(credits).map(actor => ({
- name: actor,
- category: "Cast",
- url: `stremio:///search?search=${encodeURIComponent(actor)}`
- }));
- const Director = parseDirector(credits).map(director => ({
- name: director,
- category: "Directors",
- url: `stremio:///search?search=${encodeURIComponent(director)}`
- }));
- const Writer = parseWriter(credits).map(writer => ({
- name: writer,
- category: "Writers",
- url: `stremio:///search?search=${encodeURIComponent(writer)}`
- }));
+ const Cast = parseCast(credits).map((actor) => {
+ return {
+ name: actor,
+ category: "Cast",
+ url: `stremio:///search?search=${encodeURIComponent(actor)}`,
+ };
+ });
+ const Director = parseDirector(credits).map((director) => {
+ return {
+ name: director,
+ category: "Directors",
+ url: `stremio:///search?search=${encodeURIComponent(director)}`,
+ };
+ });
+ const Writer = parseWriter(credits).map((writer) => {
+ return {
+ name: writer,
+ category: "Writers",
+ url: `stremio:///search?search=${encodeURIComponent(writer)}`,
+ };
+ });
return new Array(...Cast, ...Director, ...Writer);
}
function parseCoutry(production_countries) {
- return production_countries.map(({name}) => name).join(", ");
+ return production_countries.map((country) => country.name).join(", ");
}
function parseGenres(genres) {
- return genres.map(({name}) => name);
+ return genres.map((el) => {
+ return el.name;
+ });
}
function parseYear(status, first_air_date, last_air_date) {
@@ -114,16 +133,16 @@ function parseYear(status, first_air_date, last_air_date) {
function parseRunTime(runtime) {
if (runtime) {
- const hours = runtime / 60;
- const rhours = Math.floor(hours);
- const minutes = (hours - rhours) * 60;
- const rminutes = Math.round(minutes);
- return rhours > 0 ? `${rhours}h${rminutes}min` : `${rminutes}min`;
+ var hours = runtime / 60;
+ var rhours = Math.floor(hours);
+ var minutes = (hours - rhours) * 60;
+ var rminutes = Math.round(minutes);
+ return rhours > 0 ? rhours + "h" + rminutes + "min" : rminutes + "min";
}
}
function parseCreatedBy(created_by) {
- return created_by.map(({name}) => name);
+ return created_by.map((el) => el.name);
}
function parseConfig(catalogChoices) {
@@ -149,7 +168,19 @@ function getRpdbPoster(type, id, language, rpdbkey) {
}
}
-export default {
+async function checkIfExists(rpdbImage) {
+ return new Promise((resolve) => {
+ urlExists(rpdbImage, (err, exists) => {
+ if (exists) {
+ resolve(true)
+ } else {
+ resolve(false);
+ }
+ })
+ });
+}
+
+module.exports = {
parseCertification,
parseCast,
parseDirector,
@@ -168,4 +199,5 @@ export default {
parseCreatedBy,
parseConfig,
getRpdbPoster,
+ checkIfExists
};