Skip to content

Instantly share code, notes, and snippets.

@Abhi1code
Created August 29, 2020 09:38
Show Gist options
  • Save Abhi1code/837bf861f74a60f1c4d16ab543822c04 to your computer and use it in GitHub Desktop.
Save Abhi1code/837bf861f74a60f1c4d16ab543822c04 to your computer and use it in GitHub Desktop.
"use strict";
var __importDefault = (this && this.__importDefault) || function(mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const destreamer_1 = require("./destreamer");
const Logger_1 = require("./Logger");
const PuppeteerHelper_1 = require("./PuppeteerHelper");
const fs_1 = __importDefault(require("fs"));
const jwt_decode_1 = __importDefault(require("jwt-decode"));
const puppeteer_1 = __importDefault(require("puppeteer"));
class TokenCache {
constructor() {
this.tokenCacheFile = '.token_cache';
}
Read() {
if (!fs_1.default.existsSync(this.tokenCacheFile)) {
Logger_1.logger.warn(`${this.tokenCacheFile} not found. \n`);
return null;
}
let session = JSON.parse(fs_1.default.readFileSync(this.tokenCacheFile, 'utf8'));
const decodedJwt = jwt_decode_1.default(session.AccessToken);
let now = Math.floor(Date.now() / 1000);
let exp = decodedJwt['exp'];
let timeLeft = exp - now;
if (timeLeft < 120) {
Logger_1.logger.warn('Access token has expired! \n');
return null;
}
Logger_1.logger.info(`Access token still good for ${Math.floor(timeLeft / 60)} minutes.\n`.green);
return session;
}
Write(session) {
let s = JSON.stringify(session, null, 4);
fs_1.default.writeFile('.token_cache', s, (err) => {
if (err) {
return Logger_1.logger.error(err);
}
Logger_1.logger.info('Fresh access token dropped into .token_cachen \n'.green);
});
}
}
exports.TokenCache = TokenCache;
async function refreshSession(url) {
var _a;
const videoId = (_a = url.split('/').pop()) !== null && _a !== void 0 ? _a : process.exit(5 /* INVALID_VIDEO_GUID */ );
const browser = await puppeteer_1.default.launch({
executablePath: PuppeteerHelper_1.getPuppeteerChromiumPath(),
headless: false,
userDataDir: destreamer_1.chromeCacheFolder,
args: [
'--disable-dev-shm-usage',
'--fast-start',
'--no-sandbox'
]
});
const page = (await browser.pages())[0];
await page.goto(url, { waitUntil: 'load' });
await browser.waitForTarget((target) => target.url().includes(videoId), { timeout: 30000 });
let session = null;
let tries = 1;
while (!session) {
try {
let sessionInfo;
session = await page.evaluate(() => {
return {
AccessToken: sessionInfo.AccessToken,
ApiGatewayUri: sessionInfo.ApiGatewayUri,
ApiGatewayVersion: sessionInfo.ApiGatewayVersion
};
});
} catch (error) {
if (tries > 5) {
process.exit(6 /* NO_SESSION_INFO */ );
}
session = null;
tries++;
await page.waitFor(3000);
}
}
browser.close();
return session;
}
exports.refreshSession = refreshSession;
//# sourceMappingURL=TokenCache.js.map
async function txtOperation(threads) {
if (fs_1.default.existsSync('videos/tmp/file.txt')) {
Logger_1.logger.info('Txt file already exists \n');
fs_1.default.writeFileSync('videos/tmp/file.txt', '', (err) => {
if (err) {
Logger_1.logger.error(err);
return false;
}
Logger_1.logger.info('Txt file cleared \n');
});
}
for (let i = 0; i < threads; i++) {
fs_1.default.appendFileSync('videos/tmp/file.txt', 'file ' + i + '.mkv \n', function(err) {
if (err) {
Logger_1.logger.error(err);
return false;
}
});
}
Logger_1.logger.info('Txt file saved \n');
return true;
}
exports.txtOperation = txtOperation;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment