perimeterx-js-core 0.3.0 → 0.4.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 (119) hide show
  1. package/README.md +16 -9
  2. package/lib/activities/HttpActivityClient.d.ts +1 -1
  3. package/lib/activities/HttpActivityClient.js +7 -4
  4. package/lib/activities/HttpBatchedActivityClient.d.ts +1 -1
  5. package/lib/activities/utils.js +1 -1
  6. package/lib/block_handler/DefaultBlockResponseGenerator.d.ts +2 -2
  7. package/lib/block_handler/DefaultBlockResponseGenerator.js +7 -2
  8. package/lib/block_handler/IBlockResponseGenerator.d.ts +2 -2
  9. package/lib/block_handler/captcha/CaptchaBlockResponseGenerator.d.ts +2 -2
  10. package/lib/block_handler/captcha/HtmlCaptchaResponseGenerator.d.ts +2 -2
  11. package/lib/block_handler/captcha/HtmlCaptchaResponseGenerator.js +6 -1
  12. package/lib/block_handler/captcha/JsonCaptchaResponseGenerator.d.ts +2 -2
  13. package/lib/block_handler/captcha/JsonCaptchaResponseGenerator.js +8 -4
  14. package/lib/block_handler/captcha/MobileCaptchaResponseGenerator.d.ts +2 -2
  15. package/lib/block_handler/captcha/MobileCaptchaResponseGenerator.js +6 -1
  16. package/lib/config/DefaultConfigurations.js +4 -4
  17. package/lib/context/ContextBase.d.ts +6 -5
  18. package/lib/context/ContextBase.js +11 -14
  19. package/lib/context/DefaultTokenV2Context.d.ts +2 -2
  20. package/lib/context/DefaultTokenV2Context.js +1 -1
  21. package/lib/context/DefaultTokenV3Context.d.ts +2 -2
  22. package/lib/context/DefaultTokenV3Context.js +1 -1
  23. package/lib/context/IContext.d.ts +6 -4
  24. package/lib/custom_parameters/CustomParametersFunction.d.ts +2 -2
  25. package/lib/enforcer/EnforcerBase.d.ts +14 -26
  26. package/lib/enforcer/EnforcerBase.js +13 -12
  27. package/lib/filter/DefaultFilter.js +1 -1
  28. package/lib/first_party/DefaultFirstParty.d.ts +3 -2
  29. package/lib/first_party/DefaultFirstParty.js +44 -34
  30. package/lib/first_party/IFirstParty.d.ts +2 -2
  31. package/lib/first_party/constants.d.ts +2 -9
  32. package/lib/first_party/constants.js +7 -9
  33. package/lib/graphql/DefaultGraphQLParser.js +7 -11
  34. package/lib/http/impl/MinimalResponseImpl.d.ts +13 -0
  35. package/lib/http/impl/MinimalResponseImpl.js +12 -0
  36. package/lib/http/impl/OutgoingRequestImpl.d.ts +14 -0
  37. package/lib/http/impl/OutgoingRequestImpl.js +14 -0
  38. package/lib/http/impl/index.d.ts +2 -0
  39. package/lib/http/impl/index.js +18 -0
  40. package/lib/http/index.d.ts +2 -9
  41. package/lib/http/index.js +2 -11
  42. package/lib/http/interfaces/IBody.d.ts +26 -0
  43. package/lib/http/interfaces/IHttpClient.d.ts +8 -0
  44. package/lib/http/interfaces/IIncomingRequest.d.ts +23 -0
  45. package/lib/http/interfaces/IIncomingResponse.d.ts +9 -0
  46. package/lib/http/interfaces/IMinimalResponse.d.ts +6 -0
  47. package/lib/http/interfaces/IOutgoingRequest.d.ts +11 -0
  48. package/lib/http/interfaces/IOutgoingRequest.js +2 -0
  49. package/lib/http/interfaces/IOutgoingResponse.d.ts +17 -0
  50. package/lib/http/interfaces/IOutgoingResponse.js +2 -0
  51. package/lib/http/interfaces/ReadOnlyHeaders.d.ts +3 -0
  52. package/lib/http/interfaces/ReadOnlyHeaders.js +25 -0
  53. package/lib/http/interfaces/index.d.ts +7 -0
  54. package/lib/http/interfaces/index.js +23 -0
  55. package/lib/http/utils/MinimalResponseUtils.d.ts +4 -0
  56. package/lib/http/utils/MinimalResponseUtils.js +39 -0
  57. package/lib/http/utils/index.d.ts +1 -3
  58. package/lib/http/utils/index.js +2 -5
  59. package/lib/pxde/IDataEnrichment.d.ts +1 -1
  60. package/lib/pxhd/PXHDUtils.d.ts +5 -2
  61. package/lib/pxhd/PXHDUtils.js +17 -2
  62. package/lib/risk_api/PostRiskApiClient.d.ts +3 -2
  63. package/lib/risk_api/PostRiskApiClient.js +14 -11
  64. package/lib/risk_api/S2SErrorHandler.d.ts +2 -2
  65. package/lib/risk_api/S2SErrorHandler.js +1 -1
  66. package/lib/risk_api/risk_response_handler/IRiskResponseHandler.d.ts +2 -2
  67. package/lib/risk_api/risk_response_handler/RiskResponseHandlerBase.d.ts +2 -2
  68. package/lib/risk_token/token/v2/DefaultBotDefenderTokenV2.js +12 -4
  69. package/lib/telemetry/DefaultTelemetry.d.ts +2 -1
  70. package/lib/telemetry/DefaultTelemetry.js +16 -7
  71. package/lib/utils/IScoreRetriever.d.ts +1 -1
  72. package/lib/utils/base64/{DefaultBase64Utils.d.ts → AtobBase64Utils.d.ts} +2 -2
  73. package/lib/utils/base64/AtobBase64Utils.js +15 -0
  74. package/lib/utils/base64/BufferBase64Utils.d.ts +6 -0
  75. package/lib/utils/base64/BufferBase64Utils.js +18 -0
  76. package/lib/utils/base64/JSBase64Base64Utils.d.ts +5 -0
  77. package/lib/utils/base64/JSBase64Base64Utils.js +16 -0
  78. package/lib/utils/base64/index.d.ts +4 -2
  79. package/lib/utils/base64/index.js +18 -3
  80. package/lib/utils/cipher/CryptoCipherUtils.d.ts +12 -0
  81. package/lib/{http/body_reader/StringBodyReader.js → utils/cipher/CryptoCipherUtils.js} +20 -25
  82. package/lib/utils/cipher/SubtleCryptoCipherUtils.d.ts +9 -0
  83. package/lib/utils/cipher/SubtleCryptoCipherUtils.js +94 -0
  84. package/lib/utils/cipher/index.d.ts +2 -0
  85. package/lib/utils/cipher/index.js +16 -0
  86. package/lib/utils/constants.d.ts +1 -1
  87. package/lib/utils/constants.js +1 -1
  88. package/lib/utils/hash/CryptoHmacUtils.d.ts +11 -0
  89. package/lib/utils/hash/CryptoHmacUtils.js +25 -0
  90. package/lib/utils/hash/{DefaultHashUtils.d.ts → CryptoJSHmacUtils.d.ts} +1 -1
  91. package/lib/utils/hash/CryptoJSHmacUtils.js +19 -0
  92. package/lib/utils/hash/index.d.ts +3 -2
  93. package/lib/utils/hash/index.js +17 -3
  94. package/lib/utils/utils.d.ts +1 -2
  95. package/lib/utils/utils.js +14 -3
  96. package/package.json +1 -1
  97. package/lib/http/IHttpClient.d.ts +0 -14
  98. package/lib/http/body_reader/IBodyReader.d.ts +0 -5
  99. package/lib/http/body_reader/StringBodyReader.d.ts +0 -8
  100. package/lib/http/request/DefaultHttpRequest.d.ts +0 -5
  101. package/lib/http/request/DefaultHttpRequest.js +0 -42
  102. package/lib/http/request/HttpRequestBase.d.ts +0 -24
  103. package/lib/http/request/HttpRequestBase.js +0 -77
  104. package/lib/http/request/IHttpRequest.d.ts +0 -31
  105. package/lib/http/response/DefaultHttpResponse.d.ts +0 -5
  106. package/lib/http/response/DefaultHttpResponse.js +0 -32
  107. package/lib/http/response/HttpResponseBase.d.ts +0 -17
  108. package/lib/http/response/HttpResponseBase.js +0 -75
  109. package/lib/http/response/IHttpResponse.d.ts +0 -26
  110. package/lib/http/utils/HttpBody.d.ts +0 -4
  111. package/lib/http/utils/HttpHeaders.d.ts +0 -53
  112. package/lib/http/utils/HttpHeaders.js +0 -123
  113. package/lib/utils/base64/DefaultBase64Utils.js +0 -16
  114. package/lib/utils/hash/DefaultHashUtils.js +0 -19
  115. /package/lib/http/{IHttpClient.js → interfaces/IBody.js} +0 -0
  116. /package/lib/http/{body_reader/IBodyReader.js → interfaces/IHttpClient.js} +0 -0
  117. /package/lib/http/{request/IHttpRequest.js → interfaces/IIncomingRequest.js} +0 -0
  118. /package/lib/http/{response/IHttpResponse.js → interfaces/IIncomingResponse.js} +0 -0
  119. /package/lib/http/{utils/HttpBody.js → interfaces/IMinimalResponse.js} +0 -0
