diff --git a/addon/lib/landingTemplate.js b/addon/lib/landingTemplate.js
index 66b0742..8006539 100644
--- a/addon/lib/landingTemplate.js
+++ b/addon/lib/landingTemplate.js
@@ -201,6 +201,7 @@ function landingTemplate(manifest, config = {}) {
const premiumizeApiKey = config[MochOptions.premiumize.key] || '';
const allDebridApiKey = config[MochOptions.alldebrid.key] || '';
const debridLinkApiKey = config[MochOptions.debridlink.key] || '';
+ const offcloudApiKey = config[MochOptions.offcloud.key] || '';
const putioKey = config[MochOptions.putio.key] || '';
const putioClientId = putioKey.replace(/@.*/, '');
const putioToken = putioKey.replace(/.*@/, '');
@@ -322,6 +323,11 @@ function landingTemplate(manifest, config = {}) {
+
@@ -364,6 +370,7 @@ function landingTemplate(manifest, config = {}) {
$('#iPremiumize').val("${premiumizeApiKey}");
$('#iAllDebrid').val("${allDebridApiKey}");
$('#iDebridLink').val("${debridLinkApiKey}");
+ $('#iOffcloud').val("${offcloudApiKey}");
$('#iPutioClientId').val("${putioClientId}");
$('#iPutioToken').val("${putioToken}");
$('#iSort').val("${sort}");
@@ -389,6 +396,7 @@ function landingTemplate(manifest, config = {}) {
$('#dPremiumize').toggle(provider === '${MochOptions.premiumize.key}');
$('#dAllDebrid').toggle(provider === '${MochOptions.alldebrid.key}');
$('#dDebridLink').toggle(provider === '${MochOptions.debridlink.key}');
+ $('#dOffcloud').toggle(provider === '${MochOptions.offcloud.key}');
$('#dPutio').toggle(provider === '${MochOptions.putio.key}');
}
@@ -404,6 +412,7 @@ function landingTemplate(manifest, config = {}) {
const allDebridValue = $('#iAllDebrid').val() || '';
const debridLinkValue = $('#iDebridLink').val() || ''
const premiumizeValue = $('#iPremiumize').val() || '';
+ const offcloudValue = $('#iOffcloud').val() || ''
const putioClientIdValue = $('#iPutioClientId').val() || '';
const putioTokenValue = $('#iPutioToken').val() || '';
@@ -419,6 +428,7 @@ function landingTemplate(manifest, config = {}) {
const premiumize = premiumizeValue.length && premiumizeValue.trim();
const allDebrid = allDebridValue.length && allDebridValue.trim();
const debridLink = debridLinkValue.length && debridLinkValue.trim();
+ const offcloud = offcloudValue.length && offcloudValue.trim();
const putio = putioClientIdValue.length && putioTokenValue.length && putioClientIdValue.trim() + '@' + putioTokenValue.trim();
const preConfigurations = {
@@ -435,6 +445,7 @@ function landingTemplate(manifest, config = {}) {
['${MochOptions.premiumize.key}', premiumize],
['${MochOptions.alldebrid.key}', allDebrid],
['${MochOptions.debridlink.key}', debridLink],
+ ['${MochOptions.offcloud.key}', offcloud],
['${MochOptions.putio.key}', putio]
].filter(([_, value]) => value.length).map(([key, value]) => key + '=' + value).join('|');
configurationValue = Object.entries(preConfigurations)
diff --git a/addon/moch/moch.js b/addon/moch/moch.js
index d843127..fd77b72 100644
--- a/addon/moch/moch.js
+++ b/addon/moch/moch.js
@@ -4,6 +4,7 @@ const realdebrid = require('./realdebrid');
const premiumize = require('./premiumize');
const alldebrid = require('./alldebrid');
const debridlink = require('./debridlink');
+const offcloud = require('./offcloud');
const putio = require('./putio');
const StaticResponse = require('./static');
const { cacheWrapResolvedUrl } = require('../lib/cache');
@@ -43,6 +44,13 @@ const MOCHS = {
shortName: 'DL',
catalog: true
},
+ offcloud: {
+ key: 'offcloud',
+ instance: offcloud,
+ name: 'Offcloud',
+ shortName: 'OC',
+ catalog: true
+ },
putio: {
key: 'putio',
instance: putio,
diff --git a/addon/moch/offcloud.js b/addon/moch/offcloud.js
new file mode 100644
index 0000000..a8b5247
--- /dev/null
+++ b/addon/moch/offcloud.js
@@ -0,0 +1,157 @@
+const OffcloudClient = require('offcloud-api');
+const { Type } = require('../lib/types');
+const { isVideo } = require('../lib/extension');
+const StaticResponse = require('./static');
+const { getMagnetLink } = require('../lib/magnetHelper');
+const { chunkArray, BadTokenError } = require('./mochHelper');
+
+const KEY = 'offcloud';
+
+async function getCachedStreams(streams, apiKey) {
+ const options = await getDefaultOptions();
+ const OC = new OffcloudClient(apiKey, options);
+ const hashBatches = chunkArray(streams.map(stream => stream.infoHash), 100);
+ const available = await Promise.all(hashBatches.map(hashes => OC.instant.cache(hashes)))
+ .then(results => results.map(result => result.cachedItems))
+ .then(results => results.reduce((all, result) => all.concat(result), []))
+ .catch(error => {
+ if (error === 'badToken') {
+ return Promise.reject(BadTokenError);
+ }
+ console.warn('Failed Offcloud cached torrent availability request:', error);
+ return undefined;
+ });
+ return available && streams
+ .reduce((mochStreams, stream) => {
+ const isCached = available.includes(stream.infoHash);
+ const streamTitleParts = stream.title.replace(/\n👤.*/s, '').split('\n');
+ const fileName = streamTitleParts[streamTitleParts.length - 1];
+ const fileIndex = streamTitleParts.length === 2 ? stream.fileIdx : null;
+ const encodedFileName = encodeURIComponent(fileName);
+ mochStreams[stream.infoHash] = {
+ url: `${apiKey}/${stream.infoHash}/${encodedFileName}/${fileIndex}`,
+ cached: isCached
+ };
+ return mochStreams;
+ }, {})
+}
+
+async function getCatalog(apiKey, offset = 0) {
+ if (offset > 0) {
+ return [];
+ }
+ const options = await getDefaultOptions();
+ const OC = new OffcloudClient(apiKey, options);
+ return OC.cloud.history()
+ .then(torrents => (torrents || [])
+ .filter(torrent => torrent && statusReady(torrent))
+ .map(torrent => ({
+ id: `${KEY}:${torrent.requestId}`,
+ type: Type.OTHER,
+ name: torrent.fileName
+ })));
+}
+
+async function getItemMeta(itemId, apiKey, ip) {
+ const options = await getDefaultOptions(ip);
+ const OC = new OffcloudClient(apiKey, options);
+ const torrents = await OC.cloud.history();
+ const torrent = torrents.find(torrent => torrent.requestId === itemId)
+ const createDate = torrent ? new Date(torrent.createdOn) : new Date();
+ return OC.cloud.explore(itemId)
+ .then(files => ({
+ id: `${KEY}:${itemId}`,
+ type: Type.OTHER,
+ name: torrent.name,
+ videos: files
+ .filter(file => isVideo(file))
+ .map((file, index) => ({
+ id: `${KEY}:${itemId}:${index}`,
+ title: file.split('/').pop(),
+ released: new Date(createDate.getTime() - index).toISOString(),
+ streams: [{ url: file }]
+ }))
+ }))
+}
+
+async function resolve({ ip, apiKey, infoHash, cachedEntryInfo, fileIndex }) {
+ console.log(`Unrestricting Offcloud ${infoHash} [${fileIndex}]`);
+ const options = await getDefaultOptions(ip);
+ const OC = new OffcloudClient(apiKey, options);
+
+ return _resolve(OC, infoHash, cachedEntryInfo, fileIndex)
+ .catch(error => {
+ if (errorExpiredSubscriptionError(error)) {
+ console.log(`Access denied to Offcloud ${infoHash} [${fileIndex}]`);
+ return StaticResponse.FAILED_ACCESS;
+ }
+ return Promise.reject(`Failed Offcloud adding torrent ${JSON.stringify(error)}`);
+ });
+}
+
+async function _resolve(OC, infoHash, cachedEntryInfo, fileIndex) {
+ const torrent = await _createOrFindTorrent(OC, infoHash);
+ if (torrent && statusReady(torrent)) {
+ return _unrestrictLink(OC, infoHash, torrent, cachedEntryInfo, fileIndex);
+ } else if (torrent && statusDownloading(torrent)) {
+ console.log(`Downloading to Offcloud ${infoHash} [${fileIndex}]...`);
+ return StaticResponse.DOWNLOADING;
+ }
+
+ return Promise.reject(`Failed Offcloud adding torrent ${JSON.stringify(torrent)}`);
+}
+
+async function _createOrFindTorrent(OC, infoHash) {
+ return _findTorrent(OC, infoHash)
+ .catch(() => _createTorrent(OC, infoHash));
+}
+
+async function _findTorrent(OC, infoHash) {
+ const torrents = await OC.cloud.history();
+ const foundTorrents = torrents.filter(torrent => torrent.originalLink.toLowerCase().includes(infoHash));
+ const nonFailedTorrent = foundTorrents.find(torrent => !statusError(torrent));
+ const foundTorrent = nonFailedTorrent || foundTorrents[0];
+ return foundTorrent || Promise.reject('No recent torrent found');
+}
+
+async function _createTorrent(OC, infoHash) {
+ const magnetLink = await getMagnetLink(infoHash);
+ const response = await OC.cloud.download(magnetLink);
+ return response
+}
+
+async function _unrestrictLink(OC, infoHash, torrent, cachedEntryInfo, fileIndex) {
+ const targetFileName = decodeURIComponent(cachedEntryInfo);
+ const files = await OC.cloud.explore(torrent.requestId)
+ const targetFile = Number.isInteger(fileIndex)
+ ? files.find(file => file.includes(targetFileName))
+ : files.find(file => isVideo(file));
+
+ if (!targetFile) {
+ return Promise.reject(`No Offcloud links found for index ${fileIndex} in: ${JSON.stringify(torrent)}`);
+ }
+ console.log(`Unrestricted Offcloud ${infoHash} [${fileIndex}] to ${targetFile}`);
+ return targetFile;
+}
+
+async function getDefaultOptions(ip) {
+ return { ip, timeout: 30000 };
+}
+
+function statusDownloading(torrent) {
+ return torrent.status === 'created'
+}
+
+function statusError(torrent) {
+ return torrent.status === 'error'
+}
+
+function statusReady(torrent) {
+ return torrent.status === 'downloaded';
+}
+
+function errorExpiredSubscriptionError(error) {
+ return error['not_available'] != null;
+}
+
+module.exports = { getCachedStreams, resolve, getCatalog, getItemMeta };
\ No newline at end of file
diff --git a/addon/package-lock.json b/addon/package-lock.json
index 7d0afda..6bfd086 100644
--- a/addon/package-lock.json
+++ b/addon/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.12",
"license": "MIT",
"dependencies": {
- "@putdotio/api-client": "^8.16.0",
+ "@putdotio/api-client": "^8.32.0",
"all-debrid-api": "^1.1.0",
"axios": "^0.21.4",
"bottleneck": "^2.19.5",
@@ -20,7 +20,8 @@
"https-proxy-agent": "^5.0.0",
"magnet-uri": "^6.2.0",
"named-queue": "^2.2.1",
- "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#eb390fcfc257950e65ec1b0812bd331765a053c9",
+ "offcloud-api": "^1.0.0",
+ "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#e94682462d748a9ecd256a37fab98a20f0306255",
"pg": "^8.7.1",
"pg-hstore": "^2.3.4",
"premiumize-api": "^1.0.3",
@@ -59,49 +60,22 @@
}
},
"node_modules/@putdotio/api-client": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.16.0.tgz",
- "integrity": "sha512-9a00sd5aArb5s1R8MBsHULP3gcRsD9ivokRUCtS3oBf8M53u9XUAx/D79sehhiWbMR20DYxwUFfSoEvM/daq3Q==",
+ "version": "8.32.0",
+ "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.32.0.tgz",
+ "integrity": "sha512-eo4KiXIvDKpU76VK1pQitIJ6neDd81HUCoUGcH+lAtcfN+amQVp8e9cHfYeEvYMj16sr/8wONqG1GayJP2Fr4g==",
"dependencies": {
- "axios": "^0.19.2",
+ "axios": "^0.21.1",
"event-emitter": "^0.3.5",
"form-data": "^3.0.0",
- "js-base64": "^2.6.2",
- "qs": "^6.9.4",
- "urijs": "^1.19.5"
+ "js-base64": "2.6.3",
+ "qs": "^6.10.3",
+ "urijs": "^1.19.7",
+ "uuid": "^8.3.2"
},
"engines": {
"node": ">=10"
}
},
- "node_modules/@putdotio/api-client/node_modules/axios": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
- "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
- "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410",
- "dependencies": {
- "follow-redirects": "1.5.10"
- }
- },
- "node_modules/@putdotio/api-client/node_modules/debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@putdotio/api-client/node_modules/follow-redirects": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
- "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
- "dependencies": {
- "debug": "=3.1.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/@putdotio/api-client/node_modules/form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
@@ -116,9 +90,9 @@
}
},
"node_modules/@putdotio/api-client/node_modules/qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
"dependencies": {
"side-channel": "^1.0.4"
},
@@ -129,6 +103,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/@putdotio/api-client/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
@@ -1705,9 +1687,9 @@
}
},
"node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
@@ -1957,9 +1939,9 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"node_modules/js-base64": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
- "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.3.tgz",
+ "integrity": "sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg=="
},
"node_modules/js-tokens": {
"version": "4.0.0",
@@ -2304,13 +2286,21 @@
}
},
"node_modules/object-inspect": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
- "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/offcloud-api": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/offcloud-api/-/offcloud-api-1.0.0.tgz",
+ "integrity": "sha512-cJNoQSl2CJHKrXHRV/+6FMFqToZs/ungdYGNQQOdSuI1FKY7Y5bEOsqlL8BuAxRMd91wKzA4xBmjvrHq5ZllEg==",
+ "dependencies": {
+ "request": "^2.83.0"
+ }
+ },
"node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -2408,8 +2398,8 @@
},
"node_modules/parse-torrent-title": {
"version": "1.3.0",
- "resolved": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#eb390fcfc257950e65ec1b0812bd331765a053c9",
- "integrity": "sha512-flPYfe/dOYzmay2ZP613A1t9SzoIJoZuqvo+/ijg9aTEjxvWbg5sbEZtsHm8qwf7KXfXJ4SjR4hIzLQ2cu/AGA==",
+ "resolved": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#e94682462d748a9ecd256a37fab98a20f0306255",
+ "integrity": "sha512-Kzv+mQGBc2KMS9fvXiGAmM0ztin06TJrfTvJL7rH5soFdszEMJKPCs0RmmQeYNwEZ/yprzE8RCsB2kGyNRd5Fg==",
"license": "MIT",
"dependencies": {
"moment": "^2.24.0"
@@ -3599,42 +3589,19 @@
}
},
"@putdotio/api-client": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.16.0.tgz",
- "integrity": "sha512-9a00sd5aArb5s1R8MBsHULP3gcRsD9ivokRUCtS3oBf8M53u9XUAx/D79sehhiWbMR20DYxwUFfSoEvM/daq3Q==",
+ "version": "8.32.0",
+ "resolved": "https://registry.npmjs.org/@putdotio/api-client/-/api-client-8.32.0.tgz",
+ "integrity": "sha512-eo4KiXIvDKpU76VK1pQitIJ6neDd81HUCoUGcH+lAtcfN+amQVp8e9cHfYeEvYMj16sr/8wONqG1GayJP2Fr4g==",
"requires": {
- "axios": "^0.19.2",
+ "axios": "^0.21.1",
"event-emitter": "^0.3.5",
"form-data": "^3.0.0",
- "js-base64": "^2.6.2",
- "qs": "^6.9.4",
- "urijs": "^1.19.5"
+ "js-base64": "2.6.3",
+ "qs": "^6.10.3",
+ "urijs": "^1.19.7",
+ "uuid": "^8.3.2"
},
"dependencies": {
- "axios": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
- "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
- "requires": {
- "follow-redirects": "1.5.10"
- }
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "follow-redirects": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
- "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
- "requires": {
- "debug": "=3.1.0"
- }
- },
"form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
@@ -3646,12 +3613,17 @@
}
},
"qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
"requires": {
"side-channel": "^1.0.4"
}
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
@@ -4916,9 +4888,9 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
"version": "1.7.2",
@@ -5118,9 +5090,9 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"js-base64": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
- "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.3.tgz",
+ "integrity": "sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg=="
},
"js-tokens": {
"version": "4.0.0",
@@ -5360,9 +5332,17 @@
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-inspect": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
- "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw=="
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
+ },
+ "offcloud-api": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/offcloud-api/-/offcloud-api-1.0.0.tgz",
+ "integrity": "sha512-cJNoQSl2CJHKrXHRV/+6FMFqToZs/ungdYGNQQOdSuI1FKY7Y5bEOsqlL8BuAxRMd91wKzA4xBmjvrHq5ZllEg==",
+ "requires": {
+ "request": "^2.83.0"
+ }
},
"on-finished": {
"version": "2.3.0",
@@ -5439,9 +5419,9 @@
}
},
"parse-torrent-title": {
- "version": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#eb390fcfc257950e65ec1b0812bd331765a053c9",
- "integrity": "sha512-flPYfe/dOYzmay2ZP613A1t9SzoIJoZuqvo+/ijg9aTEjxvWbg5sbEZtsHm8qwf7KXfXJ4SjR4hIzLQ2cu/AGA==",
- "from": "parse-torrent-title@git://github.com/TheBeastLT/parse-torrent-title.git#eb390fcfc257950e65ec1b0812bd331765a053c9",
+ "version": "git+ssh://git@github.com/TheBeastLT/parse-torrent-title.git#e94682462d748a9ecd256a37fab98a20f0306255",
+ "integrity": "sha512-Kzv+mQGBc2KMS9fvXiGAmM0ztin06TJrfTvJL7rH5soFdszEMJKPCs0RmmQeYNwEZ/yprzE8RCsB2kGyNRd5Fg==",
+ "from": "parse-torrent-title@git://github.com/TheBeastLT/parse-torrent-title.git#e94682462d748a9ecd256a37fab98a20f0306255",
"requires": {
"moment": "^2.24.0"
}
diff --git a/addon/package.json b/addon/package.json
index 0caf2cd..a67d18a 100644
--- a/addon/package.json
+++ b/addon/package.json
@@ -8,7 +8,7 @@
"author": "TheBeastLT
",
"license": "MIT",
"dependencies": {
- "@putdotio/api-client": "^8.16.0",
+ "@putdotio/api-client": "^8.32.0",
"all-debrid-api": "^1.1.0",
"axios": "^0.21.4",
"bottleneck": "^2.19.5",
@@ -19,7 +19,8 @@
"https-proxy-agent": "^5.0.0",
"magnet-uri": "^6.2.0",
"named-queue": "^2.2.1",
- "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#eb390fcfc257950e65ec1b0812bd331765a053c9",
+ "offcloud-api": "^1.0.0",
+ "parse-torrent-title": "git://github.com/TheBeastLT/parse-torrent-title.git#e94682462d748a9ecd256a37fab98a20f0306255",
"pg": "^8.7.1",
"pg-hstore": "^2.3.4",
"premiumize-api": "^1.0.3",