UNPKG

@bililive-tools/douyin-recorder

Version:
109 lines (108 loc) 4.42 kB
import fs from "node:fs"; import path from "node:path"; /** * 接收 fn ,返回一个和 fn 签名一致的函数 fn'。当已经有一个 fn' 在运行时,再调用 * fn' 会直接返回运行中 fn' 的 Promise,直到 Promise 结束 pending 状态 */ export function singleton(fn) { let latestPromise = null; return function (...args) { if (latestPromise) return latestPromise; // @ts-ignore const promise = fn.apply(this, args).finally(() => { if (promise === latestPromise) { latestPromise = null; } }); latestPromise = promise; return promise; }; } export function ensureFolderExist(fileOrFolderPath) { const folder = path.dirname(fileOrFolderPath); if (!fs.existsSync(folder)) { fs.mkdirSync(folder, { recursive: true }); } } export function assert(assertion, msg) { if (!assertion) { throw new Error(msg); } } export function assertStringType(data, msg) { assert(typeof data === "string", msg); } export function assertNumberType(data, msg) { assert(typeof data === "number", msg); } export function assertObjectType(data, msg) { assert(typeof data === "object", msg); } export function get__ac_signature(one_time_stamp, one_site, one_nonce, ua_n) { function cal_one_str(one_str, orgi_iv) { var k = orgi_iv; for (var i = 0; i < one_str.length; i++) { var a = one_str.charCodeAt(i); k = ((k ^ a) * 65599) >>> 0; } return k; } function cal_one_str_3(one_str, orgi_iv) { // 用于计算后两位 var k = orgi_iv; for (var i = 0; i < one_str.length; i++) { k = (k * 65599 + one_str.charCodeAt(i)) >>> 0; } return k; } function get_one_chr(enc_chr_code) { if (enc_chr_code < 26) { return String.fromCharCode(enc_chr_code + 65); } else if (enc_chr_code < 52) { return String.fromCharCode(enc_chr_code + 71); } else if (enc_chr_code < 62) { return String.fromCharCode(enc_chr_code - 4); } else { return String.fromCharCode(enc_chr_code - 17); } } function enc_num_to_str(one_orgi_enc) { var s = ""; for (var i = 24; i >= 0; i -= 6) { s += get_one_chr((one_orgi_enc >> i) & 63); } return s; } // var time_stamp = 1740635781 // var site = 'www.douyin.com/'; 提取自window.location.href // var data_url = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAAAAXNSR0IArs4c6QAAAV5JREFUSEvFlU1OAkEQhT9WLlyx5BqujTfhAMTbsNIYj+EpXLjyDCzhAgbSZMoUb6q6GwWGhMxM/8y8ej/VM05/e3kuj7NhrMzZfbBskqF9BMiAKmAt7trFRGR6Qsv9SQHZBt103DiRGiNSlcWIdW8h75NrK6Ce9M74nYsK0I1ZBnyxme0ytWpZy8IUqT7KQE0BA6MqeDCl2FZhmf1qttR3VhU4h3HPsKoQFaIkeAeEDA9IM7umITYmLcARy1GLrYHuAat5a+VsVIC3QM0KNvcCfAGvclb0WLHVQLxV08woK1GAvBo6/wk8A+Ua2cnWRx7uKcCAZ+dV82RtBesHuAPK1fs7A/eXblWz0b8zUCy0crJkjGXZUJtkbb1LgZ4u4tfsgHnWtC883p0BDbHvQjZXQG8b7e3C+PPXRdIsgE2yZQmsgUfg+2YoKx+KCngCPoD3IZz3wMPwfxPPT17DAcLKggYInDZeAAAAAElFTkSuQmCC' // var ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0"; // var nonce = '067bffadf00143f576ddf'; // var result = '_02B4Z6wo00f01HBw-fgAAIDA-rdLmXfuMxxwUP1AAHurb5' var sign_head = "_02B4Z6wo00f01", time_stamp_s = one_time_stamp + ""; var a = cal_one_str(one_site, cal_one_str(time_stamp_s, 0)) % 65521; var b = parseInt("10000000110000" + // @ts-ignore parseInt((one_time_stamp ^ (a * 65521)) >>> 0) .toString(2) .padStart(32, "0"), 2), b_s = b + ""; var c = cal_one_str(b_s, 0); var d = enc_num_to_str(b >> 2); var e = (b / 4294967296) >>> 0; var f = enc_num_to_str((b << 28) | (e >>> 4)); var g = 582085784 ^ b; var h = enc_num_to_str((e << 26) | (g >>> 6)); var i = get_one_chr(g & 63); var j = (cal_one_str(ua_n, c) % 65521 << 16) | cal_one_str(one_nonce, c) % 65521; var k = enc_num_to_str(j >> 2); var l = enc_num_to_str((j << 28) | ((524576 ^ b) >>> 4)); var m = enc_num_to_str(a); var n = sign_head + d + f + h + i + k + l + m; var o = parseInt(cal_one_str_3(n, 0)).toString(16).slice(-2); var signature = n + o; return signature; }