/
index.js
105 lines (94 loc) · 3.01 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
const express = require('express');
const config = require('./config');
const cors = require('cors');
const { getSubs, downloadSubZip } = require('./wizdom');
const landing = require('./landingTemplate');
const unzipper = require('unzipper');
const morganBody = require('morgan-body');
const logger = require('./logger');
const requestId = require('express-request-id');
const addon = express();
addon.use(cors());
addon.use(requestId({ setHeader: false }));
// Setting up the logger
morganBody(addon, {
prettify: false,
timezone: 'Israel',
logRequestBody: false,
stream: config.remoteLogging ? logger : null,
noColors: true,
includeNewLine: false,
logIP: true,
logRequestId: true,
skip: (req) => {
return !req.path.includes('subtitles');
},
});
/**
* The addon manifest: https://github.com/Stremio/stremio-addon-sdk/blob/master/docs/api/responses/manifest.md
*/
const manifest = {
id: 'xyz.stremio.wizdom',
contactEmail: 'maor@magori.online',
version: process.env.npm_package_version,
catalogs: [],
resources: ['subtitles'],
types: ['movie', 'series'],
name: 'Wizdom Subtitles',
description:
'An unofficial Stremio addon for Hebrew subtitles from wizdom.xyz. Developed by Maor Development',
logo: 'https://i.ibb.co/KLYK0TH/wizdon256.png',
};
/**
* Adds simple headers to a response.
* @param {import("superagent").Response} res The request's response object
* @param {*} data The data to respond with.
*/
const respondWithHeaders = function (res, data) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', '*');
res.setHeader('Content-Type', 'application/json');
res.send(data);
};
//manifest request.
addon.get('/manifest.json', function (req, res) {
respondWithHeaders(res, manifest);
});
//Landing page request.
addon.get('/', function (req, res) {
res.set('Content-Type', 'text/html');
res.send(landing(manifest));
});
//Addon's readme request
addon.get('/README.md', (req, res) => {
res.sendFile(`${__dirname}/README.md`);
});
//Subtitles request.
addon.get('/subtitles/:type/:imdbId/:query?.json', async (req, res) => {
try {
let filename;
if (req.params.query) filename = req.params.query.split('=').pop();
const subtitles = await getSubs(req.params.imdbId, filename);
respondWithHeaders(res, { subtitles: subtitles });
} catch (err) {
console.error('get subs error: ', err);
}
});
/**
* unzips Wizdom zip files and send the srt file in it.
*/
addon.get('/srt/:id.srt', (req, res) => {
try {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', '*');
res.setHeader('Content-Type', 'application/octet-stream; charset=utf-8');
downloadSubZip(req.params.id).pipe(unzipper.ParseOne()).pipe(res);
} catch (err) {
console.error('error occurred while sending unzipped srt file: ', err);
}
});
//Starting the addon
addon.listen(config.port, function () {
console.log(config);
console.log(`Add-on Repository URL: ${config.local}/manifest.json`);
});