Skip to content

Commit

Permalink
fix: don't filter request-specific headers in the generator
Browse files Browse the repository at this point in the history
This reverts commit 931516b.
  • Loading branch information
barjin committed Jul 16, 2023
1 parent 90f592c commit 00ac285
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 32 deletions.
16 changes: 16 additions & 0 deletions packages/fingerprint-injector/src/fingerprint-injector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,24 @@ export class FingerprintInjector {
* @returns Filtered headers.
*/
private onlyInjectableHeaders(headers: Record<string, string>, browserName?: string): Record<string, string> {
const requestHeaders = [
'accept-encoding',
'accept',
'cache-control',
'pragma',
'sec-fetch-dest',
'sec-fetch-mode',
'sec-fetch-site',
'sec-fetch-user',
'upgrade-insecure-requests',
];

const filteredHeaders = { ...headers };

requestHeaders.forEach((header) => {
delete filteredHeaders[header];
});

// Chromium-based controlled browsers do not support `te` header.
// Probably needs more investigation, but for now, we can just remove it.
if (!(browserName?.toLowerCase().includes('firefox') ?? false)) {
Expand Down
37 changes: 5 additions & 32 deletions packages/header-generator/src/header-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,44 +284,17 @@ export class HeaderGenerator {
generatedSample[secFetchAttributeNames.dest] = 'document';
}

for (const attribute of Object.keys(generatedSample)) {
if (attribute.startsWith('*') || generatedSample[attribute] === MISSING_VALUE_DATASET_TOKEN) delete generatedSample[attribute];
}

// Order the headers in an order depending on the browser
return this.orderHeaders({
...this.filterClientHeaders(generatedSample),
...generatedSample,
...requestDependentHeaders,
}, (this.headersOrder as Record<string, any>)[generatedHttpAndBrowser.name]);
}

/**
* Returns a new object that contains filtered headers from the input object. Filters out headers that are
* technically tied either with the individual browsers or individual requests and headers that have no value.
*/
private filterClientHeaders(headers: Record<string, string>): Record<string, string> {
const clientHeaders = [
'accept-encoding',
'accept',
'cache-control',
'connection',
'pragma',
'sec-fetch-dest',
'sec-fetch-mode',
'sec-fetch-site',
'sec-fetch-user',
'upgrade-insecure-requests',
];

const filteredHeaders = { ...headers };

return Object.fromEntries(
Object.entries(
filteredHeaders,
).filter(([key, value]) => {
return !clientHeaders.includes(key.toLowerCase())
&& value !== MISSING_VALUE_DATASET_TOKEN
&& !key.startsWith('*');
}),
);
}

/**
* Returns a new object that contains ordered headers.
* @param headers Specifies known values of headers dependent on the particular request.
Expand Down

0 comments on commit 00ac285

Please sign in to comment.