header-generator 2.0.0-beta.9 → 2.0.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE → LICENSE.md} +2 -2
- package/README.md +2 -154
- package/{dist/constants.d.ts → constants.d.ts} +0 -0
- package/{dist/constants.d.ts.map → constants.d.ts.map} +0 -0
- package/{dist/constants.js → constants.js} +0 -0
- package/{dist/constants.js.map → constants.js.map} +0 -0
- package/data_files/browser-helper-file.json +1 -0
- package/data_files/header-network-definition.zip +0 -0
- package/{dist/data_files → data_files}/headers-order.json +0 -0
- package/data_files/input-network-definition.zip +0 -0
- package/header-generator.d.ts +156 -0
- package/header-generator.d.ts.map +1 -0
- package/{dist/header-generator.js → header-generator.js} +42 -60
- package/header-generator.js.map +1 -0
- package/{dist/index.d.ts → index.d.ts} +0 -0
- package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
- package/{dist/index.js → index.js} +0 -0
- package/{dist/index.js.map → index.js.map} +0 -0
- package/{dist/index.mjs → index.mjs} +0 -0
- package/package.json +42 -64
- package/{dist/presets.d.ts → presets.d.ts} +0 -0
- package/{dist/presets.d.ts.map → presets.d.ts.map} +0 -0
- package/{dist/presets.js → presets.js} +0 -0
- package/{dist/presets.js.map → presets.js.map} +0 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/{dist/utils.d.ts → utils.d.ts} +1 -1
- package/utils.d.ts.map +1 -0
- package/{dist/utils.js → utils.js} +1 -1
- package/utils.js.map +1 -0
- package/dist/data_files/browser-helper-file.json +0 -1
- package/dist/data_files/header-network-definition.json +0 -1
- package/dist/data_files/input-network-definition.json +0 -1
- package/dist/header-generator.d.ts +0 -115
- package/dist/header-generator.d.ts.map +0 -1
- package/dist/header-generator.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
package/{LICENSE → LICENSE.md}
RENAMED
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
APPENDIX: How to apply the Apache License to your work.
|
|
179
179
|
|
|
180
180
|
To apply the Apache License to your work, attach the following
|
|
181
|
-
boilerplate notice, with the fields enclosed by brackets "
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
182
182
|
replaced with your own identifying information. (Don't include
|
|
183
183
|
the brackets!) The text should be enclosed in the appropriate
|
|
184
184
|
comment syntax for the file format. We also recommend that a
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright
|
|
189
|
+
Copyright 2018 Apify Technologies s.r.o.
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
package/README.md
CHANGED
|
@@ -1,155 +1,3 @@
|
|
|
1
|
-
#
|
|
2
|
-
NodeJs package for generating browser-like headers.
|
|
3
|
-
|
|
4
|
-
<!-- toc -->
|
|
5
|
-
|
|
6
|
-
- [Installation](#installation)
|
|
7
|
-
- [Usage](#usage)
|
|
8
|
-
- [Presets](#presets)
|
|
9
|
-
- [Result example](#result-example)
|
|
10
|
-
- [API Reference](#api-reference)
|
|
11
|
-
|
|
12
|
-
<!-- tocstop -->
|
|
13
|
-
|
|
14
|
-
## Installation
|
|
15
|
-
Run the `npm install header-generator` command. No further setup is needed afterwards.
|
|
16
|
-
## Usage
|
|
17
|
-
To use the generator, you need to create an instance of the `HeaderGenerator` class which is exported from this package. Constructor of this class accepts a `HeaderGeneratorOptions` object, which can be used to globally specify what kind of headers you are looking for:
|
|
18
|
-
```js
|
|
19
|
-
const { HeaderGenerator } = require('header-generator');
|
|
20
|
-
let headerGenerator = new HeaderGenerator({
|
|
21
|
-
browsers: [
|
|
22
|
-
{name: "firefox", minVersion: 80},
|
|
23
|
-
{name: "chrome", minVersion: 87},
|
|
24
|
-
"safari"
|
|
25
|
-
],
|
|
26
|
-
devices: [
|
|
27
|
-
"desktop"
|
|
28
|
-
],
|
|
29
|
-
operatingSystems: [
|
|
30
|
-
"windows"
|
|
31
|
-
]
|
|
32
|
-
});
|
|
33
|
-
```
|
|
34
|
-
You can then get the headers using the `getHeaders` method, either with no argument, or with another `HeaderGeneratorOptions` object, this time specifying the options only for this call (overwriting the global options when in conflict) and using the global options specified beforehands for the unspecified options:
|
|
35
|
-
```js
|
|
36
|
-
let headers = headersGenerator.getHeaders({
|
|
37
|
-
operatingSystems: [
|
|
38
|
-
"linux"
|
|
39
|
-
],
|
|
40
|
-
locales: ["en-US", "en"]
|
|
41
|
-
});
|
|
42
|
-
```
|
|
43
|
-
This method always generates a random realistic set of headers, excluding the request dependant headers, which need to be filled in afterwards. Since the generation is randomized, multiple calls to this method with the same parameters can generate multiple different outputs.
|
|
44
|
-
|
|
45
|
-
## Presets
|
|
46
|
-
Presets are setting templates for common use cases. It saves time writing the same configuration over and over.
|
|
47
|
-
```js
|
|
48
|
-
const { HeaderGenerator, PRESETS } = require('header-generator');
|
|
49
|
-
let headerGenerator = new HeaderGenerator(PRESETS.MODERN_WINDOWS_CHROME);
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
This preset will fill the configuration for the latest five versions of chrome for windows desktops. Checkout the available presets list [here](https://github.com/apify/header-generator/blob/master/src/presets.ts).
|
|
53
|
-
## Result example
|
|
54
|
-
A result that can be generated for the usage example above:
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"sec-ch-ua-mobile": "?0",
|
|
58
|
-
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36",
|
|
59
|
-
"accept-encoding": "gzip, deflate, br",
|
|
60
|
-
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
|
61
|
-
"upgrade-insecure-requests": "1",
|
|
62
|
-
"accept-language": "en-US,en;0.9",
|
|
63
|
-
"sec-fetch-site": "same-site",
|
|
64
|
-
"sec-fetch-mode": "navigate",
|
|
65
|
-
"sec-fetch-user": "?1",
|
|
66
|
-
"sec-fetch-dest": "document"
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
## API Reference
|
|
70
|
-
All public classes, methods and their parameters can be inspected in this API reference.
|
|
71
|
-
|
|
72
|
-
<a name="HeaderGenerator"></a>
|
|
73
|
-
|
|
74
|
-
### HeaderGenerator
|
|
75
|
-
HeaderGenerator randomly generates realistic browser headers based on specified options.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
* [HeaderGenerator](#HeaderGenerator)
|
|
79
|
-
* [`new HeaderGenerator(options)`](#new_HeaderGenerator_new)
|
|
80
|
-
* [`.getHeaders(options, requestDependentHeaders)`](#HeaderGenerator+getHeaders)
|
|
81
|
-
* [`.orderHeaders(headers, order)`](#HeaderGenerator+orderHeaders)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
* * *
|
|
85
|
-
|
|
86
|
-
<a name="new_HeaderGenerator_new"></a>
|
|
87
|
-
|
|
88
|
-
#### `new HeaderGenerator(options)`
|
|
89
|
-
|
|
90
|
-
| Param | Type | Description |
|
|
91
|
-
| --- | --- | --- |
|
|
92
|
-
| options | [<code>HeaderGeneratorOptions</code>](#HeaderGeneratorOptions) | default header generation options used unless overridden |
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
* * *
|
|
96
|
-
|
|
97
|
-
<a name="HeaderGenerator+getHeaders"></a>
|
|
98
|
-
|
|
99
|
-
#### `headerGenerator.getHeaders(options, requestDependentHeaders)`
|
|
100
|
-
Generates a single set of ordered headers using a combination of the default options specified in the constructor
|
|
101
|
-
and their possible overrides provided here.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
| Param | Type | Description |
|
|
105
|
-
| --- | --- | --- |
|
|
106
|
-
| options | [<code>HeaderGeneratorOptions</code>](#HeaderGeneratorOptions) | specifies options that should be overridden for this one call |
|
|
107
|
-
| requestDependentHeaders | <code>Object</code> | specifies known values of headers dependent on the particular request |
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
* * *
|
|
111
|
-
|
|
112
|
-
<a name="HeaderGenerator+orderHeaders"></a>
|
|
113
|
-
|
|
114
|
-
#### `headerGenerator.orderHeaders(headers, order)`
|
|
115
|
-
Returns a new object that contains ordered headers.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
| Param | Type | Description |
|
|
119
|
-
| --- | --- | --- |
|
|
120
|
-
| headers | <code>object</code> | specifies known values of headers dependent on the particular request |
|
|
121
|
-
| order | <code>Array.<string></code> | an array of ordered header names, optional (will be deducted from `user-agent`) |
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
* * *
|
|
125
|
-
|
|
126
|
-
<a name="BrowserSpecification"></a>
|
|
127
|
-
|
|
128
|
-
### `BrowserSpecification`
|
|
129
|
-
|
|
130
|
-
| Param | Type | Description |
|
|
131
|
-
| --- | --- | --- |
|
|
132
|
-
| name | <code>string</code> | One of `chrome`, `firefox` and `safari`. |
|
|
133
|
-
| minVersion | <code>number</code> | Minimal version of browser used. |
|
|
134
|
-
| maxVersion | <code>number</code> | Maximal version of browser used. |
|
|
135
|
-
| httpVersion | <code>string</code> | Http version to be used to generate headers (the headers differ depending on the version). Either 1 or 2. If none specified the httpVersion specified in `HeaderGeneratorOptions` is used. |
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
* * *
|
|
139
|
-
|
|
140
|
-
<a name="HeaderGeneratorOptions"></a>
|
|
141
|
-
|
|
142
|
-
### `HeaderGeneratorOptions`
|
|
143
|
-
|
|
144
|
-
| Param | Type | Description |
|
|
145
|
-
| --- | --- | --- |
|
|
146
|
-
| browsers | <code>Array.<(BrowserSpecification\|string)></code> | List of BrowserSpecifications to generate the headers for, or one of `chrome`, `firefox` and `safari`. |
|
|
147
|
-
| browserListQuery | <code>string</code> | Browser generation query based on the real world data. For more info see the [query docs](https://github.com/browserslist/browserslist#full-list). If `browserListQuery` is passed the `browsers` array is ignored. |
|
|
148
|
-
| operatingSystems | <code>Array.<string></code> | List of operating systems to generate the headers for. The options are `windows`, `macos`, `linux`, `android` and `ios`. |
|
|
149
|
-
| devices | <code>Array.<string></code> | List of devices to generate the headers for. Options are `desktop` and `mobile`. |
|
|
150
|
-
| locales | <code>Array.<string></code> | List of at most 10 languages to include in the [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) request header in the language format accepted by that header, for example `en`, `en-US` or `de`. |
|
|
151
|
-
| httpVersion | <code>string</code> | Http version to be used to generate headers (the headers differ depending on the version). Can be either 1 or 2. Default value is 2. |
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
* * *
|
|
1
|
+
# Fingerprint suite
|
|
155
2
|
|
|
3
|
+
This repository contains a set of fingerprinting tools developed by Apify.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
["chrome/100.0.4896.60|2","firefox/97.0|2","chrome/87.0.4280.67|2","chrome/99.0.4844.51|2","firefox/98.0|2","chrome/99.0.4844.84|2","firefox/88.0|2","safari/605.1.15|2","chrome/100.0.4896.75|2","chrome/61.0.3163.128|2","chrome/99.0.4844.83|2","chrome/99.0.4844.88|2","safari/604.1|2","*MISSING_VALUE*|2","chrome/100.0.4896.58|2","chrome/100.0.4896.60|1","chrome/99.0.4844.74|2","edge/100.0.1185.29|1","edge/100.0.1185.29|2","chrome/98.0.4758.102|1","chrome/99.0.4844.84|1","chrome/97.0.4692.99|2","chrome/96.0.4664.110|2","chrome/92.0.4515.166|2","edge/99.0.1150.55|2","chrome/84.0.4147.125|2","chrome/79.0.3945.79|2","chrome/98.0.4758.109|2","firefox/95.0|2","chrome/76.0.3809.71|2","chrome/75.0.3770.142|2","chrome/90.0.4430.72|2","chrome/99.0.4844.82|2","chrome/98.0.4758.102|2","chrome/98.0.4758.82|2","chrome/96.0.4664.45|2","firefox/99.0|2","chrome/99.0.4844.73|2","chrome/99.0.4844.57|2","chrome/76.0.3809.38|2","firefox/81.0|1","chrome/98.0.4758.80|2","chrome/91.0.4472.114|2","firefox/87.0|2","chrome/98.0.4758.106|2","firefox/78.0|2","firefox/91.0|2","chrome/96.0.4664.45|1","chrome/94.0.4606.71|2","chrome/77.0.3865.75|2","chrome/71.0.3578.98|2","chrome/70.0.3538.102|2","chrome/100.0.4896.75|1","firefox/96.0|2","chrome/100.0.4896.79|2","chrome/98.0.4758.141|2","chrome/51.0.7009.1032|2","chrome/86.0.4240.75|2","chrome/91.0.4472.164|2","edge/100.0.1185.27|2","chrome/80.0.3987.106|2","chrome/102.0.4983.0|2","chrome/99.0.4844.58|2","chrome/81.0.4044.92|2","chrome/98.0.4758.109|1","chrome/80.0.3987.132|2","chrome/60.0.3112.90|2","chrome/83.0.4103.101|2","edge/95.0.1020.53|2","chrome/101.0.4951.15|2","edge/99.0.1150.52|2","chrome/92.0.4515.131|2","chrome/97.0.4692.98|2","chrome/90.0.4430.210|2","chrome/98.0.4758.101|2","chrome/95.0.4638.69|2","chrome/99.0.4844.82|1","chrome/87.0.4280.141|2","edge/99.0.1150.46|2","chrome/81.0.4044.138|2","chrome/98.0.4758.87|2","chrome/99.0.4844.94|2","chrome/98.0.4758.105|2","edge/99.0.1150.30|2","chrome/86.0.4240.198|2","firefox/84.0|2","firefox/98.0|1","chrome/98.0.4758.136|2","chrome/99.0.7113.93|2","chrome/94.0.4606.56|2","chrome/92.0.4515.107|2","chrome/83.0.4103.106|2","chrome/99.0.4844.51|1","chrome/94.0.4606.85|2","chrome/102.0.4972.0|2","chrome/91.0.4472.106|2","chrome/96.0.4664.93|2","edge/97.0.1072.76|2","chrome/88.0.4324.96|2","chrome/93.0.4577.82|2","chrome/86.0.4240.99|2","chrome/79.0.3945.116|1","chrome/98.0.4758.121|2","edge/99.0.1150.55|1","chrome/89.0.4389.82|2","chrome/73.0.3683.75|2","chrome/93.0.4577.0|2","edge/99.0.1150.39|2","chrome/98.0.4758.107|2","chrome/69.0.3497.100|2","chrome/92.0.4515.159|2","chrome/98.0.4758.132|2","chrome/98.0.4758.91|2","chrome/100.0.4896.54|2","chrome/87.0.4280.88|1","firefox/100.0|2","chrome/100.0.4896.46|2","chrome/79.0.3945.116|2","chrome/78.0.3904.96|2","firefox/56.0|2","chrome/95.0.4638.74|2","edge/18.19577|2","chrome/98.0.4695.0|2","chrome/91.0.4472.101|2","firefox/92.0|2","edge/98.0.1108.50|2","chrome/75.0.3765.0|2","chrome/87.0.4280.88|2","chrome/88.0.4324.93|2","edge/98.0.1108.62|2","firefox/74.0|2","chrome/101.0.4951.7|2","chrome/102.0.4962.0|2","chrome/101.0.4929.0|2","chrome/97.0.4692.71|2","chrome/97.0.4692.87|2","chrome/90.0.4430.93|2","chrome/96.0.4664.111|1","firefox/94.0|2","chrome/100.0.4896.30|2","chrome/97.0.4692.104|2","chrome/99.0.4844.74|1","edge/98.0.1108.43|1","edge/99.0.1150.36|2","chrome/101.0.4929.5|2","chrome/90.0.4430.212|2","chrome/91.0.4472.109|2","chrome/95.0.4638.54|2","chrome/98.0.4758.80|1","chrome/97.0.4692.99|1","chrome/89.0.4389.90|2","chrome/96.0.4664.104|2","chrome/99.0.4844.0|2","chrome/80.0.3987.163|2","chrome/90.0.4430.91|2","chrome/88.0.4324.96|1","firefox/90.0|2","edge/97.0.1072.62|2","chrome/99.0.4844.66|2","chrome/80.0.3987.0|2","chrome/87.0.4280.101|2","edge/98.0.1108.43|2","edge/99.0.1150.16|2","edge/99.0.1150.39|1","chrome/91.0.4472.77|2","chrome/81.0.4044.0|1","edge/101.0.1193.0|2","chrome/83.0.4103.97|2","chrome/93.0.4577.8|2","chrome/96.0.4664.174|2","chrome/49.0.7383.1298|2","chrome/92.0.4515.159|1","chrome/77.0.3865.116|2","edge/100.0.1185.7|2","chrome/89.0.4389.116|2","chrome/100.0.4878.0|2","chrome/94.0.4606.54|2","chrome/97.0.4692.102|2","chrome/83.0.4103.116|1","chrome/97.0.4692.71|1","chrome/74.0.3729.136|2","edge/98.0.1108.62|1","chrome/87.0.4280.66|2","edge/97.0.1072.55|2","chrome/99.0.4844.16|2","chrome/92.0.4515.105|2","firefox/93.0|2","edge/97.0.1072.69|2","chrome/74.0.3729.131|2","chrome/73.0.3683.103|2","chrome/96.0.4664.92|2","safari/604.1|1","chrome/99.0.4864.208|2","chrome/81.0.4044.113|2","chrome/91.0.4472.124|2","chrome/88.0.4324.150|2","chrome/96.0.4664.55|2","chrome/83.0.4103.116|2","chrome/96.0.4664.175|2","edge/99.0.1150.30|1","chrome/87.0.4280.144|2","chrome/98.0.4758.82|1","safari/602.1|2","chrome/98.0.4758.34|2","firefox/89.0|2","chrome/64.0.3282.137|2","chrome/98.0.4758.81|2","chrome/94.0.4606.61|2","chrome/88.0.4324.152|2","chrome/97.0.4692.70|2","chrome/94.0.4606.81|2","chrome/80.0.3987.99|1"]
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { SUPPORTED_BROWSERS, MISSING_VALUE_DATASET_TOKEN, SUPPORTED_OPERATING_SYSTEMS, SUPPORTED_DEVICES, SUPPORTED_HTTP_VERSIONS } from './constants';
|
|
2
|
+
export declare const headerGeneratorOptionsShape: {
|
|
3
|
+
browsers: import("ow").ArrayPredicate<string | {
|
|
4
|
+
name: string;
|
|
5
|
+
minVersion: number | undefined;
|
|
6
|
+
maxVersion: number | undefined;
|
|
7
|
+
httpVersion: string | undefined;
|
|
8
|
+
}>;
|
|
9
|
+
operatingSystems: import("ow").ArrayPredicate<string>;
|
|
10
|
+
devices: import("ow").ArrayPredicate<string>;
|
|
11
|
+
locales: import("ow").ArrayPredicate<string>;
|
|
12
|
+
httpVersion: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
|
|
13
|
+
browserListQuery: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* String specifying the HTTP version to use.
|
|
17
|
+
*/
|
|
18
|
+
export declare type HttpVersion = typeof SUPPORTED_HTTP_VERSIONS[number];
|
|
19
|
+
/**
|
|
20
|
+
* String specifying the device type to use.
|
|
21
|
+
*/
|
|
22
|
+
export declare type Device = typeof SUPPORTED_DEVICES[number];
|
|
23
|
+
/**
|
|
24
|
+
* String specifying the operating system to use.
|
|
25
|
+
*/
|
|
26
|
+
export declare type OperatingSystem = typeof SUPPORTED_OPERATING_SYSTEMS[number];
|
|
27
|
+
/**
|
|
28
|
+
* String specifying the browser to use.
|
|
29
|
+
*/
|
|
30
|
+
export declare type BrowserName = typeof SUPPORTED_BROWSERS[number];
|
|
31
|
+
export interface BrowserSpecification {
|
|
32
|
+
/**
|
|
33
|
+
* String representing the browser name.
|
|
34
|
+
*/
|
|
35
|
+
name: BrowserName;
|
|
36
|
+
/**
|
|
37
|
+
* Minimum version of browser used.
|
|
38
|
+
*/
|
|
39
|
+
minVersion?: number;
|
|
40
|
+
/**
|
|
41
|
+
* Maximum version of browser used.
|
|
42
|
+
*/
|
|
43
|
+
maxVersion?: number;
|
|
44
|
+
/**
|
|
45
|
+
* HTTP version to be used for header generation (the headers differ depending on the version).
|
|
46
|
+
* If not specified, the `httpVersion` specified in `HeaderGeneratorOptions` is used.
|
|
47
|
+
*/
|
|
48
|
+
httpVersion?: HttpVersion;
|
|
49
|
+
}
|
|
50
|
+
export declare type BrowsersType = BrowserSpecification[] | BrowserName[];
|
|
51
|
+
/**
|
|
52
|
+
* Options for the `HeaderGenerator` class constructor.
|
|
53
|
+
*/
|
|
54
|
+
export interface HeaderGeneratorOptions {
|
|
55
|
+
/**
|
|
56
|
+
* List of BrowserSpecifications to generate the headers for,
|
|
57
|
+
* or one of `chrome`, `edge`, `firefox` and `safari`.
|
|
58
|
+
*/
|
|
59
|
+
browsers: BrowsersType;
|
|
60
|
+
/**
|
|
61
|
+
* Browser generation query based on the real world data.
|
|
62
|
+
* For more info see the [query docs](https://github.com/browserslist/browserslist#full-list).
|
|
63
|
+
* If `browserListQuery` is passed the `browsers` array is ignored.
|
|
64
|
+
*/
|
|
65
|
+
browserListQuery: string;
|
|
66
|
+
/**
|
|
67
|
+
* List of operating systems to generate the headers for.
|
|
68
|
+
*/
|
|
69
|
+
operatingSystems: OperatingSystem[];
|
|
70
|
+
/**
|
|
71
|
+
* List of devices to generate the headers for.
|
|
72
|
+
*/
|
|
73
|
+
devices: Device[];
|
|
74
|
+
/**
|
|
75
|
+
* List of at most 10 languages to include in the
|
|
76
|
+
* [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) request header
|
|
77
|
+
* in the language format accepted by that header, for example `en`, `en-US` or `de`.
|
|
78
|
+
*/
|
|
79
|
+
locales: string[];
|
|
80
|
+
/**
|
|
81
|
+
* Http version to be used to generate headers (the headers differ depending on the version).
|
|
82
|
+
* Can be either 1 or 2. Default value is 2.
|
|
83
|
+
*/
|
|
84
|
+
httpVersion: HttpVersion;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Structured information about a browser and HTTP version used.
|
|
88
|
+
*/
|
|
89
|
+
export interface HttpBrowserObject {
|
|
90
|
+
/**
|
|
91
|
+
* Name of the browser used.
|
|
92
|
+
*/
|
|
93
|
+
name: BrowserName | typeof MISSING_VALUE_DATASET_TOKEN;
|
|
94
|
+
/**
|
|
95
|
+
* Browser version split into parts of the semantic version number.
|
|
96
|
+
*/
|
|
97
|
+
version: number[];
|
|
98
|
+
/**
|
|
99
|
+
* String containing the browser name, browser version and HTTP version (e.g. `chrome/88.0.4324.182|2`).
|
|
100
|
+
*/
|
|
101
|
+
completeString: string;
|
|
102
|
+
/**
|
|
103
|
+
* HTTP version as a string ("1" or "2").
|
|
104
|
+
*/
|
|
105
|
+
httpVersion: HttpVersion;
|
|
106
|
+
}
|
|
107
|
+
export declare type Headers = Record<string, string>;
|
|
108
|
+
/**
|
|
109
|
+
* Randomly generates realistic HTTP headers based on specified options.
|
|
110
|
+
*/
|
|
111
|
+
export declare class HeaderGenerator {
|
|
112
|
+
globalOptions: HeaderGeneratorOptions;
|
|
113
|
+
browserListQuery: string | undefined;
|
|
114
|
+
private inputGeneratorNetwork;
|
|
115
|
+
private headerGeneratorNetwork;
|
|
116
|
+
private uniqueBrowsers;
|
|
117
|
+
/**
|
|
118
|
+
* @param options Default header generation options used - unless overridden.
|
|
119
|
+
*/
|
|
120
|
+
constructor(options?: Partial<HeaderGeneratorOptions>);
|
|
121
|
+
/**
|
|
122
|
+
* Generates a single set of ordered headers using a combination of the default options specified in the constructor
|
|
123
|
+
* and their possible overrides provided here.
|
|
124
|
+
* @param options Specifies options that should be overridden for this one call.
|
|
125
|
+
* @param requestDependentHeaders Specifies known values of headers dependent on the particular request.
|
|
126
|
+
*/
|
|
127
|
+
getHeaders(options?: Partial<HeaderGeneratorOptions>, requestDependentHeaders?: Headers): Headers;
|
|
128
|
+
/**
|
|
129
|
+
* Returns a new object that contains ordered headers.
|
|
130
|
+
* @param headers Specifies known values of headers dependent on the particular request.
|
|
131
|
+
* @param order An array of ordered header names, optional (will be deducted from `user-agent`).
|
|
132
|
+
*/
|
|
133
|
+
orderHeaders(headers: Headers, order?: string[]): Headers;
|
|
134
|
+
private _prepareBrowsersConfig;
|
|
135
|
+
private _getBrowserHttpOptions;
|
|
136
|
+
private _getPossibleAttributeValues;
|
|
137
|
+
private _getAcceptLanguageField;
|
|
138
|
+
/**
|
|
139
|
+
* Extract structured information about a browser and http version in the form of an object from httpBrowserString.
|
|
140
|
+
* @param httpBrowserString A string containing the browser name, version and http version, such as `chrome/88.0.4324.182|2`.
|
|
141
|
+
*/
|
|
142
|
+
private prepareHttpBrowserObject;
|
|
143
|
+
/**
|
|
144
|
+
* Extract structured information about a browser in the form of an object from browserString.
|
|
145
|
+
* @param browserString A string containing the browser name and version, e.g. `chrome/88.0.4324.182`.
|
|
146
|
+
*/
|
|
147
|
+
private prepareBrowserObject;
|
|
148
|
+
/**
|
|
149
|
+
* Returns a new object containing header names ordered by their appearance in the given browser.
|
|
150
|
+
* @param headers Non-normalized request headers
|
|
151
|
+
* @returns Correct header order for the given browser.
|
|
152
|
+
*/
|
|
153
|
+
private getOrderFromUserAgent;
|
|
154
|
+
private _browserVersionIsLesserOrEquals;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=header-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-generator.d.ts","sourceRoot":"","sources":["../src/header-generator.ts"],"names":[],"mappings":"AAUA,OAAO,EACH,kBAAkB,EAElB,2BAA2B,EAG3B,2BAA2B,EAC3B,iBAAiB,EACjB,uBAAuB,EAG1B,MAAM,aAAa,CAAC;AAYrB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;CAOvC,CAAC;AAEF;;GAEG;AACH,oBAAY,WAAW,GAAG,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAEjE;;GAEG;AACH,oBAAY,MAAM,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAEtD;;GAEG;AACH,oBAAY,eAAe,GAAG,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,WAAW,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACjC;;MAEE;IACF,IAAI,EAAE,WAAW,CAAC;IAClB;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;MAGE;IACF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,oBAAY,YAAY,GAAG,oBAAoB,EAAE,GAAG,WAAW,EAAE,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC;;;MAGE;IACF,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;MAIE;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB;;MAEE;IACF,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC;;MAEE;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;MAIE;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;MAGE;IACF,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;OAEG;IACH,IAAI,EAAE,WAAW,GAAG,OAAO,2BAA2B,CAAC;IACvD;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,oBAAY,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C;;EAEE;AACF,qBAAa,eAAe;IACxB,aAAa,EAAE,sBAAsB,CAAC;IAEtC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,OAAO,CAAC,qBAAqB,CAAM;IAEnC,OAAO,CAAC,sBAAsB,CAAM;IAEpC,OAAO,CAAC,cAAc,CAAsB;IAE5C;;MAEE;gBACU,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IAgCzD;;;;;MAKE;IACF,UAAU,CAAC,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM,EAAE,uBAAuB,GAAE,OAAY,GAAG,OAAO;IAqDzG;;;;MAIE;IACF,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,WAAsC,GAAG,OAAO;IAkBpF,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,uBAAuB;IA4C/B;;;MAGE;IACF,OAAO,CAAC,wBAAwB;IAiBhC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,+BAA+B;CAG1C"}
|
|
@@ -2,13 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HeaderGenerator = exports.headerGeneratorOptionsShape = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
// @ts-expect-error not a ts library
|
|
6
5
|
const generative_bayesian_network_1 = require("generative-bayesian-network");
|
|
7
6
|
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
8
7
|
const utils_1 = require("./utils");
|
|
9
8
|
const constants_1 = require("./constants");
|
|
10
|
-
const header_network_definition_json_1 = tslib_1.__importDefault(require("./data_files/header-network-definition.json"));
|
|
11
|
-
const input_network_definition_json_1 = tslib_1.__importDefault(require("./data_files/input-network-definition.json"));
|
|
12
9
|
const headers_order_json_1 = tslib_1.__importDefault(require("./data_files/headers-order.json"));
|
|
13
10
|
const browser_helper_file_json_1 = tslib_1.__importDefault(require("./data_files/browser-helper-file.json"));
|
|
14
11
|
const browserSpecificationShape = {
|
|
@@ -25,29 +22,14 @@ exports.headerGeneratorOptionsShape = {
|
|
|
25
22
|
httpVersion: ow_1.default.optional.string,
|
|
26
23
|
browserListQuery: ow_1.default.optional.string,
|
|
27
24
|
};
|
|
25
|
+
;
|
|
28
26
|
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
* or one of `chrome`, `edge`, `firefox` and `safari`.
|
|
32
|
-
* @param {string} browserListQuery - Browser generation query based on the real world data.
|
|
33
|
-
* For more info see the [query docs](https://github.com/browserslist/browserslist#full-list).
|
|
34
|
-
* If `browserListQuery` is passed the `browsers` array is ignored.
|
|
35
|
-
* @param {Array<string>} operatingSystems - List of operating systems to generate the headers for.
|
|
36
|
-
* The options are `windows`, `macos`, `linux`, `android` and `ios`.
|
|
37
|
-
* @param {Array<string>} devices - List of devices to generate the headers for. Options are `desktop` and `mobile`.
|
|
38
|
-
* @param {Array<string>} locales - List of at most 10 languages to include in the
|
|
39
|
-
* [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) request header
|
|
40
|
-
* in the language format accepted by that header, for example `en`, `en-US` or `de`.
|
|
41
|
-
* @param {string} httpVersion - Http version to be used to generate headers (the headers differ depending on the version).
|
|
42
|
-
* Can be either 1 or 2. Default value is 2.
|
|
43
|
-
*/
|
|
44
|
-
/**
|
|
45
|
-
* HeaderGenerator randomly generates realistic browser headers based on specified options.
|
|
46
|
-
*/
|
|
27
|
+
* Randomly generates realistic HTTP headers based on specified options.
|
|
28
|
+
*/
|
|
47
29
|
class HeaderGenerator {
|
|
48
30
|
/**
|
|
49
|
-
|
|
50
|
-
|
|
31
|
+
* @param options Default header generation options used - unless overridden.
|
|
32
|
+
*/
|
|
51
33
|
constructor(options = {}) {
|
|
52
34
|
Object.defineProperty(this, "globalOptions", {
|
|
53
35
|
enumerable: true,
|
|
@@ -94,31 +76,31 @@ class HeaderGenerator {
|
|
|
94
76
|
for (const browserString of browser_helper_file_json_1.default) {
|
|
95
77
|
// There are headers without user agents in the datasets we used to configure the generator. They should be disregarded.
|
|
96
78
|
if (browserString !== constants_1.MISSING_VALUE_DATASET_TOKEN) {
|
|
97
|
-
this.uniqueBrowsers.push(this.
|
|
79
|
+
this.uniqueBrowsers.push(this.prepareHttpBrowserObject(browserString));
|
|
98
80
|
}
|
|
99
81
|
}
|
|
100
|
-
this.inputGeneratorNetwork = new generative_bayesian_network_1.BayesianNetwork(
|
|
101
|
-
this.headerGeneratorNetwork = new generative_bayesian_network_1.BayesianNetwork(
|
|
82
|
+
this.inputGeneratorNetwork = new generative_bayesian_network_1.BayesianNetwork({ path: `${__dirname}/data_files/input-network-definition.zip` });
|
|
83
|
+
this.headerGeneratorNetwork = new generative_bayesian_network_1.BayesianNetwork({ path: `${__dirname}/data_files/header-network-definition.zip` });
|
|
102
84
|
}
|
|
103
85
|
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
86
|
+
* Generates a single set of ordered headers using a combination of the default options specified in the constructor
|
|
87
|
+
* and their possible overrides provided here.
|
|
88
|
+
* @param options Specifies options that should be overridden for this one call.
|
|
89
|
+
* @param requestDependentHeaders Specifies known values of headers dependent on the particular request.
|
|
90
|
+
*/
|
|
109
91
|
getHeaders(options = {}, requestDependentHeaders = {}) {
|
|
110
92
|
(0, ow_1.default)(options, 'HeaderGeneratorOptions', ow_1.default.object.exactShape(exports.headerGeneratorOptionsShape));
|
|
111
93
|
const headerOptions = { ...this.globalOptions, ...options };
|
|
112
94
|
const possibleAttributeValues = this._getPossibleAttributeValues(headerOptions);
|
|
113
95
|
// Generate a sample of input attributes consistent with the data used to create the definition files if possible.
|
|
114
96
|
const inputSample = this.inputGeneratorNetwork.generateConsistentSampleWhenPossible(possibleAttributeValues);
|
|
115
|
-
if (
|
|
97
|
+
if (Object.keys(inputSample).length === 0) {
|
|
116
98
|
throw new Error('No headers based on this input can be generated. Please relax or change some of the requirements you specified.');
|
|
117
99
|
}
|
|
118
100
|
// Generate the actual headers
|
|
119
101
|
const generatedSample = this.headerGeneratorNetwork.generateSample(inputSample);
|
|
120
102
|
// Manually fill the accept-language header with random ordering of the locales from input
|
|
121
|
-
const generatedHttpAndBrowser = this.
|
|
103
|
+
const generatedHttpAndBrowser = this.prepareHttpBrowserObject(generatedSample[constants_1.BROWSER_HTTP_NODE_NAME]);
|
|
122
104
|
let secFetchAttributeNames = constants_1.HTTP2_SEC_FETCH_ATTRIBUTES;
|
|
123
105
|
let acceptLanguageFieldName = 'accept-language';
|
|
124
106
|
if (generatedHttpAndBrowser.httpVersion !== '2') {
|
|
@@ -126,16 +108,18 @@ class HeaderGenerator {
|
|
|
126
108
|
secFetchAttributeNames = constants_1.HTTP1_SEC_FETCH_ATTRIBUTES;
|
|
127
109
|
}
|
|
128
110
|
generatedSample[acceptLanguageFieldName] = this._getAcceptLanguageField(headerOptions.locales);
|
|
111
|
+
const isChrome = generatedHttpAndBrowser.name === 'chrome';
|
|
112
|
+
const isFirefox = generatedHttpAndBrowser.name === 'firefox';
|
|
113
|
+
const isEdge = generatedHttpAndBrowser.name === 'edge';
|
|
114
|
+
const hasSecFetch = (isChrome && generatedHttpAndBrowser.version[0] >= 76)
|
|
115
|
+
|| (isFirefox && generatedHttpAndBrowser.version[0] >= 90)
|
|
116
|
+
|| (isEdge && generatedHttpAndBrowser.version[0] >= 79);
|
|
129
117
|
// Add fixed headers if needed
|
|
130
|
-
if (
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (generatedHttpAndBrowser.version[0] >= 80) {
|
|
136
|
-
generatedSample[secFetchAttributeNames.dest] = 'document';
|
|
137
|
-
}
|
|
138
|
-
}
|
|
118
|
+
if (hasSecFetch) {
|
|
119
|
+
generatedSample[secFetchAttributeNames.site] = 'same-site';
|
|
120
|
+
generatedSample[secFetchAttributeNames.mode] = 'navigate';
|
|
121
|
+
generatedSample[secFetchAttributeNames.user] = '?1';
|
|
122
|
+
generatedSample[secFetchAttributeNames.dest] = 'document';
|
|
139
123
|
}
|
|
140
124
|
for (const attribute of Object.keys(generatedSample)) {
|
|
141
125
|
if (attribute.startsWith('*') || generatedSample[attribute] === constants_1.MISSING_VALUE_DATASET_TOKEN)
|
|
@@ -148,11 +132,11 @@ class HeaderGenerator {
|
|
|
148
132
|
}, headers_order_json_1.default[generatedHttpAndBrowser.name]);
|
|
149
133
|
}
|
|
150
134
|
/**
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
orderHeaders(headers, order = this.
|
|
135
|
+
* Returns a new object that contains ordered headers.
|
|
136
|
+
* @param headers Specifies known values of headers dependent on the particular request.
|
|
137
|
+
* @param order An array of ordered header names, optional (will be deducted from `user-agent`).
|
|
138
|
+
*/
|
|
139
|
+
orderHeaders(headers, order = this.getOrderFromUserAgent(headers)) {
|
|
156
140
|
const orderedSample = {};
|
|
157
141
|
for (const attribute of order) {
|
|
158
142
|
if (attribute in headers) {
|
|
@@ -247,17 +231,16 @@ class HeaderGenerator {
|
|
|
247
231
|
}
|
|
248
232
|
/**
|
|
249
233
|
* Extract structured information about a browser and http version in the form of an object from httpBrowserString.
|
|
250
|
-
* @param
|
|
251
|
-
* @private
|
|
234
|
+
* @param httpBrowserString A string containing the browser name, version and http version, such as `chrome/88.0.4324.182|2`.
|
|
252
235
|
*/
|
|
253
|
-
|
|
236
|
+
prepareHttpBrowserObject(httpBrowserString) {
|
|
254
237
|
const [browserString, httpVersion] = httpBrowserString.split('|');
|
|
255
238
|
let browserObject;
|
|
256
239
|
if (browserString === constants_1.MISSING_VALUE_DATASET_TOKEN) {
|
|
257
240
|
browserObject = { name: constants_1.MISSING_VALUE_DATASET_TOKEN };
|
|
258
241
|
}
|
|
259
242
|
else {
|
|
260
|
-
browserObject = this.
|
|
243
|
+
browserObject = this.prepareBrowserObject(browserString);
|
|
261
244
|
}
|
|
262
245
|
return {
|
|
263
246
|
...browserObject,
|
|
@@ -266,11 +249,10 @@ class HeaderGenerator {
|
|
|
266
249
|
};
|
|
267
250
|
}
|
|
268
251
|
/**
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
_prepareBrowserObject(browserString) {
|
|
252
|
+
* Extract structured information about a browser in the form of an object from browserString.
|
|
253
|
+
* @param browserString A string containing the browser name and version, e.g. `chrome/88.0.4324.182`.
|
|
254
|
+
*/
|
|
255
|
+
prepareBrowserObject(browserString) {
|
|
274
256
|
const nameVersionSplit = browserString.split('/');
|
|
275
257
|
const versionSplit = nameVersionSplit[1].split('.');
|
|
276
258
|
const preparedVersion = [];
|
|
@@ -284,11 +266,11 @@ class HeaderGenerator {
|
|
|
284
266
|
};
|
|
285
267
|
}
|
|
286
268
|
/**
|
|
287
|
-
*
|
|
288
|
-
* @
|
|
289
|
-
* @
|
|
269
|
+
* Returns a new object containing header names ordered by their appearance in the given browser.
|
|
270
|
+
* @param headers Non-normalized request headers
|
|
271
|
+
* @returns Correct header order for the given browser.
|
|
290
272
|
*/
|
|
291
|
-
|
|
273
|
+
getOrderFromUserAgent(headers) {
|
|
292
274
|
const userAgent = (0, utils_1.getUserAgent)(headers);
|
|
293
275
|
const browser = (0, utils_1.getBrowser)(userAgent);
|
|
294
276
|
if (!browser) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-generator.js","sourceRoot":"","sources":["../src/header-generator.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|