@requestly/requestly-proxy 1.1.20 → 1.1.22

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.
@@ -33,6 +33,19 @@ const bodyParser = (contentTypeHeader, buffer) => {
33
33
  });
34
34
  }
35
35
  return str_buffer;
36
+ /*
37
+ FOLLOWING IS HOW API CLIENT PARSES THE BODY
38
+ much simpler than above, but requires thorough testing
39
+ */
40
+ // // todo: add support for other content types
41
+ // let parsedResponse;
42
+ // if (contentTypeHeader?.includes("image/")) {
43
+ // const raw = Buffer.from(buffer).toString("base64");
44
+ // parsedResponse = `data:${contentTypeHeader};base64,${raw}`;
45
+ // } else {
46
+ // parsedResponse = new TextDecoder().decode(buffer);
47
+ // }
48
+ // return parsedResponse;
36
49
  };
37
50
  exports.bodyParser = bodyParser;
38
51
  const getContentType = (contentTypeHeader) => {
@@ -160,18 +160,15 @@ class ProxyMiddlewareManager {
160
160
  const contentTypeHeader = (0, proxy_ctx_helper_1.getResponseContentTypeHeader)(ctx);
161
161
  const contentType = (0, http_helpers_1.getContentType)(contentTypeHeader);
162
162
  const parsedBody = (0, http_helpers_1.bodyParser)(contentTypeHeader, body);
163
+ ctx.rq.set_original_response({ body: parsedBody });
163
164
  ctx.rq_response_body = body;
165
+ ctx.rq_parsed_response_body = parsedBody;
164
166
  ctx.rq_response_status_code = (0, proxy_ctx_helper_1.getResponseStatusCode)(ctx);
165
167
  if (constants_1.RQ_INTERCEPTED_CONTENT_TYPES.includes(contentType) && parsedBody) {
166
- ctx.rq.set_original_response({ body: parsedBody });
167
- // Body and status code before any modifications
168
168
  ctx.rq_response_body = parsedBody;
169
- const { action_result_objs, continue_request } = yield rules_middleware.on_response_end(ctx);
170
- // ctx.rq_response_body, ctx.rq_response_status_code after modifications
171
- // TODO: @sahil to investigate why this is need
172
- // Remove some conflicting headers like content-length, if any
173
- delete (0, proxy_ctx_helper_1.getResponseHeaders)(ctx)["content-length"];
169
+ ctx.rq.set_original_response({ body: parsedBody });
174
170
  }
171
+ const { action_result_objs, continue_request } = yield rules_middleware.on_response_end(ctx);
175
172
  const statusCode = ctx.rq_response_status_code || (0, proxy_ctx_helper_1.getResponseStatusCode)(ctx);
176
173
  ctx.proxyToClientResponse.writeHead(statusCode, http_1.default.STATUS_CODES[statusCode], (0, proxy_ctx_helper_1.getResponseHeaders)(ctx));
177
174
  ctx.proxyToClientResponse.write(ctx.rq_response_body);
@@ -20,6 +20,7 @@ const fs_1 = __importDefault(require("fs"));
20
20
  const http_helpers_1 = require("../../helpers/http_helpers");
21
21
  const capture_console_logs_1 = __importDefault(require("capture-console-logs"));
22
22
  const utils_2 = require("../../../../utils");
23
+ const constants_1 = require("../../constants");
23
24
  const { types } = require("util");
24
25
  const process_modify_response_action = (action, ctx) => __awaiter(void 0, void 0, void 0, function* () {
25
26
  const allowed_handlers = [proxy_1.PROXY_HANDLER_TYPE.ON_REQUEST, proxy_1.PROXY_HANDLER_TYPE.ON_RESPONSE_END, proxy_1.PROXY_HANDLER_TYPE.ON_ERROR];
@@ -47,18 +48,32 @@ const process_modify_response_action = (action, ctx) => __awaiter(void 0, void 0
47
48
  }
48
49
  if (action.responseType &&
49
50
  action.responseType === requestly_core_1.CONSTANTS.RESPONSE_BODY_TYPES.CODE) {
50
- yield modify_response_using_code(action, ctx);
51
- return (0, utils_1.build_action_processor_response)(action, true);
51
+ const contentTypeHeader = (0, proxy_ctx_helper_1.getResponseContentTypeHeader)(ctx);
52
+ const contentType = (0, http_helpers_1.getContentType)(contentTypeHeader);
53
+ if (constants_1.RQ_INTERCEPTED_CONTENT_TYPES.includes(contentType) || contentType == null) {
54
+ yield modify_response_using_code(action, ctx);
55
+ delete_breaking_headers(ctx);
56
+ return (0, utils_1.build_action_processor_response)(action, true);
57
+ }
58
+ // Sentry not working
59
+ // Sentry.captureException(new Error(`Content Type ${contentType} not supported for modification in programmatic mode`));
60
+ console.log(`Content Type ${contentType} not supported for modification in programmatic mode`);
61
+ return (0, utils_1.build_action_processor_response)(action, false);
52
62
  }
53
63
  else if (action.responseType === requestly_core_1.CONSTANTS.RESPONSE_BODY_TYPES.LOCAL_FILE) {
54
64
  modify_response_using_local(action, ctx);
65
+ delete_breaking_headers(ctx);
55
66
  return (0, utils_1.build_action_processor_response)(action, true);
56
67
  }
57
68
  else {
58
69
  modify_response(ctx, action.response, action.statusCode);
70
+ delete_breaking_headers(ctx);
59
71
  return (0, utils_1.build_action_processor_response)(action, true);
60
72
  }
61
73
  });
74
+ const delete_breaking_headers = (ctx) => {
75
+ delete (0, proxy_ctx_helper_1.getResponseHeaders)(ctx)['content-length'];
76
+ };
62
77
  const modify_response = (ctx, new_resp, status_code) => {
63
78
  ctx.rq_response_body = new_resp;
64
79
  ctx.rq_response_status_code = status_code;
@@ -97,7 +112,7 @@ const modify_response_using_code = (action, ctx) => __awaiter(void 0, void 0, vo
97
112
  ? ctx.clientToProxyRequest.method
98
113
  : null
99
114
  : null,
100
- response: ctx === null || ctx === void 0 ? void 0 : ctx.rq_response_body,
115
+ response: ctx === null || ctx === void 0 ? void 0 : ctx.rq_parsed_response_body,
101
116
  url: (0, proxy_ctx_helper_1.get_request_url)(ctx),
102
117
  responseType: (_c = (_b = ctx === null || ctx === void 0 ? void 0 : ctx.serverToProxyResponse) === null || _b === void 0 ? void 0 : _b.headers) === null || _c === void 0 ? void 0 : _c["content-type"],
103
118
  requestHeaders: ctx.clientToProxyRequest.headers,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@requestly/requestly-proxy",
3
- "version": "1.1.20",
3
+ "version": "1.1.22",
4
4
  "description": "Proxy that gives superpowers to all the Requestly clients",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {