122 lines
3.4 KiB
JavaScript
122 lines
3.4 KiB
JavaScript
/**
|
|
* Last update: 2016/06/26
|
|
* https://translate.google.com/translate/releases/twsfe_w_20160620_RC00/r/js/desktop_module_main.js
|
|
*
|
|
* Everything between 'BEGIN' and 'END' was copied from the url above.
|
|
*/
|
|
|
|
var got = require('got');
|
|
var Configstore = require('configstore');
|
|
|
|
/* eslint-disable */
|
|
// BEGIN
|
|
|
|
function sM(a) {
|
|
var b;
|
|
if (null !== yr)
|
|
b = yr;
|
|
else {
|
|
b = wr(String.fromCharCode(84));
|
|
var c = wr(String.fromCharCode(75));
|
|
b = [b(), b()];
|
|
b[1] = c();
|
|
b = (yr = window[b.join(c())] || "") || ""
|
|
}
|
|
var d = wr(String.fromCharCode(116))
|
|
, c = wr(String.fromCharCode(107))
|
|
, d = [d(), d()];
|
|
d[1] = c();
|
|
c = "&" + d.join("") + "=";
|
|
d = b.split(".");
|
|
b = Number(d[0]) || 0;
|
|
for (var e = [], f = 0, g = 0; g < a.length; g++) {
|
|
var l = a.charCodeAt(g);
|
|
128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
|
|
e[f++] = l >> 18 | 240,
|
|
e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
|
|
e[f++] = l >> 6 & 63 | 128),
|
|
e[f++] = l & 63 | 128)
|
|
}
|
|
a = b;
|
|
for (f = 0; f < e.length; f++)
|
|
a += e[f],
|
|
a = xr(a, "+-a^+6");
|
|
a = xr(a, "+-3^+b+-f");
|
|
a ^= Number(d[1]) || 0;
|
|
0 > a && (a = (a & 2147483647) + 2147483648);
|
|
a %= 1E6;
|
|
return c + (a.toString() + "." + (a ^ b))
|
|
}
|
|
|
|
var yr = null;
|
|
var wr = function(a) {
|
|
return function() {
|
|
return a
|
|
}
|
|
}
|
|
, xr = function(a, b) {
|
|
for (var c = 0; c < b.length - 2; c += 3) {
|
|
var d = b.charAt(c + 2)
|
|
, d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d)
|
|
, d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
|
|
a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d
|
|
}
|
|
return a
|
|
};
|
|
|
|
// END
|
|
/* eslint-enable */
|
|
|
|
var config = new Configstore('google-translate-api');
|
|
|
|
var window = {
|
|
TKK: config.get('TKK') || '0'
|
|
};
|
|
|
|
function updateTKK() {
|
|
return new Promise(function (resolve, reject) {
|
|
var now = Math.floor(Date.now() / 3600000);
|
|
|
|
if (Number(window.TKK.split('.')[0]) === now) {
|
|
resolve();
|
|
} else {
|
|
got('https://translate.google.com').then(function (res) {
|
|
var code = res.body.match(/TKK=(.*?)\(\)\)'\);/g);
|
|
|
|
if (code) {
|
|
eval(code[0]);
|
|
/* eslint-disable no-undef */
|
|
if (typeof TKK !== 'undefined') {
|
|
window.TKK = TKK;
|
|
config.set('TKK', TKK);
|
|
}
|
|
/* eslint-enable no-undef */
|
|
}
|
|
|
|
/**
|
|
* Note: If the regex or the eval fail, there is no need to worry. The server will accept
|
|
* relatively old seeds.
|
|
*/
|
|
|
|
resolve();
|
|
}).catch(function (err) {
|
|
var e = new Error();
|
|
e.code = 'BAD_NETWORK';
|
|
e.message = err.message;
|
|
reject(e);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function get(text) {
|
|
return updateTKK().then(function () {
|
|
var tk = sM(text);
|
|
tk = tk.replace('&tk=', '');
|
|
return {name: 'tk', value: tk};
|
|
}).catch(function (err) {
|
|
throw err;
|
|
});
|
|
}
|
|
|
|
module.exports.get = get;
|