@sectester/scan 0.36.2 → 0.37.0
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/README.md +4 -5
- package/package.json +1 -1
- package/src/DefaultDiscoveries.js +1 -2
- package/src/DefaultDiscoveries.js.map +1 -1
- package/src/DefaultScans.d.ts +0 -4
- package/src/DefaultScans.js +0 -24
- package/src/DefaultScans.js.map +1 -1
- package/src/Scans.d.ts +0 -4
- package/src/Scans.js.map +1 -1
- package/src/target/Body.d.ts +19 -0
- package/src/target/Body.js +165 -0
- package/src/target/Body.js.map +1 -0
- package/src/target/HeadersType.d.ts +1 -0
- package/src/target/HeadersType.js +3 -0
- package/src/target/HeadersType.js.map +1 -0
- package/src/target/QueryParamsType.d.ts +1 -0
- package/src/target/QueryParamsType.js +3 -0
- package/src/target/QueryParamsType.js.map +1 -0
- package/src/target/Target.d.ts +19 -26
- package/src/target/Target.js +36 -109
- package/src/target/Target.js.map +1 -1
- package/src/target/index.d.ts +3 -1
- package/src/target/index.js +3 -1
- package/src/target/index.js.map +1 -1
- package/src/utils/index.d.ts +0 -1
- package/src/utils/index.js +0 -1
- package/src/utils/index.js.map +1 -1
- package/src/target/body-parsers/BinaryBodyParser.d.ts +0 -6
- package/src/target/body-parsers/BinaryBodyParser.js +0 -14
- package/src/target/body-parsers/BinaryBodyParser.js.map +0 -1
- package/src/target/body-parsers/BodyParser.d.ts +0 -12
- package/src/target/body-parsers/BodyParser.js +0 -5
- package/src/target/body-parsers/BodyParser.js.map +0 -1
- package/src/target/body-parsers/FormDataBodyParser.d.ts +0 -9
- package/src/target/body-parsers/FormDataBodyParser.js +0 -63
- package/src/target/body-parsers/FormDataBodyParser.js.map +0 -1
- package/src/target/body-parsers/JsonBodyParser.d.ts +0 -7
- package/src/target/body-parsers/JsonBodyParser.js +0 -24
- package/src/target/body-parsers/JsonBodyParser.js.map +0 -1
- package/src/target/body-parsers/TextBodyParser.d.ts +0 -6
- package/src/target/body-parsers/TextBodyParser.js +0 -15
- package/src/target/body-parsers/TextBodyParser.js.map +0 -1
- package/src/target/body-parsers/UrlEncodedBodyParser.d.ts +0 -7
- package/src/target/body-parsers/UrlEncodedBodyParser.js +0 -25
- package/src/target/body-parsers/UrlEncodedBodyParser.js.map +0 -1
- package/src/target/body-parsers/index.d.ts +0 -2
- package/src/target/body-parsers/index.js +0 -6
- package/src/target/body-parsers/index.js.map +0 -1
- package/src/target/body-parsers/register.d.ts +0 -1
- package/src/target/body-parsers/register.js +0 -26
- package/src/target/body-parsers/register.js.map +0 -1
- package/src/utils/entries-to-list.d.ts +0 -4
- package/src/utils/entries-to-list.js +0 -10
- package/src/utils/entries-to-list.js.map +0 -1
package/README.md
CHANGED
|
@@ -123,7 +123,7 @@ const target = new Target({
|
|
|
123
123
|
|
|
124
124
|
#### query
|
|
125
125
|
|
|
126
|
-
- type: `
|
|
126
|
+
- type: `URLSearchParams | string | Record<string, string | readonly string[]>`
|
|
127
127
|
|
|
128
128
|
The query parameters to be sent with the request:
|
|
129
129
|
|
|
@@ -178,7 +178,7 @@ console.log(target.queryString); // a[0]=b&a[1]=c&a[2]=d
|
|
|
178
178
|
|
|
179
179
|
#### headers
|
|
180
180
|
|
|
181
|
-
- type: `Record<string, string | string[]>`
|
|
181
|
+
- type: `Headers | Record<string, string | string[]>`
|
|
182
182
|
|
|
183
183
|
The HTTP headers to be sent:
|
|
184
184
|
|
|
@@ -195,7 +195,7 @@ const target = new Target({
|
|
|
195
195
|
|
|
196
196
|
#### body
|
|
197
197
|
|
|
198
|
-
- type: `unknown
|
|
198
|
+
- type: `ArrayBuffer | AsyncIterable<Uint8Array> | Blob | FormData | NodeJS.ReadableStream | Iterable<Uint8Array> | NodeJS.ArrayBufferView | URLSearchParams | string | Record<string, unknown>`
|
|
199
199
|
|
|
200
200
|
The data to be sent as the request body. Makes sense only for `POST`, `PUT`, `PATCH`, and `DELETE`:
|
|
201
201
|
|
|
@@ -210,11 +210,10 @@ const target = new Target({
|
|
|
210
210
|
});
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
-
You can use `FormData` objects,
|
|
213
|
+
You can use `FormData` objects, as request body as well:
|
|
214
214
|
|
|
215
215
|
```ts
|
|
216
216
|
import { Target } from '@sectester/scan';
|
|
217
|
-
import FormData from 'form-data';
|
|
218
217
|
|
|
219
218
|
const form = new FormData();
|
|
220
219
|
form.append('greeting', 'Hello, world!');
|
package/package.json
CHANGED
|
@@ -10,7 +10,6 @@ let DefaultDiscoveries = class DefaultDiscoveries {
|
|
|
10
10
|
this.client = client;
|
|
11
11
|
}
|
|
12
12
|
async createEntrypoint(target, repeaterId) {
|
|
13
|
-
var _a;
|
|
14
13
|
let response = await this.client.request(`/api/v2/projects/${this.configuration.projectId}/entry-points`, {
|
|
15
14
|
method: 'POST',
|
|
16
15
|
body: JSON.stringify({
|
|
@@ -19,7 +18,7 @@ let DefaultDiscoveries = class DefaultDiscoveries {
|
|
|
19
18
|
method: target.method,
|
|
20
19
|
url: target.url,
|
|
21
20
|
headers: target.headers,
|
|
22
|
-
body:
|
|
21
|
+
body: await target.text()
|
|
23
22
|
}
|
|
24
23
|
}),
|
|
25
24
|
headers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultDiscoveries.js","sourceRoot":"","sources":["../../../../packages/scan/src/DefaultDiscoveries.ts"],"names":[],"mappings":";;;;AAEA,uCAA8C;AAC9C,0CAA2D;AAGpD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,aAA4B,EAE5B,MAAiB;QAFjB,kBAAa,GAAb,aAAa,CAAe;QAE5B,WAAM,GAAN,MAAM,CAAW;IACjC,CAAC;IAEG,KAAK,CAAC,gBAAgB,CAC3B,MAAc,EACd,UAAkB
|
|
1
|
+
{"version":3,"file":"DefaultDiscoveries.js","sourceRoot":"","sources":["../../../../packages/scan/src/DefaultDiscoveries.ts"],"names":[],"mappings":";;;;AAEA,uCAA8C;AAC9C,0CAA2D;AAGpD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,aAA4B,EAE5B,MAAiB;QAFjB,kBAAa,GAAb,aAAa,CAAe;QAE5B,WAAM,GAAN,MAAM,CAAW;IACjC,CAAC;IAEG,KAAK,CAAC,gBAAgB,CAC3B,MAAc,EACd,UAAkB;QAElB,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACtC,oBAAoB,IAAI,CAAC,aAAa,CAAC,SAAS,eAAe,EAC/D;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU;gBACV,OAAO,EAAE;oBACP,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE;iBAC1B;aACF,CAAC;YACF,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAW,CAAC;YAC5D,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;QAEvD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAvCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,qBAAU,GAAE;IAIR,mBAAA,IAAA,iBAAM,EAAC,gBAAS,CAAC,CAAA;6CADc,oBAAa;GAFpC,kBAAkB,CAuC9B"}
|
package/src/DefaultScans.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Scans } from './Scans';
|
|
2
2
|
import { Issue, ScanConfig, ScanState } from './models';
|
|
3
|
-
import { Target } from './target';
|
|
4
3
|
import { ApiClient, Configuration } from '@sectester/core';
|
|
5
4
|
export declare class DefaultScans implements Scans {
|
|
6
5
|
private readonly configuration;
|
|
@@ -13,7 +12,4 @@ export declare class DefaultScans implements Scans {
|
|
|
13
12
|
stopScan(id: string): Promise<void>;
|
|
14
13
|
deleteScan(id: string): Promise<void>;
|
|
15
14
|
getScan(id: string): Promise<ScanState>;
|
|
16
|
-
createEntrypoint(target: Target, repeaterId: string): Promise<{
|
|
17
|
-
id: string;
|
|
18
|
-
}>;
|
|
19
15
|
}
|
package/src/DefaultScans.js
CHANGED
|
@@ -69,30 +69,6 @@ let DefaultScans = class DefaultScans {
|
|
|
69
69
|
const result = (await response.json());
|
|
70
70
|
return result;
|
|
71
71
|
}
|
|
72
|
-
async createEntrypoint(target, repeaterId) {
|
|
73
|
-
var _a;
|
|
74
|
-
let response = await this.client.request(`/api/v2/projects/${this.configuration.projectId}/entry-points`, {
|
|
75
|
-
method: 'POST',
|
|
76
|
-
body: JSON.stringify({
|
|
77
|
-
repeaterId,
|
|
78
|
-
request: {
|
|
79
|
-
method: target.method,
|
|
80
|
-
url: target.url,
|
|
81
|
-
headers: target.headers,
|
|
82
|
-
body: (_a = target.postData) === null || _a === void 0 ? void 0 : _a.text
|
|
83
|
-
}
|
|
84
|
-
}),
|
|
85
|
-
headers: {
|
|
86
|
-
'content-type': 'application/json'
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
if (response.status === 409 && response.headers.has('location')) {
|
|
90
|
-
const location = response.headers.get('location');
|
|
91
|
-
response = await this.client.request(location);
|
|
92
|
-
}
|
|
93
|
-
const data = (await response.json());
|
|
94
|
-
return data;
|
|
95
|
-
}
|
|
96
72
|
};
|
|
97
73
|
exports.DefaultScans = DefaultScans;
|
|
98
74
|
exports.DefaultScans = DefaultScans = tslib_1.__decorate([
|
package/src/DefaultScans.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultScans.js","sourceRoot":"","sources":["../../../../packages/scan/src/DefaultScans.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"DefaultScans.js","sourceRoot":"","sources":["../../../../packages/scan/src/DefaultScans.ts"],"names":[],"mappings":"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"}
|
package/src/Scans.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Issue, ScanConfig, ScanState } from './models';
|
|
2
|
-
import { Target } from './target';
|
|
3
2
|
export interface Scans {
|
|
4
3
|
createScan(config: ScanConfig): Promise<{
|
|
5
4
|
id: string;
|
|
@@ -8,8 +7,5 @@ export interface Scans {
|
|
|
8
7
|
stopScan(id: string): Promise<void>;
|
|
9
8
|
deleteScan(id: string): Promise<void>;
|
|
10
9
|
getScan(id: string): Promise<ScanState>;
|
|
11
|
-
createEntrypoint(target: Target, repeaterId?: string): Promise<{
|
|
12
|
-
id: string;
|
|
13
|
-
}>;
|
|
14
10
|
}
|
|
15
11
|
export declare const Scans: unique symbol;
|
package/src/Scans.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scans.js","sourceRoot":"","sources":["../../../../packages/scan/src/Scans.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Scans.js","sourceRoot":"","sources":["../../../../packages/scan/src/Scans.ts"],"names":[],"mappings":";;;AAca,QAAA,KAAK,GAAkB,MAAM,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type BodyType = ArrayBuffer | AsyncIterable<Uint8Array> | Blob | FormData | NodeJS.ReadableStream | Iterable<Uint8Array> | NodeJS.ArrayBufferView | URLSearchParams | null | string | Record<string, unknown>;
|
|
2
|
+
export declare class Body {
|
|
3
|
+
private readonly data;
|
|
4
|
+
constructor(data: BodyType);
|
|
5
|
+
private static fromArrayBuffer;
|
|
6
|
+
private static fromAsyncIterable;
|
|
7
|
+
private static fromBlob;
|
|
8
|
+
private static fromFormData;
|
|
9
|
+
private static fromIterable;
|
|
10
|
+
private static fromArrayBufferView;
|
|
11
|
+
private static fromURLSearchParams;
|
|
12
|
+
private static fromReadableStream;
|
|
13
|
+
text(): Promise<string | undefined>;
|
|
14
|
+
type(): string;
|
|
15
|
+
private detectStringMimeType;
|
|
16
|
+
private isJson;
|
|
17
|
+
private isXml;
|
|
18
|
+
private isPlainObject;
|
|
19
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Body = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const node_stream_1 = require("node:stream");
|
|
7
|
+
class Body {
|
|
8
|
+
constructor(data) {
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
static fromArrayBuffer(data) {
|
|
12
|
+
return new TextDecoder().decode(data);
|
|
13
|
+
}
|
|
14
|
+
static async fromAsyncIterable(data) {
|
|
15
|
+
const chunks = [];
|
|
16
|
+
for await (const chunk of data) {
|
|
17
|
+
chunks.push(chunk);
|
|
18
|
+
}
|
|
19
|
+
return new TextDecoder().decode(Buffer.concat(chunks));
|
|
20
|
+
}
|
|
21
|
+
static async fromBlob(data) {
|
|
22
|
+
const arrayBuffer = await data.arrayBuffer();
|
|
23
|
+
return new TextDecoder().decode(arrayBuffer);
|
|
24
|
+
}
|
|
25
|
+
static async fromFormData(data) {
|
|
26
|
+
const array = new Uint32Array(10);
|
|
27
|
+
const boundary = (0, utils_1.escape)(`----BrightFormBoundary${(0, node_crypto_1.getRandomValues)(array)}`);
|
|
28
|
+
let formDataString = '';
|
|
29
|
+
for (const [key, value] of data) {
|
|
30
|
+
formDataString += `--${boundary}\r\n`;
|
|
31
|
+
if (typeof value === 'string') {
|
|
32
|
+
formDataString += `content-disposition: form-data; name="${key}"\r\n\r\n`;
|
|
33
|
+
formDataString += `${value}\r\n`;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
formDataString += `content-disposition: form-data; name="${value.name}"; filename="${value.type}"\r\n`;
|
|
37
|
+
formDataString += `content-type: ${value.type}\r\n\r\n`;
|
|
38
|
+
formDataString += `${await this.fromBlob(value)}\r\n`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
formDataString += `--${boundary}--\r\n`;
|
|
42
|
+
return formDataString;
|
|
43
|
+
}
|
|
44
|
+
static fromIterable(data) {
|
|
45
|
+
const chunks = [];
|
|
46
|
+
for (const chunk of data) {
|
|
47
|
+
chunks.push(chunk);
|
|
48
|
+
}
|
|
49
|
+
return new TextDecoder().decode(Buffer.concat(chunks));
|
|
50
|
+
}
|
|
51
|
+
static fromArrayBufferView(data) {
|
|
52
|
+
return new TextDecoder().decode(data);
|
|
53
|
+
}
|
|
54
|
+
static fromURLSearchParams(data) {
|
|
55
|
+
return data.toString();
|
|
56
|
+
}
|
|
57
|
+
static async fromReadableStream(data) {
|
|
58
|
+
const chunks = [];
|
|
59
|
+
for await (const chunk of data) {
|
|
60
|
+
chunks.push(Buffer.from(chunk));
|
|
61
|
+
}
|
|
62
|
+
return new TextDecoder().decode(Buffer.concat(chunks));
|
|
63
|
+
}
|
|
64
|
+
// eslint-disable-next-line complexity
|
|
65
|
+
async text() {
|
|
66
|
+
if (!this.data) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (typeof this.data === 'string') {
|
|
70
|
+
return this.data;
|
|
71
|
+
}
|
|
72
|
+
if (this.data instanceof ArrayBuffer) {
|
|
73
|
+
return Body.fromArrayBuffer(this.data);
|
|
74
|
+
}
|
|
75
|
+
if (this.data instanceof Blob) {
|
|
76
|
+
return Body.fromBlob(this.data);
|
|
77
|
+
}
|
|
78
|
+
if (this.data instanceof FormData) {
|
|
79
|
+
return Body.fromFormData(this.data);
|
|
80
|
+
}
|
|
81
|
+
if (this.data instanceof URLSearchParams) {
|
|
82
|
+
return Body.fromURLSearchParams(this.data);
|
|
83
|
+
}
|
|
84
|
+
if (ArrayBuffer.isView(this.data)) {
|
|
85
|
+
return Body.fromArrayBufferView(this.data);
|
|
86
|
+
}
|
|
87
|
+
if (typeof Object(this.data)[Symbol.iterator] === 'function') {
|
|
88
|
+
return Body.fromIterable(this.data);
|
|
89
|
+
}
|
|
90
|
+
if ((0, node_stream_1.isReadable)(this.data)) {
|
|
91
|
+
return Body.fromReadableStream(this.data);
|
|
92
|
+
}
|
|
93
|
+
if (typeof Object(this.data)[Symbol.asyncIterator] === 'function') {
|
|
94
|
+
return Body.fromAsyncIterable(this.data);
|
|
95
|
+
}
|
|
96
|
+
if (typeof this.data === 'object') {
|
|
97
|
+
return JSON.stringify(this.data);
|
|
98
|
+
}
|
|
99
|
+
throw new Error('Unsupported data type');
|
|
100
|
+
}
|
|
101
|
+
type() {
|
|
102
|
+
var _a;
|
|
103
|
+
if (this.data === null) {
|
|
104
|
+
return 'text/plain';
|
|
105
|
+
}
|
|
106
|
+
if (typeof this.data === 'string') {
|
|
107
|
+
return this.detectStringMimeType(this.data);
|
|
108
|
+
}
|
|
109
|
+
if (this.data instanceof FormData) {
|
|
110
|
+
return 'multipart/form-data';
|
|
111
|
+
}
|
|
112
|
+
if (this.data instanceof URLSearchParams) {
|
|
113
|
+
return 'application/x-www-form-urlencoded';
|
|
114
|
+
}
|
|
115
|
+
if (this.data instanceof Blob) {
|
|
116
|
+
return (_a = this.data.type) !== null && _a !== void 0 ? _a : 'application/octet-stream';
|
|
117
|
+
}
|
|
118
|
+
if (this.isPlainObject(this.data)) {
|
|
119
|
+
return 'application/json';
|
|
120
|
+
}
|
|
121
|
+
return 'application/octet-stream';
|
|
122
|
+
}
|
|
123
|
+
detectStringMimeType(data) {
|
|
124
|
+
const trimmed = data.trim();
|
|
125
|
+
if (this.isJson(trimmed)) {
|
|
126
|
+
return 'application/json';
|
|
127
|
+
}
|
|
128
|
+
if (this.isXml(trimmed)) {
|
|
129
|
+
return 'application/xml';
|
|
130
|
+
}
|
|
131
|
+
return 'text/plain';
|
|
132
|
+
}
|
|
133
|
+
isJson(text) {
|
|
134
|
+
if (!((text.startsWith('{') && text.endsWith('}')) ||
|
|
135
|
+
(text.startsWith('[') && text.endsWith(']')))) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
JSON.parse(text);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
isXml(text) {
|
|
147
|
+
return (text.startsWith('<?xml') ||
|
|
148
|
+
(text.startsWith('<') &&
|
|
149
|
+
!text.startsWith('<!DOCTYPE html') &&
|
|
150
|
+
!text.startsWith('<!--') &&
|
|
151
|
+
text.includes('</') &&
|
|
152
|
+
text.endsWith('>')));
|
|
153
|
+
}
|
|
154
|
+
isPlainObject(data) {
|
|
155
|
+
return (typeof data === 'object' &&
|
|
156
|
+
data !== null &&
|
|
157
|
+
!(data instanceof ArrayBuffer) &&
|
|
158
|
+
!ArrayBuffer.isView(data) &&
|
|
159
|
+
!(Symbol.iterator in data) &&
|
|
160
|
+
!(Symbol.asyncIterator in data) &&
|
|
161
|
+
!(0, node_stream_1.isReadable)(data));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.Body = Body;
|
|
165
|
+
//# sourceMappingURL=Body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Body.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/Body.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type HeadersType = string[][] | Record<string, string | readonly string[]> | Headers;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadersType.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/HeadersType.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type QueryParamsType = URLSearchParams | string | Record<string, string | readonly string[]> | Iterable<[string, string]> | readonly [string, string][];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryParamsType.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/QueryParamsType.ts"],"names":[],"mappings":""}
|
package/src/target/Target.d.ts
CHANGED
|
@@ -1,47 +1,40 @@
|
|
|
1
1
|
import { HttpMethod } from '../models';
|
|
2
|
-
import {
|
|
2
|
+
import { BodyType } from './Body';
|
|
3
|
+
import { HeadersType } from './HeadersType';
|
|
4
|
+
import { QueryParamsType } from './QueryParamsType';
|
|
3
5
|
export interface TargetOptions {
|
|
4
6
|
url: string;
|
|
5
|
-
query?:
|
|
6
|
-
body?:
|
|
7
|
+
query?: QueryParamsType;
|
|
8
|
+
body?: BodyType;
|
|
7
9
|
method?: HttpMethod | string;
|
|
8
|
-
headers?:
|
|
9
|
-
serializeQuery?(params:
|
|
10
|
+
headers?: HeadersType;
|
|
11
|
+
serializeQuery?(params: QueryParamsType): string;
|
|
10
12
|
}
|
|
11
13
|
export declare class Target implements TargetOptions {
|
|
12
|
-
private _serializeQuery;
|
|
13
|
-
get serializeQuery(): (params: URLSearchParams | Record<string, string | string[]>) => string;
|
|
14
14
|
private _parsedURL;
|
|
15
15
|
get parsedURL(): URL;
|
|
16
|
-
private
|
|
16
|
+
private _cachedUrl?;
|
|
17
17
|
get url(): string;
|
|
18
18
|
private set url(value);
|
|
19
19
|
private _method;
|
|
20
20
|
get method(): HttpMethod;
|
|
21
|
-
set method(value
|
|
21
|
+
private set method(value);
|
|
22
22
|
private _queryString?;
|
|
23
|
-
get queryString(): string;
|
|
24
|
-
private _queryParameters?;
|
|
25
|
-
get queryParameters(): QueryString[];
|
|
26
23
|
private _query?;
|
|
27
|
-
get
|
|
24
|
+
get queryString(): string;
|
|
25
|
+
get query(): QueryParamsType;
|
|
28
26
|
private set query(value);
|
|
29
|
-
private
|
|
30
|
-
private _headerParameters?;
|
|
31
|
-
get headerParameters(): Header[];
|
|
27
|
+
private _parsedHeaders;
|
|
32
28
|
private _headers?;
|
|
33
|
-
get headers():
|
|
29
|
+
get headers(): HeadersType;
|
|
34
30
|
private set headers(value);
|
|
35
|
-
private _postData;
|
|
36
|
-
get postData(): PostData | undefined;
|
|
37
31
|
private _body?;
|
|
38
|
-
|
|
32
|
+
private _parsedBody?;
|
|
33
|
+
get body(): BodyType | undefined;
|
|
39
34
|
private set body(value);
|
|
40
|
-
|
|
41
|
-
get
|
|
35
|
+
private readonly _serializeQuery;
|
|
36
|
+
get serializeQuery(): (params: QueryParamsType) => string;
|
|
42
37
|
constructor({ url, body, query, headers, serializeQuery, method }: TargetOptions);
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
private getHeaderValue;
|
|
46
|
-
private computeHeaderValue;
|
|
38
|
+
text(): Promise<string | undefined>;
|
|
39
|
+
private readonly defaultSerializeQuery;
|
|
47
40
|
}
|
package/src/target/Target.js
CHANGED
|
@@ -2,33 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Target = void 0;
|
|
4
4
|
const models_1 = require("../models");
|
|
5
|
-
const
|
|
6
|
-
const body_parsers_1 = require("./body-parsers");
|
|
5
|
+
const Body_1 = require("./Body");
|
|
7
6
|
const core_1 = require("@har-sdk/core");
|
|
8
|
-
const core_2 = require("@sectester/core");
|
|
9
|
-
const tsyringe_1 = require("tsyringe");
|
|
10
|
-
const url_1 = require("url");
|
|
11
7
|
class Target {
|
|
12
|
-
get serializeQuery() {
|
|
13
|
-
return this._serializeQuery;
|
|
14
|
-
}
|
|
15
8
|
get parsedURL() {
|
|
16
9
|
return this._parsedURL;
|
|
17
10
|
}
|
|
18
11
|
get url() {
|
|
19
|
-
if (!this.
|
|
20
|
-
this.
|
|
21
|
-
fragment: false
|
|
22
|
-
});
|
|
12
|
+
if (!this._cachedUrl) {
|
|
13
|
+
this._cachedUrl = this._parsedURL.toString();
|
|
23
14
|
}
|
|
24
|
-
return this.
|
|
15
|
+
return this._cachedUrl;
|
|
25
16
|
}
|
|
26
17
|
set url(value) {
|
|
27
18
|
this._parsedURL = new URL((0, core_1.normalizeUrl)(value));
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
delete this._queryParameters;
|
|
19
|
+
this._cachedUrl = undefined;
|
|
20
|
+
this._query = undefined;
|
|
21
|
+
this._queryString = undefined;
|
|
32
22
|
}
|
|
33
23
|
get method() {
|
|
34
24
|
return this._method;
|
|
@@ -39,127 +29,64 @@ class Target {
|
|
|
39
29
|
get queryString() {
|
|
40
30
|
if (!this._queryString) {
|
|
41
31
|
const params = this._query || this._parsedURL.search;
|
|
42
|
-
this._queryString =
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
this._queryString =
|
|
33
|
+
typeof params !== 'string'
|
|
34
|
+
? this.serializeQuery(params)
|
|
35
|
+
: params.replace(/^\?/, '');
|
|
45
36
|
}
|
|
46
37
|
return this._queryString;
|
|
47
38
|
}
|
|
48
|
-
get queryParameters() {
|
|
49
|
-
var _a;
|
|
50
|
-
if (!this._queryParameters) {
|
|
51
|
-
this._queryParameters = (0, utils_1.entriesToList)(new URLSearchParams(this.queryString));
|
|
52
|
-
}
|
|
53
|
-
return (_a = this._queryParameters) !== null && _a !== void 0 ? _a : [];
|
|
54
|
-
}
|
|
55
39
|
get query() {
|
|
56
40
|
var _a;
|
|
57
41
|
return (_a = this._query) !== null && _a !== void 0 ? _a : '';
|
|
58
42
|
}
|
|
59
43
|
set query(queryString) {
|
|
60
44
|
this._query = queryString;
|
|
45
|
+
this._queryString = undefined;
|
|
61
46
|
this._parsedURL.search = this.queryString;
|
|
62
|
-
|
|
63
|
-
get headerParameters() {
|
|
64
|
-
var _a, _b;
|
|
65
|
-
if (!((_a = this._headerParameters) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
66
|
-
this._headerParameters = (0, utils_1.entriesToList)(Object.entries(this.headers));
|
|
67
|
-
}
|
|
68
|
-
return (_b = this._headerParameters) !== null && _b !== void 0 ? _b : [];
|
|
47
|
+
this._cachedUrl = undefined;
|
|
69
48
|
}
|
|
70
49
|
get headers() {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
set headers(headers) {
|
|
75
|
-
this._headers = headers;
|
|
76
|
-
this._headerValues.clear();
|
|
77
|
-
delete this._headerParameters;
|
|
78
|
-
}
|
|
79
|
-
get postData() {
|
|
80
|
-
var _a;
|
|
81
|
-
if (!this._postData && (0, core_2.isPresent)(this.body)) {
|
|
82
|
-
const parsedBody = (_a = tsyringe_1.container
|
|
83
|
-
.resolveAll(body_parsers_1.BodyParser)
|
|
84
|
-
.find(x => x.canParse(this))) === null || _a === void 0 ? void 0 : _a.parse(this);
|
|
85
|
-
if (parsedBody) {
|
|
86
|
-
this.setContentTypeIfUnset(parsedBody.contentType);
|
|
87
|
-
this._postData = {
|
|
88
|
-
text: parsedBody.text,
|
|
89
|
-
params: parsedBody.params,
|
|
90
|
-
mimeType: parsedBody.contentType
|
|
91
|
-
};
|
|
50
|
+
if (!this._headers) {
|
|
51
|
+
if (!this._parsedHeaders.has('content-type') && this._parsedBody) {
|
|
52
|
+
this._parsedHeaders.set('content-type', this._parsedBody.type());
|
|
92
53
|
}
|
|
54
|
+
this._headers = Object.fromEntries(this._parsedHeaders);
|
|
93
55
|
}
|
|
94
|
-
return this.
|
|
56
|
+
return this._headers;
|
|
57
|
+
}
|
|
58
|
+
set headers(value) {
|
|
59
|
+
this._parsedHeaders = new Headers(value);
|
|
60
|
+
delete this._headers;
|
|
95
61
|
}
|
|
96
62
|
get body() {
|
|
97
63
|
return this._body;
|
|
98
64
|
}
|
|
99
65
|
set body(value) {
|
|
100
66
|
this._body = value;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
get contentType() {
|
|
104
|
-
return this.getHeaderValue('content-type');
|
|
105
|
-
}
|
|
106
|
-
get httpVersion() {
|
|
107
|
-
const version = this.getHeaderValue('version') || this.getHeaderValue(':version');
|
|
108
|
-
if (version) {
|
|
109
|
-
return version;
|
|
67
|
+
if (value !== undefined) {
|
|
68
|
+
this._parsedBody = new Body_1.Body(value);
|
|
110
69
|
}
|
|
111
|
-
|
|
70
|
+
}
|
|
71
|
+
get serializeQuery() {
|
|
72
|
+
return this._serializeQuery;
|
|
112
73
|
}
|
|
113
74
|
constructor({ url, body, query, headers = {}, serializeQuery, method = models_1.HttpMethod.GET }) {
|
|
114
|
-
this.
|
|
75
|
+
this.defaultSerializeQuery = (params) => new URLSearchParams(params).toString();
|
|
115
76
|
this.url = url;
|
|
116
77
|
this.method = (0, models_1.isHttpMethod)(method) ? method : models_1.HttpMethod.GET;
|
|
117
|
-
this.body = body;
|
|
118
78
|
this.headers = headers;
|
|
119
|
-
this._serializeQuery =
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
toHarRequest() {
|
|
124
|
-
return {
|
|
125
|
-
postData: this.postData,
|
|
126
|
-
headers: [...this.headerParameters],
|
|
127
|
-
method: this.method,
|
|
128
|
-
url: this.url,
|
|
129
|
-
httpVersion: this.httpVersion,
|
|
130
|
-
queryString: [...this.queryParameters],
|
|
131
|
-
cookies: [],
|
|
132
|
-
headersSize: -1,
|
|
133
|
-
bodySize: -1
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
setContentTypeIfUnset(contentType) {
|
|
137
|
-
if (!this.contentType) {
|
|
138
|
-
this.headers = {
|
|
139
|
-
...this.headers,
|
|
140
|
-
'content-type': contentType
|
|
141
|
-
};
|
|
79
|
+
this._serializeQuery = serializeQuery !== null && serializeQuery !== void 0 ? serializeQuery : this.defaultSerializeQuery;
|
|
80
|
+
if (body !== undefined) {
|
|
81
|
+
this.body = body;
|
|
142
82
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (!this._headerValues.has(headerName)) {
|
|
146
|
-
this._headerValues.set(headerName, this.computeHeaderValue(headerName));
|
|
83
|
+
if (query) {
|
|
84
|
+
this.query = query;
|
|
147
85
|
}
|
|
148
|
-
return this._headerValues.get(headerName);
|
|
149
86
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
.filter(({ name }) => name.toLowerCase() === normalizedName)
|
|
154
|
-
.map(({ value }) => value);
|
|
155
|
-
if (!values.length) {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
// Set-Cookie values should be separated by '\n', not comma, otherwise cookies could not be parsed.
|
|
159
|
-
if (normalizedName === 'set-cookie') {
|
|
160
|
-
return values.join('\n');
|
|
161
|
-
}
|
|
162
|
-
return values.join(', ');
|
|
87
|
+
async text() {
|
|
88
|
+
var _a;
|
|
89
|
+
return (_a = this._parsedBody) === null || _a === void 0 ? void 0 : _a.text();
|
|
163
90
|
}
|
|
164
91
|
}
|
|
165
92
|
exports.Target = Target;
|
package/src/target/Target.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Target.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/Target.ts"],"names":[],"mappings":";;;AAAA,sCAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"Target.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/Target.ts"],"names":[],"mappings":"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"}
|
package/src/target/index.d.ts
CHANGED
package/src/target/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./
|
|
4
|
+
tslib_1.__exportStar(require("./Body"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./HeadersType"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./QueryParamsType"), exports);
|
|
5
7
|
tslib_1.__exportStar(require("./Target"), exports);
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/src/target/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/scan/src/target/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,wDAA8B;AAC9B,4DAAkC;AAClC,mDAAyB"}
|
package/src/utils/index.d.ts
CHANGED
package/src/utils/index.js
CHANGED
package/src/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/scan/src/utils/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/scan/src/utils/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BinaryBodyParser = void 0;
|
|
4
|
-
class BinaryBodyParser {
|
|
5
|
-
canParse(target) {
|
|
6
|
-
return ArrayBuffer.isView(target.body);
|
|
7
|
-
}
|
|
8
|
-
parse({ contentType, body }) {
|
|
9
|
-
const text = Buffer.from(body).toString();
|
|
10
|
-
return { text, contentType: contentType !== null && contentType !== void 0 ? contentType : 'application/octet-stream' };
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.BinaryBodyParser = BinaryBodyParser;
|
|
14
|
-
//# sourceMappingURL=BinaryBodyParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryBodyParser.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/BinaryBodyParser.ts"],"names":[],"mappings":";;;AAGA,MAAa,gBAAgB;IACpB,QAAQ,CAAC,MAAc;QAC5B,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAU;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAuB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE7D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,0BAA0B,EAAE,CAAC;IAC1E,CAAC;CACF;AAVD,4CAUC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Target } from '../Target';
|
|
2
|
-
import { Param } from '@har-sdk/core';
|
|
3
|
-
export interface ParsedBody {
|
|
4
|
-
text: string;
|
|
5
|
-
contentType: string;
|
|
6
|
-
params?: Param[];
|
|
7
|
-
}
|
|
8
|
-
export interface BodyParser {
|
|
9
|
-
canParse(target: Target): boolean;
|
|
10
|
-
parse(target: Target): ParsedBody | undefined;
|
|
11
|
-
}
|
|
12
|
-
export declare const BodyParser: unique symbol;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BodyParser.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/BodyParser.ts"],"names":[],"mappings":";;;AAea,QAAA,UAAU,GAAkB,MAAM,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { BodyParser, ParsedBody } from './BodyParser';
|
|
2
|
-
import { Target } from '../Target';
|
|
3
|
-
export declare class FormDataBodyParser implements BodyParser {
|
|
4
|
-
private readonly MIME_TYPE_REGEXP;
|
|
5
|
-
private readonly FORM_DATA_KEY_VALUE_REGEXP;
|
|
6
|
-
canParse(target: Target): boolean;
|
|
7
|
-
parse({ body, contentType }: Target): ParsedBody;
|
|
8
|
-
private parseMultipartFormDataParameters;
|
|
9
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FormDataBodyParser = void 0;
|
|
4
|
-
const utils_1 = require("../../utils");
|
|
5
|
-
const core_1 = require("@sectester/core");
|
|
6
|
-
class FormDataBodyParser {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.MIME_TYPE_REGEXP = /^multipart\/form-data\s*;\s*boundary\s*=\s*(\S+)\s*$/i;
|
|
9
|
-
this.FORM_DATA_KEY_VALUE_REGEXP = new RegExp(
|
|
10
|
-
// Header with an optional file name.
|
|
11
|
-
'^\\r\\ncontent-disposition\\s*:\\s*form-data\\s*;\\s*name="([^"]*)"(?:\\s*;\\s*filename="([^"]*)")?' +
|
|
12
|
-
// Optional secondary header with the content type.
|
|
13
|
-
'(?:\\r\\ncontent-type\\s*:\\s*([^\\r\\n]*))?' +
|
|
14
|
-
// Padding.
|
|
15
|
-
'\\r\\n\\r\\n' +
|
|
16
|
-
// Value
|
|
17
|
-
'(.*)' +
|
|
18
|
-
// Padding.
|
|
19
|
-
'\\r\\n$', 'is');
|
|
20
|
-
}
|
|
21
|
-
canParse(target) {
|
|
22
|
-
var _a;
|
|
23
|
-
return ((0, core_1.isFormData)(target.body) ||
|
|
24
|
-
((0, core_1.isString)(target.body) &&
|
|
25
|
-
this.MIME_TYPE_REGEXP.test((_a = target.contentType) !== null && _a !== void 0 ? _a : '')));
|
|
26
|
-
}
|
|
27
|
-
parse({ body, contentType = 'multipart/form-data' }) {
|
|
28
|
-
var _a;
|
|
29
|
-
let text = '';
|
|
30
|
-
if ((0, core_1.isString)(body)) {
|
|
31
|
-
text = body;
|
|
32
|
-
}
|
|
33
|
-
else if ((0, core_1.isFormData)(body)) {
|
|
34
|
-
contentType = body.getHeaders()['content-type'];
|
|
35
|
-
text = body.getBuffer().toString();
|
|
36
|
-
}
|
|
37
|
-
const [, boundary] = (_a = contentType.match(this.MIME_TYPE_REGEXP)) !== null && _a !== void 0 ? _a : [];
|
|
38
|
-
const params = boundary
|
|
39
|
-
? this.parseMultipartFormDataParameters(text, boundary)
|
|
40
|
-
: [];
|
|
41
|
-
return {
|
|
42
|
-
text,
|
|
43
|
-
params,
|
|
44
|
-
contentType
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
parseMultipartFormDataParameters(data, boundary) {
|
|
48
|
-
const sanitizedBoundary = (0, utils_1.escape)(boundary);
|
|
49
|
-
const fields = data.split(
|
|
50
|
-
// eslint-disable-next-line no-useless-escape
|
|
51
|
-
new RegExp(`--${sanitizedBoundary}(?:--\s*$)?`, 'g'));
|
|
52
|
-
return fields.reduce((result, field) => {
|
|
53
|
-
const [match, name, fileName, contentType, value] = field.match(this.FORM_DATA_KEY_VALUE_REGEXP) || [];
|
|
54
|
-
if (!match) {
|
|
55
|
-
return result;
|
|
56
|
-
}
|
|
57
|
-
result.push({ name, value, fileName, contentType });
|
|
58
|
-
return result;
|
|
59
|
-
}, []);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
exports.FormDataBodyParser = FormDataBodyParser;
|
|
63
|
-
//# sourceMappingURL=FormDataBodyParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormDataBodyParser.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/FormDataBodyParser.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,0CAAuD;AAGvD,MAAa,kBAAkB;IAA/B;QACmB,qBAAgB,GAC/B,uDAAuD,CAAC;QACzC,+BAA0B,GAAG,IAAI,MAAM;QACtD,qCAAqC;QACrC,qGAAqG;YACnG,mDAAmD;YACnD,8CAA8C;YAC9C,WAAW;YACX,cAAc;YACd,QAAQ;YACR,MAAM;YACN,WAAW;YACX,SAAS,EACX,IAAI,CACL,CAAC;IA4DJ,CAAC;IA1DQ,QAAQ,CAAC,MAAc;;QAC5B,OAAO,CACL,IAAA,iBAAU,EAAC,MAAM,CAAC,IAAI,CAAC;YACvB,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,IAAI,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAA,MAAM,CAAC,WAAW,mCAAI,EAAE,CAAC,CAAC,CACxD,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,EACX,IAAI,EACJ,WAAW,GAAG,qBAAqB,EAC5B;;QACP,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;QACrC,CAAC;QAED,MAAM,CAAC,EAAE,QAAQ,CAAC,GAChB,MAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,mCAAI,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,QAAQ,CAAC;YACvD,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,IAAI;YACJ,MAAM;YACN,WAAW;SACZ,CAAC;IACJ,CAAC;IAEO,gCAAgC,CACtC,IAAY,EACZ,QAAgB;QAEhB,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAa,IAAI,CAAC,KAAK;QACjC,6CAA6C;QAC7C,IAAI,MAAM,CAAC,KAAK,iBAAiB,aAAa,EAAE,GAAG,CAAC,CACrD,CAAC;QAEF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAe,EAAE,KAAa,EAAW,EAAE;YAC/D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,GAC/C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;YAErD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAEpD,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF;AA3ED,gDA2EC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { BodyParser, ParsedBody } from './BodyParser';
|
|
2
|
-
import { Target } from '../Target';
|
|
3
|
-
export declare class JsonBodyParser implements BodyParser {
|
|
4
|
-
private readonly MIME_TYPE_REGEXP;
|
|
5
|
-
canParse(target: Target): boolean;
|
|
6
|
-
parse(target: Target): ParsedBody;
|
|
7
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JsonBodyParser = void 0;
|
|
4
|
-
const core_1 = require("@sectester/core");
|
|
5
|
-
class JsonBodyParser {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.MIME_TYPE_REGEXP = /^application\/json[-+\w\d]*?\s*(;.*)?$/i;
|
|
8
|
-
}
|
|
9
|
-
canParse(target) {
|
|
10
|
-
var _a;
|
|
11
|
-
return ((0, core_1.isObject)(target.body) ||
|
|
12
|
-
((0, core_1.isString)(target.body) &&
|
|
13
|
-
this.MIME_TYPE_REGEXP.test((_a = target.contentType) !== null && _a !== void 0 ? _a : '')));
|
|
14
|
-
}
|
|
15
|
-
parse(target) {
|
|
16
|
-
var _a;
|
|
17
|
-
const text = (0, core_1.isString)(target.body)
|
|
18
|
-
? target.body
|
|
19
|
-
: JSON.stringify(target.body);
|
|
20
|
-
return { text, contentType: (_a = target.contentType) !== null && _a !== void 0 ? _a : 'application/json' };
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
exports.JsonBodyParser = JsonBodyParser;
|
|
24
|
-
//# sourceMappingURL=JsonBodyParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JsonBodyParser.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/JsonBodyParser.ts"],"names":[],"mappings":";;;AAEA,0CAAqD;AAErD,MAAa,cAAc;IAA3B;QACmB,qBAAgB,GAAG,yCAAyC,CAAC;IAiBhF,CAAC;IAfQ,QAAQ,CAAC,MAAc;;QAC5B,OAAO,CACL,IAAA,eAAQ,EAAC,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,IAAI,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAA,MAAM,CAAC,WAAW,mCAAI,EAAE,CAAC,CAAC,CACxD,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,MAAc;;QACzB,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,MAAM,CAAC,IAAI,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAA,MAAM,CAAC,WAAW,mCAAI,kBAAkB,EAAE,CAAC;IACzE,CAAC;CACF;AAlBD,wCAkBC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TextBodyParser = void 0;
|
|
4
|
-
const core_1 = require("@sectester/core");
|
|
5
|
-
class TextBodyParser {
|
|
6
|
-
canParse({ body }) {
|
|
7
|
-
return (0, core_1.isDate)(body) || (0, core_1.isBoolean)(body) || (0, core_1.isNumber)(body) || (0, core_1.isString)(body);
|
|
8
|
-
}
|
|
9
|
-
parse({ body, contentType = 'text/plain' }) {
|
|
10
|
-
const text = body.toString();
|
|
11
|
-
return { text, contentType };
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.TextBodyParser = TextBodyParser;
|
|
15
|
-
//# sourceMappingURL=TextBodyParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextBodyParser.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/TextBodyParser.ts"],"names":[],"mappings":";;;AAEA,0CAAwE;AAExE,MAAa,cAAc;IAClB,QAAQ,CAAC,EAAE,IAAI,EAAU;QAC9B,OAAO,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,IAAA,gBAAS,EAAC,IAAI,CAAC,IAAI,IAAA,eAAQ,EAAC,IAAI,CAAC,IAAI,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;IAEM,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,YAAY,EAAU;QACvD,MAAM,IAAI,GAAI,IAAY,CAAC,QAAQ,EAAE,CAAC;QAEtC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;CACF;AAVD,wCAUC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { BodyParser, ParsedBody } from './BodyParser';
|
|
2
|
-
import { Target } from '../Target';
|
|
3
|
-
export declare class UrlEncodedBodyParser implements BodyParser {
|
|
4
|
-
private readonly MIME_TYPE_REGEXP;
|
|
5
|
-
canParse({ body, contentType }: Target): boolean;
|
|
6
|
-
parse({ body, contentType }: Target): ParsedBody;
|
|
7
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UrlEncodedBodyParser = void 0;
|
|
4
|
-
const utils_1 = require("../../utils");
|
|
5
|
-
const core_1 = require("@sectester/core");
|
|
6
|
-
class UrlEncodedBodyParser {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.MIME_TYPE_REGEXP = /^application\/x-www-form-urlencoded\s*(;.*)?$/i;
|
|
9
|
-
}
|
|
10
|
-
canParse({ body, contentType }) {
|
|
11
|
-
return ((0, core_1.isURLSearchParams)(body) ||
|
|
12
|
-
((0, core_1.isString)(body) && this.MIME_TYPE_REGEXP.test(contentType !== null && contentType !== void 0 ? contentType : '')));
|
|
13
|
-
}
|
|
14
|
-
parse({ body, contentType = 'application/x-www-form-urlencoded' }) {
|
|
15
|
-
const text = (0, core_1.isURLSearchParams)(body) || (0, core_1.isString)(body) ? body.toString() : '';
|
|
16
|
-
const params = (0, utils_1.entriesToList)(new URLSearchParams(text));
|
|
17
|
-
return {
|
|
18
|
-
text,
|
|
19
|
-
params,
|
|
20
|
-
contentType
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.UrlEncodedBodyParser = UrlEncodedBodyParser;
|
|
25
|
-
//# sourceMappingURL=UrlEncodedBodyParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UrlEncodedBodyParser.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/UrlEncodedBodyParser.ts"],"names":[],"mappings":";;;AAEA,uCAA4C;AAC5C,0CAA8D;AAE9D,MAAa,oBAAoB;IAAjC;QACmB,qBAAgB,GAC/B,gDAAgD,CAAC;IAuBrD,CAAC;IArBQ,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAU;QAC3C,OAAO,CACL,IAAA,wBAAiB,EAAC,IAAI,CAAC;YACvB,CAAC,IAAA,eAAQ,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC,CAAC,CAClE,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,EACX,IAAI,EACJ,WAAW,GAAG,mCAAmC,EAC1C;QACP,MAAM,IAAI,GACR,IAAA,wBAAiB,EAAC,IAAI,CAAC,IAAI,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAExD,OAAO;YACL,IAAI;YACJ,MAAM;YACN,WAAW;SACZ,CAAC;IACJ,CAAC;CACF;AAzBD,oDAyBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/index.ts"],"names":[],"mappings":";;;AAAA,sBAAoB;AAEpB,uDAA6B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const BinaryBodyParser_1 = require("./BinaryBodyParser");
|
|
4
|
-
const FormDataBodyParser_1 = require("./FormDataBodyParser");
|
|
5
|
-
const TextBodyParser_1 = require("./TextBodyParser");
|
|
6
|
-
const UrlEncodedBodyParser_1 = require("./UrlEncodedBodyParser");
|
|
7
|
-
const JsonBodyParser_1 = require("./JsonBodyParser");
|
|
8
|
-
const BodyParser_1 = require("./BodyParser");
|
|
9
|
-
const tsyringe_1 = require("tsyringe");
|
|
10
|
-
tsyringe_1.container
|
|
11
|
-
.register(BodyParser_1.BodyParser, {
|
|
12
|
-
useClass: FormDataBodyParser_1.FormDataBodyParser
|
|
13
|
-
})
|
|
14
|
-
.register(BodyParser_1.BodyParser, {
|
|
15
|
-
useClass: UrlEncodedBodyParser_1.UrlEncodedBodyParser
|
|
16
|
-
})
|
|
17
|
-
.register(BodyParser_1.BodyParser, {
|
|
18
|
-
useClass: BinaryBodyParser_1.BinaryBodyParser
|
|
19
|
-
})
|
|
20
|
-
.register(BodyParser_1.BodyParser, {
|
|
21
|
-
useClass: TextBodyParser_1.TextBodyParser
|
|
22
|
-
})
|
|
23
|
-
.register(BodyParser_1.BodyParser, {
|
|
24
|
-
useClass: JsonBodyParser_1.JsonBodyParser
|
|
25
|
-
});
|
|
26
|
-
//# sourceMappingURL=register.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../../packages/scan/src/target/body-parsers/register.ts"],"names":[],"mappings":";;AAAA,yDAAsD;AACtD,6DAA0D;AAC1D,qDAAkD;AAClD,iEAA8D;AAC9D,qDAAkD;AAClD,6CAA0C;AAC1C,uCAAqC;AAErC,oBAAS;KACN,QAAQ,CAAC,uBAAU,EAAE;IACpB,QAAQ,EAAE,uCAAkB;CAC7B,CAAC;KACD,QAAQ,CAAC,uBAAU,EAAE;IACpB,QAAQ,EAAE,2CAAoB;CAC/B,CAAC;KACD,QAAQ,CAAC,uBAAU,EAAE;IACpB,QAAQ,EAAE,mCAAgB;CAC3B,CAAC;KACD,QAAQ,CAAC,uBAAU,EAAE;IACpB,QAAQ,EAAE,+BAAc;CACzB,CAAC;KACD,QAAQ,CAAC,uBAAU,EAAE;IACpB,QAAQ,EAAE,+BAAc;CACzB,CAAC,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.entriesToList = void 0;
|
|
4
|
-
const entriesToList = (val) => [...val]
|
|
5
|
-
.map(([name, value]) => Array.isArray(value)
|
|
6
|
-
? value.map(item => ({ name, value: item }))
|
|
7
|
-
: { name, value })
|
|
8
|
-
.flat();
|
|
9
|
-
exports.entriesToList = entriesToList;
|
|
10
|
-
//# sourceMappingURL=entries-to-list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entries-to-list.js","sourceRoot":"","sources":["../../../../../packages/scan/src/utils/entries-to-list.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,CAC3B,GAA0C,EACP,EAAE,CACrC,CAAC,GAAG,GAAG,CAAC;KACL,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAA8B,EAAE,EAAE,CAClD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CACpB;KACA,IAAI,EAAE,CAAC;AATC,QAAA,aAAa,iBASd"}
|