perimeterx-js-core 0.7.1 → 0.8.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 (189) hide show
  1. package/lib/action/utils.js +1 -1
  2. package/lib/activities/HttpActivityClient.d.ts +5 -5
  3. package/lib/activities/HttpActivityClient.js +28 -39
  4. package/lib/activities/HttpBatchedActivityClient.d.ts +2 -2
  5. package/lib/activities/HttpBatchedActivityClient.js +19 -32
  6. package/lib/activities/model/AsyncActivity.d.ts +14 -0
  7. package/lib/activities/model/{ActivityDetails.d.ts → AsyncActivityDetails.d.ts} +6 -23
  8. package/lib/activities/model/CommonActivityDetails.d.ts +40 -0
  9. package/lib/activities/model/CommonActivityDetails.js +1 -0
  10. package/lib/activities/model/HeaderEntry.d.ts +4 -0
  11. package/lib/activities/model/HeaderEntry.js +1 -0
  12. package/lib/activities/model/index.d.ts +4 -2
  13. package/lib/activities/model/index.js +4 -2
  14. package/lib/activities/utils.d.ts +6071 -9
  15. package/lib/activities/utils.js +111 -35
  16. package/lib/additional_activity_handler/AdditionalActivityHandler.d.ts +1 -1
  17. package/lib/additional_activity_handler/AdditionalActivityHandlerUtils.js +4 -12
  18. package/lib/config/ConfigurationParams.d.ts +1 -1
  19. package/lib/config/IConfiguration.d.ts +1 -1
  20. package/lib/config/StaticConfigurationBase.d.ts +1 -1
  21. package/lib/config/StaticConfigurationBase.js +3 -1
  22. package/lib/context/DefaultContext.d.ts +1 -1
  23. package/lib/context/DefaultContext.js +40 -8
  24. package/lib/context/interfaces/RiskApiData.d.ts +4 -0
  25. package/lib/cors/DefaultCors.js +21 -31
  26. package/lib/custom_parameters/CustomParametersUtils.js +3 -12
  27. package/lib/enforcer/EnforcerBase.js +51 -62
  28. package/lib/graphql/DefaultGraphQLParser.js +30 -39
  29. package/lib/http/index.d.ts +0 -1
  30. package/lib/http/index.js +0 -1
  31. package/lib/http/interfaces/IBody.d.ts +3 -2
  32. package/lib/http/interfaces/IIncomingRequest.d.ts +4 -0
  33. package/lib/http/interfaces/IURL.d.ts +3 -0
  34. package/lib/http/interfaces/IURLSearchParams.d.ts +9 -0
  35. package/lib/http/interfaces/IURLSearchParams.js +1 -0
  36. package/lib/http/interfaces/index.d.ts +1 -0
  37. package/lib/http/interfaces/index.js +1 -0
  38. package/lib/http/{impl → utils}/FormDataImpl.js +4 -4
  39. package/lib/http/{impl → utils}/MinimalResponseImpl.js +3 -0
  40. package/lib/http/utils/MinimalResponseUtils.js +5 -7
  41. package/lib/http/utils/MultipartFormDataUtils.js +4 -5
  42. package/lib/http/{impl → utils}/OutgoingRequestImpl.d.ts +1 -1
  43. package/lib/http/{impl → utils}/OutgoingRequestImpl.js +5 -1
  44. package/lib/http/utils/URLUtils.d.ts +7 -0
  45. package/lib/http/utils/URLUtils.js +62 -0
  46. package/lib/http/utils/UrlImpl.d.ts +18 -0
  47. package/lib/http/utils/UrlImpl.js +54 -0
  48. package/lib/http/utils/UrlSearchParamsImpl.d.ts +19 -0
  49. package/lib/http/utils/UrlSearchParamsImpl.js +116 -0
  50. package/lib/http/utils/index.d.ts +6 -0
  51. package/lib/http/utils/index.js +6 -0
  52. package/lib/{utils → impl}/base64/AtobBase64Utils.d.ts +1 -1
  53. package/lib/{utils → impl}/base64/BufferBase64Utils.d.ts +1 -1
  54. package/lib/{utils → impl}/base64/BufferBase64Utils.js +1 -1
  55. package/lib/{utils → impl}/base64/JSBase64Base64Utils.d.ts +1 -1
  56. package/lib/{utils → impl}/cipher/CryptoCipherUtils.d.ts +1 -1
  57. package/lib/impl/cipher/CryptoCipherUtils.js +18 -0
  58. package/lib/{utils → impl}/cipher/SubtleCryptoCipherUtils.d.ts +1 -2
  59. package/lib/impl/cipher/SubtleCryptoCipherUtils.js +38 -0
  60. package/lib/{utils → impl}/hash/CryptoHashUtils.d.ts +1 -2
  61. package/lib/impl/hash/CryptoHashUtils.js +10 -0
  62. package/lib/{utils → impl}/hash/CryptoJSHashUtils.d.ts +1 -2
  63. package/lib/{utils → impl}/hash/CryptoJSHashUtils.js +1 -1
  64. package/lib/{utils → impl}/hash/SubtleCryptoHashUtils.d.ts +1 -2
  65. package/lib/impl/hash/SubtleCryptoHashUtils.js +21 -0
  66. package/lib/{utils → impl}/hmac/CryptoHmacUtils.d.ts +1 -2
  67. package/lib/{utils → impl}/hmac/CryptoHmacUtils.js +2 -1
  68. package/lib/{utils → impl}/hmac/CryptoJSHmacUtils.d.ts +1 -2
  69. package/lib/{utils → impl}/hmac/CryptoJSHmacUtils.js +1 -1
  70. package/lib/{http/impl → impl/http}/phin/PhinHttpClient.d.ts +1 -1
  71. package/lib/impl/http/phin/PhinHttpClient.js +31 -0
  72. package/lib/{http/impl → impl/http}/phin/PhinIncomingResponse.d.ts +2 -2
  73. package/lib/impl/http/phin/PhinIncomingResponse.js +23 -0
  74. package/lib/{utils → impl}/ip_range_checker/DefaultIpRangeChecker.d.ts +1 -1
  75. package/lib/{utils → impl}/request_id_generator/UuidRequestIdGenerator.d.ts +1 -1
  76. package/lib/{utils → impl}/url_parser/DefaultUrlParser.d.ts +4 -4
  77. package/lib/{utils → impl}/url_parser/DefaultUrlParser.js +9 -2
  78. package/lib/logger/HttpLogServiceClient.js +27 -35
  79. package/lib/logger/LoggerBase.js +2 -0
  80. package/lib/phase/impl/AdditionalActivityHandlerPhase.js +4 -15
  81. package/lib/phase/impl/CompositePhase.js +9 -19
  82. package/lib/phase/impl/CreateBlockResponsePhase.js +24 -35
  83. package/lib/phase/impl/DecideActionPhase.js +11 -21
  84. package/lib/phase/impl/EnrichContextFromRequestPhase.js +28 -45
  85. package/lib/phase/impl/EnrichContextFromResponsePhase.js +12 -23
  86. package/lib/phase/impl/FilterPhase.js +3 -13
  87. package/lib/phase/impl/FirstPartyPhase.js +21 -32
  88. package/lib/phase/impl/ModifyIncomingRequestPhase.js +4 -14
  89. package/lib/phase/impl/ModifyOutgoingResponsePhase.js +7 -18
  90. package/lib/phase/impl/ParseTokenPhase.js +5 -15
  91. package/lib/phase/impl/PreflightPhase.js +12 -20
  92. package/lib/phase/impl/RiskApiPhase.js +24 -36
  93. package/lib/phase/impl/SendAsyncActivitiesOnRequestPhase.js +8 -20
  94. package/lib/phase/impl/SendAsyncActivitiesOnResponsePhase.js +4 -14
  95. package/lib/phase/impl/SendLogsPhase.js +8 -18
  96. package/lib/phase/impl/TelemetryPhase.js +9 -21
  97. package/lib/products/account_defender/AccountDefender.js +16 -35
  98. package/lib/products/bot_defender/BotDefender.js +51 -72
  99. package/lib/products/bot_defender/BotDefenderActionData.js +2 -0
  100. package/lib/products/bot_defender/block/DefaultBotDefenderBlocker.d.ts +4 -4
  101. package/lib/products/bot_defender/block/DefaultBotDefenderBlocker.js +5 -3
  102. package/lib/products/bot_defender/block/captcha/CaptchaBlocker.d.ts +7 -4
  103. package/lib/products/bot_defender/block/captcha/CaptchaBlocker.js +12 -8
  104. package/lib/products/bot_defender/block/captcha/HtmlCaptchaBlocker.d.ts +1 -1
  105. package/lib/products/bot_defender/block/captcha/HtmlCaptchaBlocker.js +1 -0
  106. package/lib/products/bot_defender/block/captcha/JsonCaptchaBlocker.d.ts +1 -1
  107. package/lib/products/bot_defender/block/captcha/JsonCaptchaBlocker.js +5 -4
  108. package/lib/products/bot_defender/block/captcha/MobileCaptchaBlocker.d.ts +2 -2
  109. package/lib/products/bot_defender/block/captcha/MobileCaptchaBlocker.js +2 -0
  110. package/lib/products/bot_defender/block/utils.js +1 -2
  111. package/lib/products/bot_defender/filter/DefaultBotDefenderFilter.js +2 -0
  112. package/lib/products/bot_defender/first_party/DefaultBotDefenderFirstParty.js +51 -68
  113. package/lib/products/bot_defender/first_party/constants.d.ts +0 -4
  114. package/lib/products/bot_defender/first_party/constants.js +0 -7
  115. package/lib/products/credential_intelligence/CredentialIntelligence.js +42 -63
  116. package/lib/products/credential_intelligence/endpoint/CredentialEndpoint.js +15 -23
  117. package/lib/products/credential_intelligence/endpoint/CredentialEndpointManager.js +9 -22
  118. package/lib/products/credential_intelligence/endpoint/extractor/BodyCredentialExtractor.d.ts +5 -5
  119. package/lib/products/credential_intelligence/endpoint/extractor/BodyCredentialExtractor.js +22 -33
  120. package/lib/products/credential_intelligence/endpoint/extractor/CustomCredentialExtractor.js +8 -18
  121. package/lib/products/credential_intelligence/endpoint/extractor/HeaderCredentialExtractor.js +2 -0
  122. package/lib/products/credential_intelligence/endpoint/extractor/QueryParamCredentialExtractor.d.ts +1 -1
  123. package/lib/products/credential_intelligence/endpoint/extractor/QueryParamCredentialExtractor.js +11 -16
  124. package/lib/products/credential_intelligence/endpoint/hash_protocol/MultistepHashProtocol.js +11 -21
  125. package/lib/products/credential_intelligence/endpoint/hash_protocol/SingleStepAndMultistepHashProtocol.js +9 -18
  126. package/lib/products/credential_intelligence/endpoint/hash_protocol/SingleStepHashProtocol.js +13 -25
  127. package/lib/products/credential_intelligence/endpoint/login_successful/BodyLoginSuccessfulParser.js +4 -14
  128. package/lib/products/credential_intelligence/endpoint/login_successful/CustomLoginSuccessfulParser.js +10 -20
  129. package/lib/products/credential_intelligence/endpoint/login_successful/HeaderLoginSuccessfulParser.js +7 -16
  130. package/lib/products/credential_intelligence/endpoint/login_successful/LoginSuccessfulParserFactory.js +7 -6
  131. package/lib/products/credential_intelligence/endpoint/login_successful/StatusLoginSuccessfulParser.js +3 -13
  132. package/lib/products/credential_intelligence/endpoint/matcher/ExactPathEndpointMatcher.js +2 -0
  133. package/lib/products/credential_intelligence/endpoint/matcher/RegexPathEndpointMatcher.js +2 -0
  134. package/lib/pxde/DefaultDataEnrichment.js +47 -61
  135. package/lib/pxhd/PXHDUtils.js +2 -2
  136. package/lib/risk_api/client/PostRiskApiClientBase.d.ts +7 -12
  137. package/lib/risk_api/client/PostRiskApiClientBase.js +70 -171
  138. package/lib/risk_api/model/RiskActivity.d.ts +5 -45
  139. package/lib/risk_api/risk_response/IRiskResponse.d.ts +1 -0
  140. package/lib/risk_api/risk_response/RiskResponseBase.d.ts +1 -0
  141. package/lib/risk_api/risk_response/RiskResponseBase.js +20 -33
  142. package/lib/risk_api/risk_response/v2/DefaultRiskResponseV2.d.ts +1 -1
  143. package/lib/risk_api/risk_response/v2/DefaultRiskResponseV2.js +3 -5
  144. package/lib/risk_api/risk_response/v2/RiskResponseV2Payload.d.ts +1 -0
  145. package/lib/risk_api/risk_response/v3/DefaultRiskResponseV3.js +2 -4
  146. package/lib/risk_api/risk_response/v3/RiskResponseV3Payload.d.ts +1 -0
  147. package/lib/risk_token/parser/TokenParserBase.js +25 -36
  148. package/lib/risk_token/token/TokenBase.js +24 -29
  149. package/lib/risk_token/token/v2/DefaultTokenV2.js +34 -49
  150. package/lib/risk_token/token/v3/DefaultTokenV3.js +63 -77
  151. package/lib/telemetry/DefaultTelemetry.js +46 -58
  152. package/lib/utils/base64/index.d.ts +0 -3
  153. package/lib/utils/base64/index.js +0 -3
  154. package/lib/utils/cipher/index.d.ts +1 -3
  155. package/lib/utils/cipher/index.js +1 -2
  156. package/lib/utils/constants.d.ts +2 -1
  157. package/lib/utils/constants.js +2 -1
  158. package/lib/utils/hash/index.d.ts +0 -3
  159. package/lib/utils/hash/index.js +0 -3
  160. package/lib/utils/hmac/index.d.ts +0 -2
  161. package/lib/utils/hmac/index.js +0 -2
  162. package/lib/utils/ip_range_checker/index.d.ts +1 -2
  163. package/lib/utils/ip_range_checker/index.js +1 -1
  164. package/lib/utils/request_id_generator/index.d.ts +1 -2
  165. package/lib/utils/request_id_generator/index.js +1 -1
  166. package/lib/utils/url_parser/index.d.ts +0 -1
  167. package/lib/utils/url_parser/index.js +0 -1
  168. package/lib/utils/utils.d.ts +1 -7
  169. package/lib/utils/utils.js +3 -25
  170. package/package.json +12 -6
  171. package/lib/activities/model/Activity.d.ts +0 -13
  172. package/lib/http/impl/index.d.ts +0 -4
  173. package/lib/http/impl/index.js +0 -4
  174. package/lib/http/impl/phin/PhinHttpClient.js +0 -41
  175. package/lib/http/impl/phin/PhinIncomingResponse.js +0 -38
  176. package/lib/utils/cipher/CryptoCipherUtils.js +0 -28
  177. package/lib/utils/cipher/SubtleCryptoCipherUtils.js +0 -47
  178. package/lib/utils/hash/CryptoHashUtils.js +0 -20
  179. package/lib/utils/hash/SubtleCryptoHashUtils.js +0 -31
  180. /package/lib/activities/model/{Activity.js → AsyncActivity.js} +0 -0
  181. /package/lib/activities/model/{ActivityDetails.js → AsyncActivityDetails.js} +0 -0
  182. /package/lib/http/{impl → utils}/FormDataImpl.d.ts +0 -0
  183. /package/lib/http/{impl → utils}/MinimalResponseImpl.d.ts +0 -0
  184. /package/lib/{utils → impl}/base64/AtobBase64Utils.js +0 -0
  185. /package/lib/{utils → impl}/base64/JSBase64Base64Utils.js +0 -0
  186. /package/lib/{http/impl → impl/http}/phin/index.d.ts +0 -0
  187. /package/lib/{http/impl → impl/http}/phin/index.js +0 -0
  188. /package/lib/{utils → impl}/ip_range_checker/DefaultIpRangeChecker.js +0 -0
  189. /package/lib/{utils → impl}/request_id_generator/UuidRequestIdGenerator.js +0 -0