package/README.md CHANGED
@@ -100,17 +100,24 @@ or use an external library (e.g., `phin`, `axios`) if needed.
100
100
 
101
101
  ### Crypto
102
102
 
103
- Since cryptographic functionality varies from platform to platform, this library's crypto utils takes the form of an interface
103
+ Since cryptographic functionality varies from platform to platform, this library's crypto utils takes the form of interfaces
104
104
  as well.
105
105
 
106
- `IBase64Utils` - Represents a Base64 encoding and decoding utility that other components may require. A `DefaultBase64Utils`
107
- implementation using the `js-base64` dependency is provided.
106
+ `IBase64Utils` - Represents a Base64 encoding and decoding utility that other components may require. The following implementations
107
+ are provided:
108
+ * `AtobBase64Utils`, which relies on native `atob` and `btoa` functions.
109
+ * `BufferBase64Utils`, which relies on the native NodeJS `Buffer.from()` function.
110
+ * `JSBase64Base64Utils`, which uses the `js-base64` dependency.
108
111
 
109
- `IHashUtils` - Represents an HMAC-generating utility that other components may require. A `DefaultHashUtils`
110
- implementation using the `crypto-js` dependency is provided.
112
+ `IHashUtils` - Represents an HMAC-generating utility that other components may require. The following implementations are
113
+ provided:
114
+ * `CryptoHmacUtils`, which relies on the native NodeJS `crypto` package.
115
+ * `CryptoJSHmacUtils`, which uses the `crypto-js` dependency.
111
116
 
