@requestly/requestly-proxy 1.0.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.
Files changed (89) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +5 -0
  3. package/dist/components/interfaces/logger-service.d.ts +4 -0
  4. package/dist/components/interfaces/logger-service.js +2 -0
  5. package/dist/components/interfaces/rules-data-source.d.ts +6 -0
  6. package/dist/components/interfaces/rules-data-source.js +2 -0
  7. package/dist/components/proxy-middleware/constants.d.ts +11 -0
  8. package/dist/components/proxy-middleware/constants.js +21 -0
  9. package/dist/components/proxy-middleware/helpers/ctx_rq_namespace.d.ts +35 -0
  10. package/dist/components/proxy-middleware/helpers/ctx_rq_namespace.js +96 -0
  11. package/dist/components/proxy-middleware/helpers/harObectCreator.d.ts +140 -0
  12. package/dist/components/proxy-middleware/helpers/harObectCreator.js +158 -0
  13. package/dist/components/proxy-middleware/helpers/http_helpers.d.ts +2 -0
  14. package/dist/components/proxy-middleware/helpers/http_helpers.js +47 -0
  15. package/dist/components/proxy-middleware/helpers/proxy_ctx_helper.d.ts +14 -0
  16. package/dist/components/proxy-middleware/helpers/proxy_ctx_helper.js +86 -0
  17. package/dist/components/proxy-middleware/helpers/response_helper.d.ts +3 -0
  18. package/dist/components/proxy-middleware/helpers/response_helper.js +17 -0
  19. package/dist/components/proxy-middleware/helpers/rule_processor_helper.d.ts +17 -0
  20. package/dist/components/proxy-middleware/helpers/rule_processor_helper.js +192 -0
  21. package/dist/components/proxy-middleware/index.d.ts +25 -0
  22. package/dist/components/proxy-middleware/index.js +257 -0
  23. package/dist/components/proxy-middleware/middlewares/amiusing_middleware.d.ts +6 -0
  24. package/dist/components/proxy-middleware/middlewares/amiusing_middleware.js +25 -0
  25. package/dist/components/proxy-middleware/middlewares/logger_middleware.d.ts +66 -0
  26. package/dist/components/proxy-middleware/middlewares/logger_middleware.js +89 -0
  27. package/dist/components/proxy-middleware/middlewares/rules_middleware.d.ts +40 -0
  28. package/dist/components/proxy-middleware/middlewares/rules_middleware.js +117 -0
  29. package/dist/components/proxy-middleware/middlewares/ssl_cert_middleware.d.ts +7 -0
  30. package/dist/components/proxy-middleware/middlewares/ssl_cert_middleware.js +33 -0
  31. package/dist/components/proxy-middleware/rule_action_processor/handle_mixed_response.d.ts +14 -0
  32. package/dist/components/proxy-middleware/rule_action_processor/handle_mixed_response.js +78 -0
  33. package/dist/components/proxy-middleware/rule_action_processor/index.d.ts +13 -0
  34. package/dist/components/proxy-middleware/rule_action_processor/index.js +101 -0
  35. package/dist/components/proxy-middleware/rule_action_processor/modified_requests_pool.d.ts +7 -0
  36. package/dist/components/proxy-middleware/rule_action_processor/modified_requests_pool.js +34 -0
  37. package/dist/components/proxy-middleware/rule_action_processor/processors/block_processor.d.ts +6 -0
  38. package/dist/components/proxy-middleware/rule_action_processor/processors/block_processor.js +21 -0
  39. package/dist/components/proxy-middleware/rule_action_processor/processors/delay_processor.d.ts +6 -0
  40. package/dist/components/proxy-middleware/rule_action_processor/processors/delay_processor.js +29 -0
  41. package/dist/components/proxy-middleware/rule_action_processor/processors/insert_processor.d.ts +6 -0
  42. package/dist/components/proxy-middleware/rule_action_processor/processors/insert_processor.js +154 -0
  43. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_header_processor.d.ts +6 -0
  44. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_header_processor.js +69 -0
  45. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_request_processor.d.ts +6 -0
  46. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_request_processor.js +89 -0
  47. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_response_processor.d.ts +6 -0
  48. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_response_processor.js +109 -0
  49. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_user_agent_processor.d.ts +6 -0
  50. package/dist/components/proxy-middleware/rule_action_processor/processors/modify_user_agent_processor.js +25 -0
  51. package/dist/components/proxy-middleware/rule_action_processor/processors/redirect_processor.d.ts +6 -0
  52. package/dist/components/proxy-middleware/rule_action_processor/processors/redirect_processor.js +58 -0
  53. package/dist/components/proxy-middleware/rule_action_processor/utils.d.ts +11 -0
  54. package/dist/components/proxy-middleware/rule_action_processor/utils.js +33 -0
  55. package/dist/components/ssl-proxying/ssl-proxying-manager.d.ts +3 -0
  56. package/dist/components/ssl-proxying/ssl-proxying-manager.js +6 -0
  57. package/dist/constants/cert.d.ts +7 -0
  58. package/dist/constants/cert.js +13 -0
  59. package/dist/index.d.ts +4 -0
  60. package/dist/index.js +11 -0
  61. package/dist/lib/proxy/bin/mitm-proxy.d.ts +2 -0
  62. package/dist/lib/proxy/bin/mitm-proxy.js +30 -0
  63. package/dist/lib/proxy/custom/utils/checkInvalidHeaderChar.d.ts +8 -0
  64. package/dist/lib/proxy/custom/utils/checkInvalidHeaderChar.js +14 -0
  65. package/dist/lib/proxy/index.d.ts +2 -0
  66. package/dist/lib/proxy/index.js +2 -0
  67. package/dist/lib/proxy/lib/ca.d.ts +8 -0
  68. package/dist/lib/proxy/lib/ca.js +277 -0
  69. package/dist/lib/proxy/lib/middleware/gunzip.d.ts +2 -0
  70. package/dist/lib/proxy/lib/middleware/gunzip.js +17 -0
  71. package/dist/lib/proxy/lib/middleware/wildcard.d.ts +1 -0
  72. package/dist/lib/proxy/lib/middleware/wildcard.js +20 -0
  73. package/dist/lib/proxy/lib/proxy.d.ts +36 -0
  74. package/dist/lib/proxy/lib/proxy.js +1217 -0
  75. package/dist/rq-proxy-provider.d.ts +10 -0
  76. package/dist/rq-proxy-provider.js +20 -0
  77. package/dist/rq-proxy.d.ts +15 -0
  78. package/dist/rq-proxy.js +53 -0
  79. package/dist/test.d.ts +1 -0
  80. package/dist/test.js +111 -0
  81. package/dist/types/index.d.ts +12 -0
  82. package/dist/types/index.js +2 -0
  83. package/dist/utils/circularQueue.d.ts +2 -0
  84. package/dist/utils/circularQueue.js +31 -0
  85. package/dist/utils/helpers/rules-helper.d.ts +11 -0
  86. package/dist/utils/helpers/rules-helper.js +59 -0
  87. package/dist/utils/index.d.ts +0 -0
  88. package/dist/utils/index.js +0 -0
  89. package/package.json +43 -0
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createHarResponse = exports.createHarRequest = exports.createHarEntry = exports.createHar = exports.createRequestHarObject = void 0;
4
+ const createHarHeaders = (request_headers_obj) => {
5
+ // convert headers obj to haar format
6
+ const headers = [];
7
+ if (request_headers_obj) {
8
+ for (const key in request_headers_obj) {
9
+ headers.push({
10
+ name: key,
11
+ value: request_headers_obj[key],
12
+ });
13
+ }
14
+ }
15
+ return headers;
16
+ };
17
+ const createHarQueryStrings = (path) => {
18
+ // TODO -> http://www.softwareishard.com/blog/har-12-spec/#queryString
19
+ return [];
20
+ };
21
+ const getContentType = (headers) => {
22
+ let contentType = null;
23
+ if (headers) {
24
+ headers.forEach((item) => {
25
+ if (item.name === "content-type") {
26
+ contentType = item.value;
27
+ }
28
+ });
29
+ }
30
+ return contentType;
31
+ };
32
+ const buildHarPostParams = (contentType, body) => {
33
+ if (contentType === "application/x-www-form-urlencoded") {
34
+ return body
35
+ .split("&") // Split by separators
36
+ .map((keyValue) => {
37
+ const [key, value] = keyValue.split("=");
38
+ return {
39
+ name: key,
40
+ value,
41
+ };
42
+ });
43
+ }
44
+ else {
45
+ // FormData has its own format
46
+ // TODO Complete form data case -> where file is uploaded
47
+ return {
48
+ name: contentType,
49
+ value: body,
50
+ };
51
+ }
52
+ };
53
+ const createHarPostData = (body, headers) => {
54
+ // http://www.softwareishard.com/blog/har-12-spec/#postData
55
+ if (!body) {
56
+ return undefined;
57
+ }
58
+ const contentType = getContentType(headers);
59
+ // if (!contentType) {
60
+ // return undefined;
61
+ // }
62
+ // // console.log("contentType and Body", { contentType, body }, typeof body);
63
+ // if (
64
+ // ["application/x-www-form-urlencoded", "multipart/form-data"].includes(
65
+ // contentType
66
+ // )
67
+ // ) {
68
+ // return {
69
+ // mimeType: contentType,
70
+ // params: buildHarPostParams(contentType, body),
71
+ // };
72
+ // }
73
+ return {
74
+ mimeType: contentType,
75
+ text: body,
76
+ };
77
+ };
78
+ // create standard request har object: http://www.softwareishard.com/blog/har-12-spec/#request
79
+ // URL: https://github.com/hoppscotch/hoppscotch/blob/75ab7fdb00c0129ad42d45165bd3ad0af1faca2e/packages/hoppscotch-app/helpers/new-codegen/har.ts#L26
80
+ const createRequestHarObject = (requestHarObject, proxyToServerRequestOptions) => {
81
+ const { method, host, path, body, headers, agent, } = proxyToServerRequestOptions;
82
+ return {
83
+ bodySize: -1,
84
+ headersSize: -1,
85
+ httpVersion: "HTTP/1.1",
86
+ cookies: [],
87
+ headers: requestHarObject.headers || createHarHeaders(headers),
88
+ method: requestHarObject.method || method,
89
+ queryString: requestHarObject.queryString || createHarQueryStrings(path),
90
+ url: requestHarObject.url || ((agent === null || agent === void 0 ? void 0 : agent.protocol) || "http:") + "//" + host + path,
91
+ postData: requestHarObject.postData ||
92
+ createHarPostData(body, requestHarObject.headers),
93
+ };
94
+ };
95
+ exports.createRequestHarObject = createRequestHarObject;
96
+ const createHar = (requestHeaders, method, protocol, host, path, requestBody, responseStatusCode, response, responseHeaders) => {
97
+ return {
98
+ "log": {
99
+ "version": "1.2",
100
+ "creator": {},
101
+ "browser": {},
102
+ "pages": [],
103
+ "entries": [(0, exports.createHarEntry)(requestHeaders, method, protocol, host, path, requestBody, responseStatusCode, response, responseHeaders)],
104
+ "comment": ""
105
+ }
106
+ };
107
+ };
108
+ exports.createHar = createHar;
109
+ const createHarEntry = (requestHeaders, method, protocol, host, path, requestBody, responseStatusCode, response, responseHeaders) => {
110
+ return {
111
+ // "pageref": "page_0",
112
+ "startedDateTime": new Date().toISOString(),
113
+ // "time": 50,
114
+ "request": (0, exports.createHarRequest)(requestHeaders, method, protocol, host, path, requestBody),
115
+ "response": (0, exports.createHarResponse)(responseStatusCode, response, responseHeaders),
116
+ "cache": {},
117
+ "timings": {},
118
+ // "serverIPAddress": "10.0.0.1",
119
+ // "connection": "52492",
120
+ "comment": ""
121
+ };
122
+ };
123
+ exports.createHarEntry = createHarEntry;
124
+ const createHarRequest = (requestHeaders, method, protocol, host, path, requestBody) => {
125
+ return {
126
+ bodySize: -1,
127
+ headersSize: -1,
128
+ httpVersion: "HTTP/1.1",
129
+ cookies: [],
130
+ headers: createHarHeaders(requestHeaders),
131
+ method: method,
132
+ queryString: createHarQueryStrings(path),
133
+ url: protocol + "://" + host + path,
134
+ postData: createHarPostData(requestBody, createHarHeaders(requestHeaders)),
135
+ };
136
+ };
137
+ exports.createHarRequest = createHarRequest;
138
+ const createHarResponse = (responseStatusCode, response, responseHeaders) => {
139
+ return {
140
+ "status": responseStatusCode,
141
+ // "statusText": "OK",
142
+ "httpVersion": "HTTP/1.1",
143
+ "cookies": [],
144
+ "headers": createHarHeaders(responseHeaders),
145
+ "content": {
146
+ "size": 33,
147
+ "compression": 0,
148
+ "mimeType": (responseHeaders && responseHeaders["content-type"]),
149
+ "text": response,
150
+ "comment": ""
151
+ },
152
+ // "redirectURL": "",
153
+ "headersSize": -1,
154
+ "bodySize": -1,
155
+ "comment": ""
156
+ };
157
+ };
158
+ exports.createHarResponse = createHarResponse;
@@ -0,0 +1,2 @@
1
+ export function bodyParser(contentTypeHeader: any, buffer: any): any;
2
+ export function getContentType(contentTypeHeader: any): any;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getContentType = exports.bodyParser = void 0;
7
+ const charset_1 = __importDefault(require("charset"));
8
+ const mime_types_1 = __importDefault(require("mime-types"));
9
+ const bodyParser = (contentTypeHeader, buffer) => {
10
+ let inherentEncoding = (0, charset_1.default)(contentTypeHeader) || mime_types_1.default.charset(contentTypeHeader);
11
+ let str_buffer = null;
12
+ const isEncodingValid = (givenEncoding) => givenEncoding && Buffer.isEncoding(givenEncoding);
13
+ const setBufferString = (givenEncoding) => (str_buffer = buffer.toString(givenEncoding));
14
+ if (isEncodingValid(inherentEncoding)) {
15
+ setBufferString(inherentEncoding);
16
+ }
17
+ else {
18
+ const mostCommonEncodings = [
19
+ "utf8",
20
+ "utf16le",
21
+ "ascii",
22
+ "ucs2",
23
+ "base64",
24
+ "latin1",
25
+ "binary",
26
+ "hex",
27
+ ];
28
+ mostCommonEncodings.every((newPossibleEncoding) => {
29
+ if (isEncodingValid(newPossibleEncoding)) {
30
+ setBufferString(newPossibleEncoding);
31
+ return false;
32
+ }
33
+ });
34
+ }
35
+ return str_buffer;
36
+ };
37
+ exports.bodyParser = bodyParser;
38
+ const getContentType = (contentTypeHeader) => {
39
+ if (!contentTypeHeader) {
40
+ return null;
41
+ }
42
+ let contentType = null;
43
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
44
+ contentType = contentTypeHeader.split(";")[0];
45
+ return contentType;
46
+ };
47
+ exports.getContentType = getContentType;
@@ -0,0 +1,14 @@
1
+ export function get_request_url(ctx: any): string;
2
+ export function get_original_request_headers(ctx: any): any;
3
+ export function get_original_response_headers(ctx: any): any;
4
+ export function is_request_preflight(ctx: any): boolean;
5
+ export function get_response_options(ctx: any): {
6
+ status_code: any;
7
+ headers: any;
8
+ };
9
+ export function get_request_options(ctx: any): any;
10
+ export function getRequestHeaders(ctx: any): any;
11
+ export function getRequestContentTypeHeader(ctx: any): any;
12
+ export function getResponseHeaders(ctx: any): any;
13
+ export function getResponseContentTypeHeader(ctx: any): any;
14
+ export function getResponseStatusCode(ctx: any): any;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ // TODO: Removing this for now
3
+ // import {
4
+ // extractUrlComponent,
5
+ // getQueryParamsMap,
6
+ // } from "../../../../../../../common/components/utils/utils";
7
+ // const CONSTANTS = require("../../../../../../../common/constants");
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getResponseStatusCode = exports.getResponseContentTypeHeader = exports.getResponseHeaders = exports.getRequestContentTypeHeader = exports.getRequestHeaders = exports.get_request_options = exports.get_response_options = exports.is_request_preflight = exports.get_original_response_headers = exports.get_original_request_headers = exports.get_request_url = void 0;
10
+ const get_request_url = (ctx) => {
11
+ return ((ctx.isSSL ? "https://" : "http://") +
12
+ ctx.clientToProxyRequest.headers.host +
13
+ ctx.clientToProxyRequest.url);
14
+ };
15
+ exports.get_request_url = get_request_url;
16
+ const get_original_request_headers = (ctx) => {
17
+ // TODO: This needs to be fetched from ctx.clientToProxy headers
18
+ return ctx.proxyToServerRequestOptions.headers;
19
+ };
20
+ exports.get_original_request_headers = get_original_request_headers;
21
+ const get_original_response_headers = (ctx) => {
22
+ // TODO: This needs to be fetched from ctx.clientToProxy headers
23
+ return ctx.serverToProxyResponse.headers;
24
+ };
25
+ exports.get_original_response_headers = get_original_response_headers;
26
+ const is_request_preflight = (ctx) => {
27
+ if (
28
+ // Request method is OPTIONS
29
+ ctx.clientToProxyRequest.method.toLowerCase() === "options" &&
30
+ // Has "origin" or "Origin" or "ORIGIN" header
31
+ (ctx.clientToProxyRequest.headers["Origin"] ||
32
+ ctx.clientToProxyRequest.headers["origin"] ||
33
+ ctx.clientToProxyRequest.headers["ORIGIN"]) &&
34
+ // Has Access-Control-Request-Method header
35
+ (ctx.clientToProxyRequest.headers["Access-Control-Request-Method"] ||
36
+ ctx.clientToProxyRequest.headers["access-control-request-method"] ||
37
+ ctx.clientToProxyRequest.headers["ACCESS-CONTROL-REQUEST-METHOD"]))
38
+ return true;
39
+ else
40
+ return false;
41
+ };
42
+ exports.is_request_preflight = is_request_preflight;
43
+ const get_response_options = (ctx) => {
44
+ const options = {};
45
+ options.status_code = ctx.serverToProxyResponse.statusCode;
46
+ options.headers = ctx.serverToProxyResponse.headers;
47
+ return options;
48
+ };
49
+ exports.get_response_options = get_response_options;
50
+ const get_request_options = (ctx) => {
51
+ return Object.assign({}, ctx.proxyToServerRequestOptions);
52
+ };
53
+ exports.get_request_options = get_request_options;
54
+ // export const get_json_query_params = (ctx) => {
55
+ // const url = get_request_url(ctx);
56
+ // let queryString = extractUrlComponent(url, CONSTANTS.URL_COMPONENTS.QUERY);
57
+ // return getQueryParamsMap(queryString) || null;
58
+ // };
59
+ const getRequestHeaders = (ctx) => {
60
+ if (ctx && ctx.proxyToServerRequestOptions) {
61
+ return ctx.proxyToServerRequestOptions.headers || {};
62
+ }
63
+ return {};
64
+ };
65
+ exports.getRequestHeaders = getRequestHeaders;
66
+ const getRequestContentTypeHeader = (ctx) => {
67
+ return (0, exports.getRequestHeaders)(ctx)["content-type"];
68
+ };
69
+ exports.getRequestContentTypeHeader = getRequestContentTypeHeader;
70
+ const getResponseHeaders = (ctx) => {
71
+ if (ctx && ctx.serverToProxyResponse) {
72
+ return ctx.serverToProxyResponse.headers || {};
73
+ }
74
+ return {};
75
+ };
76
+ exports.getResponseHeaders = getResponseHeaders;
77
+ const getResponseContentTypeHeader = (ctx) => {
78
+ return (0, exports.getResponseHeaders)(ctx)["content-type"];
79
+ };
80
+ exports.getResponseContentTypeHeader = getResponseContentTypeHeader;
81
+ const getResponseStatusCode = (ctx) => {
82
+ if (ctx && ctx.serverToProxyResponse) {
83
+ return ctx.serverToProxyResponse.statusCode;
84
+ }
85
+ };
86
+ exports.getResponseStatusCode = getResponseStatusCode;
@@ -0,0 +1,3 @@
1
+ export function isResponseHTML(ctx: any): boolean;
2
+ export function parseStringToDOM(string: any): Document;
3
+ export function parseDOMToString(DOM: any): any;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDOMToString = exports.parseStringToDOM = exports.isResponseHTML = void 0;
4
+ const isResponseHTML = (ctx) => {
5
+ return (ctx.serverToProxyResponse.headers["content-type"] &&
6
+ ctx.serverToProxyResponse.headers["content-type"].indexOf("text/html") === 0);
7
+ };
8
+ exports.isResponseHTML = isResponseHTML;
9
+ const parseStringToDOM = (string) => {
10
+ return new DOMParser().parseFromString(string, "text/html");
11
+ };
12
+ exports.parseStringToDOM = parseStringToDOM;
13
+ const parseDOMToString = (DOM) => {
14
+ return DOM.documentElement.outerHTML;
15
+ // return new XMLSerializer().serializeToString(DOM);
16
+ };
17
+ exports.parseDOMToString = parseDOMToString;
@@ -0,0 +1,17 @@
1
+ export default RuleProcessorHelper;
2
+ declare class RuleProcessorHelper {
3
+ constructor(request_data?: any, response_data?: any);
4
+ request_data: any;
5
+ response_data: any;
6
+ init_request_data: (request_data: any) => void;
7
+ init_response_data: (response_data: any) => void;
8
+ process_rules: (rules: any, is_response?: boolean) => any;
9
+ process_rule: (rule: any, is_response?: boolean) => any;
10
+ add_rule_details_to_action: (rule_action: any, rule: any) => any;
11
+ process_url_modification_rule: (rule_processor: any, rule: any) => any;
12
+ process_request_modification_rule: (rule_processor: any, rule: any) => any;
13
+ process_response_modification_rule: (rule_processor: any, rule: any) => any;
14
+ process_request_headers_modification_rule: (rule_processor: any, rule: any) => any;
15
+ process_response_headers_modification_rule: (rule_processor: any, rule: any) => any;
16
+ process_user_agent_modification_rule: (rule_processor: any, rule: any) => any;
17
+ }
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const requestly_core_1 = require("@requestly/requestly-core");
4
+ const requestly_core_2 = require("@requestly/requestly-core");
5
+ class RuleProcessorHelper {
6
+ constructor(request_data = null, response_data = null) {
7
+ this.init_request_data = (request_data) => {
8
+ this.request_data = request_data;
9
+ };
10
+ this.init_response_data = (response_data) => {
11
+ this.response_data = response_data;
12
+ };
13
+ this.process_rules = (rules, is_response = false) => {
14
+ const rule_actions = rules.map((rule) => {
15
+ let rule_action = this.process_rule(rule, is_response);
16
+ return rule_action;
17
+ });
18
+ return rule_actions;
19
+ };
20
+ // Dont pass ctx here. Pass only readonly params from middleware
21
+ this.process_rule = (rule, is_response = false) => {
22
+ const rule_processor = requestly_core_1.RULE_PROCESSOR.getInstance(rule.ruleType);
23
+ let rule_action;
24
+ switch (rule.ruleType) {
25
+ case requestly_core_2.CONSTANTS.RULE_TYPES.REDIRECT:
26
+ case requestly_core_2.CONSTANTS.RULE_TYPES.REPLACE:
27
+ case requestly_core_2.CONSTANTS.RULE_TYPES.CANCEL:
28
+ case requestly_core_2.CONSTANTS.RULE_TYPES.QUERYPARAM:
29
+ case requestly_core_2.CONSTANTS.RULE_TYPES.SCRIPT:
30
+ case requestly_core_2.CONSTANTS.RULE_TYPES.DELAY:
31
+ rule_action = this.process_url_modification_rule(rule_processor, rule);
32
+ break;
33
+ case requestly_core_2.CONSTANTS.RULE_TYPES.REQUEST:
34
+ rule_action = this.process_request_modification_rule(rule_processor, rule);
35
+ break;
36
+ case requestly_core_2.CONSTANTS.RULE_TYPES.RESPONSE:
37
+ rule_action = this.process_response_modification_rule(rule_processor, rule);
38
+ break;
39
+ case requestly_core_2.CONSTANTS.RULE_TYPES.HEADERS:
40
+ if (is_response) {
41
+ rule_action = this.process_response_headers_modification_rule(rule_processor, rule);
42
+ }
43
+ else {
44
+ rule_action = this.process_request_headers_modification_rule(rule_processor, rule);
45
+ }
46
+ break;
47
+ case requestly_core_2.CONSTANTS.RULE_TYPES.USERAGENT:
48
+ rule_action = this.process_user_agent_modification_rule(rule_processor, rule);
49
+ break;
50
+ default:
51
+ break;
52
+ }
53
+ rule_action = this.add_rule_details_to_action(rule_action, rule);
54
+ return rule_action;
55
+ };
56
+ this.add_rule_details_to_action = (rule_action, rule) => {
57
+ if (rule_action) {
58
+ rule_action["rule_id"] = rule.id;
59
+ rule_action["rule_type"] = rule.ruleType;
60
+ }
61
+ return rule_action;
62
+ };
63
+ this.process_url_modification_rule = (rule_processor, rule) => {
64
+ const rule_action = rule_processor.process({
65
+ rule,
66
+ requestURL: this.request_data.request_url,
67
+ });
68
+ return rule_action;
69
+ };
70
+ this.process_request_modification_rule = (rule_processor, rule) => {
71
+ let requestData = {};
72
+ if (this.request_data.method == "POST") {
73
+ requestData = this.request_data.request_body;
74
+ }
75
+ else {
76
+ requestData = this.request_data.query_params;
77
+ }
78
+ const rule_action = rule_processor.process({
79
+ rule,
80
+ requestURL: this.request_data.request_url,
81
+ details: { requestData },
82
+ });
83
+ return rule_action;
84
+ };
85
+ this.process_response_modification_rule = (rule_processor, rule) => {
86
+ let requestData = {};
87
+ if (this.request_data.method == "POST") {
88
+ requestData = this.request_data.request_body;
89
+ }
90
+ else {
91
+ requestData = this.request_data.query_params;
92
+ }
93
+ const rule_action = rule_processor.process({
94
+ rule,
95
+ requestURL: this.request_data.request_url,
96
+ details: { requestData },
97
+ });
98
+ return rule_action;
99
+ };
100
+ this.process_request_headers_modification_rule = (rule_processor, rule) => {
101
+ // {"header1":"val1", "header2":"val2"}
102
+ const originalRequestHeadersObject = this.request_data.request_headers;
103
+ // ["header1","header2"]
104
+ const originalRequestHeadersObjectKeys = Object.keys(originalRequestHeadersObject);
105
+ // [{name:"header1", value:"val1"},{name:"header2", value:"val2"}]
106
+ const originalRequestHeadersObjectKeysValuePairs = originalRequestHeadersObjectKeys.map((key) => {
107
+ return {
108
+ name: key,
109
+ value: originalRequestHeadersObject[key],
110
+ };
111
+ });
112
+ const getRequestOrigin = () => {
113
+ if (originalRequestHeadersObject["Origin"])
114
+ return originalRequestHeadersObject["Origin"];
115
+ if (originalRequestHeadersObject["origin"])
116
+ return originalRequestHeadersObject["origin"];
117
+ if (originalRequestHeadersObject["ORIGIN"])
118
+ return originalRequestHeadersObject["ORIGIN"];
119
+ return "*";
120
+ };
121
+ // This would return only Request headers after processing
122
+ const rule_action = rule_processor.process({
123
+ requestURL: this.request_data.request_url,
124
+ rule,
125
+ originalHeaders: originalRequestHeadersObjectKeysValuePairs,
126
+ typeOfHeaders: requestly_core_2.CONSTANTS.HEADERS_TARGET.REQUEST,
127
+ payload: {
128
+ requestOrigin: getRequestOrigin(),
129
+ },
130
+ });
131
+ return rule_action;
132
+ };
133
+ this.process_response_headers_modification_rule = (rule_processor, rule) => {
134
+ // {"header1":"val1", "header2":"val2"}
135
+ const originalResponseHeadersObject = this.response_data.response_headers;
136
+ // ["header1","header2"]
137
+ const originalResponseHeadersObjectKeys = Object.keys(originalResponseHeadersObject);
138
+ // [{name:"header1", value:"val1"},{name:"header2", value:"val2"}]
139
+ const originalResponseHeadersObjectKeysValuePairs = originalResponseHeadersObjectKeys.map((key) => {
140
+ return {
141
+ name: key,
142
+ value: originalResponseHeadersObject[key],
143
+ };
144
+ });
145
+ const getRequestOrigin = () => {
146
+ // array [{ name: header_name,value: header_val }] -> {headerName1:"value1",headerName2 :"value2"}
147
+ const originalRequestHeadersConvertedObject = this.request_data.request_headers;
148
+ if (originalRequestHeadersConvertedObject["Origin"])
149
+ return originalRequestHeadersConvertedObject["Origin"];
150
+ if (originalRequestHeadersConvertedObject["origin"])
151
+ return originalRequestHeadersConvertedObject["origin"];
152
+ if (originalRequestHeadersConvertedObject["ORIGIN"])
153
+ return originalRequestHeadersConvertedObject["ORIGIN"];
154
+ return "*";
155
+ };
156
+ // This would return only Request headers after processing
157
+ const rule_action = rule_processor.process({
158
+ requestURL: this.request_data.request_url,
159
+ rule,
160
+ originalHeaders: originalResponseHeadersObjectKeysValuePairs,
161
+ typeOfHeaders: requestly_core_2.CONSTANTS.HEADERS_TARGET.RESPONSE,
162
+ payload: {
163
+ requestOrigin: getRequestOrigin(),
164
+ },
165
+ });
166
+ return rule_action;
167
+ };
168
+ this.process_user_agent_modification_rule = (rule_processor, rule) => {
169
+ /** REQUEST HEADERS */
170
+ // {"header1":"val1", "header2":"val2"}
171
+ const originalRequestHeadersObject = this.request_data.request_headers;
172
+ // ["header1","header2"]
173
+ const originalRequestHeadersObjectKeys = Object.keys(originalRequestHeadersObject);
174
+ // [{name:"header1", value:"val1"},{name:"header2", value:"val2"}]
175
+ const originalRequestHeadersObjectKeysValuePairs = originalRequestHeadersObjectKeys.map((key) => {
176
+ return {
177
+ name: key,
178
+ value: originalRequestHeadersObject[key],
179
+ };
180
+ });
181
+ const rule_action = rule_processor.process({
182
+ requestURL: this.request_data.request_url,
183
+ rule,
184
+ originalRequestHeaders: originalRequestHeadersObjectKeysValuePairs,
185
+ });
186
+ return rule_action;
187
+ };
188
+ this.request_data = request_data || {};
189
+ this.response_data = response_data || {};
190
+ }
191
+ }
192
+ exports.default = RuleProcessorHelper;
@@ -0,0 +1,25 @@
1
+ export namespace MIDDLEWARE_TYPE {
2
+ const AMIUSING: string;
3
+ const RULES: string;
4
+ const LOGGER: string;
5
+ const SSL_CERT: string;
6
+ }
7
+ export default ProxyMiddlewareManager;
8
+ declare class ProxyMiddlewareManager {
9
+ constructor(proxy: any, proxyConfig: any, rulesHelper: any, loggerService: any, sslConfigFetcher: any);
10
+ config: {};
11
+ proxy: any;
12
+ proxyConfig: any;
13
+ rulesHelper: any;
14
+ loggerService: any;
15
+ sslConfigFetcher: any;
16
+ init_config: (config?: {}) => void;
17
+ init: (config?: {}) => void;
18
+ request_handler_idx: number;
19
+ init_request_handler: (fn: any, is_detachable?: boolean) => number;
20
+ init_amiusing_handler: () => void;
21
+ init_ssl_cert_handler: () => void;
22
+ init_main_handler: () => void;
23
+ init_ssl_tunneling_handler: () => void;
24
+ init_handlers: () => void;
25
+ }