@@ -1,23 +1,14 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  export class HeaderLoginSuccessfulParser {
2
+ headerName;
3
+ headerValue;
11
4
  constructor(headerName, headerValue) {
12
5
  this.headerName = headerName;
13
6
  this.headerValue = headerValue || null;
14
7
  }
15
- isLoginSuccessful(response) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- if (this.headerValue) {
18
- return response.headers.get(this.headerName) === this.headerValue;
19
- }
20
- return response.headers.has(this.headerName);
21
- });
8
+ async isLoginSuccessful(response) {
9
+ if (this.headerValue) {
10
+ return response.headers.get(this.headerName) === this.headerValue;
11
+ }
12
+ return response.headers.has(this.headerName);
22
13
  }
23
14
  }
@@ -6,19 +6,20 @@ import { StatusLoginSuccessfulParser } from './StatusLoginSuccessfulParser';
6
6
  import { EnforcerError } from '../../../../utils';
7
7
  export class LoginSuccessfulParserFactory {
8
8
  static create(config, endpointConfig) {
9
- var _a;
10
9
  const { ciDefaultLoginSuccessfulReportingMethod, ciDefaultLoginSuccessfulBodyRegex, ciDefaultLoginSuccessfulStatus, ciDefaultLoginSuccessfulCustomCallback, ciDefaultLoginSuccessfulHeaderName, ciDefaultLoginSuccessfulHeaderValue, } = config;
11
10
  const { login_successful_reporting_method, login_successful_callback, login_successful_statuses, login_successful_body_regex, login_successful_header_name, login_successful_header_value, } = endpointConfig;
12
- const reportingMethod = (_a = login_successful_reporting_method !== null && login_successful_reporting_method !== void 0 ? login_successful_reporting_method : ciDefaultLoginSuccessfulReportingMethod) !== null && _a !== void 0 ? _a : LoginSuccessfulReportingMethod.STATUS;
11
+ const reportingMethod = login_successful_reporting_method ??
12
+ ciDefaultLoginSuccessfulReportingMethod ??
13
+ LoginSuccessfulReportingMethod.STATUS;
13
14
  switch (reportingMethod) {
14
15
  case LoginSuccessfulReportingMethod.BODY:
15
- return new BodyLoginSuccessfulParser(login_successful_body_regex !== null && login_successful_body_regex !== void 0 ? login_successful_body_regex : ciDefaultLoginSuccessfulBodyRegex);
16
+ return new BodyLoginSuccessfulParser(login_successful_body_regex ?? ciDefaultLoginSuccessfulBodyRegex);
16
17
  case LoginSuccessfulReportingMethod.CUSTOM:
17
- return new CustomLoginSuccessfulParser(login_successful_callback !== null && login_successful_callback !== void 0 ? login_successful_callback : ciDefaultLoginSuccessfulCustomCallback);
18
+ return new CustomLoginSuccessfulParser(login_successful_callback ?? ciDefaultLoginSuccessfulCustomCallback);
18
19
  case LoginSuccessfulReportingMethod.HEADER:
19
- return new HeaderLoginSuccessfulParser(login_successful_header_name !== null && login_successful_header_name !== void 0 ? login_successful_header_name : ciDefaultLoginSuccessfulHeaderName, login_successful_header_value !== null && login_successful_header_value !== void 0 ? login_successful_header_value : ciDefaultLoginSuccessfulHeaderValue);
20
+ return new HeaderLoginSuccessfulParser(login_successful_header_name ?? ciDefaultLoginSuccessfulHeaderName, login_successful_header_value ?? ciDefaultLoginSuccessfulHeaderValue);
20
21
  case LoginSuccessfulReportingMethod.STATUS:
21
- return new StatusLoginSuccessfulParser(login_successful_statuses !== null && login_successful_statuses !== void 0 ? login_successful_statuses : ciDefaultLoginSuccessfulStatus);
22
+ return new StatusLoginSuccessfulParser(login_successful_statuses ?? ciDefaultLoginSuccessfulStatus);
22
23
  default:
23
24
  throw new EnforcerError('unknown login successful reporting method defined');
24
25
  }
@@ -1,19 +1,9 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  export class StatusLoginSuccessfulParser {
2
+ statuses;
11
3
  constructor(statuses) {
12
4
  this.statuses = statuses;
13
5
  }
14
- isLoginSuccessful(response) {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- return this.statuses.includes(response.status);
17
- });
6
+ async isLoginSuccessful(response) {
7
+ return this.statuses.includes(response.status);
18
8
  }
19
9
  }
@@ -1,4 +1,6 @@
1
1
  export class ExactPathEndpointMatcher {
2
+ pathname;
3
+ method;
2
4
  constructor(pathname, method) {
3
5
  this.pathname = pathname;
4
6
  this.method = method;
@@ -1,4 +1,6 @@
1
1
  export class RegexPathEndpointMatcher {
2
+ pathnameRegex;
3
+ method;
2
4
  constructor(pathname, method) {
3
5
  this.pathnameRegex = pathname;
4
6
  this.method = method;
@@ -1,74 +1,60 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { Algorithm, PXDE_COOKIE_NAME } from '../utils';
11
2
  import { PXDE_COOKIE_DELIMITER, PXDE_COOKIE_PARTS_COUNT, PXDE_HMAC_INDEX, PXDE_PAYLOAD_INDEX } from './constants';
12
3
  export class DefaultDataEnrichment {
4
+ config;
5
+ base64Utils;
6
+ hmacUtils;
13
7
  constructor(config, base64Utils, hmacUtils) {
14
8
  this.config = config;
15
9
  this.base64Utils = base64Utils;
16
10
  this.hmacUtils = hmacUtils;
17
11
  }
18
- handlePxde(context) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- try {
21
- const pxdeCookie = context.requestData.cookies[PXDE_COOKIE_NAME];
22
- if (pxdeCookie) {
23
- return yield this.parsePxde(pxdeCookie);
24
- }
25
- }
26
- catch (e) {
27
- this.config.logger.debug(`unable to parse pxde cookie - ${e}`);
28
- }
29
- return null;
30
- });
12
+ async handlePxde(context) {
13
+ try {
14
+ const pxdeCookie = context.requestData.cookies[PXDE_COOKIE_NAME];
15
+ if (pxdeCookie) {
16
+ return await this.parsePxde(pxdeCookie);
17
+ }
18
+ }
19
+ catch (e) {
20
+ this.config.logger.debug(`unable to parse pxde cookie - ${e}`);
21
+ }
22
+ return null;
31
23
  }
32
- parsePxde(pxdeCookie) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- const pxdeParts = pxdeCookie.split(PXDE_COOKIE_DELIMITER);
35
- if (pxdeParts.length !== PXDE_COOKIE_PARTS_COUNT) {
36
- this.config.logger.debug(`malformed pxde cookie: ${pxdeCookie}`);
37
- return null;
38
- }
39
- const hmac = pxdeParts[PXDE_HMAC_INDEX];
40
- const encodedPayload = pxdeParts[PXDE_PAYLOAD_INDEX];
41
- if (!hmac || !encodedPayload) {
42
- this.config.logger.debug(`malformed pxde cookie: hmac: ${hmac}, payload: ${encodedPayload}`);
43
- return null;
44
- }
45
- return {
46
- pxde: yield this.parsePxdePayload(encodedPayload),
47
- pxdeVerified: yield this.verifyPxdeHmac(hmac, encodedPayload),
48
- };
49
- });
24
+ async parsePxde(pxdeCookie) {
25
+ const pxdeParts = pxdeCookie.split(PXDE_COOKIE_DELIMITER);
26
+ if (pxdeParts.length !== PXDE_COOKIE_PARTS_COUNT) {
27
+ this.config.logger.debug(`malformed pxde cookie: ${pxdeCookie}`);
28
+ return null;
29
+ }
30
+ const hmac = pxdeParts[PXDE_HMAC_INDEX];
31
+ const encodedPayload = pxdeParts[PXDE_PAYLOAD_INDEX];
32
+ if (!hmac || !encodedPayload) {
33
+ this.config.logger.debug(`malformed pxde cookie: hmac: ${hmac}, payload: ${encodedPayload}`);
34
+ return null;
35
+ }
36
+ return {
37
+ pxde: await this.parsePxdePayload(encodedPayload),
38
+ pxdeVerified: await this.verifyPxdeHmac(hmac, encodedPayload),
39
+ };
50
40
  }
51
- verifyPxdeHmac(givenHmac, encodedPayload) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- try {
54
- return givenHmac === this.hmacUtils.createHmac(Algorithm.SHA256, encodedPayload, this.config.cookieSecret);
55
- }
56
- catch (e) {
57
- this.config.logger.debug(`failed verifying pxde hmac: ${e}`);
58
- return false;
59
- }
60
- });
41
+ async verifyPxdeHmac(givenHmac, encodedPayload) {
42
+ try {
43
+ return givenHmac === this.hmacUtils.createHmac(Algorithm.SHA256, encodedPayload, this.config.cookieSecret);
44
+ }
45
+ catch (e) {
46
+ this.config.logger.debug(`failed verifying pxde hmac: ${e}`);
47
+ return false;
48
+ }
61
49
  }
