diff options
Diffstat (limited to 'node_modules/translatte/token.js')
-rwxr-xr-x | node_modules/translatte/token.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/node_modules/translatte/token.js b/node_modules/translatte/token.js new file mode 100755 index 0000000..71f360b --- /dev/null +++ b/node_modules/translatte/token.js @@ -0,0 +1,120 @@ +/** + * Last update: 2018/11/24 + * 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') || '422854.923862967' +}; + +function updateTKK(opts) { + opts = opts || {tld: 'com', proxy: {}, headers: {}}; + 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.' + opts.tld, {...opts.proxy, headers: opts.headers, timeout: 2000, retry: 0}).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 () { + reject(); + }); + } + }); +} + +function get(text, opts) { + return updateTKK(opts).then(function () { + var tk = sM(text); + tk = tk.replace('&tk=', ''); + return {name: 'tk', value: tk}; + }).catch(function () { + return null; + }); +} + +module.exports.get = get;
\ No newline at end of file |