From cc195409ed2960a3be2e34b80a742e4ab76ecd08 Mon Sep 17 00:00:00 2001 From: snobu Date: Mon, 30 Mar 2020 16:00:05 +0300 Subject: [PATCH] Early work for token cache implementation --- .gitignore | 1 + TokenCache.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ destreamer.ts | 4 +++- package-lock.json | 11 +++++++++++ package.json | 2 ++ 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 TokenCache.ts diff --git a/.gitignore b/.gitignore index 135af8f..68e7d3e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.token_cache *.txt *.log *.js diff --git a/TokenCache.ts b/TokenCache.ts new file mode 100644 index 0000000..cebaac0 --- /dev/null +++ b/TokenCache.ts @@ -0,0 +1,42 @@ +import * as fs from 'fs'; +const jwtDecode = require('jwt-decode'); + +export class TokenCache { + + public Read(): string | null { + let token = null; + try { + token = fs.readFileSync(".token_cache", "utf8"); + } + catch (e) { + console.error(e); + + return null; + } + + interface Jwt { + [key: string]: any + } + + const decodedJwt: Jwt = jwtDecode(token); + + let now = Math.floor(Date.now() / 1000); + let exp = decodedJwt["exp"]; + let timeLeft = exp - now; + + if (timeLeft < 120) { + return null; + } + + return token; + } + + public Write(token: string): void { + fs.writeFile(".token_cache", token, (err: any) => { + if (err) { + return console.error(err); + } + console.log("Fresh access token dropped into .token_cache"); + }); + } +} \ No newline at end of file diff --git a/destreamer.ts b/destreamer.ts index e2fb6e0..80a091b 100644 --- a/destreamer.ts +++ b/destreamer.ts @@ -1,9 +1,11 @@ +import { BrowserTests } from './BrowserTests'; +import { TokenCache } from './TokenCache'; + import { execSync } from 'child_process'; import puppeteer from 'puppeteer'; import { terminal as term } from 'terminal-kit'; import fs from 'fs'; import path from 'path'; -import { BrowserTests } from './BrowserTests'; import yargs from 'yargs'; import sanitize from 'sanitize-filename'; import axios from 'axios'; diff --git a/package-lock.json b/package-lock.json index 7001d81..755c012 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,6 +60,12 @@ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", "dev": true }, + "@types/jwt-decode": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/jwt-decode/-/jwt-decode-2.2.1.tgz", + "integrity": "sha512-aWw2YTtAdT7CskFyxEX2K21/zSDStuf/ikI3yBqmwpwJF0pS+/IX5DWv+1UFffZIbruP6cnT9/LAJV1gFwAT1A==", + "dev": true + }, "@types/mime-types": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", @@ -1036,6 +1042,11 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" + }, "lazyness": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/lazyness/-/lazyness-1.1.1.tgz", diff --git a/package.json b/package.json index 6f8e068..de73556 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "author": "snobu", "license": "MIT", "devDependencies": { + "@types/jwt-decode": "^2.2.1", "@types/puppeteer": "^1.20.0", "@types/terminal-kit": "^1.28.1", "@types/yargs": "^15.0.3", @@ -26,6 +27,7 @@ }, "dependencies": { "axios": "^0.19.2", + "jwt-decode": "^2.2.0", "puppeteer": "^2.1.1", "sanitize-filename": "^1.6.3", "terminal-kit": "^1.35.2",