This commit is contained in:
谢宇宁
2026-11-06 00:13:27 +07:00
parent f65d10e998
commit 37411fcada
98 changed files with 958 additions and 4598 deletions
+5 -4
View File
@@ -1,3 +1,4 @@
import {linkShared} from './helpers/shared-modules.mjs';
import {test} from 'node:test';
import assert from 'node:assert/strict';
import {readFile} from 'node:fs/promises';
@@ -6,12 +7,12 @@ import ts from 'typescript';
async function moduleUrl(path,imports={}){
let code=ts.transpileModule(await readFile(new URL('../src/lib/'+path+'.ts',import.meta.url),'utf8'),{compilerOptions:{module:ts.ModuleKind.ESNext,target:ts.ScriptTarget.ES2022}}).outputText;
for(const [name,url] of Object.entries(imports))code=code.replace("'"+name+"'",JSON.stringify(url));
return 'data:text/javascript;base64,'+Buffer.from(code).toString('base64');
return 'data:text/javascript;base64,'+Buffer.from(linkShared(code)).toString('base64');
}
const uaUrl=await moduleUrl('api/user-agent');
const {buildUserAgent,buildSdkUserAgent,userAgentSid}=await import(uaUrl);
const trackingUrl=await moduleUrl('api/tracking-headers',{'../tracking':await moduleUrl('tracking')});
const {clientHeaders}=await import(await moduleUrl('api/client-headers',{'./user-agent':uaUrl,'./tracking-headers':trackingUrl}));
const sdkUrl=await moduleUrl('api/sdk-headers');
const {clientHeaders}=await import(await moduleUrl('api/client-headers',{'./user-agent':uaUrl,'./sdk-headers':sdkUrl}));
// Generated by running the reference Go BuildXUserAgent function without changing its logic.
const samples=JSON.parse(await readFile(new URL('./fixtures/request-user-agents.json',import.meta.url),'utf8'));
@@ -24,7 +25,7 @@ test('existing X-User-Agent wins over SDK fields and network headers remain sepa
const fields={sid:'sdk-sid',device_id:'sdk-device',device:'Android',device_fingerprint:'raw',fp_version:'3',app_version:'1.0.0'};
const headers=clientHeaders(new Headers({'User-Agent':' Browser UA ','X-User-Agent':xua,'X-Real-IP':'203.0.113.9','X-Forwarded-For':'203.0.113.8, 10.0.0.1','X-SDK-Common':Buffer.from(JSON.stringify(fields)).toString('base64'),Cookie:'drama_session=private',Authorization:'private'}));
assert.equal(headers['User-Agent'],'Browser UA');assert.equal(headers['X-User-Agent'],xua);assert.equal(headers['X-Real-IP'],'203.0.113.9');
assert.deepEqual(JSON.parse(Buffer.from(headers['X-SDK-Common'],'base64')),fields);
assert.deepEqual(JSON.parse(Buffer.from(headers['X-SDK-Common'],'base64')),{sid:'sdk-sid',device_id:'sdk-device',app_version:'1.0.0'});
for(const key of ['Cookie','Authorization','X-Forwarded-For'])assert.equal(headers[key],undefined);
});