112
- `ICipherUtils` - Represents an encryption and decryption utility that is required for RiskTokenV3. No default
113
- implementation is provided.
117
+ `ICipherUtils` - Represents an encryption and decryption utility that is required for RiskTokenV3. The following implementations
118
+ are provided:
119
+ * `CryptoCipherUtils`, which relies on the native NodeJS `crypto` package.
120
+ * `SubtleCryptoCipherUtils`, which relies on an object implementing the `SubtleCrypto` interface. By default, it is assumed that the global `crypto.subtle` implements this interface.
114
121
 
115
122
  ### Other Dependencies
116
123
 
@@ -119,8 +126,8 @@ can be swapped with other implementations. These classes are:
119
126
 
120
127
  | **Library** | **Implementation** | **Used For** |
121
128
  | :--- | :--- | :--- |
122
- | `crypto-js` | `DefaultHashUtils` | PXDE, telemetry, risk token V2/V3, etc. |
123
- | `js-base64` | `DefaultBase64Utils` | PXDE, telemetry, risk token V2, etc. |
129
+ | `crypto-js` | `CryptoJSHmacUtils` | PXDE, telemetry, risk token V2/V3, etc. |
130
+ | `js-base64` | `JSBase64Base64Utils` | PXDE, telemetry, risk token V2, etc. |
124
131
  | `cookie` | `DefaultCookieParser` | `ContextBase` |
125
132
  | `uuid` | `DefaultUuidGenerator` | `ContextBase` |
126
133
  | `ip-range-check` | `DefaultIpRangeChecker` | `DefaultFilter` |
@@ -1,8 +1,8 @@
1
1
  import { IConfiguration } from '../config';
2
2
  import { IContext } from '../context';
3
- import { IHttpClient } from '../http';
4
3
  import { IActivityClient } from './IActivityClient';
5
4
  import { Activity } from './model/Activity';
