NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Access token debug
// @namespace http://tampermonkey.net/
// @version 0.1
// @author kazatca
// @require https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.18.2/babel.js
// @copyright 2020, kazatca (https://openuserjs.org/users/kazatca)
// @license MIT
// @match https://unitedtraders.com/*
// ==/UserScript==
var inline_src = (<><![CDATA[
const widgetId = 'access-token-debug-widget';
const log = [];
function getAccessToken() {
const token = document.cookie
.split(';')
.find(c => c.trim().match(/^access_token/))
if(token) return token.split('=').pop();
}
function getStats(accessToken, time) {
const [, payload] = accessToken.split('.');
const parsed = atob(payload);
const exp = JSON.parse(parsed).exp * 1000;
return [
'access_token: ...' + accessToken.substr(accessToken.length - 10),
'exp: ' + new Date(exp).toLocaleString(),
formatTime((exp - time) / 1000)
]
}
function padLeft(str, count, fill) {
str = '' + str;
return Array(Math.max(0, count - str.length)).fill(fill) + str;
}
function formatTime(value) {
const sign = value < 0 ? '-' : '';
value = Math.abs(value);
const m = Math.floor(value / 60);
const s = Math.floor(value % 60);
return sign + padLeft(m, 2, '0') + ':' + padLeft(s, 2, '0');
}
function get(name) {
return document.querySelector('#' + name);
}
function addWidget() {
let widget = get(widgetId);
if (widget) {
return widget;
}
widget = document.createElement('pre');
widget.style.position = 'fixed';
widget.style.bottom = '10px';
widget.style.left = '10px';
widget.style.color = 'red';
widget.style.zIndex = '100';
document.body.appendChild(widget);
return widget;
}
const widget = addWidget();
function getContent() {
const accessToken = getAccessToken();
if(!accessToken) {
return 'not authorized';
}
if(!log.length || log[log.length - 1].accessToken !== accessToken) {
if(log.length > 0) {
log[log.length - 1].time = Date.now();
}
log.push({accessToken});
}
return log.map(({accessToken, time}, i) => {
return getStats(accessToken, time || Date.now()).join('\n');
}).join('\n\n');
}
function draw() {
if (!widget) {
return;
}
widget.innerHTML = getContent();
}
setInterval(draw, 500);
]]></>).toString();
var c = Babel.transform(inline_src, { presets: [ "es2015", "es2016" ] });
eval(c.code);