62
- parsePxdePayload(encodedPayload) {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- try {
65
- const decodedPayload = this.base64Utils.base64Decode(encodedPayload);
66
- return JSON.parse(decodedPayload);
67
- }
68
- catch (e) {
69
- this.config.logger.debug(`failed parsing pxde payload: ${e}`);
70
- return null;
71
- }
72
- });
50
+ async parsePxdePayload(encodedPayload) {
51
+ try {
52
+ const decodedPayload = this.base64Utils.base64Decode(encodedPayload);
53
+ return JSON.parse(decodedPayload);
54
+ }
55
+ catch (e) {
56
+ this.config.logger.debug(`failed parsing pxde payload: ${e}`);
57
+ return null;
58
+ }
73
59
  }
74
60
  }
@@ -5,14 +5,14 @@ export var PXHDUtils;
5
5
  PXHDUtils.PXHD_SAMESITE_VALUE = 'Lax';
6
6
  PXHDUtils.PXHD_PATH_VALUE = '/';
7
7
  PXHDUtils.addPxhdToOutgoingResponse = (context, response) => {
8
- if (!(context === null || context === void 0 ? void 0 : context.pxhd)) {
8
+ if (!context?.pxhd) {
9
9
  return;
10
10
  }
11
11
  const setPxhdCookie = PXHDUtils.getPxhdCookieValue(context.pxhd);
12
12
  response.headers.append(SET_COOKIE_HEADER_NAME, setPxhdCookie);
13
13
  };
14
14
  PXHDUtils.addPxhdToMinimalResponse = (context, response) => {
15
- if (context === null || context === void 0 ? void 0 : context.pxhd) {
15
+ if (context?.pxhd) {
16
16
  const setPxhdCookie = PXHDUtils.getPxhdCookieValue(context.pxhd);
17
17
  return MinimalResponseUtils.appendHeader(response, SET_COOKIE_HEADER_NAME, setPxhdCookie);
18
18
  }
@@ -1,6 +1,7 @@
1
1
  import { ReadonlyContext, RiskApiData } from '../../context';
2
2
  import { IConfiguration } from '../../config';
3
- import { IHttpClient, IIncomingResponse } from '../../http';
3
+ import { IHttpClient, IIncomingResponse, ReadonlyHeaders } from '../../http';
4
+ import { HeaderEntry } from '../../activities';
4
5
  import { RiskActivity } from '../model';
5
6
  import { IRiskResponse } from '../risk_response';
6
7
  import { IRiskApiClient } from './IRiskApiClient';
@@ -29,16 +30,10 @@ export declare abstract class PostRiskApiClientBase<Req, Res> implements IRiskAp
29
30
  * @protected
30
31
  */
31
32
  protected finalizeRiskActivity(riskActivity: RiskActivity): RiskActivity;
32
- private addOptionalRiskFields;
33
- private addOptionalRiskFieldsToRoot;
34
- private addOptionalRiskFieldsToAdditional;
35
- private addProductDataToAdditional;
36
- private addCustomParamsToAdditional;
37
- private addTokenDataToAdditional;
38
- private formatRiskHeadersField;
33
+ protected formatRiskHeadersField(headers: ReadonlyHeaders): HeaderEntry[];
39
34
  protected sendRiskActivity(riskActivity: RiskActivity, riskApiData: RiskApiData): Promise<IIncomingResponse>;
40
- private getRiskUrl;
41
- private getRiskHeaders;
42
- private handleS2STimeout;
43
- private handleS2SError;
35
+ protected getRiskUrl(): string;
36
+ protected getRiskHeaders(): ReadonlyHeaders;
37
+ protected handleS2STimeout(riskApiData: RiskApiData): RiskApiData;
38
+ protected handleS2SError(riskApiData: RiskApiData, response: IIncomingResponse, error?: Error): Promise<RiskApiData>;
44
39
  }
@@ -1,19 +1,11 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { ProductName } from '../../products';
11
1
  import { AUTHORIZATION_HEADER_NAME, CONTENT_TYPE_HEADER_NAME, ContentType, HttpMethod, OutgoingRequestImpl, } from '../../http';
12
- import { EnforcerErrorName, getAuthorizationHeader, ModuleMode, removeSensitiveHeaders, transferExistingProperties, } from '../../utils';
2
+ import { EnforcerErrorName, getAuthorizationHeader, removeSensitiveHeaders, } from '../../utils';
3
+ import { createCommonActivityDetails, toHeaderEntryArray } from '../../activities';
13
4
  import { RISK_API_ENDPOINT } from '../constants';
14
5
  import { RiskApiCallResult, RiskStatus, S2SErrorReason } from '../model';
15
- import { TokenParseResult } from '../../risk_token';
16
6
  export class PostRiskApiClientBase {
7
+ config;
8
+ httpClient;
17
9
  constructor(config, httpClient) {
18
10
  this.config = config;
19
11
  this.httpClient = httpClient;
@@ -23,32 +15,30 @@ export class PostRiskApiClientBase {
23
15
  * @param context
24
16
  * @returns Promise<RiskApiData>
25
17
  */
26
- executeRiskApi(context) {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- let response, riskResponse;
29
- const riskApiData = { riskApiCallResult: RiskApiCallResult.NONE };
30
- try {
31
- const riskActivity = this.createRiskActivity(context);
32
- response = yield this.sendRiskActivity(riskActivity, riskApiData);
33
- if ((response === null || response === void 0 ? void 0 : response.status) !== 200) {
34
- return yield this.handleS2SError(riskApiData, response);
35
- }
36
- riskResponse = this.createRiskResponse(response);
37
- riskApiData.riskResponse = riskResponse;
38
- if (!(yield riskResponse.validate())) {
39
- return yield this.handleS2SError(riskApiData, response);
40
- }
41
- this.config.logger.debug(`received risk response, score: ${riskResponse.score}, rtt: ${riskApiData.riskRtt}`);
42
- return riskApiData;
18
+ async executeRiskApi(context) {
19
+ let response, riskResponse;
20
+ const riskApiData = { riskApiCallResult: RiskApiCallResult.NONE };
21
+ try {
22
+ const riskActivity = this.createRiskActivity(context);
23
+ response = await this.sendRiskActivity(riskActivity, riskApiData);
24
+ if (response?.status !== 200) {
25
+ return await this.handleS2SError(riskApiData, response);
43
26
  }
44
- catch (err) {
45
- if (err.name === EnforcerErrorName.ENFORCER_TIMEOUT_ERROR) {
46
- return this.handleS2STimeout(riskApiData);
47
- }
48
- this.config.logger.error(`caught error in risk api: ${err} - ${JSON.stringify(context.requestData.url)}`);
49
- return yield this.handleS2SError(riskApiData, response, err);
27
+ riskResponse = this.createRiskResponse(response);
28
+ riskApiData.riskResponse = riskResponse;
29
+ if (!(await riskResponse.validate())) {
30
+ return await this.handleS2SError(riskApiData, response);
50
31
  }
51
- });
32
+ this.config.logger.debug(`received risk response, score: ${riskResponse.score}, rtt: ${riskApiData.riskRtt}`);
33
+ return riskApiData;
34
+ }
35
+ catch (err) {
36
+ if (err.name === EnforcerErrorName.ENFORCER_TIMEOUT_ERROR) {
37
+ return this.handleS2STimeout(riskApiData);
38
+ }
39
+ this.config.logger.error(`caught error in risk api: ${err} - ${JSON.stringify(context.requestData.url)}`);
40
+ return await this.handleS2SError(riskApiData, response, err);
41
+ }
52
42
  }
53
43
  /**
54
44
  * Creates the RiskActivity payload
@@ -57,26 +47,20 @@ export class PostRiskApiClientBase {
57
47
  * @protected
58
48
  */
59
49
  createRiskActivity(context) {
60
- var _a, _b, _c;
61
50
  const riskActivity = {
51
+ vid: context.vid,
52
+ client_uuid: context.uuid,
53
+ pxhd: context.pxhd?.value,
62
54
  request: {
63
- ip: context.requestData.ip,
55
+ socket_ip: context.requestData.ip,
64
56
  headers: this.formatRiskHeadersField(context.requestData.headers),
65
57
  url: context.requestData.rawUrl,
66
58
  },
67
59
  additional: {
68
- s2s_call_reason: ((_a = context.reasons) === null || _a === void 0 ? void 0 : _a[ProductName.BOT_DEFENDER]) ||
69
- ((_b = context.reasons) === null || _b === void 0 ? void 0 : _b[ProductName.CREDENTIAL_INTELLIGENCE]),
70
- module_version: this.config.moduleVersion,
71
- http_method: context.requestData.method,
72
- http_version: context.requestData.httpVersion,
73
- risk_mode: ((_c = context.productData.bd) === null || _c === void 0 ? void 0 : _c.isMonitoredRequest) ? ModuleMode.MONITOR : ModuleMode.ACTIVE_BLOCKING,
74
- cookie_origin: context.tokenOrigin,
75
- request_cookie_names: context.requestData.requestCookieNames.concat(),
76
- request_id: context.requestId,
60
+ ...createCommonActivityDetails(this.config, context),
61
+ s2s_call_reason: context.riskApiData.s2sCallReason,
77
62
  },
78
63
  };
79
- this.addOptionalRiskFields(riskActivity, context);
80
64
  return this.finalizeRiskActivity(riskActivity);
81
65
  }
82
66
  /**
@@ -88,105 +72,23 @@ export class PostRiskApiClientBase {
88
72
  finalizeRiskActivity(riskActivity) {
89
73
  return riskActivity;
90
74
  }
91
- addOptionalRiskFields(riskActivity, context) {
92
- this.addOptionalRiskFieldsToRoot(riskActivity, context);
93
- this.addOptionalRiskFieldsToAdditional(riskActivity, context);
94
- this.addProductDataToAdditional(riskActivity, context.productData);
95
- this.addTokenDataToAdditional(riskActivity, context.tokenData);
96
- this.addCustomParamsToAdditional(riskActivity, context);
97
- }
98
- addOptionalRiskFieldsToRoot(riskActivity, context) {
99
- var _a;
100
- transferExistingProperties(context, riskActivity, {
101
- vid: 'vid',
102
- uuid: 'uuid',
103
- });
104
- if ((_a = context.pxhd) === null || _a === void 0 ? void 0 : _a.value) {
105
- riskActivity.pxhd = context.pxhd.value;
106
- }
107
- }
108
- addOptionalRiskFieldsToAdditional(riskActivity, context) {
109
- transferExistingProperties(context, riskActivity.additional, {
110
- vidSource: 'enforcer_vid_source',
111
- graphqlData: 'graphql_operations',
112
- });
113
- transferExistingProperties(context.serverData, riskActivity.additional, {
114
- region: 'server_info_region',
115
- datacenter: 'server_info_datacenter',
116
- });
117
- transferExistingProperties(context.tlsData, riskActivity.additional, {
118
- tlsProtocol: 'tls_protocol',
119
- tlsServer: 'tls_server',
120
- tlsCipher: 'tls_cipher',
121
- tlsCiphersSha: 'tls_ciphers_sha',
122
- tlsExtensionSha: 'tls_extension_sha',
123
- tlsPreferredCiphers: 'tls_preferred_ciphers',
124
- tlsJa3Fingerprint: 'tls_ja3_fingerprint',
125
- });
126
- }
127
- addProductDataToAdditional(riskActivity, productData) {
128
- transferExistingProperties(productData.ad, riskActivity.additional, {
129
- appUserId: 'app_user_id',
130
- additionalFields: 'jwt_additional_fields',
131
- crossTabSession: 'cross_tab_session',
132
- });
133
- transferExistingProperties(productData.ci, riskActivity.additional, {
134
- hashedUsername: 'user',
135
- hashedPassword: 'pass',
136
- ciVersion: 'ci_version',
137
- ssoStep: 'sso_step',
138
- });
139
- }
140
- addCustomParamsToAdditional(riskActivity, context) {
141
- if (context.customParameters) {
142
- Object.assign(riskActivity.additional, context.customParameters);
143
- }
144
- }
145
- addTokenDataToAdditional(riskActivity, { token, mobileData }) {
146
- if (token) {
147
- if (token.isValid()) {
148
- riskActivity.additional.px_cookie = token.getPayloadString();
149
- riskActivity.additional.px_cookie_hmac = token.hmac;
150
- }
151
- else {
152
- riskActivity.additional.px_orig_cookie = token.getTokenString();
153
- }
154
- }
155
- if (mobileData) {
156
- transferExistingProperties(mobileData, riskActivity.additional, {
157
- originalToken: 'original_token',
158
- decodedOriginalToken: 'px_decoded_original_token',
159
- });
160
- if (mobileData.originalTokenParseResult === TokenParseResult.DECRYPTION_FAILED) {
161
- riskActivity.additional.original_token_error = 'cookie_decryption_failed';
162
- }
163
- else if (mobileData.originalTokenParseResult === TokenParseResult.VALIDATION_FAILED) {
164
- riskActivity.additional.original_token_error = 'cookie_validation_failed';
165
- }
166
- }
167
- }
168
75
  formatRiskHeadersField(headers) {
169
76
  const headersWithoutSensitive = removeSensitiveHeaders(headers, this.config.sensitiveHeaders);
170
- return Object.entries(headersWithoutSensitive).flatMap(([key, values]) => values.map((value) => ({
171
- name: key,
172
- value: value,
173
- })));
174
- }
175
- sendRiskActivity(riskActivity, riskApiData) {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- const url = this.getRiskUrl();
178
- const headers = this.getRiskHeaders();
179
- const body = JSON.stringify(riskActivity);
180
- const method = HttpMethod.POST;
181
- const riskRequest = new OutgoingRequestImpl({ url, method, headers, body });
182
- this.config.logger.debug(`sending risk api to ${url}`);
183
- const startTime = Date.now();
184
- const response = yield this.httpClient.send(riskRequest, { timeoutMs: this.config.s2sTimeout });
185
- const endTime = Date.now();
186
- riskApiData.riskApiCallResult = RiskApiCallResult.SUCCESSFUL;
187
- riskApiData.riskRtt = endTime - startTime;
188
- return response;
189
- });
77
+ return toHeaderEntryArray(headersWithoutSensitive);
78
+ }
79
+ async sendRiskActivity(riskActivity, riskApiData) {
80
+ const url = this.getRiskUrl();
81
+ const headers = this.getRiskHeaders();
82
+ const body = JSON.stringify(riskActivity);
83
+ const method = HttpMethod.POST;
84
+ const riskRequest = new OutgoingRequestImpl({ url, method, headers, body });
85
+ this.config.logger.debug(`sending risk api to ${url}`);
86
+ const startTime = Date.now();
87
+ const response = await this.httpClient.send(riskRequest, { timeoutMs: this.config.s2sTimeout });
88
+ const endTime = Date.now();
89
+ riskApiData.riskApiCallResult = RiskApiCallResult.SUCCESSFUL;
90
+ riskApiData.riskRtt = endTime - startTime;
91
+ return response;
190
92
  }
191
93
  getRiskUrl() {
192
94
  return `${this.config.backendScoreApiUrl}${RISK_API_ENDPOINT}`;
@@ -201,35 +103,32 @@ export class PostRiskApiClientBase {
201
103
  riskApiData.riskApiCallResult = RiskApiCallResult.TIMEOUT;
202
104
  return riskApiData;
203
105
  }
204
- handleS2SError(riskApiData, response, error) {
205
- var _a, _b, _c;
206
- return __awaiter(this, void 0, void 0, function* () {
207
- riskApiData.riskApiCallResult = RiskApiCallResult.ERROR;
208
- riskApiData.errorReason = S2SErrorReason.UNKNOWN_ERROR;
209
- if (response || riskApiData.riskResponse) {
210
- riskApiData.errorHttpStatus = response.status;
211
- riskApiData.errorMessage = ((_a = riskApiData.riskResponse) === null || _a === void 0 ? void 0 : _a.message) || `response body: ${yield response.text()}`;
212
- if (response.status === 200) {
213
- if (((_b = riskApiData.riskResponse) === null || _b === void 0 ? void 0 : _b.status) === RiskStatus.FAILURE) {
214
- riskApiData.errorReason = S2SErrorReason.REQUEST_FAILED_ON_SERVER;
215
- }
216
- else if (!(yield ((_c = riskApiData.riskResponse) === null || _c === void 0 ? void 0 : _c.validate()))) {
217
- riskApiData.errorReason = S2SErrorReason.INVALID_RESPONSE;
218
- }
219
- }
220
- else if (response.status >= 400 && response.status < 500) {
221
- riskApiData.errorReason = S2SErrorReason.BAD_REQUEST;
106
+ async handleS2SError(riskApiData, response, error) {
107
+ riskApiData.riskApiCallResult = RiskApiCallResult.ERROR;
108
+ riskApiData.errorReason = S2SErrorReason.UNKNOWN_ERROR;
109
+ if (response || riskApiData.riskResponse) {
110
+ riskApiData.errorHttpStatus = response.status;
111
+ riskApiData.errorMessage = riskApiData.riskResponse?.message || `response body: ${await response.text()}`;
112
+ if (response.status === 200) {
113
+ if (riskApiData.riskResponse?.status === RiskStatus.FAILURE) {
114
+ riskApiData.errorReason = S2SErrorReason.REQUEST_FAILED_ON_SERVER;
222
115
  }
223
- else if (response.status >= 500 && response.status < 600) {
224
- riskApiData.errorReason = S2SErrorReason.SERVER_ERROR;
116
+ else if (!(await riskApiData.riskResponse?.validate())) {
117
+ riskApiData.errorReason = S2SErrorReason.INVALID_RESPONSE;
225
118
  }
226
119
  }
227
- if (error) {
228
- const errorMessage = `${error}`;
229
- const existingMessage = riskApiData.errorMessage;
230
- riskApiData.errorMessage = existingMessage ? `${existingMessage}, ${errorMessage}` : errorMessage;
120
+ else if (response.status >= 400 && response.status < 500) {
121
+ riskApiData.errorReason = S2SErrorReason.BAD_REQUEST;
231
122
  }
232
- return riskApiData;
233
- });
123
+ else if (response.status >= 500 && response.status < 600) {
124
+ riskApiData.errorReason = S2SErrorReason.SERVER_ERROR;
125
+ }
126
+ }
127
+ if (error) {
128
+ const errorMessage = `${error}`;
129
+ const existingMessage = riskApiData.errorMessage;
130
+ riskApiData.errorMessage = existingMessage ? `${existingMessage}, ${errorMessage}` : errorMessage;
131
+ }
132
+ return riskApiData;
234
133
  }
235
134
  }
@@ -1,56 +1,16 @@
1
- import { ModuleMode, VidSource } from '../../utils';
2
- import { TokenOrigin } from '../../risk_token';
3
- import { CustomParameters } from '../../custom_parameters';
4
- import { GraphQLData } from '../../graphql/';
5
- import { CredentialIntelligenceVersion, SsoStep } from '../../products';
6
- export type HeaderEntry = {
7
- name: string;
8
- value: string;
9
- };
1
+ import { HeaderEntry, CommonActivityDetails } from '../../activities';
10
2
  export type RiskRequestData = {
11
- ip: string;
3
+ socket_ip: string;
12
4
  url: string;
13
5
  headers: HeaderEntry[];
14
6
  };
15
7
  export type RiskAdditionalData = {
16
- request_id: string;
17
- module_version: string;
18
8
  s2s_call_reason: string;
19
- risk_mode: ModuleMode;
20
- http_method: string;
21
- http_version?: string;
22
- px_orig_cookie?: string;
23
- px_cookie?: string;
24
- px_cookie_hmac?: string;
25
- tls_protocol?: string;
26
- tls_server?: string;
27
- tls_cipher?: string;
28
- tls_ciphers_sha?: string;
29
- tls_extension_sha?: string;
30
- tls_preferred_ciphers?: string;
31
- tls_ja3_fingerprint?: string;
32
- enforcer_vid_source?: VidSource;
33
- original_uuid?: string;
34
- original_token_error?: string;
35
- original_token?: string;
36
- px_decoded_original_token?: string;
37
- cookie_origin?: TokenOrigin;
38
- request_cookie_names?: string[];
39
- server_info_region?: string;
40
- server_info_datacenter?: string;
41
- cross_tab_session?: string;
42
- app_user_id?: string;
43
- jwt_additional_fields?: Record<string, any>;
44
- graphql_operations?: GraphQLData[];
45
- user?: string;
46
- pass?: string;
47
- ci_version?: CredentialIntelligenceVersion;
48
- sso_step?: SsoStep;
49
- } & CustomParameters;
9
+ };
50
10
  export type RiskActivity = {
51
11
  vid?: string;
52
- uuid?: string;
12
+ client_uuid?: string;
53
13
  pxhd?: string;
54
14
  request: RiskRequestData;
55
- additional: RiskAdditionalData;
15
+ additional: RiskAdditionalData & CommonActivityDetails;
56
16
  };
@@ -11,5 +11,6 @@ export interface IRiskResponse {
11
11
  readonly pxhdDomain?: string;
12
12
  readonly message?: string;
13
13
  readonly dataEnrichment?: PXDE;
14
+ readonly additionalRiskInfo?: string;
14
15
  validate(): AsyncOrSync<boolean>;
15
16
  }
@@ -19,4 +19,5 @@ export declare abstract class RiskResponseBase<TokenV extends TokenVersion> impl
19
19
  get uuid(): string;
20
20
  get dataEnrichment(): PXDE;
21
21
  get pxhdDomain(): string;
22
+ get additionalRiskInfo(): string;
22
23
  }