5
+ import { IHttpClient } from '../http';
6
6
  export declare class HttpActivityClient implements IActivityClient {
7
7
  private readonly config;
8
8
  private readonly httpClient;
@@ -42,6 +42,8 @@ var utils_1 = require("../utils");
42
42
  var ActivityType_1 = require("./ActivityType");
43
43
  var utils_2 = require("./utils");
44
44
  var constants_1 = require("./constants");
45
+ var http_2 = require("../http");
46
+ var http_3 = require("../http");
45
47
  var HttpActivityClient = /** @class */ (function () {
46
48
  function HttpActivityClient(config, httpClient) {
47
49
  this.config = config;
@@ -87,13 +89,13 @@ var HttpActivityClient = /** @class */ (function () {
87
89
  };
88
90
  HttpActivityClient.prototype.postActivities = function (activities) {
89
91
  return __awaiter(this, void 0, void 0, function () {
90
- var url, method, headers, body, status;
92
+ var url, method, headers, body, req, status;
91
93
  var _a;
92
94
  return __generator(this, function (_b) {
93
95
  switch (_b.label) {
94
96
  case 0:
95
97
  url = "".concat(this.config.backendCollectorUrl).concat(constants_1.ACTIVITIES_ENDPOINT);
96
- method = http_1.HttpMethod.POST;
98
+ method = http_2.HttpMethod.POST;
97
99
  headers = (_a = {},
98
100
  _a[http_1.CONTENT_TYPE_HEADER_NAME] = [http_1.ContentType.APPLICATION_JSON],
99
101
  _a[http_1.AUTHORIZATION_HEADER_NAME] = [(0, utils_1.getAuthorizationHeader)(this.config.authToken)],
@@ -103,9 +105,10 @@ var HttpActivityClient = /** @class */ (function () {
103
105
  var type = _a.type;
104
106
  return "".concat(type, " activity");
105
107
  }).join(', '), " to ").concat(url));
106
- return [4 /*yield*/, this.httpClient.send(new http_1.DefaultHttpRequest(url, { method: method, headers: headers, body: body }))];
108
+ req = new http_3.OutgoingRequestImpl({ url: url, method: method, headers: headers, body: body });
109
+ return [4 /*yield*/, this.httpClient.send(req).then(function (resp) { return resp.status; })];
107
110
  case 1:
108
- status = (_b.sent()).status;
111
+ status = _b.sent();
109
112
  return [2 /*return*/, status === 200];
110
113
  }
111
114
  });
@@ -1,7 +1,7 @@
1
1
  import { HttpActivityClient } from './HttpActivityClient';
2
2
  import { IConfiguration } from '../config';
3
- import { IHttpClient } from '../http';
4
3
  import { Activity } from './model/Activity';
4
+ import { IHttpClient } from '../http';
5
5
  export declare class HttpBatchedActivityClient extends HttpActivityClient {
6
6
  private readonly batchSize;
7
7
  private readonly timeoutMs;
@@ -8,7 +8,7 @@ var createActivity = function (activityType, config, context) {
8
8
  type: activityType,
9
9
  px_app_id: config.appId,
10
10
  url: context.requestData.url.href,
11
- headers: (0, utils_1.removeSensitiveHeaders)(context.requestData.headers, config.sensitiveHeaders).toObject(','),
11
+ headers: (0, utils_1.removeSensitiveHeaders)(context.requestData.headers, config.sensitiveHeaders),
12
12
  pxhd: context.pxhd,
13
13
  socket_ip: context.requestData.ip,
14
14
  timestamp: Date.now(),
@@ -1,14 +1,14 @@
1
1
  import { IContext } from '../context';
2
2
  import { IConfiguration } from '../config';
3
- import { IHttpResponse } from '../http';
4
3
  import { IBase64Utils } from '../utils';
5
4
  import { IBlockResponseGenerator } from './IBlockResponseGenerator';
5
+ import { IMinimalResponse } from '../http';
6
6
  export declare class DefaultBlockResponseGenerator implements IBlockResponseGenerator {
7
7
  private readonly config;
8
8
  private readonly captchaResponseGenerator;
9
9
  constructor(config: IConfiguration, base64Utils: IBase64Utils);
10
10
  shouldGenerate(context: IContext): boolean;
11
- generateBlockResponse(context: IContext): IHttpResponse;
11
+ generateBlockResponse(context: IContext): IMinimalResponse;
12
12
  private generateRateLimitResponse;
13
13
  private generateCaptchaResponse;
14
14
  }
@@ -6,6 +6,7 @@ var http_1 = require("../http");
6
6
  var BlockAction_1 = require("./BlockAction");
7
7
  var CaptchaBlockResponseGenerator_1 = require("./captcha/CaptchaBlockResponseGenerator");
8
8
  var rate_limit_template_1 = require("./templates/rate_limit_template");
9
+ var http_2 = require("../http");
9
10
  var DefaultBlockResponseGenerator = /** @class */ (function () {
10
11
  function DefaultBlockResponseGenerator(config, base64Utils) {
11
12
  this.config = config;
@@ -26,7 +27,7 @@ var DefaultBlockResponseGenerator = /** @class */ (function () {
26
27
  res = this.generateCaptchaResponse(context);
27
28
  break;
28
29
  }
29
- return pxhd_1.PXHDUtils.addPxhdToResponse(context, res);
30
+ return pxhd_1.PXHDUtils.addPxhdToMinimalResponse(context, res);
30
31
  };
31
32
  DefaultBlockResponseGenerator.prototype.generateRateLimitResponse = function () {
32
33
  var _a;
@@ -34,7 +35,11 @@ var DefaultBlockResponseGenerator = /** @class */ (function () {
34
35
  var headers = (_a = {},
35
36
  _a[http_1.CONTENT_TYPE_HEADER_NAME] = [http_1.ContentType.TEXT_HTML],
36
37
  _a);
37
- return new http_1.DefaultHttpResponse(rate_limit_template_1.RATE_LIMIT_TEMPLATE, { status: status, headers: headers });
38
+ return new http_2.MinimalResponseImpl({
39
+ body: rate_limit_template_1.RATE_LIMIT_TEMPLATE,
40
+ status: status,
41
+ headers: headers,
42
+ });
38
43
  };
39
44
  DefaultBlockResponseGenerator.prototype.generateCaptchaResponse = function (context) {
40
45
  return this.captchaResponseGenerator.generateBlockResponse(context);
@@ -1,5 +1,5 @@
1
1
  import { IContext } from '../context';
2
- import { IHttpResponse } from '../http';
2
+ import { IMinimalResponse } from '../http';
3
3
  export interface IBlockResponseGenerator {
4
4
  /**
5
5
  * @param context - The request context.
@@ -10,5 +10,5 @@ export interface IBlockResponseGenerator {
10
10
  * @param context - The request context.
11
11
  * @returns IHttpResponse - The block response that should be returned to the end-user.
12
12
  */
13
- generateBlockResponse(context: IContext): IHttpResponse;
13
+ generateBlockResponse(context: IContext): IMinimalResponse;
14
14
  }
@@ -1,8 +1,8 @@
1
1
  import { IConfiguration } from '../../config';
2
2
  import { IContext } from '../../context';
3
- import { IHttpResponse } from '../../http';
4
3
  import { IBase64Utils } from '../../utils';
5
4
  import { IBlockResponseGenerator } from '../IBlockResponseGenerator';
5
+ import { IMinimalResponse } from '../../http';
6
6
  export declare class CaptchaBlockResponseGenerator implements IBlockResponseGenerator {
7
7
  private readonly config;
8
8
  private readonly jsonCaptchaGenerator;
@@ -10,5 +10,5 @@ export declare class CaptchaBlockResponseGenerator implements IBlockResponseGene
10
10
  private readonly htmlCaptchaGenerator;
11
11
  constructor(config: IConfiguration, base64Utils: IBase64Utils);
12
12
  shouldGenerate({ blockAction }: IContext): boolean;
13
- generateBlockResponse(context: IContext): IHttpResponse;
13
+ generateBlockResponse(context: IContext): IMinimalResponse;
14
14
  }
@@ -1,10 +1,10 @@
1
1
  import { IConfiguration } from '../../config';
2
2
  import { IContext } from '../../context';
3
- import { IHttpResponse } from '../../http';
4
3
  import { IBlockResponseGenerator } from '../IBlockResponseGenerator';
4
+ import { IMinimalResponse } from '../../http';
5
5
  export declare class HtmlCaptchaResponseGenerator implements IBlockResponseGenerator {
6
6
  private readonly config;
7
7
  constructor(config: IConfiguration);
8
8
  shouldGenerate(context: IContext): boolean;
9
- generateBlockResponse(context: IContext): IHttpResponse;
9
+ generateBlockResponse(context: IContext): IMinimalResponse;
10
10
  }
@@ -4,6 +4,7 @@ exports.HtmlCaptchaResponseGenerator = void 0;
4
4
  var http_1 = require("../../http");
5
5
  var utils_1 = require("../utils");
6
6
  var captcha_template_1 = require("../templates/captcha_template");
7
+ var http_2 = require("../../http");
7
8
  var HtmlCaptchaResponseGenerator = /** @class */ (function () {
8
9
  function HtmlCaptchaResponseGenerator(config) {
9
10
  this.config = config;
@@ -18,7 +19,11 @@ var HtmlCaptchaResponseGenerator = /** @class */ (function () {
18
19
  _a[http_1.CONTENT_TYPE_HEADER_NAME] = [http_1.ContentType.TEXT_HTML],
19
20
  _a);
20
21
  var body = (0, utils_1.renderHtml)(captcha_template_1.CAPTCHA_TEMPLATE, (0, utils_1.createBlockData)(this.config, context));
21
- return new http_1.DefaultHttpResponse(body, { status: status, headers: headers });
22
+ return new http_2.MinimalResponseImpl({
23
+ body: body,
24
+ status: status,
25
+ headers: headers,
26
+ });
22
27
  };
23
28
  return HtmlCaptchaResponseGenerator;
24
29
  }());
@@ -1,10 +1,10 @@
1
1
  import { IConfiguration } from '../../config';
2
2
  import { IContext } from '../../context';
3
- import { IHttpResponse } from '../../http';
4
3
  import { IBlockResponseGenerator } from '../IBlockResponseGenerator';
4
+ import { IMinimalResponse } from '../../http';
5
5
  export declare class JsonCaptchaResponseGenerator implements IBlockResponseGenerator {
6
6
  private readonly config;
7
7
  constructor(config: IConfiguration);
8
8
  shouldGenerate(context: IContext): boolean;
9
- generateBlockResponse(context: IContext): IHttpResponse;
9
+ generateBlockResponse(context: IContext): IMinimalResponse;
10
10
  }
@@ -4,17 +4,17 @@ exports.JsonCaptchaResponseGenerator = void 0;
4
4
  var BlockAction_1 = require("../BlockAction");
5
5
  var http_1 = require("../../http");
6
6
  var utils_1 = require("../utils");
7
+ var http_2 = require("../../http");
7
8
  var JsonCaptchaResponseGenerator = /** @class */ (function () {
8
9
  function JsonCaptchaResponseGenerator(config) {
9
10
  this.config = config;
10
11
  }
11
12
  JsonCaptchaResponseGenerator.prototype.shouldGenerate = function (context) {
12
- var _a, _b;
13
13
  if (!this.config.advancedBlockingResponseEnabled) {
14
14
  return false;
15
15
  }
16
- var acceptHeaderValue = ((_a = context.requestData.headers.get(http_1.ACCEPT_HEADER_NAME)) === null || _a === void 0 ? void 0 : _a[0]) ||
17
- ((_b = context.requestData.headers.get(http_1.CONTENT_TYPE_HEADER_NAME)) === null || _b === void 0 ? void 0 : _b[0]) ||
16
+ var acceptHeaderValue = context.requestData.request.headers.get(http_1.ACCEPT_HEADER_NAME) ||
17
+ context.requestData.request.headers.get(http_1.CONTENT_TYPE_HEADER_NAME) ||
18
18
  '';
19
19
  var acceptHeaderContainsJson = acceptHeaderValue === null || acceptHeaderValue === void 0 ? void 0 : acceptHeaderValue.split(',').some(function (value) { return value.toLowerCase() === http_1.ContentType.APPLICATION_JSON; });
20
20
  return !context.isMobile && context.blockAction !== BlockAction_1.BlockAction.RATE_LIMIT && acceptHeaderContainsJson;
@@ -37,7 +37,11 @@ var JsonCaptchaResponseGenerator = /** @class */ (function () {
37
37
  blockScript: blockData.blockScript,
38
38
  altBlockScript: blockData.altBlockScript,
39
39
  };
40
- return new http_1.DefaultHttpResponse(JSON.stringify(jsonBlockPayload), { status: status, headers: headers });
40
+ return new http_2.MinimalResponseImpl({
41
+ body: JSON.stringify(jsonBlockPayload),
42
+ status: status,
43
+ headers: headers,
44
+ });
41
45
  };
42
46
  return JsonCaptchaResponseGenerator;
43
47
  }());
@@ -1,12 +1,12 @@
1
1
  import { IConfiguration } from '../../config';
2
2
  import { IContext } from '../../context';
3
- import { IHttpResponse } from '../../http';
4
3
  import { IBase64Utils } from '../../utils';
5
4
  import { IBlockResponseGenerator } from '../IBlockResponseGenerator';
5
+ import { IMinimalResponse } from '../../http';
6
6
  export declare class MobileCaptchaResponseGenerator implements IBlockResponseGenerator {
7
7
  private readonly config;
8
8
  private readonly base64Utils;
9
9
  constructor(config: IConfiguration, base64Utils: IBase64Utils);
10
10
  shouldGenerate(context: IContext): boolean;
11
- generateBlockResponse(context: IContext): IHttpResponse;
11
+ generateBlockResponse(context: IContext): IMinimalResponse;
12
12
  }
@@ -5,6 +5,7 @@ var http_1 = require("../../http");
5
5
  var BlockAction_1 = require("../BlockAction");
6
6
  var utils_1 = require("../utils");
7
7
  var captcha_template_1 = require("../templates/captcha_template");
8
+ var http_2 = require("../../http");
8
9
  var MobileCaptchaResponseGenerator = /** @class */ (function () {
9
10
  function MobileCaptchaResponseGenerator(config, base64Utils) {
10
11
  this.config = config;
@@ -29,7 +30,11 @@ var MobileCaptchaResponseGenerator = /** @class */ (function () {
29
30
  page: this.base64Utils.base64Encode(captchaPage),
30
31
  collectorHost: this.config.backendCollectorUrl,
31
32
  };
32
- return new http_1.DefaultHttpResponse(JSON.stringify(mobileBlockPayload), { status: status, headers: headers });
33
+ return new http_2.MinimalResponseImpl({
34
+ body: JSON.stringify(mobileBlockPayload),
35
+ status: status,
36
+ headers: headers,
37
+ });
33
38
  };
34
39
  return MobileCaptchaResponseGenerator;
35
40
  }());
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_CONFIGURATIONS = void 0;
4
- var LoggerSeverity_1 = require("../logger/LoggerSeverity");
5
- var ModuleMode_1 = require("../utils/ModuleMode");
4
+ var logger_1 = require("../logger");
5
+ var utils_1 = require("../utils");
6
6
  exports.DEFAULT_CONFIGURATIONS = {
7
7
  px_app_id: '',
8
8
  px_auth_token: '',
@@ -13,11 +13,11 @@ exports.DEFAULT_CONFIGURATIONS = {
13
13
  px_risk_cookie_max_length: 2048,
14
14
  px_risk_cookie_min_iterations: 500,
15
15
  px_risk_cookie_max_iterations: 5000,
16
- px_logger_severity: LoggerSeverity_1.LoggerSeverity.ERROR,
16
+ px_logger_severity: logger_1.LoggerSeverity.ERROR,
17
17
  px_ip_headers: [],
18
18
  px_extract_ip: null,
19
19
  px_module_enabled: true,
20
- px_module_mode: ModuleMode_1.ModuleMode.MONITOR,
20
+ px_module_mode: utils_1.ModuleMode.MONITOR,
21
21
  px_additional_activity_handler: null,
22
22
  px_advanced_blocking_response_enabled: true,
23
23
  px_max_activity_batch_size: 0,
@@ -2,12 +2,13 @@ import { IConfiguration } from '../config';
2
2
  import { BlockReason, BlockAction } from '../block_handler';
3
3
  import { CustomParameters } from '../custom_parameters';
4
4
  import { FilterReason } from '../filter';
5
- import { IHttpRequest, HttpHeaders } from '../http';
6
5
  import { PXDE } from '../pxde';
7
6
  import { GraphQLData } from '../graphql';
8
7
  import { IBotDefenderToken, TokenOrigin } from '../risk_token';
9
8
  import { VidSource, PassReason, ICookieParser, IUuidGenerator } from '../utils';
10
9
  import { IContext, MobileData, RequestData, ResponseData, RiskApiData, ServerData, TlsData } from './IContext';
10
+ import { IIncomingRequest } from '../http/interfaces/IIncomingRequest';
11
+ import { ReadOnlyHeaders } from '../http';
11
12
  export declare type ContextBaseOptions = {
12
13
  cookieParser?: ICookieParser;
13
14
  uuidGenerator?: IUuidGenerator;
@@ -38,12 +39,12 @@ export declare abstract class ContextBase<OptionsType extends ContextBaseOptions
38
39
  customParameters?: CustomParameters;
39
40
  graphqlData?: GraphQLData[];
40
41
  protected readonly config: IConfiguration;
41
- protected constructor(config: IConfiguration, request: IHttpRequest, options?: OptionsType);
42
+ protected constructor(config: IConfiguration, request: IIncomingRequest, options?: OptionsType);
42
43
  protected abstract createRiskToken(config: IConfiguration, cookies: Record<string, string>, options: OptionsType): IBotDefenderToken;
43
- protected createRequestData(config: IConfiguration, request: IHttpRequest, cookieParser?: ICookieParser): RequestData;
44
+ protected createRequestData(config: IConfiguration, request: IIncomingRequest, cookieParser?: ICookieParser): RequestData;
44
45
  protected getCookies(cookieParser: ICookieParser, ...cookieHeaderValues: string[]): Record<string, string>;
45
- protected extractUserAgentFromHeader(config: IConfiguration, headers: HttpHeaders): string;
46
- protected extractIpFromHeader(config: IConfiguration, headers: HttpHeaders): string;
46
+ protected extractUserAgentFromHeader(config: IConfiguration, headers: ReadOnlyHeaders): string;
47
+ protected extractIpFromHeader(config: IConfiguration, headers: ReadOnlyHeaders): string;
47
48
  protected isMonitored(config: IConfiguration, requestData: RequestData): boolean;
48
49
  protected isSensitive(config: IConfiguration, { url }: RequestData): boolean;
49
50
  protected isAllowedToBypassMonitor(config: IConfiguration, requestData: RequestData): boolean;
@@ -26,16 +26,16 @@ var ContextBase = /** @class */ (function () {
26
26
  }
27
27
  }
28
28
  ContextBase.prototype.createRequestData = function (config, request, cookieParser) {
29
- var _a, _b;
30
29
  if (cookieParser === void 0) { cookieParser = new utils_1.DefaultCookieParser(); }
31
30
  var url = (0, utils_1.getDecodedUrl)(request.url);
32
31
  var method = request.method;
33
32
  var headers = request.headers;
34
- var cookies = this.getCookies(cookieParser, (_a = request.headers.get(http_1.COOKIE_HEADER_NAME)) === null || _a === void 0 ? void 0 : _a[0], (_b = request.headers.get(config.customCookieHeader)) === null || _b === void 0 ? void 0 : _b[0]);
33
+ var cookies = this.getCookies(cookieParser, request.headers.get(http_1.COOKIE_HEADER_NAME), request.headers.get(config.customCookieHeader));
35
34
  var requestCookieNames = Object.keys(cookies);
36
- var userAgent = this.extractUserAgentFromHeader(config, headers);
37
- var ip = this.extractIpFromHeader(config, headers);
38
- return { url: url, method: method, headers: headers, cookies: cookies, ip: ip, userAgent: userAgent, requestCookieNames: requestCookieNames, request: request };
35
+ var readOnlyHeaders = (0, http_1.toReadOnlyHeaders)(headers);
36
+ var userAgent = this.extractUserAgentFromHeader(config, readOnlyHeaders);
37
+ var ip = this.extractIpFromHeader(config, readOnlyHeaders);
38
+ return { url: url, method: method, headers: readOnlyHeaders, cookies: cookies, ip: ip, userAgent: userAgent, requestCookieNames: requestCookieNames, request: request };
39
39
  };
40
40
  ContextBase.prototype.getCookies = function (cookieParser) {
41
41
  var cookieHeaderValues = [];
@@ -50,7 +50,7 @@ var ContextBase = /** @class */ (function () {
50
50
  };
51
51
  ContextBase.prototype.extractUserAgentFromHeader = function (config, headers) {
52
52
  var _a;
53
- var userAgent = ((_a = headers === null || headers === void 0 ? void 0 : headers.get(http_1.USER_AGENT_HEADER_NAME)) === null || _a === void 0 ? void 0 : _a[0]) || '';
53
+ var userAgent = ((_a = headers[http_1.USER_AGENT_HEADER_NAME]) === null || _a === void 0 ? void 0 : _a[0]) || '';
54
54
  if (userAgent.length > config.userAgentMaxLength) {
55
55
  userAgent = userAgent.substring(0, config.userAgentMaxLength);
56
56
  }
@@ -60,7 +60,7 @@ var ContextBase = /** @class */ (function () {
60
60
  var ip;
61
61
  config.ipHeaders.some(function (ipHeader) {
62
62
  var _a;
63
- var headerValue = (_a = headers.get(ipHeader)) === null || _a === void 0 ? void 0 : _a[0];
63
+ var headerValue = (_a = headers[ipHeader]) === null || _a === void 0 ? void 0 : _a[0];
64
64
  if (headerValue) {
65
65
  ip = headerValue;
66
66
  return true;
@@ -80,13 +80,11 @@ var ContextBase = /** @class */ (function () {
80
80
  return (0, utils_1.isRouteInPatterns)(url.pathname, config.sensitiveRoutes);
81
81
  };
82
82
  ContextBase.prototype.isAllowedToBypassMonitor = function (config, requestData) {
83
- var _a;
84
83
  return (config.bypassMonitorHeader &&
85
- ((_a = requestData.headers.get(config.bypassMonitorHeader)) === null || _a === void 0 ? void 0 : _a[0]) === utils_1.BYPASS_MONITOR_HEADER_VALUE);
84
+ requestData.request.headers.get(config.bypassMonitorHeader) === utils_1.BYPASS_MONITOR_HEADER_VALUE);
86
85
  };
87
86
  ContextBase.prototype.setRiskTokenOnContext = function (config, options) {
88
- var _a;
89
- var mobileToken = (_a = this.requestData.headers.get(utils_1.X_PX_AUTHORIZATION_HEADER_NAME)) === null || _a === void 0 ? void 0 : _a[0];
87
+ var mobileToken = this.requestData.request.headers.get(utils_1.X_PX_AUTHORIZATION_HEADER_NAME);
90
88
  if (mobileToken) {
91
89
  this.setMobileTokenOnContext(config, mobileToken, options);
92
90
  }
@@ -95,11 +93,10 @@ var ContextBase = /** @class */ (function () {
95
93
  }
96
94
  };
97
95
  ContextBase.prototype.setMobileTokenOnContext = function (config, mobileToken, options) {
98
- var _a, _b;
99
96
  this.tokenOrigin = risk_token_1.TokenOrigin.HEADER;
100
97
  this.riskToken = this.getMobileToken(config, mobileToken, options);
101
- this.mobileData.originalToken = this.getMobileToken(config, (_a = this.requestData.headers.get(utils_1.X_PX_ORIGINAL_TOKEN_HEADER_NAME)) === null || _a === void 0 ? void 0 : _a[0], options);
102
- this.mobileData.bypassReason = ((_b = this.requestData.headers.get(utils_1.X_PX_BYPASS_REASON_HEADER_NAME)) === null || _b === void 0 ? void 0 : _b[0]) || '';
98
+ this.mobileData.originalToken = this.getMobileToken(config, this.requestData.request.headers.get(utils_1.X_PX_ORIGINAL_TOKEN_HEADER_NAME), options);
99
+ this.mobileData.bypassReason = this.requestData.request.headers.get(utils_1.X_PX_BYPASS_REASON_HEADER_NAME) || '';
103
100
  if (!this.riskToken && /^\d+$/.test(mobileToken)) {
104
101
  this.mobileData.mobileError = mobileToken;
105
102
  }
@@ -1,13 +1,13 @@
1
1
  import { IConfiguration } from '../config';
2
- import { IHttpRequest } from '../http';
3
2
  import { IBotDefenderToken } from '../risk_token';
4
3
  import { IBase64Utils, IHashUtils } from '../utils';
5
4
  import { ContextBase, ContextBaseOptions } from './ContextBase';
5
+ import { IIncomingRequest } from '../http/interfaces/IIncomingRequest';
6
6
  export declare type DefaultTokenV2ContextOptions = {
7
7
  base64Utils?: IBase64Utils;
8
8
  hashUtils?: IHashUtils;
9
9
  } & ContextBaseOptions;
10
10
  export declare class DefaultTokenV2Context extends ContextBase<DefaultTokenV2ContextOptions> {
11
- constructor(config: IConfiguration, httpRequest: IHttpRequest, options?: DefaultTokenV2ContextOptions);
11
+ constructor(config: IConfiguration, httpRequest: IIncomingRequest, options?: DefaultTokenV2ContextOptions);
12
12
  protected createRiskToken(config: IConfiguration, cookies: Record<string, string>, options: DefaultTokenV2ContextOptions): IBotDefenderToken;
13
13
  }
@@ -26,7 +26,7 @@ var DefaultTokenV2Context = /** @class */ (function (_super) {
26
26
  }
27
27
  DefaultTokenV2Context.prototype.createRiskToken = function (config, cookies, options) {
28
28
  if (cookies[risk_token_1.COOKIE_V2_NAME]) {
29
- return new risk_token_1.DefaultBotDefenderTokenV2(config, cookies[risk_token_1.COOKIE_V2_NAME], (options === null || options === void 0 ? void 0 : options.base64Utils) || new utils_1.DefaultBase64Utils(), (options === null || options === void 0 ? void 0 : options.hashUtils) || new utils_1.DefaultHashUtils());
29
+ return new risk_token_1.DefaultBotDefenderTokenV2(config, cookies[risk_token_1.COOKIE_V2_NAME], (options === null || options === void 0 ? void 0 : options.base64Utils) || new utils_1.JSBase64Base64Utils(), (options === null || options === void 0 ? void 0 : options.hashUtils) || new utils_1.CryptoJSHmacUtils());
30
30
  }
31
31
  return null;
32
32
  };
@@ -1,13 +1,13 @@
1
1
  import { IConfiguration } from '../config';
2
- import { IHttpRequest } from '../http';
3
2
  import { IBotDefenderToken } from '../risk_token';
4
3
  import { IHashUtils, ICipherUtils } from '../utils';
5
4
  import { ContextBase, ContextBaseOptions } from './ContextBase';
5
+ import { IIncomingRequest } from '../http/interfaces/IIncomingRequest';
6
6
  export declare type DefaultTokenV3ContextOptions = {
7
7
  cipherUtils: ICipherUtils;
8
8
  hashUtils?: IHashUtils;
9
9
  } & ContextBaseOptions;
10
10
  export declare class DefaultTokenV3Context extends ContextBase<DefaultTokenV3ContextOptions> {
11
- constructor(config: IConfiguration, httpRequest: IHttpRequest, options: DefaultTokenV3ContextOptions);
11
+ constructor(config: IConfiguration, httpRequest: IIncomingRequest, options: DefaultTokenV3ContextOptions);
12
12
  protected createRiskToken(config: IConfiguration, cookies: Record<string, string>, options: DefaultTokenV3ContextOptions): IBotDefenderToken;
13
13
  }
@@ -26,7 +26,7 @@ var DefaultTokenV3Context = /** @class */ (function (_super) {
26
26
  }
27
27
  DefaultTokenV3Context.prototype.createRiskToken = function (config, cookies, options) {
28
28
  if (cookies[risk_token_1.COOKIE_V3_NAME]) {
29
- return new risk_token_1.DefaultBotDefenderTokenV3(config, cookies[risk_token_1.COOKIE_V3_NAME], options.cipherUtils, options.hashUtils || new utils_1.DefaultHashUtils());
29
+ return new risk_token_1.DefaultBotDefenderTokenV3(config, cookies[risk_token_1.COOKIE_V3_NAME], options.cipherUtils, options.hashUtils || new utils_1.CryptoJSHmacUtils());
30
30
  }
31
31
  return null;
32
32
  };
@@ -3,10 +3,12 @@ import { FilterReason } from '../filter';
3
3
  import { S2SCallReason, S2SErrorReason } from '../risk_api';
4
4
  import { PassReason, VidSource } from '../utils';
5
5
  import { BlockAction, BlockReason } from '../block_handler';
6
- import { HttpHeaders, HttpMethod, IHttpRequest } from '../http';
7
6
  import { CustomParameters } from '../custom_parameters';
8
7
  import { PXDE } from '../pxde';
9
- import { GraphQLData } from '../graphql/model/GraphQLData';
8
+ import { GraphQLData } from '../graphql';
9
+ import { HttpMethod } from '../http';
10
+ import { ReadOnlyHeaders } from '../http';
11
+ import { IIncomingRequest } from '../http/interfaces/IIncomingRequest';
10
12
  export declare type RequestData = {
11
13
  /**
12
14
  * The request URL.
@@ -20,7 +22,7 @@ export declare type RequestData = {
20
22
  * An object representing the request headers. The keys are the header names (all lowercase) and the values
21
23
  * are arrays of strings, with each string representing one value associated with the header name.
22
24
  */
23
- headers: HttpHeaders;
25
+ headers: ReadOnlyHeaders;
24
26
  /**
25
27
  * An object representing the request cookies. The keys are the cookie
26
28
  * names and the values are the cookie values.
@@ -41,7 +43,7 @@ export declare type RequestData = {
41
43
  /**
42
44
  * An interface representing the original HTTP request.
43
45
  */
44
- request: IHttpRequest;
46
+ request: IIncomingRequest;
45
47
  /**
46
48
  * The HTTP version used for the request (e.g., 0.9, 1.0, 1.1, 2.0).
47
49
  */
@@ -1,4 +1,4 @@
1
- import { IHttpRequest } from '../http';
2
1
  import { ConfigurationParams } from '../config';
3
2
  import { CustomParameters } from './CustomParameters';
4
- export declare type CustomParametersFunction = (config: ConfigurationParams, httpRequest: IHttpRequest) => CustomParameters | Promise<CustomParameters>;
3
+ import { IIncomingRequest } from '../http/interfaces/IIncomingRequest';
4
+ export declare type CustomParametersFunction = (config: ConfigurationParams, httpRequest: IIncomingRequest) => CustomParameters | Promise<CustomParameters>;