1
2export function xc_sign(a1 = "", x_s = "", x_t = "") {
3 const b1 = "I38rHdgsjopgIvesdVwgIC+oIELmBZ5e3VwXLgFTIxS3bqwErFeexd0ekncAzMFYnqthIhJeSfMDKutRI3KsYorWHPtGrbV0P9WfIi/eWc6eYqtyQApPI37ekmR1QL+5Ii6sdnosjoT5yqtXqqwYrBqoIx++GDi/sVtkIx0sxuwr4qtiIkrwIi/skcc3ICLfI3Oe0utl20DZsL5eDSJejVw0IieexVwL+PtorqthPWKexY8oICR1IErSgVwBGqtRIxE/eDdeVuwjIC0s1qtnIkpKIkRLee3eDoq6cU5sYqtzaDdefzq1zd/eWWF+IxoefutLIEeeDqt7rYrlOoVGIvgeiqtu/YgexjqmIkLwIiDPGamjIvhm+I88IizuBVwlIvGF4eveDS7e1utCIC7sDc==";
4 const common = {
5 s0: 5,
6 s1: "",
7 x0: "1",
8 x1: "3.3.0",
9 x2: "Windows",
10 x3: "xhs-pc-web",
11 x4: "1.4.4",
12 x5: a1,
13 x6: x_t,
14 x7: x_s,
15 x8: b1,
16 x9: mrc(x_t + x_s + b1),
17 x10: 1,
18 };
19 const encodeStr = encodeUtf8(JSON.stringify(common));
20 const x_s_common = b64Encode(encodeStr);
21 const x_b3_traceid = get_b3_trace_id();
22 return {
23 "x-s": x_s,
24 "x-t": x_t,
25 "x-s-common": x_s_common,
26 "x-b3-traceid": x_b3_traceid,
27 };
28}
29
30function get_b3_trace_id() {
31 const chars = "abcdef0123456789";
32 let result = "";
33 for (let i = 0; i < 16; i++) {
34 result += chars.charAt(Math.floor(Math.random() * chars.length));
35 }
36 return result;
37}
38
39function mrc(e) {
40 const ie = [
41 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685,
42 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995,
43 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648,
44 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990,
45 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755,
46 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145,
47 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206,
48 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980,
49 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705,
50 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527,
51 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772,
52 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290,
53 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719,
54 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925,
55 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202,
56 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960,
57 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733,
58 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467,
59 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048,
60 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054,
61 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443,
62 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945,
63 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430,
64 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580,
65 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225,
66 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143,
67 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732,
68 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850,
69 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135,
70 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109,
71 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954,
72 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920,
73 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877,
74 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603,
75 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992,
76 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934,
77 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795,
78 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105,
79 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270,
80 936918000, 2847714899, 3736837829, 1202900863, 817233897, 3183342108,
81 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449,
82 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471,
83 3272380065, 1510334235, 755167117,
84 ];
85 let o = -1;
86
87 function rightWithoutSign(num, bit = 0) {
88 return (num >>> bit);
89 }
90
91 for (let n = 0; n < 57; n++) {
92 o = ie[(o & 255) ^ e.charCodeAt(n)] ^ rightWithoutSign(o, 8);
93 }
94 return o ^ -1 ^ 3988292384;
95}
96
97const lookup = [
98 "Z", "m", "s", "e", "r", "b", "B", "o", "H", "Q", "t", "N", "P", "+", "w", "O",
99 "c", "z", "a", "/", "L", "p", "n", "g", "G", "8", "y", "J", "q", "4", "2", "K",
100 "W", "Y", "j", "0", "D", "S", "f", "d", "i", "k", "x", "3", "V", "T", "1", "6",
101 "I", "l", "U", "A", "F", "M", "9", "7", "h", "E", "C", "v", "u", "R", "X", "5"
102];
103
104function tripletToBase64(e) {
105 return lookup[(63 & (e >> 18))] +
106 lookup[(63 & (e >> 12))] +
107 lookup[((e >> 6) & 63)] +
108 lookup[(e & 63)];
109}
110
111function encodeChunk(e, t, r) {
112 let m = [];
113 for (let b = t; b < r; b += 3) {
114 const n = ((16711680 & (e[b] << 16)) +
115 ((e[b + 1] << 8) & 65280) +
116 (e[b + 2] & 255));
117 m.push(tripletToBase64(n));
118 }
119 return m.join('');
120}
121
122function b64Encode(e) {
123 const P = e.length;
124 const W = P % 3;
125 let U = [];
126 const z = 16383;
127 let H = 0;
128 const Z = P - W;
129 while (H < Z) {
130 U.push(encodeChunk(e, H, H + z > Z ? Z : H + z));
131 H += z;
132 }
133 if (W === 1) {
134 const F = e[P - 1];
135 U.push(lookup[F >> 2] + lookup[(F << 4) & 63] + "==");
136 } else if (W === 2) {
137 const F = (e[P - 2] << 8) + e[P - 1];
138 U.push(lookup[F >> 10] + lookup[(F >> 4) & 63] + lookup[(F << 2) & 63] + "=");
139 }
140 return U.join('');
141}
142
143function encodeUtf8(e) {
144 let b = [];
145 const m = encodeURIComponent(e);
146 for (let i = 0; i < m.length; i++) {
147 if (m[i] === "%") {
148 const hex = m.substr(i + 1, 2);
149 b.push(parseInt(hex, 16));
150 i += 2;
151 } else {
152 b.push(m.charCodeAt(i));
153 }
154 }
155 return b;
156}
157
158function base36encode(number, alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') {
159 if (typeof number !== 'number' || number % 1 !== 0) {
160 throw new TypeError('number must be an integer');
161 }
162
163 let base36 = '';
164 let sign = '';
165
166 if (number < 0) {
167 sign = '-';
168 number = -number;
169 }
170
171 if (0 <= number && number < alphabet.length) {
172 return sign + alphabet[number];
173 }
174
175 while (number !== 0) {
176 const i = number % alphabet.length;
177 number = Math.floor(number / alphabet.length);
178 base36 = alphabet[i] + base36;
179 }
180
181 return sign + base36;
182}
183
184function base36decode(number) {
185 return parseInt(number, 36);
186}
187
188export function get_search_id() {
189 const e = BigInt(Date.now()) << 64n;
190 const t = BigInt(Math.floor(Math.random() * 2147483646));
191 return base36encode(Number(e + t));
192}