yxorp 0.1.2 → 0.1.4

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.
@@ -1,61 +1,61 @@
1
- import { Service } from 'typedi';
2
- import { ServerResponse, IncomingMessage } from 'http';
3
- import mime from 'mime';
4
- import fs from 'fs/promises';
5
- import path from 'path';
6
- import { Middleware } from '../services/pipeline.service';
7
- import { LoggerService } from '../services/logger.service';
8
-
9
- @Service({
10
- global: true
11
- })
12
- export class MockMiddleware implements Middleware<[req: IncomingMessage, res: ServerResponse]> {
13
- constructor(
14
- private logger: LoggerService,
15
- ) {
16
- }
17
-
18
- public async use(req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void> {
19
- try {
20
- const mockRule = req?.mockRule;
21
-
22
- if (!mockRule) {
23
- next();
24
- return;
25
- }
26
-
27
- if ('script' in mockRule) {
28
- const file = await fs.readFile(path.resolve(mockRule.script));
29
-
30
- const func = new Function('req, res', file.toString());
31
- await func(req, res);
32
-
33
- this.logger.info(`[MOCK BY SCRIPT] ${res.statusCode || 200} ${req.url}`);
34
- return;
35
- }
36
-
37
- if ('file' in mockRule) {
38
- const file = await fs.readFile(path.resolve(mockRule.file));
39
- const mimeType = mime.getType(path.resolve(mockRule.file));
40
-
41
- res.statusCode = mockRule.statusCode || res.statusCode;
42
-
43
- if (mimeType) {
44
- res.setHeader('content-type', mimeType);
45
- }
46
-
47
- res.setHeader('content-length', file.length);
48
- res.end(file);
49
-
50
- this.logger.info(`[MOCK BY FILE] ${res.statusCode} ${req.url}`);
51
- return;
52
- }
53
-
54
- next();
55
- } catch (e) {
56
- this.logger.error(e);
57
- next();
58
- }
59
- }
60
-
61
- }
1
+ import { Service } from 'typedi';
2
+ import { ServerResponse, IncomingMessage } from 'http';
3
+ import mime from 'mime';
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
6
+ import { Middleware } from '../services/pipeline.service';
7
+ import { LoggerService } from '../services/logger.service';
8
+
9
+ @Service({
10
+ global: true
11
+ })
12
+ export class MockMiddleware implements Middleware<[req: IncomingMessage, res: ServerResponse]> {
13
+ constructor(
14
+ private logger: LoggerService,
15
+ ) {
16
+ }
17
+
18
+ public async use(req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void> {
19
+ try {
20
+ const mockRule = req?.mockRule;
21
+
22
+ if (!mockRule) {
23
+ next();
24
+ return;
25
+ }
26
+
27
+ if ('script' in mockRule) {
28
+ const file = await fs.readFile(path.resolve(mockRule.script));
29
+
30
+ const func = new Function('req, res', file.toString());
31
+ await func(req, res);
32
+
33
+ this.logger.info(`[MOCK BY SCRIPT] ${res.statusCode || 200} ${req.url}`);
34
+ return;
35
+ }
36
+
37
+ if ('file' in mockRule) {
38
+ const file = await fs.readFile(path.resolve(mockRule.file));
39
+ const mimeType = mime.getType(path.resolve(mockRule.file));
40
+
41
+ res.statusCode = mockRule.statusCode || res.statusCode;
42
+
43
+ if (mimeType) {
44
+ res.setHeader('content-type', mimeType);
45
+ }
46
+
47
+ res.setHeader('content-length', file.length);
48
+ res.end(file);
49
+
50
+ this.logger.info(`[MOCK BY FILE] ${res.statusCode} ${req.url}`);
51
+ return;
52
+ }
53
+
54
+ next();
55
+ } catch (e) {
56
+ this.logger.error(e);
57
+ next();
58
+ }
59
+ }
60
+
61
+ }
@@ -1,42 +1,42 @@
1
- import { Service } from 'typedi';
2
- import { IncomingMessage, ServerResponse } from 'http';
3
- import { HttpProxy } from '../services/http-proxy.service';
4
- import { RemoteRulesMatcher } from '../services/rules-matchers/remote-rules-matcher.service';
5
- import { Config } from '../services/config.service';
6
- import { Middleware } from '../services/pipeline.service';
7
- import { LoggerService } from '../services/logger.service';
8
-
9
-
10
- @Service({
11
- global: true
12
- })
13
- export class ProxyMiddleware implements Middleware<[req: IncomingMessage, res: ServerResponse]> {
14
- constructor(
15
- private httpProxy: HttpProxy,
16
- private remoteRulesMatcher: RemoteRulesMatcher,
17
- private config: Config,
18
- private logger: LoggerService,
19
- ) {
20
- }
21
-
22
- public use(req: IncomingMessage, res: ServerResponse) {
23
- const url = req.url || '';
24
-
25
- const proxyOptions = this.config.get().proxyOptions;
26
- const remoteRule = this.remoteRulesMatcher.match(url);
27
- const target = remoteRule
28
- ? this.remoteRulesMatcher.toPath(url, remoteRule)
29
- : undefined;
30
-
31
- const options = {
32
- ...proxyOptions,
33
- prependPath: !target,
34
- target: target || proxyOptions.target,
35
- };
36
-
37
- this.httpProxy.web(
38
- req, res, options, (error) => this.logger.error(error)
39
- );
40
- }
41
-
42
- }
1
+ import { Service } from 'typedi';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { HttpProxy } from '../services/http-proxy.service';
4
+ import { RemoteRulesMatcher } from '../services/rules-matchers/remote-rules-matcher.service';
5
+ import { Config } from '../services/config.service';
6
+ import { Middleware } from '../services/pipeline.service';
7
+ import { LoggerService } from '../services/logger.service';
8
+
9
+
10
+ @Service({
11
+ global: true
12
+ })
13
+ export class ProxyMiddleware implements Middleware<[req: IncomingMessage, res: ServerResponse]> {
14
+ constructor(
15
+ private httpProxy: HttpProxy,
16
+ private remoteRulesMatcher: RemoteRulesMatcher,
17
+ private config: Config,
18
+ private logger: LoggerService,
19
+ ) {
20
+ }
21
+
22
+ public use(req: IncomingMessage, res: ServerResponse) {
23
+ const url = req.url || '';
24
+
25
+ const proxyOptions = this.config.get().proxyOptions;
26
+ const remoteRule = this.remoteRulesMatcher.match(url);
27
+ const target = remoteRule
28
+ ? this.remoteRulesMatcher.toPath(url, remoteRule)
29
+ : undefined;
30
+
31
+ const options = {
32
+ ...proxyOptions,
33
+ prependPath: !target,
34
+ target: target || proxyOptions.target,
35
+ };
36
+
37
+ this.httpProxy.web(
38
+ req, res, options, (error) => this.logger.error(error)
39
+ );
40
+ }
41
+
42
+ }
@@ -1,34 +1,34 @@
1
- import { Service } from 'typedi';
2
- import { IncomingMessage, ServerResponse } from 'http';
3
- import { Middleware } from '../services/pipeline.service';
4
- import { LoggerService } from '../services/logger.service';
5
-
6
-
7
- @Service({
8
- global: true
9
- })
10
- export class ProxyResMiddleware implements Middleware<[proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse]> {
11
- constructor(
12
- private logger: LoggerService,
13
- ) {
14
- }
15
-
16
- public use(proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse): void {
17
- try {
18
- for (let key in proxyRes.headers) {
19
- res.setHeader(key, proxyRes.headers[key] as any);
20
- }
21
-
22
- res.statusCode = proxyRes.statusCode as number;
23
- res.statusMessage = proxyRes.statusMessage as string;
24
-
25
- const response: Buffer = proxyRes.rawBody || Buffer.from('');
26
-
27
- res.setHeader('content-length', response.length);
28
- res.end(response);
29
- } catch(e) {
30
- this.logger.error(e);
31
- }
32
- }
33
-
34
- }
1
+ import { Service } from 'typedi';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { Middleware } from '../services/pipeline.service';
4
+ import { LoggerService } from '../services/logger.service';
5
+
6
+
7
+ @Service({
8
+ global: true
9
+ })
10
+ export class ProxyResMiddleware implements Middleware<[proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse]> {
11
+ constructor(
12
+ private logger: LoggerService,
13
+ ) {
14
+ }
15
+
16
+ public use(proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse): void {
17
+ try {
18
+ for (let key in proxyRes.headers) {
19
+ res.setHeader(key, proxyRes.headers[key] as any);
20
+ }
21
+
22
+ res.statusCode = proxyRes.statusCode as number;
23
+ res.statusMessage = proxyRes.statusMessage as string;
24
+
25
+ const response: Buffer = proxyRes.rawBody || Buffer.from('');
26
+
27
+ res.setHeader('content-length', response.length);
28
+ res.end(response);
29
+ } catch(e) {
30
+ this.logger.error(e);
31
+ }
32
+ }
33
+
34
+ }
@@ -1,22 +1,22 @@
1
- import { Service } from 'typedi';
2
- import { IncomingMessage, ServerResponse } from 'http';
3
- import { Middleware } from '../services/pipeline.service';
4
-
5
- @Service({
6
- global: true
7
- })
8
- export class RawBodyMiddleware implements Middleware<[proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse]> {
9
- public use(proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse, next: () => void): void {
10
- const body: Uint8Array[] = [];
11
-
12
- proxyRes.on('data', (chunk: Uint8Array) => {
13
- body.push(chunk);
14
- });
15
-
16
- proxyRes.on('end', () => {
17
- proxyRes.rawBody = Buffer.concat(body);
18
- next();
19
- });
20
- }
21
-
22
- }
1
+ import { Service } from 'typedi';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { Middleware } from '../services/pipeline.service';
4
+
5
+ @Service({
6
+ global: true
7
+ })
8
+ export class RawBodyMiddleware implements Middleware<[proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse]> {
9
+ public use(proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse, next: () => void): void {
10
+ const body: Uint8Array[] = [];
11
+
12
+ proxyRes.on('data', (chunk: Uint8Array) => {
13
+ body.push(chunk);
14
+ });
15
+
16
+ proxyRes.on('end', () => {
17
+ proxyRes.rawBody = Buffer.concat(body);
18
+ next();
19
+ });
20
+ }
21
+
22
+ }
@@ -1,64 +1,64 @@
1
- import { Service } from 'typedi';
2
- import { IncomingMessage, ServerResponse } from 'http';
3
- import { SUPPORTED_ENCODING, encodeBuffer, decodeBuffer } from 'http-encoding'
4
- import fs from 'fs/promises';
5
- import path from 'path';
6
- import { Middleware } from '../services/pipeline.service';
7
- import { LoggerService } from '../services/logger.service';
8
-
9
- type RewriteFunction = (body: Buffer, proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse) => Promise<Buffer> | Buffer;
10
-
11
- @Service({
12
- global: true
13
- })
14
- export class RewriteMiddleware implements Middleware<[proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse]> {
15
- constructor(
16
- private logger: LoggerService,
17
- ) {
18
- }
19
-
20
- public async use(proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void> {
21
- const rewriteRule = req?.rewriteRule;
22
-
23
- try {
24
- if (!rewriteRule) {
25
- next();
26
- return;
27
- }
28
-
29
- const encoding = proxyRes.headers['content-encoding'] as SUPPORTED_ENCODING;
30
- const response: Buffer = proxyRes.rawBody || Buffer.from('');
31
-
32
- if ('script' in rewriteRule) {
33
- const file = await fs.readFile(path.resolve(rewriteRule.script));
34
- const encodedResponse = await decodeBuffer(response, encoding);
35
- const func = new Function('body, proxyRes, req, res', 'var result;' + file + ';return result;') as RewriteFunction;
36
-
37
- const rewritedResponse: Buffer = await func(encodedResponse, proxyRes, req, res);
38
- proxyRes.rawBody = await encodeBuffer(rewritedResponse, encoding);
39
-
40
- this.logger.info(`[REWRITE BY SCRIPT] ${proxyRes.statusCode} ${req.url}`);
41
-
42
- next();
43
- return;
44
- }
45
-
46
- if ('file' in rewriteRule) {
47
- const file = await fs.readFile(path.resolve(rewriteRule.file));
48
- proxyRes.rawBody = await encodeBuffer(file, encoding);
49
- res.statusCode = rewriteRule.statusCode || res.statusCode;
50
-
51
- this.logger.info(`[REWRITE BY FILE] ${proxyRes.statusCode} ${req.url}`);
52
-
53
- next();
54
- return;
55
- }
56
-
57
- next();
58
- } catch (e) {
59
- this.logger.error(e);
60
- next();
61
- }
62
- }
63
-
64
- }
1
+ import { Service } from 'typedi';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { SUPPORTED_ENCODING, encodeBuffer, decodeBuffer } from 'http-encoding'
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
6
+ import { Middleware } from '../services/pipeline.service';
7
+ import { LoggerService } from '../services/logger.service';
8
+
9
+ type RewriteFunction = (body: Buffer, proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse) => Promise<Buffer> | Buffer;
10
+
11
+ @Service({
12
+ global: true
13
+ })
14
+ export class RewriteMiddleware implements Middleware<[proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse]> {
15
+ constructor(
16
+ private logger: LoggerService,
17
+ ) {
18
+ }
19
+
20
+ public async use(proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void> {
21
+ const rewriteRule = req?.rewriteRule;
22
+
23
+ try {
24
+ if (!rewriteRule) {
25
+ next();
26
+ return;
27
+ }
28
+
29
+ const encoding = proxyRes.headers['content-encoding'] as SUPPORTED_ENCODING;
30
+ const response: Buffer = proxyRes.rawBody || Buffer.from('');
31
+
32
+ if ('script' in rewriteRule) {
33
+ const file = await fs.readFile(path.resolve(rewriteRule.script));
34
+ const encodedResponse = await decodeBuffer(response, encoding);
35
+ const func = new Function('body, proxyRes, req, res', 'var result;' + file + ';return result;') as RewriteFunction;
36
+
37
+ const rewritedResponse: Buffer = await func(encodedResponse, proxyRes, req, res);
38
+ proxyRes.rawBody = await encodeBuffer(rewritedResponse, encoding);
39
+
40
+ this.logger.info(`[REWRITE BY SCRIPT] ${proxyRes.statusCode} ${req.url}`);
41
+
42
+ next();
43
+ return;
44
+ }
45
+
46
+ if ('file' in rewriteRule) {
47
+ const file = await fs.readFile(path.resolve(rewriteRule.file));
48
+ proxyRes.rawBody = await encodeBuffer(file, encoding);
49
+ res.statusCode = rewriteRule.statusCode || res.statusCode;
50
+
51
+ this.logger.info(`[REWRITE BY FILE] ${proxyRes.statusCode} ${req.url}`);
52
+
53
+ next();
54
+ return;
55
+ }
56
+
57
+ next();
58
+ } catch (e) {
59
+ this.logger.error(e);
60
+ next();
61
+ }
62
+ }
63
+
64
+ }