marcattacks 2.2.4 → 2.2.6
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 +17 -2
- package/dist/attacker.d.ts +24 -1
- package/dist/attacker.d.ts.map +1 -1
- package/dist/attacker.js +141 -126
- package/dist/attacker.js.map +1 -1
- package/dist/command.d.ts +3 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/{index.js → command.js} +13 -3
- package/dist/command.js.map +1 -0
- package/dist/demo.d.ts +2 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +8 -0
- package/dist/demo.js.map +1 -0
- package/dist/globber.d.ts +3 -0
- package/dist/globber.d.ts.map +1 -0
- package/dist/globber.js +131 -0
- package/dist/globber.js.map +1 -0
- package/dist/output/json.d.ts.map +1 -1
- package/dist/output/json.js +2 -7
- package/dist/output/json.js.map +1 -1
- package/dist/output/rdf.d.ts.map +1 -1
- package/dist/output/rdf.js +1 -4
- package/dist/output/rdf.js.map +1 -1
- package/dist/output/xml.d.ts.map +1 -1
- package/dist/output/xml.js +2 -6
- package/dist/output/xml.js.map +1 -1
- package/dist/{filestream.d.ts → stream/filestream.d.ts} +1 -0
- package/dist/stream/filestream.d.ts.map +1 -0
- package/dist/stream/filestream.js +65 -0
- package/dist/stream/filestream.js.map +1 -0
- package/dist/stream/httpstream.d.ts.map +1 -0
- package/dist/{httpstream.js → stream/httpstream.js} +7 -3
- package/dist/stream/httpstream.js.map +1 -0
- package/dist/{s3stream.d.ts → stream/s3stream.d.ts} +1 -0
- package/dist/stream/s3stream.d.ts.map +1 -0
- package/dist/{s3stream.js → stream/s3stream.js} +64 -1
- package/dist/stream/s3stream.js.map +1 -0
- package/dist/{sftpstream.d.ts → stream/sftpstream.d.ts} +1 -0
- package/dist/stream/sftpstream.d.ts.map +1 -0
- package/dist/{sftpstream.js → stream/sftpstream.js} +66 -2
- package/dist/stream/sftpstream.js.map +1 -0
- package/dist/stream/slow-writable.d.ts.map +1 -0
- package/dist/stream/slow-writable.js.map +1 -0
- package/dist/util/stream_helpers.d.ts.map +1 -1
- package/dist/util/stream_helpers.js +20 -23
- package/dist/util/stream_helpers.js.map +1 -1
- package/package.json +3 -2
- package/dist/filestream.d.ts.map +0 -1
- package/dist/filestream.js +0 -32
- package/dist/filestream.js.map +0 -1
- package/dist/httpstream.d.ts.map +0 -1
- package/dist/httpstream.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/s3stream.d.ts.map +0 -1
- package/dist/s3stream.js.map +0 -1
- package/dist/sftpstream.d.ts.map +0 -1
- package/dist/sftpstream.js.map +0 -1
- package/dist/slow-writable.d.ts.map +0 -1
- package/dist/slow-writable.js.map +0 -1
- /package/dist/{httpstream.d.ts → stream/httpstream.d.ts} +0 -0
- /package/dist/{slow-writable.d.ts → stream/slow-writable.d.ts} +0 -0
- /package/dist/{slow-writable.js → stream/slow-writable.js} +0 -0
package/README.md
CHANGED
|
@@ -80,7 +80,7 @@ marcattacks http://somewhere.org/data.xml
|
|
|
80
80
|
An S3 path
|
|
81
81
|
|
|
82
82
|
```
|
|
83
|
-
marcattacks s3://accessKey:secretKey@
|
|
83
|
+
marcattacks s3://accessKey:secretKey@hostname:port/bucket/key
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
use `s3s://...` for using an SSL layer.
|
|
@@ -159,4 +159,19 @@ Available variables:
|
|
|
159
159
|
- S3_ACCESS_KEY
|
|
160
160
|
- S3_SECRET_KEY
|
|
161
161
|
|
|
162
|
-
A SFTP private key can be provided using the `--key-env` command line option. E.g. `--key-env PRIVATE_KEY`, which results reading a `PRIVATE_KEY` environment variable.
|
|
162
|
+
A SFTP private key can be provided using the `--key-env` command line option. E.g. `--key-env PRIVATE_KEY`, which results reading a `PRIVATE_KEY` environment variable.
|
|
163
|
+
|
|
164
|
+
## Discover files at a (remote) endpoint
|
|
165
|
+
|
|
166
|
+
Find all files that end with xml on an sftp site:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
npx globtrotr --key ~/.ssh/mykey sftp://username@hostname:port/remote/path/@glob:xml
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Or, for an S3 site:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
npx globtrotr s3s://accessKey:privateKey@hostname:port/bucket/@glob:xml
|
|
176
|
+
```
|
|
177
|
+
|
package/dist/attacker.d.ts
CHANGED
|
@@ -1,6 +1,29 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import { type Transform, type Writable } from 'node:stream';
|
|
1
3
|
export declare class PipelineError extends Error {
|
|
2
4
|
readonly statusCode: number;
|
|
3
5
|
constructor(message: string, statusCode: number);
|
|
4
6
|
}
|
|
5
|
-
export declare function
|
|
7
|
+
export declare function createInputReadStream(url: URL, opts: any): Promise<{
|
|
8
|
+
stream: Readable;
|
|
9
|
+
resolvedUrl: URL;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function createDecompressionStage(url: URL, opts: {
|
|
12
|
+
z?: boolean;
|
|
13
|
+
}): Promise<Transform | null>;
|
|
14
|
+
export declare function createUntarStage(url: URL, opts: {
|
|
15
|
+
tar?: boolean;
|
|
16
|
+
}): Promise<Transform | null>;
|
|
17
|
+
export declare function createInputTransformStage(url: URL, opts: {
|
|
18
|
+
from: string;
|
|
19
|
+
param?: any;
|
|
20
|
+
}): Promise<Transform>;
|
|
21
|
+
export declare function createCountSkipStage(opts: {
|
|
22
|
+
count?: number;
|
|
23
|
+
skip?: number;
|
|
24
|
+
}): Promise<Transform | null>;
|
|
25
|
+
export declare function createMapTransformStage(opts: any): Promise<Transform | null>;
|
|
26
|
+
export declare function createOutputWriteStream(opts: any): Promise<Writable>;
|
|
27
|
+
export declare function createOutputTransformStage(opts: any): Promise<Transform | null>;
|
|
28
|
+
export declare function attack(url: URL, opts: any): Promise<number>;
|
|
6
29
|
//# sourceMappingURL=attacker.d.ts.map
|
package/dist/attacker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacker.d.ts","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attacker.d.ts","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAe5D,qBAAa,aAAc,SAAQ,KAAK;IACpC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAUlD;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,CAAC,CA2ChH;AAED,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;IAAE,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAKzG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAKnG;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAA;CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAQ/G;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAK3G;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAMlF;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgD1E;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAMrF;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DjE"}
|
package/dist/attacker.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import log4js from 'log4js';
|
|
2
2
|
import { loadPlugin } from './plugin-loader.js';
|
|
3
|
-
import { sftpLatestFile, sftpReadStream, sftpWriteStream } from './sftpstream.js';
|
|
4
|
-
import { httpReadStream } from './httpstream.js';
|
|
3
|
+
import { sftpLatestFile, sftpReadStream, sftpWriteStream } from './stream/sftpstream.js';
|
|
4
|
+
import { httpReadStream } from './stream/httpstream.js';
|
|
5
5
|
import { Readable } from 'stream';
|
|
6
|
-
import { pathToFileURL } from "node:url";
|
|
7
6
|
import {} from 'node:stream';
|
|
8
|
-
import { SlowWritable } from './slow-writable.js';
|
|
9
|
-
import path from "node:path";
|
|
7
|
+
import { SlowWritable } from './stream/slow-writable.js';
|
|
10
8
|
import fs from 'fs';
|
|
11
|
-
import { s3LatestObject, s3ReadStream, s3WriteStream } from './s3stream.js';
|
|
9
|
+
import { s3LatestObject, s3ReadStream, s3WriteStream } from './stream/s3stream.js';
|
|
12
10
|
import { pipeline } from 'node:stream/promises';
|
|
13
11
|
import { createCountableSkippedStream, createUntarredStream, createUncompressedStream, createVerboseStream } from './util/stream_helpers.js';
|
|
14
|
-
import { fileLatestFile, fileReadStream } from './filestream.js';
|
|
12
|
+
import { fileLatestFile, fileReadStream } from './stream/filestream.js';
|
|
15
13
|
const logger = log4js.getLogger();
|
|
16
14
|
export class PipelineError extends Error {
|
|
17
15
|
statusCode;
|
|
@@ -24,135 +22,152 @@ export class PipelineError extends Error {
|
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
}
|
|
27
|
-
export async function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
export async function createInputReadStream(url, opts) {
|
|
26
|
+
logger.info(`using: ${getCleanURL(url)}`);
|
|
27
|
+
let readableStream;
|
|
28
|
+
let resolvedUrl = url;
|
|
29
|
+
if (url.protocol.startsWith("http")) {
|
|
30
|
+
readableStream = await httpReadStream(url.toString());
|
|
31
|
+
}
|
|
32
|
+
else if (url.protocol.startsWith("s3")) {
|
|
33
|
+
if (process.env.S3_ACCESS_KEY) {
|
|
34
|
+
url.username = process.env.S3_ACCESS_KEY;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
if (process.env.S3_SECRET_KEY) {
|
|
37
|
+
url.password = process.env.S3_SECRET_KEY;
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
resolvedUrl = await s3LatestObject(url, opts);
|
|
40
|
+
readableStream = await s3ReadStream(resolvedUrl, opts);
|
|
41
|
+
}
|
|
42
|
+
else if (url.protocol === 'sftp:') {
|
|
43
|
+
if (process.env.SFTP_USERNAME) {
|
|
44
|
+
url.username = process.env.SFTP_USERNAME;
|
|
42
45
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (process.env.S3_ACCESS_KEY) {
|
|
46
|
-
url.username = process.env.S3_ACCESS_KEY;
|
|
47
|
-
}
|
|
48
|
-
if (process.env.S3_SECRET_KEY) {
|
|
49
|
-
url.password = process.env.S3_SECRET_KEY;
|
|
50
|
-
}
|
|
51
|
-
// optional resolve @latest
|
|
52
|
-
inputFile = await s3LatestObject(url, opts);
|
|
53
|
-
readableStream = await s3ReadStream(inputFile, opts);
|
|
46
|
+
if (process.env.SFTP_PASSWORD) {
|
|
47
|
+
url.password = process.env.SFTP_PASSWORD;
|
|
54
48
|
}
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
resolvedUrl = await sftpLatestFile(url, opts);
|
|
50
|
+
readableStream = await sftpReadStream(resolvedUrl, opts);
|
|
51
|
+
}
|
|
52
|
+
else if (url.protocol === 'stdin:') {
|
|
53
|
+
readableStream = process.stdin;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
resolvedUrl = await fileLatestFile(url);
|
|
57
|
+
readableStream = await fileReadStream(resolvedUrl);
|
|
58
|
+
}
|
|
59
|
+
return { stream: readableStream, resolvedUrl: resolvedUrl };
|
|
60
|
+
}
|
|
61
|
+
export async function createDecompressionStage(url, opts) {
|
|
62
|
+
if (opts.z || url.pathname.endsWith(".gz")) {
|
|
63
|
+
return createUncompressedStream();
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
export async function createUntarStage(url, opts) {
|
|
68
|
+
if (opts.tar || url.pathname.match(/.tar(.\w+$)?$/) || url.pathname.endsWith(".tgz")) {
|
|
69
|
+
return await createUntarredStream();
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
export async function createInputTransformStage(url, opts) {
|
|
74
|
+
if (!opts.from) {
|
|
75
|
+
console.error(`Need --from`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const mod = await loadPlugin(opts.from, 'input');
|
|
79
|
+
return await mod.transform(Object.assign({ path: url }, opts.param));
|
|
80
|
+
}
|
|
81
|
+
export async function createCountSkipStage(opts) {
|
|
82
|
+
if (opts.count || opts.skip) {
|
|
83
|
+
return createCountableSkippedStream(opts.count, opts.skip);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
export async function createMapTransformStage(opts) {
|
|
88
|
+
if (opts.map) {
|
|
89
|
+
const mod = await loadPlugin(opts.map, 'transform');
|
|
90
|
+
return await mod.transform(opts.param);
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
export async function createOutputWriteStream(opts) {
|
|
95
|
+
if (isWritableStream(opts.out)) {
|
|
96
|
+
return opts.out;
|
|
97
|
+
}
|
|
98
|
+
if (opts.out === '@slow') {
|
|
99
|
+
return new SlowWritable({ delayMs: 100 });
|
|
100
|
+
}
|
|
101
|
+
if (opts.out === '@errors') {
|
|
102
|
+
return new SlowWritable({ simulateErrorEveryN: 2 });
|
|
103
|
+
}
|
|
104
|
+
if (opts.out) {
|
|
105
|
+
if (opts.out.startsWith("sftp")) {
|
|
106
|
+
const url = new URL(opts.out);
|
|
57
107
|
if (process.env.SFTP_USERNAME) {
|
|
58
108
|
url.username = process.env.SFTP_USERNAME;
|
|
59
109
|
}
|
|
60
110
|
if (process.env.SFTP_PASSWORD) {
|
|
61
111
|
url.password = process.env.SFTP_PASSWORD;
|
|
62
112
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
readableStream = await sftpReadStream(inputFile, opts);
|
|
66
|
-
}
|
|
67
|
-
else if (inputFile.protocol === 'stdin:') {
|
|
68
|
-
readableStream = process.stdin;
|
|
113
|
+
logger.info(`put ${getCleanURL(url)}`);
|
|
114
|
+
return await sftpWriteStream(url, opts);
|
|
69
115
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
116
|
+
if (opts.out.startsWith("s3")) {
|
|
117
|
+
const url = new URL(opts.out);
|
|
118
|
+
if (process.env.S3_ACCESS_KEY) {
|
|
119
|
+
url.username = process.env.S3_ACCESS_KEY;
|
|
120
|
+
}
|
|
121
|
+
if (process.env.S3_SECRET_KEY) {
|
|
122
|
+
url.password = process.env.S3_SECRET_KEY;
|
|
123
|
+
}
|
|
124
|
+
logger.info(`put ${getCleanURL(url)}`);
|
|
125
|
+
return await s3WriteStream(url, {});
|
|
73
126
|
}
|
|
127
|
+
return fs.createWriteStream(opts.out, { encoding: 'utf-8' });
|
|
128
|
+
}
|
|
129
|
+
return process.stdout;
|
|
130
|
+
}
|
|
131
|
+
export async function createOutputTransformStage(opts) {
|
|
132
|
+
if (opts.to) {
|
|
133
|
+
const mod = await loadPlugin(opts.to, 'output');
|
|
134
|
+
return await mod.transform(opts.param);
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
export async function attack(url, opts) {
|
|
139
|
+
let result = 0;
|
|
140
|
+
try {
|
|
141
|
+
const { stream: readableStream, resolvedUrl: inputFile } = await createInputReadStream(url, opts);
|
|
74
142
|
const stages = [readableStream];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
process.exitCode = 2;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
transformer.on('finish', () => logger.debug('writeable finished'));
|
|
95
|
-
transformer.on('end', () => logger.debug('readable ended'));
|
|
96
|
-
transformer.on('close', () => logger.debug('stream closed'));
|
|
97
|
-
stages.push(transformer);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
console.error(`Need --from`);
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
if (opts.count || opts.skip) {
|
|
104
|
-
stages.push(createCountableSkippedStream(opts.count, opts.skip));
|
|
105
|
-
}
|
|
143
|
+
// Add decompression stage if needed
|
|
144
|
+
const decompressionStage = await createDecompressionStage(inputFile, opts);
|
|
145
|
+
if (decompressionStage)
|
|
146
|
+
stages.push(decompressionStage);
|
|
147
|
+
// Add untar stage if needed
|
|
148
|
+
const untarStage = await createUntarStage(inputFile, opts);
|
|
149
|
+
if (untarStage)
|
|
150
|
+
stages.push(untarStage);
|
|
151
|
+
// Add input transform stage (required)
|
|
152
|
+
const inputTransform = await createInputTransformStage(inputFile, opts);
|
|
153
|
+
stages.push(inputTransform);
|
|
154
|
+
// Add count/skip stage if needed
|
|
155
|
+
const countSkipStage = await createCountSkipStage(opts);
|
|
156
|
+
if (countSkipStage)
|
|
157
|
+
stages.push(countSkipStage);
|
|
158
|
+
// Add verbose stream (always included)
|
|
106
159
|
const verboseStream = createVerboseStream();
|
|
107
160
|
stages.push(verboseStream);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
stages.push(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
outStream = new SlowWritable({ delayMs: 100 });
|
|
119
|
-
}
|
|
120
|
-
else if (opts.out === '@errors') {
|
|
121
|
-
outStream = new SlowWritable({ simulateErrorEveryN: 2 });
|
|
122
|
-
}
|
|
123
|
-
else if (opts.out) {
|
|
124
|
-
if (opts.out.startsWith("sftp")) {
|
|
125
|
-
const url = new URL(opts.out);
|
|
126
|
-
if (process.env.SFTP_USERNAME) {
|
|
127
|
-
url.username = process.env.SFTP_USERNAME;
|
|
128
|
-
}
|
|
129
|
-
if (process.env.SFTP_PASSWORD) {
|
|
130
|
-
url.password = process.env.SFTP_PASSWORD;
|
|
131
|
-
}
|
|
132
|
-
logger.info(`put ${getCleanURL(url)}`);
|
|
133
|
-
outStream = await sftpWriteStream(url, opts);
|
|
134
|
-
}
|
|
135
|
-
else if (opts.out.startsWith("s3")) {
|
|
136
|
-
const url = new URL(opts.out);
|
|
137
|
-
if (process.env.S3_ACCESS_KEY) {
|
|
138
|
-
url.username = process.env.S3_ACCESS_KEY;
|
|
139
|
-
}
|
|
140
|
-
if (process.env.S3_SECRET_KEY) {
|
|
141
|
-
url.password = process.env.S3_SECRET_KEY;
|
|
142
|
-
}
|
|
143
|
-
logger.info(`put ${getCleanURL(url)}`);
|
|
144
|
-
outStream = await s3WriteStream(url, {});
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
outStream = fs.createWriteStream(opts.out, { encoding: 'utf-8' });
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
outStream = process.stdout;
|
|
152
|
-
}
|
|
153
|
-
if (opts.to) {
|
|
154
|
-
const mod = await loadPlugin(opts.to, 'output');
|
|
155
|
-
stages.push(await mod.transform(opts.param));
|
|
161
|
+
// Add map transform stage if needed
|
|
162
|
+
const mapStage = await createMapTransformStage(opts);
|
|
163
|
+
if (mapStage)
|
|
164
|
+
stages.push(mapStage);
|
|
165
|
+
// Add output transform stage if needed
|
|
166
|
+
const outputTransform = await createOutputTransformStage(opts);
|
|
167
|
+
if (outputTransform) {
|
|
168
|
+
stages.push(outputTransform);
|
|
169
|
+
// Add output write stream
|
|
170
|
+
const outStream = await createOutputWriteStream(opts);
|
|
156
171
|
stages.push(outStream);
|
|
157
172
|
try {
|
|
158
173
|
await pipeline(stages);
|
|
@@ -160,8 +175,9 @@ export async function attack(url, opts) {
|
|
|
160
175
|
logger.info("pipeline finished cleanly");
|
|
161
176
|
}
|
|
162
177
|
catch (err) {
|
|
178
|
+
result = verboseStream.getCount();
|
|
163
179
|
if (err.code === 'ERR_STREAM_PREMATURE_CLOSE') {
|
|
164
|
-
logger.info("
|
|
180
|
+
logger.info("stream closed by limiter.");
|
|
165
181
|
}
|
|
166
182
|
else {
|
|
167
183
|
logger.error("pipeline error:", err);
|
|
@@ -172,17 +188,17 @@ export async function attack(url, opts) {
|
|
|
172
188
|
}
|
|
173
189
|
catch (e) {
|
|
174
190
|
if (e instanceof PipelineError) {
|
|
175
|
-
throw
|
|
191
|
+
throw e;
|
|
176
192
|
}
|
|
177
193
|
else {
|
|
178
194
|
logger.error(`process crashed with: ${e}`);
|
|
179
|
-
throw
|
|
195
|
+
throw e;
|
|
180
196
|
}
|
|
181
197
|
}
|
|
182
198
|
return result;
|
|
183
199
|
}
|
|
184
200
|
function getCleanURL(url) {
|
|
185
|
-
const tempUrl = new URL(url.href);
|
|
201
|
+
const tempUrl = new URL(url.href);
|
|
186
202
|
tempUrl.username = '***';
|
|
187
203
|
tempUrl.password = '***';
|
|
188
204
|
return tempUrl;
|
|
@@ -192,7 +208,6 @@ function isWritableStream(obj) {
|
|
|
192
208
|
typeof obj === 'object' &&
|
|
193
209
|
typeof obj.write === 'function' &&
|
|
194
210
|
typeof obj.end === 'function' &&
|
|
195
|
-
// internal state check
|
|
196
211
|
obj.writable !== false);
|
|
197
212
|
}
|
|
198
213
|
//# sourceMappingURL=attacker.js.map
|
package/dist/attacker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacker.js","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAG,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"attacker.js","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":""}
|
|
@@ -5,6 +5,8 @@ import path from "node:path";
|
|
|
5
5
|
import dotenv from 'dotenv';
|
|
6
6
|
import { attack, PipelineError } from './attacker.js';
|
|
7
7
|
import { createRequire } from 'node:module';
|
|
8
|
+
import { pathToFileURL } from "node:url";
|
|
9
|
+
import fs from 'fs';
|
|
8
10
|
const require = createRequire(import.meta.url);
|
|
9
11
|
const pkg = require('../package.json');
|
|
10
12
|
program.version(pkg.version)
|
|
@@ -68,7 +70,7 @@ function configureDefaultLogger(output) {
|
|
|
68
70
|
type: output,
|
|
69
71
|
layout: {
|
|
70
72
|
type: "pattern",
|
|
71
|
-
pattern: "%[%d %p %f{
|
|
73
|
+
pattern: "%[%d %p %f{2} %m%]"
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
},
|
|
@@ -111,7 +113,15 @@ async function main() {
|
|
|
111
113
|
console.error(`need an input file`);
|
|
112
114
|
process.exit(2);
|
|
113
115
|
}
|
|
114
|
-
|
|
116
|
+
let inputFile;
|
|
117
|
+
if (fs.existsSync(url)) {
|
|
118
|
+
const filePath = path.resolve(process.cwd(), url);
|
|
119
|
+
inputFile = pathToFileURL(filePath);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
inputFile = new URL(url);
|
|
123
|
+
}
|
|
124
|
+
const result = await attack(inputFile, opts);
|
|
115
125
|
logger.info(`total: ${result}`);
|
|
116
126
|
}
|
|
117
127
|
catch (e) {
|
|
@@ -135,4 +145,4 @@ function collect(value, previous) {
|
|
|
135
145
|
return previous;
|
|
136
146
|
}
|
|
137
147
|
}
|
|
138
|
-
//# sourceMappingURL=
|
|
148
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
|
package/dist/demo.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":""}
|
package/dist/demo.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createInputReadStream, createInputTransformStage } from "./attacker.js";
|
|
2
|
+
main();
|
|
3
|
+
async function main() {
|
|
4
|
+
const reader1 = await createInputReadStream("./data/sample.xml");
|
|
5
|
+
const reader2 = await createInputReadStream("./data/sample.xml");
|
|
6
|
+
const parser = await createInputTransformStage({ from: 'xml' }, "./data/sample.xml", reader1);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=demo.js.map
|
package/dist/demo.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEjF,IAAI,EAAE,CAAC;AAEP,KAAK,UAAU,IAAI;IACf,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,MAAM,GAAI,MAAM,yBAAyB,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAC,mBAAmB,EAAC,OAAO,CAAC,CAAC;AAE/F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globber.d.ts","sourceRoot":"","sources":["../src/globber.ts"],"names":[],"mappings":""}
|